Compare commits

..

2 Commits

Author SHA1 Message Date
Gregory Becker
1be0cf0fdf apple clang package 2023-05-30 16:10:59 -07:00
Gregory Becker
f60cb4090b wip: apple-clang only and now parallelism 2023-05-23 19:57:02 +02:00
465 changed files with 1841 additions and 3702 deletions

View File

@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b # @v2
with:
python-version: ${{inputs.python_version}}
- name: Install Python packages
@@ -38,7 +38,7 @@ jobs:
run: |
. share/spack/setup-env.sh
$(which spack) audit packages
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # @v2.1.0
- uses: codecov/codecov-action@894ff025c7b54547a9a2a1e9f228beae737ad3c2 # @v2.1.0
if: ${{ inputs.with_coverage == 'true' }}
with:
flags: unittests,linux,audits

View File

@@ -1,31 +0,0 @@
name: Windows Paraview Nightly
on:
schedule:
- cron: '0 2 * * *' # Run at 2 am
defaults:
run:
shell:
powershell Invoke-Expression -Command "./share/spack/qa/windows_test_setup.ps1"; {0}
jobs:
build-paraview-deps:
runs-on: windows-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0
with:
python-version: 3.9
- name: Install Python packages
run: |
python -m pip install --upgrade pip six pywin32 setuptools coverage
- name: Build Test
run: |
spack compiler find
spack external find cmake ninja win-sdk win-wdk wgl msmpi
spack -d install -y --cdash-upload-url https://cdash.spack.io/submit.php?project=Spack+on+Windows --cdash-track Nightly --only dependencies paraview
exit 0

View File

@@ -50,7 +50,7 @@ jobs:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b # @v2
with:
python-version: ${{ matrix.python-version }}
- name: Install System packages
@@ -87,7 +87,7 @@ jobs:
UNIT_TEST_COVERAGE: ${{ matrix.python-version == '3.11' }}
run: |
share/spack/qa/run-unit-tests
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d
- uses: codecov/codecov-action@894ff025c7b54547a9a2a1e9f228beae737ad3c2
with:
flags: unittests,linux,${{ matrix.concretizer }}
# Test shell integration
@@ -97,7 +97,7 @@ jobs:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b # @v2
with:
python-version: '3.11'
- name: Install System packages
@@ -118,7 +118,7 @@ jobs:
COVERAGE: true
run: |
share/spack/qa/run-shell-tests
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d
- uses: codecov/codecov-action@894ff025c7b54547a9a2a1e9f228beae737ad3c2
with:
flags: shelltests,linux
@@ -155,7 +155,7 @@ jobs:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b # @v2
with:
python-version: '3.11'
- name: Install System packages
@@ -176,7 +176,7 @@ jobs:
SPACK_TEST_SOLVER: clingo
run: |
share/spack/qa/run-unit-tests
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # @v2.1.0
- uses: codecov/codecov-action@894ff025c7b54547a9a2a1e9f228beae737ad3c2 # @v2.1.0
with:
flags: unittests,linux,clingo
# Run unit tests on MacOS
@@ -189,7 +189,7 @@ jobs:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b # @v2
with:
python-version: ${{ matrix.python-version }}
- name: Install Python packages
@@ -211,6 +211,6 @@ jobs:
$(which spack) solve zlib
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 --cov-report=xml:coverage.xml "${common_args[@]}"
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d
- uses: codecov/codecov-action@894ff025c7b54547a9a2a1e9f228beae737ad3c2
with:
flags: unittests,macos

View File

@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b # @v2
with:
python-version: '3.11'
cache: 'pip'
@@ -38,7 +38,7 @@ jobs:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b # @v2
with:
python-version: '3.11'
cache: 'pip'

View File

@@ -18,7 +18,7 @@ jobs:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b
with:
python-version: 3.9
- name: Install Python packages
@@ -33,7 +33,7 @@ jobs:
./share/spack/qa/validate_last_exit.ps1
coverage combine -a
coverage xml
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d
- uses: codecov/codecov-action@894ff025c7b54547a9a2a1e9f228beae737ad3c2
with:
flags: unittests,windows
unit-tests-cmd:
@@ -42,7 +42,7 @@ jobs:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b
with:
python-version: 3.9
- name: Install Python packages
@@ -57,7 +57,7 @@ jobs:
./share/spack/qa/validate_last_exit.ps1
coverage combine -a
coverage xml
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d
- uses: codecov/codecov-action@894ff025c7b54547a9a2a1e9f228beae737ad3c2
with:
flags: unittests,windows
build-abseil:
@@ -66,7 +66,7 @@ jobs:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b
with:
python-version: 3.9
- name: Install Python packages

View File

@@ -317,7 +317,7 @@ installed, but you know that new compilers have been added to your
.. code-block:: console
$ module load gcc/4.9.0
$ module load gcc-4.9.0
$ spack compiler find
==> Added 1 new compiler to ~/.spack/linux/compilers.yaml
gcc@4.9.0

View File

@@ -35,27 +35,27 @@ showing lots of installed packages:
$ module avail
--------------------------------------------------------------- ~/spack/share/spack/modules/linux-ubuntu14-x86_64 ---------------------------------------------------------------
autoconf/2.69-gcc-4.8-qextxkq hwloc/1.11.6-gcc-6.3.0-akcisez m4/1.4.18-gcc-4.8-ev2znoc openblas/0.2.19-gcc-6.3.0-dhkmed6 py-setuptools/34.2.0-gcc-6.3.0-fadur4s
automake/1.15-gcc-4.8-maqvukj isl/0.18-gcc-4.8-afi6taq m4/1.4.18-gcc-6.3.0-uppywnz openmpi/2.1.0-gcc-6.3.0-go2s4z5 py-six/1.10.0-gcc-6.3.0-p4dhkaw
binutils/2.28-gcc-4.8-5s7c6rs libiconv/1.15-gcc-4.8-at46wg3 mawk/1.3.4-gcc-4.8-acjez57 openssl/1.0.2k-gcc-4.8-dkls5tk python/2.7.13-gcc-6.3.0-tyehea7
bison/3.0.4-gcc-4.8-ek4luo5 libpciaccess/0.13.4-gcc-6.3.0-gmufnvh mawk/1.3.4-gcc-6.3.0-ostdoms openssl/1.0.2k-gcc-6.3.0-gxgr5or readline/7.0-gcc-4.8-xhufqhn
bzip2/1.0.6-gcc-4.8-iffrxzn libsigsegv/2.11-gcc-4.8-pp2cvte mpc/1.0.3-gcc-4.8-g5mztc5 pcre/8.40-gcc-4.8-r5pbrxb readline/7.0-gcc-6.3.0-zzcyicg
bzip2/1.0.6-gcc-6.3.0-bequudr libsigsegv/2.11-gcc-6.3.0-7enifnh mpfr/3.1.5-gcc-4.8-o7xm7az perl/5.24.1-gcc-4.8-dg5j65u sqlite/3.8.5-gcc-6.3.0-6zoruzj
cmake/3.7.2-gcc-6.3.0-fowuuby libtool/2.4.6-gcc-4.8-7a523za mpich/3.2-gcc-6.3.0-dmvd3aw perl/5.24.1-gcc-6.3.0-6uzkpt6 tar/1.29-gcc-4.8-wse2ass
curl/7.53.1-gcc-4.8-3fz46n6 libtool/2.4.6-gcc-6.3.0-n7zmbzt ncurses/6.0-gcc-4.8-dcpe7ia pkg-config/0.29.2-gcc-4.8-ib33t75 tcl/8.6.6-gcc-4.8-tfxzqbr
expat/2.2.0-gcc-4.8-mrv6bd4 libxml2/2.9.4-gcc-4.8-ryzxnsu ncurses/6.0-gcc-6.3.0-ucbhcdy pkg-config/0.29.2-gcc-6.3.0-jpgubk3 util-macros/1.19.1-gcc-6.3.0-xorz2x2
flex/2.6.3-gcc-4.8-yf345oo libxml2/2.9.4-gcc-6.3.0-rltzsdh netlib-lapack/3.6.1-gcc-6.3.0-js33dog py-appdirs/1.4.0-gcc-6.3.0-jxawmw7 xz/5.2.3-gcc-4.8-mew4log
gcc/6.3.0-gcc-4.8-24puqve lmod/7.4.1-gcc-4.8-je4srhr netlib-scalapack/2.0.2-gcc-6.3.0-5aidk4l py-numpy/1.12.0-gcc-6.3.0-oemmoeu xz/5.2.3-gcc-6.3.0-3vqeuvb
gettext/0.19.8.1-gcc-4.8-yymghlh lua/5.3.4-gcc-4.8-im75yaz netlib-scalapack/2.0.2-gcc-6.3.0-hjsemcn py-packaging/16.8-gcc-6.3.0-i2n3dtl zip/3.0-gcc-4.8-rwar22d
gmp/6.1.2-gcc-4.8-5ub2wu5 lua-luafilesystem/1_6_3-gcc-4.8-wkey3nl netlib-scalapack/2.0.2-gcc-6.3.0-jva724b py-pyparsing/2.1.10-gcc-6.3.0-tbo6gmw zlib/1.2.11-gcc-4.8-pgxsxv7
help2man/1.47.4-gcc-4.8-kcnqmau lua-luaposix/33.4.0-gcc-4.8-mdod2ry netlib-scalapack/2.0.2-gcc-6.3.0-rgqfr6d py-scipy/0.19.0-gcc-6.3.0-kr7nat4 zlib/1.2.11-gcc-6.3.0-7cqp6cj
autoconf-2.69-gcc-4.8-qextxkq hwloc-1.11.6-gcc-6.3.0-akcisez m4-1.4.18-gcc-4.8-ev2znoc openblas-0.2.19-gcc-6.3.0-dhkmed6 py-setuptools-34.2.0-gcc-6.3.0-fadur4s
automake-1.15-gcc-4.8-maqvukj isl-0.18-gcc-4.8-afi6taq m4-1.4.18-gcc-6.3.0-uppywnz openmpi-2.1.0-gcc-6.3.0-go2s4z5 py-six-1.10.0-gcc-6.3.0-p4dhkaw
binutils-2.28-gcc-4.8-5s7c6rs libiconv-1.15-gcc-4.8-at46wg3 mawk-1.3.4-gcc-4.8-acjez57 openssl-1.0.2k-gcc-4.8-dkls5tk python-2.7.13-gcc-6.3.0-tyehea7
bison-3.0.4-gcc-4.8-ek4luo5 libpciaccess-0.13.4-gcc-6.3.0-gmufnvh mawk-1.3.4-gcc-6.3.0-ostdoms openssl-1.0.2k-gcc-6.3.0-gxgr5or readline-7.0-gcc-4.8-xhufqhn
bzip2-1.0.6-gcc-4.8-iffrxzn libsigsegv-2.11-gcc-4.8-pp2cvte mpc-1.0.3-gcc-4.8-g5mztc5 pcre-8.40-gcc-4.8-r5pbrxb readline-7.0-gcc-6.3.0-zzcyicg
bzip2-1.0.6-gcc-6.3.0-bequudr libsigsegv-2.11-gcc-6.3.0-7enifnh mpfr-3.1.5-gcc-4.8-o7xm7az perl-5.24.1-gcc-4.8-dg5j65u sqlite-3.8.5-gcc-6.3.0-6zoruzj
cmake-3.7.2-gcc-6.3.0-fowuuby libtool-2.4.6-gcc-4.8-7a523za mpich-3.2-gcc-6.3.0-dmvd3aw perl-5.24.1-gcc-6.3.0-6uzkpt6 tar-1.29-gcc-4.8-wse2ass
curl-7.53.1-gcc-4.8-3fz46n6 libtool-2.4.6-gcc-6.3.0-n7zmbzt ncurses-6.0-gcc-4.8-dcpe7ia pkg-config-0.29.2-gcc-4.8-ib33t75 tcl-8.6.6-gcc-4.8-tfxzqbr
expat-2.2.0-gcc-4.8-mrv6bd4 libxml2-2.9.4-gcc-4.8-ryzxnsu ncurses-6.0-gcc-6.3.0-ucbhcdy pkg-config-0.29.2-gcc-6.3.0-jpgubk3 util-macros-1.19.1-gcc-6.3.0-xorz2x2
flex-2.6.3-gcc-4.8-yf345oo libxml2-2.9.4-gcc-6.3.0-rltzsdh netlib-lapack-3.6.1-gcc-6.3.0-js33dog py-appdirs-1.4.0-gcc-6.3.0-jxawmw7 xz-5.2.3-gcc-4.8-mew4log
gcc-6.3.0-gcc-4.8-24puqve lmod-7.4.1-gcc-4.8-je4srhr netlib-scalapack-2.0.2-gcc-6.3.0-5aidk4l py-numpy-1.12.0-gcc-6.3.0-oemmoeu xz-5.2.3-gcc-6.3.0-3vqeuvb
gettext-0.19.8.1-gcc-4.8-yymghlh lua-5.3.4-gcc-4.8-im75yaz netlib-scalapack-2.0.2-gcc-6.3.0-hjsemcn py-packaging-16.8-gcc-6.3.0-i2n3dtl zip-3.0-gcc-4.8-rwar22d
gmp-6.1.2-gcc-4.8-5ub2wu5 lua-luafilesystem-1_6_3-gcc-4.8-wkey3nl netlib-scalapack-2.0.2-gcc-6.3.0-jva724b py-pyparsing-2.1.10-gcc-6.3.0-tbo6gmw zlib-1.2.11-gcc-4.8-pgxsxv7
help2man-1.47.4-gcc-4.8-kcnqmau lua-luaposix-33.4.0-gcc-4.8-mdod2ry netlib-scalapack-2.0.2-gcc-6.3.0-rgqfr6d py-scipy-0.19.0-gcc-6.3.0-kr7nat4 zlib-1.2.11-gcc-6.3.0-7cqp6cj
The names should look familiar, as they resemble the output from ``spack find``.
For example, you could type the following command to load the ``cmake`` module:
.. code-block:: console
$ module load cmake/3.7.2-gcc-6.3.0-fowuuby
$ module load cmake-3.7.2-gcc-6.3.0-fowuuby
Neither of these is particularly pretty, easy to remember, or easy to
type. Luckily, Spack offers many facilities for customizing the module
@@ -779,35 +779,35 @@ cut-and-pasted into a shell script. For example:
$ spack module tcl loads --dependencies py-numpy git
# bzip2@1.0.6%gcc@4.9.3=linux-x86_64
module load bzip2/1.0.6-gcc-4.9.3-ktnrhkrmbbtlvnagfatrarzjojmkvzsx
module load bzip2-1.0.6-gcc-4.9.3-ktnrhkrmbbtlvnagfatrarzjojmkvzsx
# ncurses@6.0%gcc@4.9.3=linux-x86_64
module load ncurses/6.0-gcc-4.9.3-kaazyneh3bjkfnalunchyqtygoe2mncv
module load ncurses-6.0-gcc-4.9.3-kaazyneh3bjkfnalunchyqtygoe2mncv
# zlib@1.2.8%gcc@4.9.3=linux-x86_64
module load zlib/1.2.8-gcc-4.9.3-v3ufwaahjnviyvgjcelo36nywx2ufj7z
module load zlib-1.2.8-gcc-4.9.3-v3ufwaahjnviyvgjcelo36nywx2ufj7z
# sqlite@3.8.5%gcc@4.9.3=linux-x86_64
module load sqlite/3.8.5-gcc-4.9.3-a3eediswgd5f3rmto7g3szoew5nhehbr
module load sqlite-3.8.5-gcc-4.9.3-a3eediswgd5f3rmto7g3szoew5nhehbr
# readline@6.3%gcc@4.9.3=linux-x86_64
module load readline/6.3-gcc-4.9.3-se6r3lsycrwxyhreg4lqirp6xixxejh3
module load readline-6.3-gcc-4.9.3-se6r3lsycrwxyhreg4lqirp6xixxejh3
# python@3.5.1%gcc@4.9.3=linux-x86_64
module load python/3.5.1-gcc-4.9.3-5q5rsrtjld4u6jiicuvtnx52m7tfhegi
module load python-3.5.1-gcc-4.9.3-5q5rsrtjld4u6jiicuvtnx52m7tfhegi
# py-setuptools@20.5%gcc@4.9.3=linux-x86_64
module load py-setuptools/20.5-gcc-4.9.3-4qr2suj6p6glepnedmwhl4f62x64wxw2
module load py-setuptools-20.5-gcc-4.9.3-4qr2suj6p6glepnedmwhl4f62x64wxw2
# py-nose@1.3.7%gcc@4.9.3=linux-x86_64
module load py-nose/1.3.7-gcc-4.9.3-pwhtjw2dvdvfzjwuuztkzr7b4l6zepli
module load py-nose-1.3.7-gcc-4.9.3-pwhtjw2dvdvfzjwuuztkzr7b4l6zepli
# openblas@0.2.17%gcc@4.9.3+shared=linux-x86_64
module load openblas/0.2.17-gcc-4.9.3-pw6rmlom7apfsnjtzfttyayzc7nx5e7y
module load openblas-0.2.17-gcc-4.9.3-pw6rmlom7apfsnjtzfttyayzc7nx5e7y
# py-numpy@1.11.0%gcc@4.9.3+blas+lapack=linux-x86_64
module load py-numpy/1.11.0-gcc-4.9.3-mulodttw5pcyjufva4htsktwty4qd52r
module load py-numpy-1.11.0-gcc-4.9.3-mulodttw5pcyjufva4htsktwty4qd52r
# curl@7.47.1%gcc@4.9.3=linux-x86_64
module load curl/7.47.1-gcc-4.9.3-ohz3fwsepm3b462p5lnaquv7op7naqbi
module load curl-7.47.1-gcc-4.9.3-ohz3fwsepm3b462p5lnaquv7op7naqbi
# autoconf@2.69%gcc@4.9.3=linux-x86_64
module load autoconf/2.69-gcc-4.9.3-bkibjqhgqm5e3o423ogfv2y3o6h2uoq4
module load autoconf-2.69-gcc-4.9.3-bkibjqhgqm5e3o423ogfv2y3o6h2uoq4
# cmake@3.5.0%gcc@4.9.3~doc+ncurses+openssl~qt=linux-x86_64
module load cmake/3.5.0-gcc-4.9.3-x7xnsklmgwla3ubfgzppamtbqk5rwn7t
module load cmake-3.5.0-gcc-4.9.3-x7xnsklmgwla3ubfgzppamtbqk5rwn7t
# expat@2.1.0%gcc@4.9.3=linux-x86_64
module load expat/2.1.0-gcc-4.9.3-6pkz2ucnk2e62imwakejjvbv6egncppd
module load expat-2.1.0-gcc-4.9.3-6pkz2ucnk2e62imwakejjvbv6egncppd
# git@2.8.0-rc2%gcc@4.9.3+curl+expat=linux-x86_64
module load git/2.8.0-rc2-gcc-4.9.3-3bib4hqtnv5xjjoq5ugt3inblt4xrgkd
module load git-2.8.0-rc2-gcc-4.9.3-3bib4hqtnv5xjjoq5ugt3inblt4xrgkd
The script may be further edited by removing unnecessary modules.
@@ -826,12 +826,12 @@ For example, consider the following on one system:
.. code-block:: console
$ module avail
linux-SuSE11-x86_64/antlr/2.7.7-gcc-5.3.0-bdpl46y
linux-SuSE11-x86_64/antlr-2.7.7-gcc-5.3.0-bdpl46y
$ spack module tcl loads antlr # WRONG!
# antlr@2.7.7%gcc@5.3.0~csharp+cxx~java~python arch=linux-SuSE11-x86_64
module load antlr/2.7.7-gcc-5.3.0-bdpl46y
module load antlr-2.7.7-gcc-5.3.0-bdpl46y
$ spack module tcl loads --prefix linux-SuSE11-x86_64/ antlr
# antlr@2.7.7%gcc@5.3.0~csharp+cxx~java~python arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/antlr/2.7.7-gcc-5.3.0-bdpl46y
module load linux-SuSE11-x86_64/antlr-2.7.7-gcc-5.3.0-bdpl46y

View File

@@ -1373,7 +1373,7 @@ def long_message(self):
test_log = join_path(os.path.dirname(self.log_name), spack_install_test_log)
if os.path.isfile(test_log):
out.write("\nSee test log for details:\n")
out.write(" {0}\n".format(test_log))
out.write(" {0}n".format(test_log))
return out.getvalue()

View File

@@ -2,7 +2,6 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import collections.abc
import os
from typing import Tuple
@@ -14,24 +13,21 @@
from .cmake import CMakeBuilder, CMakePackage
def cmake_cache_path(name, value, comment="", force=False):
def cmake_cache_path(name, value, comment=""):
"""Generate a string for a cmake cache variable"""
force_str = " FORCE" if force else ""
return 'set({0} "{1}" CACHE PATH "{2}"{3})\n'.format(name, value, comment, force_str)
return 'set({0} "{1}" CACHE PATH "{2}")\n'.format(name, value, comment)
def cmake_cache_string(name, value, comment="", force=False):
def cmake_cache_string(name, value, comment=""):
"""Generate a string for a cmake cache variable"""
force_str = " FORCE" if force else ""
return 'set({0} "{1}" CACHE STRING "{2}"{3})\n'.format(name, value, comment, force_str)
return 'set({0} "{1}" CACHE STRING "{2}")\n'.format(name, value, comment)
def cmake_cache_option(name, boolean_value, comment="", force=False):
def cmake_cache_option(name, boolean_value, comment=""):
"""Generate a string for a cmake configuration option"""
value = "ON" if boolean_value else "OFF"
force_str = " FORCE" if force else ""
return 'set({0} {1} CACHE BOOL "{2}"{3})\n'.format(name, value, comment, force_str)
return 'set({0} {1} CACHE BOOL "{2}")\n'.format(name, value, comment)
class CachedCMakeBuilder(CMakeBuilder):
@@ -67,34 +63,6 @@ def cache_name(self):
def cache_path(self):
return os.path.join(self.pkg.stage.source_path, self.cache_name)
# Implement a version of the define_from_variant for Cached packages
def define_cmake_cache_from_variant(self, cmake_var, variant=None, comment=""):
"""Return a Cached CMake field from the given variant's value.
See define_from_variant in lib/spack/spack/build_systems/cmake.py package
"""
if variant is None:
variant = cmake_var.lower()
if variant not in self.pkg.variants:
raise KeyError('"{0}" is not a variant of "{1}"'.format(variant, self.pkg.name))
if variant not in self.pkg.spec.variants:
return ""
value = self.pkg.spec.variants[variant].value
field = None
if isinstance(value, bool):
field = cmake_cache_option(cmake_var, value, comment)
else:
if isinstance(value, collections.abc.Sequence) and not isinstance(value, str):
value = ";".join(str(v) for v in value)
else:
value = str(value)
field = cmake_cache_string(cmake_var, value, comment)
return field
def initconfig_compiler_entries(self):
# This will tell cmake to use the Spack compiler wrappers when run
# through Spack, but use the underlying compiler when run outside of
@@ -162,17 +130,6 @@ def initconfig_compiler_entries(self):
libs_string = libs_format_string.format(lang)
entries.append(cmake_cache_string(libs_string, libs_flags))
# Set the generator in the cached config
if self.spec.satisfies("generator=make"):
entries.append(cmake_cache_string("CMAKE_GENERATOR", "Unix Makefiles"))
if self.spec.satisfies("generator=ninja"):
entries.append(cmake_cache_string("CMAKE_GENERATOR", "Ninja"))
entries.append(
cmake_cache_string(
"CMAKE_MAKE_PROGRAM", "{0}/ninja".format(spec["ninja"].prefix.bin)
)
)
return entries
def initconfig_mpi_entries(self):
@@ -238,57 +195,26 @@ def initconfig_hardware_entries(self):
"#------------------{0}\n".format("-" * 60),
]
# Provide standard CMake arguments for dependent CachedCMakePackages
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("CUDAToolkit_ROOT", cudatoolkitdir))
entries.append(cmake_cache_path("CMAKE_CUDA_COMPILER", "${CUDAToolkit_ROOT}/bin/nvcc"))
entries.append(cmake_cache_path("CMAKE_CUDA_HOST_COMPILER", "${CMAKE_CXX_COMPILER}"))
# Include the deprecated CUDA_TOOLKIT_ROOT_DIR for supporting BLT packages
entries.append(cmake_cache_path("CUDA_TOOLKIT_ROOT_DIR", cudatoolkitdir))
archs = spec.variants["cuda_arch"].value
if archs != "none":
arch_str = ";".join(archs)
entries.append(
cmake_cache_string("CMAKE_CUDA_ARCHITECTURES", "{0}".format(arch_str))
)
if "+rocm" in spec:
entries.append("#------------------{0}".format("-" * 30))
entries.append("# ROCm")
entries.append("#------------------{0}\n".format("-" * 30))
# Explicitly setting HIP_ROOT_DIR may be a patch that is no longer necessary
entries.append(cmake_cache_path("HIP_ROOT_DIR", "{0}".format(spec["hip"].prefix)))
entries.append(
cmake_cache_path("HIP_CXX_COMPILER", "{0}".format(self.spec["hip"].hipcc))
)
archs = self.spec.variants["amdgpu_target"].value
if archs != "none":
arch_str = ";".join(archs)
entries.append(
cmake_cache_string("CMAKE_HIP_ARCHITECTURES", "{0}".format(arch_str))
)
entries.append(cmake_cache_string("AMDGPU_TARGETS", "{0}".format(arch_str)))
entries.append(cmake_cache_string("GPU_TARGETS", "{0}".format(arch_str)))
cudacompiler = "${CUDA_TOOLKIT_ROOT_DIR}/bin/nvcc"
entries.append(cmake_cache_path("CMAKE_CUDA_COMPILER", cudacompiler))
entries.append(cmake_cache_path("CMAKE_CUDA_HOST_COMPILER", "${CMAKE_CXX_COMPILER}"))
return entries
def std_initconfig_entries(self):
cmake_prefix_path_env = os.environ["CMAKE_PREFIX_PATH"]
cmake_prefix_path = cmake_prefix_path_env.replace(os.pathsep, ";")
return [
"#------------------{0}".format("-" * 60),
"# !!!! This is a generated file, edit at own risk !!!!",
"#------------------{0}".format("-" * 60),
"# CMake executable path: {0}".format(self.pkg.spec["cmake"].command.path),
"#------------------{0}\n".format("-" * 60),
cmake_cache_path("CMAKE_PREFIX_PATH", cmake_prefix_path),
]
def initconfig_package_entries(self):

View File

@@ -7,7 +7,7 @@
import llnl.util.lang as lang
from spack.directives import extends
from spack.directives import extends, maintainers
from .generic import GenericBuilder, Package
@@ -71,6 +71,8 @@ class RPackage(Package):
GenericBuilder = RBuilder
maintainers("glennpj")
#: This attribute is used in UI queries that need to know the build
#: system base class
build_system_class = "RPackage"

View File

@@ -10,7 +10,6 @@
from llnl.util.filesystem import find, join_path, working_dir
import spack.builder
import spack.install_test
import spack.package_base
from spack.directives import build_system, depends_on, extends
from spack.multimethod import when
@@ -31,8 +30,8 @@ class SIPPackage(spack.package_base.PackageBase):
#: Name of private sip module to install alongside package
sip_module = "sip"
#: Callback names for install-time testing
install_time_test_callbacks = ["test_imports"]
#: Callback names for install-time test
install_time_test_callbacks = ["test"]
#: Legacy buildsystem attribute used to deserialize and install old specs
legacy_buildsystem = "sip"
@@ -88,20 +87,18 @@ def python(self, *args, **kwargs):
"""The python ``Executable``."""
inspect.getmodule(self).python(*args, **kwargs)
def test_imports(self):
def test(self):
"""Attempts to import modules of the installed package."""
# Make sure we are importing the installed modules,
# not the ones in the source directory
python = inspect.getmodule(self).python
for module in self.import_modules:
with spack.install_test.test_part(
self,
"test_imports_{0}".format(module),
self.run_test(
inspect.getmodule(self).python.path,
["-c", "import {0}".format(module)],
purpose="checking import of {0}".format(module),
work_dir="spack-test",
):
python("-c", "import {0}".format(module))
)
@spack.builder.builder("sip")

View File

@@ -1095,7 +1095,7 @@ def generate_gitlab_ci_yaml(
raise AttributeError
def main_script_replacements(cmd):
return cmd.replace("{env_dir}", rel_concrete_env_dir)
return cmd.replace("{env_dir}", concrete_env_dir)
job_object["script"] = _unpack_script(
job_object["script"], op=main_script_replacements

View File

@@ -79,12 +79,6 @@ def setup_parser(subparser):
read_cray_manifest.add_argument(
"--directory", default=None, help="specify a directory storing a group of manifest files"
)
read_cray_manifest.add_argument(
"--ignore-default-dir",
action="store_true",
default=False,
help="ignore the default directory of manifest files",
)
read_cray_manifest.add_argument(
"--dry-run",
action="store_true",
@@ -183,16 +177,11 @@ def external_read_cray_manifest(args):
manifest_directory=args.directory,
dry_run=args.dry_run,
fail_on_error=args.fail_on_error,
ignore_default_dir=args.ignore_default_dir,
)
def _collect_and_consume_cray_manifest_files(
manifest_file=None,
manifest_directory=None,
dry_run=False,
fail_on_error=False,
ignore_default_dir=False,
manifest_file=None, manifest_directory=None, dry_run=False, fail_on_error=False
):
manifest_files = []
if manifest_file:
@@ -202,7 +191,7 @@ def _collect_and_consume_cray_manifest_files(
if manifest_directory:
manifest_dirs.append(manifest_directory)
if not ignore_default_dir and os.path.isdir(cray_manifest.default_path):
if os.path.isdir(cray_manifest.default_path):
tty.debug(
"Cray manifest path {0} exists: collecting all files to read.".format(
cray_manifest.default_path

View File

@@ -112,26 +112,36 @@ def _to_dict(compiler):
def get_compiler_config(scope=None, init_config=True):
"""Return the compiler configuration for the specified architecture."""
config = spack.config.get("compilers", scope=scope) or []
if config or not init_config:
return config
def init_compiler_config():
"""Compiler search used when Spack has no compilers."""
compilers = find_compilers()
compilers_dict = []
for compiler in compilers:
compilers_dict.append(_to_dict(compiler))
spack.config.set("compilers", compilers_dict, scope=scope)
merged_config = spack.config.get("compilers")
if merged_config:
return config
_init_compiler_config(scope=scope)
config = spack.config.get("compilers", scope=scope)
return config
def _init_compiler_config(*, scope):
"""Compiler search used when Spack has no compilers."""
compilers = find_compilers()
compilers_dict = []
for compiler in compilers:
compilers_dict.append(_to_dict(compiler))
spack.config.set("compilers", compilers_dict, scope=scope)
# Update the configuration if there are currently no compilers
# configured. Avoid updating automatically if there ARE site
# compilers configured but no user ones.
if not config and init_config:
if scope is None:
# We know no compilers were configured in any scope.
init_compiler_config()
config = spack.config.get("compilers", scope=scope)
elif scope == "user":
# Check the site config and update the user config if
# nothing is configured at the site level.
site_config = spack.config.get("compilers", scope="site")
sys_config = spack.config.get("compilers", scope="system")
if not site_config and not sys_config:
init_compiler_config()
config = spack.config.get("compilers", scope=scope)
return config
elif config:
return config
else:
return [] # Return empty list which we will later append to.
def compiler_config_files():
@@ -223,38 +233,25 @@ def find_compilers(path_hints=None):
path_hints = get_path("PATH")
default_paths = fs.search_paths_for_executables(*path_hints)
# To detect the version of the compilers, we dispatch a certain number
# of function calls to different workers. Here we construct the list
# of arguments for each call.
arguments = []
for o in all_os_classes():
search_paths = getattr(o, "compiler_search_paths", default_paths)
arguments.extend(arguments_to_detect_version_fn(o, search_paths))
pkg_cls_to_check = [spack.repo.path.get_pkg_class(pkg) for pkg in ["apple-clang"]]
detected_compilers = spack.detection.by_executable(pkg_cls_to_check, path_hints=default_paths)
# Here we map the function arguments to the corresponding calls
tp = multiprocessing.pool.ThreadPool()
try:
detected_versions = tp.map(detect_version, arguments)
finally:
tp.close()
platform = spack.platforms.host()
operating_system = platform.operating_system("default_os")
target = platform.target("default_target")
def valid_version(item):
value, error = item
if error is None:
return True
try:
# This will fail on Python 2.6 if a non ascii
# character is in the error
tty.debug(error)
except UnicodeEncodeError:
pass
return False
compilers = []
for name, detected in detected_compilers.items():
for entry in detected:
compiler_cls = spack.compilers.class_for_compiler_name(name)
spec = spack.spec.CompilerSpec(entry.spec.name, f"={entry.spec.versions}")
paths = [
entry.spec.extra_attributes["compilers"].get(x, None)
for x in ("c", "cxx", "f77", "fc")
]
compilers.append(compiler_cls(spec, str(operating_system), str(target), paths))
def remove_errors(item):
value, _ = item
return value
return make_compiler_list(map(remove_errors, filter(valid_version, detected_versions)))
return compilers
def find_new_compilers(path_hints=None, scope=None):

View File

@@ -151,11 +151,7 @@ def setup_custom_environment(self, pkg, env):
arch = arch.replace("-", "_")
# vcvars can target specific sdk versions, force it to pick up concretized sdk
# version, if needed by spec
sdk_ver = (
""
if "win-sdk" not in pkg.spec or pkg.name == "win-sdk"
else pkg.spec["win-sdk"].version.string + ".0"
)
sdk_ver = "" if "win-sdk" not in pkg.spec else pkg.spec["win-sdk"].version.string + ".0"
# provide vcvars with msvc version selected by concretization,
# not whatever it happens to pick up on the system (highest available version)
out = subprocess.check_output( # novermin

View File

@@ -48,8 +48,7 @@ def translated_compiler_name(manifest_compiler_name):
def compiler_from_entry(entry):
compiler_name = translated_compiler_name(entry["name"])
paths = entry["executables"]
# to instantiate a compiler class we may need a concrete version:
version = "={}".format(entry["version"])
version = entry["version"]
arch = entry["arch"]
operating_system = arch["os"]
target = arch["target"]

View File

@@ -1221,27 +1221,28 @@ def remove(self, query_spec, list_name=user_speclist_name, force=False):
old_specs = set(self.user_specs)
new_specs = set()
for spec in matches:
if spec not in list_to_change:
continue
try:
list_to_change.remove(spec)
self.update_stale_references(list_name)
new_specs = set(self.user_specs)
except spack.spec_list.SpecListError:
# define new specs list
new_specs = set(self.user_specs)
msg = f"Spec '{spec}' is part of a spec matrix and "
msg += f"cannot be removed from list '{list_to_change}'."
if force:
msg += " It will be removed from the concrete specs."
# Mock new specs, so we can remove this spec from concrete spec lists
new_specs.remove(spec)
tty.warn(msg)
else:
if list_name == user_speclist_name:
self.manifest.remove_user_spec(str(spec))
if spec in list_to_change:
try:
list_to_change.remove(spec)
self.update_stale_references(list_name)
new_specs = set(self.user_specs)
except spack.spec_list.SpecListError:
# define new specs list
new_specs = set(self.user_specs)
msg = f"Spec '{spec}' is part of a spec matrix and "
msg += f"cannot be removed from list '{list_to_change}'."
if force:
msg += " It will be removed from the concrete specs."
# Mock new specs, so we can remove this spec from concrete spec lists
new_specs.remove(spec)
tty.warn(msg)
else:
self.manifest.remove_definition(str(spec), list_name=list_name)
if list_name == user_speclist_name:
for user_spec in matches:
self.manifest.remove_user_spec(str(user_spec))
else:
for user_spec in matches:
self.manifest.remove_definition(str(user_spec), list_name=list_name)
# If force, update stale concretized specs
for spec in old_specs - new_specs:
@@ -1351,10 +1352,6 @@ def concretize(self, force=False, tests=False):
self.concretized_order = []
self.specs_by_hash = {}
# Remove concrete specs that no longer correlate to a user spec
for spec in set(self.concretized_user_specs) - set(self.user_specs):
self.deconcretize(spec)
# Pick the right concretization strategy
if self.unify == "when_possible":
return self._concretize_together_where_possible(tests=tests)
@@ -1368,16 +1365,6 @@ def concretize(self, force=False, tests=False):
msg = "concretization strategy not implemented [{0}]"
raise SpackEnvironmentError(msg.format(self.unify))
def deconcretize(self, spec):
# spec has to be a root of the environment
index = self.concretized_user_specs.index(spec)
dag_hash = self.concretized_order.pop(index)
del self.concretized_user_specs[index]
# If this was the only user spec that concretized to this concrete spec, remove it
if dag_hash not in self.concretized_order:
del self.specs_by_hash[dag_hash]
def _get_specs_to_concretize(
self,
) -> Tuple[Set[spack.spec.Spec], Set[spack.spec.Spec], List[spack.spec.Spec]]:

View File

@@ -460,8 +460,7 @@ def write_tested_status(self):
elif self.counts[TestStatus.PASSED] > 0:
status = TestStatus.PASSED
with open(self.tested_file, "w") as f:
f.write(f"{status.value}\n")
_add_msg_to_file(self.tested_file, f"{status.value}")
@contextlib.contextmanager

View File

@@ -170,9 +170,11 @@ def merge_config_rules(configuration, spec):
Returns:
dict: actions to be taken on the spec passed as an argument
"""
# Construct a dictionary with the actions we need to perform on the spec passed as a parameter
spec_configuration = {}
# The keyword 'all' is always evaluated first, all the others are
# evaluated in order of appearance in the module file
spec_configuration = copy.deepcopy(configuration.get("all", {}))
spec_configuration.update(copy.deepcopy(configuration.get("all", {})))
for constraint, action in configuration.items():
if spec.satisfies(constraint):
if hasattr(constraint, "override") and constraint.override:
@@ -393,7 +395,7 @@ class BaseConfiguration(object):
querying easier. It needs to be sub-classed for specific module types.
"""
default_projections = {"all": "{name}/{version}-{compiler.name}-{compiler.version}"}
default_projections = {"all": "{name}-{version}-{compiler.name}-{compiler.version}"}
def __init__(self, spec, module_set_name, explicit=None):
# Module where type(self) is defined

View File

@@ -134,7 +134,6 @@ def filter_hierarchy_specs(self):
return configuration(self.name).get("filter_hierarchy_specs", {})
@property
@lang.memoized
def hierarchy_tokens(self):
"""Returns the list of tokens that are part of the modulefile
hierarchy. 'compiler' is always present.
@@ -159,7 +158,6 @@ def hierarchy_tokens(self):
return tokens
@property
@lang.memoized
def requires(self):
"""Returns a dictionary mapping all the requirements of this spec
to the actual provider. 'compiler' is always present among the
@@ -226,7 +224,6 @@ def available(self):
return available
@property
@lang.memoized
def missing(self):
"""Returns the list of tokens that are not available."""
return [x for x in self.hierarchy_tokens if x not in self.available]
@@ -320,7 +317,6 @@ def available_path_parts(self):
return parts
@property
@lang.memoized
def unlocked_paths(self):
"""Returns a dictionary mapping conditions to a list of unlocked
paths.
@@ -432,7 +428,6 @@ def missing(self):
return self.conf.missing
@tengine.context_property
@lang.memoized
def unlocked_paths(self):
"""Returns the list of paths that are unlocked unconditionally."""
layout = make_layout(self.spec, self.conf.name, self.conf.explicit)

View File

@@ -37,9 +37,7 @@
def slingshot_network():
return os.path.exists("/opt/cray/pe") and (
os.path.exists("/lib64/libcxi.so") or os.path.exists("/usr/lib64/libcxi.so")
)
return os.path.exists("/opt/cray/pe") and os.path.exists("/lib64/libcxi.so")
def _target_name_from_craype_target_name(name):

View File

@@ -6,6 +6,7 @@
import itertools
import os
import re
import shutil
from collections import OrderedDict
import macholib.mach_o
@@ -355,7 +356,13 @@ def _set_elf_rpaths(target, rpaths):
# Join the paths using ':' as a separator
rpaths_str = ":".join(rpaths)
patchelf, output = executable.Executable(_patchelf()), None
# If we're relocating patchelf itself, make a copy and use it
bak_path = None
if target.endswith("/bin/patchelf"):
bak_path = target + ".bak"
shutil.copy(target, bak_path)
patchelf, output = executable.Executable(bak_path or _patchelf()), None
try:
# TODO: revisit the use of --force-rpath as it might be conditional
# TODO: if we want to support setting RUNPATH from binary packages
@@ -364,6 +371,9 @@ def _set_elf_rpaths(target, rpaths):
except executable.ProcessError as e:
msg = "patchelf --force-rpath --set-rpath {0} failed with error {1}"
tty.warn(msg.format(target, e))
finally:
if bak_path and os.path.exists(bak_path):
os.remove(bak_path)
return output

View File

@@ -1239,7 +1239,7 @@ def get_pkg_class(self, pkg_name):
try:
module = importlib.import_module(fullname)
except ImportError:
raise UnknownPackageError(fullname)
raise UnknownPackageError(pkg_name)
except Exception as e:
msg = f"cannot load package '{pkg_name}' from the '{self.namespace}' repository: {e}"
raise RepoError(msg) from e

View File

@@ -614,23 +614,6 @@ def multiple_values_error(self, attribute, pkg):
def no_value_error(self, attribute, pkg):
return f'Cannot select a single "{attribute}" for package "{pkg}"'
def _get_cause_tree(self, cause, conditions, condition_causes, literals, indent=" "):
parents = [c for e, c in condition_causes if e == cause]
local = "required because %s " % conditions[cause]
return [indent + local] + [
c
for parent in parents
for c in self._get_cause_tree(
parent, conditions, condition_causes, literals, indent=indent + " "
)
]
def get_cause_tree(self, cause):
conditions = dict(extract_args(self.model, "condition"))
condition_causes = list(extract_args(self.model, "condition_cause"))
return self._get_cause_tree(cause, conditions, condition_causes, [])
def handle_error(self, msg, *args):
"""Handle an error state derived by the solver."""
if msg == "multiple_values_error":
@@ -639,28 +622,14 @@ def handle_error(self, msg, *args):
if msg == "no_value_error":
return self.no_value_error(*args)
try:
idx = args.index("startcauses")
except ValueError:
msg_args = args
cause_args = []
else:
msg_args = args[:idx]
cause_args = args[idx + 1 :]
msg = msg.format(*msg_args)
# For variant formatting, we sometimes have to construct specs
# to format values properly. Find/replace all occurances of
# Spec(...) with the string representation of the spec mentioned
msg = msg.format(*args)
specs_to_construct = re.findall(r"Spec\(([^)]*)\)", msg)
for spec_str in specs_to_construct:
msg = msg.replace("Spec(%s)" % spec_str, str(spack.spec.Spec(spec_str)))
for cause in set(cause_args):
for c in self.get_cause_tree(cause):
msg += f"\n{c}"
return msg
def message(self, errors) -> str:
@@ -806,8 +775,6 @@ def visit(node):
self.control.load(os.path.join(parent_dir, "concretize.lp"))
self.control.load(os.path.join(parent_dir, "os_compatibility.lp"))
self.control.load(os.path.join(parent_dir, "display.lp"))
if spack.error.debug:
self.control.load(os.path.join(parent_dir, "causation.lp"))
timer.stop("load")
# Grounding is the first step in the solve -- it turns our facts
@@ -868,13 +835,7 @@ def on_model(model):
# print any unknown functions in the model
for sym in best_model:
if sym.name not in (
"attr",
"error",
"opt_criterion",
"condition",
"condition_cause",
):
if sym.name not in ("attr", "error", "opt_criterion"):
tty.debug(
"UNKNOWN SYMBOL: %s(%s)" % (sym.name, ", ".join(stringify(sym.arguments)))
)
@@ -1305,11 +1266,7 @@ def package_provider_rules(self, pkg):
for when in whens:
msg = "%s provides %s when %s" % (pkg.name, provided, when)
condition_id = self.condition(when, provided, pkg.name, msg)
self.gen.fact(
fn.imposed_constraint(
condition_id, "virtual_condition_holds", pkg.name, provided.name
)
)
self.gen.fact(fn.provider_condition(condition_id, when.name, provided.name))
self.gen.newline()
def package_dependencies_rules(self, pkg):
@@ -1330,25 +1287,16 @@ def package_dependencies_rules(self, pkg):
if not deptypes:
continue
msg = "%s depends on %s" % (pkg.name, dep.spec)
msg = "%s depends on %s" % (pkg.name, dep.spec.name)
if cond != spack.spec.Spec():
msg += " when %s" % cond
condition_id = self.condition(cond, dep.spec, pkg.name, msg)
self.gen.fact(fn.condition_requirement(condition_id, "spack_installed", pkg.name))
self.gen.fact(fn.dependency_condition(condition_id, pkg.name, dep.spec.name))
for t in sorted(deptypes):
# there is a declared dependency of type t
self.gen.fact(
fn.imposed_constraint(
condition_id, "dependency_holds", pkg.name, dep.spec.name, t
)
)
self.gen.fact(
fn.imposed_constraint(
condition_id, "virtual_node" if dep.spec.virtual else "node", dep.spec.name
)
)
self.gen.fact(fn.dependency_type(condition_id, t))
self.gen.newline()
@@ -1502,11 +1450,7 @@ def external_packages(self):
for local_idx, spec in enumerate(external_specs):
msg = "%s available as external when satisfying %s" % (spec.name, spec)
condition_id = self.condition(spec, msg=msg)
self.gen.fact(
fn.imposed_constraint(
condition_id, "external_conditions_hold", pkg_name, local_idx
)
)
self.gen.fact(fn.possible_external(condition_id, pkg_name, local_idx))
self.possible_versions[spec.name].add(spec.version)
self.gen.newline()
@@ -2350,29 +2294,16 @@ def setup(self, driver, specs, reuse=None):
self.define_target_constraints()
def literal_specs(self, specs):
for spec in specs:
for idx, spec in enumerate(specs):
self.gen.h2("Spec: %s" % str(spec))
self.gen.fact(fn.literal(idx))
# cannot use self.condition because it requires condition requirements
condition_id = next(self._condition_id_counter)
self.gen.fact(fn.condition(condition_id, "%s is provided as input spec" % spec))
self.gen.fact(fn.literal(condition_id))
self.gen.fact(fn.condition_requirement(condition_id, "literal_solved", condition_id))
self.gen.fact(
fn.imposed_constraint(
condition_id, "virtual_root" if spec.virtual else "root", spec.name
)
)
self.gen.fact(fn.literal(idx, "virtual_root" if spec.virtual else "root", spec.name))
for clause in self.spec_clauses(spec):
self.gen.fact(fn.imposed_constraint(condition_id, *clause.args))
self.gen.fact(fn.literal(idx, *clause.args))
if clause.args[0] == "variant_set":
self.gen.fact(
fn.imposed_constraint(
condition_id, "variant_default_value_from_cli", *clause.args[1:]
)
fn.literal(idx, "variant_default_value_from_cli", *clause.args[1:])
)
if self.concretize_everything:
@@ -2466,8 +2397,6 @@ class SpecBuilder(object):
r"^root$",
r"^virtual_node$",
r"^virtual_root$",
r"^.*holds?$",
r"^literal.*$",
]
)
)
@@ -2907,13 +2836,12 @@ class InternalConcretizerError(spack.error.UnsatisfiableSpecError):
"""
def __init__(self, provided, conflicts):
msg = (
"Spack concretizer internal error. Please submit a bug report and include the "
"command, environment if applicable and the following error message."
f"\n {provided} is unsatisfiable, errors are:"
)
msg += "".join([f"\n {conflict}" for conflict in conflicts])
indented = [" %s\n" % conflict for conflict in conflicts]
error_msg = "".join(indented)
msg = "Spack concretizer internal error. Please submit a bug report"
msg += "\n Please include the command, environment if applicable,"
msg += "\n and the following error message."
msg = "\n %s is unsatisfiable, errors are:\n%s" % (provided, error_msg)
super(spack.error.UnsatisfiableSpecError, self).__init__(msg)

View File

@@ -1,72 +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)
% associated conditions by cause -> effect
condition_cause(Effect, Cause) :-
condition_holds(Effect), condition_holds(Cause),
attr(Name, A1),
condition_requirement(Effect, Name, A1),
imposed_constraint(Cause, Name, A1).
condition_cause(Effect, Cause) :-
condition_holds(Effect), condition_holds(Cause),
attr(Name, A1, A2),
condition_requirement(Effect, Name, A1, A2),
imposed_constraint(Cause, Name, A1, A2).
condition_cause(Effect, Cause) :-
condition_holds(Effect), condition_holds(Cause),
attr(Name, A1, A2, A3),
condition_requirement(Effect, Name, A1, A2, A3),
imposed_constraint(Cause, Name, A1, A2, A3).
condition_cause(Effect, Cause) :-
condition_holds(Effect), condition_holds(Cause),
attr(Name, A1, A2, A3, A4),
condition_requirement(Effect, Name, A1, A2, A3, A4),
imposed_constraint(Cause, Name, A1, A2, A3, A4).
% At most one variant for single valued variants
error(0, "'{0}' required multiple values for single-valued variant '{1}'\n Requested 'Spec({1}={2})' and 'Spec({1}={3})'", Package, Variant, Value1, Value2, startcauses, Cause1, Cause2)
:- attr("node", Package),
variant(Package, Variant),
variant_single_value(Package, Variant),
build(Package),
attr("variant_value", Package, Variant, Value1),
imposed_constraint(Cause1, "variant_set", Package, Variant, Value1),
condition_holds(Cause1),
attr("variant_value", Package, Variant, Value2),
imposed_constraint(Cause2, "variant_set", Package, Variant, Value2),
condition_holds(Cause2),
Value1 < Value2. % see[1] in concretize.lp
% We cannot have a version that violates another version constraint
error(0, "Version '{0}' of {1} does not satisfy '@{2}'", Version, Package, Constraint, startcauses, VersionCause, ConstraintCause)
:- attr("node", Package),
attr("version", Package, Version),
imposed_constraint(VersionCause, "node_version_satisfies", Package, Version),
condition_holds(VersionCause),
attr("node_version_satisfies", Package, Constraint),
imposed_constraint(ConstraintCause, "node_version_satisfies", Package, Constraint),
condition_holds(ConstraintCause),
not version_satisfies(Package, Constraint, Version).
% A virtual package may or may not have a version, but never has more than one
% Error to catch how it happens
error(0, "Version '{0}' of {1} does not satisfy '@{2}'", Version, Virtual, Constraint, startcauses, VersionCause, ConstraintCause)
:- attr("virtual_node", Virtual),
attr("version", Virtual, Version),
imposed_constraint(VersionCause, "node_version_satisfies", Virtual, Version),
condition_holds(VersionCause),
attr("node_version_satisfies", Virtual, Constraint),
imposed_constraint(ConstraintCause, "node_version_satisfies", Virtual, Constraint),
condition_holds(ConstraintCause),
not version_satisfies(Virtual, Constraint, Version).
% More specific error message if the version cannot satisfy some constraint
% Otherwise covered by `no_version_error` and `versions_conflict_error`.
error(0, "Cannot satisfy '{0}@{1}'", Package, Constraint, startcauses, ConstraintCause)
:- attr("node_version_satisfies", Package, Constraint),
imposed_constraint(ConstraintCause, "node_version_satisfies", Package, Constraint),
condition_holds(ConstraintCause),
attr("version", Package, Version),
not version_satisfies(Package, Constraint, Version).

View File

@@ -12,8 +12,8 @@
%-----------------------------------------------------------------------------
% Give clingo the choice to solve an input spec or not
{ attr("literal_solved", ID) } :- literal(ID).
literal_not_solved(ID) :- not attr("literal_solved", ID), literal(ID).
{ literal_solved(ID) } :- literal(ID).
literal_not_solved(ID) :- not literal_solved(ID), literal(ID).
% If concretize_everything() is a fact, then we cannot have unsolved specs
:- literal_not_solved(ID), concretize_everything.
@@ -21,14 +21,24 @@ literal_not_solved(ID) :- not attr("literal_solved", ID), literal(ID).
% Make a problem with "zero literals solved" unsat. This is to trigger
% looking for solutions to the ASP problem with "errors", which results
% in better reporting for users. See #30669 for details.
1 { attr("literal_solved", ID) : literal(ID) }.
1 { literal_solved(ID) : literal(ID) }.
opt_criterion(300, "number of input specs not concretized").
#minimize{ 0@300: #true }.
#minimize { 1@300,ID : literal_not_solved(ID) }.
% Map constraint on the literal ID to the correct PSID
attr(Name, A1) :- literal(LiteralID, Name, A1), literal_solved(LiteralID).
attr(Name, A1, A2) :- literal(LiteralID, Name, A1, A2), literal_solved(LiteralID).
attr(Name, A1, A2, A3) :- literal(LiteralID, Name, A1, A2, A3), literal_solved(LiteralID).
attr(Name, A1, A2, A3, A4) :- literal(LiteralID, Name, A1, A2, A3, A4), literal_solved(LiteralID).
#defined concretize_everything/0.
#defined literal/1.
#defined literal/3.
#defined literal/4.
#defined literal/5.
#defined literal/6.
% Attributes for node packages which must have a single value
attr_single_value("version").
@@ -48,13 +58,6 @@ error(100, multiple_values_error, Attribute, Package)
attr_single_value(Attribute),
2 { attr(Attribute, Package, Version) }.
%-----------------------------------------------------------------------------
% Define functions for error handling
%-----------------------------------------------------------------------------
#defined error/9.
#defined condition_cause/2.
%-----------------------------------------------------------------------------
% Version semantics
%-----------------------------------------------------------------------------
@@ -93,18 +96,7 @@ version_satisfies(Package, Constraint, HashVersion) :- version_satisfies(Package
{ attr("version", Package, Version) : version_declared(Package, Version) }
:- attr("node", Package).
% Error to ensure structure of the program is not violated
error(2, "No version from '{0}' satisfies '@{1}' and '@{2}'", Package, Version1, Version2)
:- attr("node", Package),
attr("version", Package, Version1),
attr("version", Package, Version2),
Version1 < Version2. % see[1]
error(2, "No versions available for package '{0}'", Package)
:- attr("node", Package), not attr("version", Package, _).
% A virtual package may or may not have a version, but never has more than one
% fallback error for structure in case there's another way for it to happen
error(100, "Cannot select a single version for virtual '{0}'", Virtual)
:- attr("virtual_node", Virtual),
2 { attr("version", Virtual, Version) }.
@@ -158,7 +150,8 @@ possible_version_weight(Package, Weight)
:- attr("node_version_satisfies", Package, Constraint),
version_satisfies(Package, Constraint, _).
% Error for structure of program
% More specific error message if the version cannot satisfy some constraint
% Otherwise covered by `no_version_error` and `versions_conflict_error`.
error(10, "Cannot satisfy '{0}@{1}'", Package, Constraint)
:- attr("node_version_satisfies", Package, Constraint),
attr("version", Package, Version),
@@ -189,8 +182,9 @@ condition_holds(ID) :-
attr(Name, A1, A2, A3) : condition_requirement(ID, Name, A1, A2, A3);
attr(Name, A1, A2, A3, A4) : condition_requirement(ID, Name, A1, A2, A3, A4).
% condition_holds(ID) implies all imposed_constraints.
impose(ID) :- condition_holds(ID).
% condition_holds(ID) implies all imposed_constraints, unless do_not_impose(ID)
% is derived. This allows imposed constraints to be canceled in special cases.
impose(ID) :- condition_holds(ID), not do_not_impose(ID).
% conditions that hold impose constraints on other specs
attr(Name, A1) :- impose(ID), imposed_constraint(ID, Name, A1).
@@ -235,19 +229,33 @@ depends_on(Package, Dependency) :- attr("depends_on", Package, Dependency, _).
% a dependency holds if its condition holds and if it is not external or
% concrete. We chop off dependencies for externals, and dependencies of
% concrete specs don't need to be resolved -- they arise from the concrete
% specs themselves. This attr is used in constraints from dependency conditions
attr("spack_installed", Package) :- build(Package), not external(Package).
% specs themselves.
dependency_holds(Package, Dependency, Type) :-
dependency_condition(ID, Package, Dependency),
dependency_type(ID, Type),
build(Package),
not external(Package),
condition_holds(ID).
% We cut off dependencies of externals (as we don't really know them).
% Don't impose constraints on dependencies that don't exist.
do_not_impose(ID) :-
not dependency_holds(Package, Dependency, _),
dependency_condition(ID, Package, Dependency).
% declared dependencies are real if they're not virtual AND
% the package is not an external.
% They're only triggered if the associated dependnecy condition holds.
attr("depends_on", Package, Dependency, Type)
:- attr("dependency_holds", Package, Dependency, Type),
:- dependency_holds(Package, Dependency, Type),
not virtual(Dependency).
% every root must be a node
attr("node", Package) :- attr("root", Package).
% dependencies imply new nodes
attr("node", Dependency) :- attr("node", Package), depends_on(Package, Dependency).
% all nodes in the graph must be reachable from some root
% this ensures a user can't say `zlib ^libiconv` (neither of which have any
% dependencies) and get a two-node unconnected graph
@@ -288,17 +296,14 @@ error(1, Msg) :- attr("node", Package),
% if a package depends on a virtual, it's not external and we have a
% provider for that virtual then it depends on the provider
attr("depends_on", Package, Provider, Type)
:- attr("dependency_holds", Package, Virtual, Type),
:- dependency_holds(Package, Virtual, Type),
provider(Provider, Virtual),
not external(Package).
% If a package depends on a provider, the provider must be a node
% nodes that are not indirected by a virtual are instantiated
% directly from the imposed constraints of the dependency condition
attr("node", Provider)
:- attr("dependency_holds", Package, Virtual, Type),
provider(Provider, Virtual),
not external(Package).
% dependencies on virtuals also imply that the virtual is a virtual node
attr("virtual_node", Virtual)
:- dependency_holds(Package, Virtual, Type),
virtual(Virtual), not external(Package).
% If there's a virtual node, we must select one and only one provider.
% The provider must be selected among the possible providers.
@@ -325,11 +330,17 @@ attr("root", Package) :- attr("virtual_root", Virtual), provider(Package, Virtua
% for environments that are concretized together (e.g. where we
% asks to install "mpich" and "hdf5+mpi" and we want "mpich" to
% be the mpi provider)
provider(Package, Virtual) :- attr("node", Package), attr("virtual_condition_holds", Package, Virtual).
provider(Package, Virtual) :- attr("node", Package), virtual_condition_holds(Package, Virtual).
% The provider provides the virtual if some provider condition holds.
virtual_condition_holds(Provider, Virtual) :-
provider_condition(ID, Provider, Virtual),
condition_holds(ID),
virtual(Virtual).
% A package cannot be the actual provider for a virtual if it does not
% fulfill the conditions to provide that virtual
:- provider(Package, Virtual), not attr("virtual_condition_holds", Package, Virtual),
:- provider(Package, Virtual), not virtual_condition_holds(Package, Virtual),
internal_error("Virtual when provides not respected").
#defined possible_provider/2.
@@ -371,8 +382,14 @@ possible_provider_weight(Dependency, Virtual, 100, "fallback") :- provider(Depen
% do not warn if generated program contains none of these.
#defined possible_provider/2.
#defined provider_condition/3.
#defined required_provider_condition/3.
#defined required_provider_condition/4.
#defined required_provider_condition/5.
#defined required_provider_condition/6.
#defined declared_dependency/3.
#defined virtual/1.
#defined virtual_condition_holds/2.
#defined external/1.
#defined external_spec/2.
#defined external_version_declared/4.
@@ -420,15 +437,25 @@ external(Package) :- attr("external_spec_selected", Package, _).
% determine if an external spec has been selected
attr("external_spec_selected", Package, LocalIndex) :-
attr("external_conditions_hold", Package, LocalIndex),
external_conditions_hold(Package, LocalIndex),
attr("node", Package),
not attr("hash", Package, _).
external_conditions_hold(Package, LocalIndex) :-
possible_external(ID, Package, LocalIndex), condition_holds(ID).
% it cannot happen that a spec is external, but none of the external specs
% conditions hold.
error(100, "Attempted to use external for '{0}' which does not satisfy any configured external spec", Package)
:- external(Package),
not attr("external_conditions_hold", Package, _).
not external_conditions_hold(Package, _).
#defined possible_external/3.
#defined external_spec_index/3.
#defined external_spec_condition/3.
#defined external_spec_condition/4.
#defined external_spec_condition/5.
#defined external_spec_condition/6.
%-----------------------------------------------------------------------------
% Config required semantics
@@ -567,6 +594,7 @@ attr("variant_value", Package, Variant, Value) :-
variant(Package, Variant),
build(Package).
error(100, "'{0}' required multiple values for single-valued variant '{1}'", Package, Variant)
:- attr("node", Package),
variant(Package, Variant),
@@ -637,7 +665,7 @@ variant_default_not_used(Package, Variant, Value)
external_with_variant_set(Package, Variant, Value)
:- attr("variant_value", Package, Variant, Value),
condition_requirement(ID, "variant_value", Package, Variant, Value),
imposed_constraint(ID, "external_conditions_hold", Package, _),
possible_external(ID, Package, _),
external(Package),
attr("node", Package).

View File

@@ -23,12 +23,5 @@
#show error/4.
#show error/5.
#show error/6.
#show error/7.
#show error/8.
#show error/9.
% show cause -> effect data for errors
#show condition_cause/2.
#show condition/2.
% debug

View File

@@ -4333,7 +4333,7 @@ def write_attribute(spec, attribute, color):
if callable(current):
raise SpecFormatStringError("Attempted to format callable object")
if current is None:
if not current:
# We're not printing anything
return

View File

@@ -4,7 +4,7 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import itertools
import textwrap
from typing import List, Optional, Tuple
from typing import List
import llnl.util.lang
@@ -66,17 +66,17 @@ def to_dict(self):
return dict(d)
@llnl.util.lang.memoized
def make_environment(dirs: Optional[Tuple[str, ...]] = None):
"""Returns a configured environment for template rendering."""
# Import at this scope to avoid slowing Spack startup down
import jinja2
def make_environment(dirs=None):
"""Returns an configured environment for template rendering."""
if dirs is None:
# Default directories where to search for templates
builtins = spack.config.get("config:template_dirs", ["$spack/share/spack/templates"])
extensions = spack.extensions.get_template_dirs()
dirs = tuple(canonicalize_path(d) for d in itertools.chain(builtins, extensions))
dirs = [canonicalize_path(d) for d in itertools.chain(builtins, extensions)]
# avoid importing this at the top level as it's used infrequently and
# slows down startup a bit.
import jinja2
# Loader for the templates
loader = jinja2.FileSystemLoader(dirs)

View File

@@ -3,7 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import pickle
import sys
import pytest
@@ -40,10 +39,7 @@ def test_dump(tmpdir):
with tmpdir.as_cwd():
build_env("--dump", _out_file, "zlib")
with open(_out_file) as f:
if sys.platform == "win32":
assert any(line.startswith('set "PATH=') for line in f.readlines())
else:
assert any(line.startswith("PATH=") for line in f.readlines())
assert any(line.startswith("PATH=") for line in f.readlines())
@pytest.mark.usefixtures("config", "mock_packages", "working_env")

View File

@@ -390,19 +390,6 @@ def test_remove_after_concretize():
assert not any(s.name == "mpileaks" for s in env_specs)
def test_remove_before_concretize():
e = ev.create("test")
e.unify = True
e.add("mpileaks")
e.concretize()
e.remove("mpileaks")
e.concretize()
assert not list(e.concretized_specs())
def test_remove_command():
env("create", "test")
assert "test" in env("list")
@@ -2688,7 +2675,7 @@ def test_modules_relative_to_views(environment_from_manifest, install_mockery, m
spec = e.specs_by_hash[e.concretized_order[0]]
view_prefix = e.default_view.get_projection_for_spec(spec)
modules_glob = "%s/modules/**/*/*" % e.path
modules_glob = "%s/modules/**/*" % e.path
modules = glob.glob(modules_glob)
assert len(modules) == 1
module = modules[0]
@@ -2724,12 +2711,12 @@ def test_multiple_modules_post_env_hook(environment_from_manifest, install_mocke
spec = e.specs_by_hash[e.concretized_order[0]]
view_prefix = e.default_view.get_projection_for_spec(spec)
modules_glob = "%s/modules/**/*/*" % e.path
modules_glob = "%s/modules/**/*" % e.path
modules = glob.glob(modules_glob)
assert len(modules) == 1
module = modules[0]
full_modules_glob = "%s/full_modules/**/*/*" % e.path
full_modules_glob = "%s/full_modules/**/*" % e.path
full_modules = glob.glob(full_modules_glob)
assert len(full_modules) == 1
full_module = full_modules[0]

View File

@@ -62,7 +62,7 @@ def source_file(tmpdir, is_relocatable):
src = tmpdir.join("relocatable.c")
shutil.copy(template_src, str(src))
else:
template_dirs = (os.path.join(spack.paths.test_path, "data", "templates"),)
template_dirs = [os.path.join(spack.paths.test_path, "data", "templates")]
env = spack.tengine.make_environment(template_dirs)
template = env.get_template("non_relocatable.c")
text = template.render({"prefix": spack.store.layout.root})
@@ -173,6 +173,14 @@ def test_ensure_binary_is_relocatable(source_file, is_relocatable):
assert relocatable == is_relocatable
@pytest.mark.requires_executables("patchelf", "strings", "file")
@skip_unless_linux
def test_patchelf_is_relocatable():
patchelf = os.path.realpath(spack.relocate._patchelf())
assert llnl.util.filesystem.is_exe(patchelf)
spack.relocate.ensure_binary_is_relocatable(patchelf)
@skip_unless_linux
def test_ensure_binary_is_relocatable_errors(tmpdir):
# The file passed in as argument must exist...
@@ -233,6 +241,30 @@ def test_normalize_relative_paths(start_path, relative_paths, expected):
assert normalized == expected
def test_set_elf_rpaths(mock_patchelf):
# Try to relocate a mock version of patchelf and check
# the call made to patchelf itself
patchelf = mock_patchelf("echo $@")
rpaths = ["/usr/lib", "/usr/lib64", "/opt/local/lib"]
output = spack.relocate._set_elf_rpaths(patchelf, rpaths)
# Assert that the arguments of the call to patchelf are as expected
assert "--force-rpath" in output
assert "--set-rpath " + ":".join(rpaths) in output
assert patchelf in output
@skip_unless_linux
def test_set_elf_rpaths_warning(mock_patchelf):
# Mock a failing patchelf command and ensure it warns users
patchelf = mock_patchelf("exit 1")
rpaths = ["/usr/lib", "/usr/lib64", "/opt/local/lib"]
# To avoid using capfd in order to check if the warning was triggered
# here we just check that output is not set
output = spack.relocate._set_elf_rpaths(patchelf, rpaths)
assert output is None
@pytest.mark.requires_executables("patchelf", "strings", "file", "gcc")
@skip_unless_linux
def test_relocate_text_bin(binary_with_rpaths, prefix_like):

View File

@@ -660,7 +660,6 @@ def test_spec_formatting(self, default_mock_concretization):
("{architecture.os}", "", "os", lambda spec: spec.architecture),
("{architecture.target}", "", "target", lambda spec: spec.architecture),
("{prefix}", "", "prefix", lambda spec: spec),
("{external}", "", "external", lambda spec: spec), # test we print "False"
]
hash_segments = [

View File

@@ -71,7 +71,7 @@ def test_template_retrieval(self):
"""Tests the template retrieval mechanism hooked into config files"""
# Check the directories are correct
template_dirs = spack.config.get("config:template_dirs")
template_dirs = tuple([canonicalize_path(x) for x in template_dirs])
template_dirs = [canonicalize_path(x) for x in template_dirs]
assert len(template_dirs) == 3
env = tengine.make_environment(template_dirs)

View File

@@ -441,30 +441,6 @@ def test_write_tested_status(
assert TestStatus(status) == expected
@pytest.mark.regression("37840")
def test_write_tested_status_no_repeats(
tmpdir, install_mockery_mutable_config, mock_fetch, mock_test_stage
):
"""Emulate re-running the same stand-alone tests a second time."""
s = spack.spec.Spec("trivial-smoke-test").concretized()
pkg = s.package
statuses = [TestStatus.PASSED, TestStatus.PASSED]
for i, status in enumerate(statuses):
pkg.tester.test_parts[f"test_{i}"] = status
pkg.tester.counts[status] += 1
pkg.tester.tested_file = tmpdir.join("test-log.txt")
pkg.tester.write_tested_status()
pkg.tester.write_tested_status()
# The test should NOT result in a ValueError: invalid literal for int()
# with base 10: '2\n2' (i.e., the results being appended instead of
# written to the file).
with open(pkg.tester.tested_file, "r") as f:
status = int(f.read().strip("\n"))
assert TestStatus(status) == TestStatus.PASSED
def test_check_special_outputs(tmpdir):
"""This test covers two related helper methods"""
contents = """CREATE TABLE packages (

View File

@@ -119,10 +119,7 @@ def test_dump_environment(prepare_environment_for_tests, tmpdir):
dumpfile_path = str(tmpdir.join("envdump.txt"))
envutil.dump_environment(dumpfile_path)
with open(dumpfile_path, "r") as dumpfile:
if sys.platform == "win32":
assert 'set "TEST_ENV_VAR={}"\n'.format(test_paths) in list(dumpfile)
else:
assert "TEST_ENV_VAR={0}; export TEST_ENV_VAR\n".format(test_paths) in list(dumpfile)
assert "TEST_ENV_VAR={0}; export TEST_ENV_VAR\n".format(test_paths) in list(dumpfile)
def test_reverse_environment_modifications(working_env):

View File

@@ -171,11 +171,7 @@ def path_put_first(var_name: str, directories: List[Path]):
BASH_FUNCTION_FINDER = re.compile(r"BASH_FUNC_(.*?)\(\)")
def _win_env_var_to_set_line(var: str, val: str) -> str:
return f'set "{var}={val}"'
def _nix_env_var_to_source_line(var: str, val: str) -> str:
def _env_var_to_source_line(var: str, val: str) -> str:
if var.startswith("BASH_FUNC"):
source_line = "function {fname}{decl}; export -f {fname}".format(
fname=BASH_FUNCTION_FINDER.sub(r"\1", var), decl=val
@@ -185,13 +181,6 @@ def _nix_env_var_to_source_line(var: str, val: str) -> str:
return source_line
def _env_var_to_source_line(var: str, val: str) -> str:
if sys.platform == "win32":
return _win_env_var_to_set_line(var, val)
else:
return _nix_env_var_to_source_line(var, val)
@system_path_filter(arg_slice=slice(1))
def dump_environment(path: Path, environment: Optional[MutableMapping[str, str]] = None):
"""Dump an environment dictionary to a source-able file.

View File

@@ -128,38 +128,6 @@ default:
extends: [ ".base-job", ".generate-base" ]
tags: ["spack", "public", "medium", "x86_64"]
.darwin-generate-base:
stage: generate
script:
- export SPACK_DISABLE_LOCAL_CONFIG=1
- export SPACK_USER_CACHE_PATH=$(pwd)/_user_cache
- uname -a || true
- grep -E 'vendor|model name' /proc/cpuinfo 2>/dev/null | sort -u || head -n10 /proc/cpuinfo 2>/dev/null || true
- nproc || true
- . "./share/spack/setup-env.sh"
- spack --version
- cd share/spack/gitlab/cloud_pipelines/stacks/${SPACK_CI_STACK_NAME}
- spack env activate --without-view .
- spack -d ci generate --check-index-only
--buildcache-destination "${SPACK_BUILDCACHE_DESTINATION}"
--artifacts-root "${CI_PROJECT_DIR}/jobs_scratch_dir"
--output-file "${CI_PROJECT_DIR}/jobs_scratch_dir/cloud-ci-pipeline.yml"
after_script:
- cat /proc/loadavg || true
artifacts:
paths:
- "${CI_PROJECT_DIR}/jobs_scratch_dir"
interruptible: true
timeout: 60 minutes
retry:
max: 2
when:
- always
.darwin-generate:
extends: [ ".base-job", ".darwin-generate-base" ]
.generate-deprecated:
extends: [ ".base-job" ]
stage: generate
@@ -268,6 +236,124 @@ protected-publish:
# - artifacts: True
# job: my-super-cool-stack-generate
########################################
# E4S Mac Stack
#
# With no near-future plans to have
# protected aws runners running mac
# builds, it seems best to decouple
# them from the rest of the stacks for
# the time being. This way they can
# still run on UO runners and be signed
# using the previous approach.
########################################
# .e4s-mac:
# variables:
# SPACK_CI_STACK_NAME: e4s-mac
# allow_failure: True
# .mac-pr:
# only:
# - /^pr[\d]+_.*$/
# - /^github\/pr[\d]+_.*$/
# variables:
# SPACK_BUILDCACHE_DESTINATION: "s3://spack-binaries-prs/${CI_COMMIT_REF_NAME}"
# SPACK_PRUNE_UNTOUCHED: "True"
# .mac-protected:
# only:
# - /^develop$/
# - /^releases\/v.*/
# - /^v.*/
# - /^github\/develop$/
# variables:
# SPACK_BUILDCACHE_DESTINATION: "s3://spack-binaries/${CI_COMMIT_REF_NAME}/${SPACK_CI_STACK_NAME}"
# .mac-pr-build:
# extends: [ ".mac-pr", ".build" ]
# variables:
# AWS_ACCESS_KEY_ID: ${PR_MIRRORS_AWS_ACCESS_KEY_ID}
# AWS_SECRET_ACCESS_KEY: ${PR_MIRRORS_AWS_SECRET_ACCESS_KEY}
# .mac-protected-build:
# extends: [ ".mac-protected", ".build" ]
# variables:
# AWS_ACCESS_KEY_ID: ${PROTECTED_MIRRORS_AWS_ACCESS_KEY_ID}
# AWS_SECRET_ACCESS_KEY: ${PROTECTED_MIRRORS_AWS_SECRET_ACCESS_KEY}
# SPACK_SIGNING_KEY: ${PACKAGE_SIGNING_KEY}
# e4s-mac-pr-generate:
# extends: [".e4s-mac", ".mac-pr"]
# stage: generate
# script:
# - tmp="$(mktemp -d)"; export SPACK_USER_CONFIG_PATH="$tmp"; export SPACK_USER_CACHE_PATH="$tmp"
# - . "./share/spack/setup-env.sh"
# - spack --version
# - cd share/spack/gitlab/cloud_pipelines/stacks/${SPACK_CI_STACK_NAME}
# - spack env activate --without-view .
# - spack ci generate --check-index-only
# --buildcache-destination "${SPACK_BUILDCACHE_DESTINATION}"
# --artifacts-root "${CI_PROJECT_DIR}/jobs_scratch_dir"
# --output-file "${CI_PROJECT_DIR}/jobs_scratch_dir/cloud-ci-pipeline.yml"
# artifacts:
# paths:
# - "${CI_PROJECT_DIR}/jobs_scratch_dir"
# tags:
# - lambda
# interruptible: true
# retry:
# max: 2
# when:
# - runner_system_failure
# - stuck_or_timeout_failure
# timeout: 60 minutes
# e4s-mac-protected-generate:
# extends: [".e4s-mac", ".mac-protected"]
# stage: generate
# script:
# - tmp="$(mktemp -d)"; export SPACK_USER_CONFIG_PATH="$tmp"; export SPACK_USER_CACHE_PATH="$tmp"
# - . "./share/spack/setup-env.sh"
# - spack --version
# - cd share/spack/gitlab/cloud_pipelines/stacks/${SPACK_CI_STACK_NAME}
# - spack env activate --without-view .
# - spack ci generate --check-index-only
# --artifacts-root "${CI_PROJECT_DIR}/jobs_scratch_dir"
# --output-file "${CI_PROJECT_DIR}/jobs_scratch_dir/cloud-ci-pipeline.yml"
# artifacts:
# paths:
# - "${CI_PROJECT_DIR}/jobs_scratch_dir"
# tags:
# - omicron
# interruptible: true
# retry:
# max: 2
# when:
# - runner_system_failure
# - stuck_or_timeout_failure
# timeout: 60 minutes
# e4s-mac-pr-build:
# extends: [ ".e4s-mac", ".mac-pr-build" ]
# trigger:
# include:
# - artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
# job: e4s-mac-pr-generate
# strategy: depend
# needs:
# - artifacts: True
# job: e4s-mac-pr-generate
# e4s-mac-protected-build:
# extends: [ ".e4s-mac", ".mac-protected-build" ]
# trigger:
# include:
# - artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
# job: e4s-mac-protected-generate
# strategy: depend
# needs:
# - artifacts: True
# job: e4s-mac-protected-generate
########################################
# E4S pipeline
########################################
@@ -676,28 +762,6 @@ ml-linux-x86_64-rocm-build:
- artifacts: True
job: ml-linux-x86_64-rocm-generate
########################################
# Machine Learning - Darwin aarch64 (MPS)
########################################
.ml-darwin-aarch64-mps:
variables:
SPACK_CI_STACK_NAME: ml-darwin-aarch64-mps
ml-darwin-aarch64-mps-generate:
tags: [ "macos-ventura", "apple-clang-14", "aarch64-macos" ]
extends: [ ".ml-darwin-aarch64-mps", ".darwin-generate"]
ml-darwin-aarch64-mps-build:
extends: [ ".ml-darwin-aarch64-mps", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: ml-darwin-aarch64-mps-generate
strategy: depend
needs:
- artifacts: True
job: ml-darwin-aarch64-mps-generate
########################################
# Deprecated CI testing
########################################
@@ -724,17 +788,20 @@ deprecated-ci-build:
########################################
.aws-pcluster-generate-image:
image: { "name": "ghcr.io/spack/pcluster-amazonlinux-2:v2023-05-25", "entrypoint": [""] }
image: { "name": "ghcr.io/spack/pcluster-amazonlinux-2:latest", "entrypoint": [""] }
.aws-pcluster-generate:
before_script:
# Use gcc from local container buildcache
# Setup postinstall Spack as upstream installation
- - . "./share/spack/setup-env.sh"
- . /etc/profile.d/modules.sh
- spack mirror add local-cache /bootstrap/local-cache
- spack gpg trust /bootstrap/public-key
- if [[ -f /bootstrap/spack/etc/spack/packages.yaml ]]; then cp /bootstrap/spack/etc/spack/packages.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/config.yaml ]]; then cp /bootstrap/spack/etc/spack/config.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/modules.xyaml ]]; then cp /bootstrap/spack/etc/spack/modules.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/mirrors.yaml ]]; then cp /bootstrap/spack/etc/spack/mirrors.yaml ./etc/spack/; fi
- if [[ -d /bootstrap/spack/opt/spack ]]; then spack config add "upstreams:postinstall:install_tree:/bootstrap/spack/opt/spack"; fi
- cd "${CI_PROJECT_DIR}" && curl -sOL https://raw.githubusercontent.com/spack/spack-configs/main/AWS/parallelcluster/postinstall.sh
- sed -i -e "s/spack arch -t/echo ${SPACK_TARGET_ARCH}/g" postinstall.sh
- sed -i -e '/nohup/s/&$//' -e 's/nohup//' -e "s/spack arch -t/echo ${SPACK_TARGET_ARCH}/g" postinstall.sh
- /bin/bash postinstall.sh -fg
- spack config --scope site add "packages:all:target:\"target=${SPACK_TARGET_ARCH}\""
after_script:

View File

@@ -1,27 +0,0 @@
compilers:
- compiler:
spec: apple-clang@14.0.0
paths:
cc: /usr/bin/clang
cxx: /usr/bin/clang++
f77: /opt/homebrew/bin/gfortran
fc: /opt/homebrew/bin/gfortran
flags: {}
operating_system: ventura
target: aarch64
modules: []
environment: {}
extra_rpaths: []
- compiler:
spec: gcc@12.2.0
paths:
cc: /opt/homebrew/bin/gcc-12
cxx: /opt/homebrew/bin/g++-12
f77: /opt/homebrew/bin/gfortran-12
fc: /opt/homebrew/bin/gfortran-12
flags: {}
operating_system: ventura
target: aarch64
modules: []
environment: {}
extra_rpaths: []

View File

@@ -1,3 +0,0 @@
config:
install_tree:
root: $spack/opt/spack

View File

@@ -0,0 +1,14 @@
ci:
pipeline-gen:
- build-job:
script: |
- tmp="$(mktemp -d)"; export SPACK_USER_CONFIG_PATH="$tmp"; export SPACK_USER_CACHE_PATH="$tmp"
- . "./share/spack/setup-env.sh"
- spack --version
- spack arch
- 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
- spack --color=always --backtrace ci rebuild > >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_out.txt) 2> >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_err.txt >&2)
tags: ["lambda"]

View File

@@ -35,15 +35,18 @@ spack:
ci:
pipeline-gen:
- build-job:
image: { "name": "ghcr.io/spack/pcluster-amazonlinux-2:v2023-05-25", "entrypoint": [""] }
image: { "name": "ghcr.io/spack/pcluster-amazonlinux-2:latest", "entrypoint": [""] }
before_script:
- - . "./share/spack/setup-env.sh"
- . /etc/profile.d/modules.sh
- spack --version
- spack arch
# Use gcc from local container buildcache
- - spack mirror add local-cache /bootstrap/local-cache
- spack gpg trust /bootstrap/public-key
# Setup postinstall Spack as upstream installation
- - if [[ -f /bootstrap/spack/etc/spack/packages.yaml ]]; then cp /bootstrap/spack/etc/spack/packages.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/config.yaml ]]; then cp /bootstrap/spack/etc/spack/config.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/modules.yaml ]]; then cp /bootstrap/spack/etc/spack/modules.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/mirrors.yaml ]]; then cp /bootstrap/spack/etc/spack/mirrors.yaml ./etc/spack/; fi
- if [[ -d /bootstrap/spack/opt/spack ]]; then spack config add "upstreams:postinstall:install_tree:/bootstrap/spack/opt/spack"; fi
- - /bin/bash "${SPACK_ARTIFACTS_ROOT}/postinstall.sh" -fg
- spack config --scope site add "packages:all:target:\"target=${SPACK_TARGET_ARCH}\""
- signing-job:

View File

@@ -16,7 +16,7 @@ spack:
- openfoam
- palace
# - py-devito
# - quantum-espresso
- quantum-espresso
# - wrf
- optimized_libs:
@@ -36,16 +36,19 @@ spack:
ci:
pipeline-gen:
- build-job:
image: { "name": "ghcr.io/spack/pcluster-amazonlinux-2:v2023-05-25", "entrypoint": [""] }
image: { "name": "ghcr.io/spack/pcluster-amazonlinux-2:latest", "entrypoint": [""] }
tags: ["aarch64"]
before_script:
- - . "./share/spack/setup-env.sh"
- . /etc/profile.d/modules.sh
- spack --version
- spack arch
# Use gcc from local container buildcache
- - spack mirror add local-cache /bootstrap/local-cache
- spack gpg trust /bootstrap/public-key
# Setup postinstall Spack as upstream installation
- - if [[ -f /bootstrap/spack/etc/spack/packages.yaml ]]; then cp /bootstrap/spack/etc/spack/packages.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/config.yaml ]]; then cp /bootstrap/spack/etc/spack/config.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/modules.yaml ]]; then cp /bootstrap/spack/etc/spack/modules.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/mirrors.yaml ]]; then cp /bootstrap/spack/etc/spack/mirrors.yaml ./etc/spack/; fi
- if [[ -d /bootstrap/spack/opt/spack ]]; then spack config add "upstreams:postinstall:install_tree:/bootstrap/spack/opt/spack"; fi
- - /bin/bash "${SPACK_ARTIFACTS_ROOT}/postinstall.sh" -fg
- spack config --scope site add "packages:all:target:\"target=${SPACK_TARGET_ARCH}\""
- signing-job:

View File

@@ -16,7 +16,7 @@ spack:
- openfoam
- palace
# - py-devito
# - quantum-espresso
- quantum-espresso
# - wrf
- optimized_libs:
@@ -36,16 +36,19 @@ spack:
ci:
pipeline-gen:
- build-job:
image: { "name": "ghcr.io/spack/pcluster-amazonlinux-2:v2023-05-25", "entrypoint": [""] }
image: { "name": "ghcr.io/spack/pcluster-amazonlinux-2:latest", "entrypoint": [""] }
tags: ["aarch64"]
before_script:
- - . "./share/spack/setup-env.sh"
- . /etc/profile.d/modules.sh
- spack --version
- spack arch
# Use gcc from local container buildcache
- - spack mirror add local-cache /bootstrap/local-cache
- spack gpg trust /bootstrap/public-key
# Setup postinstall Spack as upstream installation
- - if [[ -f /bootstrap/spack/etc/spack/packages.yaml ]]; then cp /bootstrap/spack/etc/spack/packages.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/config.yaml ]]; then cp /bootstrap/spack/etc/spack/config.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/modules.yaml ]]; then cp /bootstrap/spack/etc/spack/modules.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/mirrors.yaml ]]; then cp /bootstrap/spack/etc/spack/mirrors.yaml ./etc/spack/; fi
- if [[ -d /bootstrap/spack/opt/spack ]]; then spack config add "upstreams:postinstall:install_tree:/bootstrap/spack/opt/spack"; fi
- - /bin/bash "${SPACK_ARTIFACTS_ROOT}/postinstall.sh" -fg
- spack config --scope site add "packages:all:target:\"target=${SPACK_TARGET_ARCH}\""
- signing-job:

View File

@@ -35,15 +35,18 @@ spack:
ci:
pipeline-gen:
- build-job:
image: { "name": "ghcr.io/spack/pcluster-amazonlinux-2:v2023-05-25", "entrypoint": [""] }
image: { "name": "ghcr.io/spack/pcluster-amazonlinux-2:latest", "entrypoint": [""] }
before_script:
- - . "./share/spack/setup-env.sh"
- . /etc/profile.d/modules.sh
- spack --version
- spack arch
# Use gcc from local container buildcache
- - spack mirror add local-cache /bootstrap/local-cache
- spack gpg trust /bootstrap/public-key
# Setup postinstall Spack as upstream installation
- - if [[ -f /bootstrap/spack/etc/spack/packages.yaml ]]; then cp /bootstrap/spack/etc/spack/packages.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/config.yaml ]]; then cp /bootstrap/spack/etc/spack/config.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/modules.yaml ]]; then cp /bootstrap/spack/etc/spack/modules.yaml ./etc/spack/; fi
- if [[ -f /bootstrap/spack/etc/spack/mirrors.yaml ]]; then cp /bootstrap/spack/etc/spack/mirrors.yaml ./etc/spack/; fi
- if [[ -d /bootstrap/spack/opt/spack ]]; then spack config add "upstreams:postinstall:install_tree:/bootstrap/spack/opt/spack"; fi
- - /bin/bash "${SPACK_ARTIFACTS_ROOT}/postinstall.sh" -fg
- spack config --scope site add "packages:all:target:\"target=${SPACK_TARGET_ARCH}\""
- signing-job:

View File

@@ -0,0 +1,40 @@
spack:
view: false
packages:
all:
compiler: [apple-clang@13.1.6]
target: [m1]
definitions:
- easy_specs:
- berkeley-db
- ncurses
- gcc
- py-jupyterlab
- py-scipy
- py-matplotlib
- py-pandas
- arch:
- '%apple-clang@13.1.6 target=m1'
specs:
- matrix:
- - $easy_specs
- - $arch
mirrors: { "mirror": "s3://spack-binaries/develop/e4s-mac" }
ci:
pipeline-gen:
- cleanup-job:
before_script: |
- export SPACK_USER_CACHE_PATH=$(pwd)/.spack-user-cache
- export SPACK_USER_CONFIG_PATH=$(pwd)/.spack-user-config
- . "./share/spack/setup-env.sh"
- spack --version
tags: [lambda]
cdash:
build-group: E4S Mac

View File

@@ -70,7 +70,6 @@ spack:
- charliecloud
- conduit
- datatransferkit
- dealii
- dyninst
- ecp-data-vis-sdk ~cuda ~rocm +adios2 +ascent +cinema +darshan +faodel +hdf5 +paraview +pnetcdf +sz +unifyfs +veloc ~visit +vtkm +zfp ^hdf5@1.14
- exaworks

View File

@@ -1,139 +0,0 @@
spack:
view: false
concretizer:
unify: false
reuse: false
config:
concretizer: clingo
db_lock_timeout: 120
install_tree:
root: $spack/opt/spack
padded_length: 256
projections:
all: '{architecture}/{compiler.name}-{compiler.version}/{name}-{version}-{hash}'
packages:
all:
require: target=aarch64
variants: +mps~cuda~rocm
mpi:
require: openmpi
specs:
# Hugging Face
- py-transformers
# JAX
- py-jax
# - py-jaxlib # bazel codesign
# Keras
- py-keras-applications
- py-keras-preprocessing
- py-keras2onnx
# - py-keras # bazel codesign
# MXNet
- mxnet
# PyTorch
- py-botorch
- py-gpytorch
- py-pytorch-gradual-warmup-lr
- py-segmentation-models-pytorch
- py-timm
- py-torch
- py-torch-cluster
- py-torch-geometric
- py-torch-sparse
- py-torchdata
- py-torchfile
- py-torchgeo
- py-torchvision
# scikit-learn
- py-scikit-learn
- py-scikit-learn-extra
# TensorBoard
- py-tensorboard
- py-tensorboard-data-server
- py-tensorboard-plugin-wit
- py-tensorboardx
# TensorFlow
# - py-tensorflow # bazel codesign
# - py-tensorflow-datasets # bazel codesign
# - py-tensorflow-hub # bazel codesign
# - py-tensorflow-metadata # bazel codesign
# - py-tensorflow-estimator # bazel codesign
# - py-tensorflow-probability # py-dm-tree due to bazel codesign
# XGBoost
- py-xgboost
- xgboost
# ERRORS
# - py-efficientnet-pytorch # py-torch
# - py-horovod # py-torch
# - py-kornia # py-torch
# - py-lightning # py-torch
# - py-pytorch-lightning # py-torch
# - py-torch-nvidia-apex # py-torch
# - py-torch-scatter # py-torch
# - py-torch-spline-conv # py-torch
# - py-torchaudio # py-torchaudio
# - py-torchmetrics # py-torch
# - py-torchtext # py-torchtext
# - py-vector-quantize-pytorch # py-torch
# - r-xgboost # r
mirrors: { "mirror": "s3://spack-binaries/develop/ml-darwin-aarch64-cpu" }
ci:
pipeline-gen:
- build-job-remove:
image: no-image
tags: [spack, public]
- build-job:
tags: [ "macos-ventura", "apple-clang-14", "aarch64-macos" ]
script::
- - spack compiler find
- cd ${SPACK_CONCRETE_ENV_DIR}
- spack env activate --without-view .
- if [ -n "$SPACK_BUILD_JOBS" ]; then spack config add "config:build_jobs:$SPACK_BUILD_JOBS"; fi
- mkdir -p ${SPACK_ARTIFACTS_ROOT}/user_data
# AWS runners mount E4S public key (verification), UO runners mount public/private (signing/verification)
- if [[ -r /etc/protected-runner/e4s.gpg ]]; then spack gpg trust /etc/protected-runner/e4s.gpg; fi
# UO runners mount intermediate ci public key (verification), AWS runners mount public/private (signing/verification)
- if [[ -r /etc/protected-runner/intermediate_ci_signing_key.gpg ]]; then spack gpg trust /etc/protected-runner/intermediate_ci_signing_key.gpg; fi
- if [[ -r /etc/protected-runner/spack_public_key.gpg ]]; then spack gpg trust /etc/protected-runner/spack_public_key.gpg; fi
- spack --color=always --backtrace ci rebuild --tests > >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_out.txt) 2> >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_err.txt >&2)
after_script:
- - cat /proc/loadavg || true
- signing-job:
image: { "name": "ghcr.io/spack/notary:latest", "entrypoint": [""] }
tags: ["aws"]
script:
- - aws s3 sync --exclude "*" --include "*spec.json*" ${SPACK_REMOTE_MIRROR_OVERRIDE}/build_cache /tmp
- /sign.sh
- aws s3 sync --exclude "*" --include "*spec.json.sig*" /tmp ${SPACK_REMOTE_MIRROR_OVERRIDE}/build_cache
- aws s3 cp /tmp/public_keys ${SPACK_REMOTE_MIRROR_OVERRIDE}/build_cache/_pgp --recursive --exclude "*" --include "*.pub"
- any-job:
image: "ghcr.io/spack/e4s-ubuntu-18.04:v2021-10-18"
tags: ["spack"]
before_script:
- - uname -a || true
- grep -E "vendor|model name" /proc/cpuinfo 2>/dev/null | sort -u || head -n10 /proc/cpuinfo 2>/dev/null || true
- nproc || true
- - . "./share/spack/setup-env.sh"
- spack --version
- spack arch
cdash:
build-group: Machine Learning MPS
url: https://cdash.spack.io
project: Spack Testing
site: Cloud Gitlab Infrastructure

View File

@@ -1060,7 +1060,7 @@ _spack_external_list() {
}
_spack_external_read_cray_manifest() {
SPACK_COMPREPLY="-h --help --file --directory --ignore-default-dir --dry-run --fail-on-error"
SPACK_COMPREPLY="-h --help --file --directory --dry-run --fail-on-error"
}
_spack_fetch() {

View File

@@ -36,40 +36,6 @@
}
_versions = {
"23.04.1": {
"RHEL-7": (
"5e84daaf0510f73c235723112f9241bbd744ed89eb4f70f089bac05cf2aad2c4",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/23-04-1/arm-compiler-for-linux_23.04.1_RHEL-7_aarch64.tar",
),
"RHEL-8": (
"6ec1f2c7338ea8a2831a7ff353ab44f87804f56716d1f3686576fb950c2f730f",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/23-04-1/arm-compiler-for-linux_23.04.1_RHEL-8_aarch64.tar",
),
"RHEL-9": (
"dbd6493ea762b9b4c6cb54a76ad42e2223360882165ee3c223c1b7d1ebe927e2",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/23-04-1/arm-compiler-for-linux_23.04.1_RHEL-9_aarch64.tar",
),
"SLES-15": (
"74c29890d47556114922c77e5a9797b055f8fe49f0c8665d17102465fca766b4",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/23-04-1/arm-compiler-for-linux_23.04.1_SLES-15_aarch64.tar",
),
"Ubuntu-20.04": (
"78015ff5a246facfe45219a03a3774221b2f3b58db6fa3d9840d2574d103310c",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/23-04-1/arm-compiler-for-linux_23.04.1_Ubuntu-20.04_aarch64.tar",
),
"Ubuntu-22.04": (
"19213db67aa11de44b617255e9e32efd294f930c6b6145192acf9ee331452ea6",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/23-04-1/arm-compiler-for-linux_23.04.1_Ubuntu-22.04_aarch64.tar",
),
"AmazonLinux-2": (
"31ba559302a2889e5f0897f1c07563b20a5a8eaa671e623bef406b6490d1f4f2",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/23-04-1/arm-compiler-for-linux_23.04.1_AmazonLinux-2_aarch64.tar",
),
"AmazonLinux-2023": (
"fa38f3d79775e9a537c59c8ba39c3b10505e895a3602bbd93c09445170db571f",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/23-04-1/arm-compiler-for-linux_23.04.1_AmazonLinux-2023_aarch64.tar",
),
},
"23.04": {
"RHEL-7": (
"6526218484e87c195c1145f60536552fabbd25ba98c05cf096f54de18381a422",
@@ -106,23 +72,23 @@
},
"22.1": {
"RHEL-7": (
"367b9a60fa13b5fcf2fa787122c12d4bfb14d6f3e3e7b0460efc7627484a56a4",
"bfbfef9099bf0e90480d48b3a1a741d583fc939284f869958e9c09e177098c73",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/22-1/arm-compiler-for-linux_22.1_RHEL-7_aarch64.tar",
),
"RHEL-8": (
"f03ad3381a74df73a4c25baf5f1c15bd466cfd6286498c38b37ddeaa85c9965e",
"28116f6030c95ee8f69eba89023966974d6b44d4a686098f5c3c03e34f7495f6",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/22-1/arm-compiler-for-linux_22.1_RHEL-8_aarch64.tar",
),
"SLES-15": (
"8a1c5bd570bd195982c342da8dafb7075f8f6b373b44539d4c810e69e8157c1f",
"6616dba1af4a73300ce822b645a0f1dfd363f507db5ea44cab1c6051ea388554",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/22-1/arm-compiler-for-linux_22.1_SLES-15_aarch64.tar",
),
"Ubuntu-18.04": (
"4628599d389efcee07d0986cc3e791931e6a37eddb6e4b93c7846e17efe2148f",
"3b3dd6f416299fbd14fbaf0b1bddf7e2f4445a186de7a87e9efdae0b9d0dc3d5",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/22-1/arm-compiler-for-linux_22.1_Ubuntu-18.04_aarch64.tar",
),
"Ubuntu-20.04": (
"20d950d16e6bb0b3a4c4f3c8ad393aae2356d4c998303b319da9e9833d4a6d12",
"e6361a08f75817c8dbfb56dc72578810eaf5ffb65591215e394cb3ec6bdd9c10",
"https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/22-1/arm-compiler-for-linux_22.1_Ubuntu-20.04_aarch64.tar",
),
},
@@ -233,8 +199,8 @@ class Acfl(Package):
with a modern LLVM-based compiler framework.
"""
homepage = "https://developer.arm.com/Tools%20and%20Software/Arm%20Compiler%20for%20Linux"
url = "https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/23-04-1/arm-compiler-for-linux_23.04.1_Ubuntu-22.04_aarch64.tar"
homepage = "https://developer.arm.com/tools-and-software/server-and-hpc/arm-allinea-studio"
url = "https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/22-1/arm-compiler-for-linux_22.1_Ubuntu-20.04_aarch64.tar"
maintainers("annop-w")

View File

@@ -21,8 +21,6 @@ class Amgx(CMakePackage, CudaPackage):
maintainers("js947")
version("2.3.0", sha256="419b3cd5bd3eb3469cbef79d64a8d19d5db88dd5cce809e49cac6fc4fc2edff1")
version("2.2.0", sha256="dac78516bb528135cad903399fe0093aa0904e304565ef2d3da4fae05eda7928")
version("2.1.0", sha256="6245112b768a1dc3486b2b3c049342e232eb6281a6021fffa8b20c11631f63cc")
version("2.0.1", sha256="6f9991f1836fbf4ba2114ce9f49febd0edc069a24f533bd94fd9aa9be72435a7")
version("2.0.0", sha256="8ec7ea8412be3de216fcf7243c4e2a8bcf76878e6865468e4238630a082a431b")

View File

@@ -314,20 +314,43 @@ def cmake_args(self):
return args
# TODO: Replace this method and its 'get' use for cmake path with
# join_path(self.spec['cmake'].prefix.bin, 'cmake') once stand-alone
# tests can access build dependencies through self.spec['cmake'].
def cmake_bin(self, set=True):
"""(Hack) Set/get cmake dependency path."""
filepath = join_path(self.install_test_root, "cmake_bin_path.txt")
if set:
with open(filepath, "w") as out_file:
cmake_bin = join_path(self.spec["cmake"].prefix.bin, "cmake")
out_file.write("{0}\n".format(cmake_bin))
else:
with open(filepath, "r") as in_file:
return in_file.read().strip()
@run_after("build")
def setup_standalone_test(self):
"""Setup stand-alonetests for AMReX versions from 21.12 on."""
def setup_smoke_test(self):
"""Skip setup smoke tests for AMReX versions less than 21.12."""
if self.spec.satisfies("@:21.11"):
return
self.cache_extra_test_sources(["Tests"])
def test_run_install_test(self):
"""build and run AmrCore test"""
if self.spec.satisfies("@:21.11"):
raise SkipTest("Test is not supported for versions @:21.11")
# TODO: Remove once self.spec['cmake'] is available here
self.cmake_bin(set=True)
args = ["-S{0}".format(join_path(".", "cache", "amrex", "Tests", "SpackSmokeTest"))]
def test(self):
"""Skip smoke tests for AMReX versions less than 21.12."""
if self.spec.satisfies("@:21.11"):
print("SKIPPED: Stand-alone tests not supported for this version of AMReX.")
return
"""Perform smoke tests on installed package."""
# TODO: Remove/replace once self.spec['cmake'] is available here
cmake_bin = self.cmake_bin(set=False)
args = []
args.append("-S./cache/amrex/Tests/SpackSmokeTest")
args.append("-DAMReX_ROOT=" + self.prefix)
if "+mpi" in self.spec:
args.append("-DMPI_C_COMPILER=" + self.spec["mpi"].mpicc)
@@ -337,15 +360,15 @@ def test_run_install_test(self):
args.append("-DCMAKE_CUDA_COMPILER=" + join_path(self.spec["cuda"].prefix.bin, "nvcc"))
args.extend(self.cmake_args())
cmake = which(self.spec["cmake"].prefix.bin.cmake)
cmake(*args)
self.run_test(cmake_bin, args, purpose="Configure with CMake")
make = which("make")
make()
self.run_test("make", [], purpose="Compile")
install_test = which("install_test")
inputs_path = join_path(
".", "cache", "amrex", "Tests", "Amr", "Advection_AmrCore", "Exec", "inputs-ci"
self.run_test(
"install_test",
["./cache/amrex/Tests/Amr/Advection_AmrCore/Exec/inputs-ci"],
["finalized"],
installed=False,
purpose="AMReX Stand-Alone Smoke Test -- AmrCore",
skip_missing=False,
)
out = install_test(inputs_path, output=str.split, error=str.split)
assert "finalized" in out

View File

@@ -0,0 +1,38 @@
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
import spack.compilers.apple_clang
class AppleClang(Package):
def install(self, spec, prefix):
raise NotImplementedError
executables = [r"^clang\+\+", r"^clang"]
@classmethod
def determine_version(cls, exe):
try:
output = spack.compiler.get_compiler_version_output(exe, "--version")
except Exception:
output = ""
version = spack.compilers.apple_clang.AppleClang.extract_version_from_output(output)
if version == "unknown":
return None
return version
@classmethod
def determine_variants(cls, exes, version_str):
compilers = {}
for exe in exes:
basename = os.path.basename(exe)
if basename == "clang":
compilers["c"] = exe
elif basename == "clang++":
compilers["cxx"] = exe
return "", {"compilers": compilers}

View File

@@ -2,7 +2,6 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
@@ -18,10 +17,7 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage):
maintainers("aprokop")
test_requires_compiler = True
version("master", branch="master")
version("1.4", sha256="803a1018a6305cf3fea161172b3ada49537f59261279d91c2abbcce9492ee7af")
version("1.3", sha256="3f1e17f029a460ab99f8396e2772cec908eefc4bf3868c8828907624a2d0ce5d")
version("1.2", sha256="ed1939110b2330b7994dcbba649b100c241a2353ed2624e627a200a398096c20")
version("1.1", sha256="2b5f2d2d5cec57c52f470c2bf4f42621b40271f870b4f80cb57e52df1acd90ce")
@@ -65,8 +61,7 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage):
# Standalone Kokkos
depends_on("kokkos@3.1.00:", when="~trilinos")
depends_on("kokkos@3.4.00:", when="@1.2~trilinos")
depends_on("kokkos@3.6.00:", when="@1.3~trilinos")
depends_on("kokkos@3.7.01:", when="@1.4:~trilinos")
depends_on("kokkos@3.6.00:", when="@1.3:~trilinos")
for backend in kokkos_backends:
depends_on("kokkos+%s" % backend.lower(), when="~trilinos+%s" % backend.lower())
@@ -88,8 +83,7 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage):
depends_on("trilinos+kokkos", when="+trilinos")
depends_on("trilinos+openmp", when="+trilinos+openmp")
depends_on("trilinos@13.2.0:", when="@1.2+trilinos")
depends_on("trilinos@13.4.0:", when="@1.3+trilinos")
depends_on("trilinos@14.0.0:", when="@1.4:+trilinos")
depends_on("trilinos@13.4.0:", when="@1.3:+trilinos")
conflicts("~serial", when="+trilinos")
conflicts("+cuda", when="+trilinos")
@@ -123,18 +117,18 @@ def cached_tests_work_dir(self):
"""The working directory for cached test sources."""
return join_path(self.test_suite.current_test_cache_dir, self.examples_src_dir)
def test_run_ctest(self):
"""run ctest tests on the installed package"""
def build_tests(self):
"""Build the stand-alone/smoke test."""
arborx_dir = self.spec["arborx"].prefix
cmake_prefix_path = f"-DCMAKE_PREFIX_PATH={arborx_dir}"
cmake_prefix_path = "-DCMAKE_PREFIX_PATH={0}".format(arborx_dir)
if "+mpi" in self.spec:
cmake_prefix_path += f";{self.spec['mpi'].prefix}"
cmake_prefix_path += ";{0}".format(self.spec["mpi"].prefix)
cmake_args = [
".",
cmake_prefix_path,
f"-DCMAKE_CXX_COMPILER={os.environ['CXX']}",
"-DCMAKE_CXX_COMPILER={0}".format(self.compiler.cxx),
self.define(
"Kokkos_ROOT",
self.spec["kokkos"].prefix
@@ -142,11 +136,23 @@ def test_run_ctest(self):
else self.spec["trilinos"].prefix,
),
]
cmake = which(self.spec["cmake"].prefix.bin.cmake)
make = which("make")
ctest = which("ctest")
with working_dir(self.cached_tests_work_dir):
cmake(*cmake_args)
make()
ctest("-V")
self.run_test(
"cmake", cmake_args, purpose="test: calling cmake", work_dir=self.cached_tests_work_dir
)
self.run_test(
"make", [], purpose="test: building the tests", work_dir=self.cached_tests_work_dir
)
def test(self):
"""Perform stand-alone/smoke tests on the installed package."""
self.build_tests()
self.run_test(
"ctest",
["-V"],
purpose="test: running the tests",
installed=False,
work_dir=self.cached_tests_work_dir,
)

View File

@@ -3,6 +3,7 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
@@ -49,17 +50,25 @@ def cache_test_sources(self):
install test subdirectory for use during `spack test run`."""
self.cache_extra_test_sources(["test"])
def test_run_parallel_example(self):
"""build and run parallel-simple"""
def run_parallel_example_test(self):
"""Run stand alone test: parallel-simple"""
test_dir = join_path(self.test_suite.current_test_cache_dir, "test", "parallel")
if not os.path.exists(test_dir):
raise SkipTest("Parallel test directory does not exist")
print("Skipping archer test")
return
test_exe = "parallel-simple"
test_src = "{0}.c".format(test_exe)
with working_dir(test_dir):
clang = which("clang-archer")
clang("-o", test_exe, test_src)
exe = "parallel-simple"
parallel_simple = which(test_exe)
parallel_simple()
self.run_test(
"clang-archer",
options=["-o", exe, "{0}".format(join_path(test_dir, "parallel-simple.c"))],
purpose="test: compile {0} example".format(exe),
work_dir=test_dir,
)
self.run_test(exe, purpose="test: run {0} example".format(exe), work_dir=test_dir)
def test(self):
self.run_parallel_example_test()

View File

@@ -36,50 +36,6 @@
}
_versions = {
"23.04.1_gcc-12.2": {
"RHEL-7": ("789cc093cb7e0d9294aff0fdf94b74987435a09cdff4c1b7118a03350548d03c"),
"RHEL-8": ("1b668baec6d3df2d48c5aedc70baa6a9b638983b94bf2cd58d378859a1da49f0"),
"RHEL-9": ("8a4d7aec2fe109aedcb9e8fdec566dc1ba3adcb3ba79e5c08b78b9717578db1c"),
"SLES-15": ("9c8aa114907d3ac9311301b991d732d535422e73516e0f337395637ce6a14c4a"),
"Ubuntu-20.04": ("c0a67afb6989b2bdb172052ff7d20a9e3197356714df06c862edd3ac71ef62f0"),
"Ubuntu-22.04": ("02e59d834c341164f5acf633555024bf614726aed8a85c1b0b46d024ce7840e2"),
"AmazonLinux-2": ("1cbb9a3d777353b42bfb5af327419c231640e7744ab46ab3a13e97802b1ce227"),
"AmazonLinux-2023": ("ee9b0b6ee0d881280e473390007020504a147b75bf6076d245832f101b01653e"),
},
"23.04.1_gcc-11.3": {
"RHEL-7": ("522e0269ca03d6251c10ee3aa8d94ceec4618887f47847defb535849434439a5"),
"RHEL-8": ("00f6fee4ba4bbff5be6d5ad34137973ab89505fc61a23d8e0c302b8860c70484"),
"RHEL-9": ("2402165267b25d07fd64b6d444b3120354dfd27594b11a1f082e85e76465e712"),
"SLES-15": ("a928539efe5af760fc86a009e3d87c9648e4d4e91490c13bc136a837591549c3"),
"Ubuntu-20.04": ("5754d8a6040bb6d0b1df326c9ab61901a72e5cc6d2d4195e52ca9271e55fb9f6"),
"Ubuntu-22.04": ("8af5aca7512a604b051a7808701a5c0285e92d88232138612d8caf973b7b1252"),
"AmazonLinux-2": ("8c710cb7bb21694130b915cc2650cfb85fb00cfca7e5fca9bbdec5c59a09c007"),
"AmazonLinux-2023": ("8b9c69a72c5b1ed5814e28ddd122ab09dbe5dd3585e4c395242ed590eea6ea79"),
},
"23.04.1_gcc-10.2": {
"RHEL-7": ("40d62517bd978516c308b2e57ab88772699fd8bb579d98bbc10ea397c0bab431"),
"RHEL-8": ("76554ea1f3d143f1236afea67e33eea74660f57718ef57c12986843da75e03d3"),
"SLES-15": ("63a6acb00300a9e85cfafd2141515ecb28dac82c1f441778d74e8add038724e2"),
"Ubuntu-20.04": ("7b6bcb8d1b9ca8be2d29e7620862fa961d965f479fa04873616ac8cc9bb399fc"),
"AmazonLinux-2": ("c6410ce2c109ae72568186bb7e162fcf4a9b05ea89da36d17db695b7df34f506"),
},
"23.04.1_gcc-9.3": {
"RHEL-7": ("782bbc27c77c230426086c226a78b8951501066d631947438e65ca51d33f24c3"),
"RHEL-8": ("8d3be6381b3e5032c5068a1d2e3d0e69c308a93496f85af42d43a579f9f7d9a3"),
"SLES-15": ("abe2245674a66ec93cff3c93dac7ae04a99c6c7e43e2733de214ec188e0d6cae"),
"Ubuntu-20.04": ("a7d385b901f2d1c07f243c816030ad19543e00667615dea1969ce16d29759271"),
"AmazonLinux-2": ("7113b6e2c795933ce8d18d468889168732d3a52a0df4a48ef4bf4497e891083a"),
},
"23.04.1_gcc-8.2": {
"RHEL-7": ("4e077813121c1cbd8abd1afe5348cafcce5b70f96affa725c7c2d8671e2d5eed"),
"RHEL-8": ("772aaab9304191e3a398cba2dec21ec22fd0abadcaf44d44f32114968bd3b59d"),
"SLES-15": ("33766ac351fb4628c6b39f16d6bdb310ad09d88b6a6f43740349405c960d4d21"),
"AmazonLinux-2": ("c215ed8de77b5144a60b6552f79ef2b59ccbfac5350f083ef135305ddf643a4e"),
},
"23.04.1_gcc-7.5": {
"RHEL-7": ("7b2239b2ce5315e1be14dbd8fe15aff2d3b07968d64b5c80c8ab57140b6a17a8"),
"AmazonLinux-2": ("a2e0f176df627c50f851924ac57994f582f63b0f3d42ad0b65c915ea04dc0467"),
},
"23.04_gcc-12.2": {
"RHEL-7": ("e159f84f14d885aa5e47ca17c16ef3d95128f834a655827bf6b48fcf8d6ec459"),
"RHEL-8": ("6ac1974ec9bd814d3a4eecf330cefd67cf2c878f026a8b04bc2928368948671a"),
@@ -269,13 +225,6 @@ class ArmplGcc(Package):
conflicts("target=ppc64:", msg="Only available on Aarch64")
conflicts("target=ppc64le:", msg="Only available on Aarch64")
conflicts("%gcc@:11", when="@23.04.1_gcc-12.2")
conflicts("%gcc@:10", when="@23.04.1_gcc-11.3")
conflicts("%gcc@:9", when="@23.04.1_gcc-10.2")
conflicts("%gcc@:8", when="@23.04.1_gcc-9.3")
conflicts("%gcc@:7", when="@23.04.1_gcc-8.2")
conflicts("%gcc@:6", when="@23.04.1_gcc-7.5")
conflicts("%gcc@:11", when="@23.04_gcc-12.2")
conflicts("%gcc@:10", when="@23.04_gcc-11.3")
conflicts("%gcc@:9", when="@23.04_gcc-10.2")

View File

@@ -14,44 +14,17 @@ class Asio(AutotoolsPackage):
homepage = "https://think-async.com/Asio/"
url = "https://github.com/chriskohlhoff/asio/archive/asio-1-18-2.tar.gz"
git = "https://github.com/chriskohlhoff/asio.git"
maintainers("msimberg", "pauleonix")
maintainers("msimberg")
# As uneven minor versions of asio are not considered stable, they wont be added anymore
version("1.28.0", sha256="226438b0798099ad2a202563a83571ce06dd13b570d8fded4840dbc1f97fa328")
version("1.26.0", sha256="935583f86825b7b212479277d03543e0f419a55677fa8cb73a79a927b858a72d")
version("1.24.0", sha256="cbcaaba0f66722787b1a7c33afe1befb3a012b5af3ad7da7ff0f6b8c9b7a8a5b")
version("1.22.2", sha256="985fc2d522f32d232d8386d2fa4ac6f2b25a0cad30495bf2e2e7997bce743f0b")
version("1.22.1", sha256="30cb54a5de5e465d10ec0c2026d6b5917f5e89fffabdbabeb1475846fc9a2cf0")
version("1.22.0", sha256="17bfd506f6d55c85a33603277a256b42ca5883bf290930040489ffeeed23724a")
version(
"1.21.0",
sha256="5d2d2dcb7bfb39bff941cabbfc8c27ee322a495470bf0f3a7c5238648cf5e6a9",
deprecated=True, # non-stable
)
version("1.21.0", sha256="5d2d2dcb7bfb39bff941cabbfc8c27ee322a495470bf0f3a7c5238648cf5e6a9")
version("1.20.0", sha256="34a8f07be6f54e3753874d46ecfa9b7ab7051c4e3f67103c52a33dfddaea48e6")
version(
"1.19.2",
sha256="5ee191aee825dfb1325cbacf643d599b186de057c88464ea98f1bae5ba4ff47a",
deprecated=True, # non-stable
)
version(
"1.19.1",
sha256="2555e0a29256de5c77d6a34b14faefd28c76555e094ba0371acb0b91d483520e",
deprecated=True, # non-stable
)
version(
"1.19.0",
sha256="11bc0e22fcdfb3f0b77574ac33760a3592c0dac7e7eece7668b823c158243629",
deprecated=True, # non-stable
)
version("1.19.2", sha256="5ee191aee825dfb1325cbacf643d599b186de057c88464ea98f1bae5ba4ff47a")
version("1.19.1", sha256="2555e0a29256de5c77d6a34b14faefd28c76555e094ba0371acb0b91d483520e")
version("1.19.0", sha256="11bc0e22fcdfb3f0b77574ac33760a3592c0dac7e7eece7668b823c158243629")
version("1.18.2", sha256="8d67133b89e0f8b212e9f82fdcf1c7b21a978d453811e2cd941c680e72c2ca32")
version("1.18.1", sha256="39c721b987b7a0d2fe2aee64310bd128cd8cc10f43481604d18cb2d8b342fd40")
version("1.18.0", sha256="820688d1e0387ff55194ae20036cbae0fb3c7d11b7c3f46492369723c01df96f")
version(
"1.17.0",
sha256="46406a830f8334b3789e7352ed7309a39c7c30b685b0499d289eda4fd4ae2067",
deprecated=True, # non-stable
)
version("1.17.0", sha256="46406a830f8334b3789e7352ed7309a39c7c30b685b0499d289eda4fd4ae2067")
version("1.16.1", sha256="e40bbd531530f08318b7c7d7e84e457176d8eae6f5ad2e3714dc27b9131ecd35")
version("1.16.0", sha256="c87410ea62de6245aa239b9ed2057edf01d7f66acc3f5e50add9a29343c87512")
@@ -59,15 +32,6 @@ class Asio(AutotoolsPackage):
depends_on("automake", type="build")
depends_on("m4", type="build")
depends_on("libtool", type="build")
depends_on("pkgconfig", type="build", when="@1.23:")
# See https://github.com/chriskohlhoff/asio/issues/944 and
# https://github.com/chriskohlhoff/asio/pull/995
conflicts(
"%gcc@12:",
when="@:1.22.0",
msg="asio v1.22.1 fixed missing includes necessary for gcc v12 and above",
)
stds = ("11", "14", "17", "2a")
variant(

View File

@@ -1,22 +0,0 @@
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class Azcopy(Package):
"""AzCopy is a command-line utility that you can use to copy data to and from containers and
file shares in Azure Storage accounts.
"""
homepage = "https://github.com/Azure/azure-storage-azcopy"
url = "https://github.com/Azure/azure-storage-azcopy/archive/refs/tags/v10.18.1.tar.gz"
version("10.18.1", sha256="80292625d7f1a6fc41688c5948b3a20cfdae872464d37d831e20999430819c3f")
depends_on("go", type="build")
def install(self, spec, prefix):
go("build", "-o", prefix.bin.azcopy)

View File

@@ -12,6 +12,8 @@ class Bart(MakefilePackage, CudaPackage):
homepage = "https://mrirecon.github.io/bart/"
url = "https://github.com/mrirecon/bart/archive/v0.5.00.tar.gz"
maintainers("glennpj")
version("0.7.00", sha256="a16afc4b632c703d95b5c34e47acd82fafc19f51f9aff442373eecfef08bfc41")
version("0.6.00", sha256="dbbd33d1e3ed3324fe21f90a3b62cb51765fe369f21df100b46a32004928f18d")
version("0.5.00", sha256="30eedcda0f0ef3808157542e0d67df5be49ee41e4f41487af5c850632788f643")

View File

@@ -12,10 +12,7 @@ class Bbcp(Package):
homepage = "https://www.slac.stanford.edu/~abh/bbcp/"
git = "https://www.slac.stanford.edu/~abh/bbcp/bbcp.git"
maintainers("vanderwb")
# Stanford's git server does not support "smart https" shallow clones
version("master", branch="master", get_full_repo=True)
version("master", branch="master")
depends_on("zlib")
depends_on("openssl")

View File

@@ -17,13 +17,6 @@ class Beast2(Package):
homepage = "http://beast2.org/"
url = "https://github.com/CompEvol/beast2/releases/download/v2.6.4/BEAST.v2.6.4.Linux.tgz"
maintainers("snehring")
version(
"2.7.4",
sha256="f5086c74a0337190ae3459ef018468fc6b2eff68ae2b53fb5c96eb7b5df84004",
url="https://github.com/CompEvol/beast2/releases/download/v2.7.4/BEAST.v2.7.4.Linux.x86.tgz",
)
version("2.6.7", sha256="05dcc619c2e10163f2c1089ec66149f6e53ec5a0583cd2cb8ffdccbbdb1d8183")
version("2.6.4", sha256="4f80e2920eb9d87f3e9f64433119774dc67aca390fbd13dd480f852e3f8701a4")
version("2.6.3", sha256="8899277b0d7124ab04dc512444d45f0f1a13505f3ce641e1f117098be3e2e20d")
@@ -31,19 +24,6 @@ class Beast2(Package):
version("2.4.6", sha256="84029c5680cc22f95bef644824130090f5f12d3d7f48d45cb4efc8e1d6b75e93")
depends_on("java")
depends_on("java@17:", when="@2.7.0:")
depends_on("javafx", when="@2.7.0:")
def patch(self):
# handle javafx stuff
if self.spec.satisfies("@2.7.0:"):
javafx = "--module-path {}".format(self.spec["javafx"].prefix.lib)
modules = "--add-modules javafx.controls"
with working_dir("bin"):
for i in find(".", "*"):
filter_file(
r"(beast\.pkgmgmt.*\b)|(viz.*\b)", "{0} {1} \\1".format(javafx, modules), i
)
def setup_run_environment(self, env):
env.set("BEAST", self.prefix)
@@ -53,8 +33,4 @@ def install(self, spec, prefix):
install_tree("examples", join_path(self.prefix, "examples"))
install_tree("images", join_path(self.prefix, "images"))
install_tree("lib", prefix.lib)
if spec.satisfies("@:2.6.4"):
template_dir = "templates"
else:
template_dir = "fxtemplates"
install_tree(template_dir, join_path(self.prefix, template_dir))
install_tree("templates", join_path(self.prefix, "templates"))

View File

@@ -16,8 +16,6 @@ class Bedops(MakefilePackage):
url = "https://github.com/bedops/bedops/archive/v2.4.39.tar.gz"
maintainers("jacorvar")
version("2.4.41", sha256="3b868c820d59dd38372417efc31e9be3fbdca8cf0a6b39f13fb2b822607d6194")
version("2.4.40", sha256="8c01db76669dc58c595e2e1b9bdb6d462f3363fc569b15c460a63a63b8b6bf30")
version("2.4.39", sha256="f8bae10c6e1ccfb873be13446c67fc3a54658515fb5071663883f788fc0e4912")
version("2.4.35", sha256="da0265cf55ef5094834318f1ea4763d7a3ce52a6900e74f532dd7d3088c191fa")

View File

@@ -2,7 +2,6 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
import re
from spack.package import *
@@ -94,40 +93,25 @@ def configure_args(self):
return config_args
def check_exe_version(self, exe):
"""Check that the installed executable prints the correct version."""
installed_exe = join_path(self.prefix.bin, exe)
if not os.path.exists(installed_exe):
raise SkipTest(f"{exe} is not installed")
exe = which(installed_exe)
out = exe("-V", output=str.split, error=str.split)
assert self.spec.version.string in out
def test_db_checkpoint(self):
"""check db_checkpoint version"""
self.check_exe_version("db_checkpoint")
def test_db_deadlock(self):
"""check db_deadlock version"""
self.check_exe_version("db_deadlock")
def test_db_dump(self):
"""check db_dump version"""
self.check_exe_version("db_dump")
def test_db_load(self):
"""check db_load version"""
self.check_exe_version("db_load")
def test_db_stat(self):
"""check db_stat version"""
self.check_exe_version("db_stat")
def test_db_upgrade(self):
"""check db_upgrade version"""
self.check_exe_version("db_upgrade")
def test_db_verify(self):
"""check db_verify version"""
self.check_exe_version("db_verify")
def test(self):
"""Perform smoke tests on the installed package binaries."""
exes = [
"db_checkpoint",
"db_deadlock",
"db_dump",
"db_load",
"db_printlog",
"db_stat",
"db_upgrade",
"db_verify",
]
for exe in exes:
reason = "test version of {0} is {1}".format(exe, self.spec.version)
self.run_test(
exe,
["-V"],
[self.spec.version.string],
installed=True,
purpose=reason,
skip_missing=True,
)

View File

@@ -2,7 +2,6 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
import re
import spack.build_systems.autotools
@@ -193,36 +192,31 @@ def flag_handler(self, name, flags):
iflags.append("-Wl,-z,notext")
return (iflags, None, flags)
def test_binaries(self):
binaries = [
"ar",
"c++filt",
"coffdump",
"dlltool",
"elfedit",
"gprof",
"ld",
"nm",
"objdump",
"ranlib",
"readelf",
"size",
"strings",
]
def test(self):
spec_vers = str(self.spec.version)
# Since versions can have mixed separator characters after the minor
# version, just check the first two components
version = str(self.spec.version.up_to(2))
for _bin in binaries:
reason = "checking version of {0} is {1}".format(_bin, version)
with test_part(self, "test_binaries_{0}".format(_bin), purpose=reason):
installed_exe = join_path(self.prefix.bin, _bin)
if not os.path.exists(installed_exe):
raise SkipTest("{0} is not installed".format(_bin))
checks = {
"ar": spec_vers,
"c++filt": spec_vers,
"coffdump": spec_vers,
"dlltool": spec_vers,
"elfedit": spec_vers,
"gprof": spec_vers,
"ld": spec_vers,
"nm": spec_vers,
"objdump": spec_vers,
"ranlib": spec_vers,
"readelf": spec_vers,
"size": spec_vers,
"strings": spec_vers,
}
exe = which(installed_exe)
out = exe("--version", output=str.split, error=str.split)
assert version in out
for exe in checks:
expected = checks[exe]
reason = "test: ensuring version of {0} is {1}".format(exe, expected)
self.run_test(
exe, "--version", expected, installed=True, purpose=reason, skip_missing=True
)
class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder):

View File

@@ -30,16 +30,25 @@ def configure_args(self):
args = ["--with-libmaus2={0}".format(self.spec["libmaus2"].prefix)]
return args
def _fix_shortsort(self):
"""Fix the testshortsort.sh file copied during installation."""
test_dir = join_path(self.install_test_root, self.test_src_dir)
filter_file("../src/", "", join_path(test_dir, "testshortsort.sh"))
@run_after("install")
def cache_test_sources(self):
"""Copy the test source files after the package is installed to an
install test subdirectory for use during `spack test run`."""
self.cache_extra_test_sources(self.test_src_dir)
self._fix_shortsort()
def test_short_sort(self):
"""run testshortsort.sh to check alignments sorted by coordinate"""
def test(self):
"""Perform stand-alone/smoke test on installed package."""
test_dir = join_path(self.test_suite.current_test_cache_dir, self.test_src_dir)
with working_dir(test_dir):
sh = which("sh")
out = sh("testshortsort.sh", output=str.split, error=str.split)
assert "Alignments sorted by coordinate." in out
self.run_test(
"sh",
["testshortsort.sh"],
expected="Alignments sorted by coordinate.",
purpose="test: checking alignments",
work_dir=test_dir,
)

View File

@@ -5,6 +5,8 @@
import os
from llnl.util import tty
from spack.package import *
@@ -24,8 +26,6 @@ class Bolt(CMakePackage):
git = "https://github.com/pmodels/bolt.git"
maintainers("shintaro-iwasaki")
test_requires_compiler = True
tags = ["e4s"]
version("main", branch="main")
@@ -33,6 +33,8 @@ class Bolt(CMakePackage):
version("1.0.1", sha256="769e30dfc4042cee7ebbdadd23cf08796c03bcd8b335f516dc8cbc3f8adfa597")
version("1.0", sha256="1c0d2f75597485ca36335d313a73736594e75c8a36123c5a6f54d01b5ba5c384")
test_requires_compiler = True
depends_on("argobots")
depends_on("autoconf", type="build")
depends_on("automake", type="build")
@@ -53,20 +55,20 @@ def cache_test_sources(self):
install test subdirectory for use during `spack test run`."""
self.cache_extra_test_sources(["examples"])
def test_sample_nested_example(self):
"""build and run sample_nested"""
def run_sample_nested_example(self):
"""Run stand alone test: sample_nested"""
test_dir = join_path(self.test_suite.current_test_cache_dir, "examples")
exe = "sample_nested"
source_file = "{0}.c".format(exe)
source_file = "sample_nested.c"
path = find_required_file(
self.test_suite.current_test_cache_dir, source_file, expected=1, recursive=True
)
if not os.path.isfile(join_path(test_dir, source_file)):
tty.warn("Skipping bolt test:" "{0} does not exist".format(source_file))
return
test_dir = os.path.dirname(path)
with working_dir(test_dir):
cxx = which(os.environ["CXX"])
cxx(
self.run_test(
exe=os.environ["CXX"],
options=[
"-L{0}".format(self.prefix.lib),
"-I{0}".format(self.prefix.include),
"{0}".format(join_path(test_dir, source_file)),
@@ -74,7 +76,12 @@ def test_sample_nested_example(self):
exe,
"-lomp",
"-lbolt",
)
],
purpose="test: compile {0} example".format(exe),
work_dir=test_dir,
)
sample_nested = which(exe)
sample_nested()
self.run_test(exe, purpose="test: run {0} example".format(exe), work_dir=test_dir)
def test(self):
self.run_sample_nested_example()

View File

@@ -13,19 +13,12 @@ class Catch2(CMakePackage):
homepage = "https://github.com/catchorg/Catch2"
url = "https://github.com/catchorg/Catch2/archive/v2.13.10.tar.gz"
git = "https://github.com/catchorg/Catch2.git"
maintainers("ax3l")
maintainers("ax3l", "AndrewGaspar")
# In-Development
version("develop", branch="devel")
# Releases
version("3.3.2", sha256="8361907f4d9bff3ae7c1edb027f813659f793053c99b67837a0c0375f065bae2")
version("3.3.1", sha256="d90351cdc55421f640c553cfc0875a8c834428679444e8062e9187d05b18aace")
version("3.3.0", sha256="fe2f29a54ca775c2dd04bb97ffb79d398e6210e3caa174348b5cd3b7e4ca887d")
version("3.2.1", sha256="4613d3e8142b672159fcae252a4860d72c8cf8e2df5043b1ae3541db9ef5d73c")
version("3.2.0", sha256="feee04647e28ac3cbeff46cb42abc8ee2d8d5f646d36e3fb3ba274b8c69a58ea")
version("3.1.1", sha256="2106bccfec18c8ce673623d56780220e38527dd8f283ccba26aa4b8758737d0e")
version("3.1.0", sha256="c252b2d9537e18046d8b82535069d2567f77043f8e644acf9a9fffc22ea6e6f7")
version("3.0.1", sha256="8c4173c68ae7da1b5b505194a0c2d6f1b2aef4ec1e3e7463bde451f26bbaf4e7")
version(
"3.0.0-preview4", sha256="2458d47d923b65ab611656cb7669d1810bcc4faa62e4c054a7405b1914cd4aee"
@@ -34,7 +27,6 @@ class Catch2(CMakePackage):
"3.0.0-preview3", sha256="06a4f903858f21c553e988f8b76c9c6915d1f95f95512d6a58c421e02a2c4975"
)
version("2.13.10", sha256="d54a712b7b1d7708bc7a819a8e6e47b2fde9536f487b89ccbca295072a7d9943")
version("2.13.9", sha256="06dbc7620e3b96c2b69d57bf337028bf245a211b3cddb843835bfe258f427a52")
version("2.13.8", sha256="b9b592bd743c09f13ee4bf35fc30eeee2748963184f6bea836b146e6cc2a585a")
version("2.13.7", sha256="3cdb4138a072e4c0290034fe22d9f0a80d3bcfb8d7a8a5c49ad75d3a5da24fae")
version("2.13.6", sha256="48dfbb77b9193653e4e72df9633d2e0383b9b625a47060759668480fdf24fbd4")

View File

@@ -18,7 +18,6 @@ class Cbc(AutotoolsPackage):
depends_on("osi")
depends_on("cgl")
version("2.10.9", sha256="96d02593b01fd1460d421f002734384e4eb1e93ebe1fb3570dc2b7600f20a27e")
version("2.10.8", sha256="8525abb541ee1b8e6ff03b00411b66e98bbc58f95be1aefd49d2bca571be2eaf")
version("2.10.5", sha256="cc44c1950ff4615e7791d7e03ea34318ca001d3cac6dc3f7f5ee392459ce6719")

View File

@@ -20,11 +20,6 @@ class Cdo(AutotoolsPackage):
maintainers("skosukhin", "Try2Code")
version(
"2.2.0",
sha256="679c8d105706caffcba0960ec5ddc4a1332c1b40c52f82c3937356999d8fadf2",
url="https://code.mpimet.mpg.de/attachments/download/28013/cdo-2.2.0.tar.gz",
)
version(
"2.1.1",
sha256="c29d084ccbda931d71198409fb2d14f99930db6e7a3654b3c0243ceb304755d9",

View File

@@ -436,28 +436,17 @@ def setup_dependent_package(self, module, dependent_spec):
module.cmake = Executable(self.spec.prefix.bin.cmake)
module.ctest = Executable(self.spec.prefix.bin.ctest)
def run_version_check(self, bin):
"""Runs and checks output of the installed binary."""
exe_path = join_path(self.prefix.bin, bin)
if not os.path.exists(exe_path):
raise SkipTest(f"{exe} is not installed")
def test(self):
"""Perform smoke tests on the installed package."""
spec_vers_str = "version {0}".format(self.spec.version)
exe = which(exe_path)
out = exe("--version", output=str.split, error=str.split)
assert f"version {self.spec.version}" in out
def test_ccmake(self):
"""check version from ccmake"""
self.run_version_check("ccmake")
def test_cmake(self):
"""check version from cmake"""
self.run_version_check("cmake")
def test_cpack(self):
"""check version from cpack"""
self.run_version_check("cpack")
def test_ctest(self):
"""check version from ctest"""
self.run_version_check("ctest")
for exe in ["ccmake", "cmake", "cpack", "ctest"]:
reason = "test version of {0} is {1}".format(exe, spec_vers_str)
self.run_test(
exe,
["--version"],
[spec_vers_str],
installed=True,
purpose=reason,
skip_missing=True,
)

View File

@@ -58,7 +58,7 @@ class Cp2k(MakefilePackage, CudaPackage):
"elpa",
default=False,
description="Enable optimised diagonalisation routines from ELPA",
when="@6.1:",
when="@8.3:",
)
variant(
"sirius",
@@ -246,7 +246,6 @@ class Cp2k(MakefilePackage, CudaPackage):
sha256="3617abb877812c4b933f601438c70f95e21c6161bea177277b1d4125fd1c0bf9",
when="@8.2",
)
patch("posix_c_source.patch", when="%aocc")
def url_for_version(self, version):
url = "https://github.com/cp2k/cp2k/releases/download/v{0}/cp2k-{0}.tar.bz2"
@@ -275,7 +274,7 @@ def archive_files(self):
def edit(self, spec, prefix):
pkgconf = which("pkg-config")
fftw = spec["fftw-api:openmp" if "+openmp" in spec else "fftw-api"]
fftw = spec["fftw-api"]
fftw_header_dir = fftw.headers.directories[0]
# some providers (mainly Intel) keep the fftw headers in a subdirectory, find it

View File

@@ -1,12 +0,0 @@
--- a/src/sockets.c 2019-12-24 01:41:57.000000000 +0530
+++ b/src/sockets.c 2023-05-15 18:35:33.941236292 +0530
@@ -35,6 +35,7 @@
*/
#ifndef __NO_IPI_DRIVER
+#define _POSIX_C_SOURCE 200112L
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

View File

@@ -18,7 +18,6 @@ class Cpio(AutotoolsPackage, GNUMirrorPackage):
executables = ["^cpio$"]
version("2.14", sha256="145a340fd9d55f0b84779a44a12d5f79d77c99663967f8cfa168d7905ca52454")
version("2.13", sha256="e87470d9c984317f658567c03bfefb6b0c829ff17dbf6b0de48d71a4c8f3db88")
build_directory = "spack-build"

View File

@@ -14,7 +14,6 @@ class Cracklib(AutotoolsPackage):
homepage = "https://github.com/cracklib/cracklib"
url = "https://github.com/cracklib/cracklib/archive/v2.9.7.tar.gz"
version("2.9.9", sha256="0a3fd72163512088c6f2add0f6cd6e34954ca0fa3f333ff9cced478b04e73ce1")
version("2.9.7", sha256="ff4e6c3f86494c93719f5e4186e2c3ea9e265f41972ec21f7b87852aced704e6")
version("2.9.6", sha256="7cd2c01365f199c466b490ad2585beccbe0108ccd606c1bcc6c1e52800e627fe")
version("2.9.5", sha256="b3fcf3fba2f4566f8eb2b79502d1a66198a71c557d2ab1011c78001489f0fe26")

View File

@@ -14,7 +14,6 @@ class CyrusSasl(AutotoolsPackage):
homepage = "https://github.com/cyrusimap/cyrus-sasl"
url = "https://github.com/cyrusimap/cyrus-sasl/archive/cyrus-sasl-2.1.27.tar.gz"
version("2.1.28", sha256="3e38933a30b9ce183a5488b4f6a5937a702549cde0d3287903d80968ad4ec341")
version("2.1.27", sha256="b564d773803dc4cff42d2bdc04c80f2b105897a724c247817d4e4a99dd6b9976")
version("2.1.26", sha256="7c14d1b5bd1434adf2dd79f70538617e6aa2a7bde447454b90b84ac5c4d034ba")
version("2.1.25", sha256="8bfd4fa4def54c760e5061f2a74c278384c3b9807f02c4b07dab68b5894cc7c1")

View File

@@ -1,42 +0,0 @@
From 08d0017f06695d4837f1c509ca39d61b32bdae2b Mon Sep 17 00:00:00 2001
From: Sean Koyama <skoyama@anl.gov>
Date: Mon, 6 Mar 2023 23:02:08 +0000
Subject: [PATCH] LIBPATH fix for ALT_PREFIX
---
site_scons/prereq_tools/base.py | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/site_scons/prereq_tools/base.py b/site_scons/prereq_tools/base.py
index 4df1347be..da32d3dd1 100644
--- a/site_scons/prereq_tools/base.py
+++ b/site_scons/prereq_tools/base.py
@@ -1247,18 +1247,18 @@ class PreReqComponent():
ipath = os.path.join(path, "include")
if not os.path.exists(ipath):
ipath = None
- lpath = None
+ lpaths = []
for lib in ['lib64', 'lib']:
- lpath = os.path.join(path, lib)
- if not os.path.exists(lpath):
- lpath = None
- if ipath is None and lpath is None:
+ lp = os.path.join(path, lib)
+ if os.path.exists(lp):
+ lpaths.append(lp)
+ if not ipath and not lpaths:
continue
env = self.__env.Clone()
if ipath:
env.AppendUnique(CPPPATH=[ipath])
- if lpath:
- env.AppendUnique(LIBPATH=[lpath])
+ if lpaths:
+ env.AppendUnique(LIBPATH=lpaths)
if not comp.has_missing_targets(env):
self.__prebuilt_path[name] = path
return path
--
2.34.1

View File

@@ -1,70 +0,0 @@
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class Daos(SConsPackage):
"""The Distributed Asynchronous Object Storage (DAOS) is an open-source
software-defined object store designed from the ground up for massively
distributed Non Volatile Memory (NVM)."""
homepage = "https://github.com/daos-stack/daos"
git = "https://github.com/daos-stack/daos.git"
maintainers("hyoklee")
version("master", branch="master", submodules=True)
version("2.2.0", tag="v2.2.0", submodules=True)
variant(
"debug", default=False, description="Enable debugging info and strict compile warnings"
)
patch("0001-LIBPATH-fix-for-ALT_PREFIX.2.patch", when="@2.2.0:")
depends_on("argobots@1.1:")
depends_on("boost", type="build")
depends_on("cmocka", type="build")
depends_on("go", type="build")
depends_on("hwloc")
depends_on("isa-l@2.30.0:")
depends_on("isa-l-crypto@2.23.0:")
depends_on("libfabric@1.15.1:")
depends_on("libfuse@3.6.1:")
depends_on("libuuid")
depends_on("libunwind")
depends_on("libyaml")
depends_on("mercury@2.2.0:+boostsys")
depends_on("openssl")
depends_on("pmdk@1.12.1:")
depends_on("protobuf-c@1.3.3:")
depends_on("py-distro")
depends_on("readline")
depends_on("scons@4.4.0:")
depends_on("spdk@23.01:+shared+rdma+dpdk")
depends_on("ucx@1.12.1:")
def build_args(self, spec, prefix):
args = ["PREFIX={0}".format(prefix), "USE_INSTALLED=all"]
if "+debug" in spec:
args.append("--debug=explain,findlibs,includes")
# Construct ALT_PREFIX and make sure that '/usr' is last.
alt_prefix = []
for node in spec.traverse():
alt_prefix.append(format(node.prefix))
args.extend(
[
"WARNING_LEVEL=warning",
"ALT_PREFIX=%s" % ":".join([str(elem) for elem in alt_prefix]),
"GO_BIN={0}".format(spec["go"].prefix.bin) + "/go",
]
)
return args
def install_args(self, spec, prefix):
args = ["PREFIX={0}".format(prefix)]
return args

View File

@@ -144,39 +144,70 @@ def _copy_test_inputs(self):
test_inputs = [join_path(self.basepath, "mpi-io-test.c")]
self.cache_extra_test_sources(test_inputs)
def test_mpi_io_test(self):
"""build, run, and check outputs"""
if "+mpi" not in self.spec:
raise SkipTest("Test requires +mpi build")
def _test_intercept(self):
testdir = "intercept-test"
logname = join_path(os.getcwd(), testdir, "test.darshan")
testexe = "mpi-io-test"
with working_dir(testdir, create=True):
env["LD_PRELOAD"] = join_path(self.prefix.lib, "libdarshan.so")
env["DARSHAN_LOGFILE"] = logname
if "+mpi" in self.spec:
# compile a test program
logname = join_path(os.getcwd(), "test.darshan")
fname = join_path(
self.test_suite.current_test_cache_dir,
join_path(self.basepath, "mpi-io-test.c"),
)
cc = Executable(self.spec["mpi"].mpicc)
compile_opt = ["-c", fname]
link_opt = ["-o", "mpi-io-test", "mpi-io-test.o"]
cc(*(compile_opt))
cc(*(link_opt))
# compile the program
fname = join_path(
self.test_suite.current_test_cache_dir, self.basepath, f"{testexe}.c"
)
cc = Executable(self.spec["mpi"].mpicc)
compile_opt = ["-c", fname]
link_opt = ["-o", "mpi-io-test", "mpi-io-test.o"]
cc(*(compile_opt))
cc(*(link_opt))
# run test program and intercept
purpose = "Test running code built against darshan"
exe = "./mpi-io-test"
options = ["-f", "tmp.dat"]
status = [0]
installed = False
expected_output = [
r"Write bandwidth = \d+.\d+ Mbytes/sec",
r"Read bandwidth = \d+.\d+ Mbytes/sec",
]
env["LD_PRELOAD"] = "libdarshan.so"
env["DARSHAN_LOGFILE"] = logname
self.run_test(
exe,
options,
expected_output,
status,
installed,
purpose,
skip_missing=False,
work_dir=None,
)
env.pop("LD_PRELOAD")
# run test program and intercept
mpi_io_test = which(join_path(".", testexe))
out = mpi_io_test("-f", "tmp.dat", output=str.split, error=str.split)
env.pop("LD_PRELOAD")
import llnl.util.tty as tty
expected_output = [
r"Write bandwidth = \d+.\d+ Mbytes/sec",
r"Read bandwidth = \d+.\d+ Mbytes/sec",
]
check_outputs(expected_output, out)
# verify existence of log and size is > 0
tty.msg("Test for existince of log:")
if os.path.exists(logname):
sr = os.stat(logname)
print("PASSED")
tty.msg("Test for size of log:")
if not sr.st_size > 0:
exc = BaseException("log size is 0")
m = None
if spack.config.get("config:fail_fast", False):
raise TestFailure([(exc, m)])
else:
self.test_failures.append((exc, m))
else:
print("PASSED")
else:
exc = BaseException("log does not exist")
m = None
if spack.config.get("config:fail_fast", False):
raise TestFailure([(exc, m)])
else:
self.test_failures.append((exc, m))
assert os.path.exists(logname), f"Expected {logname} to exist"
assert (os.stat(logname)).st_size > 0, f"Expected non-empty {logname}"
def test(self):
self._test_intercept()

View File

@@ -110,12 +110,6 @@ class Dd4hep(CMakePackage):
# Workaround for failing build file generation in some cases
# See https://github.com/spack/spack/issues/24232
patch("cmake_language.patch", when="@:1.17")
# Fix missing SimCaloHits when using the LCIO format
patch(
"https://patch-diff.githubusercontent.com/raw/AIDASoft/DD4hep/pull/1019.patch?full_index=1",
when="@1.19:1.23",
sha256="6466719c82de830ce728db57004fb7db03983587a63b804f6dc95c6b92b3fc76",
)
# variants for subpackages
variant("ddcad", default=True, description="Enable CAD interface based on Assimp")
@@ -163,7 +157,6 @@ class Dd4hep(CMakePackage):
depends_on("lcio", when="+lcio")
depends_on("edm4hep", when="+edm4hep")
depends_on("podio", when="+edm4hep")
depends_on("podio@:0.16.03", when="@:1.23 +edm4hep")
depends_on("podio@0.16:", when="@1.24: +edm4hep")
depends_on("py-pytest", type=("build", "test"))
@@ -229,8 +222,6 @@ def setup_run_environment(self, env):
env.set("DD4HEP", self.prefix.examples)
env.set("DD4hep_DIR", self.prefix)
env.set("DD4hep_ROOT", self.prefix)
env.set("LD_LIBRARY_PATH", self.prefix.lib)
env.set("LD_LIBRARY_PATH", self.prefix.lib64)
def url_for_version(self, version):
# dd4hep releases are dashes and padded with a leading zero

View File

@@ -105,7 +105,6 @@ class Dealii(CMakePackage, CudaPackage):
# (NB: only if tbb is removed in 9.3, as planned!!!)
variant("threads", default=True, description="Compile with multi-threading via TBB")
variant("trilinos", default=True, description="Compile with Trilinos (only with MPI)")
variant("platform-introspection", default=True, description="Enable platform introspection")
# Required dependencies: Light version
depends_on("blas")
@@ -636,12 +635,6 @@ def cmake_args(self):
# See https://github.com/dealii/dealii/issues/9164
options.append(self.define("DEAL_II_CXX_FLAGS", os.environ["SPACK_TARGET_ARGS"]))
# platform introspection - needs to be disabled in some environments
if "+platform-introspection" in spec:
options.append(self.define("DEAL_II_ALLOW_PLATFORM_INTROSPECTION", True))
else:
options.append(self.define("DEAL_II_ALLOW_PLATFORM_INTROSPECTION", False))
return options
def setup_run_environment(self, env):

View File

@@ -1,42 +0,0 @@
From ae55be42bcc21d9ae1f57604b7c6faf9695f98ae Mon Sep 17 00:00:00 2001
From: Sean Koyama <skoyama@anl.gov>
Date: Thu, 23 Mar 2023 17:32:09 +0000
Subject: [PATCH] Add CPATH and LIBRARY_PATHs to OpenCL search paths
---
cmake/FindOpenCL.cmake | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/cmake/FindOpenCL.cmake b/cmake/FindOpenCL.cmake
index a0dff56..e7d7873 100644
--- a/cmake/FindOpenCL.cmake
+++ b/cmake/FindOpenCL.cmake
@@ -64,6 +64,7 @@ else()
find_path(OpenCL_INCLUDE_DIR NAMES CL/cl.h OpenCL/cl.h
HINTS
ENV OpenCL_ROOT
+ ENV CPATH
ENV AMDAPPSDKROOT
ENV INTELOCLSDKROOT
ENV CUDA_PATH
@@ -80,6 +81,8 @@ else()
find_library(OpenCL_LIBRARY NAMES OpenCL
HINTS
ENV OpenCL_ROOT
+ ENV LIBRARY_PATH
+ ENV LD_LIBRARY_PATH
ENV AMDAPPSDKROOT
ENV INTELOCLSDKROOT
ENV CUDA_PATH
@@ -96,6 +99,8 @@ else()
find_library(OpenCL_LIBRARY NAMES OpenCL
HINTS
ENV OpenCL_ROOT
+ ENV LIBRARY_PATH
+ ENV LD_LIBRARY_PATH
ENV AMDAPPSDKROOT
ENV INTELOCLSDKROOT
ENV CUDA_PATH
--
2.34.1

View File

@@ -34,8 +34,6 @@ class DoubleBatchedFftLibrary(CMakePackage):
depends_on("oneapi-level-zero", when="+level-zero")
depends_on("opencl", when="+opencl")
patch("0001-Add-CPATH-and-LIBRARY_PATHs-to-OpenCL-search-paths.patch", when="@:0.3.6")
def cmake_args(self):
cxx_compiler = os.path.basename(self.compiler.cxx)
if self.spec.satisfies("+sycl") and cxx_compiler not in ["icpx", "dpcpp"]:

View File

@@ -21,7 +21,6 @@ class DoubleConversion(CMakePackage):
homepage = "https://github.com/google/double-conversion"
url = "https://github.com/google/double-conversion/archive/v2.0.1.zip"
version("3.3.0", sha256="4080014235f90854ffade6d1c423940b314bbca273a338235f049da296e47183")
version("3.2.1", sha256="55aa41b463346b1032585c04fe7d0adec9db56598d8d699841cdadeb3597e909")
version("3.1.5", sha256="72c0e3925a1214095afc6f1c214faecbec20e8526cf6b8a541cf72195a11887f")
version("2.0.2", sha256="7a0ae55ec9f75c22607808d091bae050a38d4a7728c52273c89d25dd5b78fcdd")

View File

@@ -13,13 +13,12 @@ class Dpdk(MakefilePackage, MesonPackage):
It supports many processor architectures and both FreeBSD and Linux."""
homepage = "https://github.com/DPDK/dpdk"
url = "https://github.com/DPDK/dpdk/archive/v23.03.tar.gz"
url = "https://github.com/DPDK/dpdk/archive/v22.11.tar.gz"
git = "https://github.com/DPDK/dpdk"
maintainers("hyoklee")
version("main", branch="main")
version("23.03", sha256="8a8fa67941b1e0d428937f9068f401457e4e4fd576031479450da065385b332c")
version("22.11", sha256="ed8b2a2b153f0311ffa065d35af29a098367af44a22b3c33e191e1a74211f2e3")
version("20.02", sha256="29e56ea8e47e30110ecb881fa5a37125a865dd2d45b61f68e93e334caaab16b7")
version("19.11", sha256="ce1befb20a5e5c5399b326a39cfa23314a5229c0ced2553f53b09b1ae630706b")

View File

@@ -183,12 +183,3 @@ def cmake_args(self):
args.append("-DENABLE_STATIC_LIBS=NO")
return args
def test_ptls(self):
"""Run parseThat on /bin/ls to rewrite with basic instrumentation"""
parseThat = which(self.prefix.bin.parseThat)
os.environ["DYNINSTAPI_RT_LIB"] = join_path(self.prefix.lib, "libdyninstAPI_RT.so")
parseThat(
"--binary-edit={0:s}".format(join_path(self.test_suite.stage, "ls.rewritten")),
"/bin/ls",
)

View File

@@ -17,7 +17,6 @@ class Elfio(CMakePackage):
maintainers("haampie")
version("3.11", sha256="3307b104c205399786edbba203906de9517e36297709fe747faf9478d55fbb91")
version("3.10", sha256="cdc6362ede2e0c8d1d6db15d7da4b526f461d9cfae6f6337369e416a8bc60234")
version("3.9", sha256="767b269063fc35aba6d361139f830aa91c45dc6b77942f082666876c1aa0be0f")
version("3.8", sha256="9553ce2b8d8aa2fb43f0e9be9bcbd10cd52f40b385110ea54173889c982f9ac4")

View File

@@ -62,9 +62,6 @@ class EnvironmentModules(Package):
depends_on("automake", type="build", when="@main")
depends_on("libtool", type="build", when="@main")
depends_on("m4", type="build", when="@main")
depends_on("python", type="build", when="@main")
depends_on("py-sphinx@1.0:", type="build", when="@main")
depends_on("gzip", type="build", when="@main")
# Dependencies:
depends_on("tcl", type=("build", "link", "run"))

View File

@@ -13,6 +13,5 @@ class Erfa(AutotoolsPackage):
homepage = "https://github.com/liberfa/erfa"
url = "https://github.com/liberfa/erfa/releases/download/v1.7.0/erfa-1.7.0.tar.gz"
version("2.0.0", sha256="75cb0a2cc1561d24203d9d0e67c21f105e45a70181d57f158e64a46a50ccd515")
version("1.7.0", sha256="f0787e30e848750c0cbfc14827de6fc7f69a2d5ef0fc653504e74b8967a764e0")
version("1.4.0", sha256="035b7f0ad05c1191b8588191ba4b19ba0f31afa57ad561d33bd5417d9f23e460")

View File

@@ -16,7 +16,6 @@ class Erlang(AutotoolsPackage):
homepage = "https://erlang.org/"
url = "https://erlang.org/download/otp_src_23.3.tar.gz"
version("26.0", sha256="4e411587bd7d18ee2d5a0e7207f638e14036152633db57d2cf49c84a9c92d945")
version("25.3", sha256="aeaa546e0c38e338010d16348d8c67f7fc8c02df728a88d8499838d8c9131e1c")
version("25.2", sha256="0df1243afde953647df95785f8e75541fd0ea8ac70c0f639c977513be1761f63")
version("23.3", sha256="3c888d8f46124e134b75a9ba5d845f079020b7198ed2de64411e183d07e9002a")

View File

@@ -179,7 +179,6 @@ def cmake_args(self):
self.define_from_variant("EXAGO_ENABLE_IPOPT", "ipopt"),
self.define_from_variant("EXAGO_ENABLE_PYTHON", "python"),
self.define_from_variant("EXAGO_ENABLE_LOGGING", "logging"),
self.define("LAPACK_LIBRARIES", spec["lapack"].libs + spec["blas"].libs),
]
)

View File

@@ -13,12 +13,8 @@ class Fastp(MakefilePackage):
homepage = "https://github.com/OpenGene/fastp"
url = "https://github.com/OpenGene/fastp/archive/v0.20.0.tar.gz"
version("0.23.3", sha256="a37ee4b5dcf836a5a19baec645657b71d9dcd69ee843998f41f921e9b67350e3")
version("0.20.0", sha256="8d751d2746db11ff233032fc49e3bcc8b53758dd4596fdcf4b4099a4d702ac22")
depends_on("libisal", type=("build", "link"), when="@0.23:")
depends_on("libdeflate", type=("build", "link"), when="@0.23:")
def install(self, spec, prefix):
mkdirp(prefix.bin)
make("install", "PREFIX={0}".format(prefix))

View File

@@ -16,7 +16,6 @@ class Fasttransforms(MakefilePackage):
homepage = "https://github.com/MikaelSlevinsky/FastTransforms"
url = "https://github.com/MikaelSlevinsky/FastTransforms/archive/v0.3.4.tar.gz"
version("0.6.2", sha256="fd00befcb0c20ba962a8744a7b9139355071ee95be70420de005b7c0f6e023aa")
version("0.5.0", sha256="9556d0037bd5348a33f15ad6100e32053b6e22cab16a97c504f30d6c52fd0efd")
version("0.3.4", sha256="a5c8b5aedbdb40218521d061a7df65ef32ce153d4e19d232957db7e3e63c7e9b")

View File

@@ -1,94 +0,0 @@
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class Fds(MakefilePackage):
"""
Fire Dynamics Simulator (FDS) is a large-eddy simulation (LES) code for low-speed flows,
with an emphasis on smoke and heat transport from fires.
FDS and Smokeview are free and open-source software tools provided by the National Institute
of Standards and Technology (NIST) of the United States Department of Commerce. Pursuant
to Title 17, Section 105 of the United States Code, this software is not subject to copyright
protection and is in the public domain. View the full disclaimer for NIST-developed software.
"""
maintainers("kjrstory")
homepage = "https://pages.nist.gov/fds-smv"
url = "https://github.com/firemodels/fds/archive/refs/tags/FDS-6.8.0.tar.gz"
git = "https://github.com/firemodels/fds.git"
version("6.8.0", commit="886e0096535519b7358a3c4393c91da3caee5072")
depends_on("mpi")
depends_on("mkl")
build_directory = "Build"
requires(
"%gcc",
"%intel",
"%oneapi",
policy="one_of",
msg="FDS builds only with GNU Fortran or Intel Fortran",
)
requires(
"^intel-mkl",
"^intel-oneapi-mkl",
policy="one_of",
msg="FDS builds require either Intel MKL or Intel oneAPI MKL library",
)
requires(
"^openmpi",
when="%gcc platform=linux",
msg="OpenMPI can only be used with GNU Fortran on Linux platform",
)
requires(
"^intel-mpi^intel-mkl",
when="%intel platform=linux",
msg="Intel MPI and Intel MKL can only be used with Intel Fortran on Linux platform",
)
requires(
"^intel-oneapi-mpi^intel-oneapi-mkl",
when="%oneapi platform=linux",
msg="Intel oneAPI MPI and MKL can only be used with oneAPI Fortran on Linux platform",
)
requires(
"^openmpi%intel",
when="platform=darwin",
msg="OpenMPI can only be used with Intel Fortran on macOS",
)
def edit(self, spec, prefix):
env["MKL_ROOT"] = self.spec["mkl"].prefix
if spec.compiler.name == "oneapi":
env["INTEL_IFORT"] = "ifx"
makefile = FileFilter("Build/makefile")
makefile.filter(r"\.\./Scripts", "./Scripts")
makefile.filter(r"\.\.\\Scripts", ".\\Scripts")
@property
def build_targets(self):
spec = self.spec
mpi_mapping = {"openmpi": "ompi", "intel-oneapi-mpi": "impi", "intel-mpi": "impi"}
compiler_mapping = {"gcc": "gnu", "oneapi": "intel", "intel": "intel"}
platform_mapping = {"linux": "linux", "darwin": "osx"}
mpi_prefix = mpi_mapping[spec["mpi"].name]
compiler_prefix = compiler_mapping[spec.compiler.name]
platform_prefix = platform_mapping[spec.architecture.platform]
return ["{}_{}_{}".format(mpi_prefix, compiler_prefix, platform_prefix)]
def install(self, spec, prefix):
mkdirp(prefix.bin)
with working_dir(self.build_directory):
install("*.mod", prefix.bin)
install("*.o", prefix.bin)
install("fds_" + self.build_targets[0], prefix.bin + "/fds")

View File

@@ -27,21 +27,11 @@ class Flecsi(CMakePackage, CudaPackage, ROCmPackage):
version("2.2.0", tag="v2.2.0", preferred=True)
version("2.1.0", tag="v2.1.0")
version("2.0.0", tag="v2.0.0")
version("1.4.1", tag="v1.4.1", submodules=True)
version("1.4.1", tag="v1.4.1")
version(
"1.4.develop",
git="https://github.com/laristra/flecsi.git",
branch="1.4",
submodules=True,
deprecated=True,
)
version(
"1.4.2",
git="https://github.com/laristra/flecsi.git",
tag="v1.4.2",
submodules=True,
deprecated=True,
"1.4.develop", git="https://github.com/laristra/flecsi.git", branch="1.4", deprecated=True
)
version("1.4.2", git="https://github.com/laristra/flecsi.git", tag="v1.4.2", deprecated=True)
version(
"flecsph",
git="https://github.com/laristra/flecsi.git",
@@ -81,7 +71,7 @@ class Flecsi(CMakePackage, CudaPackage, ROCmPackage):
variant("doxygen", default=False, description="Enable doxygen", when="@:1")
variant("tutorial", default=False, description="Build FleCSI Tutorials", when="@:1")
variant("flecstan", default=False, description="Build FleCSI Static Analyzer", when="@:1")
variant("external_cinch", default=False, description="Enable External Cinch", when="@:1")
variant("external_cinch", default=True, description="Enable External Cinch", when="@:1")
variant("unit_tests", default=False, description="Build with Unit Tests Enabled", when="@:1")
# All Current FleCSI Releases

View File

@@ -13,8 +13,6 @@ class Flibcpp(CMakePackage):
git = "https://github.com/swig-fortran/flibcpp.git"
url = "https://github.com/swig-fortran/flibcpp/archive/v1.0.1.tar.gz"
test_requires_compiler = True
version("1.0.2", sha256="e2c11c1f58ca830eb7ac7f25d66fc3502c4a8d994192ee30c63a1c3b51aac241")
version("1.0.1", sha256="8569c71eab0257097a6aa666a6d86bdcb6cd6e31244d32cc5b2478d0e936ca7a")
version("0.5.2", sha256="b9b4eb6431d5b56a54c37f658df7455eafd3d204a5534903b127e0c8a1c9b827")
@@ -75,18 +73,25 @@ def cached_tests_work_dir(self):
"""The working directory for cached test sources."""
return join_path(self.test_suite.current_test_cache_dir, self.examples_src_dir)
def test_examples(self):
"""build and run examples"""
def test(self):
"""Perform stand-alone/smoke tests."""
cmake_args = [
self.define("CMAKE_PREFIX_PATH", self.prefix),
self.define("CMAKE_Fortran_COMPILER", self.compiler.fc),
]
cmake_args.append(self.cached_tests_work_dir)
cmake = which(self.spec["cmake"].prefix.bin.cmake)
make = which("make")
sh = which("sh")
with working_dir(self.cached_tests_work_dir):
cmake(*cmake_args)
make()
sh("run-examples.sh")
self.run_test(
"cmake", cmake_args, purpose="test: calling cmake", work_dir=self.cached_tests_work_dir
)
self.run_test(
"make", [], purpose="test: building the tests", work_dir=self.cached_tests_work_dir
)
self.run_test(
"run-examples.sh",
[],
purpose="test: running the examples",
work_dir=self.cached_tests_work_dir,
)

View File

@@ -20,7 +20,6 @@ class FluxCore(AutotoolsPackage):
maintainers("grondo")
version("master", branch="master")
version("0.50.0", sha256="77414299a7ca081199aa0f57bcaea3e05860e2095df73c0f6b7672b88fadf683")
version("0.49.0", sha256="9b8d7af1d8aaa7ee110bcb9815b6b8647af686de949097c9bb2a0269d5551051")
version("0.48.0", sha256="32c1bfdde44123e90606422807d381406874bb6dbec170ddb493f905208cc275")
version("0.47.0", sha256="c13c8df3dd3db565ff7a3db727f087b7c1a3946b98c4b945ac43fe44a4c534c3")
@@ -115,7 +114,6 @@ class FluxCore(AutotoolsPackage):
variant("docs", default=False, description="Build flux manpages and docs")
variant("cuda", default=False, description="Build dependencies with support for CUDA")
variant("security", default=False, description="Build with flux-security")
# Restrict flux to Linux based platforms where builds are possible.
conflicts("platform=darwin", msg="flux-core does not support MacOS based platforms.")
@@ -151,12 +149,6 @@ class FluxCore(AutotoolsPackage):
depends_on("asciidoc", type="build", when="+docs")
depends_on("py-docutils", type="build", when="@0.32.0: +docs")
# Flux security variant
# Note that if you install with this variant, it is
# recommended to create a view and then a broker.toml that
# has the path to flux-imp generated by flux-security
depends_on("flux-security", type="build", when="+security")
# Need autotools when building on master:
depends_on("autoconf", type="build", when="@master")
depends_on("automake", type="build", when="@master")
@@ -250,8 +242,6 @@ def configure_args(self):
args = ["--enable-pylint=no"]
if "+docs" not in self.spec:
args.append("--disable-docs")
if "+security" in self.spec:
args.append("--with-flux-security")
return args
def flag_handler(self, name, flags):

View File

@@ -13,7 +13,6 @@ class Form(AutotoolsPackage):
url = "https://github.com/vermaseren/form/releases/download/v4.2.1/form-4.2.1.tar.gz"
maintainers("iarspider", "tueda")
version("4.3.1", sha256="f1f512dc34fe9bbd6b19f2dfef05fcb9912dfb43c8368a75b796ec472ee8bbce")
version("4.3.0", sha256="b234e0d095f73ecb0904cdc3b0d8d8323a9fa7f46770a52fb22267c624aafbf6")
version("4.2.1", sha256="f2722d6d4ccb034e01cf786d55342e1c21ff55b182a4825adf05d50702ab1a28")
version(

View File

@@ -22,6 +22,8 @@ class Fplo(MakefilePackage):
url = "file://{0}/FPLO22.00-62.tar.gz".format(os.getcwd())
manual_download = True
maintainers("glennpj")
version("22.00-62", sha256="0d1d4e9c1e8e41900901e26c3cd08ee39dcfdeb3f2c4c8862055eaf704b6d69e")
# TODO: Try to get LAPACK to work with something other than MKL. The build

View File

@@ -44,11 +44,6 @@ class Freetype(AutotoolsPackage, CMakePackage):
"support __builtin_shuffle)",
)
variant("shared", default=True, description="Build shared libraries")
variant("pic", default=True, description="Enable position-independent code (PIC)")
requires("+pic", when="+shared build_system=autotools")
patch("windows.patch", when="@2.9.1")
@property
@@ -69,8 +64,6 @@ def configure_args(self):
]
if self.spec.satisfies("@2.9.1:"):
args.append("--enable-freetype-config")
args.extend(self.enable_or_disable("shared"))
args.extend(self.with_or_without("pic"))
return args
@@ -82,6 +75,4 @@ def cmake_args(self):
self.define("FT_DISABLE_HARFBUZZ", True),
self.define("FT_REQUIRE_PNG", True),
self.define("FT_REQUIRE_BZIP2", True),
self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"),
]

View File

@@ -145,39 +145,23 @@ def install(self, spec, prefix):
@run_after("install")
@on_package_attributes(run_tests=True)
def check_install(self):
def test_install(self):
if "conduits=smp" in self.spec:
make("-C", "smp-conduit", "run-tests")
self.test_testtools()
if "conduits=none" not in self.spec:
self.run_test(
join_path(self.prefix.tests, "testtools"),
expected=["Done."],
status=0,
installed=True,
purpose="Running testtools",
)
def _setup_test_env(self):
"""Set up key stand-alone test environment variables."""
os.environ["GASNET_VERBOSEENV"] = "1" # include diagnostic info
# The following are not technically relevant to test_testtools
os.environ["GASNET_SPAWN_VERBOSE"] = "1" # include spawning diagnostics
if "GASNET_SSH_SERVERS" not in os.environ:
os.environ["GASNET_SSH_SERVERS"] = "localhost " * 4
def test_testtools(self):
"""run testtools and check output"""
def test(self):
if "conduits=none" in self.spec:
raise SkipTest("Test requires conduit libraries")
spack.main.send_warning_to_tty("No conduit libraries built -- SKIPPED")
return
testtools_path = join_path(self.prefix.tests, "testtools")
assert os.path.exists(testtools_path), "Test requires testtools"
self._setup_test_env()
testtools = which(testtools_path, required=True)
out = testtools(output=str.split, error=str.split)
assert "Done." in out
def test_testgasnet(self):
"""run testgasnet and check output"""
if "conduits=none" in self.spec:
raise SkipTest("Test requires conduit libraries")
self._setup_test_env()
ranks = "4"
spawner = {
"smp": ["env", "GASNET_PSHM_NODES=" + ranks],
@@ -188,18 +172,27 @@ def test_testgasnet(self):
"udp": [join_path(self.prefix.bin, "amudprun"), "-spawn", "L", "-np", ranks],
}
expected = "done."
os.environ["GASNET_VERBOSEENV"] = "1" # include diagnostic info
os.environ["GASNET_SPAWN_VERBOSE"] = "1" # include spawning diagnostics
if "GASNET_SSH_SERVERS" not in os.environ:
os.environ["GASNET_SSH_SERVERS"] = "localhost " * 4
self.run_test(
join_path(self.prefix.tests, "testtools"),
expected=["Done."],
status=0,
installed=True,
purpose="Running testtools",
)
for c in self.spec.variants["conduits"].value:
os.environ["GASNET_SUPERNODE_MAXSIZE"] = "0" if (c == "smp") else "1"
test = join_path(self.prefix.tests, c, "testgasnet")
with test_part(
self,
"test_testgasnet_{0}".format(c),
purpose="run {0}-conduit/testgasnet".format(c),
):
exe = which(spawner[c][0], required=True)
args = spawner[c][1:] + [test]
out = exe(*args, output=str.split, error=str.split)
assert expected in out
self.run_test(
spawner[c][0],
spawner[c][1:] + [test],
expected=["done."],
status=0,
installed=(c != "smp"),
purpose="Running %s-conduit/testgasnet" % c,
)

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