summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/ISSUE_TEMPLATE/bug_report.md29
-rw-r--r--.github/ISSUE_TEMPLATE/build_error.md25
-rw-r--r--.github/ISSUE_TEMPLATE/feature_request.md21
-rw-r--r--.github/workflows/linux_build_tests.yaml3
-rw-r--r--.github/workflows/minimum_python_versions.yaml2
-rw-r--r--.gitignore6
-rw-r--r--etc/spack/defaults/config.yaml6
-rw-r--r--etc/spack/defaults/modules.yaml6
-rw-r--r--lib/spack/docs/basic_usage.rst24
-rw-r--r--lib/spack/docs/build_systems/cmakepackage.rst17
-rw-r--r--lib/spack/docs/build_systems/sippackage.rst12
-rw-r--r--lib/spack/docs/containers.rst2
-rw-r--r--lib/spack/docs/packaging_guide.rst20
-rwxr-xr-xlib/spack/env/cc2
-rw-r--r--lib/spack/external/altgraph/__init__.py9
-rw-r--r--lib/spack/external/distro.py1
-rw-r--r--lib/spack/spack/binary_distribution.py280
-rw-r--r--lib/spack/spack/build_systems/autotools.py6
-rw-r--r--lib/spack/spack/build_systems/cmake.py114
-rw-r--r--lib/spack/spack/build_systems/cuda.py76
-rw-r--r--lib/spack/spack/build_systems/sip.py48
-rw-r--r--lib/spack/spack/caches.py5
-rw-r--r--lib/spack/spack/ci.py5
-rw-r--r--lib/spack/spack/cmd/buildcache.py126
-rw-r--r--lib/spack/spack/cmd/checksum.py3
-rw-r--r--lib/spack/spack/cmd/create.py4
-rw-r--r--lib/spack/spack/cmd/dependencies.py22
-rw-r--r--lib/spack/spack/cmd/dependents.py2
-rw-r--r--lib/spack/spack/cmd/load.py5
-rw-r--r--lib/spack/spack/cmd/mirror.py8
-rw-r--r--lib/spack/spack/config.py72
-rw-r--r--lib/spack/spack/database.py154
-rw-r--r--lib/spack/spack/fetch_strategy.py41
-rw-r--r--lib/spack/spack/mirror.py29
-rw-r--r--lib/spack/spack/package.py42
-rw-r--r--lib/spack/spack/patch.py9
-rw-r--r--lib/spack/spack/relocate.py704
-rw-r--r--lib/spack/spack/schema/config.py1
-rw-r--r--lib/spack/spack/spec.py2
-rw-r--r--lib/spack/spack/stage.py33
-rw-r--r--lib/spack/spack/test/build_systems.py38
-rw-r--r--lib/spack/spack/test/cmd/buildcache.py15
-rw-r--r--lib/spack/spack/test/cmd/dependencies.py4
-rw-r--r--lib/spack/spack/test/cmd/mirror.py23
-rw-r--r--lib/spack/spack/test/config.py87
-rw-r--r--lib/spack/spack/test/conftest.py2
-rw-r--r--lib/spack/spack/test/database.py24
-rw-r--r--lib/spack/spack/test/mirror.py2
-rw-r--r--lib/spack/spack/test/package_class.py66
-rw-r--r--lib/spack/spack/test/packages.py21
-rw-r--r--lib/spack/spack/test/packaging.py571
-rw-r--r--lib/spack/spack/test/url_fetch.py19
-rw-r--r--lib/spack/spack/util/compression.py3
-rw-r--r--lib/spack/spack/util/web.py2
-rwxr-xr-xshare/spack/spack-completion.bash6
-rw-r--r--var/spack/repos/builtin.mock/packages/cmake-client/package.py8
-rw-r--r--var/spack/repos/builtin.mock/packages/fetch-options/package.py22
-rw-r--r--var/spack/repos/builtin.mock/packages/trivial-pkg-with-valid-hash/package.py17
-rw-r--r--var/spack/repos/builtin/packages/acl/package.py30
-rw-r--r--var/spack/repos/builtin/packages/acts-core/package.py5
-rw-r--r--var/spack/repos/builtin/packages/adios2/package.py20
-rw-r--r--var/spack/repos/builtin/packages/adol-c/package.py21
-rw-r--r--var/spack/repos/builtin/packages/agrep/package.py23
-rw-r--r--var/spack/repos/builtin/packages/amdblis/package.py1
-rw-r--r--var/spack/repos/builtin/packages/amrex/package.py1
-rw-r--r--var/spack/repos/builtin/packages/anaconda3/package.py53
-rw-r--r--var/spack/repos/builtin/packages/arpack-ng/package.py6
-rw-r--r--var/spack/repos/builtin/packages/attr/package.py14
-rw-r--r--var/spack/repos/builtin/packages/aws-parallelcluster/package.py3
-rw-r--r--var/spack/repos/builtin/packages/axl/package.py6
-rw-r--r--var/spack/repos/builtin/packages/bat/package.py29
-rw-r--r--var/spack/repos/builtin/packages/batctl/package.py24
-rw-r--r--var/spack/repos/builtin/packages/bazel/package.py1
-rw-r--r--var/spack/repos/builtin/packages/bcache/func_crc64.patch13
-rw-r--r--var/spack/repos/builtin/packages/bcache/package.py36
-rw-r--r--var/spack/repos/builtin/packages/binutils/package.py5
-rw-r--r--var/spack/repos/builtin/packages/blis/package.py4
-rw-r--r--var/spack/repos/builtin/packages/bmi/package.py2
-rw-r--r--var/spack/repos/builtin/packages/boost/package.py9
-rw-r--r--var/spack/repos/builtin/packages/bowtie2/package.py2
-rw-r--r--var/spack/repos/builtin/packages/bubblewrap/package.py28
-rw-r--r--var/spack/repos/builtin/packages/bzip2/package.py3
-rw-r--r--var/spack/repos/builtin/packages/caliper/package.py9
-rw-r--r--var/spack/repos/builtin/packages/cctools/package.py53
-rw-r--r--var/spack/repos/builtin/packages/ceres-solver/package.py23
-rw-r--r--var/spack/repos/builtin/packages/cgns/package.py9
-rw-r--r--var/spack/repos/builtin/packages/charliecloud/package.py27
-rw-r--r--var/spack/repos/builtin/packages/cinch/package.py2
-rw-r--r--var/spack/repos/builtin/packages/citcoms/package.py18
-rw-r--r--var/spack/repos/builtin/packages/clhep/package.py2
-rw-r--r--var/spack/repos/builtin/packages/cmake/package.py1
-rw-r--r--var/spack/repos/builtin/packages/cosma/package.py69
-rw-r--r--var/spack/repos/builtin/packages/cpio/package.py5
-rw-r--r--var/spack/repos/builtin/packages/cpprestsdk/Release.patch45
-rw-r--r--var/spack/repos/builtin/packages/cpprestsdk/package.py7
-rw-r--r--var/spack/repos/builtin/packages/cryptsetup/package.py1
-rw-r--r--var/spack/repos/builtin/packages/cscope/package.py12
-rw-r--r--var/spack/repos/builtin/packages/darshan-runtime/package.py2
-rw-r--r--var/spack/repos/builtin/packages/darshan-util/package.py2
-rw-r--r--var/spack/repos/builtin/packages/dealii/package.py1
-rw-r--r--var/spack/repos/builtin/packages/dihydrogen/package.py111
-rw-r--r--var/spack/repos/builtin/packages/eagle/package.py46
-rw-r--r--var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py3
-rw-r--r--var/spack/repos/builtin/packages/ecp-proxy-apps/package.py35
-rw-r--r--var/spack/repos/builtin/packages/eigen/find-ptscotch.patch27
-rw-r--r--var/spack/repos/builtin/packages/eigen/package.py55
-rw-r--r--var/spack/repos/builtin/packages/elfutils/package.py3
-rw-r--r--var/spack/repos/builtin/packages/er/package.py4
-rw-r--r--var/spack/repos/builtin/packages/exchanger/package.py21
-rw-r--r--var/spack/repos/builtin/packages/exiv2/package.py3
-rw-r--r--var/spack/repos/builtin/packages/expect/package.py9
-rw-r--r--var/spack/repos/builtin/packages/exuberant-ctags/package.py2
-rw-r--r--var/spack/repos/builtin/packages/f77-zmq/package.py4
-rw-r--r--var/spack/repos/builtin/packages/fabtests/package.py27
-rw-r--r--var/spack/repos/builtin/packages/fairlogger/package.py17
-rw-r--r--var/spack/repos/builtin/packages/fast-global-file-status/package.py1
-rw-r--r--var/spack/repos/builtin/packages/fd-find/package.py21
-rw-r--r--var/spack/repos/builtin/packages/filo/package.py32
-rw-r--r--var/spack/repos/builtin/packages/flatbuffers/package.py13
-rw-r--r--var/spack/repos/builtin/packages/flecsi/package.py45
-rw-r--r--var/spack/repos/builtin/packages/freeipmi/package.py40
-rw-r--r--var/spack/repos/builtin/packages/g4abla/package.py1
-rw-r--r--var/spack/repos/builtin/packages/g4emlow/package.py1
-rw-r--r--var/spack/repos/builtin/packages/g4ensdfstate/package.py2
-rw-r--r--var/spack/repos/builtin/packages/g4ndl/package.py2
-rw-r--r--var/spack/repos/builtin/packages/g4neutronxs/package.py2
-rw-r--r--var/spack/repos/builtin/packages/g4photonevaporation/package.py2
-rw-r--r--var/spack/repos/builtin/packages/g4pii/package.py2
-rw-r--r--var/spack/repos/builtin/packages/g4radioactivedecay/package.py2
-rw-r--r--var/spack/repos/builtin/packages/g4realsurface/package.py2
-rw-r--r--var/spack/repos/builtin/packages/g4saiddata/package.py2
-rw-r--r--var/spack/repos/builtin/packages/g4tendl/package.py2
-rw-r--r--var/spack/repos/builtin/packages/gcc/glibc-2.31-libsanitizer-1.patch37
-rw-r--r--var/spack/repos/builtin/packages/gcc/glibc-2.31-libsanitizer-2.patch73
-rw-r--r--var/spack/repos/builtin/packages/gcc/package.py19
-rw-r--r--var/spack/repos/builtin/packages/geant4-data/package.py2
-rw-r--r--var/spack/repos/builtin/packages/geant4/package.py3
-rw-r--r--var/spack/repos/builtin/packages/gengetopt/package.py36
-rw-r--r--var/spack/repos/builtin/packages/glfw/package.py39
-rw-r--r--var/spack/repos/builtin/packages/glusterfs/package.py44
-rw-r--r--var/spack/repos/builtin/packages/gmsh/package.py17
-rw-r--r--var/spack/repos/builtin/packages/gnupg/package.py35
-rw-r--r--var/spack/repos/builtin/packages/go/package.py1
-rw-r--r--var/spack/repos/builtin/packages/gromacs/package.py52
-rw-r--r--var/spack/repos/builtin/packages/gsl/gsl-2.3-cblas.patch323
-rw-r--r--var/spack/repos/builtin/packages/gsl/package.py28
-rw-r--r--var/spack/repos/builtin/packages/gunrock/package.py31
-rw-r--r--var/spack/repos/builtin/packages/hcol/package.py25
-rw-r--r--var/spack/repos/builtin/packages/hdf5/package.py2
-rw-r--r--var/spack/repos/builtin/packages/hepmc/package.py34
-rw-r--r--var/spack/repos/builtin/packages/hpctoolkit/package.py31
-rw-r--r--var/spack/repos/builtin/packages/hpcviewer/package.py6
-rw-r--r--var/spack/repos/builtin/packages/hpx/package.py6
-rw-r--r--var/spack/repos/builtin/packages/htop/package.py1
-rw-r--r--var/spack/repos/builtin/packages/hydrogen/package.py2
-rw-r--r--var/spack/repos/builtin/packages/intel-tbb/package.py2
-rw-r--r--var/spack/repos/builtin/packages/intel-xed/package.py3
-rw-r--r--var/spack/repos/builtin/packages/jblob/package.py35
-rw-r--r--var/spack/repos/builtin/packages/jdk/package.py30
-rw-r--r--var/spack/repos/builtin/packages/kallisto/package.py29
-rw-r--r--var/spack/repos/builtin/packages/kealib/package.py7
-rw-r--r--var/spack/repos/builtin/packages/keyutils/package.py27
-rw-r--r--var/spack/repos/builtin/packages/kraken2/package.py35
-rw-r--r--var/spack/repos/builtin/packages/kvtree/package.py4
-rw-r--r--var/spack/repos/builtin/packages/lammps/package.py11
-rw-r--r--var/spack/repos/builtin/packages/lastz/package.py8
-rw-r--r--var/spack/repos/builtin/packages/lastz/sequences.c.patch244
-rw-r--r--var/spack/repos/builtin/packages/legion/package.py19
-rw-r--r--var/spack/repos/builtin/packages/libfabric/package.py92
-rw-r--r--var/spack/repos/builtin/packages/libffi/package.py3
-rw-r--r--var/spack/repos/builtin/packages/libgcrypt/package.py25
-rw-r--r--var/spack/repos/builtin/packages/libgit2/package.py79
-rw-r--r--var/spack/repos/builtin/packages/libgpg-error/package.py20
-rw-r--r--var/spack/repos/builtin/packages/libhio/package.py6
-rw-r--r--var/spack/repos/builtin/packages/libiscsi/package.py28
-rw-r--r--var/spack/repos/builtin/packages/libmesh/package.py5
-rw-r--r--var/spack/repos/builtin/packages/libsndfile/package.py40
-rw-r--r--var/spack/repos/builtin/packages/libunwind/package.py25
-rw-r--r--var/spack/repos/builtin/packages/libxpresent/package.py13
-rw-r--r--var/spack/repos/builtin/packages/libxsmm/package.py5
-rw-r--r--var/spack/repos/builtin/packages/likwid/package.py13
-rw-r--r--var/spack/repos/builtin/packages/lksctp-tools/package.py20
-rw-r--r--var/spack/repos/builtin/packages/lmbench/package.py30
-rw-r--r--var/spack/repos/builtin/packages/lua-luaposix/package.py1
-rw-r--r--var/spack/repos/builtin/packages/lvm2/package.py3
-rw-r--r--var/spack/repos/builtin/packages/margo/package.py2
-rw-r--r--var/spack/repos/builtin/packages/minigan/package.py28
-rw-r--r--var/spack/repos/builtin/packages/mofem-cephas/package.py2
-rw-r--r--var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_0.patch (renamed from var/spack/repos/builtin/packages/netcdf-fortran/nag.patch)14
-rw-r--r--var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_1.patch71
-rw-r--r--var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_2.patch11
-rw-r--r--var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.6.patch69
-rw-r--r--var/spack/repos/builtin/packages/mpich/package.py44
-rw-r--r--var/spack/repos/builtin/packages/mrcpp/package.py46
-rw-r--r--var/spack/repos/builtin/packages/mumps/package.py2
-rw-r--r--var/spack/repos/builtin/packages/munge/package.py16
-rw-r--r--var/spack/repos/builtin/packages/mvapich2/package.py3
-rw-r--r--var/spack/repos/builtin/packages/mxnet/package.py2
-rw-r--r--var/spack/repos/builtin/packages/ncurses/package.py3
-rw-r--r--var/spack/repos/builtin/packages/netcdf-fortran/excessive_linking.patch312
-rw-r--r--var/spack/repos/builtin/packages/netcdf-fortran/logging.patch13
-rw-r--r--var/spack/repos/builtin/packages/netcdf-fortran/nag_libtool_2.4.2.patch124
-rw-r--r--var/spack/repos/builtin/packages/netcdf-fortran/nag_libtool_2.4.6.patch96
-rw-r--r--var/spack/repos/builtin/packages/netcdf-fortran/nag_testing.patch11
-rw-r--r--var/spack/repos/builtin/packages/netcdf-fortran/package.py67
-rw-r--r--var/spack/repos/builtin/packages/nfs-utils/package.py34
-rw-r--r--var/spack/repos/builtin/packages/nlopt/package.py1
-rw-r--r--var/spack/repos/builtin/packages/ntirpc/package.py22
-rw-r--r--var/spack/repos/builtin/packages/ocaml/package.py11
-rw-r--r--var/spack/repos/builtin/packages/opam/package.py26
-rw-r--r--var/spack/repos/builtin/packages/openblas/lapack-0.3.9-xerbl.patch14
-rw-r--r--var/spack/repos/builtin/packages/openblas/package.py50
-rw-r--r--var/spack/repos/builtin/packages/opencv/package.py3
-rw-r--r--var/spack/repos/builtin/packages/openfoam/package.py6
-rw-r--r--var/spack/repos/builtin/packages/openmpi/nag_ltmain_1.patch49
-rw-r--r--var/spack/repos/builtin/packages/openmpi/nag_ltmain_2.patch49
-rw-r--r--var/spack/repos/builtin/packages/openmpi/nag_ltmain_3.patch40
-rw-r--r--var/spack/repos/builtin/packages/openmpi/nag_ltmain_4.patch49
-rwxr-xr-xvar/spack/repos/builtin/packages/openmpi/nolegacylaunchers.sh6
-rw-r--r--var/spack/repos/builtin/packages/openmpi/package.py13
-rw-r--r--var/spack/repos/builtin/packages/openpmd-api/hdf5-1.12.0.patch23
-rw-r--r--var/spack/repos/builtin/packages/openpmd-api/package.py5
-rw-r--r--var/spack/repos/builtin/packages/openspeedshop/package.py2
-rw-r--r--var/spack/repos/builtin/packages/openssl/package.py2
-rw-r--r--var/spack/repos/builtin/packages/opensubdiv/package.py85
-rw-r--r--var/spack/repos/builtin/packages/papi/package.py1
-rw-r--r--var/spack/repos/builtin/packages/parallel-netcdf/nag_libtool.patch69
-rw-r--r--var/spack/repos/builtin/packages/parallel-netcdf/package.py84
-rw-r--r--var/spack/repos/builtin/packages/paraview/package.py1
-rw-r--r--var/spack/repos/builtin/packages/perfstubs/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-want/package.py2
-rw-r--r--var/spack/repos/builtin/packages/petsc/package.py12
-rw-r--r--var/spack/repos/builtin/packages/pfunit/package.py9
-rw-r--r--var/spack/repos/builtin/packages/pgi/package.py4
-rw-r--r--var/spack/repos/builtin/packages/php/package.py41
-rw-r--r--var/spack/repos/builtin/packages/pinentry/package.py47
-rw-r--r--var/spack/repos/builtin/packages/plumed/package.py6
-rw-r--r--var/spack/repos/builtin/packages/portage/package.py2
-rw-r--r--var/spack/repos/builtin/packages/precice/package.py1
-rw-r--r--var/spack/repos/builtin/packages/protobuf/package.py3
-rw-r--r--var/spack/repos/builtin/packages/py-arviz/package.py26
-rw-r--r--var/spack/repos/builtin/packages/py-astpretty/package.py21
-rw-r--r--var/spack/repos/builtin/packages/py-audioread/package.py21
-rw-r--r--var/spack/repos/builtin/packages/py-auxlib/package.py20
-rw-r--r--var/spack/repos/builtin/packages/py-basis-set-exchange/package.py33
-rw-r--r--var/spack/repos/builtin/packages/py-bx-python/package.py15
-rw-r--r--var/spack/repos/builtin/packages/py-cnvkit/package.py28
-rw-r--r--var/spack/repos/builtin/packages/py-contextlib2/package.py1
-rw-r--r--var/spack/repos/builtin/packages/py-decorator/package.py3
-rw-r--r--var/spack/repos/builtin/packages/py-deprecated/package.py20
-rw-r--r--var/spack/repos/builtin/packages/py-dgl/package.py94
-rw-r--r--var/spack/repos/builtin/packages/py-git-review/package.py1
-rw-r--r--var/spack/repos/builtin/packages/py-h5glance/package.py4
-rw-r--r--var/spack/repos/builtin/packages/py-h5py/package.py4
-rw-r--r--var/spack/repos/builtin/packages/py-hatchet/package.py27
-rw-r--r--var/spack/repos/builtin/packages/py-horovod/package.py120
-rw-r--r--var/spack/repos/builtin/packages/py-ipython/package.py5
-rw-r--r--var/spack/repos/builtin/packages/py-ipywidgets/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-jupyter-console/package.py7
-rw-r--r--var/spack/repos/builtin/packages/py-librosa/package.py27
-rw-r--r--var/spack/repos/builtin/packages/py-llvmlite/package.py11
-rw-r--r--var/spack/repos/builtin/packages/py-matplotlib/package.py13
-rw-r--r--var/spack/repos/builtin/packages/py-merlin/package.py31
-rw-r--r--var/spack/repos/builtin/packages/py-merlinwf/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-networkx/package.py27
-rw-r--r--var/spack/repos/builtin/packages/py-numba/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-numpy/package.py3
-rw-r--r--var/spack/repos/builtin/packages/py-pomegranate/package.py23
-rw-r--r--var/spack/repos/builtin/packages/py-pycairo/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-pycifrw/package.py18
-rw-r--r--var/spack/repos/builtin/packages/py-pycosat/package.py20
-rw-r--r--var/spack/repos/builtin/packages/py-pyfftw/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-pymc3/package.py29
-rw-r--r--var/spack/repos/builtin/packages/py-pyqt4/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-pyqt5/package.py21
-rw-r--r--var/spack/repos/builtin/packages/py-pythia/package.py20
-rw-r--r--var/spack/repos/builtin/packages/py-python-lzo/package.py18
-rw-r--r--var/spack/repos/builtin/packages/py-qtconsole/package.py3
-rw-r--r--var/spack/repos/builtin/packages/py-resampy/package.py21
-rw-r--r--var/spack/repos/builtin/packages/py-resultsfile/package.py22
-rw-r--r--var/spack/repos/builtin/packages/py-rseqc/package.py14
-rw-r--r--var/spack/repos/builtin/packages/py-sentencepiece/package.py24
-rw-r--r--var/spack/repos/builtin/packages/py-setproctitle/package.py18
-rw-r--r--var/spack/repos/builtin/packages/py-simplejson/package.py1
-rw-r--r--var/spack/repos/builtin/packages/py-sip/package.py15
-rw-r--r--var/spack/repos/builtin/packages/py-soundfile/package.py23
-rw-r--r--var/spack/repos/builtin/packages/py-tfdlpack/package.py45
-rw-r--r--var/spack/repos/builtin/packages/py-torch/package.py16
-rw-r--r--var/spack/repos/builtin/packages/py-torchtext/package.py24
-rw-r--r--var/spack/repos/builtin/packages/py-tuiview/package.py10
-rw-r--r--var/spack/repos/builtin/packages/py-versioneer/package.py21
-rw-r--r--var/spack/repos/builtin/packages/py-widgetsnbextension/package.py1
-rw-r--r--var/spack/repos/builtin/packages/python/package.py1
-rw-r--r--var/spack/repos/builtin/packages/qgis/package.py217
-rw-r--r--var/spack/repos/builtin/packages/qgis/pyqt5.patch25
-rw-r--r--var/spack/repos/builtin/packages/qmcpack/package.py33
-rw-r--r--var/spack/repos/builtin/packages/qrupdate/package.py26
-rw-r--r--var/spack/repos/builtin/packages/qt/package.py6
-rw-r--r--var/spack/repos/builtin/packages/quantum-espresso/package.py19
-rw-r--r--var/spack/repos/builtin/packages/r-openssl/package.py5
-rw-r--r--var/spack/repos/builtin/packages/r-sys/package.py5
-rw-r--r--var/spack/repos/builtin/packages/r/change_optflags_tmp.patch67
-rw-r--r--var/spack/repos/builtin/packages/r/package.py7
-rw-r--r--var/spack/repos/builtin/packages/rankstr/package.py4
-rw-r--r--var/spack/repos/builtin/packages/redset/package.py4
-rw-r--r--var/spack/repos/builtin/packages/revbayes/package.py19
-rw-r--r--var/spack/repos/builtin/packages/ripgrep/package.py31
-rw-r--r--var/spack/repos/builtin/packages/root/package.py23
-rw-r--r--var/spack/repos/builtin/packages/rust/package.py480
-rw-r--r--var/spack/repos/builtin/packages/samtools/package.py4
-rw-r--r--var/spack/repos/builtin/packages/scr/package.py13
-rw-r--r--var/spack/repos/builtin/packages/seacas/package.py2
-rw-r--r--var/spack/repos/builtin/packages/sentencepiece/package.py20
-rw-r--r--var/spack/repos/builtin/packages/shuffile/package.py4
-rw-r--r--var/spack/repos/builtin/packages/silo/package.py29
-rw-r--r--var/spack/repos/builtin/packages/sirius/package.py4
-rw-r--r--var/spack/repos/builtin/packages/slepc/package.py4
-rw-r--r--var/spack/repos/builtin/packages/source-highlight/package.py21
-rw-r--r--var/spack/repos/builtin/packages/spath/package.py34
-rw-r--r--var/spack/repos/builtin/packages/spdlog/package.py2
-rw-r--r--var/spack/repos/builtin/packages/spiral/package.py65
-rw-r--r--var/spack/repos/builtin/packages/sqlite/package.py2
-rw-r--r--var/spack/repos/builtin/packages/ssht/float_conversion.patch11
-rw-r--r--var/spack/repos/builtin/packages/ssht/package.py31
-rw-r--r--var/spack/repos/builtin/packages/stat/package.py2
-rw-r--r--var/spack/repos/builtin/packages/suite-sparse/package.py4
-rw-r--r--var/spack/repos/builtin/packages/swig/package.py1
-rw-r--r--var/spack/repos/builtin/packages/sz/package.py94
-rw-r--r--var/spack/repos/builtin/packages/tau/package.py47
-rw-r--r--var/spack/repos/builtin/packages/tcsh/package.py9
-rw-r--r--var/spack/repos/builtin/packages/the-silver-searcher/package.py1
-rw-r--r--var/spack/repos/builtin/packages/tixi/package.py24
-rw-r--r--var/spack/repos/builtin/packages/tmux/package.py10
-rw-r--r--var/spack/repos/builtin/packages/tree/package.py5
-rw-r--r--var/spack/repos/builtin/packages/triangle/package.py2
-rw-r--r--var/spack/repos/builtin/packages/trilinos/fix_clang_errors_12_18_1.patch39
-rw-r--r--var/spack/repos/builtin/packages/trilinos/package.py68
-rw-r--r--var/spack/repos/builtin/packages/ucx/package.py3
-rw-r--r--var/spack/repos/builtin/packages/umpire/package.py14
-rw-r--r--var/spack/repos/builtin/packages/unifyfs/auto-mount.patch25
-rw-r--r--var/spack/repos/builtin/packages/unifyfs/package.py5
-rw-r--r--var/spack/repos/builtin/packages/unqlite/package.py18
-rw-r--r--var/spack/repos/builtin/packages/uqtk/package.py20
-rw-r--r--var/spack/repos/builtin/packages/userspace-rcu/examples.patch13
-rw-r--r--var/spack/repos/builtin/packages/userspace-rcu/package.py31
-rw-r--r--var/spack/repos/builtin/packages/util-linux/package.py4
-rw-r--r--var/spack/repos/builtin/packages/valgrind/package.py3
-rw-r--r--var/spack/repos/builtin/packages/veccore/package.py40
-rw-r--r--var/spack/repos/builtin/packages/vecgeom/package.py111
-rw-r--r--var/spack/repos/builtin/packages/verrou/package.py12
-rw-r--r--var/spack/repos/builtin/packages/xcfun/package.py37
-rw-r--r--var/spack/repos/builtin/packages/xgboost/package.py2
-rw-r--r--var/spack/repos/builtin/packages/xsetpointer/package.py6
-rw-r--r--var/spack/repos/builtin/packages/xts/package.py19
-rw-r--r--var/spack/repos/builtin/packages/yarn/package.py22
355 files changed, 8695 insertions, 1783 deletions
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index f647b52036..b38a677416 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,14 +1,21 @@
---
-name: Bug report
+name: "\U0001F41E Bug report"
about: Report a bug in the core of Spack (command not working as expected, etc.)
-labels: bug
+labels: "bug,triage"
---
-
+<!--
*Explain, in a clear and concise way, the command you ran and the result you were trying to achieve.
Example: "I ran Spack find to list all the installed packages and..."*
+-->
+
+### Spack version
+<!-- Add the output to the command below -->
+```console
+$ spack --version
+```
### Steps to reproduce the issue
@@ -20,7 +27,7 @@ $ spack <command2> <spec>
### Error Message
-If Spack reported an error, provide the error message. If it did not report an error
+<!--If Spack reported an error, provide the error message. If it did not report an error
but the output appears incorrect, provide the incorrect output. If there was no error
message and no output but the result is incorrect, describe how it does not match
what you expect. To provide more information you might re-run the commands with
@@ -31,19 +38,27 @@ $ spack -d --stacktrace <command2> <spec>
...
```
that activate the full debug output.
-
+-->
### Information on your system
-
+<!--
This includes:
1. which platform you are using
2. any relevant configuration detail (custom `packages.yaml` or `modules.yaml`, etc.)
------
+-->
+
+### General information
+
+- [ ] I have run `spack --version` and reported the version of Spack
+- [ ] I have searched the issues of this repo and believe this is not a duplicate
+- [ ] I have run the failing commands in debug mode and reported the output
+<!--
We encourage you to try, as much as possible, to reduce your problem to the minimal example that still reproduces the issue. That would help us a lot in fixing it quickly and effectively!
If you want to ask a question about the tool (how to use it, what it can currently do, etc.), try the `#general` channel on our Slack first. We have a welcoming community and chances are you'll get your reply faster and without opening an issue.
Other than that, thanks for taking the time to contribute to Spack!
+--> \ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/build_error.md b/.github/ISSUE_TEMPLATE/build_error.md
index 3f36cf93cb..76d20f7bff 100644
--- a/.github/ISSUE_TEMPLATE/build_error.md
+++ b/.github/ISSUE_TEMPLATE/build_error.md
@@ -1,19 +1,24 @@
---
-name: Build error
+name: "\U0001F4A5 Build error"
about: Some package in Spack didn't build correctly
labels: "build-error"
---
-*Thanks for taking the time to report this build failure. To proceed with the
+<!--*Thanks for taking the time to report this build failure. To proceed with the
report please:*
1. Title the issue "Installation issue: <name-of-the-package>".
2. Provide the information required below.
-3. Remove the template instructions before posting the issue.
We encourage you to try, as much as possible, to reduce your problem to the minimal example that still reproduces the issue. That would help us a lot in fixing it quickly and effectively!
+-->
----
+### Spack version
+<!-- Add the output to the command below -->
+```console
+$ spack --version
+
+```
### Steps to reproduce the issue
@@ -24,7 +29,7 @@ $ spack install <spec> # Fill in the exact spec you are using
### Platform and user environment
-Please report your OS here:
+<!-- Please report your OS here:
```commandline
$ uname -a
Linux nuvolari 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
@@ -37,10 +42,11 @@ and, if relevant, post or attach:
- `compilers.yaml`
to the issue
+-->
### Additional information
-Sometimes the issue benefits from additional details. In these cases there are
+<!--Sometimes the issue benefits from additional details. In these cases there are
a few things we can suggest doing. First of all, you can post the full output of:
```console
$ spack spec --install-status <spec>
@@ -75,4 +81,9 @@ will provide additional debug information. After the failure you will find two f
failed object after Spack's compiler wrapper did its processing
You can post or attach those files to provide maintainers with more information on what
-is causing the failure.
+is causing the failure.-->
+
+### General information
+
+- [ ] I have run `spack --version` and reported the version of Spack
+- [ ] I have searched the issues of this repo and believe this is not a duplicate
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 35481fecb7..b6e5e27e6f 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -1,28 +1,33 @@
---
-name: Feature request
+name: "\U0001F38A Feature request"
about: Suggest adding a feature that is not yet in Spack
labels: feature
---
-*Please add a concise summary of your suggestion here.*
+<!--*Please add a concise summary of your suggestion here.*-->
### Rationale
-*Is your feature request related to a problem? Please describe it!*
+<!--*Is your feature request related to a problem? Please describe it!*-->
### Description
-*Describe the solution you'd like and the alternatives you have considered.*
+<!--*Describe the solution you'd like and the alternatives you have considered.*-->
### Additional information
-*Add any other context about the feature request here.*
+<!--*Add any other context about the feature request here.*-->
------
+### General information
+- [ ] I have run `spack --version` and reported the version of Spack
+- [ ] I have searched the issues of this repo and believe this is not a duplicate
-If you want to ask a question about the tool (how to use it, what it can currently do, etc.), try the `#general` channel on our Slack first. We have a welcoming community and chances are you'll get your reply faster and without opening an issue.
-Other than that, thanks for taking the time to contribute to Spack! \ No newline at end of file
+
+<!--If you want to ask a question about the tool (how to use it, what it can currently do, etc.), try the `#general` channel on our Slack first. We have a welcoming community and chances are you'll get your reply faster and without opening an issue.
+
+Other than that, thanks for taking the time to contribute to Spack!
+--> \ No newline at end of file
diff --git a/.github/workflows/linux_build_tests.yaml b/.github/workflows/linux_build_tests.yaml
index 27be6c3c18..04119c5c6e 100644
--- a/.github/workflows/linux_build_tests.yaml
+++ b/.github/workflows/linux_build_tests.yaml
@@ -28,7 +28,7 @@ jobs:
matrix:
package: [lz4, mpich, tut, py-setuptools, openjpeg, r-rcpp]
steps:
- - uses: actions/checkout@v1
+ - uses: actions/checkout@v2
- name: Cache ccache's store
uses: actions/cache@v1
with:
@@ -42,6 +42,7 @@ jobs:
python-version: 3.8
- name: Install System Packages
run: |
+ sudo apt-get update
sudo apt-get -yqq install ccache gfortran perl perl-base r-base r-base-core r-base-dev findutils openssl libssl-dev libpciaccess-dev
R --version
perl --version
diff --git a/.github/workflows/minimum_python_versions.yaml b/.github/workflows/minimum_python_versions.yaml
index c55042ffa1..95bc9af358 100644
--- a/.github/workflows/minimum_python_versions.yaml
+++ b/.github/workflows/minimum_python_versions.yaml
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v1
+ - uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v1
with:
diff --git a/.gitignore b/.gitignore
index f5169a5405..da05b2bcf0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,8 +22,14 @@
.coverage
\#*
.#*
+.cache
lib/spack/spack/test/.cache
/bin/spackc
*.in.log
*.out.log
*.orig
+
+# Eclipse files
+.project
+.cproject
+.pydevproject
diff --git a/etc/spack/defaults/config.yaml b/etc/spack/defaults/config.yaml
index 32745a309a..cc51060eae 100644
--- a/etc/spack/defaults/config.yaml
+++ b/etc/spack/defaults/config.yaml
@@ -75,6 +75,12 @@ config:
misc_cache: ~/.spack/cache
+ # Timeout in seconds used for downloading sources etc. This only applies
+ # to the connection phase and can be increased for slow connections or
+ # servers. 0 means no timeout.
+ connect_timeout: 10
+
+
# If this is false, tools like curl that use SSL will not verify
# certifiates. (e.g., curl will use use the -k option)
verify_ssl: true
diff --git a/etc/spack/defaults/modules.yaml b/etc/spack/defaults/modules.yaml
index 77c976510b..5ae1b50fda 100644
--- a/etc/spack/defaults/modules.yaml
+++ b/etc/spack/defaults/modules.yaml
@@ -30,7 +30,11 @@ modules:
lib64:
- LIBRARY_PATH
include:
- - CPATH
+ - C_INCLUDE_PATH
+ - CPLUS_INCLUDE_PATH
+ # The INCLUDE env variable specifies paths to look for
+ # .mod file for Intel Fortran compilers
+ - INCLUDE
lib/pkgconfig:
- PKG_CONFIG_PATH
lib64/pkgconfig:
diff --git a/lib/spack/docs/basic_usage.rst b/lib/spack/docs/basic_usage.rst
index 56d60a29da..d63dec8827 100644
--- a/lib/spack/docs/basic_usage.rst
+++ b/lib/spack/docs/basic_usage.rst
@@ -25,6 +25,14 @@ It is recommended that the following be put in your ``.bashrc`` file:
alias less='less -R'
+If you do not see colorized output when using ``less -R`` it is because color
+is being disabled in the piped output. In this case, tell spack to force
+colorized output.
+
+.. code-block:: console
+
+ $ spack --color always | less -R
+
--------------------------
Listing available packages
--------------------------
@@ -45,7 +53,7 @@ can install:
.. command-output:: spack list
:ellipsis: 10
-There are thosands of them, so we've truncated the output above, but you
+There are thousands of them, so we've truncated the output above, but you
can find a :ref:`full list here <package-list>`.
Packages are listed by name in alphabetical order.
A pattern to match with no wildcards, ``*`` or ``?``,
@@ -267,7 +275,7 @@ the ``spack gc`` ("garbage collector") command, which will uninstall all unneede
-- linux-ubuntu18.04-broadwell / gcc@9.0.1 ----------------------
hdf5@1.10.5 libiconv@1.16 libpciaccess@0.13.5 libszip@2.1.1 libxml2@2.9.9 mpich@3.3.2 openjpeg@2.3.1 xz@5.2.4 zlib@1.2.11
-In the example above Spack went through all the packages in the DB
+In the example above Spack went through all the packages in the package database
and removed everything that is not either:
1. A package installed upon explicit request of the user
@@ -854,7 +862,7 @@ Variants are named options associated with a particular package. They are
optional, as each package must provide default values for each variant it
makes available. Variants can be specified using
a flexible parameter syntax ``name=<value>``. For example,
-``spack install libelf debug=True`` will install libelf build with debug
+``spack install libelf debug=True`` will install libelf built with debug
flags. The names of particular variants available for a package depend on
what was provided by the package author. ``spack info <package>`` will
provide information on what build variants are available.
@@ -1067,13 +1075,13 @@ of failing:
In the snippet above, for instance, the microarchitecture was demoted to ``haswell`` when
compiling with ``gcc@4.8`` since support to optimize for ``broadwell`` starts from ``gcc@4.9:``.
-Finally if Spack has no information to match compiler and target, it will
+Finally, if Spack has no information to match compiler and target, it will
proceed with the installation but avoid injecting any microarchitecture
specific flags.
.. warning::
- Currently Spack doesn't print any warning to the user if it has no information
+ Currently, Spack doesn't print any warning to the user if it has no information
on which optimization flags should be used for a given compiler. This behavior
might change in the future.
@@ -1083,7 +1091,7 @@ specific flags.
Virtual dependencies
--------------------
-The dependence graph for ``mpileaks`` we saw above wasn't *quite*
+The dependency graph for ``mpileaks`` we saw above wasn't *quite*
accurate. ``mpileaks`` uses MPI, which is an interface that has many
different implementations. Above, we showed ``mpileaks`` and
``callpath`` depending on ``mpich``, which is one *particular*
@@ -1410,12 +1418,12 @@ packages listed as activated:
py-nose@1.3.4 py-numpy@1.9.1 py-setuptools@11.3.1
Now, when a user runs python, ``numpy`` will be available for import
-*without* the user having to explicitly loaded. ``python@2.7.8`` now
+*without* the user having to explicitly load it. ``python@2.7.8`` now
acts like a system Python installation with ``numpy`` installed inside
of it.
Spack accomplishes this by symbolically linking the *entire* prefix of
-the ``py-numpy`` into the prefix of the ``python`` package. To the
+the ``py-numpy`` package into the prefix of the ``python`` package. To the
python interpreter, it looks like ``numpy`` is installed in the
``site-packages`` directory.
diff --git a/lib/spack/docs/build_systems/cmakepackage.rst b/lib/spack/docs/build_systems/cmakepackage.rst
index 0a771edad3..76e89c80b1 100644
--- a/lib/spack/docs/build_systems/cmakepackage.rst
+++ b/lib/spack/docs/build_systems/cmakepackage.rst
@@ -128,17 +128,20 @@ Adding flags to cmake
^^^^^^^^^^^^^^^^^^^^^
To add additional flags to the ``cmake`` call, simply override the
-``cmake_args`` function:
+``cmake_args`` function. The following example defines values for the flags
+``WHATEVER``, ``ENABLE_BROKEN_FEATURE``, ``DETECT_HDF5``, and ``THREADS`` with
+and without the :py:meth:`~.CMakePackage.define` and
+:py:meth:`~.CMakePackage.define_from_variant` helper functions:
.. code-block:: python
def cmake_args(self):
- args = []
-
- if '+hdf5' in self.spec:
- args.append('-DDETECT_HDF5=ON')
- else:
- args.append('-DDETECT_HDF5=OFF')
+ args = [
+ '-DWHATEVER:STRING=somevalue',
+ self.define('ENABLE_BROKEN_FEATURE', False),
+ self.define_from_variant('DETECT_HDF5', 'hdf5'),
+ self.define_from_variant('THREADS'), # True if +threads
+ ]
return args
diff --git a/lib/spack/docs/build_systems/sippackage.rst b/lib/spack/docs/build_systems/sippackage.rst
index b8c08ec513..ddf9a26ab9 100644
--- a/lib/spack/docs/build_systems/sippackage.rst
+++ b/lib/spack/docs/build_systems/sippackage.rst
@@ -51,10 +51,8 @@ Build system dependencies
``SIPPackage`` requires several dependencies. Python is needed to run
the ``configure.py`` build script, and to run the resulting Python
libraries. Qt is needed to provide the ``qmake`` command. SIP is also
-needed to build the package. SIP is an unusual dependency in that it
-must be installed in the same installation directory as the package,
-so instead of a ``depends_on``, we use a ``resource``. All of these
-dependencies are automatically added via the base class
+needed to build the package. All of these dependencies are automatically
+added via the base class
.. code-block:: python
@@ -62,11 +60,7 @@ dependencies are automatically added via the base class
depends_on('qt', type='build')
- resource(name='sip',
- url='https://www.riverbankcomputing.com/static/Downloads/sip/4.19.18/sip-4.19.18.tar.gz',
- sha256='c0bd863800ed9b15dcad477c4017cdb73fa805c25908b0240564add74d697e1e',
- destination='.')
-
+ depends_on('py-sip', type='build')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Passing arguments to ``configure.py``
diff --git a/lib/spack/docs/containers.rst b/lib/spack/docs/containers.rst
index bbb21a2e00..18500ff764 100644
--- a/lib/spack/docs/containers.rst
+++ b/lib/spack/docs/containers.rst
@@ -108,7 +108,7 @@ are currently supported are summarized in the table below:
- ``ubuntu:16.04``
- ``spack/ubuntu-xenial``
* - Ubuntu 18.04
- - ``ubuntu:16.04``
+ - ``ubuntu:18.04``
- ``spack/ubuntu-bionic``
* - CentOS 6
- ``centos:6``
diff --git a/lib/spack/docs/packaging_guide.rst b/lib/spack/docs/packaging_guide.rst
index 41d74fcc74..3c588c240b 100644
--- a/lib/spack/docs/packaging_guide.rst
+++ b/lib/spack/docs/packaging_guide.rst
@@ -2913,7 +2913,7 @@ discover its dependencies.
If you want to see the environment that a package will build with, or
if you want to run commands in that environment to test them out, you
-can use the :ref:`cmd-spack-env` command, documented
+can use the :ref:`cmd-spack-build-env` command, documented
below.
^^^^^^^^^^^^^^^^^^^^^
@@ -4332,31 +4332,31 @@ directory, install directory, package directory) and others change to
core spack locations. For example, ``spack cd --module-dir`` will take you to
the main python source directory of your spack install.
-.. _cmd-spack-env:
+.. _cmd-spack-build-env:
-^^^^^^^^^^^^^
-``spack env``
-^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^
+``spack build-env``
+^^^^^^^^^^^^^^^^^^^
-``spack env`` functions much like the standard unix ``env`` command,
-but it takes a spec as an argument. You can use it to see the
+``spack build-env`` functions much like the standard unix ``build-env``
+command, but it takes a spec as an argument. You can use it to see the
environment variables that will be set when a particular build runs,
for example:
.. code-block:: console
- $ spack env mpileaks@1.1%intel
+ $ spack build-env mpileaks@1.1%intel
This will display the entire environment that will be set when the
``mpileaks@1.1%intel`` build runs.
To run commands in a package's build environment, you can simply
-provide them after the spec argument to ``spack env``:
+provide them after the spec argument to ``spack build-env``:
.. code-block:: console
$ spack cd mpileaks@1.1%intel
- $ spack env mpileaks@1.1%intel ./configure
+ $ spack build-env mpileaks@1.1%intel ./configure
This will cd to the build directory and then run ``configure`` in the
package's build environment.
diff --git a/lib/spack/env/cc b/lib/spack/env/cc
index 73c5759dfe..f2b8bf577f 100755
--- a/lib/spack/env/cc
+++ b/lib/spack/env/cc
@@ -43,7 +43,7 @@ parameters=(
# The compiler input variables are checked for sanity later:
# SPACK_CC, SPACK_CXX, SPACK_F77, SPACK_FC
# The default compiler flags are passed from these variables:
-# SPACK_CFLAGS, SPACK_CXXFLAGS, SPACK_FCFLAGS, SPACK_FFLAGS,
+# SPACK_CFLAGS, SPACK_CXXFLAGS, SPACK_FFLAGS,
# SPACK_LDFLAGS, SPACK_LDLIBS
# Debug env var is optional; set to "TRUE" for debug logging:
# SPACK_DEBUG
diff --git a/lib/spack/external/altgraph/__init__.py b/lib/spack/external/altgraph/__init__.py
index 289c6408d1..ee70a9c91b 100644
--- a/lib/spack/external/altgraph/__init__.py
+++ b/lib/spack/external/altgraph/__init__.py
@@ -139,9 +139,12 @@ To display the graph we can use the GraphViz backend::
@contributor: U{Reka Albert <http://www.phys.psu.edu/~ralbert/>}
'''
-import pkg_resources
-__version__ = pkg_resources.require('altgraph')[0].version
-
+# import pkg_resources
+# __version__ = pkg_resources.require('altgraph')[0].version
+# pkg_resources is not finding the altgraph import despite the fact that it is in sys.path
+# there is no .dist-info or .egg-info for pkg_resources to query the version from
+# so it must be set manually
+__version__ = '0.16.1'
class GraphError(ValueError):
pass
diff --git a/lib/spack/external/distro.py b/lib/spack/external/distro.py
index b63451640a..e3805de75f 100644
--- a/lib/spack/external/distro.py
+++ b/lib/spack/external/distro.py
@@ -64,6 +64,7 @@ NORMALIZED_LSB_ID = {
'enterpriseenterprise': 'oracle', # Oracle Enterprise Linux
'redhatenterpriseworkstation': 'rhel', # RHEL 6, 7 Workstation
'redhatenterpriseserver': 'rhel', # RHEL 6, 7 Server
+ 'redhatenterprisecomputenode': 'rhel', # RHEL 6 ComputeNode
}
#: Translation table for normalizing the distro ID derived from the file name
diff --git a/lib/spack/spack/binary_distribution.py b/lib/spack/spack/binary_distribution.py
index 9991a66965..7902e5fc58 100644
--- a/lib/spack/spack/binary_distribution.py
+++ b/lib/spack/spack/binary_distribution.py
@@ -10,6 +10,9 @@ import tarfile
import shutil
import tempfile
import hashlib
+import glob
+import platform
+
from contextlib import closing
import ruamel.yaml as yaml
@@ -53,7 +56,7 @@ BUILD_CACHE_INDEX_TEMPLATE = '''
BUILD_CACHE_INDEX_ENTRY_TEMPLATE = ' <li><a href="{path}">{path}</a></li>'
-class NoOverwriteException(Exception):
+class NoOverwriteException(spack.error.SpackError):
"""
Raised when a file exists and must be overwritten.
"""
@@ -68,14 +71,18 @@ class NoGpgException(spack.error.SpackError):
"""
Raised when gpg2 is not in PATH
"""
- pass
+
+ def __init__(self, msg):
+ super(NoGpgException, self).__init__(msg)
class NoKeyException(spack.error.SpackError):
"""
Raised when gpg has no default key added.
"""
- pass
+
+ def __init__(self, msg):
+ super(NoKeyException, self).__init__(msg)
class PickKeyException(spack.error.SpackError):
@@ -84,7 +91,7 @@ class PickKeyException(spack.error.SpackError):
"""
def __init__(self, keys):
- err_msg = "Multi keys available for signing\n%s\n" % keys
+ err_msg = "Multiple keys available for signing\n%s\n" % keys
err_msg += "Use spack buildcache create -k <key hash> to pick a key."
super(PickKeyException, self).__init__(err_msg)
@@ -107,7 +114,9 @@ class NewLayoutException(spack.error.SpackError):
"""
Raised if directory layout is different from buildcache.
"""
- pass
+
+ def __init__(self, msg):
+ super(NewLayoutException, self).__init__(msg)
def build_cache_relative_path():
@@ -137,15 +146,21 @@ def read_buildinfo_file(prefix):
return buildinfo
-def write_buildinfo_file(prefix, workdir, rel=False):
+def write_buildinfo_file(spec, workdir, rel=False):
"""
Create a cache file containing information
required for the relocation
"""
+ prefix = spec.prefix
text_to_relocate = []
binary_to_relocate = []
link_to_relocate = []
blacklist = (".spack", "man")
+ prefix_to_hash = dict()
+ prefix_to_hash[str(spec.package.prefix)] = spec.dag_hash()
+ deps = spack.build_environment.get_rpath_deps(spec.package)
+ for d in deps:
+ prefix_to_hash[str(d.prefix)] = d.dag_hash()
# Do this at during tarball creation to save time when tarball unpacked.
# Used by make_package_relative to determine binaries to change.
for root, dirs, files in os.walk(prefix, topdown=True):
@@ -162,8 +177,8 @@ def write_buildinfo_file(prefix, workdir, rel=False):
link_to_relocate.append(rel_path_name)
else:
msg = 'Absolute link %s to %s ' % (path_name, link)
- msg += 'outside of stage %s ' % prefix
- msg += 'cannot be relocated.'
+ msg += 'outside of prefix %s ' % prefix
+ msg += 'should not be relocated.'
tty.warn(msg)
if relocate.needs_binary_relocation(m_type, m_subtype):
@@ -184,6 +199,7 @@ def write_buildinfo_file(prefix, workdir, rel=False):
buildinfo['relocate_textfiles'] = text_to_relocate
buildinfo['relocate_binaries'] = binary_to_relocate
buildinfo['relocate_links'] = link_to_relocate
+ buildinfo['prefix_to_hash'] = prefix_to_hash
filename = buildinfo_file_name(workdir)
with open(filename, 'w') as outfile:
outfile.write(syaml.dump(buildinfo, default_flow_style=True))
@@ -308,7 +324,7 @@ def build_tarball(spec, outdir, force=False, rel=False, unsigned=False,
tmpdir = tempfile.mkdtemp()
cache_prefix = build_cache_prefix(tmpdir)
- tarfile_name = tarball_name(spec, '.tar.bz2')
+ tarfile_name = tarball_name(spec, '.tar.gz')
tarfile_dir = os.path.join(cache_prefix, tarball_directory_name(spec))
tarfile_path = os.path.join(tarfile_dir, tarfile_name)
spackfile_path = os.path.join(
@@ -356,7 +372,7 @@ def build_tarball(spec, outdir, force=False, rel=False, unsigned=False,
os.remove(temp_tarfile_path)
# create info for later relocation and create tar
- write_buildinfo_file(spec.prefix, workdir, rel=rel)
+ write_buildinfo_file(spec, workdir, rel)
# optionally make the paths in the binaries relative to each other
# in the spack install tree before creating tarball
@@ -370,15 +386,15 @@ def build_tarball(spec, outdir, force=False, rel=False, unsigned=False,
tty.die(e)
else:
try:
- make_package_placeholder(workdir, spec, allow_root)
+ check_package_relocatable(workdir, spec, allow_root)
except Exception as e:
shutil.rmtree(workdir)
shutil.rmtree(tarfile_dir)
shutil.rmtree(tmpdir)
tty.die(e)
- # create compressed tarball of the install prefix
- with closing(tarfile.open(tarfile_path, 'w:bz2')) as tar:
+ # create gzip compressed tarball of the install prefix
+ with closing(tarfile.open(tarfile_path, 'w:gz')) as tar:
tar.add(name='%s' % workdir,
arcname='%s' % os.path.basename(spec.prefix))
# remove copy of install directory
@@ -400,6 +416,7 @@ def build_tarball(spec, outdir, force=False, rel=False, unsigned=False,
buildinfo = {}
buildinfo['relative_prefix'] = os.path.relpath(
spec.prefix, spack.store.layout.root)
+ buildinfo['relative_rpaths'] = rel
spec_dict['buildinfo'] = buildinfo
spec_dict['full_hash'] = spec.full_hash()
@@ -433,6 +450,9 @@ def build_tarball(spec, outdir, force=False, rel=False, unsigned=False,
web_util.push_to_url(
specfile_path, remote_specfile_path, keep_original=False)
+ tty.msg('Buildache for "%s" written to \n %s' %
+ (spec, remote_spackfile_path))
+
try:
# create an index.html for the build_cache directory so specs can be
# found
@@ -478,100 +498,149 @@ def make_package_relative(workdir, spec, allow_root):
"""
prefix = spec.prefix
buildinfo = read_buildinfo_file(workdir)
- old_path = buildinfo['buildpath']
+ old_layout_root = buildinfo['buildpath']
orig_path_names = list()
cur_path_names = list()
for filename in buildinfo['relocate_binaries']:
orig_path_names.append(os.path.join(prefix, filename))
cur_path_names.append(os.path.join(workdir, filename))
- if spec.architecture.platform == 'darwin':
+ if (spec.architecture.platform == 'darwin' or
+ spec.architecture.platform == 'test' and
+ platform.system().lower() == 'darwin'):
relocate.make_macho_binaries_relative(cur_path_names, orig_path_names,
- old_path, allow_root)
- else:
+ old_layout_root)
+ if (spec.architecture.platform == 'linux' or
+ spec.architecture.platform == 'test' and
+ platform.system().lower() == 'linux'):
relocate.make_elf_binaries_relative(cur_path_names, orig_path_names,
- old_path, allow_root)
+ old_layout_root)
+ relocate.check_files_relocatable(cur_path_names, allow_root)
orig_path_names = list()
cur_path_names = list()
- for filename in buildinfo.get('relocate_links', []):
- orig_path_names.append(os.path.join(prefix, filename))
- cur_path_names.append(os.path.join(workdir, filename))
+ for linkname in buildinfo.get('relocate_links', []):
+ orig_path_names.append(os.path.join(prefix, linkname))
+ cur_path_names.append(os.path.join(workdir, linkname))
relocate.make_link_relative(cur_path_names, orig_path_names)
-def make_package_placeholder(workdir, spec, allow_root):
+def check_package_relocatable(workdir, spec, allow_root):
"""
Check if package binaries are relocatable.
Change links to placeholder links.
"""
- prefix = spec.prefix
buildinfo = read_buildinfo_file(workdir)
cur_path_names = list()
for filename in buildinfo['relocate_binaries']:
cur_path_names.append(os.path.join(workdir, filename))
relocate.check_files_relocatable(cur_path_names, allow_root)
- cur_path_names = list()
- for filename in buildinfo.get('relocate_links', []):
- cur_path_names.append(os.path.join(workdir, filename))
- relocate.make_link_placeholder(cur_path_names, workdir, prefix)
-
-def relocate_package(workdir, spec, allow_root):
+def relocate_package(spec, allow_root):
"""
Relocate the given package
"""
+ workdir = str(spec.prefix)
buildinfo = read_buildinfo_file(workdir)
- new_path = str(spack.store.layout.root)
- new_prefix = str(spack.paths.prefix)
- old_path = str(buildinfo['buildpath'])
- old_prefix = str(buildinfo.get('spackprefix',
- '/not/in/buildinfo/dictionary'))
- rel = buildinfo.get('relative_rpaths', False)
-
- tty.msg("Relocating package from",
- "%s to %s." % (old_path, new_path))
- path_names = set()
+ new_layout_root = str(spack.store.layout.root)
+ new_prefix = str(spec.prefix)
+ new_rel_prefix = str(os.path.relpath(new_prefix, new_layout_root))
+ new_spack_prefix = str(spack.paths.prefix)
+ old_layout_root = str(buildinfo['buildpath'])
+ old_spack_prefix = str(buildinfo.get('spackprefix'))
+ old_rel_prefix = buildinfo.get('relative_prefix')
+ old_prefix = os.path.join(old_layout_root, old_rel_prefix)
+ rel = buildinfo.get('relative_rpaths')
+ prefix_to_hash = buildinfo.get('prefix_to_hash', None)
+ if (old_rel_prefix != new_rel_prefix and not prefix_to_hash):
+ msg = "Package tarball was created from an install "
+ msg += "prefix with a different directory layout and an older "
+ msg += "buildcache create implementation. It cannot be relocated."
+ raise NewLayoutException(msg)
+ # older buildcaches do not have the prefix_to_hash dictionary
+ # need to set an empty dictionary and add one entry to
+ # prefix_to_prefix to reproduce the old behavior
+ if not prefix_to_hash:
+ prefix_to_hash = dict()
+ hash_to_prefix = dict()
+ hash_to_prefix[spec.format('{hash}')] = str(spec.package.prefix)
+ new_deps = spack.build_environment.get_rpath_deps(spec.package)
+ for d in new_deps:
+ hash_to_prefix[d.format('{hash}')] = str(d.prefix)
+ prefix_to_prefix = dict()
+ for orig_prefix, hash in prefix_to_hash.items():
+ prefix_to_prefix[orig_prefix] = hash_to_prefix.get(hash, None)
+ prefix_to_prefix[old_prefix] = new_prefix
+ prefix_to_prefix[old_layout_root] = new_layout_root
+
+ tty.debug("Relocating package from",
+ "%s to %s." % (old_layout_root, new_layout_root))
+
+ def is_backup_file(file):
+ return file.endswith('~')
+
+ # Text files containing the prefix text
+ text_names = list()
for filename in buildinfo['relocate_textfiles']:
- path_name = os.path.join(workdir, filename)
+ text_name = os.path.join(workdir, filename)
# Don't add backup files generated by filter_file during install step.
- if not path_name.endswith('~'):
- path_names.add(path_name)
- relocate.relocate_text(path_names, oldpath=old_path,
- newpath=new_path, oldprefix=old_prefix,
- newprefix=new_prefix)
- # If the binary files in the package were not edited to use
- # relative RPATHs, then the RPATHs need to be relocated
- if rel:
- if old_path != new_path:
- files_to_relocate = list(filter(
- lambda pathname: not relocate.file_is_relocatable(
- pathname, paths_to_relocate=[old_path, old_prefix]),
- map(lambda filename: os.path.join(workdir, filename),
- buildinfo['relocate_binaries'])))
-
- if len(old_path) < len(new_path) and files_to_relocate:
- tty.debug('Cannot do a binary string replacement with padding '
- 'for package because %s is longer than %s.' %
- (new_path, old_path))
- else:
- for path_name in files_to_relocate:
- relocate.replace_prefix_bin(path_name, old_path, new_path)
- else:
- path_names = set()
- for filename in buildinfo['relocate_binaries']:
- path_name = os.path.join(workdir, filename)
- path_names.add(path_name)
- if spec.architecture.platform == 'darwin':
- relocate.relocate_macho_binaries(path_names, old_path,
- new_path, allow_root)
- else:
- relocate.relocate_elf_binaries(path_names, old_path,
- new_path, allow_root)
- path_names = set()
- for filename in buildinfo.get('relocate_links', []):
- path_name = os.path.join(workdir, filename)
- path_names.add(path_name)
- relocate.relocate_links(path_names, old_path, new_path)
+ if not is_backup_file(text_name):
+ text_names.append(text_name)
+
+# If we are installing back to the same location don't replace anything
+ if old_layout_root != new_layout_root:
+ paths_to_relocate = [old_spack_prefix, old_layout_root]
+ paths_to_relocate.extend(prefix_to_hash.keys())
+ files_to_relocate = list(filter(
+ lambda pathname: not relocate.file_is_relocatable(
+ pathname, paths_to_relocate=paths_to_relocate),
+ map(lambda filename: os.path.join(workdir, filename),
+ buildinfo['relocate_binaries'])))
+ # If the buildcache was not created with relativized rpaths
+ # do the relocation of path in binaries
+ if (spec.architecture.platform == 'darwin' or
+ spec.architecture.platform == 'test' and
+ platform.system().lower() == 'darwin'):
+ relocate.relocate_macho_binaries(files_to_relocate,
+ old_layout_root,
+ new_layout_root,
+ prefix_to_prefix, rel,
+ old_prefix,
+ new_prefix)
+ if (spec.architecture.platform == 'linux' or
+ spec.architecture.platform == 'test' and
+ platform.system().lower() == 'linux'):
+ relocate.relocate_elf_binaries(files_to_relocate,
+ old_layout_root,
+ new_layout_root,
+ prefix_to_prefix, rel,
+ old_prefix,
+ new_prefix)
+ # Relocate links to the new install prefix
+ link_names = [linkname
+ for linkname in buildinfo.get('relocate_links', [])]
+ relocate.relocate_links(link_names,
+ old_layout_root,
+ new_layout_root,
+ old_prefix,
+ new_prefix,
+ prefix_to_prefix)
+
+ # For all buildcaches
+ # relocate the install prefixes in text files including dependencies
+ relocate.relocate_text(text_names,
+ old_layout_root, new_layout_root,
+ old_prefix, new_prefix,
+ old_spack_prefix,
+ new_spack_prefix,
+ prefix_to_prefix)
+
+ # relocate the install prefixes in binary files including dependencies
+ relocate.relocate_text_bin(files_to_relocate,
+ old_layout_root, new_layout_root,
+ old_prefix, new_prefix,
+ old_spack_prefix,
+ new_spack_prefix,
+ prefix_to_prefix)
def extract_tarball(spec, filename, allow_root=False, unsigned=False,
@@ -589,16 +658,16 @@ def extract_tarball(spec, filename, allow_root=False, unsigned=False,
stagepath = os.path.dirname(filename)
spackfile_name = tarball_name(spec, '.spack')
spackfile_path = os.path.join(stagepath, spackfile_name)
- tarfile_name = tarball_name(spec, '.tar.bz2')
+ tarfile_name = tarball_name(spec, '.tar.gz')
tarfile_path = os.path.join(tmpdir, tarfile_name)
specfile_name = tarball_name(spec, '.spec.yaml')
specfile_path = os.path.join(tmpdir, specfile_name)
with closing(tarfile.open(spackfile_path, 'r')) as tar:
tar.extractall(tmpdir)
- # older buildcache tarfiles use gzip compression
+ # some buildcache tarfiles use bzip2 compression
if not os.path.exists(tarfile_path):
- tarfile_name = tarball_name(spec, '.tar.gz')
+ tarfile_name = tarball_name(spec, '.tar.bz2')
tarfile_path = os.path.join(tmpdir, tarfile_name)
if not unsigned:
if os.path.exists('%s.asc' % specfile_path):
@@ -607,7 +676,7 @@ def extract_tarball(spec, filename, allow_root=False, unsigned=False,
Gpg.verify('%s.asc' % specfile_path, specfile_path, suppress)
except Exception as e:
shutil.rmtree(tmpdir)
- tty.die(e)
+ raise e
else:
shutil.rmtree(tmpdir)
raise NoVerifyException(
@@ -636,22 +705,30 @@ def extract_tarball(spec, filename, allow_root=False, unsigned=False,
# if the original relative prefix is in the spec file use it
buildinfo = spec_dict.get('buildinfo', {})
old_relative_prefix = buildinfo.get('relative_prefix', new_relative_prefix)
+ rel = buildinfo.get('relative_rpaths')
# if the original relative prefix and new relative prefix differ the
# directory layout has changed and the buildcache cannot be installed
- if old_relative_prefix != new_relative_prefix:
- shutil.rmtree(tmpdir)
- msg = "Package tarball was created from an install "
- msg += "prefix with a different directory layout.\n"
- msg += "It cannot be relocated."
- raise NewLayoutException(msg)
+ # if it was created with relative rpaths
+ info = 'old relative prefix %s\nnew relative prefix %s\nrelative rpaths %s'
+ tty.debug(info %
+ (old_relative_prefix, new_relative_prefix, rel))
+# if (old_relative_prefix != new_relative_prefix and (rel)):
+# shutil.rmtree(tmpdir)
+# msg = "Package tarball was created from an install "
+# msg += "prefix with a different directory layout. "
+# msg += "It cannot be relocated because it "
+# msg += "uses relative rpaths."
+# raise NewLayoutException(msg)
# extract the tarball in a temp directory
with closing(tarfile.open(tarfile_path, 'r')) as tar:
tar.extractall(path=tmpdir)
- # the base of the install prefix is used when creating the tarball
- # so the pathname should be the same now that the directory layout
- # is confirmed
- workdir = os.path.join(tmpdir, os.path.basename(spec.prefix))
+ # get the parent directory of the file .spack/binary_distribution
+ # this should the directory unpacked from the tarball whose
+ # name is unknown because the prefix naming is unknown
+ bindist_file = glob.glob('%s/*/.spack/binary_distribution' % tmpdir)[0]
+ workdir = re.sub('/.spack/binary_distribution$', '', bindist_file)
+ tty.debug('workdir %s' % workdir)
# install_tree copies hardlinks
# create a temporary tarfile from prefix and exract it to workdir
# tarfile preserves hardlinks
@@ -669,10 +746,10 @@ def extract_tarball(spec, filename, allow_root=False, unsigned=False,
os.remove(specfile_path)
try:
- relocate_package(spec.prefix, spec, allow_root)
+ relocate_package(spec, allow_root)
except Exception as e:
shutil.rmtree(spec.prefix)
- tty.die(e)
+ raise e
else:
manifest_file = os.path.join(spec.prefix,
spack.store.layout.metadata_dir,
@@ -682,6 +759,8 @@ def extract_tarball(spec, filename, allow_root=False, unsigned=False,
tty.warn('No manifest file in tarball for spec %s' % spec_id)
finally:
shutil.rmtree(tmpdir)
+ if os.path.exists(filename):
+ os.remove(filename)
# Internal cache for downloaded specs
@@ -729,7 +808,7 @@ def get_spec(spec=None, force=False):
tty.debug("No Spack mirrors are currently configured")
return {}
- if spec in _cached_specs:
+ if _cached_specs and spec in _cached_specs:
return _cached_specs
for mirror in spack.mirror.MirrorCollection().values():
@@ -799,6 +878,7 @@ def get_specs(force=False, allarch=False):
def get_keys(install=False, trust=False, force=False):
"""
Get pgp public keys available on mirror
+ with suffix .key or .pub
"""
if not spack.mirror.MirrorCollection():
tty.die("Please add a spack mirror to allow " +
@@ -813,18 +893,20 @@ def get_keys(install=False, trust=False, force=False):
mirror_dir = url_util.local_file_path(fetch_url_build_cache)
if mirror_dir:
tty.msg("Finding public keys in %s" % mirror_dir)
- files = os.listdir(mirror_dir)
+ files = os.listdir(str(mirror_dir))
for file in files:
- if re.search(r'\.key', file):
+ if re.search(r'\.key', file) or re.search(r'\.pub', file):
link = url_util.join(fetch_url_build_cache, file)
keys.add(link)
else:
tty.msg("Finding public keys at %s" %
url_util.format(fetch_url_build_cache))
- p, links = web_util.spider(fetch_url_build_cache, depth=1)
+ # For s3 mirror need to request index.html directly
+ p, links = web_util.spider(
+ url_util.join(fetch_url_build_cache, 'index.html'), depth=1)
for link in links:
- if re.search(r'\.key', link):
+ if re.search(r'\.key', link) or re.search(r'\.pub', link):
keys.add(link)
for link in keys:
diff --git a/lib/spack/spack/build_systems/autotools.py b/lib/spack/spack/build_systems/autotools.py
index c21b8dad71..5b4f223d41 100644
--- a/lib/spack/spack/build_systems/autotools.py
+++ b/lib/spack/spack/build_systems/autotools.py
@@ -263,6 +263,12 @@ class AutotoolsPackage(PackageBase):
if values:
values_str = '{0}={1}'.format(flag.upper(), ' '.join(values))
self.configure_flag_args.append(values_str)
+ # Spack's fflags are meant for both F77 and FC, therefore we
+ # additionaly set FCFLAGS if required.
+ values = flags.get('fflags', None)
+ if values:
+ values_str = 'FCFLAGS={0}'.format(' '.join(values))
+ self.configure_flag_args.append(values_str)
def configure(self, spec, prefix):
"""Runs configure with the arguments specified in
diff --git a/lib/spack/spack/build_systems/cmake.py b/lib/spack/spack/build_systems/cmake.py
index 14f33e94e6..d7da957a9d 100644
--- a/lib/spack/spack/build_systems/cmake.py
+++ b/lib/spack/spack/build_systems/cmake.py
@@ -147,33 +147,129 @@ class CMakePackage(PackageBase):
except KeyError:
build_type = 'RelWithDebInfo'
+ define = CMakePackage.define
args = [
'-G', generator,
- '-DCMAKE_INSTALL_PREFIX:PATH={0}'.format(pkg.prefix),
- '-DCMAKE_BUILD_TYPE:STRING={0}'.format(build_type),
+ define('CMAKE_INSTALL_PREFIX', pkg.prefix),
+ define('CMAKE_BUILD_TYPE', build_type),
]
if primary_generator == 'Unix Makefiles':
- args.append('-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON')
+ args.append(define('CMAKE_VERBOSE_MAKEFILE', True))
if platform.mac_ver()[0]:
args.extend([
- '-DCMAKE_FIND_FRAMEWORK:STRING=LAST',
- '-DCMAKE_FIND_APPBUNDLE:STRING=LAST'
+ define('CMAKE_FIND_FRAMEWORK', "LAST"),
+ define('CMAKE_FIND_APPBUNDLE', "LAST"),
])
# Set up CMake rpath
- args.append('-DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=FALSE')
- rpaths = ';'.join(spack.build_environment.get_rpaths(pkg))
- args.append('-DCMAKE_INSTALL_RPATH:STRING={0}'.format(rpaths))
+ args.extend([
+ define('CMAKE_INSTALL_RPATH_USE_LINK_PATH', False),
+ define('CMAKE_INSTALL_RPATH',
+ spack.build_environment.get_rpaths(pkg)),
+ ])
# CMake's find_package() looks in CMAKE_PREFIX_PATH first, help CMake
# to find immediate link dependencies in right places:
deps = [d.prefix for d in
pkg.spec.dependencies(deptype=('build', 'link'))]
deps = filter_system_paths(deps)
- args.append('-DCMAKE_PREFIX_PATH:STRING={0}'.format(';'.join(deps)))
+ args.append(define('CMAKE_PREFIX_PATH', deps))
return args
+ @staticmethod
+ def define(cmake_var, value):
+ """Return a CMake command line argument that defines a variable.
+
+ The resulting argument will convert boolean values to OFF/ON
+ and lists/tuples to CMake semicolon-separated string lists. All other
+ values will be interpreted as strings.
+
+ Examples:
+
+ .. code-block:: python
+
+ [define('BUILD_SHARED_LIBS', True),
+ define('CMAKE_CXX_STANDARD', 14),
+ define('swr', ['avx', 'avx2'])]
+
+ will generate the following configuration options:
+
+ .. code-block:: console
+
+ ["-DBUILD_SHARED_LIBS:BOOL=ON",
+ "-DCMAKE_CXX_STANDARD:STRING=14",
+ "-DSWR:STRING=avx;avx2]
+
+ """
+ # Create a list of pairs. Each pair includes a configuration
+ # option and whether or not that option is activated
+ if isinstance(value, bool):
+ kind = 'BOOL'
+ value = "ON" if value else "OFF"
+ else:
+ kind = 'STRING'
+ if isinstance(value, (list, tuple)):
+ value = ";".join(str(v) for v in value)
+ else:
+ value = str(value)
+
+ return "".join(["-D", cmake_var, ":", kind, "=", value])
+
+ def define_from_variant(self, cmake_var, variant=None):
+ """Return a CMake command line argument from the given variant's value.
+
+ The optional ``variant`` argument defaults to the lower-case transform
+ of ``cmake_var``.
+
+ This utility function is similar to
+ :py:meth:`~.AutotoolsPackage.with_or_without`.
+
+ Examples:
+
+ Given a package with:
+
+ .. code-block:: python
+
+ variant('cxxstd', default='11', values=('11', '14'),
+ multi=False, description='')
+ variant('shared', default=True, description='')
+ variant('swr', values=any_combination_of('avx', 'avx2'),
+ description='')
+
+ calling this function like:
+
+ .. code-block:: python
+
+ [define_from_variant('BUILD_SHARED_LIBS', 'shared'),
+ define_from_variant('CMAKE_CXX_STANDARD', 'cxxstd'),
+ define_from_variant('SWR')]
+
+ will generate the following configuration options:
+
+ .. code-block:: console
+
+ ["-DBUILD_SHARED_LIBS:BOOL=ON",
+ "-DCMAKE_CXX_STANDARD:STRING=14",
+ "-DSWR:STRING=avx;avx2]
+
+ for ``<spec-name> cxxstd=14 +shared swr=avx,avx2``
+ """
+
+ if variant is None:
+ variant = cmake_var.lower()
+
+ if variant not in self.variants:
+ raise KeyError(
+ '"{0}" is not a variant of "{1}"'.format(variant, self.name))
+
+ value = self.spec.variants[variant].value
+ if isinstance(value, (tuple, list)):
+ # Sort multi-valued variants for reproducibility
+ value = sorted(value)
+
+ return self.define(cmake_var, value)
+
def flags_to_build_system_args(self, flags):
"""Produces a list of all command line arguments to pass the specified
compiler flags to cmake. Note CMAKE does not have a cppflags option,
diff --git a/lib/spack/spack/build_systems/cuda.py b/lib/spack/spack/build_systems/cuda.py
index fc96cffe60..50a7002dbb 100644
--- a/lib/spack/spack/build_systems/cuda.py
+++ b/lib/spack/spack/build_systems/cuda.py
@@ -13,39 +13,65 @@ class CudaPackage(PackageBase):
"""Auxiliary class which contains CUDA variant, dependencies and conflicts
and is meant to unify and facilitate its usage.
"""
+ maintainers = ['ax3l', 'svenevs']
- # FIXME: keep cuda and cuda_arch separate to make usage easier untill
+ # https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-feature-list
+ # https://developer.nvidia.com/cuda-gpus
+ # https://en.wikipedia.org/wiki/CUDA#GPUs_supported
+ cuda_arch_values = [
+ '10', '11', '12', '13',
+ '20', '21',
+ '30', '32', '35', '37',
+ '50', '52', '53',
+ '60', '61', '62',
+ '70', '72', '75',
+ ]
+
+ # FIXME: keep cuda and cuda_arch separate to make usage easier until
# Spack has depends_on(cuda, when='cuda_arch!=None') or alike
variant('cuda', default=False,
description='Build with CUDA')
- # see http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-feature-list
- # https://developer.nvidia.com/cuda-gpus
+
variant('cuda_arch',
description='CUDA architecture',
- values=spack.variant.any_combination_of(
- '20', '30', '32', '35', '50', '52', '53', '60', '61',
- '62', '70', '72', '75'
- ))
+ values=spack.variant.any_combination_of(*cuda_arch_values))
- # see http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#nvcc-examples
- # and http://llvm.org/docs/CompileCudaWithLLVM.html#compiling-cuda-code
+ # https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#nvcc-examples
+ # https://llvm.org/docs/CompileCudaWithLLVM.html#compiling-cuda-code
@staticmethod
def cuda_flags(arch_list):
return [('--generate-code arch=compute_{0},code=sm_{0} '
'--generate-code arch=compute_{0},code=compute_{0}').format(s)
for s in arch_list]
- depends_on("cuda@7:", when='+cuda')
+ depends_on('cuda', when='+cuda')
# CUDA version vs Architecture
- depends_on("cuda@8:", when='cuda_arch=60')
- depends_on("cuda@8:", when='cuda_arch=61')
- depends_on("cuda@8:", when='cuda_arch=62')
- depends_on("cuda@9:", when='cuda_arch=70')
- depends_on("cuda@9:", when='cuda_arch=72')
- depends_on("cuda@10:", when='cuda_arch=75')
+ # https://en.wikipedia.org/wiki/CUDA#GPUs_supported
+ depends_on('cuda@:6.0', when='cuda_arch=10')
+ depends_on('cuda@:6.5', when='cuda_arch=11')
+ depends_on('cuda@2.1:6.5', when='cuda_arch=12')
+ depends_on('cuda@2.1:6.5', when='cuda_arch=13')
+
+ depends_on('cuda@3.0:8.0', when='cuda_arch=20')
+ depends_on('cuda@3.2:8.0', when='cuda_arch=21')
+
+ depends_on('cuda@5.0:10.2', when='cuda_arch=30')
+ depends_on('cuda@5.0:10.2', when='cuda_arch=32')
+ depends_on('cuda@5.0:10.2', when='cuda_arch=35')
+ depends_on('cuda@6.5:10.2', when='cuda_arch=37')
+
+ depends_on('cuda@6.0:', when='cuda_arch=50')
+ depends_on('cuda@6.5:', when='cuda_arch=52')
+ depends_on('cuda@6.5:', when='cuda_arch=53')
+
+ depends_on('cuda@8.0:', when='cuda_arch=60')
+ depends_on('cuda@8.0:', when='cuda_arch=61')
+ depends_on('cuda@8.0:', when='cuda_arch=62')
- depends_on('cuda@:8', when='cuda_arch=20')
+ depends_on('cuda@9.0:', when='cuda_arch=70')
+ depends_on('cuda@9.0:', when='cuda_arch=72')
+ depends_on('cuda@10.0:', when='cuda_arch=75')
# There are at least three cases to be aware of for compiler conflicts
# 1. Linux x86_64
@@ -130,18 +156,8 @@ class CudaPackage(PackageBase):
# `clang-apple@x.y.z as a possible fix.
# Compiler conflicts will be eventual taken from here:
# https://docs.nvidia.com/cuda/cuda-installation-guide-mac-os-x/index.html#abstract
+ conflicts('platform=darwin', when='+cuda ^cuda@11.0:')
# Make sure cuda_arch can not be used without +cuda
- conflicts('~cuda', when='cuda_arch=20')
- conflicts('~cuda', when='cuda_arch=30')
- conflicts('~cuda', when='cuda_arch=32')
- conflicts('~cuda', when='cuda_arch=35')
- conflicts('~cuda', when='cuda_arch=50')
- conflicts('~cuda', when='cuda_arch=52')
- conflicts('~cuda', when='cuda_arch=53')
- conflicts('~cuda', when='cuda_arch=60')
- conflicts('~cuda', when='cuda_arch=61')
- conflicts('~cuda', when='cuda_arch=62')
- conflicts('~cuda', when='cuda_arch=70')
- conflicts('~cuda', when='cuda_arch=72')
- conflicts('~cuda', when='cuda_arch=75')
+ for value in cuda_arch_values:
+ conflicts('~cuda', when='cuda_arch=' + value)
diff --git a/lib/spack/spack/build_systems/sip.py b/lib/spack/spack/build_systems/sip.py
index 314f91d5d2..f814ef1837 100644
--- a/lib/spack/spack/build_systems/sip.py
+++ b/lib/spack/spack/build_systems/sip.py
@@ -5,9 +5,10 @@
import inspect
-from llnl.util.filesystem import working_dir
-from spack.directives import depends_on, extends, resource
-from spack.package import PackageBase, run_before, run_after
+from llnl.util.filesystem import working_dir, join_path
+from spack.directives import depends_on, extends
+from spack.package import PackageBase, run_after
+import os
class SIPPackage(PackageBase):
@@ -40,33 +41,12 @@ class SIPPackage(PackageBase):
extends('python')
depends_on('qt')
-
- resource(name='sip',
- url='https://www.riverbankcomputing.com/static/Downloads/sip/4.19.18/sip-4.19.18.tar.gz',
- sha256='c0bd863800ed9b15dcad477c4017cdb73fa805c25908b0240564add74d697e1e',
- destination='.')
+ depends_on('py-sip')
def python(self, *args, **kwargs):
"""The python ``Executable``."""
inspect.getmodule(self).python(*args, **kwargs)
- @run_before('configure')
- def install_sip(self):
- args = [
- '--sip-module={0}'.format(self.sip_module),
- '--bindir={0}'.format(self.prefix.bin),
- '--destdir={0}'.format(inspect.getmodule(self).site_packages_dir),
- '--incdir={0}'.format(inspect.getmodule(self).python_include_dir),
- '--sipdir={0}'.format(self.prefix.share.sip),
- '--stubsdir={0}'.format(inspect.getmodule(self).site_packages_dir),
- ]
-
- with working_dir('sip-4.19.18'):
- self.python('configure.py', *args)
-
- inspect.getmodule(self).make()
- inspect.getmodule(self).make('install')
-
def configure_file(self):
"""Returns the name of the configure file to use."""
return 'configure.py'
@@ -77,12 +57,15 @@ class SIPPackage(PackageBase):
args = self.configure_args()
+ python_include_dir = 'python' + str(spec['python'].version.up_to(2))
+
args.extend([
'--verbose',
'--confirm-license',
'--qmake', spec['qt'].prefix.bin.qmake,
- '--sip', prefix.bin.sip,
- '--sip-incdir', inspect.getmodule(self).python_include_dir,
+ '--sip', spec['py-sip'].prefix.bin.sip,
+ '--sip-incdir', join_path(spec['py-sip'].prefix.include,
+ python_include_dir),
'--bindir', prefix.bin,
'--destdir', inspect.getmodule(self).site_packages_dir,
])
@@ -131,3 +114,14 @@ class SIPPackage(PackageBase):
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
+
+ @run_after('install')
+ def extend_path_setup(self):
+ # See github issue #14121 and PR #15297
+ module = self.spec['py-sip'].variants['module'].value
+ if module != 'sip':
+ module = module.split('.')[0]
+ with working_dir(inspect.getmodule(self).site_packages_dir):
+ with open(os.path.join(module, '__init__.py'), 'a') as f:
+ f.write('from pkgutil import extend_path\n')
+ f.write('__path__ = extend_path(__path__, __name__)\n')
diff --git a/lib/spack/spack/caches.py b/lib/spack/spack/caches.py
index 98fa8d5795..49624c06b2 100644
--- a/lib/spack/spack/caches.py
+++ b/lib/spack/spack/caches.py
@@ -50,8 +50,9 @@ def _fetch_cache():
class MirrorCache(object):
- def __init__(self, root):
+ def __init__(self, root, skip_unstable_versions):
self.root = os.path.abspath(root)
+ self.skip_unstable_versions = skip_unstable_versions
def store(self, fetcher, relative_dest):
"""Fetch and relocate the fetcher's target into our mirror cache."""
@@ -84,5 +85,3 @@ class MirrorCache(object):
#: Spack's local cache for downloaded source archives
fetch_cache = llnl.util.lang.Singleton(_fetch_cache)
-
-mirror_cache = None
diff --git a/lib/spack/spack/ci.py b/lib/spack/spack/ci.py
index ed06524073..cbdfccb8bf 100644
--- a/lib/spack/spack/ci.py
+++ b/lib/spack/spack/ci.py
@@ -947,8 +947,9 @@ def read_cdashid_from_mirror(spec, mirror_url):
def push_mirror_contents(env, spec, yaml_path, mirror_url, build_id):
if mirror_url:
tty.debug('Creating buildcache')
- buildcache._createtarball(env, yaml_path, None, mirror_url, None,
- True, True, False, False, True, False)
+ buildcache._createtarball(env, yaml_path, None, True, False,
+ mirror_url, None, True, False, False, True,
+ False)
if build_id:
tty.debug('Writing cdashid ({0}) to remote mirror: {1}'.format(
build_id, mirror_url))
diff --git a/lib/spack/spack/cmd/buildcache.py b/lib/spack/spack/cmd/buildcache.py
index 392984f852..35e735cdf1 100644
--- a/lib/spack/spack/cmd/buildcache.py
+++ b/lib/spack/spack/cmd/buildcache.py
@@ -52,16 +52,35 @@ def setup_parser(subparser):
create.add_argument('-k', '--key', metavar='key',
type=str, default=None,
help="Key for signing.")
- create.add_argument('-d', '--directory', metavar='directory',
- type=str, default='.',
- help="directory in which to save the tarballs.")
+ output = create.add_mutually_exclusive_group(required=True)
+ output.add_argument('-d', '--directory',
+ metavar='directory',
+ type=str,
+ help="local directory where " +
+ "buildcaches will be written.")
+ output.add_argument('-m', '--mirror-name',
+ metavar='mirror-name',
+ type=str,
+ help="name of the mirror where " +
+ "buildcaches will be written.")
+ output.add_argument('--mirror-url',
+ metavar='mirror-url',
+ type=str,
+ help="URL of the mirror where " +
+ "buildcaches will be written.")
create.add_argument('--no-rebuild-index', action='store_true',
default=False, help="skip rebuilding index after " +
"building package(s)")
create.add_argument('-y', '--spec-yaml', default=None,
help='Create buildcache entry for spec from yaml file')
- create.add_argument('--no-deps', action='store_true', default='false',
- help='Create buildcache entry wo/ dependencies')
+ create.add_argument('--only', default='package,dependencies',
+ dest='things_to_install',
+ choices=['package', 'dependencies'],
+ help=('Select the buildcache mode. the default is to'
+ ' build a cache for the package along with all'
+ ' its dependencies. Alternatively, one can'
+ ' decide to build a cache for only the package'
+ ' or only the dependencies'))
arguments.add_common_arguments(create, ['specs'])
create.set_defaults(func=createtarball)
@@ -76,6 +95,10 @@ def setup_parser(subparser):
install.add_argument('-u', '--unsigned', action='store_true',
help="install unsigned buildcache" +
" tarballs for testing")
+ install.add_argument('-o', '--otherarch', action='store_true',
+ help="install specs from other architectures" +
+ " instead of default platform and OS")
+
arguments.add_common_arguments(install, ['specs'])
install.set_defaults(func=installtarball)
@@ -252,7 +275,8 @@ def find_matching_specs(pkgs, allow_multiple_matches=False, env=None):
return specs_from_cli
-def match_downloaded_specs(pkgs, allow_multiple_matches=False, force=False):
+def match_downloaded_specs(pkgs, allow_multiple_matches=False, force=False,
+ other_arch=False):
"""Returns a list of specs matching the not necessarily
concretized specs given from cli
@@ -266,7 +290,7 @@ def match_downloaded_specs(pkgs, allow_multiple_matches=False, force=False):
# List of specs that match expressions given via command line
specs_from_cli = []
has_errors = False
- allarch = False
+ allarch = other_arch
specs = bindist.get_specs(force, allarch)
for pkg in pkgs:
matches = []
@@ -299,8 +323,9 @@ def match_downloaded_specs(pkgs, allow_multiple_matches=False, force=False):
return specs_from_cli
-def _createtarball(env, spec_yaml, packages, directory, key, no_deps, force,
- rel, unsigned, allow_root, no_rebuild_index):
+def _createtarball(env, spec_yaml, packages, add_spec, add_deps,
+ output_location, key, force, rel, unsigned, allow_root,
+ no_rebuild_index):
if spec_yaml:
packages = set()
with open(spec_yaml, 'r') as fd:
@@ -320,13 +345,12 @@ def _createtarball(env, spec_yaml, packages, directory, key, no_deps, force,
pkgs = set(packages)
specs = set()
- outdir = '.'
- if directory:
- outdir = directory
-
- mirror = spack.mirror.MirrorCollection().lookup(outdir)
+ mirror = spack.mirror.MirrorCollection().lookup(output_location)
outdir = url_util.format(mirror.push_url)
+ msg = 'Buildcache files will be output to %s/build_cache' % outdir
+ tty.msg(msg)
+
signkey = None
if key:
signkey = key
@@ -342,14 +366,23 @@ def _createtarball(env, spec_yaml, packages, directory, key, no_deps, force,
tty.debug('skipping external or virtual spec %s' %
match.format())
else:
- tty.debug('adding matching spec %s' % match.format())
- specs.add(match)
- if no_deps is True:
+ if add_spec:
+ tty.debug('adding matching spec %s' % match.format())
+ specs.add(match)
+ else:
+ tty.debug('skipping matching spec %s' % match.format())
+
+ if not add_deps:
continue
+
tty.debug('recursing dependencies')
for d, node in match.traverse(order='post',
depth=True,
deptype=('link', 'run')):
+ # skip root, since it's handled above
+ if d == 0:
+ continue
+
if node.external or node.virtual:
tty.debug('skipping external or virtual dependency %s' %
node.format())
@@ -360,14 +393,10 @@ def _createtarball(env, spec_yaml, packages, directory, key, no_deps, force,
tty.debug('writing tarballs to %s/build_cache' % outdir)
for spec in specs:
- tty.msg('creating binary cache file for package %s ' % spec.format())
- try:
- bindist.build_tarball(spec, outdir, force, rel,
- unsigned, allow_root, signkey,
- not no_rebuild_index)
- except Exception as e:
- tty.warn('%s' % e)
- pass
+ tty.debug('creating binary cache file for package %s ' % spec.format())
+ bindist.build_tarball(spec, outdir, force, rel,
+ unsigned, allow_root, signkey,
+ not no_rebuild_index)
def createtarball(args):
@@ -376,9 +405,47 @@ def createtarball(args):
# restrict matching to current environment if one is active
env = ev.get_env(args, 'buildcache create')
- _createtarball(env, args.spec_yaml, args.specs, args.directory,
- args.key, args.no_deps, args.force, args.rel, args.unsigned,
- args.allow_root, args.no_rebuild_index)
+ output_location = None
+ if args.directory:
+ output_location = args.directory
+
+ # User meant to provide a path to a local directory.
+ # Ensure that they did not accidentally pass a URL.
+ scheme = url_util.parse(output_location, scheme='<missing>').scheme
+ if scheme != '<missing>':
+ raise ValueError(
+ '"--directory" expected a local path; got a URL, instead')
+
+ # User meant to provide a path to a local directory.
+ # Ensure that the mirror lookup does not mistake it for a named mirror.
+ output_location = 'file://' + output_location
+
+ elif args.mirror_name:
+ output_location = args.mirror_name
+
+ # User meant to provide the name of a preconfigured mirror.
+ # Ensure that the mirror lookup actually returns a named mirror.
+ result = spack.mirror.MirrorCollection().lookup(output_location)
+ if result.name == "<unnamed>":
+ raise ValueError(
+ 'no configured mirror named "{name}"'.format(
+ name=output_location))
+
+ elif args.mirror_url:
+ output_location = args.mirror_url
+
+ # User meant to provide a URL for an anonymous mirror.
+ # Ensure that they actually provided a URL.
+ scheme = url_util.parse(output_location, scheme='<missing>').scheme
+ if scheme == '<missing>':
+ raise ValueError(
+ '"{url}" is not a valid URL'.format(url=output_location))
+ add_spec = ('package' in args.things_to_install)
+ add_deps = ('dependencies' in args.things_to_install)
+
+ _createtarball(env, args.spec_yaml, args.specs, add_spec, add_deps,
+ output_location, args.key, args.force, args.rel,
+ args.unsigned, args.allow_root, args.no_rebuild_index)
def installtarball(args):
@@ -387,7 +454,8 @@ def installtarball(args):
tty.die("build cache file installation requires" +
" at least one package spec argument")
pkgs = set(args.specs)
- matches = match_downloaded_specs(pkgs, args.multiple, args.force)
+ matches = match_downloaded_specs(pkgs, args.multiple, args.force,
+ args.otherarch)
for match in matches:
install_tarball(match, args)
diff --git a/lib/spack/spack/cmd/checksum.py b/lib/spack/spack/cmd/checksum.py
index 343915868c..eaeaf5337f 100644
--- a/lib/spack/spack/cmd/checksum.py
+++ b/lib/spack/spack/cmd/checksum.py
@@ -56,7 +56,8 @@ def checksum(parser, args):
tty.die("Could not find any versions for {0}".format(pkg.name))
version_lines = spack.stage.get_checksums_for_versions(
- url_dict, pkg.name, keep_stage=args.keep_stage)
+ url_dict, pkg.name, keep_stage=args.keep_stage,
+ fetch_options=pkg.fetch_options)
print()
print(version_lines)
diff --git a/lib/spack/spack/cmd/create.py b/lib/spack/spack/cmd/create.py
index f9b7a382ea..304b531b49 100644
--- a/lib/spack/spack/cmd/create.py
+++ b/lib/spack/spack/cmd/create.py
@@ -245,7 +245,9 @@ class PythonPackageTemplate(PackageTemplate):
base_class_name = 'PythonPackage'
dependencies = """\
- # FIXME: Add dependencies if required.
+ # FIXME: Add dependencies if required. Only add the python dependency
+ # if you need specific versions. A generic python dependency is
+ # added implicity by the PythonPackage class.
# depends_on('python@2.X:2.Y,3.Z:', type=('build', 'run'))
# depends_on('py-setuptools', type='build')
# depends_on('py-foo', type=('build', 'run'))"""
diff --git a/lib/spack/spack/cmd/dependencies.py b/lib/spack/spack/cmd/dependencies.py
index e65e050bfa..7f390341ef 100644
--- a/lib/spack/spack/cmd/dependencies.py
+++ b/lib/spack/spack/cmd/dependencies.py
@@ -9,6 +9,7 @@ from llnl.util.tty.colify import colify
import spack.cmd
import spack.cmd.common.arguments as arguments
import spack.environment as ev
+import spack.package
import spack.repo
import spack.store
@@ -52,22 +53,15 @@ def dependencies(parser, args):
else:
spec = specs[0]
-
- if not spec.virtual:
- packages = [spec.package]
- else:
- packages = [
- spack.repo.get(s.name)
- for s in spack.repo.path.providers_for(spec)]
-
- dependencies = set()
- for pkg in packages:
- possible = pkg.possible_dependencies(
- args.transitive, args.expand_virtuals, deptype=args.deptype)
- dependencies.update(possible)
+ dependencies = spack.package.possible_dependencies(
+ spec,
+ transitive=args.transitive,
+ expand_virtuals=args.expand_virtuals,
+ deptype=args.deptype
+ )
if spec.name in dependencies:
- dependencies.remove(spec.name)
+ del dependencies[spec.name]
if dependencies:
colify(sorted(dependencies))
diff --git a/lib/spack/spack/cmd/dependents.py b/lib/spack/spack/cmd/dependents.py
index e60733f589..89fd15ffda 100644
--- a/lib/spack/spack/cmd/dependents.py
+++ b/lib/spack/spack/cmd/dependents.py
@@ -30,7 +30,7 @@ def setup_parser(subparser):
def inverted_dependencies():
"""Iterate through all packages and return a dictionary mapping package
- names to possible dependnecies.
+ names to possible dependencies.
Virtual packages are included as sources, so that you can query
dependents of, e.g., `mpi`, but virtuals are not included as
diff --git a/lib/spack/spack/cmd/load.py b/lib/spack/spack/cmd/load.py
index 09f3fd31ee..9a00ad1c58 100644
--- a/lib/spack/spack/cmd/load.py
+++ b/lib/spack/spack/cmd/load.py
@@ -51,6 +51,7 @@ def load(parser, args):
for spec in spack.cmd.parse_specs(args.specs)]
if not args.shell:
+ specs_string = ' '.join(args.specs)
msg = [
"This command works best with Spack's shell support",
""
@@ -58,8 +59,8 @@ def load(parser, args):
'Or, if you want to use `spack load` without initializing',
'shell support, you can run one of these:',
'',
- ' eval `spack load --sh %s` # for bash/sh' % args.specs,
- ' eval `spack load --csh %s` # for csh/tcsh' % args.specs,
+ ' eval `spack load --sh %s` # for bash/sh' % specs_string,
+ ' eval `spack load --csh %s` # for csh/tcsh' % specs_string,
]
tty.msg(*msg)
return 1
diff --git a/lib/spack/spack/cmd/mirror.py b/lib/spack/spack/cmd/mirror.py
index 5206927895..1473550a56 100644
--- a/lib/spack/spack/cmd/mirror.py
+++ b/lib/spack/spack/cmd/mirror.py
@@ -45,7 +45,10 @@ def setup_parser(subparser):
" (this requires significant time and space)")
create_parser.add_argument(
'-f', '--file', help="file with specs of packages to put in mirror")
-
+ create_parser.add_argument(
+ '--skip-unstable-versions', action='store_true',
+ help="don't cache versions unless they identify a stable (unchanging)"
+ " source code")
create_parser.add_argument(
'-D', '--dependencies', action='store_true',
help="also fetch all dependencies")
@@ -308,7 +311,8 @@ def mirror_create(args):
existed = web_util.url_exists(directory)
# Actually do the work to create the mirror
- present, mirrored, error = spack.mirror.create(directory, mirror_specs)
+ present, mirrored, error = spack.mirror.create(
+ directory, mirror_specs, args.skip_unstable_versions)
p, m, e = len(present), len(mirrored), len(error)
verb = "updated" if existed else "created"
diff --git a/lib/spack/spack/config.py b/lib/spack/spack/config.py
index b1c0ad73c7..445d62d2ab 100644
--- a/lib/spack/spack/config.py
+++ b/lib/spack/spack/config.py
@@ -97,6 +97,7 @@ configuration_paths = (
config_defaults = {
'config': {
'debug': False,
+ 'connect_timeout': 10,
'verify_ssl': True,
'checksum': True,
'dirty': False,
@@ -279,6 +280,7 @@ class InternalConfigScope(ConfigScope):
self.sections = syaml.syaml_dict()
if data:
+ data = InternalConfigScope._process_dict_keyname_overrides(data)
for section in data:
dsec = data[section]
validate({section: dsec}, section_schemas[section])
@@ -305,6 +307,25 @@ class InternalConfigScope(ConfigScope):
def __repr__(self):
return '<InternalConfigScope: %s>' % self.name
+ @staticmethod
+ def _process_dict_keyname_overrides(data):
+ """Turn a trailing `:' in a key name into an override attribute."""
+ result = {}
+ for sk, sv in iteritems(data):
+ if sk.endswith(':'):
+ key = syaml.syaml_str(sk[:-1])
+ key.override = True
+ else:
+ key = sk
+
+ if isinstance(sv, dict):
+ result[key]\
+ = InternalConfigScope._process_dict_keyname_overrides(sv)
+ else:
+ result[key] = copy.copy(sv)
+
+ return result
+
class Configuration(object):
"""A full Spack configuration, from a hierarchy of config files.
@@ -504,14 +525,14 @@ class Configuration(object):
Accepts the path syntax described in ``get()``.
"""
- section, _, rest = path.partition(':')
+ parts = _process_config_path(path)
+ section = parts.pop(0)
- if not rest:
+ if not parts:
self.update_config(section, value, scope=scope)
else:
section_data = self.get_config(section, scope=scope)
- parts = rest.split(':')
data = section_data
while len(parts) > 1:
key = parts.pop(0)
@@ -611,7 +632,7 @@ def _config():
"""Singleton Configuration instance.
This constructs one instance associated with this module and returns
- it. It is bundled inside a function so that configuratoin can be
+ it. It is bundled inside a function so that configuration can be
initialized lazily.
Return:
@@ -762,17 +783,12 @@ def _merge_yaml(dest, source):
Config file authors can optionally end any attribute in a dict
with `::` instead of `:`, and the key will override that of the
parent instead of merging.
-
"""
def they_are(t):
return isinstance(dest, t) and isinstance(source, t)
- # If both are None, handle specially and return None.
- if source is None and dest is None:
- return None
-
# If source is None, overwrite with source.
- elif source is None:
+ if source is None:
return None
# Source list is prepended (for precedence)
@@ -798,8 +814,9 @@ def _merge_yaml(dest, source):
# to copy mark information on source keys to dest.
key_marks[sk] = sk
- # ensure that keys are marked in the destination. the key_marks dict
- # ensures we can get the actual source key objects from dest keys
+ # ensure that keys are marked in the destination. The
+ # key_marks dict ensures we can get the actual source key
+ # objects from dest keys
for dk in list(dest.keys()):
if dk in key_marks and syaml.markable(dk):
syaml.mark(dk, key_marks[dk])
@@ -811,9 +828,34 @@ def _merge_yaml(dest, source):
return dest
- # In any other case, overwrite with a copy of the source value.
- else:
- return copy.copy(source)
+ # If we reach here source and dest are either different types or are
+ # not both lists or dicts: replace with source.
+ return copy.copy(source)
+
+
+#
+# Process a path argument to config.set() that may contain overrides ('::' or
+# trailing ':')
+#
+def _process_config_path(path):
+ result = []
+ if path.startswith(':'):
+ raise syaml.SpackYAMLError("Illegal leading `:' in path `{0}'".
+ format(path), '')
+ seen_override_in_path = False
+ while path:
+ front, sep, path = path.partition(':')
+ if (sep and not path) or path.startswith(':'):
+ if seen_override_in_path:
+ raise syaml.SpackYAMLError("Meaningless second override"
+ " indicator `::' in path `{0}'".
+ format(path), '')
+ path = path.lstrip(':')
+ front = syaml.syaml_str(front)
+ front.override = True
+ seen_override_in_path = True
+ result.append(front)
+ return result
#
diff --git a/lib/spack/spack/database.py b/lib/spack/spack/database.py
index f3c88a75c3..ca9ed67fb5 100644
--- a/lib/spack/spack/database.py
+++ b/lib/spack/spack/database.py
@@ -18,32 +18,33 @@ Prior to the implementation of this store, a directory layout served
as the authoritative database of packages in Spack. This module
provides a cache and a sanity checking mechanism for what is in the
filesystem.
-
"""
+
+import contextlib
import datetime
-import time
import os
-import sys
import socket
-import contextlib
-from six import string_types
-from six import iteritems
-
-from ruamel.yaml.error import MarkedYAMLError, YAMLError
+import sys
+import time
+try:
+ import uuid
+ _use_uuid = True
+except ImportError:
+ _use_uuid = False
+ pass
import llnl.util.tty as tty
-from llnl.util.filesystem import mkdirp
-
-import spack.store
+import six
import spack.repo
import spack.spec
+import spack.store
import spack.util.lock as lk
-import spack.util.spack_yaml as syaml
import spack.util.spack_json as sjson
-from spack.filesystem_view import YamlFilesystemView
-from spack.util.crypto import bit_length
+from llnl.util.filesystem import mkdirp
from spack.directory_layout import DirectoryLayoutError
from spack.error import SpackError
+from spack.filesystem_view import YamlFilesystemView
+from spack.util.crypto import bit_length
from spack.version import Version
# TODO: Provide an API automatically retyring a build after detecting and
@@ -284,29 +285,22 @@ class Database(object):
exist. This is the ``db_dir``.
The Database will attempt to read an ``index.json`` file in
- ``db_dir``. If it does not find one, it will fall back to read
- an ``index.yaml`` if one is present. If that does not exist, it
- will create a database when needed by scanning the entire
- Database root for ``spec.yaml`` files according to Spack's
- ``DirectoryLayout``.
+ ``db_dir``. If that does not exist, it will create a database
+ when needed by scanning the entire Database root for ``spec.yaml``
+ files according to Spack's ``DirectoryLayout``.
Caller may optionally provide a custom ``db_dir`` parameter
- where data will be stored. This is intended to be used for
+ where data will be stored. This is intended to be used for
testing the Database class.
-
"""
self.root = root
- if db_dir is None:
- # If the db_dir is not provided, default to within the db root.
- self._db_dir = os.path.join(self.root, _db_dirname)
- else:
- # Allow customizing the database directory location for testing.
- self._db_dir = db_dir
+ # If the db_dir is not provided, default to within the db root.
+ self._db_dir = db_dir or os.path.join(self.root, _db_dirname)
# Set up layout of database files within the db dir
- self._old_yaml_index_path = os.path.join(self._db_dir, 'index.yaml')
self._index_path = os.path.join(self._db_dir, 'index.json')
+ self._verifier_path = os.path.join(self._db_dir, 'index_verifier')
self._lock_path = os.path.join(self._db_dir, 'lock')
# This is for other classes to use to lock prefix directories.
@@ -328,6 +322,7 @@ class Database(object):
mkdirp(self._failure_dir)
self.is_upstream = is_upstream
+ self.last_seen_verifier = ''
# initialize rest of state.
self.db_lock_timeout = (
@@ -554,7 +549,8 @@ class Database(object):
prefix_lock.release_write()
def _write_to_file(self, stream):
- """Write out the databsae to a JSON file.
+ """Write out the database in JSON format to the stream passed
+ as argument.
This function does not do any locking or transactions.
"""
@@ -576,9 +572,8 @@ class Database(object):
try:
sjson.dump(database, stream)
- except YAMLError as e:
- raise syaml.SpackYAMLError(
- "error writing YAML database:", str(e))
+ except (TypeError, ValueError) as e:
+ raise sjson.SpackJSONError("error writing JSON database:", str(e))
def _read_spec_from_dict(self, hash_key, installs):
"""Recursively construct a spec from a hash in a YAML database.
@@ -649,28 +644,15 @@ class Database(object):
spec._add_dependency(child, dtypes)
- def _read_from_file(self, stream, format='json'):
- """
- Fill database from file, do not maintain old data
- Translate the spec portions from node-dict form to spec form
+ def _read_from_file(self, filename):
+ """Fill database from file, do not maintain old data.
+ Translate the spec portions from node-dict form to spec form.
Does not do any locking.
"""
- if format.lower() == 'json':
- load = sjson.load
- elif format.lower() == 'yaml':
- load = syaml.load
- else:
- raise ValueError("Invalid database format: %s" % format)
-
try:
- if isinstance(stream, string_types):
- with open(stream, 'r') as f:
- fdata = load(f)
- else:
- fdata = load(stream)
- except MarkedYAMLError as e:
- raise syaml.SpackYAMLError("error parsing YAML database:", str(e))
+ with open(filename, 'r') as f:
+ fdata = sjson.load(f)
except Exception as e:
raise CorruptDatabaseError("error parsing database:", str(e))
@@ -682,12 +664,12 @@ class Database(object):
raise CorruptDatabaseError(
"Spack database is corrupt: %s" % msg, self._index_path)
- check('database' in fdata, "No 'database' attribute in YAML.")
+ check('database' in fdata, "no 'database' attribute in JSON DB.")
# High-level file checks
db = fdata['database']
- check('installs' in db, "No 'installs' in YAML DB.")
- check('version' in db, "No 'version' in YAML DB.")
+ check('installs' in db, "no 'installs' in JSON DB.")
+ check('version' in db, "no 'version' in JSON DB.")
installs = db['installs']
@@ -763,7 +745,6 @@ class Database(object):
"""Build database index from scratch based on a directory layout.
Locks the DB if it isn't locked already.
-
"""
if self.is_upstream:
raise UpstreamDatabaseLockingError(
@@ -927,7 +908,6 @@ class Database(object):
after the start of the next transaction, when it read from disk again.
This routine does no locking.
-
"""
# Do not write if exceptions were raised
if type is not None:
@@ -941,6 +921,11 @@ class Database(object):
with open(temp_file, 'w') as f:
self._write_to_file(f)
os.rename(temp_file, self._index_path)
+ if _use_uuid:
+ with open(self._verifier_path, 'w') as f:
+ new_verifier = str(uuid.uuid4())
+ f.write(new_verifier)
+ self.last_seen_verifier = new_verifier
except BaseException as e:
tty.debug(e)
# Clean up temp file if something goes wrong.
@@ -952,35 +937,33 @@ class Database(object):
"""Re-read Database from the data in the set location.
This does no locking, with one exception: it will automatically
- migrate an index.yaml to an index.json if possible. This requires
- taking a write lock.
-
+ try to regenerate a missing DB if local. This requires taking a
+ write lock.
"""
if os.path.isfile(self._index_path):
- # Read from JSON file if a JSON database exists
- self._read_from_file(self._index_path, format='json')
-
- elif os.path.isfile(self._old_yaml_index_path):
- if (not self.is_upstream) and os.access(
- self._db_dir, os.R_OK | os.W_OK):
- # if we can write, then read AND write a JSON file.
- self._read_from_file(self._old_yaml_index_path, format='yaml')
- with lk.WriteTransaction(self.lock):
- self._write(None, None, None)
- else:
- # Read chck for a YAML file if we can't find JSON.
- self._read_from_file(self._old_yaml_index_path, format='yaml')
+ current_verifier = ''
+ if _use_uuid:
+ try:
+ with open(self._verifier_path, 'r') as f:
+ current_verifier = f.read()
+ except BaseException:
+ pass
+ if ((current_verifier != self.last_seen_verifier) or
+ (current_verifier == '')):
+ self.last_seen_verifier = current_verifier
+ # Read from file if a database exists
+ self._read_from_file(self._index_path)
+ return
+ elif self.is_upstream:
+ raise UpstreamDatabaseLockingError(
+ "No database index file is present, and upstream"
+ " databases cannot generate an index file")
- else:
- if self.is_upstream:
- raise UpstreamDatabaseLockingError(
- "No database index file is present, and upstream"
- " databases cannot generate an index file")
- # The file doesn't exist, try to traverse the directory.
- # reindex() takes its own write lock, so no lock here.
- with lk.WriteTransaction(self.lock):
- self._write(None, None, None)
- self.reindex(spack.store.layout)
+ # The file doesn't exist, try to traverse the directory.
+ # reindex() takes its own write lock, so no lock here.
+ with lk.WriteTransaction(self.lock):
+ self._write(None, None, None)
+ self.reindex(spack.store.layout)
def _add(
self,
@@ -1060,7 +1043,9 @@ class Database(object):
)
# Connect dependencies from the DB to the new copy.
- for name, dep in iteritems(spec.dependencies_dict(_tracked_deps)):
+ for name, dep in six.iteritems(
+ spec.dependencies_dict(_tracked_deps)
+ ):
dkey = dep.spec.dag_hash()
upstream, record = self.query_by_spec_hash(dkey)
new_spec._add_dependency(record.spec, dep.deptypes)
@@ -1133,8 +1118,7 @@ class Database(object):
rec.ref_count += 1
def _remove(self, spec):
- """Non-locking version of remove(); does real work.
- """
+ """Non-locking version of remove(); does real work."""
key = self._get_matching_spec_key(spec)
rec = self._data[key]
@@ -1378,7 +1362,7 @@ class Database(object):
# TODO: handling of hashes restriction is not particularly elegant.
hash_key = query_spec.dag_hash()
if (hash_key in self._data and
- (not hashes or hash_key in hashes)):
+ (not hashes or hash_key in hashes)):
return [self._data[hash_key].spec]
else:
return []
diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py
index a01bc143aa..d7613ae58a 100644
--- a/lib/spack/spack/fetch_strategy.py
+++ b/lib/spack/spack/fetch_strategy.py
@@ -256,7 +256,7 @@ class URLFetchStrategy(FetchStrategy):
self.digest = kwargs[h]
self.expand_archive = kwargs.get('expand', True)
- self.extra_curl_options = kwargs.get('curl_options', [])
+ self.extra_options = kwargs.get('fetch_options', {})
self._curl = None
self.extension = kwargs.get('extension', None)
@@ -325,8 +325,6 @@ class URLFetchStrategy(FetchStrategy):
'-D',
'-', # print out HTML headers
'-L', # resolve 3xx redirects
- # Timeout if can't establish a connection after 10 sec.
- '--connect-timeout', '10',
url,
]
@@ -338,7 +336,22 @@ class URLFetchStrategy(FetchStrategy):
else:
curl_args.append('-sS') # just errors when not.
- curl_args += self.extra_curl_options
+ connect_timeout = spack.config.get('config:connect_timeout')
+
+ if self.extra_options:
+ cookie = self.extra_options.get('cookie')
+ if cookie:
+ curl_args.append('-j') # junk cookies
+ curl_args.append('-b') # specify cookie
+ curl_args.append(cookie)
+
+ timeout = self.extra_options.get('timeout')
+ if timeout:
+ connect_timeout = max(connect_timeout, int(timeout))
+
+ if connect_timeout > 0:
+ # Timeout if can't establish a connection after n sec.
+ curl_args.extend(['--connect-timeout', str(connect_timeout)])
# Run curl but grab the mime type from the http headers
curl = self.curl
@@ -1148,6 +1161,15 @@ class S3FetchStrategy(URLFetchStrategy):
raise FailedDownloadError(self.url)
+def stable_target(fetcher):
+ """Returns whether the fetcher target is expected to have a stable
+ checksum. This is only true if the target is a preexisting archive
+ file."""
+ if isinstance(fetcher, URLFetchStrategy) and fetcher.cachable:
+ return True
+ return False
+
+
def from_url(url):
"""Given a URL, find an appropriate fetch strategy for it.
Currently just gives you a URLFetchStrategy that uses curl.
@@ -1225,7 +1247,8 @@ def _check_version_attributes(fetcher, pkg, version):
def _extrapolate(pkg, version):
"""Create a fetcher from an extrapolated URL for this version."""
try:
- return URLFetchStrategy(pkg.url_for_version(version))
+ return URLFetchStrategy(pkg.url_for_version(version),
+ fetch_options=pkg.fetch_options)
except spack.package.NoURLError:
msg = ("Can't extrapolate a URL for version %s "
"because package %s defines no URLs")
@@ -1245,6 +1268,7 @@ def _from_merged_attrs(fetcher, pkg, version):
url = getattr(pkg, fetcher.url_attr)
attrs = {fetcher.url_attr: url}
+ attrs['fetch_options'] = pkg.fetch_options
attrs.update(pkg.versions[version])
return fetcher(**attrs)
@@ -1267,8 +1291,10 @@ def for_package_version(pkg, version):
if version not in pkg.versions:
return _extrapolate(pkg, version)
+ # Set package args first so version args can override them
+ args = {'fetch_options': pkg.fetch_options}
# Grab a dict of args out of the package version dict
- args = pkg.versions[version]
+ args.update(pkg.versions[version])
# If the version specifies a `url_attr` directly, use that.
for fetcher in all_strategies:
@@ -1348,7 +1374,8 @@ def from_list_url(pkg):
args.get('checksum'))
# construct a fetcher
- return URLFetchStrategy(url_from_list, checksum)
+ return URLFetchStrategy(url_from_list, checksum,
+ fetch_options=pkg.fetch_options)
except KeyError as e:
tty.debug(e)
tty.msg("Cannot find version %s in url_list" % pkg.version)
diff --git a/lib/spack/spack/mirror.py b/lib/spack/spack/mirror.py
index 3f6b2b6a0e..045ca5ffec 100644
--- a/lib/spack/spack/mirror.py
+++ b/lib/spack/spack/mirror.py
@@ -401,7 +401,7 @@ def get_matching_versions(specs, num_versions=1):
return matching
-def create(path, specs):
+def create(path, specs, skip_unstable_versions=False):
"""Create a directory to be used as a spack mirror, and fill it with
package archives.
@@ -409,6 +409,9 @@ def create(path, specs):
path: Path to create a mirror directory hierarchy in.
specs: Any package versions matching these specs will be added \
to the mirror.
+ skip_unstable_versions: if true, this skips adding resources when
+ they do not have a stable archive checksum (as determined by
+ ``fetch_strategy.stable_target``)
Return Value:
Returns a tuple of lists: (present, mirrored, error)
@@ -440,16 +443,14 @@ def create(path, specs):
raise MirrorError(
"Cannot create directory '%s':" % mirror_root, str(e))
- mirror_cache = spack.caches.MirrorCache(mirror_root)
+ mirror_cache = spack.caches.MirrorCache(
+ mirror_root, skip_unstable_versions=skip_unstable_versions)
mirror_stats = MirrorStats()
- try:
- spack.caches.mirror_cache = mirror_cache
- # Iterate through packages and download all safe tarballs for each
- for spec in specs:
- mirror_stats.next_spec(spec)
- add_single_spec(spec, mirror_root, mirror_stats)
- finally:
- spack.caches.mirror_cache = None
+
+ # Iterate through packages and download all safe tarballs for each
+ for spec in specs:
+ mirror_stats.next_spec(spec)
+ _add_single_spec(spec, mirror_cache, mirror_stats)
return mirror_stats.stats()
@@ -495,7 +496,7 @@ class MirrorStats(object):
self.errors.add(self.current_spec)
-def add_single_spec(spec, mirror_root, mirror_stats):
+def _add_single_spec(spec, mirror, mirror_stats):
tty.msg("Adding package {pkg} to mirror".format(
pkg=spec.format("{name}{@version}")
))
@@ -503,10 +504,10 @@ def add_single_spec(spec, mirror_root, mirror_stats):
while num_retries > 0:
try:
with spec.package.stage as pkg_stage:
- pkg_stage.cache_mirror(mirror_stats)
+ pkg_stage.cache_mirror(mirror, mirror_stats)
for patch in spec.package.all_patches():
- if patch.cache():
- patch.cache().cache_mirror(mirror_stats)
+ if patch.stage:
+ patch.stage.cache_mirror(mirror, mirror_stats)
patch.clean()
exception = None
break
diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py
index b2d841f145..9156d7d0dd 100644
--- a/lib/spack/spack/package.py
+++ b/lib/spack/spack/package.py
@@ -477,6 +477,9 @@ class PackageBase(with_metaclass(PackageMeta, PackageViewMixin, object)):
#: This is currently only used by package sanity tests.
manual_download = False
+ #: Set of additional options used when fetching package versions.
+ fetch_options = {}
+
#
# Set default licensing information
#
@@ -602,11 +605,10 @@ class PackageBase(with_metaclass(PackageMeta, PackageViewMixin, object)):
"""
deptype = spack.dependency.canonical_deptype(deptype)
- if visited is None:
- visited = {cls.name: set()}
+ visited = {} if visited is None else visited
+ missing = {} if missing is None else missing
- if missing is None:
- missing = {cls.name: set()}
+ visited.setdefault(cls.name, set())
for name, conditions in cls.dependencies.items():
# check whether this dependency could be of the type asked for
@@ -621,6 +623,7 @@ class PackageBase(with_metaclass(PackageMeta, PackageViewMixin, object)):
providers = spack.repo.path.providers_for(name)
dep_names = [spec.name for spec in providers]
else:
+ visited.setdefault(cls.name, set()).add(name)
visited.setdefault(name, set())
continue
else:
@@ -1135,8 +1138,8 @@ class PackageBase(with_metaclass(PackageMeta, PackageViewMixin, object)):
for patch in self.spec.patches:
patch.fetch()
- if patch.cache():
- patch.cache().cache_local()
+ if patch.stage:
+ patch.stage.cache_local()
def do_stage(self, mirror_only=False):
"""Unpacks and expands the fetched tarball."""
@@ -2151,26 +2154,27 @@ def possible_dependencies(*pkg_or_spec, **kwargs):
See ``PackageBase.possible_dependencies`` for details.
"""
- transitive = kwargs.get('transitive', True)
- expand_virtuals = kwargs.get('expand_virtuals', True)
- deptype = kwargs.get('deptype', 'all')
- missing = kwargs.get('missing')
-
packages = []
for pos in pkg_or_spec:
if isinstance(pos, PackageMeta):
- pkg = pos
- elif isinstance(pos, spack.spec.Spec):
- pkg = pos.package
- else:
- pkg = spack.spec.Spec(pos).package
+ packages.append(pos)
+ continue
- packages.append(pkg)
+ if not isinstance(pos, spack.spec.Spec):
+ pos = spack.spec.Spec(pos)
+
+ if spack.repo.path.is_virtual(pos.name):
+ packages.extend(
+ p.package_class
+ for p in spack.repo.path.providers_for(pos.name)
+ )
+ continue
+ else:
+ packages.append(pos.package_class)
visited = {}
for pkg in packages:
- pkg.possible_dependencies(
- transitive, expand_virtuals, deptype, visited, missing)
+ pkg.possible_dependencies(visited=visited, **kwargs)
return visited
diff --git a/lib/spack/spack/patch.py b/lib/spack/spack/patch.py
index bcb45387a8..3a839c5b0f 100644
--- a/lib/spack/spack/patch.py
+++ b/lib/spack/spack/patch.py
@@ -85,7 +85,8 @@ class Patch(object):
apply_patch(stage, self.path, self.level, self.working_dir)
- def cache(self):
+ @property
+ def stage(self):
return None
def to_dict(self):
@@ -248,9 +249,6 @@ class UrlPatch(Patch):
self._stage.create()
return self._stage
- def cache(self):
- return self.stage
-
def clean(self):
self.stage.destroy()
@@ -348,7 +346,8 @@ class PatchCache(object):
sha_index = self.index.get(sha256)
if not sha_index:
raise NoSuchPatchError(
- "Couldn't find patch with sha256: %s" % sha256)
+ "Couldn't find patch for package %s with sha256: %s"
+ % (pkg.fullname, sha256))
patch_dict = sha_index.get(pkg.fullname)
if not patch_dict:
diff --git a/lib/spack/spack/relocate.py b/lib/spack/spack/relocate.py
index 56fc993b5f..c7d442a427 100644
--- a/lib/spack/spack/relocate.py
+++ b/lib/spack/spack/relocate.py
@@ -13,6 +13,9 @@ import spack.cmd
import llnl.util.lang
from spack.util.executable import Executable, ProcessError
import llnl.util.tty as tty
+from macholib.MachO import MachO
+from spack.spec import Spec
+import macholib.mach_o
class InstallRootStringException(spack.error.SpackError):
@@ -41,45 +44,47 @@ class BinaryStringReplacementException(spack.error.SpackError):
(file_path, old_len, new_len))
-class MissingMacholibException(spack.error.SpackError):
+class BinaryTextReplaceException(spack.error.SpackError):
"""
- Raised when the size of the file changes after binary path substitution.
+ Raised when the new install path is shorter than the old install path
+ so binary text replacement cannot occur.
"""
- def __init__(self, error):
- super(MissingMacholibException, self).__init__(
- "%s\n"
- "Python package macholib needs to be avaiable to list\n"
- "and modify a mach-o binary's rpaths, deps and id.\n"
- "Use virtualenv with pip install macholib or\n"
- "use spack to install the py-macholib package\n"
- "spack install py-macholib\n"
- "spack activate py-macholib\n"
- "spack load python\n"
- % error)
+ def __init__(self, old_path, new_path):
+ msg = "New path longer than old path: binary text"
+ msg += " replacement not possible."
+ err_msg = "The new path %s" % new_path
+ err_msg += " is longer than the old path %s.\n" % old_path
+ err_msg += "Text replacement in binaries will not work.\n"
+ err_msg += "Create buildcache from an install path "
+ err_msg += "longer than new path."
+ super(BinaryTextReplaceException, self).__init__(msg, err_msg)
def get_patchelf():
"""
+ Returns the full patchelf binary path if available in $PATH.
Builds and installs spack patchelf package on linux platforms
- using the first concretized spec.
- Returns the full patchelf binary path.
+ using the first concretized spec if it is not installed and
+ returns the full patchelf binary path.
"""
# as we may need patchelf, find out where it is
patchelf = spack.util.executable.which('patchelf')
if patchelf is not None:
return patchelf.path
- else:
- if str(spack.architecture.platform()) == 'test':
- return None
- if str(spack.architecture.platform()) == 'darwin':
- return None
- patchelf_spec = spack.cmd.parse_specs("patchelf", concretize=True)[0]
- patchelf = spack.repo.get(patchelf_spec)
- if not patchelf.installed:
- patchelf.do_install(use_cache=False)
+ patchelf_spec = Spec('patchelf').concretized()
+ patchelf = patchelf_spec.package
+ if patchelf.installed:
patchelf_executable = os.path.join(patchelf.prefix.bin, "patchelf")
return patchelf_executable
+ else:
+ if (str(spack.architecture.platform()) == 'test' or
+ str(spack.architecture.platform()) == 'darwin'):
+ return None
+ else:
+ patchelf.do_install()
+ patchelf_executable = os.path.join(patchelf.prefix.bin, "patchelf")
+ return patchelf_executable
def get_existing_elf_rpaths(path_name):
@@ -95,33 +100,53 @@ def get_existing_elf_rpaths(path_name):
else:
patchelf = Executable(get_patchelf())
+ rpaths = list()
try:
output = patchelf('--print-rpath', '%s' %
path_name, output=str, error=str)
- return output.rstrip('\n').split(':')
+ rpaths = output.rstrip('\n').split(':')
except ProcessError as e:
- tty.debug('patchelf --print-rpath produced an error on %s' %
- path_name, e)
- return []
- return
+ msg = 'patchelf --print-rpath %s produced an error %s' % (path_name, e)
+ tty.warn(msg)
+ return rpaths
-def get_relative_rpaths(path_name, orig_dir, orig_rpaths):
+def get_relative_elf_rpaths(path_name, orig_layout_root, orig_rpaths):
"""
- Replaces orig_dir with relative path from dirname(path_name) if an rpath
- in orig_rpaths contains orig_path. Prefixes $ORIGIN
+ Replaces orig rpath with relative path from dirname(path_name) if an rpath
+ in orig_rpaths contains orig_layout_root. Prefixes $ORIGIN
to relative paths and returns replacement rpaths.
"""
rel_rpaths = []
for rpath in orig_rpaths:
- if re.match(orig_dir, rpath):
+ if re.match(orig_layout_root, rpath):
rel = os.path.relpath(rpath, start=os.path.dirname(path_name))
- rel_rpaths.append('$ORIGIN/%s' % rel)
+ rel_rpaths.append(os.path.join('$ORIGIN', '%s' % rel))
else:
rel_rpaths.append(rpath)
return rel_rpaths
+def get_normalized_elf_rpaths(orig_path_name, rel_rpaths):
+ """
+ Normalize the relative rpaths with respect to the original path name
+ of the file. If the rpath starts with $ORIGIN replace $ORIGIN with the
+ dirname of the original path name and then normalize the rpath.
+ A dictionary mapping relativized rpaths to normalized rpaths is returned.
+ """
+ norm_rpaths = list()
+ for rpath in rel_rpaths:
+ if rpath.startswith('$ORIGIN'):
+ sub = re.sub(re.escape('$ORIGIN'),
+ os.path.dirname(orig_path_name),
+ rpath)
+ norm = os.path.normpath(sub)
+ norm_rpaths.append(norm)
+ else:
+ norm_rpaths.append(rpath)
+ return norm_rpaths
+
+
def set_placeholder(dirname):
"""
return string of @'s with same length
@@ -129,183 +154,157 @@ def set_placeholder(dirname):
return '@' * len(dirname)
-def get_placeholder_rpaths(path_name, orig_rpaths):
+def macho_make_paths_relative(path_name, old_layout_root,
+ rpaths, deps, idpath):
"""
- Replaces original layout root dir with a placeholder string in all rpaths.
+ Return a dictionary mapping the original rpaths to the relativized rpaths.
+ This dictionary is used to replace paths in mach-o binaries.
+ Replace old_dir with relative path from dirname of path name
+ in rpaths and deps; idpath is replaced with @rpath/libname.
"""
- rel_rpaths = []
- orig_dir = spack.store.layout.root
- for rpath in orig_rpaths:
- if re.match(orig_dir, rpath):
- placeholder = set_placeholder(orig_dir)
- rel = re.sub(orig_dir, placeholder, rpath)
- rel_rpaths.append('%s' % rel)
- else:
- rel_rpaths.append(rpath)
- return rel_rpaths
-
-
-def macho_get_paths(path_name):
- """
- Examines the output of otool -l path_name for these three fields:
- LC_ID_DYLIB, LC_LOAD_DYLIB, LC_RPATH and parses out the rpaths,
- dependiencies and library id.
- Returns these values.
- """
- otool = Executable('otool')
- output = otool("-l", path_name, output=str, err=str)
- last_cmd = None
- idpath = None
- rpaths = []
- deps = []
- for line in output.split('\n'):
- match = re.search('( *[a-zA-Z]+ )(.*)', line)
- if match:
- lhs = match.group(1).lstrip().rstrip()
- rhs = match.group(2)
- match2 = re.search(r'(.*) \(.*\)', rhs)
- if match2:
- rhs = match2.group(1)
- if lhs == 'cmd':
- last_cmd = rhs
- if lhs == 'path' and last_cmd == 'LC_RPATH':
- rpaths.append(rhs)
- if lhs == 'name' and last_cmd == 'LC_ID_DYLIB':
- idpath = rhs
- if lhs == 'name' and last_cmd == 'LC_LOAD_DYLIB':
- deps.append(rhs)
- return rpaths, deps, idpath
-
-
-def macho_make_paths_relative(path_name, old_dir, rpaths, deps, idpath):
- """
- Replace old_dir with relative path from dirname(path_name)
- in rpaths and deps; idpaths are replaced with @rpath/libname as needed;
- replacement are returned.
- """
- new_idpath = None
+ paths_to_paths = dict()
if idpath:
- new_idpath = '@rpath/%s' % os.path.basename(idpath)
- new_rpaths = list()
- new_deps = list()
+ paths_to_paths[idpath] = os.path.join(
+ '@rpath', '%s' % os.path.basename(idpath))
for rpath in rpaths:
- if re.match(old_dir, rpath):
+ if re.match(old_layout_root, rpath):
rel = os.path.relpath(rpath, start=os.path.dirname(path_name))
- new_rpaths.append('@loader_path/%s' % rel)
+ paths_to_paths[rpath] = os.path.join('@loader_path', '%s' % rel)
else:
- new_rpaths.append(rpath)
+ paths_to_paths[rpath] = rpath
for dep in deps:
- if re.match(old_dir, dep):
+ if re.match(old_layout_root, dep):
rel = os.path.relpath(dep, start=os.path.dirname(path_name))
- new_deps.append('@loader_path/%s' % rel)
+ paths_to_paths[dep] = os.path.join('@loader_path', '%s' % rel)
else:
- new_deps.append(dep)
- return (new_rpaths, new_deps, new_idpath)
+ paths_to_paths[dep] = dep
+ return paths_to_paths
-def macho_make_paths_placeholder(rpaths, deps, idpath):
+def macho_make_paths_normal(orig_path_name, rpaths, deps, idpath):
"""
- Replace old_dir with a placeholder of the same length
- in rpaths and deps and idpaths is needed.
- replacement are returned.
+ Return a dictionary mapping the relativized rpaths to the original rpaths.
+ This dictionary is used to replace paths in mach-o binaries.
+ Replace '@loader_path' with the dirname of the origname path name
+ in rpaths and deps; idpath is replaced with the original path name
"""
- new_idpath = None
- old_dir = spack.store.layout.root
- placeholder = set_placeholder(old_dir)
+ rel_to_orig = dict()
if idpath:
- new_idpath = re.sub(old_dir, placeholder, idpath)
- new_rpaths = list()
- new_deps = list()
+ rel_to_orig[idpath] = orig_path_name
+
for rpath in rpaths:
- if re.match(old_dir, rpath):
- ph = re.sub(old_dir, placeholder, rpath)
- new_rpaths.append('%s' % ph)
+ if re.match('@loader_path', rpath):
+ norm = os.path.normpath(re.sub(re.escape('@loader_path'),
+ os.path.dirname(orig_path_name),
+ rpath))
+ rel_to_orig[rpath] = norm
else:
- new_rpaths.append(rpath)
+ rel_to_orig[rpath] = rpath
for dep in deps:
- if re.match(old_dir, dep):
- ph = re.sub(old_dir, placeholder, dep)
- new_deps.append('%s' % ph)
+ if re.match('@loader_path', dep):
+ norm = os.path.normpath(re.sub(re.escape('@loader_path'),
+ os.path.dirname(orig_path_name),
+ dep))
+ rel_to_orig[dep] = norm
else:
- new_deps.append(dep)
- return (new_rpaths, new_deps, new_idpath)
-
+ rel_to_orig[dep] = dep
+ return rel_to_orig
+
+
+def macho_find_paths(orig_rpaths, deps, idpath,
+ old_layout_root, prefix_to_prefix):
+ """
+ Inputs
+ original rpaths from mach-o binaries
+ dependency libraries for mach-o binaries
+ id path of mach-o libraries
+ old install directory layout root
+ prefix_to_prefix dictionary which maps prefixes in the old directory layout
+ to directories in the new directory layout
+ Output
+ paths_to_paths dictionary which maps all of the old paths to new paths
+ """
+ paths_to_paths = dict()
+ for orig_rpath in orig_rpaths:
+ if orig_rpath.startswith(old_layout_root):
+ for old_prefix, new_prefix in prefix_to_prefix.items():
+ if orig_rpath.startswith(old_prefix):
+ new_rpath = re.sub(re.escape(old_prefix),
+ new_prefix, orig_rpath)
+ paths_to_paths[orig_rpath] = new_rpath
+ else:
+ paths_to_paths[orig_rpath] = orig_rpath
-def macho_replace_paths(old_dir, new_dir, rpaths, deps, idpath):
- """
- Replace old_dir with new_dir in rpaths, deps and idpath
- and return replacements
- """
- new_idpath = None
if idpath:
- new_idpath = idpath.replace(old_dir, new_dir)
- new_rpaths = list()
- new_deps = list()
- for rpath in rpaths:
- new_rpath = rpath.replace(old_dir, new_dir)
- new_rpaths.append(new_rpath)
+ for old_prefix, new_prefix in prefix_to_prefix.items():
+ if idpath.startswith(old_prefix):
+ paths_to_paths[idpath] = re.sub(
+ re.escape(old_prefix), new_prefix, idpath)
for dep in deps:
- new_dep = dep.replace(old_dir, new_dir)
- new_deps.append(new_dep)
- return new_rpaths, new_deps, new_idpath
+ for old_prefix, new_prefix in prefix_to_prefix.items():
+ if dep.startswith(old_prefix):
+ paths_to_paths[dep] = re.sub(
+ re.escape(old_prefix), new_prefix, dep)
+ if dep.startswith('@'):
+ paths_to_paths[dep] = dep
+
+ return paths_to_paths
def modify_macho_object(cur_path, rpaths, deps, idpath,
- new_rpaths, new_deps, new_idpath):
+ paths_to_paths):
"""
- Modify MachO binary path_name by replacing old_dir with new_dir
- or the relative path to spack install root.
- The old install dir in LC_ID_DYLIB is replaced with the new install dir
- using install_name_tool -id newid binary
- The old install dir in LC_LOAD_DYLIB is replaced with the new install dir
- using install_name_tool -change old new binary
- The old install dir in LC_RPATH is replaced with the new install dir using
- install_name_tool -rpath old new binary
+ This function is used to make machO buildcaches on macOS by
+ replacing old paths with new paths using install_name_tool
+ Inputs:
+ mach-o binary to be modified
+ original rpaths
+ original dependency paths
+ original id path if a mach-o library
+ dictionary mapping paths in old install layout to new install layout
"""
# avoid error message for libgcc_s
if 'libgcc_' in cur_path:
return
install_name_tool = Executable('install_name_tool')
- if new_idpath and not idpath == new_idpath:
- install_name_tool('-id', new_idpath, str(cur_path))
-
- if len(deps) == len(new_deps):
- for orig, new in zip(deps, new_deps):
- if not orig == new:
- install_name_tool('-change', orig, new, str(cur_path))
-
- if len(rpaths) == len(new_rpaths):
- for orig, new in zip(rpaths, new_rpaths):
- if not orig == new:
- install_name_tool('-rpath', orig, new, str(cur_path))
+ if idpath:
+ new_idpath = paths_to_paths.get(idpath, None)
+ if new_idpath and not idpath == new_idpath:
+ install_name_tool('-id', new_idpath, str(cur_path))
+ for dep in deps:
+ new_dep = paths_to_paths.get(dep)
+ if new_dep and dep != new_dep:
+ install_name_tool('-change', dep, new_dep, str(cur_path))
+
+ for orig_rpath in rpaths:
+ new_rpath = paths_to_paths.get(orig_rpath)
+ if new_rpath and not orig_rpath == new_rpath:
+ install_name_tool('-rpath', orig_rpath, new_rpath, str(cur_path))
return
-def modify_object_macholib(cur_path, old_dir, new_dir):
+def modify_object_macholib(cur_path, paths_to_paths):
"""
- Modify MachO binary path_name by replacing old_dir with new_dir
- or the relative path to spack install root.
- The old install dir in LC_ID_DYLIB is replaced with the new install dir
- using py-macholib
- The old install dir in LC_LOAD_DYLIB is replaced with the new install dir
- using py-macholib
- The old install dir in LC_RPATH is replaced with the new install dir using
- using py-macholib
+ This function is used when install machO buildcaches on linux by
+ rewriting mach-o loader commands for dependency library paths of
+ mach-o binaries and the id path for mach-o libraries.
+ Rewritting of rpaths is handled by replace_prefix_bin.
+ Inputs
+ mach-o binary to be modified
+ dictionary mapping paths in old install layout to new install layout
"""
- if cur_path.endswith('.o'):
- return
- try:
- from macholib.MachO import MachO
- except ImportError as e:
- raise MissingMacholibException(e)
-
- def match_func(cpath):
- rpath = cpath.replace(old_dir, new_dir)
- return rpath
dll = MachO(cur_path)
- dll.rewriteLoadCommands(match_func)
+
+ changedict = paths_to_paths
+
+ def changefunc(path):
+ npath = changedict.get(path, None)
+ return npath
+
+ dll.rewriteLoadCommands(changefunc)
+
try:
f = open(dll.filename, 'rb+')
for header in dll.headers:
@@ -320,14 +319,32 @@ def modify_object_macholib(cur_path, old_dir, new_dir):
return
-def strings_contains_installroot(path_name, root_dir):
+def macholib_get_paths(cur_path):
"""
- Check if the file contain the install root string.
+ Get rpaths, dependencies and id of mach-o objects
+ using python macholib package
"""
- strings = Executable('strings')
- output = strings('%s' % path_name,
- output=str, err=str)
- return (root_dir in output or spack.paths.prefix in output)
+ dll = MachO(cur_path)
+
+ ident = None
+ rpaths = list()
+ deps = list()
+ for header in dll.headers:
+ rpaths = [data.rstrip(b'\0').decode('utf-8')
+ for load_command, dylib_command, data in header.commands if
+ load_command.cmd == macholib.mach_o.LC_RPATH]
+ deps = [data.rstrip(b'\0').decode('utf-8')
+ for load_command, dylib_command, data in header.commands if
+ load_command.cmd == macholib.mach_o.LC_LOAD_DYLIB]
+ idents = [data.rstrip(b'\0').decode('utf-8')
+ for load_command, dylib_command, data in header.commands if
+ load_command.cmd == macholib.mach_o.LC_ID_DYLIB]
+ if len(idents) == 1:
+ ident = idents[0]
+ tty.debug('ident: %s' % ident)
+ tty.debug('deps: %s' % deps)
+ tty.debug('rpaths: %s' % rpaths)
+ return (rpaths, deps, ident)
def modify_elf_object(path_name, new_rpaths):
@@ -338,9 +355,9 @@ def modify_elf_object(path_name, new_rpaths):
new_joined = ':'.join(new_rpaths)
# if we're relocating patchelf itself, use it
+ bak_path = path_name + ".bak"
if path_name[-13:] == "/bin/patchelf":
- bak_path = path_name + ".bak"
shutil.copy(path_name, bak_path)
patchelf = Executable(bak_path)
else:
@@ -350,9 +367,11 @@ def modify_elf_object(path_name, new_rpaths):
patchelf('--force-rpath', '--set-rpath', '%s' % new_joined,
'%s' % path_name, output=str, error=str)
except ProcessError as e:
- tty.die('patchelf --set-rpath %s failed' %
- path_name, e)
- pass
+ msg = 'patchelf --force-rpath --set-rpath %s failed with error %s' % (
+ path_name, e)
+ tty.warn(msg)
+ if os.path.exists(bak_path):
+ os.remove(bak_path)
def needs_binary_relocation(m_type, m_subtype):
@@ -412,13 +431,14 @@ def replace_prefix_bin(path_name, old_dir, new_dir):
if padding < 0:
return data
return match.group().replace(old_dir.encode('utf-8'),
- new_dir.encode('utf-8')) + b'\0' * padding
+ os.sep.encode('utf-8') * padding +
+ new_dir.encode('utf-8'))
with open(path_name, 'rb+') as f:
data = f.read()
f.seek(0)
original_data_len = len(data)
- pat = re.compile(old_dir.encode('utf-8') + b'([^\0]*?)\0')
+ pat = re.compile(old_dir.encode('utf-8'))
if not pat.search(data):
return
ndata = pat.sub(replace, data)
@@ -446,11 +466,15 @@ def replace_prefix_nullterm(path_name, old_dir, new_dir):
return data
return match.group().replace(old_dir.encode('utf-8'),
new_dir.encode('utf-8')) + b'\0' * padding
+
+ if len(new_dir) > len(old_dir):
+ raise BinaryTextReplaceException(old_dir, new_dir)
+
with open(path_name, 'rb+') as f:
data = f.read()
f.seek(0)
original_data_len = len(data)
- pat = re.compile(old_dir.encode('utf-8') + b'([^\0]*?)\0')
+ pat = re.compile(re.escape(old_dir).encode('utf-8') + b'([^\0]*?)\0')
if not pat.search(data):
return
ndata = pat.sub(replace, data)
@@ -461,80 +485,129 @@ def replace_prefix_nullterm(path_name, old_dir, new_dir):
f.truncate()
-def relocate_macho_binaries(path_names, old_dir, new_dir, allow_root):
+def relocate_macho_binaries(path_names, old_layout_root, new_layout_root,
+ prefix_to_prefix, rel, old_prefix, new_prefix):
"""
- Change old_dir to new_dir in LC_RPATH of mach-o files (on macOS)
- Change old_dir to new_dir in LC_ID and LC_DEP of mach-o files
- Account for the case where old_dir is now a placeholder
+ Use macholib python package to get the rpaths, depedent libraries
+ and library identity for libraries from the MachO object. Modify them
+ with the replacement paths queried from the dictionary mapping old layout
+ prefixes to hashes and the dictionary mapping hashes to the new layout
+ prefixes.
"""
- placeholder = set_placeholder(old_dir)
+
for path_name in path_names:
+ # Corner case where macho object file ended up in the path name list
if path_name.endswith('.o'):
continue
- if new_dir == old_dir:
- continue
- if platform.system().lower() == 'darwin':
- rpaths, deps, idpath = macho_get_paths(path_name)
- # one pass to replace placeholder
- (n_rpaths,
- n_deps,
- n_idpath) = macho_replace_paths(placeholder,
- new_dir,
- rpaths,
- deps,
- idpath)
- # another pass to replace old_dir
- (new_rpaths,
- new_deps,
- new_idpath) = macho_replace_paths(old_dir,
- new_dir,
- n_rpaths,
- n_deps,
- n_idpath)
- modify_macho_object(path_name,
- rpaths, deps, idpath,
- new_rpaths, new_deps, new_idpath)
+ if rel:
+ # get the relativized paths
+ rpaths, deps, idpath = macholib_get_paths(path_name)
+ # get the file path name in the original prefix
+ orig_path_name = re.sub(re.escape(new_prefix), old_prefix,
+ path_name)
+ # get the mapping of the relativized paths to the original
+ # normalized paths
+ rel_to_orig = macho_make_paths_normal(orig_path_name,
+ rpaths, deps,
+ idpath)
+ # replace the relativized paths with normalized paths
+ if platform.system().lower() == 'darwin':
+ modify_macho_object(path_name, rpaths, deps,
+ idpath, rel_to_orig)
+ else:
+ modify_object_macholib(path_name,
+ rel_to_orig)
+ # get the normalized paths in the mach-o binary
+ rpaths, deps, idpath = macholib_get_paths(path_name)
+ # get the mapping of paths in old prefix to path in new prefix
+ paths_to_paths = macho_find_paths(rpaths, deps, idpath,
+ old_layout_root,
+ prefix_to_prefix)
+ # replace the old paths with new paths
+ if platform.system().lower() == 'darwin':
+ modify_macho_object(path_name, rpaths, deps,
+ idpath, paths_to_paths)
+ else:
+ modify_object_macholib(path_name,
+ paths_to_paths)
+ # get the new normalized path in the mach-o binary
+ rpaths, deps, idpath = macholib_get_paths(path_name)
+ # get the mapping of paths to relative paths in the new prefix
+ paths_to_paths = macho_make_paths_relative(path_name,
+ new_layout_root,
+ rpaths, deps, idpath)
+ # replace the new paths with relativized paths in the new prefix
+ if platform.system().lower() == 'darwin':
+ modify_macho_object(path_name, rpaths, deps,
+ idpath, paths_to_paths)
+ else:
+ modify_object_macholib(path_name,
+ paths_to_paths)
else:
- modify_object_macholib(path_name, placeholder, new_dir)
- modify_object_macholib(path_name, old_dir, new_dir)
- if len(new_dir) <= len(old_dir):
- replace_prefix_nullterm(path_name, old_dir, new_dir)
+ # get the paths in the old prefix
+ rpaths, deps, idpath = macholib_get_paths(path_name)
+ # get the mapping of paths in the old prerix to the new prefix
+ paths_to_paths = macho_find_paths(rpaths, deps, idpath,
+ old_layout_root,
+ prefix_to_prefix)
+ # replace the old paths with new paths
+ if platform.system().lower() == 'darwin':
+ modify_macho_object(path_name, rpaths, deps,
+ idpath, paths_to_paths)
+ else:
+ modify_object_macholib(path_name,
+ paths_to_paths)
+
+
+def elf_find_paths(orig_rpaths, old_layout_root, prefix_to_prefix):
+ new_rpaths = list()
+ for orig_rpath in orig_rpaths:
+ if orig_rpath.startswith(old_layout_root):
+ for old_prefix, new_prefix in prefix_to_prefix.items():
+ if orig_rpath.startswith(old_prefix):
+ new_rpaths.append(re.sub(re.escape(old_prefix),
+ new_prefix, orig_rpath))
else:
- tty.warn('Cannot do a binary string replacement'
- ' with padding for %s'
- ' because %s is longer than %s' %
- (path_name, new_dir, old_dir))
+ new_rpaths.append(orig_rpath)
+ return new_rpaths
-def relocate_elf_binaries(path_names, old_dir, new_dir, allow_root):
+def relocate_elf_binaries(path_names, old_layout_root, new_layout_root,
+ prefix_to_prefix, rel, old_prefix, new_prefix):
"""
- Change old_dir to new_dir in RPATHs of elf binaries
- Account for the case where old_dir is now a placeholder
+ Use patchelf to get the original rpaths and then replace them with
+ rpaths in the new directory layout.
+ New rpaths are determined from a dictionary mapping the prefixes in the
+ old directory layout to the prefixes in the new directory layout if the
+ rpath was in the old layout root, i.e. system paths are not replaced.
"""
- placeholder = set_placeholder(old_dir)
for path_name in path_names:
orig_rpaths = get_existing_elf_rpaths(path_name)
- if orig_rpaths:
- # one pass to replace placeholder
- n_rpaths = substitute_rpath(orig_rpaths,
- placeholder, new_dir)
- # one pass to replace old_dir
- new_rpaths = substitute_rpath(n_rpaths,
- old_dir, new_dir)
+ new_rpaths = list()
+ if rel:
+ # get the file path in the old_prefix
+ orig_path_name = re.sub(re.escape(new_prefix), old_prefix,
+ path_name)
+ # get the normalized rpaths in the old prefix using the file path
+ # in the orig prefix
+ orig_norm_rpaths = get_normalized_elf_rpaths(orig_path_name,
+ orig_rpaths)
+ # get the normalize rpaths in the new prefix
+ norm_rpaths = elf_find_paths(orig_norm_rpaths, old_layout_root,
+ prefix_to_prefix)
+ # get the relativized rpaths in the new prefix
+ new_rpaths = get_relative_elf_rpaths(path_name, new_layout_root,
+ norm_rpaths)
+ modify_elf_object(path_name, new_rpaths)
+ else:
+ new_rpaths = elf_find_paths(orig_rpaths, old_layout_root,
+ prefix_to_prefix)
modify_elf_object(path_name, new_rpaths)
- if not new_dir == old_dir:
- if len(new_dir) <= len(old_dir):
- replace_prefix_bin(path_name, old_dir, new_dir)
- else:
- tty.warn('Cannot do a binary string replacement'
- ' with padding for %s'
- ' because %s is longer than %s.' %
- (path_name, new_dir, old_dir))
def make_link_relative(cur_path_names, orig_path_names):
"""
- Change absolute links to be relative.
+ Change absolute links to relative links.
"""
for cur_path, orig_path in zip(cur_path_names, orig_path_names):
target = os.readlink(orig_path)
@@ -544,8 +617,8 @@ def make_link_relative(cur_path_names, orig_path_names):
os.symlink(relative_target, cur_path)
-def make_macho_binaries_relative(cur_path_names, orig_path_names, old_dir,
- allow_root):
+def make_macho_binaries_relative(cur_path_names, orig_path_names,
+ old_layout_root):
"""
Replace old RPATHs with paths relative to old_dir in binary files
"""
@@ -554,33 +627,26 @@ def make_macho_binaries_relative(cur_path_names, orig_path_names, old_dir,
deps = set()
idpath = None
if platform.system().lower() == 'darwin':
- (rpaths, deps, idpath) = macho_get_paths(cur_path)
- (new_rpaths,
- new_deps,
- new_idpath) = macho_make_paths_relative(orig_path, old_dir,
- rpaths, deps, idpath)
+ (rpaths, deps, idpath) = macholib_get_paths(cur_path)
+ paths_to_paths = macho_make_paths_relative(orig_path,
+ old_layout_root,
+ rpaths, deps, idpath)
modify_macho_object(cur_path,
rpaths, deps, idpath,
- new_rpaths, new_deps, new_idpath)
- if (not allow_root and
- not file_is_relocatable(cur_path)):
- raise InstallRootStringException(cur_path, old_dir)
+ paths_to_paths)
-def make_elf_binaries_relative(cur_path_names, orig_path_names, old_dir,
- allow_root):
+def make_elf_binaries_relative(cur_path_names, orig_path_names,
+ old_layout_root):
"""
Replace old RPATHs with paths relative to old_dir in binary files
"""
for cur_path, orig_path in zip(cur_path_names, orig_path_names):
orig_rpaths = get_existing_elf_rpaths(cur_path)
if orig_rpaths:
- new_rpaths = get_relative_rpaths(orig_path, old_dir,
- orig_rpaths)
+ new_rpaths = get_relative_elf_rpaths(orig_path, old_layout_root,
+ orig_rpaths)
modify_elf_object(cur_path, new_rpaths)
- if (not allow_root and
- not file_is_relocatable(cur_path)):
- raise InstallRootStringException(cur_path, old_dir)
def check_files_relocatable(cur_path_names, allow_root):
@@ -594,63 +660,73 @@ def check_files_relocatable(cur_path_names, allow_root):
cur_path, spack.store.layout.root)
-def make_link_placeholder(cur_path_names, cur_dir, old_dir):
- """
- Replace old install path with placeholder in absolute links.
-
- Links in ``cur_path_names`` must link to absolute paths.
- """
- for cur_path in cur_path_names:
- placeholder = set_placeholder(spack.store.layout.root)
- placeholder_prefix = old_dir.replace(spack.store.layout.root,
- placeholder)
- cur_src = os.readlink(cur_path)
- rel_src = os.path.relpath(cur_src, cur_dir)
- new_src = os.path.join(placeholder_prefix, rel_src)
-
- os.unlink(cur_path)
- os.symlink(new_src, cur_path)
-
-
-def relocate_links(path_names, old_dir, new_dir):
- """
- Replace old path with new path in link sources.
-
- Links in ``path_names`` must link to absolute paths or placeholders.
- """
- placeholder = set_placeholder(old_dir)
- for path_name in path_names:
- old_src = os.readlink(path_name)
- # replace either placeholder or old_dir
- new_src = old_src.replace(placeholder, new_dir, 1)
- new_src = new_src.replace(old_dir, new_dir, 1)
-
- os.unlink(path_name)
- os.symlink(new_src, path_name)
+def relocate_links(linknames, old_layout_root, new_layout_root,
+ old_install_prefix, new_install_prefix, prefix_to_prefix):
+ """
+ The symbolic links in filenames are absolute links or placeholder links.
+ The old link target is read and the placeholder is replaced by the old
+ layout root. If the old link target is in the old install prefix, the new
+ link target is create by replacing the old install prefix with the new
+ install prefix.
+ """
+ placeholder = set_placeholder(old_layout_root)
+ link_names = [os.path.join(new_install_prefix, linkname)
+ for linkname in linknames]
+ for link_name in link_names:
+ link_target = os.readlink(link_name)
+ link_target = re.sub(placeholder, old_layout_root, link_target)
+ if link_target.startswith(old_install_prefix):
+ new_link_target = re.sub(
+ old_install_prefix, new_install_prefix, link_target)
+ os.unlink(link_name)
+ os.symlink(new_link_target, link_name)
+ if (os.path.isabs(link_target) and
+ not link_target.startswith(new_install_prefix)):
+ msg = 'Link target %s' % link_target
+ msg += ' for symbolic link %s is outside' % link_name
+ msg += ' of the newinstall prefix %s.\n' % new_install_prefix
+ tty.warn(msg)
+
+
+def relocate_text(path_names, old_layout_root, new_layout_root,
+ old_install_prefix, new_install_prefix,
+ old_spack_prefix, new_spack_prefix,
+ prefix_to_prefix):
+ """
+ Replace old paths with new paths in text files
+ including the path the the spack sbang script
+ """
+ sbangre = '#!/bin/bash %s/bin/sbang' % old_spack_prefix
+ sbangnew = '#!/bin/bash %s/bin/sbang' % new_spack_prefix
-
-def relocate_text(path_names, oldpath, newpath, oldprefix, newprefix):
- """
- Replace old path with new path in text files
- including the path the the spack sbang script.
- """
- sbangre = '#!/bin/bash %s/bin/sbang' % oldprefix
- sbangnew = '#!/bin/bash %s/bin/sbang' % newprefix
for path_name in path_names:
- replace_prefix_text(path_name, oldpath, newpath)
+ replace_prefix_text(path_name, old_install_prefix, new_install_prefix)
+ for orig_dep_prefix, new_dep_prefix in prefix_to_prefix.items():
+ replace_prefix_text(path_name, orig_dep_prefix, new_dep_prefix)
+ replace_prefix_text(path_name, old_layout_root, new_layout_root)
replace_prefix_text(path_name, sbangre, sbangnew)
- replace_prefix_text(path_name, oldprefix, newprefix)
-def substitute_rpath(orig_rpath, topdir, new_root_path):
- """
- Replace topdir with new_root_path RPATH list orig_rpath
- """
- new_rpaths = []
- for path in orig_rpath:
- new_rpath = path.replace(topdir, new_root_path)
- new_rpaths.append(new_rpath)
- return new_rpaths
+def relocate_text_bin(path_names, old_layout_root, new_layout_root,
+ old_install_prefix, new_install_prefix,
+ old_spack_prefix, new_spack_prefix,
+ prefix_to_prefix):
+ """
+ Replace null terminated path strings hard coded into binaries.
+ Raise an exception when the new path in longer than the old path
+ because this breaks the binary.
+ """
+ if len(new_install_prefix) <= len(old_install_prefix):
+ for path_name in path_names:
+ for old_dep_prefix, new_dep_prefix in prefix_to_prefix.items():
+ if len(new_dep_prefix) <= len(old_dep_prefix):
+ replace_prefix_bin(
+ path_name, old_dep_prefix, new_dep_prefix)
+ replace_prefix_bin(path_name, old_spack_prefix, new_spack_prefix)
+ else:
+ if len(path_names) > 0:
+ raise BinaryTextReplaceException(
+ old_install_prefix, new_install_prefix)
def is_relocatable(spec):
@@ -728,7 +804,7 @@ def file_is_relocatable(file, paths_to_relocate=None):
set_of_strings.discard(rpaths)
if platform.system().lower() == 'darwin':
if m_subtype == 'x-mach-binary':
- rpaths, deps, idpath = macho_get_paths(file)
+ rpaths, deps, idpath = macholib_get_paths(file)
set_of_strings.discard(set(rpaths))
set_of_strings.discard(set(deps))
if idpath is not None:
@@ -778,6 +854,8 @@ def mime_type(file):
file_cmd = Executable('file')
output = file_cmd('-b', '-h', '--mime-type', file, output=str, error=str)
tty.debug('[MIME_TYPE] {0} -> {1}'.format(file, output.strip()))
+ # In corner cases the output does not contain a subtype prefixed with a /
+ # In those cases add the / so the tuple can be formed.
if '/' not in output:
output += '/'
split_by_slash = output.strip().split('/')
diff --git a/lib/spack/spack/schema/config.py b/lib/spack/spack/schema/config.py
index 1378698825..a05af2f438 100644
--- a/lib/spack/spack/schema/config.py
+++ b/lib/spack/spack/schema/config.py
@@ -55,6 +55,7 @@ properties = {
},
'source_cache': {'type': 'string'},
'misc_cache': {'type': 'string'},
+ 'connect_timeout': {'type': 'integer', 'minimum': 0},
'verify_ssl': {'type': 'boolean'},
'suppress_gpg_warnings': {'type': 'boolean'},
'install_missing_compilers': {'type': 'boolean'},
diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py
index 718b5ef14d..c6fe2da762 100644
--- a/lib/spack/spack/spec.py
+++ b/lib/spack/spack/spec.py
@@ -3120,7 +3120,7 @@ class Spec(object):
A copy of this spec.
Examples:
- Deep copy with dependnecies::
+ Deep copy with dependencies::
spec.copy()
spec.copy(deps=True)
diff --git a/lib/spack/spack/stage.py b/lib/spack/spack/stage.py
index b445638228..54d370a50d 100644
--- a/lib/spack/spack/stage.py
+++ b/lib/spack/spack/stage.py
@@ -493,8 +493,14 @@ class Stage(object):
spack.caches.fetch_cache.store(
self.fetcher, self.mirror_paths.storage_path)
- def cache_mirror(self, stats):
- """Perform a fetch if the resource is not already cached"""
+ def cache_mirror(self, mirror, stats):
+ """Perform a fetch if the resource is not already cached
+
+ Arguments:
+ mirror (MirrorCache): the mirror to cache this Stage's resource in
+ stats (MirrorStats): this is updated depending on whether the
+ caching operation succeeded or failed
+ """
if isinstance(self.default_fetcher, fs.BundleFetchStrategy):
# BundleFetchStrategy has no source to fetch. The associated
# fetcher does nothing but the associated stage may still exist.
@@ -505,20 +511,23 @@ class Stage(object):
# must examine the type of the fetcher.
return
- dst_root = spack.caches.mirror_cache.root
+ if (mirror.skip_unstable_versions and
+ not fs.stable_target(self.default_fetcher)):
+ return
+
absolute_storage_path = os.path.join(
- dst_root, self.mirror_paths.storage_path)
+ mirror.root, self.mirror_paths.storage_path)
if os.path.exists(absolute_storage_path):
stats.already_existed(absolute_storage_path)
else:
self.fetch()
self.check()
- spack.caches.mirror_cache.store(
+ mirror.store(
self.fetcher, self.mirror_paths.storage_path)
stats.added(absolute_storage_path)
- spack.caches.mirror_cache.symlink(self.mirror_paths)
+ mirror.symlink(self.mirror_paths)
def expand_archive(self):
"""Changes to the stage directory and attempt to expand the downloaded
@@ -743,7 +752,8 @@ def purge():
def get_checksums_for_versions(
- url_dict, name, first_stage_function=None, keep_stage=False):
+ url_dict, name, first_stage_function=None, keep_stage=False,
+ fetch_options=None):
"""Fetches and checksums archives from URLs.
This function is called by both ``spack checksum`` and ``spack
@@ -757,6 +767,8 @@ def get_checksums_for_versions(
first_stage_function (callable): function that takes a Stage and a URL;
this is run on the stage of the first URL downloaded
keep_stage (bool): whether to keep staging area when command completes
+ fetch_options (dict): Options used for the fetcher (such as timeout
+ or cookies)
Returns:
(str): A multi-line string containing versions and corresponding hashes
@@ -790,7 +802,12 @@ def get_checksums_for_versions(
i = 0
for url, version in zip(urls, versions):
try:
- with Stage(url, keep=keep_stage) as stage:
+ if fetch_options:
+ url_or_fs = fs.URLFetchStrategy(
+ url, fetch_options=fetch_options)
+ else:
+ url_or_fs = url
+ with Stage(url_or_fs, keep=keep_stage) as stage:
# Fetch the archive
stage.fetch()
if i == 0 and first_stage_function:
diff --git a/lib/spack/spack/test/build_systems.py b/lib/spack/spack/test/build_systems.py
index 744821a04e..7ede78b7a5 100644
--- a/lib/spack/spack/test/build_systems.py
+++ b/lib/spack/spack/test/build_systems.py
@@ -181,3 +181,41 @@ class TestAutotoolsPackage(object):
assert '--without-bar' in options
assert '--without-baz' in options
assert '--no-fee' in options
+
+
+@pytest.mark.usefixtures('config', 'mock_packages')
+class TestCMakePackage(object):
+
+ def test_define(self):
+ s = Spec('cmake-client')
+ s.concretize()
+ pkg = spack.repo.get(s)
+
+ for cls in (list, tuple):
+ arg = pkg.define('MULTI', cls(['right', 'up']))
+ assert arg == '-DMULTI:STRING=right;up'
+
+ arg = pkg.define('ENABLE_TRUTH', False)
+ assert arg == '-DENABLE_TRUTH:BOOL=OFF'
+ arg = pkg.define('ENABLE_TRUTH', True)
+ assert arg == '-DENABLE_TRUTH:BOOL=ON'
+
+ arg = pkg.define('SINGLE', 'red')
+ assert arg == '-DSINGLE:STRING=red'
+
+ def test_define_from_variant(self):
+ s = Spec('cmake-client multi=up,right ~truthy single=red')
+ s.concretize()
+ pkg = spack.repo.get(s)
+
+ arg = pkg.define_from_variant('MULTI')
+ assert arg == '-DMULTI:STRING=right;up'
+
+ arg = pkg.define_from_variant('ENABLE_TRUTH', 'truthy')
+ assert arg == '-DENABLE_TRUTH:BOOL=OFF'
+
+ arg = pkg.define_from_variant('SINGLE')
+ assert arg == '-DSINGLE:STRING=red'
+
+ with pytest.raises(KeyError, match="not a variant"):
+ pkg.define_from_variant('NONEXISTENT')
diff --git a/lib/spack/spack/test/cmd/buildcache.py b/lib/spack/spack/test/cmd/buildcache.py
index 064daeb063..03d09b9771 100644
--- a/lib/spack/spack/test/cmd/buildcache.py
+++ b/lib/spack/spack/test/cmd/buildcache.py
@@ -3,6 +3,7 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+import errno
import platform
import pytest
@@ -11,6 +12,7 @@ import spack.main
import spack.binary_distribution
buildcache = spack.main.SpackCommand('buildcache')
+install = spack.main.SpackCommand('install')
@pytest.fixture()
@@ -41,3 +43,16 @@ def test_buildcache_list_duplicates(mock_get_specs, capsys):
output = buildcache('list', 'mpileaks', '@2.3')
assert output.count('mpileaks') == 3
+
+
+def test_buildcache_create_fail_on_perm_denied(
+ install_mockery, mock_fetch, monkeypatch, tmpdir):
+ """Ensure that buildcache create fails on permission denied error."""
+ install('trivial-install-test-package')
+
+ tmpdir.chmod(0)
+ with pytest.raises(OSError) as error:
+ buildcache('create', '-d', str(tmpdir),
+ '--unsigned', 'trivial-install-test-package')
+ assert error.value.errno == errno.EACCES
+ tmpdir.chmod(0o700)
diff --git a/lib/spack/spack/test/cmd/dependencies.py b/lib/spack/spack/test/cmd/dependencies.py
index fc47069181..05d0556936 100644
--- a/lib/spack/spack/test/cmd/dependencies.py
+++ b/lib/spack/spack/test/cmd/dependencies.py
@@ -17,7 +17,7 @@ mpis = ['mpich', 'mpich2', 'multi-provider-mpi', 'zmpi']
mpi_deps = ['fake']
-def test_immediate_dependencies(mock_packages):
+def test_direct_dependencies(mock_packages):
out = dependencies('mpileaks')
actual = set(re.split(r'\s+', out.strip()))
expected = set(['callpath'] + mpis)
@@ -47,7 +47,7 @@ def test_transitive_dependencies_with_deptypes(mock_packages):
@pytest.mark.db
-def test_immediate_installed_dependencies(mock_packages, database):
+def test_direct_installed_dependencies(mock_packages, database):
with color_when(False):
out = dependencies('--installed', 'mpileaks^mpich')
diff --git a/lib/spack/spack/test/cmd/mirror.py b/lib/spack/spack/test/cmd/mirror.py
index d62d7df432..4bb4fad224 100644
--- a/lib/spack/spack/test/cmd/mirror.py
+++ b/lib/spack/spack/test/cmd/mirror.py
@@ -66,6 +66,29 @@ def test_mirror_from_env(tmpdir, mock_packages, mock_fetch, config,
assert mirror_res == expected
+@pytest.fixture
+def source_for_pkg_with_hash(mock_packages, tmpdir):
+ pkg = spack.repo.get('trivial-pkg-with-valid-hash')
+ local_url_basename = os.path.basename(pkg.url)
+ local_path = os.path.join(str(tmpdir), local_url_basename)
+ with open(local_path, 'w') as f:
+ f.write(pkg.hashed_content)
+ local_url = "file://" + local_path
+ pkg.versions[spack.version.Version('1.0')]['url'] = local_url
+
+
+def test_mirror_skip_unstable(tmpdir_factory, mock_packages, config,
+ source_for_pkg_with_hash):
+ mirror_dir = str(tmpdir_factory.mktemp('mirror-dir'))
+
+ specs = [spack.spec.Spec(x).concretized() for x in
+ ['git-test', 'trivial-pkg-with-valid-hash']]
+ spack.mirror.create(mirror_dir, specs, skip_unstable_versions=True)
+
+ assert (set(os.listdir(mirror_dir)) - set(['_source-cache']) ==
+ set(['trivial-pkg-with-valid-hash']))
+
+
def test_mirror_crud(tmp_scope, capsys):
with capsys.disabled():
mirror('add', '--scope', tmp_scope, 'mirror', 'http://spack.io')
diff --git a/lib/spack/spack/test/config.py b/lib/spack/spack/test/config.py
index feb2b9cae4..b8598616d5 100644
--- a/lib/spack/spack/test/config.py
+++ b/lib/spack/spack/test/config.py
@@ -46,7 +46,19 @@ config_merge_list = {
config_override_list = {
'config': {
- 'build_stage:': ['patha', 'pathb']}}
+ 'build_stage:': ['pathd', 'pathe']}}
+
+config_merge_dict = {
+ 'config': {
+ 'info': {
+ 'a': 3,
+ 'b': 4}}}
+
+config_override_dict = {
+ 'config': {
+ 'info:': {
+ 'a': 7,
+ 'c': 9}}}
@pytest.fixture()
@@ -382,7 +394,7 @@ def test_read_config_override_list(mock_low_high_config, write_config_file):
write_config_file('config', config_override_list, 'high')
assert spack.config.get('config') == {
'install_tree': 'install_tree_path',
- 'build_stage': ['patha', 'pathb']
+ 'build_stage': config_override_list['config']['build_stage:']
}
@@ -857,3 +869,74 @@ def test_dotkit_in_config_does_not_raise(
# we throw a a deprecation warning without raising
assert '_sp_sys_type' in captured[0] # stdout
assert 'Warning' in captured[1] # stderr
+
+
+def test_internal_config_section_override(mock_low_high_config,
+ write_config_file):
+ write_config_file('config', config_merge_list, 'low')
+ wanted_list = config_override_list['config']['build_stage:']
+ mock_low_high_config.push_scope(spack.config.InternalConfigScope
+ ('high', {
+ 'config:': {
+ 'build_stage': wanted_list
+ }
+ }))
+ assert mock_low_high_config.get('config:build_stage') == wanted_list
+
+
+def test_internal_config_dict_override(mock_low_high_config,
+ write_config_file):
+ write_config_file('config', config_merge_dict, 'low')
+ wanted_dict = config_override_dict['config']['info:']
+ mock_low_high_config.push_scope(spack.config.InternalConfigScope
+ ('high', config_override_dict))
+ assert mock_low_high_config.get('config:info') == wanted_dict
+
+
+def test_internal_config_list_override(mock_low_high_config,
+ write_config_file):
+ write_config_file('config', config_merge_list, 'low')
+ wanted_list = config_override_list['config']['build_stage:']
+ mock_low_high_config.push_scope(spack.config.InternalConfigScope
+ ('high', config_override_list))
+ assert mock_low_high_config.get('config:build_stage') == wanted_list
+
+
+def test_set_section_override(mock_low_high_config, write_config_file):
+ write_config_file('config', config_merge_list, 'low')
+ wanted_list = config_override_list['config']['build_stage:']
+ with spack.config.override('config::build_stage', wanted_list):
+ assert mock_low_high_config.get('config:build_stage') == wanted_list
+ assert config_merge_list['config']['build_stage'] == \
+ mock_low_high_config.get('config:build_stage')
+
+
+def test_set_list_override(mock_low_high_config, write_config_file):
+ write_config_file('config', config_merge_list, 'low')
+ wanted_list = config_override_list['config']['build_stage:']
+ with spack.config.override('config:build_stage:', wanted_list):
+ assert wanted_list == mock_low_high_config.get('config:build_stage')
+ assert config_merge_list['config']['build_stage'] == \
+ mock_low_high_config.get('config:build_stage')
+
+
+def test_set_dict_override(mock_low_high_config, write_config_file):
+ write_config_file('config', config_merge_dict, 'low')
+ wanted_dict = config_override_dict['config']['info:']
+ with spack.config.override('config:info:', wanted_dict):
+ assert wanted_dict == mock_low_high_config.get('config:info')
+ assert config_merge_dict['config']['info'] == \
+ mock_low_high_config.get('config:info')
+
+
+def test_set_bad_path(config):
+ with pytest.raises(syaml.SpackYAMLError, match='Illegal leading'):
+ with spack.config.override(':bad:path', ''):
+ pass
+
+
+def test_bad_path_double_override(config):
+ with pytest.raises(syaml.SpackYAMLError,
+ match='Meaningless second override'):
+ with spack.config.override('bad::double:override::directive', ''):
+ pass
diff --git a/lib/spack/spack/test/conftest.py b/lib/spack/spack/test/conftest.py
index 04e870d336..6703742142 100644
--- a/lib/spack/spack/test/conftest.py
+++ b/lib/spack/spack/test/conftest.py
@@ -525,6 +525,8 @@ def database(mock_store, mock_packages, config):
"""This activates the mock store, packages, AND config."""
with use_store(mock_store):
yield mock_store.db
+ # Force reading the database again between tests
+ mock_store.db.last_seen_verifier = ''
@pytest.fixture(scope='function')
diff --git a/lib/spack/spack/test/database.py b/lib/spack/spack/test/database.py
index 88e6c42693..28311c7501 100644
--- a/lib/spack/spack/test/database.py
+++ b/lib/spack/spack/test/database.py
@@ -13,6 +13,12 @@ import multiprocessing
import os
import pytest
import json
+try:
+ import uuid
+ _use_uuid = True
+except ImportError:
+ _use_uuid = False
+ pass
import llnl.util.lock as lk
from llnl.util.tty.colify import colify
@@ -469,6 +475,21 @@ def test_015_write_and_read(mutable_database):
assert new_rec.installed == rec.installed
+def test_017_write_and_read_without_uuid(mutable_database, monkeypatch):
+ monkeypatch.setattr(spack.database, '_use_uuid', False)
+ # write and read DB
+ with spack.store.db.write_transaction():
+ specs = spack.store.db.query()
+ recs = [spack.store.db.get_record(s) for s in specs]
+
+ for spec, rec in zip(specs, recs):
+ new_rec = spack.store.db.get_record(spec)
+ assert new_rec.ref_count == rec.ref_count
+ assert new_rec.spec == rec.spec
+ assert new_rec.path == rec.path
+ assert new_rec.installed == rec.installed
+
+
def test_020_db_sanity(database):
"""Make sure query() returns what's actually in the db."""
_check_db_sanity(database)
@@ -703,6 +724,9 @@ def test_old_external_entries_prefix(mutable_database):
with open(spack.store.db._index_path, 'w') as f:
f.write(json.dumps(db_obj))
+ if _use_uuid:
+ with open(spack.store.db._verifier_path, 'w') as f:
+ f.write(str(uuid.uuid4()))
record = spack.store.db.get_record(s)
diff --git a/lib/spack/spack/test/mirror.py b/lib/spack/spack/test/mirror.py
index 08b32f74f1..570c329b71 100644
--- a/lib/spack/spack/test/mirror.py
+++ b/lib/spack/spack/test/mirror.py
@@ -213,7 +213,7 @@ def test_mirror_cache_symlinks(tmpdir):
"""
cosmetic_path = 'zlib/zlib-1.2.11.tar.gz'
global_path = '_source-cache/archive/c3/c3e5.tar.gz'
- cache = spack.caches.MirrorCache(str(tmpdir))
+ cache = spack.caches.MirrorCache(str(tmpdir), False)
reference = spack.mirror.MirrorReference(cosmetic_path, global_path)
cache.store(MockFetcher(), reference.storage_path)
diff --git a/lib/spack/spack/test/package_class.py b/lib/spack/spack/test/package_class.py
index b3351ffb49..d540ac663e 100644
--- a/lib/spack/spack/test/package_class.py
+++ b/lib/spack/spack/test/package_class.py
@@ -11,12 +11,17 @@ static DSL metadata for packages.
"""
import pytest
+import spack.package
import spack.repo
-@pytest.fixture
-def mpileaks_possible_deps(mock_packages):
- mpi_names = [spec.name for spec in spack.repo.path.providers_for('mpi')]
+@pytest.fixture(scope="module")
+def mpi_names(mock_repo_path):
+ return [spec.name for spec in mock_repo_path.providers_for('mpi')]
+
+
+@pytest.fixture()
+def mpileaks_possible_deps(mock_packages, mpi_names):
possible = {
'callpath': set(['dyninst'] + mpi_names),
'dyninst': set(['libdwarf', 'libelf']),
@@ -34,47 +39,72 @@ def mpileaks_possible_deps(mock_packages):
def test_possible_dependencies(mock_packages, mpileaks_possible_deps):
mpileaks = spack.repo.get('mpileaks')
- assert (mpileaks.possible_dependencies(expand_virtuals=True) ==
- mpileaks_possible_deps)
+ assert mpileaks_possible_deps == (
+ mpileaks.possible_dependencies(expand_virtuals=True))
- assert mpileaks.possible_dependencies(expand_virtuals=False) == {
- 'callpath': set(['dyninst']),
+ assert {
+ 'callpath': set(['dyninst', 'mpi']),
'dyninst': set(['libdwarf', 'libelf']),
'libdwarf': set(['libelf']),
'libelf': set(),
'mpi': set(),
- 'mpileaks': set(['callpath']),
- }
+ 'mpileaks': set(['callpath', 'mpi']),
+ } == mpileaks.possible_dependencies(expand_virtuals=False)
+
+
+def test_possible_direct_dependencies(mock_packages, mpileaks_possible_deps):
+ mpileaks = spack.repo.get('mpileaks')
+ deps = mpileaks.possible_dependencies(transitive=False,
+ expand_virtuals=False)
+
+ assert {
+ 'callpath': set(),
+ 'mpi': set(),
+ 'mpileaks': set(['callpath', 'mpi']),
+ } == deps
+
+
+def test_possible_dependencies_virtual(mock_packages, mpi_names):
+ expected = dict(
+ (name, set(spack.repo.get(name).dependencies))
+ for name in mpi_names
+ )
+
+ # only one mock MPI has a dependency
+ expected['fake'] = set()
+
+ assert expected == spack.package.possible_dependencies(
+ "mpi", transitive=False)
def test_possible_dependencies_missing(mock_packages):
md = spack.repo.get("missing-dependency")
missing = {}
md.possible_dependencies(transitive=True, missing=missing)
- assert missing["missing-dependency"] == set([
+ assert set([
"this-is-a-missing-dependency"
- ])
+ ]) == missing["missing-dependency"]
def test_possible_dependencies_with_deptypes(mock_packages):
dtbuild1 = spack.repo.get('dtbuild1')
- assert dtbuild1.possible_dependencies(deptype=('link', 'run')) == {
+ assert {
'dtbuild1': set(['dtrun2', 'dtlink2']),
'dtlink2': set(),
'dtrun2': set(),
- }
+ } == dtbuild1.possible_dependencies(deptype=('link', 'run'))
- assert dtbuild1.possible_dependencies(deptype=('build')) == {
+ assert {
'dtbuild1': set(['dtbuild2', 'dtlink2']),
'dtbuild2': set(),
'dtlink2': set(),
- }
+ } == dtbuild1.possible_dependencies(deptype=('build'))
- assert dtbuild1.possible_dependencies(deptype=('link')) == {
+ assert {
'dtbuild1': set(['dtlink2']),
'dtlink2': set(),
- }
+ } == dtbuild1.possible_dependencies(deptype=('link'))
def test_possible_dependencies_with_multiple_classes(
@@ -88,4 +118,4 @@ def test_possible_dependencies_with_multiple_classes(
'dt-diamond-bottom': set(),
})
- assert spack.package.possible_dependencies(*pkgs) == expected
+ assert expected == spack.package.possible_dependencies(*pkgs)
diff --git a/lib/spack/spack/test/packages.py b/lib/spack/spack/test/packages.py
index 299c56481e..ffaad396c1 100644
--- a/lib/spack/spack/test/packages.py
+++ b/lib/spack/spack/test/packages.py
@@ -402,3 +402,24 @@ def test_bundle_patch_directive(mock_directive_bundle,
match="Patches are not allowed"):
patch = spack.directives.patch('mock/patch.txt')
patch(mock_directive_bundle)
+
+
+def test_fetch_options(mock_packages, config):
+ """Test fetch options inference."""
+
+ pkg = spack.repo.get('fetch-options')
+
+ fetcher = spack.fetch_strategy.for_package_version(pkg, '1.0')
+ assert isinstance(fetcher, spack.fetch_strategy.URLFetchStrategy)
+ assert fetcher.digest == 'abc10'
+ assert fetcher.extra_options == {'timeout': 42, 'cookie': 'foobar'}
+
+ fetcher = spack.fetch_strategy.for_package_version(pkg, '1.1')
+ assert isinstance(fetcher, spack.fetch_strategy.URLFetchStrategy)
+ assert fetcher.digest == 'abc11'
+ assert fetcher.extra_options == {'timeout': 65}
+
+ fetcher = spack.fetch_strategy.for_package_version(pkg, '1.2')
+ assert isinstance(fetcher, spack.fetch_strategy.URLFetchStrategy)
+ assert fetcher.digest == 'abc12'
+ assert fetcher.extra_options == {'cookie': 'baz'}
diff --git a/lib/spack/spack/test/packaging.py b/lib/spack/spack/test/packaging.py
index 39d12df7b7..39da7c3ae5 100644
--- a/lib/spack/spack/test/packaging.py
+++ b/lib/spack/spack/test/packaging.py
@@ -8,10 +8,11 @@ This test checks the binary packaging infrastructure
"""
import os
import stat
-import sys
import shutil
import pytest
import argparse
+import re
+import platform
from llnl.util.filesystem import mkdirp
@@ -19,16 +20,17 @@ import spack.repo
import spack.store
import spack.binary_distribution as bindist
import spack.cmd.buildcache as buildcache
-import spack.util.gpg
from spack.spec import Spec
from spack.paths import mock_gpg_keys_path
from spack.fetch_strategy import URLFetchStrategy, FetchStrategyComposite
from spack.relocate import needs_binary_relocation, needs_text_relocation
-from spack.relocate import strings_contains_installroot
-from spack.relocate import get_patchelf, relocate_text, relocate_links
-from spack.relocate import substitute_rpath, get_relative_rpaths
-from spack.relocate import macho_replace_paths, macho_make_paths_relative
-from spack.relocate import modify_macho_object, macho_get_paths
+from spack.relocate import relocate_text, relocate_links
+from spack.relocate import get_relative_elf_rpaths
+from spack.relocate import get_normalized_elf_rpaths
+from spack.relocate import macho_make_paths_relative
+from spack.relocate import macho_make_paths_normal
+from spack.relocate import set_placeholder, macho_find_paths
+from spack.relocate import file_is_relocatable
def has_gpg():
@@ -50,9 +52,9 @@ def fake_fetchify(url, pkg):
@pytest.mark.usefixtures('install_mockery', 'mock_gnupghome')
def test_buildcache(mock_archive, tmpdir):
# tweak patchelf to only do a download
- spec = Spec("patchelf")
- spec.concretize()
- pkg = spack.repo.get(spec)
+ pspec = Spec("patchelf")
+ pspec.concretize()
+ pkg = spack.repo.get(pspec)
fake_fetchify(pkg.fetcher, pkg)
mkdirp(os.path.join(pkg.prefix, "bin"))
patchelfscr = os.path.join(pkg.prefix, "bin", "patchelf")
@@ -71,7 +73,7 @@ echo $PATH"""
pkg = spec.package
fake_fetchify(mock_archive.url, pkg)
pkg.do_install()
- pkghash = '/' + spec.dag_hash(7)
+ pkghash = '/' + str(spec.dag_hash(7))
# Put some non-relocatable file in there
filename = os.path.join(spec.prefix, "dummy.txt")
@@ -99,88 +101,69 @@ echo $PATH"""
parser = argparse.ArgumentParser()
buildcache.setup_parser(parser)
+ create_args = ['create', '-a', '-f', '-d', mirror_path, pkghash]
# Create a private key to sign package with if gpg2 available
if spack.util.gpg.Gpg.gpg():
spack.util.gpg.Gpg.create(name='test key 1', expires='0',
email='spack@googlegroups.com',
comment='Spack test key')
- # Create build cache with signing
- args = parser.parse_args(['create', '-d', mirror_path, str(spec)])
- buildcache.buildcache(parser, args)
-
- # Uninstall the package
- pkg.do_uninstall(force=True)
-
- # test overwrite install
- args = parser.parse_args(['install', '-f', str(pkghash)])
- buildcache.buildcache(parser, args)
-
- files = os.listdir(spec.prefix)
+ else:
+ create_args.insert(create_args.index('-a'), '-u')
- # create build cache with relative path and signing
- args = parser.parse_args(
- ['create', '-d', mirror_path, '-f', '-r', str(spec)])
- buildcache.buildcache(parser, args)
+ args = parser.parse_args(create_args)
+ buildcache.buildcache(parser, args)
+ # trigger overwrite warning
+ buildcache.buildcache(parser, args)
- # Uninstall the package
- pkg.do_uninstall(force=True)
+ # Uninstall the package
+ pkg.do_uninstall(force=True)
- # install build cache with verification
- args = parser.parse_args(['install', str(spec)])
- buildcache.install_tarball(spec, args)
+ install_args = ['install', '-a', '-f', pkghash]
+ if not spack.util.gpg.Gpg.gpg():
+ install_args.insert(install_args.index('-a'), '-u')
+ args = parser.parse_args(install_args)
+ # Test install
+ buildcache.buildcache(parser, args)
- # test overwrite install
- args = parser.parse_args(['install', '-f', str(pkghash)])
- buildcache.buildcache(parser, args)
+ files = os.listdir(spec.prefix)
- else:
- # create build cache without signing
- args = parser.parse_args(
- ['create', '-d', mirror_path, '-f', '-u', str(spec)])
- buildcache.buildcache(parser, args)
-
- # Uninstall the package
- pkg.do_uninstall(force=True)
-
- # install build cache without verification
- args = parser.parse_args(['install', '-u', str(spec)])
- buildcache.install_tarball(spec, args)
-
- files = os.listdir(spec.prefix)
- assert 'link_to_dummy.txt' in files
- assert 'dummy.txt' in files
- # test overwrite install without verification
- args = parser.parse_args(['install', '-f', '-u', str(pkghash)])
- buildcache.buildcache(parser, args)
-
- # create build cache with relative path
- args = parser.parse_args(
- ['create', '-d', mirror_path, '-f', '-r', '-u', str(pkghash)])
- buildcache.buildcache(parser, args)
-
- # Uninstall the package
- pkg.do_uninstall(force=True)
-
- # install build cache
- args = parser.parse_args(['install', '-u', str(spec)])
- buildcache.install_tarball(spec, args)
-
- # test overwrite install
- args = parser.parse_args(['install', '-f', '-u', str(pkghash)])
- buildcache.buildcache(parser, args)
-
- files = os.listdir(spec.prefix)
- assert 'link_to_dummy.txt' in files
- assert 'dummy.txt' in files
- assert os.path.realpath(
- os.path.join(spec.prefix, 'link_to_dummy.txt')
- ) == os.path.realpath(os.path.join(spec.prefix, 'dummy.txt'))
+ assert 'link_to_dummy.txt' in files
+ assert 'dummy.txt' in files
# Validate the relocation information
buildinfo = bindist.read_buildinfo_file(spec.prefix)
assert(buildinfo['relocate_textfiles'] == ['dummy.txt'])
assert(buildinfo['relocate_links'] == ['link_to_dummy.txt'])
+ # create build cache with relative path
+ create_args.insert(create_args.index('-a'), '-f')
+ create_args.insert(create_args.index('-a'), '-r')
+ args = parser.parse_args(create_args)
+ buildcache.buildcache(parser, args)
+
+ # Uninstall the package
+ pkg.do_uninstall(force=True)
+
+ if not spack.util.gpg.Gpg.gpg():
+ install_args.insert(install_args.index('-a'), '-u')
+ args = parser.parse_args(install_args)
+ buildcache.buildcache(parser, args)
+
+ # test overwrite install
+ install_args.insert(install_args.index('-a'), '-f')
+ args = parser.parse_args(install_args)
+ buildcache.buildcache(parser, args)
+
+ files = os.listdir(spec.prefix)
+ assert 'link_to_dummy.txt' in files
+ assert 'dummy.txt' in files
+# assert os.path.realpath(
+# os.path.join(spec.prefix, 'link_to_dummy.txt')
+# ) == os.path.realpath(os.path.join(spec.prefix, 'dummy.txt'))
+
+ args = parser.parse_args(['keys'])
+ buildcache.buildcache(parser, args)
+
args = parser.parse_args(['list'])
buildcache.buildcache(parser, args)
@@ -200,6 +183,9 @@ echo $PATH"""
args = parser.parse_args(['keys', '-f'])
buildcache.buildcache(parser, args)
+ args = parser.parse_args(['keys', '-i', '-t'])
+ buildcache.buildcache(parser, args)
+
# unregister mirror with spack config
mirrors = {}
spack.config.set('mirrors', mirrors)
@@ -210,7 +196,10 @@ echo $PATH"""
bindist._cached_specs = set()
+@pytest.mark.usefixtures('install_mockery')
def test_relocate_text(tmpdir):
+ spec = Spec('trivial-install-test-package')
+ spec.concretize()
with tmpdir.as_cwd():
# Validate the text path replacement
old_dir = '/home/spack/opt/spack'
@@ -220,24 +209,46 @@ def test_relocate_text(tmpdir):
script.close()
filenames = [filename]
new_dir = '/opt/rh/devtoolset/'
- relocate_text(filenames, oldpath=old_dir, newpath=new_dir,
- oldprefix=old_dir, newprefix=new_dir)
+ relocate_text(filenames, old_dir, new_dir,
+ old_dir, new_dir,
+ old_dir, new_dir,
+ {old_dir: new_dir})
with open(filename, "r")as script:
for line in script:
assert(new_dir in line)
- assert(strings_contains_installroot(filename, old_dir) is False)
+ assert(file_is_relocatable(os.path.realpath(filename)))
+ # Remove cached binary specs since we deleted the mirror
+ bindist._cached_specs = set()
def test_relocate_links(tmpdir):
with tmpdir.as_cwd():
- old_dir = '/home/spack/opt/spack'
- filename = 'link.ln'
- old_src = os.path.join(old_dir, filename)
- os.symlink(old_src, filename)
- filenames = [filename]
- new_dir = '/opt/rh/devtoolset'
- relocate_links(filenames, old_dir, new_dir)
- assert os.path.realpath(filename) == os.path.join(new_dir, filename)
+ old_layout_root = os.path.join(
+ '%s' % tmpdir, 'home', 'spack', 'opt', 'spack')
+ old_install_prefix = os.path.join(
+ '%s' % old_layout_root, 'debian6', 'test')
+ old_binname = os.path.join(old_install_prefix, 'binfile')
+ placeholder = set_placeholder(old_layout_root)
+ re.sub(old_layout_root, placeholder, old_binname)
+ filenames = ['link.ln', 'outsideprefix.ln']
+ new_layout_root = os.path.join(
+ '%s' % tmpdir, 'opt', 'rh', 'devtoolset')
+ new_install_prefix = os.path.join(
+ '%s' % new_layout_root, 'test', 'debian6')
+ new_linkname = os.path.join(new_install_prefix, 'link.ln')
+ new_linkname2 = os.path.join(new_install_prefix, 'outsideprefix.ln')
+ new_binname = os.path.join(new_install_prefix, 'binfile')
+ mkdirp(new_install_prefix)
+ with open(new_binname, 'w') as f:
+ f.write('\n')
+ os.utime(new_binname, None)
+ os.symlink(old_binname, new_linkname)
+ os.symlink('/usr/lib/libc.so', new_linkname2)
+ relocate_links(filenames, old_layout_root, new_layout_root,
+ old_install_prefix, new_install_prefix,
+ {old_install_prefix: new_install_prefix})
+ assert os.readlink(new_linkname) == new_binname
+ assert os.readlink(new_linkname2) == '/usr/lib/libc.so'
def test_needs_relocation():
@@ -246,16 +257,223 @@ def test_needs_relocation():
assert needs_binary_relocation('application', 'x-executable')
assert not needs_binary_relocation('application', 'x-octet-stream')
assert not needs_binary_relocation('text', 'x-')
-
assert needs_text_relocation('text', 'x-')
assert not needs_text_relocation('symbolic link to', 'x-')
assert needs_binary_relocation('application', 'x-mach-binary')
-def test_macho_paths():
-
- out = macho_make_paths_relative('/Users/Shares/spack/pkgC/lib/libC.dylib',
+def test_replace_paths(tmpdir):
+ with tmpdir.as_cwd():
+ suffix = 'dylib' if platform.system().lower() == 'darwin' else 'so'
+ hash_a = '53moz6jwnw3xpiztxwhc4us26klribws'
+ hash_b = 'tk62dzu62kd4oh3h3heelyw23hw2sfee'
+ hash_c = 'hdkhduizmaddpog6ewdradpobnbjwsjl'
+ hash_d = 'hukkosc7ahff7o65h6cdhvcoxm57d4bw'
+ hash_loco = 'zy4oigsc4eovn5yhr2lk4aukwzoespob'
+
+ prefix2hash = dict()
+
+ old_spack_dir = os.path.join('%s' % tmpdir,
+ 'Users', 'developer', 'spack')
+ mkdirp(old_spack_dir)
+
+ oldprefix_a = os.path.join('%s' % old_spack_dir, 'pkgA-%s' % hash_a)
+ oldlibdir_a = os.path.join('%s' % oldprefix_a, 'lib')
+ mkdirp(oldlibdir_a)
+ prefix2hash[str(oldprefix_a)] = hash_a
+
+ oldprefix_b = os.path.join('%s' % old_spack_dir, 'pkgB-%s' % hash_b)
+ oldlibdir_b = os.path.join('%s' % oldprefix_b, 'lib')
+ mkdirp(oldlibdir_b)
+ prefix2hash[str(oldprefix_b)] = hash_b
+
+ oldprefix_c = os.path.join('%s' % old_spack_dir, 'pkgC-%s' % hash_c)
+ oldlibdir_c = os.path.join('%s' % oldprefix_c, 'lib')
+ oldlibdir_cc = os.path.join('%s' % oldlibdir_c, 'C')
+ mkdirp(oldlibdir_c)
+ prefix2hash[str(oldprefix_c)] = hash_c
+
+ oldprefix_d = os.path.join('%s' % old_spack_dir, 'pkgD-%s' % hash_d)
+ oldlibdir_d = os.path.join('%s' % oldprefix_d, 'lib')
+ mkdirp(oldlibdir_d)
+ prefix2hash[str(oldprefix_d)] = hash_d
+
+ oldprefix_local = os.path.join('%s' % tmpdir, 'usr', 'local')
+ oldlibdir_local = os.path.join('%s' % oldprefix_local, 'lib')
+ mkdirp(oldlibdir_local)
+ prefix2hash[str(oldprefix_local)] = hash_loco
+ libfile_a = 'libA.%s' % suffix
+ libfile_b = 'libB.%s' % suffix
+ libfile_c = 'libC.%s' % suffix
+ libfile_d = 'libD.%s' % suffix
+ libfile_loco = 'libloco.%s' % suffix
+ old_libnames = [os.path.join(oldlibdir_a, libfile_a),
+ os.path.join(oldlibdir_b, libfile_b),
+ os.path.join(oldlibdir_c, libfile_c),
+ os.path.join(oldlibdir_d, libfile_d),
+ os.path.join(oldlibdir_local, libfile_loco)]
+
+ for old_libname in old_libnames:
+ with open(old_libname, 'a'):
+ os.utime(old_libname, None)
+
+ hash2prefix = dict()
+
+ new_spack_dir = os.path.join('%s' % tmpdir, 'Users', 'Shared',
+ 'spack')
+ mkdirp(new_spack_dir)
+
+ prefix_a = os.path.join(new_spack_dir, 'pkgA-%s' % hash_a)
+ libdir_a = os.path.join(prefix_a, 'lib')
+ mkdirp(libdir_a)
+ hash2prefix[hash_a] = str(prefix_a)
+
+ prefix_b = os.path.join(new_spack_dir, 'pkgB-%s' % hash_b)
+ libdir_b = os.path.join(prefix_b, 'lib')
+ mkdirp(libdir_b)
+ hash2prefix[hash_b] = str(prefix_b)
+
+ prefix_c = os.path.join(new_spack_dir, 'pkgC-%s' % hash_c)
+ libdir_c = os.path.join(prefix_c, 'lib')
+ libdir_cc = os.path.join(libdir_c, 'C')
+ mkdirp(libdir_cc)
+ hash2prefix[hash_c] = str(prefix_c)
+
+ prefix_d = os.path.join(new_spack_dir, 'pkgD-%s' % hash_d)
+ libdir_d = os.path.join(prefix_d, 'lib')
+ mkdirp(libdir_d)
+ hash2prefix[hash_d] = str(prefix_d)
+
+ prefix_local = os.path.join('%s' % tmpdir, 'usr', 'local')
+ libdir_local = os.path.join(prefix_local, 'lib')
+ mkdirp(libdir_local)
+ hash2prefix[hash_loco] = str(prefix_local)
+
+ new_libnames = [os.path.join(libdir_a, libfile_a),
+ os.path.join(libdir_b, libfile_b),
+ os.path.join(libdir_cc, libfile_c),
+ os.path.join(libdir_d, libfile_d),
+ os.path.join(libdir_local, libfile_loco)]
+
+ for new_libname in new_libnames:
+ with open(new_libname, 'a'):
+ os.utime(new_libname, None)
+
+ prefix2prefix = dict()
+ for prefix, hash in prefix2hash.items():
+ prefix2prefix[prefix] = hash2prefix[hash]
+
+ out_dict = macho_find_paths([oldlibdir_a, oldlibdir_b,
+ oldlibdir_c,
+ oldlibdir_cc, oldlibdir_local],
+ [os.path.join(oldlibdir_a,
+ libfile_a),
+ os.path.join(oldlibdir_b,
+ libfile_b),
+ os.path.join(oldlibdir_local,
+ libfile_loco)],
+ os.path.join(oldlibdir_cc,
+ libfile_c),
+ old_spack_dir,
+ prefix2prefix
+ )
+ assert out_dict == {oldlibdir_a: libdir_a,
+ oldlibdir_b: libdir_b,
+ oldlibdir_c: libdir_c,
+ oldlibdir_cc: libdir_cc,
+ libdir_local: libdir_local,
+ os.path.join(oldlibdir_a, libfile_a):
+ os.path.join(libdir_a, libfile_a),
+ os.path.join(oldlibdir_b, libfile_b):
+ os.path.join(libdir_b, libfile_b),
+ os.path.join(oldlibdir_local, libfile_loco):
+ os.path.join(libdir_local, libfile_loco),
+ os.path.join(oldlibdir_cc, libfile_c):
+ os.path.join(libdir_cc, libfile_c)}
+
+ out_dict = macho_find_paths([oldlibdir_a, oldlibdir_b,
+ oldlibdir_c,
+ oldlibdir_cc,
+ oldlibdir_local],
+ [os.path.join(oldlibdir_a,
+ libfile_a),
+ os.path.join(oldlibdir_b,
+ libfile_b),
+ os.path.join(oldlibdir_cc,
+ libfile_c),
+ os.path.join(oldlibdir_local,
+ libfile_loco)],
+ None,
+ old_spack_dir,
+ prefix2prefix
+ )
+ assert out_dict == {oldlibdir_a: libdir_a,
+ oldlibdir_b: libdir_b,
+ oldlibdir_c: libdir_c,
+ oldlibdir_cc: libdir_cc,
+ libdir_local: libdir_local,
+ os.path.join(oldlibdir_a, libfile_a):
+ os.path.join(libdir_a, libfile_a),
+ os.path.join(oldlibdir_b, libfile_b):
+ os.path.join(libdir_b, libfile_b),
+ os.path.join(oldlibdir_local, libfile_loco):
+ os.path.join(libdir_local, libfile_loco),
+ os.path.join(oldlibdir_cc, libfile_c):
+ os.path.join(libdir_cc, libfile_c)}
+
+ out_dict = macho_find_paths([oldlibdir_a, oldlibdir_b,
+ oldlibdir_c, oldlibdir_cc,
+ oldlibdir_local],
+ ['@rpath/%s' % libfile_a,
+ '@rpath/%s' % libfile_b,
+ '@rpath/%s' % libfile_c,
+ '@rpath/%s' % libfile_loco],
+ None,
+ old_spack_dir,
+ prefix2prefix
+ )
+
+ assert out_dict == {'@rpath/%s' % libfile_a:
+ '@rpath/%s' % libfile_a,
+ '@rpath/%s' % libfile_b:
+ '@rpath/%s' % libfile_b,
+ '@rpath/%s' % libfile_c:
+ '@rpath/%s' % libfile_c,
+ '@rpath/%s' % libfile_loco:
+ '@rpath/%s' % libfile_loco,
+ oldlibdir_a: libdir_a,
+ oldlibdir_b: libdir_b,
+ oldlibdir_c: libdir_c,
+ oldlibdir_cc: libdir_cc,
+ libdir_local: libdir_local,
+ }
+
+ out_dict = macho_find_paths([oldlibdir_a,
+ oldlibdir_b,
+ oldlibdir_d,
+ oldlibdir_local],
+ ['@rpath/%s' % libfile_a,
+ '@rpath/%s' % libfile_b,
+ '@rpath/%s' % libfile_loco],
+ None,
+ old_spack_dir,
+ prefix2prefix)
+ assert out_dict == {'@rpath/%s' % libfile_a:
+ '@rpath/%s' % libfile_a,
+ '@rpath/%s' % libfile_b:
+ '@rpath/%s' % libfile_b,
+ '@rpath/%s' % libfile_loco:
+ '@rpath/%s' % libfile_loco,
+ oldlibdir_a: libdir_a,
+ oldlibdir_b: libdir_b,
+ oldlibdir_d: libdir_d,
+ libdir_local: libdir_local,
+ }
+
+
+def test_macho_make_paths():
+ out = macho_make_paths_relative('/Users/Shared/spack/pkgC/lib/libC.dylib',
'/Users/Shared/spack',
('/Users/Shared/spack/pkgA/lib',
'/Users/Shared/spack/pkgB/lib',
@@ -264,13 +482,43 @@ def test_macho_paths():
'/Users/Shared/spack/pkgB/libB.dylib',
'/usr/local/lib/libloco.dylib'),
'/Users/Shared/spack/pkgC/lib/libC.dylib')
- assert out == (['@loader_path/../../../../Shared/spack/pkgA/lib',
- '@loader_path/../../../../Shared/spack/pkgB/lib',
- '/usr/local/lib'],
- ['@loader_path/../../../../Shared/spack/pkgA/libA.dylib',
- '@loader_path/../../../../Shared/spack/pkgB/libB.dylib',
- '/usr/local/lib/libloco.dylib'],
- '@rpath/libC.dylib')
+ assert out == {'/Users/Shared/spack/pkgA/lib':
+ '@loader_path/../../pkgA/lib',
+ '/Users/Shared/spack/pkgB/lib':
+ '@loader_path/../../pkgB/lib',
+ '/usr/local/lib': '/usr/local/lib',
+ '/Users/Shared/spack/pkgA/libA.dylib':
+ '@loader_path/../../pkgA/libA.dylib',
+ '/Users/Shared/spack/pkgB/libB.dylib':
+ '@loader_path/../../pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib':
+ '/usr/local/lib/libloco.dylib',
+ '/Users/Shared/spack/pkgC/lib/libC.dylib':
+ '@rpath/libC.dylib'}
+
+ out = macho_make_paths_normal('/Users/Shared/spack/pkgC/lib/libC.dylib',
+ ('@loader_path/../../pkgA/lib',
+ '@loader_path/../../pkgB/lib',
+ '/usr/local/lib'),
+ ('@loader_path/../../pkgA/libA.dylib',
+ '@loader_path/../../pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib'),
+ '@rpath/libC.dylib')
+
+ assert out == {'@rpath/libC.dylib':
+ '/Users/Shared/spack/pkgC/lib/libC.dylib',
+ '@loader_path/../../pkgA/lib':
+ '/Users/Shared/spack/pkgA/lib',
+ '@loader_path/../../pkgB/lib':
+ '/Users/Shared/spack/pkgB/lib',
+ '/usr/local/lib': '/usr/local/lib',
+ '@loader_path/../../pkgA/libA.dylib':
+ '/Users/Shared/spack/pkgA/libA.dylib',
+ '@loader_path/../../pkgB/libB.dylib':
+ '/Users/Shared/spack/pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib':
+ '/usr/local/lib/libloco.dylib'
+ }
out = macho_make_paths_relative('/Users/Shared/spack/pkgC/bin/exeC',
'/Users/Shared/spack',
@@ -281,98 +529,47 @@ def test_macho_paths():
'/Users/Shared/spack/pkgB/libB.dylib',
'/usr/local/lib/libloco.dylib'), None)
- assert out == (['@loader_path/../../pkgA/lib',
- '@loader_path/../../pkgB/lib',
- '/usr/local/lib'],
- ['@loader_path/../../pkgA/libA.dylib',
- '@loader_path/../../pkgB/libB.dylib',
- '/usr/local/lib/libloco.dylib'], None)
-
- out = macho_replace_paths('/Users/Shared/spack',
- '/Applications/spack',
- ('/Users/Shared/spack/pkgA/lib',
- '/Users/Shared/spack/pkgB/lib',
- '/usr/local/lib'),
- ('/Users/Shared/spack/pkgA/libA.dylib',
- '/Users/Shared/spack/pkgB/libB.dylib',
- '/usr/local/lib/libloco.dylib'),
- '/Users/Shared/spack/pkgC/lib/libC.dylib')
- assert out == (['/Applications/spack/pkgA/lib',
- '/Applications/spack/pkgB/lib',
- '/usr/local/lib'],
- ['/Applications/spack/pkgA/libA.dylib',
- '/Applications/spack/pkgB/libB.dylib',
- '/usr/local/lib/libloco.dylib'],
- '/Applications/spack/pkgC/lib/libC.dylib')
-
- out = macho_replace_paths('/Users/Shared/spack',
- '/Applications/spack',
- ('/Users/Shared/spack/pkgA/lib',
- '/Users/Shared/spack/pkgB/lib',
- '/usr/local/lib'),
- ('/Users/Shared/spack/pkgA/libA.dylib',
- '/Users/Shared/spack/pkgB/libB.dylib',
- '/usr/local/lib/libloco.dylib'),
- None)
- assert out == (['/Applications/spack/pkgA/lib',
- '/Applications/spack/pkgB/lib',
- '/usr/local/lib'],
- ['/Applications/spack/pkgA/libA.dylib',
- '/Applications/spack/pkgB/libB.dylib',
- '/usr/local/lib/libloco.dylib'],
- None)
+ assert out == {'/Users/Shared/spack/pkgA/lib':
+ '@loader_path/../../pkgA/lib',
+ '/Users/Shared/spack/pkgB/lib':
+ '@loader_path/../../pkgB/lib',
+ '/usr/local/lib': '/usr/local/lib',
+ '/Users/Shared/spack/pkgA/libA.dylib':
+ '@loader_path/../../pkgA/libA.dylib',
+ '/Users/Shared/spack/pkgB/libB.dylib':
+ '@loader_path/../../pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib':
+ '/usr/local/lib/libloco.dylib'}
+
+ out = macho_make_paths_normal('/Users/Shared/spack/pkgC/bin/exeC',
+ ('@loader_path/../../pkgA/lib',
+ '@loader_path/../../pkgB/lib',
+ '/usr/local/lib'),
+ ('@loader_path/../../pkgA/libA.dylib',
+ '@loader_path/../../pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib'),
+ None)
+
+ assert out == {'@loader_path/../../pkgA/lib':
+ '/Users/Shared/spack/pkgA/lib',
+ '@loader_path/../../pkgB/lib':
+ '/Users/Shared/spack/pkgB/lib',
+ '/usr/local/lib': '/usr/local/lib',
+ '@loader_path/../../pkgA/libA.dylib':
+ '/Users/Shared/spack/pkgA/libA.dylib',
+ '@loader_path/../../pkgB/libB.dylib':
+ '/Users/Shared/spack/pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib':
+ '/usr/local/lib/libloco.dylib'}
def test_elf_paths():
- out = get_relative_rpaths(
+ out = get_relative_elf_rpaths(
'/usr/bin/test', '/usr',
('/usr/lib', '/usr/lib64', '/opt/local/lib'))
assert out == ['$ORIGIN/../lib', '$ORIGIN/../lib64', '/opt/local/lib']
- out = substitute_rpath(
- ('/usr/lib', '/usr/lib64', '/opt/local/lib'), '/usr', '/opt')
- assert out == ['/opt/lib', '/opt/lib64', '/opt/local/lib']
-
-
-@pytest.mark.skipif(sys.platform != 'darwin',
- reason="only works with Mach-o objects")
-def test_relocate_macho(tmpdir):
- with tmpdir.as_cwd():
-
- get_patchelf() # this does nothing on Darwin
-
- rpaths, deps, idpath = macho_get_paths('/bin/bash')
- nrpaths, ndeps, nid = macho_make_paths_relative('/bin/bash', '/usr',
- rpaths, deps, idpath)
- shutil.copyfile('/bin/bash', 'bash')
- modify_macho_object('bash',
- rpaths, deps, idpath,
- nrpaths, ndeps, nid)
-
- rpaths, deps, idpath = macho_get_paths('/bin/bash')
- nrpaths, ndeps, nid = macho_replace_paths('/usr', '/opt',
- rpaths, deps, idpath)
- shutil.copyfile('/bin/bash', 'bash')
- modify_macho_object('bash',
- rpaths, deps, idpath,
- nrpaths, ndeps, nid)
-
- path = '/usr/lib/libncurses.5.4.dylib'
- rpaths, deps, idpath = macho_get_paths(path)
- nrpaths, ndeps, nid = macho_make_paths_relative(path, '/usr',
- rpaths, deps, idpath)
- shutil.copyfile(
- '/usr/lib/libncurses.5.4.dylib', 'libncurses.5.4.dylib')
- modify_macho_object('libncurses.5.4.dylib',
- rpaths, deps, idpath,
- nrpaths, ndeps, nid)
-
- rpaths, deps, idpath = macho_get_paths(path)
- nrpaths, ndeps, nid = macho_replace_paths('/usr', '/opt',
- rpaths, deps, idpath)
- shutil.copyfile(
- '/usr/lib/libncurses.5.4.dylib', 'libncurses.5.4.dylib')
- modify_macho_object(
- 'libncurses.5.4.dylib',
- rpaths, deps, idpath,
- nrpaths, ndeps, nid)
+ out = get_normalized_elf_rpaths(
+ '/usr/bin/test',
+ ['$ORIGIN/../lib', '$ORIGIN/../lib64', '/opt/local/lib'])
+ assert out == ['/usr/lib', '/usr/lib64', '/opt/local/lib']
diff --git a/lib/spack/spack/test/url_fetch.py b/lib/spack/spack/test/url_fetch.py
index 679240049d..20648b4766 100644
--- a/lib/spack/spack/test/url_fetch.py
+++ b/lib/spack/spack/test/url_fetch.py
@@ -26,10 +26,10 @@ def checksum_type(request):
@pytest.fixture
def pkg_factory():
Pkg = collections.namedtuple(
- 'Pkg', ['url_for_version', 'urls', 'url', 'versions']
+ 'Pkg', ['url_for_version', 'urls', 'url', 'versions', 'fetch_options']
)
- def factory(url, urls):
+ def factory(url, urls, fetch_options={}):
def fn(v):
main_url = url or urls[0]
@@ -37,7 +37,8 @@ def pkg_factory():
return Pkg(
url_for_version=fn, url=url, urls=urls,
- versions=collections.defaultdict(dict)
+ versions=collections.defaultdict(dict),
+ fetch_options=fetch_options
)
return factory
@@ -130,6 +131,10 @@ def test_from_list_url(mock_packages, config, spec, url, digest):
assert isinstance(fetch_strategy, fs.URLFetchStrategy)
assert os.path.basename(fetch_strategy.url) == url
assert fetch_strategy.digest == digest
+ assert fetch_strategy.extra_options == {}
+ pkg.fetch_options = {'timeout': 60}
+ fetch_strategy = fs.from_list_url(pkg)
+ assert fetch_strategy.extra_options == {'timeout': 60}
def test_from_list_url_unspecified(mock_packages, config):
@@ -142,6 +147,10 @@ def test_from_list_url_unspecified(mock_packages, config):
assert isinstance(fetch_strategy, fs.URLFetchStrategy)
assert os.path.basename(fetch_strategy.url) == 'foo-2.0.0.tar.gz'
assert fetch_strategy.digest is None
+ assert fetch_strategy.extra_options == {}
+ pkg.fetch_options = {'timeout': 60}
+ fetch_strategy = fs.from_list_url(pkg)
+ assert fetch_strategy.extra_options == {'timeout': 60}
def test_nosource_from_list_url(mock_packages, config):
@@ -191,3 +200,7 @@ def test_candidate_urls(pkg_factory, url, urls, version, expected):
pkg = pkg_factory(url, urls)
f = fs._from_merged_attrs(fs.URLFetchStrategy, pkg, version)
assert f.candidate_urls == expected
+ assert f.extra_options == {}
+ pkg = pkg_factory(url, urls, fetch_options={'timeout': 60})
+ f = fs._from_merged_attrs(fs.URLFetchStrategy, pkg, version)
+ assert f.extra_options == {'timeout': 60}
diff --git a/lib/spack/spack/util/compression.py b/lib/spack/spack/util/compression.py
index d617954ab1..1688b49f1b 100644
--- a/lib/spack/spack/util/compression.py
+++ b/lib/spack/spack/util/compression.py
@@ -32,6 +32,9 @@ def decompressor_for(path, extension=None):
if extension and re.match(r'gz', extension):
gunzip = which('gunzip', required=True)
return gunzip
+ if extension and re.match(r'bz2', extension):
+ bunzip2 = which('bunzip2', required=True)
+ return bunzip2
tar = which('tar', required=True)
tar.add_default_arg('-xf')
return tar
diff --git a/lib/spack/spack/util/web.py b/lib/spack/spack/util/web.py
index 4fb8c5a591..8039dc5fda 100644
--- a/lib/spack/spack/util/web.py
+++ b/lib/spack/spack/util/web.py
@@ -205,6 +205,8 @@ def push_to_url(
# needs to be done in separate steps.
shutil.copy2(local_file_path, remote_file_path)
os.remove(local_file_path)
+ else:
+ raise
elif remote_url.scheme == 's3':
if extra_args is None:
diff --git a/share/spack/spack-completion.bash b/share/spack/spack-completion.bash
index 8f677adbf9..38788438f7 100755
--- a/share/spack/spack-completion.bash
+++ b/share/spack/spack-completion.bash
@@ -382,7 +382,7 @@ _spack_buildcache() {
_spack_buildcache_create() {
if $list_options
then
- SPACK_COMPREPLY="-h --help -r --rel -f --force -u --unsigned -a --allow-root -k --key -d --directory --no-rebuild-index -y --spec-yaml --no-deps"
+ SPACK_COMPREPLY="-h --help -r --rel -f --force -u --unsigned -a --allow-root -k --key -d --directory -m --mirror-name --mirror-url --no-rebuild-index -y --spec-yaml --only"
else
_all_packages
fi
@@ -391,7 +391,7 @@ _spack_buildcache_create() {
_spack_buildcache_install() {
if $list_options
then
- SPACK_COMPREPLY="-h --help -f --force -m --multiple -a --allow-root -u --unsigned"
+ SPACK_COMPREPLY="-h --help -f --force -m --multiple -a --allow-root -u --unsigned -o --otherarch"
else
_all_packages
fi
@@ -1025,7 +1025,7 @@ _spack_mirror() {
_spack_mirror_create() {
if $list_options
then
- SPACK_COMPREPLY="-h --help -d --directory -a --all -f --file -D --dependencies -n --versions-per-spec"
+ SPACK_COMPREPLY="-h --help -d --directory -a --all -f --file --skip-unstable-versions -D --dependencies -n --versions-per-spec"
else
_all_packages
fi
diff --git a/var/spack/repos/builtin.mock/packages/cmake-client/package.py b/var/spack/repos/builtin.mock/packages/cmake-client/package.py
index 286ee08086..2350259b22 100644
--- a/var/spack/repos/builtin.mock/packages/cmake-client/package.py
+++ b/var/spack/repos/builtin.mock/packages/cmake-client/package.py
@@ -21,6 +21,14 @@ class CmakeClient(CMakePackage):
version('1.0', '4cb3ff35b2472aae70f542116d616e63')
+ variant(
+ 'multi', description='',
+ values=any_combination_of('up', 'right', 'back').with_default('up')
+ )
+ variant('single', description='', default='blue',
+ values=('blue', 'red', 'green'), multi=False)
+ variant('truthy', description='', default=True)
+
callback_counter = 0
flipped = False
diff --git a/var/spack/repos/builtin.mock/packages/fetch-options/package.py b/var/spack/repos/builtin.mock/packages/fetch-options/package.py
new file mode 100644
index 0000000000..1a31a535e1
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/fetch-options/package.py
@@ -0,0 +1,22 @@
+# Copyright 2013-2020 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 import *
+
+
+class FetchOptions(Package):
+ """Mock package with fetch_options."""
+
+ homepage = "http://www.fetch-options-example.com"
+
+ url = 'https://example.com/some/tarball-1.0.tar.gz'
+
+ fetch_options = {'timeout': 42, 'cookie': 'foobar'}
+ timeout = {'timeout': 65}
+ cookie = {'cookie': 'baz'}
+
+ version('1.2', 'abc12', fetch_options=cookie)
+ version('1.1', 'abc11', fetch_options=timeout)
+ version('1.0', 'abc10')
diff --git a/var/spack/repos/builtin.mock/packages/trivial-pkg-with-valid-hash/package.py b/var/spack/repos/builtin.mock/packages/trivial-pkg-with-valid-hash/package.py
new file mode 100644
index 0000000000..52fd3d99a6
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/trivial-pkg-with-valid-hash/package.py
@@ -0,0 +1,17 @@
+# Copyright 2013-2020 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 import *
+
+
+class TrivialPkgWithValidHash(Package):
+ url = "http://www.unit-test-should-replace-this-url/trivial_install-1.0"
+
+ version('1.0', '6ae8a75555209fd6c44157c0aed8016e763ff435a19cf186f76863140143ff72', expand=False)
+
+ hashed_content = "test content"
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin/packages/acl/package.py b/var/spack/repos/builtin/packages/acl/package.py
new file mode 100644
index 0000000000..ea9bf4172f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/acl/package.py
@@ -0,0 +1,30 @@
+# Copyright 2013-2020 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 import *
+
+
+class Acl(AutotoolsPackage):
+ """Commands for Manipulating POSIX Access Control Lists."""
+
+ homepage = "https://savannah.nongnu.org/projects/acl"
+ url = "http://git.savannah.nongnu.org/cgit/acl.git/snapshot/acl-2.2.53.tar.gz"
+
+ version('2.2.53', sha256='9e905397ac10d06768c63edd0579c34b8431555f2ea8e8f2cee337b31f856805')
+ version('2.2.52', sha256='f3f31d2229c903184ff877aa0ee658b87ec20fec8aebb51e65eaa68d7b24e629')
+ version('2.2.51', sha256='31a43d96a274a39bfcb805fb903d45840515344884d224cef166b482693a9f48')
+ version('2.2.50', sha256='39e21d623a9f0da8c042cde346c01871b498d51400e92c2ab1490d5ffd724401')
+ version('2.2.49', sha256='c6e01460cac4e47673dd60a7f57b970b49f6998bb564eff141cca129aa8940d1')
+ version('2.2.48', sha256='877eaeccc1500baec58391935b46ac7dfc5ffd8c54fbc0385ccd8b2b18ac3fa6')
+
+ depends_on('m4', type='build')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('attr')
+
+ def autoreconf(self, spec, prefix):
+ bash = which('bash')
+ bash('./autogen.sh')
diff --git a/var/spack/repos/builtin/packages/acts-core/package.py b/var/spack/repos/builtin/packages/acts-core/package.py
index 1cd9fe6375..421a931604 100644
--- a/var/spack/repos/builtin/packages/acts-core/package.py
+++ b/var/spack/repos/builtin/packages/acts-core/package.py
@@ -34,6 +34,8 @@ class ActsCore(CMakePackage):
maintainers = ['HadrienG2']
version('develop', branch='master')
+ version('0.18.0', commit='d58a68cf75b52a5e0f563bc237f09250aa9da80c')
+ version('0.17.0', commit='0789f654ff484b013fd27e5023cf342785ea8d97')
version('0.16.0', commit='b3d965fe0b8ae335909d79114ef261c6b996773a')
version('0.15.0', commit='267c28f69c561e64369661a6235b03b5a610d6da')
version('0.14.0', commit='38d678fcb205b77d60326eae913fbb1b054acea1')
@@ -75,7 +77,8 @@ class ActsCore(CMakePackage):
depends_on('cmake @3.11:', type='build')
depends_on('boost @1.62:1.69.99 +program_options +test', when='@:0.10.3')
- depends_on('boost @1.62: +program_options +test', when='@0.10.4:')
+ depends_on('boost @1.62: +program_options +test', when='@0.10.4:0.18.0')
+ depends_on('boost @1.69: +program_options +test', when='@0.19.0:')
depends_on('eigen @3.2.9:', type='build')
depends_on('nlohmann-json @3.2.0:', when='@0.14.0: +json')
depends_on('root @6.10: cxxstd=14', when='+tgeo @:0.8.0')
diff --git a/var/spack/repos/builtin/packages/adios2/package.py b/var/spack/repos/builtin/packages/adios2/package.py
index c9e32faec5..9d298b4213 100644
--- a/var/spack/repos/builtin/packages/adios2/package.py
+++ b/var/spack/repos/builtin/packages/adios2/package.py
@@ -16,7 +16,7 @@ class Adios2(CMakePackage):
maintainers = ['ax3l', 'chuckatkins', 'williamfgc']
- version('develop', branch='master')
+ version('master', branch='master')
version('2.5.0', sha256='7c8ff3bf5441dd662806df9650c56a669359cb0185ea232ecb3578de7b065329')
version('2.4.0', sha256='50ecea04b1e41c88835b4b3fd4e7bf0a0a2a3129855c9cc4ba6cf6a1575106e2')
version('2.3.1', sha256='3bf81ccc20a7f2715935349336a76ba4c8402355e1dc3848fcd6f4c3c5931893')
@@ -100,8 +100,12 @@ class Adios2(CMakePackage):
extends('python', when='+python')
depends_on('python@2.7:2.8,3.5:',
- when='@:2.4.0 +python', type=('build', 'run'))
- depends_on('python@3.5:', when='@2.5.0: +python', type=('build', 'run'))
+ when='@:2.4.0 +python',
+ type=('build', 'run'))
+ depends_on('python@3.5:', when='@2.5.0: +python',
+ type=('build', 'run'))
+ depends_on('python@2.7:2.8,3.5:', when='@:2.4.0', type='test')
+ depends_on('python@3.5:', when='@2.5.0:', type='test')
depends_on('py-numpy@1.6.1:', type=('build', 'run'), when='+python')
depends_on('py-mpi4py@2.0.0:', type=('build', 'run'), when='+mpi +python')
@@ -141,9 +145,11 @@ class Adios2(CMakePackage):
'ON' if '+fortran' in spec else 'OFF'),
'-DADIOS2_USE_Endian_Reverse={0}'.format(
'ON' if '+endian_reverse' in spec else 'OFF'),
+ '-DBUILD_TESTING:BOOL={0}'.format(
+ 'ON' if self.run_tests else 'OFF'),
]
- if self.spec.version >= Version('2.4.0'):
+ if spec.version >= Version('2.4.0'):
args.append('-DADIOS2_USE_Blosc={0}'.format(
'ON' if '+blosc' in spec else 'OFF'))
args.append('-DADIOS2_USE_BZip2={0}'.format(
@@ -153,7 +159,7 @@ class Adios2(CMakePackage):
args.append('-DADIOS2_USE_SSC={0}'.format(
'ON' if '+ssc' in spec else 'OFF'))
- if self.spec.version >= Version('2.5.0'):
+ if spec.version >= Version('2.5.0'):
args.append('-DADIOS2_USE_DataSpaces={0}'.format(
'ON' if '+dataspaces' in spec else 'OFF'))
@@ -173,8 +179,8 @@ class Adios2(CMakePackage):
args.append('-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL={0}'.format(
'ON' if '+pic' in spec else 'OFF'))
- if spec.satisfies('+python'):
+ if spec.satisfies('+python') or self.run_tests:
args.append('-DPYTHON_EXECUTABLE:FILEPATH=%s'
- % self.spec['python'].command.path)
+ % spec['python'].command.path)
return args
diff --git a/var/spack/repos/builtin/packages/adol-c/package.py b/var/spack/repos/builtin/packages/adol-c/package.py
index 336f1833db..741b57773b 100644
--- a/var/spack/repos/builtin/packages/adol-c/package.py
+++ b/var/spack/repos/builtin/packages/adol-c/package.py
@@ -12,14 +12,19 @@ class AdolC(AutotoolsPackage):
overloading."""
homepage = "https://projects.coin-or.org/ADOL-C"
- url = "http://www.coin-or.org/download/source/ADOL-C/ADOL-C-2.6.1.tgz"
- git = "https://gitlab.com/adol-c/adol-c.git"
-
- version('develop', branch='master')
- version('2.6.3', sha256='6ed74580695a0d2c960581e5430ebfcd380eb5da9337daf488bf2e89039e9c21')
- version('2.6.2', sha256='f6326e7ba994d02074816132d4461915221069267c31862b31fab7020965c658')
- version('2.6.1', sha256='037089e0f64224e5e6255b61af4fe7faac080533fd778b76fe946e52491918b5')
- version('2.5.2', sha256='2fa514d9799989d6379738c2bcf75070d9834e4d227eb32a5b278840893b2af9')
+ url = "https://github.com/coin-or/ADOL-C/archive/releases/2.7.2.tar.gz"
+ git = "https://github.com/coin-or/ADOL-C.git"
+ version('master', branch='master')
+ version('2.7.2', sha256='701e0856baae91b98397960d5e0a87a549988de9d4002d0e9a56fa08f5455f6e')
+ version('2.7.1', sha256='a05422cc7faff5700e134e113822d1934fb540ad247e63778524d5d6d75bb0ef')
+ version('2.7.0', sha256='a75cfa6240de8692b2a3e8e782319efefc316f1e595234fcee972ab0e7afa3cd')
+ version('2.6.3', sha256='9750a0a06dcab9a0dba2010f07872ea9057ed29781e9e7d571691c27aa559b04')
+ version('2.6.2', sha256='4ef6ff15b4691235c0ea6580917c7eb17d09ded485ac524a0a33ac7e99ab004b')
+ version('2.6.1', sha256='48b41c40d1c8437fb98eeed4b24deaf3e59da804f34ac9c848da1b049b3b071a')
+ version('2.6.0', sha256='26a1fcb8561f15781f645d245fc345c83497147ec7bb64d4bfc96e32c34c6c1c')
+ version('2.5.2', sha256='390edb1513f749b2dbf6fb90db12ce786f6532af80e589f161ff43646b3a78a6')
+ version('2.5.1', sha256='dedb93c3bb291366d799014b04b6d1ec63ca4e7216edf16167776c07961e3b4a')
+ version('2.5.0', sha256='9d51c426d831884aac8f418be410c001eb62f3a11cb8f30c66af0b842edffb96')
variant('advanced_branching', default=False,
description='Enable advanced branching to reduce retaping')
diff --git a/var/spack/repos/builtin/packages/agrep/package.py b/var/spack/repos/builtin/packages/agrep/package.py
new file mode 100644
index 0000000000..dce047ad05
--- /dev/null
+++ b/var/spack/repos/builtin/packages/agrep/package.py
@@ -0,0 +1,23 @@
+# Copyright 2013-2020 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 import *
+
+
+class Agrep(MakefilePackage):
+ """AGREP - an approximate GREP.
+ Fast searching files for a string or regular expression,
+ with approximate matching capabilities and user-definable records.
+ Developed 1989-1991 by Udi Manber, Sun Wu et al. at the University
+ of Arizona."""
+
+ homepage = "http://www.tgries.de/agrep"
+ url = "https://www.tgries.de/agrep/agrep-3.41.tgz"
+
+ version('3.41', sha256='0508eafaf9725fc67cc955eb6d32ba4f50138443a4fea4275508d2c3f67a234e')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('agrep', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/amdblis/package.py b/var/spack/repos/builtin/packages/amdblis/package.py
index 5b216bebd7..706e7f6bd2 100644
--- a/var/spack/repos/builtin/packages/amdblis/package.py
+++ b/var/spack/repos/builtin/packages/amdblis/package.py
@@ -15,6 +15,7 @@ class Amdblis(BlisBase):
computationally intensive operations.
"""
+ _name = 'amdblis'
homepage = "https://developer.amd.com/amd-aocl/blas-library/"
url = "https://github.com/amd/blis/archive/2.1.tar.gz"
git = "https://github.com/amd/blis.git"
diff --git a/var/spack/repos/builtin/packages/amrex/package.py b/var/spack/repos/builtin/packages/amrex/package.py
index 8d0b15ead6..aaf28a9d60 100644
--- a/var/spack/repos/builtin/packages/amrex/package.py
+++ b/var/spack/repos/builtin/packages/amrex/package.py
@@ -18,6 +18,7 @@ class Amrex(CMakePackage):
maintainers = ['mic84', 'asalmgren']
version('develop', branch='development')
+ version('20.03', sha256='a535dcc016f0d38b55d0ab8e9067c1c53e3686961f6a1fb471cb18a0ebc909e6')
version('20.02', sha256='33529a23694283d12eb37d4682aa86c9cc1240bd50124efcf4464747a7554147')
version('20.01', sha256='f7026d267ca5de79ec7e740264d54230f419776d40feae705e939be0b1d8e0d3')
version('19.10', commit='52844b32b7da11e9733b9a7f4a782e51de7f5e1e') # tag:19.10
diff --git a/var/spack/repos/builtin/packages/anaconda3/package.py b/var/spack/repos/builtin/packages/anaconda3/package.py
new file mode 100644
index 0000000000..2925b0a458
--- /dev/null
+++ b/var/spack/repos/builtin/packages/anaconda3/package.py
@@ -0,0 +1,53 @@
+# Copyright 2013-2019 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 import *
+from os.path import split
+
+
+class Anaconda3(Package):
+ """
+ Anaconda is a free and open-source distribution of the Python and R
+ programming languages for scientific computing, that aims to simplify
+ package management and deployment. Package versions are managed by
+ the package management system conda.
+ """
+ homepage = "https://www.anaconda.com"
+ url = "https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh"
+
+ maintainers = ['ajkotobi']
+
+ version('2019.10', sha256='46d762284d252e51cd58a8ca6c8adc9da2eadc82c342927b2f66ed011d1d8b53', expand=False)
+ version('2019.07', sha256='69581cf739365ec7fb95608eef694ba959d7d33b36eb961953f2b82cb25bdf5a', expand=False)
+ version('2019.03', sha256='45c851b7497cc14d5ca060064394569f724b67d9b5f98a926ed49b834a6bb73a', expand=False)
+ version('2018.12', sha256='1019d0857e5865f8a6861eaf15bfe535b87e92b72ce4f531000dc672be7fce00', expand=False)
+ version('5.3.1', sha256='d4c4256a8f46173b675dd6a62d12f566ed3487f932bab6bb7058f06c124bcc27', expand=False)
+ version('5.3.0', sha256='cfbf5fe70dd1b797ec677e63c61f8efc92dad930fd1c94d60390bb07fdc09959', expand=False)
+ version('5.2.0', sha256='09f53738b0cd3bb96f5b1bac488e5528df9906be2480fe61df40e0e0d19e3d48', expand=False)
+ version('5.1.0', sha256='7e6785caad25e33930bc03fac4994a434a21bc8401817b7efa28f53619fa9c29', expand=False)
+ version('5.0.1', sha256='55e4db1919f49c92d5abbf27a4be5986ae157f074bf9f8238963cd4582a4068a', expand=False)
+ version('5.0.0.1', sha256='092c92427f44687d789a41922ce8426fbdc3c529cc9d6d4ee6de5b62954b93b2', expand=False)
+ version('5.0.0', sha256='67f5c20232a3e493ea3f19a8e273e0618ab678fa14b03b59b1783613062143e9', expand=False)
+ version('4.4.0', sha256='3301b37e402f3ff3df216fe0458f1e6a4ccbb7e67b4d626eae9651de5ea3ab63', expand=False)
+ version('4.3.1', sha256='4447b93d2c779201e5fb50cfc45de0ec96c3804e7ad0fe201ab6b99f73e90302', expand=False)
+ version('4.3.0', sha256='e9169c3a5029aa820393ac92704eb9ee0701778a085ca7bdc3c57b388ac1beb6', expand=False)
+ version('4.2.0', sha256='73b51715a12b6382dd4df3dd1905b531bd6792d4aa7273b2377a0436d45f0e78', expand=False)
+ version('4.1.1', sha256='4f5c95feb0e7efeadd3d348dcef117d7787c799f24b0429e45017008f3534e55', expand=False)
+ version('4.1.0', sha256='11d32cf4026603d3b327dc4299863be6b815905ff51a80329085e1bb9f96c8bd', expand=False)
+ version('4.0.0', sha256='36a558a1109868661a5735f5f32607643f6dc05cf581fefb1c10fb8abbe22f39', expand=False)
+ version('2.5.0', sha256='addadcb927f15cb0b5b6e36890563d3352a8ff6a901ea753d389047d274a29a9', expand=False)
+ version('2.4.1', sha256='0735e69199fc37135930ea2fd4fb6ad0adef215a2a7ba9fd6b0a0a4daaadb1cf', expand=False)
+ version('2.4.0', sha256='fb4e480059e991f2fa632b5a9bcdd284c7f0677814cd719c11d524453f96a40d', expand=False)
+ version('2.3.0', sha256='3be5410b2d9db45882c7de07c554cf4f1034becc274ec9074b23fd37a5c87a6f', expand=False)
+ version('2.2.0', sha256='4aac68743e7706adb93f042f970373a6e7e087dbf4b02ac467c94ca4ce33d2d1', expand=False)
+ version('2.1.0', sha256='af3225ccbe8df0ffb918939e009aa57740e35058ebf9dfcf5fec794a77556c3c', expand=False)
+ version('2.0.1', sha256='3c3b834793e461f3316ad1d9a9178c67859a9d74aaf7bcade076f04134dd1e26', expand=False)
+ version('2.0.0', sha256='57ce4f97e300cf94c5724f72d992e9eecef708fdaa13bc672ae9779773056540', expand=False)
+
+ def install(self, spec, prefix):
+
+ dir, anaconda_script = split(self.stage.archive_file)
+ bash = which('bash')
+ bash(anaconda_script, '-b', '-f', '-p', self.prefix)
diff --git a/var/spack/repos/builtin/packages/arpack-ng/package.py b/var/spack/repos/builtin/packages/arpack-ng/package.py
index 468a8947c2..35a263541f 100644
--- a/var/spack/repos/builtin/packages/arpack-ng/package.py
+++ b/var/spack/repos/builtin/packages/arpack-ng/package.py
@@ -108,7 +108,11 @@ class ArpackNg(Package):
if '+mpi' in spec:
options.append('-DMPI=ON')
- # TODO: -DINTERFACE64=ON
+ # If 64-bit BLAS is used:
+ if (spec.satisfies('^openblas+ilp64') or
+ spec.satisfies('^intel-mkl+ilp64') or
+ spec.satisfies('^intel-parallel-studio+mkl+ilp64')):
+ options.append('-DINTERFACE64=1')
if '+shared' in spec:
options.append('-DBUILD_SHARED_LIBS=ON')
diff --git a/var/spack/repos/builtin/packages/attr/package.py b/var/spack/repos/builtin/packages/attr/package.py
index a58dc75f4d..549909d209 100644
--- a/var/spack/repos/builtin/packages/attr/package.py
+++ b/var/spack/repos/builtin/packages/attr/package.py
@@ -12,9 +12,17 @@ class Attr(AutotoolsPackage):
homepage = "https://savannah.nongnu.org/projects/attr"
url = "http://download.savannah.gnu.org/releases/attr/attr-2.4.47.src.tar.gz"
+ version('2.4.48', sha256='5ead72b358ec709ed00bbf7a9eaef1654baad937c001c044fe8b74c57f5324e7')
version('2.4.47', sha256='25772f653ac5b2e3ceeb89df50e4688891e21f723c460636548971652af0a859')
version('2.4.46', sha256='dcd69bdca7ff166bc45141eddbcf21967999a6b66b0544be12a1cc2fd6340e1f')
+ def url_for_version(self, version):
+ if version >= Version('2.4.48'):
+ url = 'http://download.savannah.gnu.org/releases/attr/attr-{0}.tar.gz'
+ else:
+ url = 'http://download.savannah.gnu.org/releases/attr/attr-{0}.src.tar.gz'
+ return url.format(version)
+
def configure_args(self):
args = []
args.append('--disable-static')
@@ -22,5 +30,7 @@ class Attr(AutotoolsPackage):
# Ref. http://www.linuxfromscratch.org/blfs/view/7.5/postlfs/attr.html
def install(self, spec, prefix):
- make()
- make('install', 'install-dev', 'install-lib')
+ if self.version >= Version('2.4.48'):
+ make('install')
+ else:
+ make('install', 'install-dev', 'install-lib')
diff --git a/var/spack/repos/builtin/packages/aws-parallelcluster/package.py b/var/spack/repos/builtin/packages/aws-parallelcluster/package.py
index 9a0bb4a9cc..195341683d 100644
--- a/var/spack/repos/builtin/packages/aws-parallelcluster/package.py
+++ b/var/spack/repos/builtin/packages/aws-parallelcluster/package.py
@@ -12,7 +12,7 @@ class AwsParallelcluster(PythonPackage):
tool to deploy and manage HPC clusters in the AWS cloud."""
homepage = "https://github.com/aws/aws-parallelcluster"
- url = "https://pypi.io/packages/source/a/aws-parallelcluster/aws-parallelcluster-2.5.1.tar.gz"
+ url = "https://pypi.io/packages/source/a/aws-parallelcluster/aws-parallelcluster-2.6.0.tar.gz"
maintainers = [
'sean-smith', 'demartinofra', 'enrico-usai', 'lukeseawalker', 'rexcsn',
@@ -23,6 +23,7 @@ class AwsParallelcluster(PythonPackage):
'pcluster.config', 'pcluster.networking'
]
+ version('2.6.0', sha256='aaed6962cf5027206834ac24b3d312da91e0f96ae8607f555e12cb124b869f0c')
version('2.5.1', sha256='4fd6e14583f8cf81f9e4aa1d6188e3708d3d14e6ae252de0a94caaf58be76303')
version('2.5.0', sha256='3b0209342ea0d9d8cc95505456103ad87c2d4e35771aa838765918194efd0ad3')
diff --git a/var/spack/repos/builtin/packages/axl/package.py b/var/spack/repos/builtin/packages/axl/package.py
index 1725a2751c..73eb5acdcd 100644
--- a/var/spack/repos/builtin/packages/axl/package.py
+++ b/var/spack/repos/builtin/packages/axl/package.py
@@ -19,13 +19,15 @@ def async_api_validator(pkg_name, variant_name, values):
class Axl(CMakePackage):
"""Asynchronous transfer library"""
- homepage = "https://github.com/ECP-VeloC/AXL"
- url = "https://github.com/ECP-VeloC/AXL/archive/v0.1.1.zip"
+ homepage = "https://github.com/ecp-veloc/AXL"
+ url = "https://github.com/ecp-veloc/AXL/archive/v0.1.1.zip"
git = "https://github.com/ecp-veloc/axl.git"
tags = ['ecp']
version('master', branch='master')
+ version('0.3.0', sha256='3f5efff87be700a5792a0ee9a7aeae45c640e2936623b024e8bc1056f7952a46')
+ version('0.2.0', sha256='a0babe3576da30919f89df2f83c76bd01d06345919f2e54d4dddcd6f73faedcc')
version('0.1.1', sha256='ebbf231bb542a6c91efb79fce05d4c8a346d5506d88ae1899fb670be52e81933')
variant('async_api', default='daemon',
diff --git a/var/spack/repos/builtin/packages/bat/package.py b/var/spack/repos/builtin/packages/bat/package.py
new file mode 100644
index 0000000000..50c3b5349a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bat/package.py
@@ -0,0 +1,29 @@
+# Copyright 2013-2020 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 import *
+
+
+class Bat(Package):
+ """A cat(1) clone with wings."""
+
+ homepage = "https://github.com/sharkdp/bat"
+ url = "https://github.com/sharkdp/bat/archive/v0.10.0.tar.gz"
+
+ version('0.12.1', sha256='1dd184ddc9e5228ba94d19afc0b8b440bfc1819fef8133fe331e2c0ec9e3f8e2')
+
+ depends_on('rust')
+
+ def install(self, spec, prefix):
+ cargo = which('cargo')
+ cargo('install', '--root', prefix, '--path', '.')
+
+ # cargo seems to need these to be set so that when it's building
+ # onig_sys it can run llvm-config and link against libclang.
+ def setup_build_environment(self, env):
+ env.append_flags('LLVM_CONFIG_PATH',
+ join_path(self.spec['llvm'].prefix.libexec.llvm,
+ 'llvm-config'))
+ env.append_flags('LIBCLANG_PATH', self.spec['llvm'].prefix.lib)
diff --git a/var/spack/repos/builtin/packages/batctl/package.py b/var/spack/repos/builtin/packages/batctl/package.py
new file mode 100644
index 0000000000..45bd5ecd73
--- /dev/null
+++ b/var/spack/repos/builtin/packages/batctl/package.py
@@ -0,0 +1,24 @@
+# Copyright 2013-2020 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 import *
+
+
+class Batctl(MakefilePackage):
+ """B.A.T.M.A.N. advanced control and management tool"""
+
+ homepage = "https://github.com/open-mesh-mirror/batctl"
+ url = "https://github.com/open-mesh-mirror/batctl/archive/v2019.5.tar.gz"
+
+ version('2019.5', sha256='ffe5857a33068ec174140c154610d76d833524d840a2fc2d1a15e16686213cad')
+ version('2019.4', sha256='a3564eb9727335352dc0cfa2f2b29474c2c837384689ac5fcb387784a56e7685')
+ version('2019.3', sha256='2bd93fa14925a8dc63a67e64266c8ccd2fa3ac44b10253d93e6f8a630350070c')
+ version('2019.2', sha256='fb656208ff7d4cd8b1b422f60c9e6d8747302a347cbf6c199d7afa9b80f80ea3')
+
+ depends_on('libnl')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('batctl', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/bazel/package.py b/var/spack/repos/builtin/packages/bazel/package.py
index 655c915178..26d79616dd 100644
--- a/var/spack/repos/builtin/packages/bazel/package.py
+++ b/var/spack/repos/builtin/packages/bazel/package.py
@@ -92,6 +92,7 @@ class Bazel(Package):
# https://docs.bazel.build/versions/master/install-compile-source.html#bootstrap-unix-prereq
depends_on('jdk@1.8.0:1.8.999', type=('build', 'run'))
depends_on('python', type=('build', 'run'))
+ depends_on('zip', type=('build', 'run'))
# Pass Spack environment variables to the build
patch('bazelruleclassprovider-0.25.patch', when='@0.25:')
diff --git a/var/spack/repos/builtin/packages/bcache/func_crc64.patch b/var/spack/repos/builtin/packages/bcache/func_crc64.patch
new file mode 100644
index 0000000000..7acc312139
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bcache/func_crc64.patch
@@ -0,0 +1,13 @@
+diff --git a/bcache.c b/bcache.c
+index 8f37445..8b4b986 100644
+--- a/bcache.c
++++ b/bcache.c
+@@ -115,7 +115,7 @@ static const uint64_t crc_table[256] = {
+ 0x9AFCE626CE85B507ULL
+ };
+
+-inline uint64_t crc64(const void *_data, size_t len)
++uint64_t crc64(const void *_data, size_t len)
+ {
+ uint64_t crc = 0xFFFFFFFFFFFFFFFFULL;
+ const unsigned char *data = _data;
diff --git a/var/spack/repos/builtin/packages/bcache/package.py b/var/spack/repos/builtin/packages/bcache/package.py
new file mode 100644
index 0000000000..63c42de333
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bcache/package.py
@@ -0,0 +1,36 @@
+# Copyright 2013-2020 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 import *
+
+
+class Bcache(MakefilePackage):
+ """Bcache is a patch for the Linux kernel to use SSDs to cache other block
+ devices."""
+
+ homepage = "http://bcache.evilpiepirate.org"
+ url = "https://github.com/g2p/bcache-tools/archive/v1.0.8.tar.gz"
+
+ version('1.0.8', sha256='d56923936f37287efc57a46315679102ef2c86cd0be5874590320acd48c1201c')
+ version('1.0.7', sha256='64d76d1085afba8c3d5037beb67bf9d69ee163f357016e267bf328c0b1807abd')
+ version('1.0.6', sha256='9677c6da3ceac4e1799d560617c4d00ea7e9d26031928f8f94b8ab327496d4e0')
+ version('1.0.5', sha256='1449294ef545b3dc6f715f7b063bc2c8656984ad73bcd81a0dc048cbba416ea9')
+ version('1.0.4', sha256='102ffc3a8389180f4b491188c3520f8a4b1a84e5a7ca26d2bd6de1821f4d913d')
+
+ depends_on('libuuid')
+ depends_on('util-linux')
+ depends_on('gettext')
+
+ def setup_build_environment(self, env):
+ env.append_flags('LDFLAGS', '-lintl')
+
+ patch('func_crc64.patch', sha256='558b35cadab4f410ce8f87f0766424a429ca0611aa2fd247326ad10da115737d')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('bcache-register', prefix.bin)
+ install('bcache-super-show', prefix.bin)
+ install('make-bcache', prefix.bin)
+ install('probe-bcache', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/binutils/package.py b/var/spack/repos/builtin/packages/binutils/package.py
index d84dd32bc5..4a647e7e88 100644
--- a/var/spack/repos/builtin/packages/binutils/package.py
+++ b/var/spack/repos/builtin/packages/binutils/package.py
@@ -14,6 +14,7 @@ class Binutils(AutotoolsPackage, GNUMirrorPackage):
homepage = "http://www.gnu.org/software/binutils/"
gnu_mirror_path = "binutils/binutils-2.28.tar.bz2"
+ version('2.34', sha256='89f010078b6cf69c23c27897d686055ab89b198dddf819efb0a4f2c38a0b36e6')
version('2.33.1', sha256='0cb4843da15a65a953907c96bad658283f3c4419d6bcc56bf2789db16306adb2')
version('2.32', sha256='de38b15c902eb2725eac6af21183a5f34ea4634cb0bcef19612b50e5ed31072d')
version('2.31.1', sha256='ffcc382695bf947da6135e7436b8ed52d991cf270db897190f19d6f9838564d0')
@@ -46,6 +47,10 @@ class Binutils(AutotoolsPackage, GNUMirrorPackage):
depends_on('m4', type='build', when='@:2.29.99 +gold')
depends_on('bison', type='build', when='@:2.29.99 +gold')
+ # 2.34 needs makeinfo due to a bug, see:
+ # https://sourceware.org/bugzilla/show_bug.cgi?id=25491
+ depends_on('texinfo', type='build', when='@2.34')
+
conflicts('+gold', when='platform=darwin',
msg="Binutils cannot build linkers on macOS")
diff --git a/var/spack/repos/builtin/packages/blis/package.py b/var/spack/repos/builtin/packages/blis/package.py
index ea7ca8ff42..c2fc1545a3 100644
--- a/var/spack/repos/builtin/packages/blis/package.py
+++ b/var/spack/repos/builtin/packages/blis/package.py
@@ -102,6 +102,10 @@ class BlisBase(Package):
if self.spec.satisfies('platform=darwin'):
fix_darwin_install_name(self.prefix.lib)
+ @property
+ def libs(self):
+ return find_libraries(['libblis'], root=self.prefix, recursive=True)
+
class Blis(BlisBase):
"""BLIS is a portable software framework for instantiating high-performance
diff --git a/var/spack/repos/builtin/packages/bmi/package.py b/var/spack/repos/builtin/packages/bmi/package.py
index dfdacf5a49..c2862ed3ee 100644
--- a/var/spack/repos/builtin/packages/bmi/package.py
+++ b/var/spack/repos/builtin/packages/bmi/package.py
@@ -12,6 +12,8 @@ class Bmi(AutotoolsPackage):
homepage = 'https://xgitlab.cels.anl.gov/sds/bmi'
git = 'https://xgitlab.cels.anl.gov/sds/bmi.git'
+ maintainers = ['carns']
+
version('develop', branch='master')
depends_on('autoconf', type='build')
diff --git a/var/spack/repos/builtin/packages/boost/package.py b/var/spack/repos/builtin/packages/boost/package.py
index 452ae99b8a..41be592a52 100644
--- a/var/spack/repos/builtin/packages/boost/package.py
+++ b/var/spack/repos/builtin/packages/boost/package.py
@@ -96,8 +96,12 @@ class Boost(Package):
# mpi/python are not installed by default because they pull in many
# dependencies and/or because there is a great deal of customization
# possible (and it would be difficult to choose sensible defaults)
+ #
+ # Boost.Container can be both header-only and compiled. '+container'
+ # indicates the compiled version which requires Extended Allocator
+ # support. The header-only library is installed when no variant is given.
default_noinstall_libs\
- = set(['context', 'coroutine', 'fiber', 'mpi', 'python'])
+ = set(['container', 'context', 'coroutine', 'fiber', 'mpi', 'python'])
all_libs = default_install_libs | default_noinstall_libs
@@ -174,6 +178,9 @@ class Boost(Package):
conflicts('+taggedlayout', when='+versionedlayout')
conflicts('+numpy', when='~python')
+ # Container's Extended Allocators were not added until 1.56.0
+ conflicts('+container', when='@:1.55.99')
+
# Patch fix from https://svn.boost.org/trac/boost/ticket/11856
patch('boost_11856.patch', when='@1.60.0%gcc@4.4.7')
diff --git a/var/spack/repos/builtin/packages/bowtie2/package.py b/var/spack/repos/builtin/packages/bowtie2/package.py
index 9989f37c02..8100b9dfed 100644
--- a/var/spack/repos/builtin/packages/bowtie2/package.py
+++ b/var/spack/repos/builtin/packages/bowtie2/package.py
@@ -11,7 +11,7 @@ class Bowtie2(Package):
"""Bowtie 2 is an ultrafast and memory-efficient tool for aligning
sequencing reads to long reference sequences"""
- homepage = "bowtie-bio.sourceforge.net/bowtie2/index.shtml"
+ homepage = "http://bowtie-bio.sourceforge.net/bowtie2/index.shtml"
url = "http://downloads.sourceforge.net/project/bowtie-bio/bowtie2/2.3.1/bowtie2-2.3.1-source.zip"
version('2.3.5.1', sha256='335c8dafb1487a4a9228ef922fbce4fffba3ce8bc211e2d7085aac092155a53f')
diff --git a/var/spack/repos/builtin/packages/bubblewrap/package.py b/var/spack/repos/builtin/packages/bubblewrap/package.py
new file mode 100644
index 0000000000..dc00c56148
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bubblewrap/package.py
@@ -0,0 +1,28 @@
+# Copyright 2013-2020 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 import *
+
+
+class Bubblewrap(AutotoolsPackage):
+ """Unprivileged sandboxing tool"""
+
+ homepage = "https://github.com/containers/bubblewrap"
+ url = "https://github.com/containers/bubblewrap/archive/v0.4.0.tar.gz"
+
+ version('0.4.0', sha256='dedea228f53dd5f589d8225b4584a9b354849a221caf7304874ca2e4d4bcdafb')
+ version('0.3.3', sha256='439e4cd84d9d19c9e5b0c6aa0f0c3a55bbb893ae5ec112a5b575eadd2165f039')
+ version('0.3.2', sha256='c66c1b6da3257e06b38a339611e76b21dc52a47975d55429071c22455259d010')
+ version('0.3.1', sha256='3757cb021d1a3ccc36828a58363817e1923c458ed03260d0c2b3a99da61bfb81')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+ depends_on('libcap')
+
+ def autoreconf(self, spec, prefix):
+ bash = which('bash')
+ bash('autogen.sh')
diff --git a/var/spack/repos/builtin/packages/bzip2/package.py b/var/spack/repos/builtin/packages/bzip2/package.py
index 57d7046f93..08d5978a63 100644
--- a/var/spack/repos/builtin/packages/bzip2/package.py
+++ b/var/spack/repos/builtin/packages/bzip2/package.py
@@ -16,6 +16,9 @@ class Bzip2(Package):
homepage = "https://sourceware.org/bzip2/"
url = "https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz"
+ # The server is sometimes a bit slow to respond
+ fetch_options = {'timeout': 60}
+
version('1.0.8', sha256='ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269')
version('1.0.7', sha256='e768a87c5b1a79511499beb41500bcc4caf203726fff46a6f5f9ad27fe08ab2b')
version('1.0.6', sha256='a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd')
diff --git a/var/spack/repos/builtin/packages/caliper/package.py b/var/spack/repos/builtin/packages/caliper/package.py
index 6169a7ee78..fb12a78704 100644
--- a/var/spack/repos/builtin/packages/caliper/package.py
+++ b/var/spack/repos/builtin/packages/caliper/package.py
@@ -19,6 +19,7 @@ class Caliper(CMakePackage):
git = "https://github.com/LLNL/Caliper.git"
version('master')
+ version('2.3.0', tag='v2.3.0')
version('2.2.0', tag='v2.2.0')
version('2.1.1', tag='v2.1.1')
version('2.0.1', tag='v2.0.1')
@@ -64,21 +65,23 @@ class Caliper(CMakePackage):
depends_on('libpfm4@4.8:4.99', when='+libpfm')
depends_on('mpi', when='+mpi')
- depends_on('unwind@2018.10.12,1.2:1.99', when='+callpath')
+ depends_on('unwind@1.2:1.99', when='+callpath')
depends_on('sosflow@spack', when='@1.0:1.99+sosflow')
depends_on('cmake', type='build')
- depends_on('python', type='build')
+ depends_on('python@3:', type='build')
# sosflow support not yet in 2.0
- conflicts('+sosflow', '@2.0.0:2.2.99')
+ conflicts('+sosflow', '@2.0.0:2.3.99')
conflicts('+adiak', '@:2.1.99')
def cmake_args(self):
spec = self.spec
args = [
+ ('-DPYTHON_EXECUTABLE=%s' %
+ spec['python'].command.path),
'-DBUILD_TESTING=Off',
'-DBUILD_DOCS=Off',
'-DBUILD_SHARED_LIBS=%s' % ('On' if '+shared' in spec else 'Off'),
diff --git a/var/spack/repos/builtin/packages/cctools/package.py b/var/spack/repos/builtin/packages/cctools/package.py
index 481e4a47f1..973a6c3d11 100644
--- a/var/spack/repos/builtin/packages/cctools/package.py
+++ b/var/spack/repos/builtin/packages/cctools/package.py
@@ -13,16 +13,17 @@ class Cctools(AutotoolsPackage):
"""
homepage = "https://github.com/cooperative-computing-lab/cctools"
- url = "https://github.com/cooperative-computing-lab/cctools/archive/release/6.1.1.tar.gz"
+ url = "https://github.com/cooperative-computing-lab/cctools/archive/release/7.1.0.tar.gz"
+ version('7.1.0', sha256='84748245db10ff26c0c0a7b9fd3ec20fbbb849dd4aadc5e8531fd1671abe7a81')
version('7.0.18', sha256='5b6f3c87ae68dd247534a5c073eb68cb1a60176a7f04d82699fbc05e649a91c2')
version('6.1.1', sha256='97f073350c970d6157f80891b3bf6d4f3eedb5f031fea386dc33e22f22b8af9d')
depends_on('openssl')
depends_on('perl+shared', type=('build', 'run'))
- depends_on('python@:2.9', when='@6.1.1', type=('build', 'run'))
depends_on('python', type=('build', 'run'))
depends_on('readline')
+ depends_on('gettext') # Corrects python linking of -lintl flag.
depends_on('swig')
# depends_on('xrootd')
depends_on('zlib')
@@ -44,21 +45,49 @@ class Cctools(AutotoolsPackage):
def configure_args(self):
args = []
- # For python
- if self.spec.satisfies('^python@3:'):
- args.append('--with-python-path=no')
- args.append(
- '--with-python3-path={0}'.format(self.spec['python'].prefix)
- )
+
+ # make sure we do not pick a python outside spack:
+ if self.spec.satisfies('@6.1.1'):
+ if self.spec.satisfies('^python@3:'):
+ args.extend([
+ '--with-python3-path', self.spec['python'].prefix,
+ '--with-python-path', 'no'
+ ])
+ elif self.spec.satisfies('^python@:2.9'):
+ args.extend([
+ '--with-python-path', self.spec['python'].prefix,
+ '--with-python3-path', 'no'
+ ])
+ else:
+ args.extend([
+ '--with-python-path', 'no',
+ '--with-python3-path', 'no'
+ ])
else:
- args.append('--with-python3-path=no')
- args.append(
- '--with-python-path={0}'.format(self.spec['python'].prefix)
- )
+ # versions 7 and above, where --with-python-path recognized the
+ # python version:
+ if self.spec.satisfies('^python@3:'):
+ args.extend([
+ '--with-python-path', self.spec['python'].prefix,
+ '--with-python2-path', 'no'
+ ])
+ elif self.spec.satisfies('^python@:2.9'):
+ args.extend([
+ '--with-python-path', self.spec['python'].prefix,
+ '--with-python3-path', 'no'
+ ])
+ else:
+ args.extend([
+ '--with-python2-path', 'no',
+ '--with-python3-path', 'no'
+ ])
+
# disable these bits
for p in ['mysql', 'xrootd']:
args.append('--with-{0}-path=no'.format(p))
+
# point these bits at the Spack installations
for p in ['openssl', 'perl', 'readline', 'swig', 'zlib']:
args.append('--with-{0}-path={1}'.format(p, self.spec[p].prefix))
+
return args
diff --git a/var/spack/repos/builtin/packages/ceres-solver/package.py b/var/spack/repos/builtin/packages/ceres-solver/package.py
index 599c180121..ab84b4f9b7 100644
--- a/var/spack/repos/builtin/packages/ceres-solver/package.py
+++ b/var/spack/repos/builtin/packages/ceres-solver/package.py
@@ -17,19 +17,38 @@ class CeresSolver(CMakePackage):
homepage = "http://ceres-solver.org"
url = "http://ceres-solver.org/ceres-solver-1.12.0.tar.gz"
+ version('1.14.0', sha256='4744005fc3b902fed886ea418df70690caa8e2ff6b5a90f3dd88a3d291ef8e8e')
version('1.12.0', sha256='745bfed55111e086954126b748eb9efe20e30be5b825c6dec3c525cf20afc895')
+ variant('suitesparse', default=False, description='Build with SuiteSparse')
+ variant('shared', default=True, description='Build shared libraries')
+ variant('examples', default=False, description='Build examples')
+
depends_on('eigen@3:')
depends_on('lapack')
depends_on('glog')
def cmake_args(self):
args = [
- '-DSUITESPARSE=OFF',
'-DCXSPARSE=OFF',
'-DEIGENSPARSE=ON',
'-DLAPACK=ON',
- '-DBUILD_SHARED_LIBS=ON',
'-DSCHUR_SPECIALIZATIONS=OFF'
]
+
+ if '+suitesparse' in self.spec:
+ args.append('-DSUITESPARSE=ON')
+ else:
+ args.append('-DSUITESPARSE=OFF')
+
+ if '+shared' in self.spec:
+ args.append('-DBUILD_SHARED_LIBS=ON')
+ else:
+ args.append('-DBUILD_SHARED_LIBS=OFF')
+
+ if '+examples' in self.spec:
+ args.append('-DBUILD_EXAMPLES=ON')
+ else:
+ args.append('-DBUILD_EXAMPLES=OFF')
+
return args
diff --git a/var/spack/repos/builtin/packages/cgns/package.py b/var/spack/repos/builtin/packages/cgns/package.py
index 4e8a112634..a4f6aa0582 100644
--- a/var/spack/repos/builtin/packages/cgns/package.py
+++ b/var/spack/repos/builtin/packages/cgns/package.py
@@ -18,6 +18,10 @@ class Cgns(CMakePackage):
version('develop', branch='develop')
version('master', branch='master')
+ version('4.1.1', sha256='055d345c3569df3ae832fb2611cd7e0bc61d56da41b2be1533407e949581e226')
+ version('4.1.0', sha256='4674de1fac3c47998248725fd670377be497f568312c5903d1bb8090a3cf4da0')
+ version('4.0.0', sha256='748585a8e52dff4d250d6b603e6b847d05498e4566aba2dc3d7a7d85c4d55849')
+ version('3.4.1', sha256='d32595e7737b9332243bd3de1eb8c018a272f620f09b289dea8292eba1365994')
version('3.4.0', sha256='6372196caf25b27d38cf6f056258cb0bdd45757f49d9c59372b6dbbddb1e05da')
version('3.3.1', sha256='81093693b2e21a99c5640b82b267a495625b663d7b8125d5f1e9e7aaa1f8d469')
version('3.3.0', sha256='8422c67994f8dc6a2f201523a14f6c7d7e16313bdd404c460c16079dbeafc662')
@@ -27,6 +31,7 @@ class Cgns(CMakePackage):
variant('scoping', default=True, description='Enable scoping')
variant('mpi', default=True, description='Enable parallel cgns')
variant('int64', default=False, description='Build with 64-bit integers')
+ variant('shared', default=True, description='Enable shared library')
depends_on('hdf5~mpi', when='+hdf5~mpi')
depends_on('hdf5+mpi', when='+hdf5+mpi')
@@ -44,7 +49,9 @@ class Cgns(CMakePackage):
'-DCGNS_ENABLE_PARALLEL:BOOL=%s' % (
'ON' if '+mpi' in spec else 'OFF'),
'-DCGNS_ENABLE_TESTS:BOOL=OFF',
- '-DCGNS_BUILD_CGNSTOOLS:BOOL=OFF'
+ '-DCGNS_BUILD_CGNSTOOLS:BOOL=OFF',
+ '-DCGNS_BUILD_SHARED:BOOL=%s' % (
+ 'ON' if '+shared' in spec else 'OFF')
])
if '+mpi' in spec:
diff --git a/var/spack/repos/builtin/packages/charliecloud/package.py b/var/spack/repos/builtin/packages/charliecloud/package.py
index 9329455d84..e72c71cf86 100644
--- a/var/spack/repos/builtin/packages/charliecloud/package.py
+++ b/var/spack/repos/builtin/packages/charliecloud/package.py
@@ -9,22 +9,24 @@ from spack import *
class Charliecloud(AutotoolsPackage):
"""Lightweight user-defined software stacks for HPC."""
+ maintainers = ['j-ogas']
homepage = "https://hpc.github.io/charliecloud"
- url = "https://github.com/hpc/charliecloud/releases/download/v0.9.10/charliecloud-0.9.10.tar.gz"
+ url = "https://github.com/hpc/charliecloud/releases/download/v0.14/charliecloud-0.9.10.tar.gz"
git = "https://github.com/hpc/charliecloud.git"
version('master', branch='master')
- version('0.13', sha256='5740bff6e410ca99484c1bdf3dbe834c0f753c846d55c19d6162967a3e2718e0')
+ version('0.14', sha256='4ae23c2d6442949e16902f9d5604dbd1d6059aeb5dd461b11fc5c74d49dcb194')
- depends_on('python@3.4:', type=('build', 'run'))
+ depends_on('m4', type='build')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
- # experimental builder (ch-grow)
- variant('builder', default=False, description='Bundle dependencies for unprivileged builder (ch-grow)')
- depends_on('py-lark-parser', type='run', when='+builder')
- depends_on('skopeo', type='run', when='+builder')
- depends_on('umoci', type='run', when='+builder')
+ depends_on('python@3.5:', type='run')
+ depends_on('py-lark-parser', type='run')
+ depends_on('py-requests', type='run')
- # man pages and html docs
+ # man pages and html docs variant
variant('docs', default=False, description='Build man pages and html docs')
depends_on('rsync', type='build', when='+docs')
depends_on('py-sphinx', type='build', when='+docs')
@@ -37,10 +39,9 @@ class Charliecloud(AutotoolsPackage):
args = []
- if '+docs' not in self.spec:
+ if '+docs' in self.spec:
+ args.append('--enable-html')
+ else:
args.append('--disable-html')
- if '+builder' not in self.spec:
- args.append('--disable-ch-grow')
-
return args
diff --git a/var/spack/repos/builtin/packages/cinch/package.py b/var/spack/repos/builtin/packages/cinch/package.py
index 65281b8455..f46a801cd4 100644
--- a/var/spack/repos/builtin/packages/cinch/package.py
+++ b/var/spack/repos/builtin/packages/cinch/package.py
@@ -16,7 +16,7 @@ class Cinch(Package):
url = "https://github.com/laristra/cinch/archive/1.0.zip"
git = "https://github.com/laristra/cinch.git"
- version('develop', branch='master', submodules=False)
+ version('master', branch='master', submodules=False)
version('1.0', sha256='98b73473829b478191481621d84c3d63c662da6e951321f858a032eae3ca07b7')
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/citcoms/package.py b/var/spack/repos/builtin/packages/citcoms/package.py
index 2529e544f6..f05c3d7cd6 100644
--- a/var/spack/repos/builtin/packages/citcoms/package.py
+++ b/var/spack/repos/builtin/packages/citcoms/package.py
@@ -16,8 +16,6 @@ class Citcoms(AutotoolsPackage):
version('3.3.1', sha256='e3520e0a933e4699d31e86fe309b8c154ea6ecb0f42a1cf6f25e8d13d825a4b3')
version('3.2.0', sha256='773a14d91ecbb4a4d1e04317635fab79819d83c57b47f19380ff30b9b19cb07a')
- variant('pyre', default=False, description='build Pyre modules')
- variant('exchanger', default=False, description='use Exchanger')
variant('ggrd', default=False, description='use GGRD file support')
variant('cuda', default=False, description='use CUDA')
variant('hdf5', default=False, description='add HDF5 support')
@@ -27,15 +25,10 @@ class Citcoms(AutotoolsPackage):
depends_on('zlib')
# Optional dependencies
- depends_on('exchanger', when='+exchanger')
- depends_on('py-pythia', type=('build', 'run'), when='+pyre')
depends_on('hc', when='+ggrd')
depends_on('cuda', when='+cuda')
depends_on('hdf5+mpi', when='+hdf5')
- conflicts('+pyre', when='@3.3:', msg='Pyre support was removed from 3.3+')
- conflicts('+exchanger', when='@3.3:', msg='Exchanger support was removed from 3.3+')
-
def setup_build_environment(self, env):
if '+ggrd' in self.spec:
env.set('HC_HOME', self.spec['hc'].prefix)
@@ -45,15 +38,8 @@ class Citcoms(AutotoolsPackage):
# Flags only valid in 3.2
if self.spec.satisfies('@:3.2'):
- if '+pyre' in self.spec:
- args.append('--with-pyre')
- else:
- args.append('--without-pyre')
-
- if '+exchanger' in self.spec:
- args.append('--with-exchanger')
- else:
- args.append('--without-exchanger')
+ args.append('--without-pyre')
+ args.append('--without-exchanger')
if '+ggrd' in self.spec:
args.append('--with-ggrd')
diff --git a/var/spack/repos/builtin/packages/clhep/package.py b/var/spack/repos/builtin/packages/clhep/package.py
index 828f46ec97..4fca7f7efb 100644
--- a/var/spack/repos/builtin/packages/clhep/package.py
+++ b/var/spack/repos/builtin/packages/clhep/package.py
@@ -14,6 +14,8 @@ class Clhep(CMakePackage):
list_url = "https://proj-clhep.web.cern.ch/proj-clhep/"
list_depth = 1
+ maintainers = ['drbenmorgan']
+
version('2.4.1.3', sha256='27c257934929f4cb1643aa60aeaad6519025d8f0a1c199bc3137ad7368245913')
version('2.4.1.2', sha256='ff96e7282254164380460bc8cf2dff2b58944084eadcd872b5661eb5a33fa4b8')
version('2.4.1.0', sha256='d14736eb5c3d21f86ce831dc1afcf03d423825b35c84deb6f8fd16773528c54d')
diff --git a/var/spack/repos/builtin/packages/cmake/package.py b/var/spack/repos/builtin/packages/cmake/package.py
index fdfa46af42..994ed42392 100644
--- a/var/spack/repos/builtin/packages/cmake/package.py
+++ b/var/spack/repos/builtin/packages/cmake/package.py
@@ -13,6 +13,7 @@ class Cmake(Package):
url = 'https://github.com/Kitware/CMake/releases/download/v3.15.5/cmake-3.15.5.tar.gz'
maintainers = ['chuckatkins']
+ version('3.16.5', sha256='5f760b50b8ecc9c0c37135fae5fbf00a2fef617059aa9d61c1bb91653e5a8bfc')
version('3.16.2', sha256='8c09786ec60ca2be354c29829072c38113de9184f29928eb9da8446a5f2ce6a9')
version('3.16.1', sha256='a275b3168fa8626eca4465da7bb159ff07c8c6cb0fb7179be59e12cbdfa725fd')
version('3.16.0', sha256='6da56556c63cab6e9a3e1656e8763ed4a841ac9859fefb63cbe79472e67e8c5f')
diff --git a/var/spack/repos/builtin/packages/cosma/package.py b/var/spack/repos/builtin/packages/cosma/package.py
new file mode 100644
index 0000000000..efb81035da
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cosma/package.py
@@ -0,0 +1,69 @@
+# Copyright 2013-2020 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 import *
+
+
+class Cosma(CMakePackage):
+ """
+ Distributed Communication-Optimal Matrix-Matrix Multiplication Library
+ """
+
+ maintainers = ['teonnik', 'kabicm']
+ homepage = 'https://github.com/eth-cscs/COSMA'
+ url = 'https://github.com/eth-cscs/COSMA/releases/download/v2.0.2/cosma.tar.gz'
+ git = 'https://github.com/eth-cscs/COSMA.git'
+
+ # note: The default archives produced with github do not have the archives
+ # of the submodules.
+ version('master', branch='master', submodules=True)
+ version('2.0.2', sha256='4f3354828bc718f3eef2f0098c3bdca3499297497a220da32db1acd57920c68d')
+ # note: this version fails to build at the moment
+ # version('1.0.0',
+ # url='https://github.com/eth-cscs/COSMA/releases/download/1.0/cosma.tar.gz',
+ # sha256='c142104258dcca4c17fa7faffc2990a08d2777235c7980006e93c5dca51061f6')
+
+ variant('cuda', default=False,
+ description='Build with the CUBLAS back end.')
+ variant('scalapack', default=False,
+ description='Build with ScaLAPACK support.')
+
+ depends_on('cmake@3.12:', type='build')
+ depends_on('mpi@3:')
+ depends_on('blas', when='~cuda')
+ depends_on('scalapack', when='+scalapack')
+ # COSMA is written entirely in C++, it may use cublasXt but a CUDA capable
+ # compiler is not needed. There is no need for CudaPackage in this recipe.
+ depends_on('cuda', when='+cuda')
+
+ def setup_build_environment(self, env):
+ if '+cuda' in self.spec:
+ env.set('CUDA_PATH', self.spec['cuda'].prefix)
+
+ def cmake_args(self):
+ spec = self.spec
+ args = ['-DCOSMA_WITH_TESTS=OFF',
+ '-DCOSMA_WITH_APPS=OFF',
+ '-DCOSMA_WITH_PROFILING=OFF',
+ '-DCOSMA_WITH_BENCHMARKS=OFF']
+
+ if '^mkl' in spec:
+ args += ['-DCOSMA_BLAS=MKL']
+ elif '^netlib-lapack' in spec:
+ args += ['-DCOSMA_BLAS=CUSTOM']
+ elif '^openblas' in spec:
+ args += ['-DCOSMA_BLAS=OPENBLAS']
+ elif '+cuda' in spec:
+ args += ['-DCOSMA_BLAS=CUDA']
+ else: # TODO '^rocm' in spec:
+ args += ['-DCOSMA_BLAS=ROCM']
+
+ if '+scalapack' and '^mkl' in spec:
+ args += ['-DCOSMA_SCALAPACK=MKL']
+ elif '+scalapack' and '^netlib-scalapack' in spec:
+ args += ['-DCOSMA_SCALAPACK=CUSTOM']
+
+ return args
diff --git a/var/spack/repos/builtin/packages/cpio/package.py b/var/spack/repos/builtin/packages/cpio/package.py
index ae6b429ccc..2381a82499 100644
--- a/var/spack/repos/builtin/packages/cpio/package.py
+++ b/var/spack/repos/builtin/packages/cpio/package.py
@@ -16,3 +16,8 @@ class Cpio(AutotoolsPackage, GNUMirrorPackage):
version('2.13', sha256='e87470d9c984317f658567c03bfefb6b0c829ff17dbf6b0de48d71a4c8f3db88')
build_directory = 'spack-build'
+
+ def flag_handler(self, name, flags):
+ if self.spec.satisfies('%intel') and name == 'cflags':
+ flags.append('-no-gcc')
+ return (flags, None, None)
diff --git a/var/spack/repos/builtin/packages/cpprestsdk/Release.patch b/var/spack/repos/builtin/packages/cpprestsdk/Release.patch
new file mode 100644
index 0000000000..e860b85f18
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cpprestsdk/Release.patch
@@ -0,0 +1,45 @@
+diff -ur spack-src/Release.org/include/pplx/pplxlinux.h spack-src/Release/include/pplx/pplxlinux.h
+--- spack-src/Release.org/include/pplx/pplxlinux.h 2020-03-12 13:52:40.161917503 +0900
++++ spack-src/Release/include/pplx/pplxlinux.h 2020-03-12 14:05:50.834896829 +0900
+@@ -240,6 +240,11 @@
+ {
+ public:
+ _PPLXIMP virtual void schedule( TaskProc_t proc, _In_ void* param);
++#if defined(__APPLE__)
++ virtual ~apple_scheduler() {}
++#else
++ virtual ~linux_scheduler() {}
++#endif
+ };
+
+ } // namespace details
+diff -ur spack-src/Release.org/libs/websocketpp/websocketpp/transport/asio/connection.hpp spack-src/Release/libs/websocketpp/websocketpp/transport/asio/connection.hpp
+--- spack-src/Release.org/libs/websocketpp/websocketpp/transport/asio/connection.hpp 2020-03-12 13:52:40.201921703 +0900
++++ spack-src/Release/libs/websocketpp/websocketpp/transport/asio/connection.hpp 2020-03-12 14:09:13.586186467 +0900
+@@ -422,7 +422,7 @@
+ m_io_service = io_service;
+
+ if (config::enable_multithreading) {
+- m_strand = lib::make_shared<boost::asio::strand>(
++ m_strand = lib::make_shared<boost::asio::io_service::strand>(
+ lib::ref(*io_service));
+
+ m_async_read_handler = m_strand->wrap(lib::bind(
+diff -ur spack-src/Release.org/src/uri/uri.cpp spack-src/Release/src/uri/uri.cpp
+--- spack-src/Release.org/src/uri/uri.cpp 2020-03-12 13:52:40.241925902 +0900
++++ spack-src/Release/src/uri/uri.cpp 2020-03-12 13:53:58.610152210 +0900
+@@ -22,12 +22,12 @@
+ // canonicalize components first
+
+ // convert scheme to lowercase
+- std::transform(m_scheme.begin(), m_scheme.end(), m_scheme.begin(), [this](utility::char_t c) {
++ std::transform(m_scheme.begin(), m_scheme.end(), m_scheme.begin(), [](utility::char_t c) {
+ return (utility::char_t)tolower(c);
+ });
+
+ // convert host to lowercase
+- std::transform(m_host.begin(), m_host.end(), m_host.begin(), [this](utility::char_t c) {
++ std::transform(m_host.begin(), m_host.end(), m_host.begin(), [](utility::char_t c) {
+ return (utility::char_t)tolower(c);
+ });
+
diff --git a/var/spack/repos/builtin/packages/cpprestsdk/package.py b/var/spack/repos/builtin/packages/cpprestsdk/package.py
index 51acc882b6..3bfbf52c29 100644
--- a/var/spack/repos/builtin/packages/cpprestsdk/package.py
+++ b/var/spack/repos/builtin/packages/cpprestsdk/package.py
@@ -17,6 +17,11 @@ class Cpprestsdk(CMakePackage):
version('2.9.1', sha256='537358760acd782f4d2ed3a85d92247b4fc423aff9c85347dc31dbb0ab9bab16')
- depends_on('boost')
+ depends_on('boost@:1.69.0')
+
+ # Ref: https://github.com/microsoft/cpprestsdk/commit/f9f518e4ad84577eb684ad8235181e4495299af4
+ # Ref: https://github.com/Microsoft/cpprestsdk/commit/6b2e0480018530b616f61d5cdc786c92ba148bb7
+ # Ref: https://github.com/microsoft/cpprestsdk/commit/70c1b14f39f5d47984fdd8a31fc357ebb5a37851
+ patch('Release.patch')
root_cmakelists_dir = 'Release'
diff --git a/var/spack/repos/builtin/packages/cryptsetup/package.py b/var/spack/repos/builtin/packages/cryptsetup/package.py
index 10519100ee..ccde594c84 100644
--- a/var/spack/repos/builtin/packages/cryptsetup/package.py
+++ b/var/spack/repos/builtin/packages/cryptsetup/package.py
@@ -25,6 +25,7 @@ class Cryptsetup(AutotoolsPackage):
depends_on('util-linux~libuuid', type=('build', 'link'))
depends_on('gettext', type=('build', 'link'))
+ depends_on('pkgconfig', type='build')
depends_on('autoconf', type='build')
depends_on('automake', type='build')
depends_on('libtool', type='build')
diff --git a/var/spack/repos/builtin/packages/cscope/package.py b/var/spack/repos/builtin/packages/cscope/package.py
index f0cc8f9fc5..2682ffea70 100644
--- a/var/spack/repos/builtin/packages/cscope/package.py
+++ b/var/spack/repos/builtin/packages/cscope/package.py
@@ -10,8 +10,9 @@ class Cscope(AutotoolsPackage):
"""Cscope is a developer's tool for browsing source code."""
homepage = "http://cscope.sourceforge.net/"
- url = "http://downloads.sourceforge.net/project/cscope/cscope/15.8b/cscope-15.8b.tar.gz"
+ url = "https://sourceforge.net/projects/cscope/files/cscope/v15.9/cscope-15.9.tar.gz"
+ version('15.9', sha256='c5505ae075a871a9cd8d9801859b0ff1c09782075df281c72c23e72115d9f159')
version('15.8b', sha256='4889d091f05aa0845384b1e4965aa31d2b20911fb2c001b2cdcffbcb7212d3af')
depends_on('ncurses')
@@ -20,4 +21,11 @@ class Cscope(AutotoolsPackage):
depends_on('bison', type='build')
depends_on('pkgconfig', type='build')
- build_targets = ['CURSES_LIBS=-lncursesw']
+ build_targets = ['CURSES_LIBS=-lncursesw -ltinfo']
+
+ def url_for_version(self, version):
+ url = "https://sourceforge.net/projects/cscope/files/cscope/{0}{1}/cscope-{1}.tar.gz"
+ if version >= Version('15.9'):
+ return url.format('v', version)
+ else:
+ return url.format('', version)
diff --git a/var/spack/repos/builtin/packages/darshan-runtime/package.py b/var/spack/repos/builtin/packages/darshan-runtime/package.py
index d728bf4037..f6487d498e 100644
--- a/var/spack/repos/builtin/packages/darshan-runtime/package.py
+++ b/var/spack/repos/builtin/packages/darshan-runtime/package.py
@@ -18,6 +18,8 @@ class DarshanRuntime(Package):
url = "http://ftp.mcs.anl.gov/pub/darshan/releases/darshan-3.1.0.tar.gz"
git = "https://xgitlab.cels.anl.gov/darshan/darshan.git"
+ maintainers = ['shanedsnyder', 'carns']
+
version('develop', branch='master')
version('3.1.7', sha256='9ba535df292727ac1e8025bdf2dc42942715205cad8319d925723fd88709e8d6')
version('3.1.6', sha256='21cb24e2a971c45e04476e00441b7fbea63d2afa727a5cf8b7a4a9d9004dd856')
diff --git a/var/spack/repos/builtin/packages/darshan-util/package.py b/var/spack/repos/builtin/packages/darshan-util/package.py
index 4acc4452fd..9fe3012b2c 100644
--- a/var/spack/repos/builtin/packages/darshan-util/package.py
+++ b/var/spack/repos/builtin/packages/darshan-util/package.py
@@ -16,6 +16,8 @@ class DarshanUtil(Package):
url = "http://ftp.mcs.anl.gov/pub/darshan/releases/darshan-3.1.0.tar.gz"
git = "https://xgitlab.cels.anl.gov/darshan/darshan.git"
+ maintainers = ['shanedsnyder', 'carns']
+
version('develop', branch='master')
version('3.1.7', sha256='9ba535df292727ac1e8025bdf2dc42942715205cad8319d925723fd88709e8d6')
version('3.1.6', sha256='21cb24e2a971c45e04476e00441b7fbea63d2afa727a5cf8b7a4a9d9004dd856')
diff --git a/var/spack/repos/builtin/packages/dealii/package.py b/var/spack/repos/builtin/packages/dealii/package.py
index 797931052e..1b9e02c044 100644
--- a/var/spack/repos/builtin/packages/dealii/package.py
+++ b/var/spack/repos/builtin/packages/dealii/package.py
@@ -151,6 +151,7 @@ class Dealii(CMakePackage, CudaPackage):
depends_on('slepc@:3.6.3', when='@:8.4.1+slepc+petsc+mpi')
depends_on('slepc~arpack', when='+slepc+petsc+mpi+int64')
depends_on('sundials@:3~pthread', when='@9.0:+sundials')
+ depends_on('trilinos gotype=int', when='+trilinos')
# Both Trilinos and SymEngine bundle the Teuchos RCP library.
# This leads to conflicts between macros defined in the included
# headers when they are not compiled in the same mode.
diff --git a/var/spack/repos/builtin/packages/dihydrogen/package.py b/var/spack/repos/builtin/packages/dihydrogen/package.py
new file mode 100644
index 0000000000..6de0cfb516
--- /dev/null
+++ b/var/spack/repos/builtin/packages/dihydrogen/package.py
@@ -0,0 +1,111 @@
+# Copyright 2013-2020 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 import *
+
+
+class Dihydrogen(CMakePackage, CudaPackage):
+ """DiHydrogen is the second version of the Hydrogen fork of the
+ well-known distributed linear algebra library,
+ Elemental. DiHydrogen aims to be a basic distributed
+ multilinear algebra interface with a particular emphasis on the
+ needs of the distributed machine learning effort, LBANN."""
+
+ homepage = "https://github.com/LLNL/DiHydrogen.git"
+ git = "https://github.com/LLNL/DiHydrogen.git"
+
+ maintainers = ['bvanessen']
+
+ version('master', branch='master')
+
+ variant('al', default=True,
+ description='Builds with Aluminum communication library')
+ variant('developer', default=False,
+ description='Enable extra warnings and force tests to be enabled.')
+ variant('half', default=False,
+ description='Enable FP16 support on the CPU.')
+ variant('legacy', default=False,
+ description='Enable the legacy DistConv code branch.')
+ variant('nvshmem', default=False,
+ description='Builds with support for NVSHMEM')
+ variant('openmp', default=False,
+ description='Enable CPU acceleration with OpenMP threads.')
+ variant('rocm', default=False,
+ description='Enable ROCm/HIP language features.')
+ variant('shared', default=True,
+ description='Enables the build of shared libraries')
+
+ # Override the default set of CUDA architectures with the relevant
+ # subset from lib/spack/spack/build_systems/cuda.py
+ cuda_arch_values = [
+ '60', '61', '62',
+ '70', '72', '75',
+ ]
+ variant('cuda_arch',
+ description='CUDA architecture',
+ values=spack.variant.auto_or_any_combination_of(*cuda_arch_values))
+
+ depends_on('mpi')
+ depends_on('catch2', type='test')
+
+ depends_on('aluminum', when='+al ~cuda')
+ depends_on('aluminum +gpu +nccl +mpi_cuda', when='+al +cuda')
+
+ depends_on('cuda', when=('+cuda' or '+legacy'))
+ depends_on('cudnn', when=('+cuda' or '+legacy'))
+ depends_on('cub', when=('+cuda' or '+legacy'))
+
+ # Legacy builds require cuda
+ conflicts('~cuda', when='+legacy')
+
+ depends_on('half', when='+half')
+
+ generator = 'Ninja'
+ depends_on('ninja', type='build')
+ depends_on('cmake@3.14.0:', type='build')
+
+ illegal_cuda_arch_values = [
+ '10', '11', '12', '13',
+ '20', '21',
+ '30', '32', '35', '37',
+ '50', '52', '53',
+ ]
+ for value in illegal_cuda_arch_values:
+ conflicts('cuda_arch=' + value)
+
+ @property
+ def libs(self):
+ shared = True if '+shared' in self.spec else False
+ return find_libraries(
+ 'libH2Core', root=self.prefix, shared=shared, recursive=True
+ )
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ '-DCMAKE_INSTALL_MESSAGE:STRING=LAZY',
+ '-DBUILD_SHARED_LIBS:BOOL=%s' % ('+shared' in spec),
+ '-DH2_ENABLE_CUDA=%s' % ('+cuda' in spec),
+ '-DH2_ENABLE_DISTCONV_LEGACY=%s' % ('+legacy' in spec),
+ '-DH2_ENABLE_OPENMP=%s' % ('+openmp' in spec),
+ '-DH2_ENABLE_FP16=%s' % ('+half' in spec),
+ '-DH2_ENABLE_HIP_ROCM=%s' % ('+rocm' in spec),
+ '-DH2_DEVELOPER_BUILD=%s' % ('+developer' in spec),
+ ]
+
+ if '+cuda' in spec:
+ cuda_arch = spec.variants['cuda_arch'].value
+ if len(cuda_arch) == 1 and cuda_arch[0] == 'auto':
+ args.append('-DCMAKE_CUDA_FLAGS=-arch=sm_60')
+ else:
+ cuda_arch = [x for x in spec.variants['cuda_arch'].value
+ if x != 'auto']
+ if cuda_arch:
+ args.append('-DCMAKE_CUDA_FLAGS={0}'.format(
+ ' '.join(self.cuda_flags(cuda_arch))
+ ))
+
+ return args
diff --git a/var/spack/repos/builtin/packages/eagle/package.py b/var/spack/repos/builtin/packages/eagle/package.py
new file mode 100644
index 0000000000..81e0be6f90
--- /dev/null
+++ b/var/spack/repos/builtin/packages/eagle/package.py
@@ -0,0 +1,46 @@
+# Copyright 2013-2020 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 import *
+
+
+class Eagle(MakefilePackage):
+ """EAGLE: Explicit Alternative Genome Likelihood Evaluator"""
+
+ homepage = "https://github.com/tony-kuo/eagle"
+ url = "https://github.com/tony-kuo/eagle/archive/v1.1.2.tar.gz"
+
+ version('1.1.2', sha256='afe967560d1f8fdbd0caf4b93b5f2a86830e9e4d399fee4a526140431343045e')
+
+ depends_on('curl')
+ depends_on('zlib')
+ depends_on('lzma')
+ depends_on('htslib')
+
+ def edit(self, spec, prefix):
+ # remove unused gcc flags
+ filter_file('$(LFLAGS) $(INCLUDES)', '', 'Makefile', string=True)
+
+ # drop static link to htslib
+ filter_file('$(LIBS)', '', 'Makefile', string=True)
+
+ # don't try to build htslib.
+ filter_file('all: UTIL HTSLIB', 'all: UTIL',
+ 'Makefile', string=True)
+
+ # add htslib link to ldflags
+ filter_file('-lcurl', '-lcurl -lhts', 'Makefile', string=True)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+
+ bins = [
+ 'eagle',
+ 'eagle-rc',
+ 'eagle-nm',
+ ]
+
+ for b in bins:
+ install(b, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py b/var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py
index 11054b409c..13100d89a8 100644
--- a/var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py
+++ b/var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py
@@ -19,6 +19,9 @@ class EclipseGcjParser(Package):
maintainers = ['citibeth']
+ # The server is sometimes a bit slow to respond
+ fetch_options = {'timeout': 60}
+
version('4.8', sha256='98fd128f1d374d9e42fd9d4836bdd249c6d511ebc6c0df17fbc1b9df96c3d781', expand=False)
phases = ('build', 'install')
diff --git a/var/spack/repos/builtin/packages/ecp-proxy-apps/package.py b/var/spack/repos/builtin/packages/ecp-proxy-apps/package.py
index c3f79c33bb..501ad6440d 100644
--- a/var/spack/repos/builtin/packages/ecp-proxy-apps/package.py
+++ b/var/spack/repos/builtin/packages/ecp-proxy-apps/package.py
@@ -4,31 +4,33 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-import os
from spack import *
-class EcpProxyApps(Package):
+class EcpProxyApps(BundlePackage):
"""This is a collection of packages that represents the official suite of
DOE/ECP proxy applications. This is a Spack bundle package that
installs the ECP proxy application suite.
"""
tags = ['proxy-app', 'ecp-proxy-app']
- maintainers = ['bhatele']
+ maintainers = ['rspavel']
homepage = "https://proxyapps.exascaleproject.org"
- # Dummy url
- url = 'https://github.com/exascaleproject/proxy-apps/archive/v1.0.tar.gz'
- version('2.1', sha256='604da008fc4ef3bdbc25505088d610333249e3e9745eac7dbfd05b91e33e218d')
- version('2.0', sha256='5f3cb3a772224e738c1dab42fb34d40f6b313af51ab1c575fb334e573e41e09a')
- version('1.1', sha256='8537e03588c0f46bebf5b7f07146c79812f2ebfb77d29e184baa4dd5f4603ee3')
- version('1.0', sha256='13d9795494dabdb4c724d2c0f322c2149b2507d2fd386ced12b54292b7ecf595')
+ version('3.0')
+ version('2.1')
+ version('2.0')
+ version('1.1')
+ version('1.0')
variant('candle', default=False,
description='Also build CANDLE Benchmarks')
+ # Added with release 3.0
+ depends_on('miniamr@1.4.4', when='@3.0:')
+ depends_on('xsbench@19', when='@3.0:')
+
# Added with release 2.1
depends_on('amg@1.2', when='@2.1:')
depends_on('miniamr@1.4.3', when='@2.1:')
@@ -40,15 +42,15 @@ class EcpProxyApps(Package):
depends_on('picsarlite@0.1', when='@2.0:')
depends_on('thornado-mini@1.0', when='@2.0:')
- depends_on('candle-benchmarks@0.1', when='+candle @2.0:')
+ depends_on('candle-benchmarks@0.1', when='+candle @2.0:2.1')
depends_on('laghos@2.0', when='@2.0:')
depends_on('macsio@1.1', when='@2.0:')
depends_on('sw4lite@1.1', when='@2.0:')
- depends_on('xsbench@18', when='@2.0:')
+ depends_on('xsbench@18', when='@2.0:2.1')
# Dependencies for version 2.0
depends_on('amg@1.1', when='@2.0')
- depends_on('miniamr@1.4.1', when='@2.0')
+ depends_on('miniamr@1.4.1', when='@2.0:2.1')
# Added with release 1.1
depends_on('examinimd@1.0', when='@1.1:')
@@ -71,12 +73,3 @@ class EcpProxyApps(Package):
# Removed after release 1.0
depends_on('comd@1.1', when='@1.0')
-
- # Dummy install for now, will be removed when metapackage is available
- def install(self, spec, prefix):
- with open(os.path.join(spec.prefix, 'package-list.txt'), 'w') as out:
- for dep in spec.dependencies(deptype='build'):
- out.write("%s\n" % dep.format(
- format_string='${PACKAGE} ${VERSION}'))
- os.symlink(dep.prefix, os.path.join(spec.prefix, dep.name))
- out.close()
diff --git a/var/spack/repos/builtin/packages/eigen/find-ptscotch.patch b/var/spack/repos/builtin/packages/eigen/find-ptscotch.patch
deleted file mode 100644
index 4f6e286b72..0000000000
--- a/var/spack/repos/builtin/packages/eigen/find-ptscotch.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-Version 3.3.4 contained a bug that prevented it from finding scotch~mpi.
-
-diff --git a/tmp/FindPTSCOTCH.cmake b/cmake/FindPTSCOTCH.cmake
-index 1396d05..23451b1 100644
---- a/tmp/FindPTSCOTCH.cmake
-+++ b/cmake/FindPTSCOTCH.cmake
-@@ -167,11 +167,11 @@ endif()
-
- # If found, add path to cmake variable
- # ------------------------------------
-+unset(PTSCOTCH_INCLUDE_DIRS)
- foreach(ptscotch_hdr ${PTSCOTCH_hdrs_to_find})
- if (PTSCOTCH_${ptscotch_hdr}_DIRS)
- list(APPEND PTSCOTCH_INCLUDE_DIRS "${PTSCOTCH_${ptscotch_hdr}_DIRS}")
- else ()
-- set(PTSCOTCH_INCLUDE_DIRS "PTSCOTCH_INCLUDE_DIRS-NOTFOUND")
- if (NOT PTSCOTCH_FIND_QUIETLY)
- message(STATUS "Looking for ptscotch -- ${ptscotch_hdr} not found")
- endif()
-@@ -255,7 +255,6 @@ foreach(ptscotch_lib ${PTSCOTCH_libs_to_find})
- list(APPEND PTSCOTCH_LIBRARIES "${PTSCOTCH_${ptscotch_lib}_LIBRARY}")
- list(APPEND PTSCOTCH_LIBRARY_DIRS "${${ptscotch_lib}_lib_path}")
- else ()
-- list(APPEND PTSCOTCH_LIBRARIES "${PTSCOTCH_${ptscotch_lib}_LIBRARY}")
- if (NOT PTSCOTCH_FIND_QUIETLY)
- message(STATUS "Looking for ptscotch -- lib ${ptscotch_lib} not found")
- endif()
diff --git a/var/spack/repos/builtin/packages/eigen/package.py b/var/spack/repos/builtin/packages/eigen/package.py
index 9b01807bad..283bd65165 100644
--- a/var/spack/repos/builtin/packages/eigen/package.py
+++ b/var/spack/repos/builtin/packages/eigen/package.py
@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-from spack import *
-
class Eigen(CMakePackage):
"""Eigen is a C++ template library for linear algebra matrices,
@@ -12,41 +10,32 @@ class Eigen(CMakePackage):
"""
homepage = 'http://eigen.tuxfamily.org/'
- url = 'https://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2'
-
- version('3.3.7', sha256='9f13cf90dedbe3e52a19f43000d71fdf72e986beb9a5436dddcd61ff9d77a3ce')
- version('3.3.5', sha256='7352bff3ea299e4c7d7fbe31c504f8eb9149d7e685dec5a12fbaa26379f603e2')
- version('3.3.4', sha256='dd254beb0bafc695d0f62ae1a222ff85b52dbaa3a16f76e781dce22d0d20a4a6')
- version('3.3.3', sha256='a4143fc45e4454b4b98fcea3516b3a79b8cdb3bc7fadf996d088c6a0d805fea1')
- version('3.3.1', sha256='a0b4cebaabd8f371d1b364f9723585fbcc7c9640ca60273b99835e6cf115f056')
- version('3.2.10', sha256='760e6656426fde71cc48586c971390816f456d30f0b5d7d4ad5274d8d2cb0a6d')
- version('3.2.9', sha256='4d1e036ec1ed4f4805d5c6752b76072d67538889f4003fadf2f6e00a825845ff')
- version('3.2.8', sha256='722a63d672b70f39c271c5e2a4a43ba14d12015674331790414fcb167c357e55')
- version('3.2.7', sha256='e58e1a11b23cf2754e32b3c5990f318a8461a3613c7acbf6035870daa45c2f3e')
-
- variant('metis', default=False,
- description='Enables metis permutations in sparse algebra')
- variant('scotch', default=False,
- description='Enables scotch/pastix sparse factorization methods')
- variant('fftw', default=False,
- description='Enables FFTW backend for the FFT plugin')
- variant('suitesparse', default=False,
- description='Enables SuiteSparse sparse factorization methods')
- variant('mpfr', default=False,
- description='Enables the multi-precisions floating-point plugin')
+ url = 'https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.gz'
+
+ version('3.3.7', sha256='d56fbad95abf993f8af608484729e3d87ef611dd85b3380a8bad1d5cbc373a57')
+ version('3.3.6', sha256='e7cd8c94d6516d1ada9893ccc7c9a400fcee99927c902f15adba940787104dba')
+ version('3.3.5', sha256='383407ab3d0c268074e97a2cbba84ac197fd24532f014aa2adc522355c1aa2d0')
+ version('3.3.4', sha256='c5ca6e3442fb48ae75159ca7568854d9ba737bc351460f27ee91b6f3f9fd1f3d')
+ version('3.3.3', sha256='fd72694390bd8e81586205717d2cf823e718f584b779a155db747d1e68481a2e')
+ version('3.3.2', sha256='8d7611247fba1236da4dee7a64607017b6fb9ca5e3f0dc44d480e5d33d5663a5')
+ version('3.3.1', sha256='50dd21a8997fce0857b27a126811ae8ee7619984ab5425ecf33510cec649e642')
+ version('3.3.0', sha256='de82e01f97e1a95f121bd3ace87aa1237818353c14e38f630a65f5ba2c92f0e1')
+ version('3.2.10', sha256='0920cb60ec38de5fb509650014eff7cc6d26a097c7b38c7db4b1aa5df5c85042')
+ version('3.2.9', sha256='f683b20259ad72c3d384c00278166dd2a42d99b78dcd589ed4a6ca74bbb4ca07')
+ version('3.2.8', sha256='64c54781cfe9eefef2792003ab04b271d4b2ec32eda6e9cdf120d7aad4ebb282')
+ version('3.2.7', sha256='0ea9df884873275bf39c2965d486fa2d112f3a64b97b60b45b8bc4bb034a36c1')
+ version('3.2.6', sha256='e097b8dcc5ad30d40af4ad72d7052e3f78639469baf83cffaadc045459cda21f')
+ version('3.2.5', sha256='8068bd528a2ff3885eb55225c27237cf5cda834355599f05c2c85345db8338b4')
+
+ # From http://eigen.tuxfamily.org/index.php?title=Main_Page#Requirements
+ # "Eigen doesn't have any dependencies other than the C++ standard
+ # library."
variant('build_type', default='RelWithDebInfo',
description='The build type to build',
values=('Debug', 'Release', 'RelWithDebInfo'))
- # TODO : dependency on googlehash, superlu, adolc missing
- depends_on('metis@5:', when='+metis')
- depends_on('scotch', when='+scotch')
- depends_on('fftw', when='+fftw')
- depends_on('suite-sparse', when='+suitesparse')
- depends_on('mpfr@2.3.0:', when='+mpfr')
- depends_on('gmp', when='+mpfr')
-
- patch('find-ptscotch.patch', when='@3.3.4')
+ # TODO: latex and doxygen needed to produce docs with make doc
+ # TODO: Other dependencies might be needed to test this package
def setup_run_environment(self, env):
env.prepend_path('CPATH', self.prefix.include.eigen3)
diff --git a/var/spack/repos/builtin/packages/elfutils/package.py b/var/spack/repos/builtin/packages/elfutils/package.py
index 07d852f254..e1ffdc0e3b 100644
--- a/var/spack/repos/builtin/packages/elfutils/package.py
+++ b/var/spack/repos/builtin/packages/elfutils/package.py
@@ -21,6 +21,9 @@ class Elfutils(AutotoolsPackage):
list_url = "https://sourceware.org/elfutils/ftp"
list_depth = 1
+ # Sourceware is often slow to respond.
+ fetch_options = {'timeout': 60}
+
version('0.178', sha256='31e7a00e96d4e9c4bda452e1f2cdac4daf8abd24f5e154dee232131899f3a0f2')
version('0.177', sha256='fa489deccbcae7d8c920f60d85906124c1989c591196d90e0fd668e3dc05042e')
version('0.176', sha256='eb5747c371b0af0f71e86215a5ebb88728533c3a104a43d4231963f308cd1023')
diff --git a/var/spack/repos/builtin/packages/er/package.py b/var/spack/repos/builtin/packages/er/package.py
index 55e5067f12..343a08ff91 100644
--- a/var/spack/repos/builtin/packages/er/package.py
+++ b/var/spack/repos/builtin/packages/er/package.py
@@ -9,8 +9,8 @@ from spack import *
class Er(CMakePackage):
"""Encoding and redundancy on a file set"""
- homepage = "https://github.com/ECP-VeloC/er"
- url = "https://github.com/ECP-VeloC/er/archive/v0.0.3.zip"
+ homepage = "https://github.com/ecp-veloc/er"
+ url = "https://github.com/ecp-veloc/er/archive/v0.0.3.zip"
git = "https://github.com/ecp-veloc/er.git"
tags = ['ecp']
diff --git a/var/spack/repos/builtin/packages/exchanger/package.py b/var/spack/repos/builtin/packages/exchanger/package.py
deleted file mode 100644
index 018459d8c3..0000000000
--- a/var/spack/repos/builtin/packages/exchanger/package.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2013-2020 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 import *
-
-
-class Exchanger(AutotoolsPackage):
- """Exchanger is a package containing several C++ base classes. These
- classes, when customized for a solver, can provide communication channels
- between solvers. This packaged is used by CitcomS for solver coupling."""
-
- homepage = "https://geodynamics.org/cig/software/exchanger/"
- url = "https://geodynamics.org/cig/software/exchanger/Exchanger-1.0.1.tar.gz"
-
- version('1.0.1', sha256='1e6c8311db96582bcf2c9aee16a863a5730c1aa54cb3aa7d0249239c6e0b68ee')
-
- depends_on('python', type=('build', 'run'))
- depends_on('py-merlin', type='build')
- depends_on('py-pythia@0.8.1.0:0.8.1.999', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/exiv2/package.py b/var/spack/repos/builtin/packages/exiv2/package.py
index 05d6de7bd8..53fad9cdfe 100644
--- a/var/spack/repos/builtin/packages/exiv2/package.py
+++ b/var/spack/repos/builtin/packages/exiv2/package.py
@@ -15,3 +15,6 @@ class Exiv2(CMakePackage):
url = "https://github.com/Exiv2/exiv2/archive/v0.27.2.tar.gz"
version('0.27.2', sha256='3dbcaf01fbc5b98d42f091d1ff0d4b6cd9750dc724de3d9c0d113948570b2934')
+
+ depends_on('zlib', type='link')
+ depends_on('expat@2.2.6:', type='link')
diff --git a/var/spack/repos/builtin/packages/expect/package.py b/var/spack/repos/builtin/packages/expect/package.py
index 4cab48a064..1afe8add1e 100644
--- a/var/spack/repos/builtin/packages/expect/package.py
+++ b/var/spack/repos/builtin/packages/expect/package.py
@@ -66,7 +66,8 @@ class Expect(AutotoolsPackage):
fix_darwin_install_name(
join_path(self.prefix.lib, 'expect{0}'.format(self.version)))
- old = 'libexpect{0}.dylib'.format(self.version)
- new = glob.glob(join_path(self.prefix.lib, 'expect*', 'libexpect*'))[0]
- install_name_tool = Executable('install_name_tool')
- install_name_tool('-change', old, new, self.prefix.bin.expect)
+ old = 'libexpect{0}.dylib'.format(self.version)
+ new = glob.glob(join_path(self.prefix.lib, 'expect*',
+ 'libexpect*'))[0]
+ install_name_tool = Executable('install_name_tool')
+ install_name_tool('-change', old, new, self.prefix.bin.expect)
diff --git a/var/spack/repos/builtin/packages/exuberant-ctags/package.py b/var/spack/repos/builtin/packages/exuberant-ctags/package.py
index 6efb00602c..421b995050 100644
--- a/var/spack/repos/builtin/packages/exuberant-ctags/package.py
+++ b/var/spack/repos/builtin/packages/exuberant-ctags/package.py
@@ -8,7 +8,7 @@ from spack import *
class ExuberantCtags(AutotoolsPackage):
"""The canonical ctags generator"""
- homepage = "ctags.sourceforge.net"
+ homepage = "http://ctags.sourceforge.net"
url = "http://downloads.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz"
version('5.8', sha256='0e44b45dcabe969e0bbbb11e30c246f81abe5d32012db37395eb57d66e9e99c7')
diff --git a/var/spack/repos/builtin/packages/f77-zmq/package.py b/var/spack/repos/builtin/packages/f77-zmq/package.py
index c78f3f4110..bab4469442 100644
--- a/var/spack/repos/builtin/packages/f77-zmq/package.py
+++ b/var/spack/repos/builtin/packages/f77-zmq/package.py
@@ -15,10 +15,12 @@ class F77Zmq(MakefilePackage):
maintainers = ['scemama']
+ version('4.3.2', sha256='f1fb7544d38d9bb7235f98c96f241875ddcb0d37ed950618c23d4e4d666a73ca')
version('4.3.1', sha256='a15d72d93022d3e095528d2808c7767cece974a2dc0e2dd95e4c122f60fcf0a8')
depends_on('libzmq')
- depends_on('python', type='build')
+ depends_on('python@3:', type='build', when="@:4.3.1")
+ depends_on('python', type='build', when="@4.3.2:")
def setup_build_environment(self, env):
env.append_flags('CFLAGS', '-O3')
diff --git a/var/spack/repos/builtin/packages/fabtests/package.py b/var/spack/repos/builtin/packages/fabtests/package.py
index a71a69ab37..a9f76b5d07 100644
--- a/var/spack/repos/builtin/packages/fabtests/package.py
+++ b/var/spack/repos/builtin/packages/fabtests/package.py
@@ -7,15 +7,30 @@ from spack import *
class Fabtests(AutotoolsPackage):
- """Fabtests provides a set of examples that uses libfabric.
-
- DEPRECATED. Fabtests has merged with the libfabric git repo."""
+ """Fabtests provides a set of runtime analysis tools and examples that use
+ libfabric."""
homepage = "http://libfabric.org"
- url = "https://github.com/ofiwg/fabtests/releases/download/v1.5.3/fabtests-1.5.3.tar.gz"
+ url = "https://github.com/ofiwg/libfabric/releases/download/v1.9.1/fabtests-1.9.1.tar.bz2"
+ version('1.9.1', sha256='6f8ced2c6b3514759a0e177c8b2a19125e4ef0714d4cc0fe0386b33bd6cd5585')
+ version('1.9.0', sha256='60cc21db7092334904cbdafd142b2403572976018a22218e7c453195caef366e')
+ version('1.8.1', sha256='e9005d8fe73ca3849c872649c29811846bd72a62f897ecab73a08c7a9514f37b')
+ # old releases, published in a separate repository
+ version('1.6.2', sha256='37405c6202f5b1aa81f8ea211237a2d87937f06254fa3ed44a9b69ac73b234e8')
+ version('1.6.1', sha256='d357466b868fdaf1560d89ffac4c4e93a679486f1b4221315644d8d3e21174bf')
version('1.6.0', sha256='dc3eeccccb005205017f5af60681ede15782ce202a0103450a6d56a7ff515a67')
version('1.5.3', sha256='3835b3bf86cd00d23df0ddba8bf317e4a195e8d5c3c2baa918b373d548f77f29')
+ version('1.5.0', sha256='1dddd446c3f1df346899f9a8636f1b4265de5b863103ae24876e9f0c1e40a69d')
+ version('1.4.2', sha256='3b78d0ca1b223ff21b7f5b3627e67e358e3c18b700f86b017e2233fee7e88c2e')
+
+ for v in ['1.4.2', '1.5.0', '1.5.3', '1.6.0', '1.6.1', '1.6.2',
+ '1.8.1', '1.9.0', '1.9.1']:
+ depends_on('libfabric@{0}'.format(v), when='@{0}'.format(v))
- depends_on('libfabric@1.6.0', when='@1.6.0')
- depends_on('libfabric@1.5.3', when='@1.5.3')
+ def url_for_version(self, version):
+ if version >= Version('1.8.1'):
+ url = "https://github.com/ofiwg/libfabric/releases/download/v{0}/fabtests-{0}.tar.bz2"
+ else:
+ url = "https://github.com/ofiwg/fabtests/releases/download/v{0}/fabtests-{0}.tar.gz"
+ return url.format(version.dotted)
diff --git a/var/spack/repos/builtin/packages/fairlogger/package.py b/var/spack/repos/builtin/packages/fairlogger/package.py
index 3190f1702c..77d4616097 100644
--- a/var/spack/repos/builtin/packages/fairlogger/package.py
+++ b/var/spack/repos/builtin/packages/fairlogger/package.py
@@ -17,7 +17,8 @@ class Fairlogger(CMakePackage):
maintainers = ['dennisklein', 'ChristianTackeGSI']
# generator = 'Ninja'
- version('develop', branch='dev')
+ version('develop', branch='dev', get_full_repo=True)
+ version('1.6.2', sha256='5c6ef0c0029eb451fee71756cb96e6c5011040a9813e8889667b6f3b6b04ed03')
version('1.6.1', sha256='3894580f4c398d724ba408e410e50f70c9f452e8cfaf7c3ff8118c08df28eaa8')
version('1.6.0', sha256='721e8cadfceb2f63014c2a727e098babc6deba653baab8866445a772385d0f5b')
version('1.5.0', sha256='8e74e0b1e50ee86f4fca87a44c6b393740b32099ac3880046bf252c31c58dd42')
@@ -31,19 +32,22 @@ class Fairlogger(CMakePackage):
values=('Debug', 'Release', 'RelWithDebInfo'),
multi=False,
description='CMake build type')
- variant('cxxstd', default='11',
+ variant('cxxstd', default='default',
values=('11', '14', '17'),
multi=False,
description='Use the specified C++ standard when building.')
variant('pretty',
default=False,
- description='Use BOOST_PRETTY_FUNCTION macro.')
+ description='Use BOOST_PRETTY_FUNCTION macro (Supported by 1.4+).')
conflicts('+pretty', when='@:1.3.99')
depends_on('cmake@3.9.4:', type='build')
depends_on('git', type='build', when='@develop')
+
depends_on('boost', when='+pretty')
- depends_on('fmt@5.3.0:', when='@1.6.0:')
+ conflicts('^boost@1.70:', when='^cmake@:3.14')
+ depends_on('fmt@5.3.0:5.99', when='@1.6.0:1.6.1')
+ depends_on('fmt@5.3.0:', when='@1.6.2:')
def patch(self):
"""FairLogger gets its version number from git.
@@ -55,9 +59,10 @@ class Fairlogger(CMakePackage):
'CMakeLists.txt')
def cmake_args(self):
- cxxstd = self.spec.variants['cxxstd'].value
args = []
- args.append('-DCMAKE_CXX_STANDARD=%s' % cxxstd)
+ cxxstd = self.spec.variants['cxxstd'].value
+ if cxxstd != 'default':
+ args.append('-DCMAKE_CXX_STANDARD=%s' % cxxstd)
args.append('-DUSE_BOOST_PRETTY_FUNCTION=%s' %
('ON' if '+pretty' in self.spec else 'OFF'))
if self.spec.satisfies('@1.6:'):
diff --git a/var/spack/repos/builtin/packages/fast-global-file-status/package.py b/var/spack/repos/builtin/packages/fast-global-file-status/package.py
index afc2ef23de..1f48dc4319 100644
--- a/var/spack/repos/builtin/packages/fast-global-file-status/package.py
+++ b/var/spack/repos/builtin/packages/fast-global-file-status/package.py
@@ -18,6 +18,7 @@ class FastGlobalFileStatus(AutotoolsPackage):
depends_on('mrnet')
depends_on('mount-point-attributes')
depends_on('mpi')
+ depends_on('openssl')
def configure_args(self):
spec = self.spec
diff --git a/var/spack/repos/builtin/packages/fd-find/package.py b/var/spack/repos/builtin/packages/fd-find/package.py
new file mode 100644
index 0000000000..faf7374cb6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fd-find/package.py
@@ -0,0 +1,21 @@
+# Copyright 2013-2020 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 import *
+
+
+class FdFind(Package):
+ """A simple, fast and user-friendly alternative to 'find'."""
+
+ homepage = "https://github.com/sharkdp/fd"
+ url = "https://github.com/sharkdp/fd/archive/v7.3.0.tar.gz"
+
+ version('7.4.0', sha256='33570ba65e7f8b438746cb92bb9bc4a6030b482a0d50db37c830c4e315877537')
+
+ depends_on('rust')
+
+ def install(self, spec, prefix):
+ cargo = which('cargo')
+ cargo('install', '--root', prefix, '--path', '.')
diff --git a/var/spack/repos/builtin/packages/filo/package.py b/var/spack/repos/builtin/packages/filo/package.py
new file mode 100644
index 0000000000..aeba476c04
--- /dev/null
+++ b/var/spack/repos/builtin/packages/filo/package.py
@@ -0,0 +1,32 @@
+# Copyright 2013-2020 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 import *
+
+
+class Filo(CMakePackage):
+ """File flush and fetch, with MPI"""
+
+ homepage = "https://github.com/ecp-veloc/filo"
+ git = "https://github.com/ecp-veloc/filo.git"
+
+ tags = ['ecp']
+
+ version('master', branch='master')
+
+ depends_on('mpi')
+ depends_on('axl')
+ depends_on('kvtree')
+ depends_on('spath')
+
+ def cmake_args(self):
+ args = []
+ args.append("-DMPI_C_COMPILER=%s" % self.spec['mpi'].mpicc)
+ if self.spec.satisfies('platform=cray'):
+ args.append("-DFILO_LINK_STATIC=ON")
+ args.append("-DWITH_AXL_PREFIX=%s" % self.spec['axl'].prefix)
+ args.append("-DWITH_KVTREE_PREFIX=%s" % self.spec['kvtree'].prefix)
+ args.append("-DWITH_SPATH_PREFIX=%s" % self.spec['spath'].prefix)
+ return args
diff --git a/var/spack/repos/builtin/packages/flatbuffers/package.py b/var/spack/repos/builtin/packages/flatbuffers/package.py
index 538922a7de..72ad2e599c 100644
--- a/var/spack/repos/builtin/packages/flatbuffers/package.py
+++ b/var/spack/repos/builtin/packages/flatbuffers/package.py
@@ -17,3 +17,16 @@ class Flatbuffers(CMakePackage):
version('1.10.0', sha256='3714e3db8c51e43028e10ad7adffb9a36fc4aa5b1a363c2d0c4303dd1be59a7c')
version('1.9.0', sha256='5ca5491e4260cacae30f1a5786d109230db3f3a6e5a0eb45d0d0608293d247e3')
version('1.8.0', sha256='c45029c0a0f1a88d416af143e34de96b3091642722aa2d8c090916c6d1498c2e')
+
+ variant('shared', default=True,
+ description='Build shared instead of static libraries')
+
+ def cmake_args(self):
+ args = []
+ args.append('-DFLATBUFFERS_BUILD_SHAREDLIB={0}'.format(
+ 'ON' if '+shared' in self.spec else 'OFF'))
+ args.append('-DFLATBUFFERS_BUILD_FLATLIB={0}'.format(
+ 'ON' if '+shared' not in self.spec else 'OFF'))
+ if 'darwin' in self.spec.architecture:
+ args.append('-DCMAKE_MACOSX_RPATH=ON')
+ return args
diff --git a/var/spack/repos/builtin/packages/flecsi/package.py b/var/spack/repos/builtin/packages/flecsi/package.py
index d78f350c59..fccdd686b0 100644
--- a/var/spack/repos/builtin/packages/flecsi/package.py
+++ b/var/spack/repos/builtin/packages/flecsi/package.py
@@ -20,12 +20,17 @@ class Flecsi(CMakePackage):
homepage = 'http://flecsi.org/'
git = 'https://github.com/laristra/flecsi.git'
- version('master', branch='master', submodules=False, preferred=True)
+ version('devel', branch='devel', submodules=False, preferred=False)
+ version('1', branch='1', submodules=False, preferred=True)
+ version('1.4', branch='1.4', submodules=False, preferred=False)
- variant('build_type', default='Release', values=('Debug', 'Release'),
+ variant('build_type', default='Release',
+ values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'),
description='The build type to build', multi=False)
- variant('backend', default='mpi', values=('serial', 'mpi', 'legion', 'hpx'),
+ variant('backend', default='mpi', values=('serial', 'mpi', 'legion', 'hpx', 'charmpp'),
description='Backend to use for distributed memory', multi=False)
+ variant('debug_backend', default=False,
+ description='Build Backend with Debug Mode')
variant('minimal', default=False,
description='Disable FindPackageMetis')
variant('shared', default=True,
@@ -48,28 +53,32 @@ class Flecsi(CMakePackage):
description='Build FleCSI Tutorials')
variant('flecstan', default=False,
description='Build FleCSI Static Analyzer')
+ variant('cinch', default=False,
+ description='Enable External Cinch')
depends_on('cmake@3.12:', type='build')
# Requires cinch > 1.0 due to cinchlog installation issue
- depends_on('cinch@1.01:', type='build')
+ depends_on('cinch@1.01:', type='build', when='+cinch')
depends_on('mpi', when='backend=mpi')
depends_on('mpi', when='backend=legion')
depends_on('mpi', when='backend=hpx')
- depends_on('legion@ctrl-rep +shared +mpi +hdf5', when='backend=legion +hdf5')
- depends_on('legion@ctrl-rep +shared +mpi', when='backend=legion ~hdf5')
- depends_on('hpx@1.3.0 cxxstd=14', when='backend=hpx')
+ depends_on('legion@ctrl-rep+shared+mpi+hdf5 build_type=Debug', when='backend=legion +debug_backend +hdf5')
+ depends_on('legion@ctrl-rep+shared+mpi build_type=Debug', when='backend=legion +debug_backend ~hdf5')
+ depends_on('legion@ctrl-rep+shared+mpi+hdf5 build_type=Release', when='backend=legion ~debug_backend +hdf5')
+ depends_on('legion@ctrl-rep+shared+mpi build_type=Release', when='backend=legion ~debug_backend ~hdf5')
+ depends_on('hpx@1.3.0 cxxstd=14 malloc=system build_type=Debug', when='backend=hpx +debug_backend')
+ depends_on('hpx@1.3.0 cxxstd=14 malloc=system build_type=Release', when='backend=hpx ~debug_backend')
depends_on('boost@1.70.0: cxxstd=14 +program_options')
depends_on('metis@5.1.0:')
depends_on('parmetis@4.0.3:')
- depends_on('hdf5', when='+hdf5')
+ depends_on('hdf5+mpi', when='+hdf5')
depends_on('caliper', when='+caliper')
depends_on('graphviz', when='+graphviz')
depends_on('python@3.0:', when='+tutorial')
depends_on('llvm', when='+flecstan')
conflicts('+tutorial', when='backend=hpx')
-# conflicts('+hdf5', when='backend=hpx')
-# conflicts('+hdf5', when='backend=mpi')
+ # conflicts('+hdf5', when='backend=hpx')
def cmake_args(self):
spec = self.spec
@@ -80,7 +89,9 @@ class Flecsi(CMakePackage):
'-DENABLE_COLORING=ON',
'-DENABLE_DEVEL_TARGETS=ON'
]
- options.append('-DCINCH_SOURCE_DIR=' + spec['cinch'].prefix)
+
+ if '+cinch' in spec:
+ options.append('-DCINCH_SOURCE_DIR=' + spec['cinch'].prefix)
if spec.variants['backend'].value == 'legion':
options.append('-DFLECSI_RUNTIME_MODEL=legion')
@@ -95,6 +106,11 @@ class Flecsi(CMakePackage):
options.append('-DFLECSI_RUNTIME_MODEL=serial')
options.append('-DENABLE_MPI=OFF')
+ if self.run_tests:
+ options.append('-DENABLE_UNIT_TESTS=ON')
+ else:
+ options.append('-DENABLE_UNIT_TESTS=OFF')
+
if '+minimal' in spec:
options.append('-DCMAKE_DISABLE_FIND_PACKAGE_METIS=ON')
else:
@@ -104,12 +120,7 @@ class Flecsi(CMakePackage):
else:
options.append('-DBUILD_SHARED_LIBS=OFF')
- if self.run_tests:
- options.append('-DENABLE_UNIT_TESTS=ON')
- else:
- options.append('-DENABLE_UNIT_TESTS=OFF')
-
- if '+hdf5' in spec and spec.variants['backend'].value == 'legion':
+ if '+hdf5' in spec and spec.variants['backend'].value != 'hpx':
options.append('-DENABLE_HDF5=ON')
else:
options.append('-DENABLE_HDF5=OFF')
diff --git a/var/spack/repos/builtin/packages/freeipmi/package.py b/var/spack/repos/builtin/packages/freeipmi/package.py
new file mode 100644
index 0000000000..bcb3e502cd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/freeipmi/package.py
@@ -0,0 +1,40 @@
+# Copyright 2013-2020 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 import *
+import llnl.util.tty as tty
+
+
+class Freeipmi(AutotoolsPackage):
+ """FreeIPMI provides in-band and out-of-band IPMI software based on the IPMI
+ v1.5/2.0 specification. The IPMI specification defines a set of interfaces
+ for platform management and is implemented by a number vendors for system
+ management. The features of IPMI that most users will be interested in are
+ sensor monitoring, system event monitoring, power control, and
+ serial-over-LAN (SOL). The FreeIPMI tools and libraries listed below should
+ provide users with the ability to access and utilize these and many other
+ features. A number of useful features for large HPC or cluster environments
+ have also been implemented into FreeIPMI. See the README or FAQ for more
+ info."""
+
+ homepage = "https://www.gnu.org/software/freeipmi/"
+ url = "https://ftp.gnu.org/gnu/freeipmi/freeipmi-1.6.4.tar.gz"
+
+ version('1.6.4',
+ sha256='65dfbb95a30438ba247f01a58498862a37d2e71c8c950bcfcee459d079241a3c')
+
+ depends_on('libgcrypt')
+
+ parallel = False
+
+ def configure_args(self):
+ # FIXME: If root checking of root installation is added fix this:
+ # Discussed in issue #4432
+ tty.warn("Requires 'root' for bmc-watchdog.service installation to"
+ " /lib/systemd/system/ !")
+
+ args = ['--prefix={0}'.format(prefix)]
+
+ return args
diff --git a/var/spack/repos/builtin/packages/g4abla/package.py b/var/spack/repos/builtin/packages/g4abla/package.py
index 2ce2f6ece1..b14f88d4d9 100644
--- a/var/spack/repos/builtin/packages/g4abla/package.py
+++ b/var/spack/repos/builtin/packages/g4abla/package.py
@@ -11,6 +11,7 @@ class G4abla(Package):
"""Geant4 data for nuclear shell effects in INCL/ABLA hadronic mode"""
homepage = "http://geant4.web.cern.ch"
url = "http://geant4-data.web.cern.ch/geant4-data/datasets/G4ABLA.3.0.tar.gz"
+ maintainers = ['drbenmorgan']
version(
'3.0', sha256='99fd4dcc9b4949778f14ed8364088e45fa4ff3148b3ea36f9f3103241d277014')
diff --git a/var/spack/repos/builtin/packages/g4emlow/package.py b/var/spack/repos/builtin/packages/g4emlow/package.py
index 81e6b856d4..df6af19e26 100644
--- a/var/spack/repos/builtin/packages/g4emlow/package.py
+++ b/var/spack/repos/builtin/packages/g4emlow/package.py
@@ -11,6 +11,7 @@ class G4emlow(Package):
"""Geant4 data files for low energy electromagnetic processes."""
homepage = "http://geant4.web.cern.ch"
url = "http://geant4-data.web.cern.ch/geant4-data/datasets/G4EMLOW.6.50.tar.gz"
+ maintainers = ['drbenmorgan']
version(
'6.50', sha256='c97be73fece5fb4f73c43e11c146b43f651c6991edd0edf8619c9452f8ab1236')
diff --git a/var/spack/repos/builtin/packages/g4ensdfstate/package.py b/var/spack/repos/builtin/packages/g4ensdfstate/package.py
index 514593f34c..06b50b3754 100644
--- a/var/spack/repos/builtin/packages/g4ensdfstate/package.py
+++ b/var/spack/repos/builtin/packages/g4ensdfstate/package.py
@@ -12,6 +12,8 @@ class G4ensdfstate(Package):
homepage = "http://geant4.web.cern.ch"
url = "http://geant4-data.web.cern.ch/geant4-data/datasets/G4ENSDFSTATE.2.1.tar.gz"
+ maintainers = ['drbenmorgan']
+
version('2.1', sha256='933e7f99b1c70f24694d12d517dfca36d82f4e95b084c15d86756ace2a2790d9')
version('2.2', sha256='dd7e27ef62070734a4a709601f5b3bada6641b111eb7069344e4f99a01d6e0a6')
diff --git a/var/spack/repos/builtin/packages/g4ndl/package.py b/var/spack/repos/builtin/packages/g4ndl/package.py
index 909f732b5c..7ab6c9f26d 100644
--- a/var/spack/repos/builtin/packages/g4ndl/package.py
+++ b/var/spack/repos/builtin/packages/g4ndl/package.py
@@ -12,6 +12,8 @@ class G4ndl(Package):
homepage = "http://geant4.web.cern.ch"
url = "http://geant4-data.web.cern.ch/geant4-data/datasets/G4NDL.4.5.tar.gz"
+ maintainers = ['drbenmorgan']
+
version('4.5', sha256='cba928a520a788f2bc8229c7ef57f83d0934bb0c6a18c31ef05ef4865edcdf8e')
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/g4neutronxs/package.py b/var/spack/repos/builtin/packages/g4neutronxs/package.py
index f853780c35..df3de0696c 100644
--- a/var/spack/repos/builtin/packages/g4neutronxs/package.py
+++ b/var/spack/repos/builtin/packages/g4neutronxs/package.py
@@ -13,6 +13,8 @@ class G4neutronxs(Package):
homepage = "http://geant4.web.cern.ch"
url = "http://geant4-data.web.cern.ch/geant4-data/datasets/G4NEUTRONXS.1.4.tar.gz"
+ maintainers = ['drbenmorgan']
+
version('1.4', sha256='57b38868d7eb060ddd65b26283402d4f161db76ed2169437c266105cca73a8fd')
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/g4photonevaporation/package.py b/var/spack/repos/builtin/packages/g4photonevaporation/package.py
index ff47072c50..4e5c62b999 100644
--- a/var/spack/repos/builtin/packages/g4photonevaporation/package.py
+++ b/var/spack/repos/builtin/packages/g4photonevaporation/package.py
@@ -12,6 +12,8 @@ class G4photonevaporation(Package):
homepage = "http://geant4.web.cern.ch"
url = "http://geant4-data.web.cern.ch/geant4-data/datasets/G4PhotonEvaporation.4.3.2.tar.gz"
+ maintainers = ['drbenmorgan']
+
version('4.3.2', sha256='d4641a6fe1c645ab2a7ecee09c34e5ea584fb10d63d2838248bfc487d34207c7')
version('5.2', sha256='83607f8d36827b2a7fca19c9c336caffbebf61a359d0ef7cee44a8bcf3fc2d1f')
diff --git a/var/spack/repos/builtin/packages/g4pii/package.py b/var/spack/repos/builtin/packages/g4pii/package.py
index 65ca27aba2..2e238a6418 100644
--- a/var/spack/repos/builtin/packages/g4pii/package.py
+++ b/var/spack/repos/builtin/packages/g4pii/package.py
@@ -12,6 +12,8 @@ class G4pii(Package):
homepage = "http://geant4.web.cern.ch"
url = "http://geant4-data.web.cern.ch/geant4-data/datasets/G4PII.1.3.tar.gz"
+ maintainers = ['drbenmorgan']
+
version('1.3', sha256='6225ad902675f4381c98c6ba25fc5a06ce87549aa979634d3d03491d6616e926')
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/g4radioactivedecay/package.py b/var/spack/repos/builtin/packages/g4radioactivedecay/package.py
index e36b0464e1..c281ff63cd 100644
--- a/var/spack/repos/builtin/packages/g4radioactivedecay/package.py
+++ b/var/spack/repos/builtin/packages/g4radioactivedecay/package.py
@@ -12,6 +12,8 @@ class G4radioactivedecay(Package):
homepage = "http://geant4.web.cern.ch"
url = "http://geant4-data.web.cern.ch/geant4-data/datasets/G4RadioactiveDecay.5.1.1.tar.gz"
+ maintainers = ['drbenmorgan']
+
version('5.1.1', sha256='f7a9a0cc998f0d946359f2cb18d30dff1eabb7f3c578891111fc3641833870ae')
version('5.2', sha256='99c038d89d70281316be15c3c98a66c5d0ca01ef575127b6a094063003e2af5d')
diff --git a/var/spack/repos/builtin/packages/g4realsurface/package.py b/var/spack/repos/builtin/packages/g4realsurface/package.py
index d20e6fddc5..b741b61ef8 100644
--- a/var/spack/repos/builtin/packages/g4realsurface/package.py
+++ b/var/spack/repos/builtin/packages/g4realsurface/package.py
@@ -12,6 +12,8 @@ class G4realsurface(Package):
homepage = "http://geant4.web.cern.ch"
url = "http://geant4-data.web.cern.ch/geant4-data/datasets/RealSurface.1.0.tar.gz"
+ maintainers = ['drbenmorgan']
+
version('1.0', sha256='3e2d2506600d2780ed903f1f2681962e208039329347c58ba1916740679020b1')
version('2.1', sha256='2a287adbda1c0292571edeae2082a65b7f7bd6cf2bf088432d1d6f889426dcf3')
version('2.1.1', sha256='90481ff97a7c3fa792b7a2a21c9ed80a40e6be386e581a39950c844b2dd06f50')
diff --git a/var/spack/repos/builtin/packages/g4saiddata/package.py b/var/spack/repos/builtin/packages/g4saiddata/package.py
index 0565276d90..7b03177f73 100644
--- a/var/spack/repos/builtin/packages/g4saiddata/package.py
+++ b/var/spack/repos/builtin/packages/g4saiddata/package.py
@@ -12,6 +12,8 @@ class G4saiddata(Package):
homepage = "http://geant4.web.cern.ch"
url = "http://geant4-data.web.cern.ch/geant4-data/datasets/G4SAIDDATA.1.1.tar.gz"
+ maintainers = ['drbenmorgan']
+
version('1.1', sha256='a38cd9a83db62311922850fe609ecd250d36adf264a88e88c82ba82b7da0ed7f')
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/g4tendl/package.py b/var/spack/repos/builtin/packages/g4tendl/package.py
index 04ad834271..2a3ecbc074 100644
--- a/var/spack/repos/builtin/packages/g4tendl/package.py
+++ b/var/spack/repos/builtin/packages/g4tendl/package.py
@@ -12,6 +12,8 @@ class G4tendl(Package):
homepage = "http://geant4.web.cern.ch"
url = "http://geant4-data.web.cern.ch/geant4-data/datasets/G4TENDL.1.3.tar.gz"
+ maintainers = ['drbenmorgan']
+
version('1.3', sha256='52ad77515033a5d6f995c699809b464725a0e62099b5e55bf07c8bdd02cd3bce')
version('1.3.2', sha256='3b2987c6e3bee74197e3bd39e25e1cc756bb866c26d21a70f647959fc7afb849')
diff --git a/var/spack/repos/builtin/packages/gcc/glibc-2.31-libsanitizer-1.patch b/var/spack/repos/builtin/packages/gcc/glibc-2.31-libsanitizer-1.patch
new file mode 100644
index 0000000000..96037707d3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gcc/glibc-2.31-libsanitizer-1.patch
@@ -0,0 +1,37 @@
+From ce9568e9e9cf6094be30e748821421e703754ffc Mon Sep 17 00:00:00 2001
+From: Jakub Jelinek <jakub@redhat.com>
+Date: Fri, 8 Nov 2019 19:53:18 +0100
+Subject: [PATCH] backport: re PR sanitizer/92154 (new glibc breaks arm
+ bootstrap due to libsanitizer)
+
+ Backported from mainline
+ 2019-10-22 Tamar Christina <tamar.christina@arm.com>
+
+ PR sanitizer/92154
+ * sanitizer_common/sanitizer_platform_limits_posix.cc:
+ Cherry-pick compiler-rt revision r375220.
+
+From-SVN: r277981
+---
+ libsanitizer/ChangeLog | 9 +++++++++
+ .../sanitizer_common/sanitizer_platform_limits_posix.cc | 6 +++++-
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
+index 6cd4a5bac8b0..06a605ff4670 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
+@@ -1156,8 +1156,12 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, uid);
+ CHECK_SIZE_AND_OFFSET(ipc_perm, gid);
+ CHECK_SIZE_AND_OFFSET(ipc_perm, cuid);
+ CHECK_SIZE_AND_OFFSET(ipc_perm, cgid);
+-#if !defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)
++#if (!defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)) && \
++ !defined(__arm__)
+ /* On aarch64 glibc 2.20 and earlier provided incorrect mode field. */
++/* On Arm glibc 2.31 and later provide a different mode field, this field is
++ never used by libsanitizer so we can simply ignore this assert for all glibc
++ versions. */
+ CHECK_SIZE_AND_OFFSET(ipc_perm, mode);
+ #endif
+
diff --git a/var/spack/repos/builtin/packages/gcc/glibc-2.31-libsanitizer-2.patch b/var/spack/repos/builtin/packages/gcc/glibc-2.31-libsanitizer-2.patch
new file mode 100644
index 0000000000..75234436e8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gcc/glibc-2.31-libsanitizer-2.patch
@@ -0,0 +1,73 @@
+From 75003cdd23c310ec385344e8040d490e8dd6d2be Mon Sep 17 00:00:00 2001
+From: Jakub Jelinek <jakub@redhat.com>
+Date: Fri, 20 Dec 2019 17:58:35 +0100
+Subject: [PATCH] backport: re PR sanitizer/92154 (new glibc breaks arm
+ bootstrap due to libsanitizer)
+
+ Backported from mainline
+ 2019-11-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/92154
+ * sanitizer_common/sanitizer_platform_limits_posix.h: Cherry-pick
+ llvm-project revision 947f9692440836dcb8d88b74b69dd379d85974ce.
+ * sanitizer_common/sanitizer_platform_limits_posix.cc: Likewise.
+
+From-SVN: r279653
+---
+ libsanitizer/ChangeLog | 10 ++++++++++
+ .../sanitizer_platform_limits_posix.cc | 9 +++------
+ .../sanitizer_platform_limits_posix.h | 15 +--------------
+ 3 files changed, 14 insertions(+), 20 deletions(-)
+
+diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
+index 06a605ff4670..d823a12190c0 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
++++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
+@@ -1156,12 +1156,9 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, uid);
+ CHECK_SIZE_AND_OFFSET(ipc_perm, gid);
+ CHECK_SIZE_AND_OFFSET(ipc_perm, cuid);
+ CHECK_SIZE_AND_OFFSET(ipc_perm, cgid);
+-#if (!defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)) && \
+- !defined(__arm__)
+-/* On aarch64 glibc 2.20 and earlier provided incorrect mode field. */
+-/* On Arm glibc 2.31 and later provide a different mode field, this field is
+- never used by libsanitizer so we can simply ignore this assert for all glibc
+- versions. */
++#if !SANITIZER_LINUX || __GLIBC_PREREQ (2, 31)
++/* glibc 2.30 and earlier provided 16-bit mode field instead of 32-bit
++ on many architectures. */
+ CHECK_SIZE_AND_OFFSET(ipc_perm, mode);
+ #endif
+
+diff --git a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
+index 73af92af1e8f..6a673a7c9959 100644
+--- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
++++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h
+@@ -211,26 +211,13 @@ namespace __sanitizer {
+ u64 __unused1;
+ u64 __unused2;
+ #elif defined(__sparc__)
+-#if defined(__arch64__)
+ unsigned mode;
+- unsigned short __pad1;
+-#else
+- unsigned short __pad1;
+- unsigned short mode;
+ unsigned short __pad2;
+-#endif
+ unsigned short __seq;
+ unsigned long long __unused1;
+ unsigned long long __unused2;
+-#elif defined(__mips__) || defined(__aarch64__) || defined(__s390x__)
+- unsigned int mode;
+- unsigned short __seq;
+- unsigned short __pad1;
+- unsigned long __unused1;
+- unsigned long __unused2;
+ #else
+- unsigned short mode;
+- unsigned short __pad1;
++ unsigned int mode;
+ unsigned short __seq;
+ unsigned short __pad2;
+ #if defined(__x86_64__) && !defined(_LP64)
diff --git a/var/spack/repos/builtin/packages/gcc/package.py b/var/spack/repos/builtin/packages/gcc/package.py
index 431fcaa9da..f3891161a2 100644
--- a/var/spack/repos/builtin/packages/gcc/package.py
+++ b/var/spack/repos/builtin/packages/gcc/package.py
@@ -25,9 +25,11 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage):
version('develop', svn=svn + 'trunk')
+ version('9.3.0', sha256='71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1')
version('9.2.0', sha256='ea6ef08f121239da5695f76c9b33637a118dcf63e24164422231917fa61fb206')
version('9.1.0', sha256='79a66834e96a6050d8fe78db2c3b32fb285b230b855d0a66288235bc04b327a0')
+ version('8.4.0', sha256='e30a6e52d10e1f27ed55104ad233c30bd1e99cfb5ff98ab022dc941edd1b2dd4')
version('8.3.0', sha256='64baadfe6cc0f4947a84cb12d7f0dfaf45bb58b7e92461639596c21e02d97d2c')
version('8.2.0', sha256='196c3c04ba2613f893283977e6011b2345d1cd1af9abeac58e916b1aab3e0080')
version('8.1.0', sha256='1d1866f992626e61349a1ccd0b8d5253816222cdc13390dcfaa74b093aa2b153')
@@ -107,12 +109,16 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage):
depends_on('zip', type='build', when='languages=java')
depends_on('cuda', when='+nvptx')
+ # The server is sometimes a bit slow to respond
+ timeout = {'timeout': 60}
+
resource(
name='newlib',
url='ftp://sourceware.org/pub/newlib/newlib-3.0.0.20180831.tar.gz',
sha256='3ad3664f227357df15ff34e954bfd9f501009a647667cd307bf0658aefd6eb5b',
destination='newlibsource',
- when='+nvptx'
+ when='+nvptx',
+ fetch_options=timeout
)
# nvptx-tools does not seem to work as a dependency,
@@ -193,6 +199,11 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage):
# Binutils can't build ld on macOS
conflicts('+binutils', when='platform=darwin')
+ # Newer binutils than RHEL's is required to run `as` on some instructions
+ # generated by new GCC (see https://github.com/spack/spack/issues/12235)
+ conflicts('~binutils', when='@7: os=rhel6',
+ msg='New GCC cannot use system assembler on RHEL6')
+
if sys.platform == 'darwin':
# Fix parallel build on APFS filesystem
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81797
@@ -212,7 +223,7 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage):
# Fix system headers for Catalina SDK
# (otherwise __OSX_AVAILABLE_STARTING ends up undefined)
patch('https://raw.githubusercontent.com/Homebrew/formula-patches/b8b8e65e/gcc/9.2.0-catalina.patch',
- sha256='0b8d14a7f3c6a2f0d2498526e86e088926671b5da50a554ffa6b7f73ac4f132b', when='@9.2.0:')
+ sha256='0b8d14a7f3c6a2f0d2498526e86e088926671b5da50a554ffa6b7f73ac4f132b', when='@9.2.0')
# Use -headerpad_max_install_names in the build,
# otherwise updated load commands won't fit in the Mach-O header.
# This is needed because `gcc` avoids the superenv shim.
@@ -224,6 +235,10 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage):
patch('piclibs.patch', when='+piclibs')
patch('gcc-backport.patch', when='@4.7:4.9.2,5:5.3')
+ # Backport libsanitizer patch for glibc >= 2.31 and 8.1.0 <= gcc <= 9.2.0
+ # https://bugs.gentoo.org/708346
+ patch('glibc-2.31-libsanitizer-1.patch', when='@8.1.0:9.2.0')
+ patch('glibc-2.31-libsanitizer-2.patch', when='@8.1.0:9.2.0')
# Older versions do not compile with newer versions of glibc
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
patch('ucontext_t.patch', when='@4.9,5.1:5.4,6.1:6.4,7.1')
diff --git a/var/spack/repos/builtin/packages/geant4-data/package.py b/var/spack/repos/builtin/packages/geant4-data/package.py
index c1372dee1a..f5c4e72fac 100644
--- a/var/spack/repos/builtin/packages/geant4-data/package.py
+++ b/var/spack/repos/builtin/packages/geant4-data/package.py
@@ -14,6 +14,8 @@ class Geant4Data(Package):
homepage = "http://geant4.cern.ch"
url = "http://geant4-data.web.cern.ch/geant4-data/ReleaseNotes/ReleaseNotes4.10.3.html"
+ maintainers = ['drbenmorgan']
+
version('10.03.p03', sha256='3e0d4d4e6854c8667d930fd5beaec09b7e6ec41f4847935e5d6a2720d0094b30', expand=False)
version('10.04', sha256='f67fb899b99348a1a7e471a05f249f972e7e303c78238fc5f693b99968642255', expand=False)
diff --git a/var/spack/repos/builtin/packages/geant4/package.py b/var/spack/repos/builtin/packages/geant4/package.py
index 6fb2318479..f3bcb121f6 100644
--- a/var/spack/repos/builtin/packages/geant4/package.py
+++ b/var/spack/repos/builtin/packages/geant4/package.py
@@ -17,6 +17,8 @@ class Geant4(CMakePackage):
homepage = "http://geant4.cern.ch/"
url = "http://geant4.cern.ch/support/source/geant4.10.01.p03.tar.gz"
+ maintainers = ['drbenmorgan']
+
version('10.05.p01', sha256='f4a292220500fad17e0167ce3153e96e3410ecbe96284e572dc707f63523bdff')
version('10.04', sha256='f6d883132f110eb036c69da2b21df51f13c585dc7b99d4211ddd32f4ccee1670')
version('10.03.p03', sha256='a164f49c038859ab675eec474d08c9d02be8c4be9c0c2d3aa8e69adf89e1e138')
@@ -56,7 +58,6 @@ class Geant4(CMakePackage):
depends_on("expat")
depends_on("zlib")
- depends_on("xerces-c")
depends_on("gl", when='+opengl')
depends_on("glx", when='+opengl+x11')
depends_on("libx11", when='+x11')
diff --git a/var/spack/repos/builtin/packages/gengetopt/package.py b/var/spack/repos/builtin/packages/gengetopt/package.py
new file mode 100644
index 0000000000..44389fa38a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gengetopt/package.py
@@ -0,0 +1,36 @@
+# Copyright 2013-2020 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 import *
+
+
+class Gengetopt(AutotoolsPackage):
+ """Tool to write command line option parsing code for C programs"""
+
+ homepage = "https://www.gnu.org/software/gengetopt/gengetopt.html"
+ url = "ftp://ftp.gnu.org/gnu/gengetopt/gengetopt-2.23.tar.xz"
+
+ maintainers = ['rblake-llnl']
+
+ version('2.23', sha256='b941aec9011864978dd7fdeb052b1943535824169d2aa2b0e7eae9ab807584ac')
+ version('2.22.6', sha256='30b05a88604d71ef2a42a2ef26cd26df242b41f5b011ad03083143a31d9b01f7')
+ version('2.22.5', sha256='3b6fb3240352b0eb0c5b8583b58b62cbba58167cef5a7e82fa08a7f968ed2137')
+ version('2.22.4', sha256='4edf6b24ec8085929c86835c51d5bf904052cc671530c15f9314d9b87fe54421')
+ version('2.22.3', sha256='8ce6b3df49cefea97bd522dc054ede2037939978bf23754d5c17311e5a1df3dc')
+ version('2.22.2', sha256='4bf96bea9f80ac85c716cd07f5fe68602db7f380f6dc2d025f17139aa0b56455')
+ version('2.22.1', sha256='e8d1de4f8c102263844886a2f2b57d82c291c1eae6307ea406fb96f29a67c3a7')
+ version('2.22', sha256='b605555e41e9bf7e852a37b051e6a49014e561f21290680e3a60c279488d417e')
+ version('2.21', sha256='355a32310b2fee5e7289d6d6e89eddd13275a7c85a243dc5dd293a6cb5bb047e')
+ version('2.20', sha256='4c8b3b42cecff579f5f9de5ccad47e0849e0245e325a04ff5985c248141af1a4')
+
+ parallel = False
+
+ def url_for_version(self, version):
+ url = 'ftp://ftp.gnu.org/gnu/gengetopt/gengetopt-{0}.tar.{1}'
+ if version >= Version('2.23'):
+ suffix = 'xz'
+ else:
+ suffix = 'gz'
+ return url.format(version, suffix)
diff --git a/var/spack/repos/builtin/packages/glfw/package.py b/var/spack/repos/builtin/packages/glfw/package.py
new file mode 100644
index 0000000000..168fff8b0e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/glfw/package.py
@@ -0,0 +1,39 @@
+# Copyright 2013-2019 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 import *
+
+
+class Glfw(CMakePackage):
+ """GLFW is an Open Source, multi-platform library for
+ OpenGL, OpenGL ES and Vulkan development on the desktop. It
+ provides a simple API for creating windows, contexts and
+ surfaces, receiving input and events."""
+
+ homepage = "https://www.glfw.org/"
+ url = "https://github.com/glfw/glfw/archive/3.3.2.tar.gz"
+
+ version('3.3.2', sha256='98768e12e615fbe9f3386f5bbfeb91b5a3b45a8c4c77159cef06b1f6ff749537')
+ version('3.3.1', sha256='6bca16e69361798817a4b62a5239a77253c29577fcd5d52ae8b85096e514177f')
+ version('3.3', sha256='81bf5fde487676a8af55cb317830703086bb534c53968d71936e7b48ee5a0f3e')
+ version('3.2.1', sha256='e10f0de1384d75e6fc210c53e91843f6110d6c4f3afbfb588130713c2f9d8fe8')
+ version('3.2', sha256='cb3aab46757981a39ae108e5207a1ecc4378e68949433a2b040ce2e17d8f6aa6')
+ version('3.1.2', sha256='6ac642087682aaf7f8397761a41a99042b2c656498217a1c63ba9706d1eef122')
+ version('3.1.1', sha256='4de311ec9bf43bfdc8423ddf93b91dc54dc73dcfbedfb0991b6fbb3a9baf245f')
+ version('3.1', sha256='2140f4c532e7ce4c84cb7e4c419d0979d5954fa1ce204b7646491bd2cc5bf308')
+ version('3.0.4', sha256='a4e7c57db2086803de4fc853bd472ff8b6d2639b9aa16e6ac6b19ffb53958caf')
+ version('3.0.3', sha256='7a182047ba6b1fdcda778b79aac249bb2328b6d141188cb5df29560715d01693')
+
+ depends_on('libxrandr')
+ depends_on('libxinerama')
+ depends_on('libxcursor')
+ depends_on('libxdamage')
+ depends_on('libxft')
+ depends_on('libxi')
+ depends_on('libxmu')
+ depends_on('freetype')
+ depends_on('fontconfig')
+ depends_on('doxygen', type='build')
+ depends_on('pkgconfig', type='build')
diff --git a/var/spack/repos/builtin/packages/glusterfs/package.py b/var/spack/repos/builtin/packages/glusterfs/package.py
new file mode 100644
index 0000000000..89024cf977
--- /dev/null
+++ b/var/spack/repos/builtin/packages/glusterfs/package.py
@@ -0,0 +1,44 @@
+# Copyright 2013-2020 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 import *
+
+
+class Glusterfs(AutotoolsPackage):
+ """Gluster is a software defined distributed storage that can scale to
+ several petabytes. It provides interfaces for object, block and file
+ storage."""
+
+ homepage = "https://www.gluster.org/"
+ url = "https://download.gluster.org/pub/gluster/glusterfs/7/7.3/glusterfs-7.3.tar.gz"
+ list_url = "https://download.gluster.org/pub/gluster/glusterfs/"
+ list_depth = 2
+
+ version('7.3', sha256='2401cc7c3f5488f6fc5ea09ce2ab30c918612f592571fb3de6124f8482ad4954')
+ version('7.2', sha256='8e43614967b90d64495fbe2c52230dd72572ce219507fb48bc317b1c228a06e1')
+ version('7.1', sha256='ffc5bd78b079009382bd01391865646bc9b2e8e72366afc96d62ba891dd9dbce')
+ version('7.0', sha256='8a872518bf9bd4dc1568f45c716bcde09e3bf7abf5b156ea90405e0fc2e9f07b')
+ version('6.8', sha256='41e855bdc456759c8c15ef494c636a25cc7b62c55ad132ecd55bec05df64793f')
+ version('6.7', sha256='e237dd59a2d5b73e156b0b71df49ff64a143b3aaf8f0a65daaf369bb40f5e923')
+
+ depends_on('m4', type='build')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('flex', type='build')
+ depends_on('bison', type='build')
+ depends_on('rpcsvc-proto')
+ depends_on('acl')
+ depends_on('libuuid')
+ depends_on('libtirpc')
+ depends_on('userspace-rcu')
+
+ def url_for_version(self, version):
+ url = 'https://download.gluster.org/pub/gluster/glusterfs/{0}/{1}/glusterfs-{1}.tar.gz'
+ return url.format(version.up_to(1), version)
+
+ def autoreconf(self, spec, prefix):
+ bash = which('bash')
+ bash('./autogen.sh')
diff --git a/var/spack/repos/builtin/packages/gmsh/package.py b/var/spack/repos/builtin/packages/gmsh/package.py
index b5d677bd99..522a315f29 100644
--- a/var/spack/repos/builtin/packages/gmsh/package.py
+++ b/var/spack/repos/builtin/packages/gmsh/package.py
@@ -19,6 +19,7 @@ class Gmsh(CMakePackage):
homepage = 'http://gmsh.info'
url = 'http://gmsh.info/src/gmsh-4.4.1-source.tgz'
+ version('4.5.4', sha256='ccf8c74f43cbe3c371abe79862025d41642b3538a0148f018949494e3b3e2ecd')
version('4.4.1', sha256='853c6438fc4e4b765206e66a514b09182c56377bb4b73f1d0d26eda7eb8af0dc')
version('4.2.2', sha256='e9ee9f5c606bbec5f2adbb8c3d6023c4e2577f487fa4e4ecfcfc94a241cc8dcc')
version('4.0.0', sha256='fb0c8afa37425c6f4315ab3b3124e9e102fcf270a35198423a4002796f04155f')
@@ -31,16 +32,18 @@ class Gmsh(CMakePackage):
variant('shared', default=True, description='Enables the build of shared libraries')
variant('mpi', default=True, description='Builds MPI support for parser and solver')
- variant('openmp', default=False, description='Enable OpenMP support')
+ variant('openmp', default=False, description='Enable OpenMP support')
variant('fltk', default=False, description='Enables the build of the FLTK GUI')
variant('hdf5', default=False, description='Enables HDF5 support')
variant('compression', default=True, description='Enables IO compression through zlib')
variant('netgen', default=False, description='Build with Netgen')
+ variant('opencascade', default=False, description='Build with OpenCASCADE')
variant('oce', default=False, description='Build with OCE')
variant('petsc', default=False, description='Build with PETSc')
variant('slepc', default=False, description='Build with SLEPc (only when PETSc is enabled)')
variant('tetgen', default=False, description='Build with Tetgen')
- variant('metis', default=False, description='Build with Metis')
+ variant('metis', default=False, description='Build with Metis')
+ variant('privateapi', default=False, description='Enable the private API')
depends_on('blas')
depends_on('lapack')
@@ -51,6 +54,7 @@ class Gmsh(CMakePackage):
depends_on('fltk', when='+fltk')
depends_on('hdf5', when='+hdf5')
depends_on('netgen', when='+netgen')
+ depends_on('opencascade', when='+opencascade')
depends_on('oce', when='+oce')
depends_on('petsc+mpi', when='+petsc+mpi')
depends_on('petsc', when='+petsc~mpi')
@@ -60,6 +64,7 @@ class Gmsh(CMakePackage):
depends_on('metis', when='+metis')
conflicts('+slepc', when='~petsc')
+ conflicts('+oce', when='+opencascade')
def cmake_args(self):
spec = self.spec
@@ -96,6 +101,9 @@ class Gmsh(CMakePackage):
if '+oce' in spec:
env['CASROOT'] = self.spec['oce'].prefix
options.append('-DENABLE_OCC=ON')
+ elif '+opencascade' in spec:
+ env['CASROOT'] = self.spec['opencascade'].prefix
+ options.append('-DENABLE_OCC=ON')
else:
options.append('-DENABLE_OCC=OFF')
@@ -142,4 +150,9 @@ class Gmsh(CMakePackage):
if '+compression' in spec:
options.append('-DENABLE_COMPRESSED_IO:BOOL=ON')
+ if '+privateapi' in spec:
+ options.append('-DENABLE_PRIVATE_API=ON')
+ else:
+ options.append('-DENABLE_PRIVATE_API=OFF')
+
return options
diff --git a/var/spack/repos/builtin/packages/gnupg/package.py b/var/spack/repos/builtin/packages/gnupg/package.py
index 65005a4bba..943f14d31f 100644
--- a/var/spack/repos/builtin/packages/gnupg/package.py
+++ b/var/spack/repos/builtin/packages/gnupg/package.py
@@ -7,38 +7,49 @@ from spack import *
class Gnupg(AutotoolsPackage):
- """GnuPG is a complete and free implementation of the OpenPGP
- standard as defined by RFC4880 """
+ """GNU Pretty Good Privacy (PGP) package."""
homepage = "https://gnupg.org/index.html"
- url = "https://gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.17.tar.bz2"
+ url = "https://gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.19.tar.bz2"
+ version('2.2.19', sha256='242554c0e06f3a83c420b052f750b65ead711cc3fddddb5e7274fcdbb4e9dec0')
version('2.2.17', sha256='afa262868e39b651a2db4c071fba90415154243e83a830ca00516f9a807fd514')
version('2.2.15', sha256='cb8ce298d7b36558ffc48aec961b14c830ff1783eef7a623411188b5e0f5d454')
version('2.2.3', sha256='cbd37105d139f7aa74f92b6f65d136658682094b0e308666b820ae4b984084b4')
version('2.1.21', sha256='7aead8a8ba75b69866f583b6c747d91414d523bfdfbe9a8e0fe026b16ba427dd')
+ depends_on('npth@1.2:')
+ depends_on('libgpg-error@1.24:')
depends_on('libgcrypt@1.7.0:')
+ depends_on('libksba@1.3.4:')
depends_on('libassuan@2.4:', when='@:2.2.3')
depends_on('libassuan@2.5:', when='@2.2.15:')
- depends_on('libksba@1.3.4:')
- depends_on('libgpg-error@1.24:')
- depends_on('npth@1.2:')
- depends_on('zlib')
+ depends_on('pinentry', type='run')
depends_on('libiconv')
+ depends_on('zlib')
def configure_args(self):
- return [
- '--without-tar',
+ args = [
+ '--disable-bzip2',
+ '--disable-sqlite',
+ '--disable-ntbtls',
+ '--disable-gnutls',
+ '--disable-ldap',
+ '--disable-regex',
+ '--with-pinentry-pgm=' + self.spec['pinentry'].command.path,
'--with-libgpg-error-prefix=' + self.spec['libgpg-error'].prefix,
'--with-libgcrypt-prefix=' + self.spec['libgcrypt'].prefix,
'--with-libassuan-prefix=' + self.spec['libassuan'].prefix,
'--with-ksba-prefix=' + self.spec['libksba'].prefix,
'--with-npth-prefix=' + self.spec['npth'].prefix,
- '--without-ldap',
'--with-libiconv-prefix=' + self.spec['libiconv'].prefix,
- '--without-regex',
'--with-zlib=' + self.spec['zlib'].prefix,
- '--without-bzip2',
+ '--without-tar',
+ '--without-libiconv-prefix',
'--without-readline',
]
+
+ if self.run_tests:
+ args.append('--enable-all-tests')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/go/package.py b/var/spack/repos/builtin/packages/go/package.py
index 75d183148f..09d5796c09 100644
--- a/var/spack/repos/builtin/packages/go/package.py
+++ b/var/spack/repos/builtin/packages/go/package.py
@@ -35,6 +35,7 @@ class Go(Package):
extendable = True
+ version('1.14', sha256='6d643e46ad565058c7a39dac01144172ef9bd476521f42148be59249e4b74389')
version('1.13.8', sha256='b13bf04633d4d8cf53226ebeaace8d4d2fd07ae6fa676d0844a688339debec34')
version('1.13.7', sha256='e4ad42cc5f5c19521fbbbde3680995f2546110b5c6aa2b48c3754ff7af9b41f4')
version('1.13.6', sha256='aae5be954bdc40bcf8006eb77e8d8a5dde412722bc8effcdaf9772620d06420c')
diff --git a/var/spack/repos/builtin/packages/gromacs/package.py b/var/spack/repos/builtin/packages/gromacs/package.py
index bc61efdbe9..037b25721b 100644
--- a/var/spack/repos/builtin/packages/gromacs/package.py
+++ b/var/spack/repos/builtin/packages/gromacs/package.py
@@ -2,8 +2,7 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-
-from spack import *
+import llnl.util.cpu
class Gromacs(CMakePackage):
@@ -24,8 +23,10 @@ class Gromacs(CMakePackage):
git = 'https://github.com/gromacs/gromacs.git'
maintainers = ['junghans', 'marvinbernhardt']
- version('develop', branch='master')
+ version('master', branch='master')
+ version('2020.1', sha256='e1666558831a3951c02b81000842223698016922806a8ce152e8f616e29899cf')
version('2020', sha256='477e56142b3dcd9cb61b8f67b24a55760b04d1655e8684f979a75a5eec40ba01')
+ version('2019.6', sha256='bebe396dc0db11a9d4cc205abc13b50d88225617642508168a2195324f06a358')
version('2019.5', sha256='438061a4a2d45bbb5cf5c3aadd6c6df32d2d77ce8c715f1c8ffe56156994083a')
version('2019.4', sha256='ba4366eedfc8a1dbf6bddcef190be8cd75de53691133f305a7f9c296e5ca1867')
version('2019.3', sha256='4211a598bf3b7aca2b14ad991448947da9032566f13239b1a05a2d4824357573')
@@ -60,12 +61,6 @@ class Gromacs(CMakePackage):
description='The build type to build',
values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel',
'Reference', 'RelWithAssert', 'Profile'))
- variant('simd', default='auto',
- description='The SIMD instruction set to use',
- values=('auto', 'none', 'SSE2', 'SSE4.1', 'AVX_128_FMA', 'AVX_256',
- 'AVX2_128', 'AVX2_256', 'AVX_512', 'AVX_512_KNL',
- 'IBM_QPX', 'Sparc64_HPC_ACE', 'IBM_VMX', 'IBM_VSX',
- 'ARM_NEON', 'ARM_NEON_ASIMD'))
variant('rdtscp', default=True, description='Enable RDTSCP instruction usage')
variant('mdrun_only', default=False,
description='Enables the build of a cut-down version'
@@ -117,13 +112,40 @@ class Gromacs(CMakePackage):
else:
options.append('-DGMX_GPU:BOOL=OFF')
- simd_value = self.spec.variants['simd'].value
- if simd_value == 'auto':
- pass
- elif simd_value == 'none':
- options.append('-DGMX_SIMD:STRING=None')
+ # Activate SIMD based on properties of the target
+ target = self.spec.target
+ if target >= llnl.util.cpu.targets['bulldozer']:
+ # AMD Family 15h
+ options.append('-DGMX_SIMD=AVX_128_FMA')
+ elif target >= llnl.util.cpu.targets['zen']:
+ # AMD Family 17h
+ options.append('-DGMX_SIMD=AVX2_128')
+ elif target >= llnl.util.cpu.targets['power7']:
+ # IBM Power 7 and beyond
+ options.append('-DGMX_SIMD=IBM_VSX')
+ elif target.family == llnl.util.cpu.targets['aarch64']:
+ # ARMv8
+ options.append('-DGMX_SIMD=ARM_NEON_ASIMD')
+ elif target == llnl.util.cpu.targets['mic_knl']:
+ # Intel KNL
+ options.append('-DGMX_SIMD=AVX_512_KNL')
+ elif target.vendor == 'GenuineIntel':
+ # Other Intel architectures
+ simd_features = [
+ ('sse2', 'SSE2'),
+ ('sse4_1', 'SSE4.1'),
+ ('avx', 'AVX_256'),
+ ('axv128', 'AVX2_128'),
+ ('avx2', 'AVX2_256'),
+ ('avx512', 'AVX_512'),
+ ]
+ for feature, flag in reversed(simd_features):
+ if feature in target:
+ options.append('-DGMX_SIMD:STRING={0}'.format(flag))
+ break
else:
- options.append('-DGMX_SIMD:STRING=' + simd_value)
+ # Fall back to this for unknown microarchitectures
+ options.append('-DGMX_SIMD:STRING=None')
if '-rdtscp' in self.spec:
options.append('-DGMX_USE_RDTSCP:BOOL=OFF')
diff --git a/var/spack/repos/builtin/packages/gsl/gsl-2.3-cblas.patch b/var/spack/repos/builtin/packages/gsl/gsl-2.3-cblas.patch
new file mode 100644
index 0000000000..7417ca57a7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gsl/gsl-2.3-cblas.patch
@@ -0,0 +1,323 @@
+ Makefile.am | 8 +-
+ ax_cblas.m4 | 69 +++++
+ bspline/Makefile.am | 2 +-
+ configure.ac | 10 +
+ eigen/Makefile.am | 2 +-
+ gsl-config.in | 4 +-
+ gsl.pc.in | 2 +-
+ interpolation/Makefile.am | 2 +-
+ linalg/Makefile.am | 2 +-
+ multifit/Makefile.am | 4 +-
+ multimin/Makefile.am | 4 +-
+ multiroots/Makefile.am | 2 +-
+ ode-initval/Makefile.am | 2 +-
+ poly/Makefile.am | 2 +-
+ specfunc/Makefile.am | 2 +-
+ wavelet/Makefile.am | 2 +-
+ 31 files changed, 1157 insertions(+), 19 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index c522001..4513bc8 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -19,7 +19,7 @@ EXTRA_DIST = autogen.sh gsl-config.in gsl.pc.in configure.ac THANKS BUGS gsl.spe
+
+ lib_LTLIBRARIES = libgsl.la
+ libgsl_la_SOURCES = version.c
+-libgsl_la_LIBADD = $(GSL_LIBADD) $(SUBLIBS)
++libgsl_la_LIBADD = $(GSL_LIBADD) $(SUBLIBS) @CBLAS_LINK_LIBS@
+ libgsl_la_LDFLAGS = $(GSL_LDFLAGS) -version-info $(GSL_LT_VERSION)
+ noinst_HEADERS = templates_on.h templates_off.h build.h
+
+@@ -29,10 +29,10 @@ m4data_DATA = gsl.m4
+ bin_PROGRAMS = gsl-randist gsl-histogram
+
+ gsl_randist_SOURCES = gsl-randist.c
+-gsl_randist_LDADD = libgsl.la cblas/libgslcblas.la
++gsl_randist_LDADD = libgsl.la
+
+ gsl_histogram_SOURCES = gsl-histogram.c
+-gsl_histogram_LDADD = libgsl.la cblas/libgslcblas.la
++gsl_histogram_LDADD = libgsl.la
+
+ check_SCRIPTS = test_gsl_histogram.sh pkgconfig.test
+ TESTS = test_gsl_histogram.sh pkgconfig.test
+@@ -51,6 +51,8 @@ edit = $(SED) \
+ -e 's|@GSL_CFLAGS[@]|$(GSL_CFLAGS)|g' \
+ -e 's|@GSL_LIBM[@]|$(GSL_LIBM)|g' \
+ -e 's|@GSL_LIBS[@]|$(GSL_LIBS)|g' \
++ -e 's|@CBLAS_CFLAGS[@]|$(CBLAS_CFLAGS)|g' \
++ -e 's|@CBLAS_LIBS[@]|$(CBLAS_LIBS)|g' \
+ -e 's|@LIBS[@]|$(LIBS)|g' \
+ -e 's|@VERSION[@]|$(VERSION)|g'
+
+diff --git a/ax_cblas.m4 b/ax_cblas.m4
+new file mode 100644
+index 0000000..6ef143a
+--- /dev/null
++++ b/ax_cblas.m4
+@@ -0,0 +1,69 @@
++AC_DEFUN([AX_CBLAS],[
++
++ ext_cblas=no
++ ext_cblas_libs="-lcblas"
++ ext_cblas_cflags=""
++
++ AC_ARG_WITH(cblas-external,
++ [AS_HELP_STRING([--with-cblas-external],
++ [Use external CBLAS library (default is no)])],
++ [with_ext_cblas=$withval],
++ [with_ext_cblas=no])
++
++ case $with_ext_cblas in
++ no) ext_cblas=no ;;
++ yes) ext_cblas=yes ;;
++ -* | */* | *.a | *.so | *.so.* | *.o)
++ ext_cblas=yes
++ ext_cblas_libs="$with_cblas" ;;
++ *) ext_cblas=yes
++ ext_cblas_libs="-l$with_cblas" ;;
++ esac
++
++ AC_ARG_WITH(cblas-external-libs,
++ [AS_HELP_STRING([--with-cblas-external-libs=<libs>],
++ [External cblas libraries to link with (default is "$ext_cblas_libs")])],
++ [ext_cblas_libs=$withval],
++ [])
++
++ AC_ARG_WITH(cblas-external-cflags,
++ [AS_HELP_STRING([--with-cblas-external-cflags=<flags>],
++ [Pre-processing flags to compile with external cblas ("-I<dir>")])],
++ [ext_cblas_cflags=$withval],
++ [])
++
++ if test x$ext_cblas != xno; then
++ if test "x$CBLAS_LIBS" = x; then
++ CBLAS_LIBS="$ext_cblas_libs"
++ fi
++ if test "x$CBLAS_CFLAGS" = x; then
++ CBLAS_CFLAGS="$ext_cblas_cflags"
++ fi
++
++ CFLAGS_sav="$CFLAGS"
++ CFLAGS="$CFLAGS $CBLAS_CFLAGS"
++ AC_CHECK_HEADER(cblas.h, ,
++ [AC_MSG_ERROR([
++ *** Header file cblas.h not found.
++ *** If you installed cblas header in a non standard place,
++ *** specify its install prefix using the following option
++ *** --with-cblas-external-cflags="-I<include_dir>"])
++ ])
++ CFLAGS="$CFLAGS_sav"
++
++ LIBS_sav="$LIBS"
++ LIBS="$LIBS $CBLAS_LIBS -lm"
++ AC_MSG_CHECKING([for cblas_sgemm in $CBLAS_LIBS])
++ AC_TRY_LINK_FUNC(cblas_sgemm, [ext_cblas=yes],
++ [AC_MSG_ERROR([
++ *** Linking with cblas with $LIBS failed.
++ *** If you installed cblas library in a non standard place,
++ *** specify its install prefix using the following option
++ *** --with-cblas-external-libs="-L<lib_dir> -l<lib>"])
++ ])
++ AC_MSG_RESULT($ext_cblas)
++ LIBS="$LIBS_sav"
++ AC_SUBST([CBLAS_CFLAGS])
++ AC_SUBST([CBLAS_LIBS])
++ fi
++])
+diff --git a/bspline/Makefile.am b/bspline/Makefile.am
+index 3f4f950..d413036 100644
+--- a/bspline/Makefile.am
++++ b/bspline/Makefile.am
+@@ -12,6 +12,6 @@ check_PROGRAMS = test
+
+ TESTS = $(check_PROGRAMS)
+
+-test_LDADD = libgslbspline.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../cblas/libgslcblas.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../statistics/libgslstatistics.la
++test_LDADD = libgslbspline.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la @CBLAS_LINK_LIBS@ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../statistics/libgslstatistics.la
+
+ test_SOURCES = test.c
+diff --git a/configure.ac b/configure.ac
+index a26fc1e..564d426 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -208,6 +208,16 @@ if test "x$LIBS" = "x" ; then
+ AC_CHECK_LIB(m, cos)
+ fi
+
++sinclude(ax_cblas.m4)
++AX_CBLAS
++if test "x$CBLAS_LIBS" != "x"; then
++ CBLAS_LINK_LIBS="$CBLAS_LIBS"
++else
++ CBLAS_LINK_LIBS="\$(top_builddir)/cblas/libgslcblas.la"
++ CBLAS_LIBS="-lgslcblas"
++fi
++AC_SUBST(CBLAS_LINK_LIBS)
++
+ dnl Remember to put a definition in acconfig.h for each of these
+ AC_CHECK_DECLS(feenableexcept,,,[#define _GNU_SOURCE 1
+ #include <fenv.h>])
+diff --git a/eigen/Makefile.am b/eigen/Makefile.am
+index c28bfde..14197a4 100644
+--- a/eigen/Makefile.am
++++ b/eigen/Makefile.am
+@@ -11,7 +11,7 @@ noinst_HEADERS = qrstep.c
+
+ TESTS = $(check_PROGRAMS)
+
+-test_LDADD = libgsleigen.la ../test/libgsltest.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la ../sort/libgslsort.la
++test_LDADD = libgsleigen.la ../test/libgsltest.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la @CBLAS_LINK_LIBS@ ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../sys/libgslsys.la ../err/libgslerr.la ../utils/libutils.la ../rng/libgslrng.la ../sort/libgslsort.la
+
+ test_SOURCES = test.c
+
+diff --git a/gsl-config.in b/gsl-config.in
+old mode 100755
+new mode 100644
+index 3f3fa61..c9c4262
+--- a/gsl-config.in
++++ b/gsl-config.in
+@@ -58,11 +58,11 @@ while test $# -gt 0; do
+ ;;
+
+ --cflags)
+- echo @GSL_CFLAGS@
++ echo @GSL_CFLAGS@ @CBLAS_CFLAGS@
+ ;;
+
+ --libs)
+- : ${GSL_CBLAS_LIB=-lgslcblas}
++ : ${GSL_CBLAS_LIB=@CBLAS_LIBS@}
+ echo @GSL_LIBS@ $GSL_CBLAS_LIB @GSL_LIBM@
+ ;;
+
+diff --git a/gsl.pc.in b/gsl.pc.in
+index 5e9ef21..5a7a0f3 100644
+--- a/gsl.pc.in
++++ b/gsl.pc.in
+@@ -2,7 +2,7 @@ prefix=@prefix@
+ exec_prefix=@exec_prefix@
+ libdir=@libdir@
+ includedir=@includedir@
+-GSL_CBLAS_LIB=-lgslcblas
++GSL_CBLAS_LIB=@CBLAS_LIBS@
+
+ Name: GSL
+ Description: GNU Scientific Library
+diff --git a/interpolation/Makefile.am b/interpolation/Makefile.am
+index 1d80755..e45bd51 100644
+--- a/interpolation/Makefile.am
++++ b/interpolation/Makefile.am
+@@ -12,7 +12,7 @@ AM_CPPFLAGS = -I$(top_srcdir)
+
+ TESTS = $(check_PROGRAMS)
+
+-test_LDADD = libgslinterpolation.la ../poly/libgslpoly.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../cblas/libgslcblas.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
++test_LDADD = libgslinterpolation.la ../poly/libgslpoly.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la @CBLAS_LINK_LIBS@ ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
+
+ test_SOURCES = test.c
+
+diff --git a/linalg/Makefile.am b/linalg/Makefile.am
+index a6c15b0..447ebbe 100644
+--- a/linalg/Makefile.am
++++ b/linalg/Makefile.am
+@@ -13,4 +13,4 @@ TESTS = $(check_PROGRAMS)
+ check_PROGRAMS = test
+
+ test_SOURCES = test.c
+-test_LDADD = libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la
++test_LDADD = libgsllinalg.la ../blas/libgslblas.la @CBLAS_LINK_LIBS@ ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../rng/libgslrng.la
+diff --git a/multifit/Makefile.am b/multifit/Makefile.am
+index 988614e..793b485 100644
+--- a/multifit/Makefile.am
++++ b/multifit/Makefile.am
+@@ -67,8 +67,8 @@ check_PROGRAMS = test #demo
+ TESTS = $(check_PROGRAMS)
+
+ test_SOURCES = test.c
+-test_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../sort/libgslsort.la ../statistics/libgslstatistics.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../min/libgslmin.la
++test_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la @CBLAS_LINK_LIBS@ ../matrix/libgslmatrix.la ../sort/libgslsort.la ../statistics/libgslstatistics.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la ../rng/libgslrng.la ../specfunc/libgslspecfunc.la ../min/libgslmin.la
+
+ #demo_SOURCES = demo.c
+-#demo_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../randist/libgslrandist.la ../rng/libgslrng.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la
++#demo_LDADD = libgslmultifit.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../blas/libgslblas.la @CBLAS_LINK_LIBS@ ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../randist/libgslrandist.la ../rng/libgslrng.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../utils/libutils.la ../sys/libgslsys.la
+
+diff --git a/multimin/Makefile.am b/multimin/Makefile.am
+index 7071359..65a488a 100644
+--- a/multimin/Makefile.am
++++ b/multimin/Makefile.am
+@@ -13,8 +13,8 @@ check_PROGRAMS = test #demo
+ TESTS = $(check_PROGRAMS)
+
+ test_SOURCES = test.c test_funcs.c test_funcs.h
+-test_LDADD = libgslmultimin.la ../min/libgslmin.la ../poly/libgslpoly.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
++test_LDADD = libgslmultimin.la ../min/libgslmin.la ../poly/libgslpoly.la ../blas/libgslblas.la @CBLAS_LINK_LIBS@ ../linalg/libgsllinalg.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
+
+ #demo_SOURCES = demo.c
+-#demo_LDADD = libgslmultimin.la ../min/libgslmin.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../linalg/libgsllinalg.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
++#demo_LDADD = libgslmultimin.la ../min/libgslmin.la ../blas/libgslblas.la @CBLAS_LINK_LIBS@ ../linalg/libgsllinalg.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
+
+diff --git a/multiroots/Makefile.am b/multiroots/Makefile.am
+index a351c3f..6178448 100644
+--- a/multiroots/Makefile.am
++++ b/multiroots/Makefile.am
+@@ -15,5 +15,5 @@ check_PROGRAMS = test
+ TESTS = $(check_PROGRAMS)
+
+ test_SOURCES = test.c test_funcs.c test_funcs.h
+-test_LDADD = libgslmultiroots.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
++test_LDADD = libgslmultiroots.la ../linalg/libgsllinalg.la ../blas/libgslblas.la @CBLAS_LINK_LIBS@ ../permutation/libgslpermutation.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
+
+diff --git a/ode-initval/Makefile.am b/ode-initval/Makefile.am
+index 9c774b5..346c381 100644
+--- a/ode-initval/Makefile.am
++++ b/ode-initval/Makefile.am
+@@ -12,7 +12,7 @@ check_PROGRAMS = test
+
+ TESTS = $(check_PROGRAMS)
+
+-test_LDADD = libgslodeiv.la ../linalg/libgsllinalg.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../permutation/libgslpermutation.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
++test_LDADD = libgslodeiv.la ../linalg/libgsllinalg.la ../blas/libgslblas.la @CBLAS_LINK_LIBS@ ../matrix/libgslmatrix.la ../permutation/libgslpermutation.la ../vector/libgslvector.la ../block/libgslblock.la ../complex/libgslcomplex.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
+
+ test_SOURCES = test.c
+
+diff --git a/poly/Makefile.am b/poly/Makefile.am
+index f1dae5d..e0f8e83 100644
+--- a/poly/Makefile.am
++++ b/poly/Makefile.am
+@@ -10,7 +10,7 @@ noinst_HEADERS = balance.c companion.c qr.c
+
+ TESTS = $(check_PROGRAMS)
+
+-check_PROGRAMS = test
++#check_PROGRAMS = test
+
+ test_SOURCES = test.c
+ test_LDADD = libgslpoly.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la ../sort/libgslsort.la
+diff --git a/specfunc/Makefile.am b/specfunc/Makefile.am
+index eba9ab2..772cc7e 100644
+--- a/specfunc/Makefile.am
++++ b/specfunc/Makefile.am
+@@ -12,7 +12,7 @@ TESTS = $(check_PROGRAMS)
+
+ check_PROGRAMS = test
+
+-test_LDADD = libgslspecfunc.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../sort/libgslsort.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../block/libgslblock.la ../complex/libgslcomplex.la ../poly/libgslpoly.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
++test_LDADD = libgslspecfunc.la ../eigen/libgsleigen.la ../linalg/libgsllinalg.la ../sort/libgslsort.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../blas/libgslblas.la @CBLAS_LINK_LIBS@ ../block/libgslblock.la ../complex/libgslcomplex.la ../poly/libgslpoly.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
+
+ test_SOURCES = test_sf.c test_sf.h test_airy.c test_bessel.c test_coulomb.c test_dilog.c test_gamma.c test_hyperg.c test_legendre.c test_mathieu.c
+
+diff --git a/wavelet/Makefile.am b/wavelet/Makefile.am
+index 9da20d8..8cdbd77 100644
+--- a/wavelet/Makefile.am
++++ b/wavelet/Makefile.am
+@@ -10,7 +10,7 @@ check_PROGRAMS = test
+
+ TESTS = $(check_PROGRAMS)
+
+-test_LDADD = libgslwavelet.la ../blas/libgslblas.la ../cblas/libgslcblas.la ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
++test_LDADD = libgslwavelet.la ../blas/libgslblas.la @CBLAS_LINK_LIBS@ ../matrix/libgslmatrix.la ../vector/libgslvector.la ../block/libgslblock.la ../ieee-utils/libgslieeeutils.la ../err/libgslerr.la ../test/libgsltest.la ../sys/libgslsys.la ../utils/libutils.la
+
+ test_SOURCES = test.c
+
diff --git a/var/spack/repos/builtin/packages/gsl/package.py b/var/spack/repos/builtin/packages/gsl/package.py
index 3ad7b11971..fb81843c64 100644
--- a/var/spack/repos/builtin/packages/gsl/package.py
+++ b/var/spack/repos/builtin/packages/gsl/package.py
@@ -24,3 +24,31 @@ class Gsl(AutotoolsPackage, GNUMirrorPackage):
version('2.1', sha256='59ad06837397617f698975c494fe7b2b698739a59e2fcf830b776428938a0c66')
version('2.0', sha256='e361f0b19199b5e6c21922e9f16adf7eca8dd860842802424906d0f83485ca2d')
version('1.16', sha256='73bc2f51b90d2a780e6d266d43e487b3dbd78945dd0b04b14ca5980fe28d2f53')
+
+ variant('external-cblas', default=False, description='Build against external blas')
+
+ # from https://dev.gentoo.org/~mgorny/dist/gsl-2.3-cblas.patch.bz2
+ patch('gsl-2.3-cblas.patch', when="+external-cblas")
+
+ conflicts('+external-cblas', when="@:2.2.9999")
+ depends_on('m4', type='build', when='+external-cblas')
+ depends_on('autoconf', type='build', when='+external-cblas')
+ depends_on('automake', type='build', when='+external-cblas')
+ depends_on('libtool', type='build', when='+external-cblas')
+ depends_on('blas', when='+external-cblas')
+
+ @property
+ def force_autoreconf(self):
+ # The external cblas patch touches configure
+ return self.spec.satisfies('+external-cblas')
+
+ def configure_args(self):
+ configure_args = []
+ if self.spec.satisfies('+external-cblas'):
+ configure_args.append('--with-external-cblas')
+ configure_args.append('CBLAS_CFLAGS=%s'
+ % self.spec['blas'].headers.include_flags)
+ configure_args.append('CBLAS_LIBS=%s'
+ % self.spec['blas'].libs.ld_flags)
+
+ return configure_args
diff --git a/var/spack/repos/builtin/packages/gunrock/package.py b/var/spack/repos/builtin/packages/gunrock/package.py
new file mode 100644
index 0000000000..f47c1bf635
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gunrock/package.py
@@ -0,0 +1,31 @@
+# Copyright 2013-2020 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 import *
+
+
+class Gunrock(CMakePackage, CudaPackage):
+ """High-Performance Graph Primitives on GPUs"""
+
+ homepage = "https://gunrock.github.io/docs/"
+ git = "https://github.com/gunrock/gunrock.git"
+
+ version('master', submodules=True)
+ version('1.1', submodules=True, tag='v1.1')
+ version('1.0', submodules=True, tag='v1.0')
+ version('0.5.1', submodules=True, tag='v0.5.1')
+ version('0.5', submodules=True, tag='v0.5')
+ version('0.4', submodules=True, tag='v0.4')
+ version('0.3.1', submodules=True, tag='v0.3.1')
+ version('0.3', submodules=True, tag='v0.3')
+ version('0.2', submodules=True, tag='v0.2')
+ version('0.1', submodules=True, tag='v0.1')
+
+ depends_on('cuda')
+
+ def install(self, spec, prefix):
+ with working_dir(self.build_directory):
+ install_tree('bin', prefix.bin)
+ install_tree('lib', prefix.lib)
diff --git a/var/spack/repos/builtin/packages/hcol/package.py b/var/spack/repos/builtin/packages/hcol/package.py
new file mode 100644
index 0000000000..70278eba93
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hcol/package.py
@@ -0,0 +1,25 @@
+# Copyright 2013-2019 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 import *
+
+
+class Hcol(Package):
+ """This is the SPIRAL package for the Hybrid Control Operator Language
+ (HCOL)."""
+
+ homepage = "https://https://spiral.net"
+ url = "https://github.com/spiral-software/spiral-package-hcol/archive/1.0.0.zip"
+
+ maintainers = ['spiralgen']
+ extends('spiral')
+
+ version('1.0.0', sha256='9a95574e2b061d03d264c32dbf733e893017d1644b6486c7a8a55a3b24783f58')
+
+ # HCOL package is an extension for Spiral. Install the files in their own
+ # prefix, in "namespaces/packages/hcol". This allows 'spack activate' to
+ # symlink hcol at the right location for spiral packages.
+ def install(self, spec, prefix):
+ install_tree('.', prefix.namespaces.packages.hcol)
diff --git a/var/spack/repos/builtin/packages/hdf5/package.py b/var/spack/repos/builtin/packages/hdf5/package.py
index 3c62d46f0d..e560c23f44 100644
--- a/var/spack/repos/builtin/packages/hdf5/package.py
+++ b/var/spack/repos/builtin/packages/hdf5/package.py
@@ -23,6 +23,8 @@ class Hdf5(AutotoolsPackage):
version('develop', branch='develop')
+ version('1.12.0', sha256='a62dcb276658cb78e6795dd29bf926ed7a9bc4edf6e77025cd2c689a8f97c17a')
+
version('1.10.6', sha256='5f9a3ee85db4ea1d3b1fa9159352aebc2af72732fc2f58c96a3f0768dba0e9aa')
version('1.10.5', sha256='6d4ce8bf902a97b050f6f491f4268634e252a63dadd6656a1a9be5b7b7726fa8')
version('1.10.4', sha256='8f60dc4dd6ab5fcd23c750d1dc5bca3d0453bdce5c8cdaf0a4a61a9d1122adb2')
diff --git a/var/spack/repos/builtin/packages/hepmc/package.py b/var/spack/repos/builtin/packages/hepmc/package.py
index 2828a179ff..d208e7ecde 100644
--- a/var/spack/repos/builtin/packages/hepmc/package.py
+++ b/var/spack/repos/builtin/packages/hepmc/package.py
@@ -28,24 +28,46 @@ class Hepmc(CMakePackage):
variant('python', default=False, description='Enable Python bindings')
variant('rootio', default=False, description='Enable ROOT I/O')
+ variant('interfaces', default=False, description='Install interfaces for some Monte-Carlo Event Gens')
depends_on('cmake@2.8.9:', type='build')
- # FIXME: Officially supports Python3, but the build system doesn't find it
- depends_on('python@:2.99.99', when='+python')
+ depends_on('python', when='+python')
depends_on('root', when='+rootio')
- conflicts('+python', when='@:3.1.99')
- conflicts('+rootio', when='@:2.99.99')
+ conflicts('+python', when='@:3.1')
+ conflicts('+rootio', when='@:2')
+ conflicts('+interfaces', when='@:2')
+ @when('@:2')
+ def cmake_args(self):
+ return ['-Dmomentum:STRING=GEV', '-Dlength:STRING=MM']
+
+ @when('@3:')
def cmake_args(self):
spec = self.spec
- return [
+ args = [
'-Dmomentum:STRING=GEV',
'-Dlength:STRING=MM',
'-DHEPMC3_ENABLE_PYTHON={0}'.format(spec.satisfies('+python')),
- '-DHEPMC3_ENABLE_ROOTIO={0}'.format(spec.satisfies('+rootio'))
+ '-DHEPMC3_ENABLE_ROOTIO={0}'.format(spec.satisfies('+rootio')),
+ '-DHEPMC3_INSTALL_INTERFACES={0}'.format(
+ spec.satisfies('+interfaces')),
]
+ if self.spec.satisfies('+python'):
+ py_ver = spec['python'].version.up_to(2)
+ py_sitepkg = join_path(self.prefix, site_packages_dir)
+ args.extend([
+ '-DHEPMC3_PYTHON_VERSIONS={0}'.format(py_ver),
+ '-DHEPMC3_Python_SITEARCH{0}={1}'.format(
+ py_ver.joined, py_sitepkg)
+ ])
+
+ if self.spec.satisfies('+rootio'):
+ args.append('-DROOT_DIR={0}'.format(self.spec['root'].prefix))
+
+ return args
+
def url_for_version(self, version):
if version > Version("3.0.0"):
url = "http://hepmc.web.cern.ch/hepmc/releases/HepMC3-{0}.tar.gz"
diff --git a/var/spack/repos/builtin/packages/hpctoolkit/package.py b/var/spack/repos/builtin/packages/hpctoolkit/package.py
index fef2ec7b3e..d64ce78fad 100644
--- a/var/spack/repos/builtin/packages/hpctoolkit/package.py
+++ b/var/spack/repos/builtin/packages/hpctoolkit/package.py
@@ -19,6 +19,7 @@ class Hpctoolkit(AutotoolsPackage):
maintainers = ['mwkrentel']
version('master', branch='master')
+ version('2020.03.01', commit='94ede4e6fa1e05e6f080be8dc388240ea027f769')
version('2019.12.28', commit='b4e1877ff96069fd8ed0fdf0e36283a5b4b62240')
version('2019.08.14', commit='6ea44ed3f93ede2d0a48937f288a2d41188a277c')
version('2018.12.28', commit='8dbf0d543171ffa9885344f32f23cc6f7f6e39bc')
@@ -52,27 +53,28 @@ class Hpctoolkit(AutotoolsPackage):
'for the compute nodes.')
variant('cuda', default=False,
- description='Support CUDA on NVIDIA GPUs (master branch).')
+ description='Support CUDA on NVIDIA GPUs (2020.03.01 or later).')
boost_libs = (
'+atomic +chrono +date_time +filesystem +system +thread +timer'
' +graph +regex +shared +multithreaded visibility=global'
)
- depends_on('binutils+libiberty~nls', type='link')
+ depends_on('binutils+libiberty~nls', type='link', when='@master')
+ depends_on('binutils@:2.33.1+libiberty~nls', type='link', when='@:2020.03.99')
depends_on('boost' + boost_libs)
- depends_on('bzip2', type='link')
- depends_on('dyninst')
- depends_on('elfutils~nls', type='link')
- depends_on('intel-tbb')
+ depends_on('bzip2+shared', type='link')
+ depends_on('dyninst@9.3.2:')
+ depends_on('elfutils+bzip2+xz~nls', type='link')
+ depends_on('intel-tbb+shared')
depends_on('libdwarf')
- depends_on('libmonitor+hpctoolkit')
- depends_on('libmonitor+bgq', when='+bgq')
- depends_on('libunwind@1.4:')
+ depends_on('libmonitor+hpctoolkit+bgq', when='+bgq')
+ depends_on('libmonitor+hpctoolkit~bgq', when='~bgq')
+ depends_on('libunwind@1.4: +xz')
depends_on('mbedtls+pic')
depends_on('xerces-c transcoder=iconv')
depends_on('xz', type='link')
- depends_on('zlib')
+ depends_on('zlib+shared')
depends_on('cuda', when='+cuda')
depends_on('intel-xed', when='target=x86_64:')
@@ -83,11 +85,14 @@ class Hpctoolkit(AutotoolsPackage):
conflicts('%gcc@:4.7.99', when='^dyninst@10.0.0:',
msg='hpctoolkit requires gnu gcc 4.8.x or later')
- conflicts('%gcc@:4.99.99', when='@master',
- msg='the master branch requires gnu gcc 5.x or later')
+ conflicts('%gcc@:4.99.99', when='@2020.03.01:',
+ msg='hpctoolkit requires gnu gcc 5.x or later')
conflicts('+cuda', when='@2018.0.0:2019.99.99',
- msg='cuda is only available on the master branch')
+ msg='cuda requires 2020.03.01 or later')
+
+ conflicts('+bgq', when='@2020.03.01:',
+ msg='blue gene requires 2019.12.28 or earlier')
flag_handler = AutotoolsPackage.build_system_flags
diff --git a/var/spack/repos/builtin/packages/hpcviewer/package.py b/var/spack/repos/builtin/packages/hpcviewer/package.py
index 21cfa67daa..97688963cf 100644
--- a/var/spack/repos/builtin/packages/hpcviewer/package.py
+++ b/var/spack/repos/builtin/packages/hpcviewer/package.py
@@ -37,6 +37,9 @@ class Hpcviewer(Package):
maintainers = ['mwkrentel']
viewer_sha = {
+ ('2020.02', 'x86_64'): 'af1f514547a9325aee30eb891b31e38c7ea3f33d2d1978b44f83e7daa3d5de6b',
+ ('2020.02', 'ppc64'): '7bb4926202db663aedd5a6830778c5f73f6b08a65d56861824ea95ba83b1f59c',
+ ('2020.02', 'ppc64le'): 'cfcebb7ba301affd6d21d2afd43c540e6dd4c5bc39b0d20e8bd1e4fed6aa3481',
('2020.01', 'x86_64'): '3cd5a2a382cec1d64c8bd0abaf2b1461dcd4092a4b4074ddbdc1b96d2a0b4220',
('2020.01', 'ppc64'): '814394a5f410033cc1019526c268ef98b5b381e311fcd39ae8b2bde6c6ff017c',
('2020.01', 'ppc64le'): 'e830e956b8088c415fb25ef44a8aca16ebcb27bcd34536866612343217e3f9e4',
@@ -61,6 +64,9 @@ class Hpcviewer(Package):
}
trace_sha = {
+ ('2020.02', 'x86_64'): 'b7b634e91108aa50a2e8647ac6bac87df775ae38aff078545efaa84735e0a666',
+ ('2020.02', 'ppc64'): 'a3e845901689e1b32bc6ab2826c6ac6ed352df4839090fa530b20f747e6e0957',
+ ('2020.02', 'ppc64le'): 'a64a283f61e706d988952a7cede9fac0328b09d2d0b64e4c08acc54e38781c98',
('2020.01', 'x86_64'): '9459177a2445e85d648384e2ccee20524592e91a74d615262f32d0876831cd7c',
('2020.01', 'ppc64'): '02366a2ba30b9b2450d50cf44933288f04fae5bf9868eef7bb2ae1b49d4f454e',
('2020.01', 'ppc64le'): '39970e84e397ed96bc994e7b8db3b7b3aab4e3155fa7ca8e68b9274bb58115f0',
diff --git a/var/spack/repos/builtin/packages/hpx/package.py b/var/spack/repos/builtin/packages/hpx/package.py
index 9d24fc0e88..a8f028b27b 100644
--- a/var/spack/repos/builtin/packages/hpx/package.py
+++ b/var/spack/repos/builtin/packages/hpx/package.py
@@ -15,6 +15,8 @@ class Hpx(CMakePackage, CudaPackage):
maintainers = ['msimberg', 'albestro']
version('master', git='https://github.com/STEllAR-GROUP/hpx.git', branch='master')
+ version('stable', git='https://github.com/STEllAR-GROUP/hpx.git', tag='stable')
+ version('1.4.1', sha256='965dabe44d17480e326d92da4eec56722d98b33943c53d2b0f8f4655cb208023')
version('1.4.0', sha256='241a1c47fafba751848fac12446e7bf4ad3d342d5eb2fa1ef94dd904acc329ed')
version('1.3.0', sha256='cd34da674064c4cc4a331402edbd65c5a1f8058fb46003314ca18fa08423c5ad')
version('1.2.1', sha256='8cba9b48e919035176d3b7bbfc2c110df6f07803256626f1dad8d9dde16ab77a')
@@ -67,6 +69,7 @@ class Hpx(CMakePackage, CudaPackage):
depends_on('boost cxxstd=11', when='cxxstd=11')
depends_on('boost cxxstd=14', when='cxxstd=14')
depends_on('boost cxxstd=17', when='cxxstd=17')
+ depends_on('boost cxxstd=17', when='@stable')
# Malloc
depends_on('gperftools', when='malloc=tcmalloc')
@@ -156,7 +159,8 @@ class Hpx(CMakePackage, CudaPackage):
'-DBOOST_ROOT={0}'.format(spec['boost'].prefix),
'-DHWLOC_ROOT={0}'.format(spec['hwloc'].prefix),
'-DHPX_WITH_BOOST_ALL_DYNAMIC_LINK=ON',
- '-DBUILD_SHARED_LIBS=ON'
+ '-DBUILD_SHARED_LIBS=ON',
+ '-DHPX_DATASTRUCTURES_WITH_ADAPT_STD_TUPLE=OFF'
])
return args
diff --git a/var/spack/repos/builtin/packages/htop/package.py b/var/spack/repos/builtin/packages/htop/package.py
index 9de69ae0bf..e0d9960467 100644
--- a/var/spack/repos/builtin/packages/htop/package.py
+++ b/var/spack/repos/builtin/packages/htop/package.py
@@ -18,6 +18,7 @@ class Htop(AutotoolsPackage):
version('2.0.2', sha256='179be9dccb80cee0c5e1a1f58c8f72ce7b2328ede30fb71dcdf336539be2f487')
depends_on('ncurses')
+ depends_on('python+pythoncmd', type='build')
def configure_args(self):
return ['--enable-shared']
diff --git a/var/spack/repos/builtin/packages/hydrogen/package.py b/var/spack/repos/builtin/packages/hydrogen/package.py
index 625c336fff..d0aef797e7 100644
--- a/var/spack/repos/builtin/packages/hydrogen/package.py
+++ b/var/spack/repos/builtin/packages/hydrogen/package.py
@@ -18,7 +18,7 @@ class Hydrogen(CMakePackage):
maintainers = ['bvanessen']
version('develop', branch='hydrogen')
- version('1.3.3', sha256='140112066b84d33ca4b75c8e520fb15748fa648c4d2b934c1eb5510173ede5f5')
+ version('1.3.3', sha256='a51a1cfd40ac74d10923dfce35c2c04a3082477683f6b35e7b558ea9f4bb6d51')
version('1.3.2', sha256='50bc5e87955f8130003d04dfd9dcad63107e92b82704f8107baf95b0ccf98ed6')
version('1.3.1', sha256='a8b8521458e9e747f2b24af87c4c2749a06e500019c383e0cefb33e5df6aaa1d')
version('1.3.0', sha256='0f3006aa1d8235ecdd621e7344c99f56651c6836c2e1bc0cf006331b70126b36')
diff --git a/var/spack/repos/builtin/packages/intel-tbb/package.py b/var/spack/repos/builtin/packages/intel-tbb/package.py
index 72ed301bd8..6dbb1971f5 100644
--- a/var/spack/repos/builtin/packages/intel-tbb/package.py
+++ b/var/spack/repos/builtin/packages/intel-tbb/package.py
@@ -21,7 +21,7 @@ class IntelTbb(Package):
# Note: when adding new versions, please check and update the
# patches, filters and url_for_version() below as needed.
- version('2020.1', sha256='48d51c63b16787af54e1ee4aaf30042087f20564b4eecf9a032d5568bc2f0bf8')
+ version('2020.1', sha256='7c96a150ed22bc3c6628bc3fef9ed475c00887b26d37bca61518d76a56510971')
version('2020.0', sha256='8eed2377ac62e6ac10af5a8303ce861e4525ffe491a061b48e8fe094fc741ce9')
version('2019.9', sha256='15652f5328cf00c576f065e5cd3eaf3317422fe82afb67a9bcec0dc065bd2abe')
version('2019.8', sha256='7b1fd8caea14be72ae4175896510bf99c809cd7031306a1917565e6de7382fba')
diff --git a/var/spack/repos/builtin/packages/intel-xed/package.py b/var/spack/repos/builtin/packages/intel-xed/package.py
index ac9a7a4b0c..31b157531e 100644
--- a/var/spack/repos/builtin/packages/intel-xed/package.py
+++ b/var/spack/repos/builtin/packages/intel-xed/package.py
@@ -42,7 +42,8 @@ class IntelXed(Package):
variant('debug', default=False, description='Enable debug symbols')
- depends_on('python@2.7:', type='build')
+ # python module 'platform.linux_distribution' was removed in python 3.8
+ depends_on('python@2.7:3.7', type='build')
conflicts('target=ppc64:', msg='intel-xed only runs on x86')
conflicts('target=ppc64le:', msg='intel-xed only runs on x86')
diff --git a/var/spack/repos/builtin/packages/jblob/package.py b/var/spack/repos/builtin/packages/jblob/package.py
new file mode 100644
index 0000000000..1aa1738230
--- /dev/null
+++ b/var/spack/repos/builtin/packages/jblob/package.py
@@ -0,0 +1,35 @@
+# Copyright 2013-2019 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 import *
+
+
+class Jblob(Package):
+ """
+ The German Climate Computing Center
+ (DKRZ: Deutsches Klimarechenzentrum GmbH)
+ provides a Long Term Archiving Service for large research
+ data sets which are relevant for climate or Earth system research.
+ """
+
+ homepage = "https://cera-www.dkrz.de/WDCC/ui/cerasearch"
+ url = "https://cera-www.dkrz.de/jblob/jblob-3.0.zip"
+
+ maintainers = ['ajkotobi']
+
+ version('3.0', sha256='576b5956358386a8832c6d1d13c410705e54888354a10cfd4f094513458067e4')
+
+ depends_on('java@8:', type='run')
+
+ def setup_run_environment(self, env):
+ env.set('JAVA_HOME', self.spec['java'].prefix)
+
+ def install(self, spec, prefix):
+ filter_file('/opt/jblob-' + self.version, prefix, 'jblob')
+
+ mkdir(prefix.bin)
+ install('jblob', prefix.bin)
+ install_tree('lib', prefix.lib)
+ install_tree('docs', prefix.docs)
diff --git a/var/spack/repos/builtin/packages/jdk/package.py b/var/spack/repos/builtin/packages/jdk/package.py
index 431943ac86..025d12be65 100644
--- a/var/spack/repos/builtin/packages/jdk/package.py
+++ b/var/spack/repos/builtin/packages/jdk/package.py
@@ -24,11 +24,7 @@ class Jdk(Package):
# automate this process, we need to utilize these additional curl
# command-line options. See:
# http://stackoverflow.com/questions/10268583/how-to-automate-download-and-installation-of-java-jdk-on-linux
- curl_options = [
- '-j', # junk cookies
- '-b', # specify required License Agreement cookie
- 'oraclelicense=accept-securebackup-cookie'
- ]
+ fetch_options = {'cookie': 'oraclelicense=accept-securebackup-cookie'}
# To add the latest version, go to the homepage listed above,
# click "JDK Download", click "Accept License Agreement", right-click the
@@ -36,29 +32,29 @@ class Jdk(Package):
# found in a link above. The build number can be deciphered from the URL.
# Alternatively, run `bin/java -version` after extracting. Replace '+'
# symbol in version with '_', otherwise it will be interpreted as a variant
- version('12.0.2_10', sha256='2dde6fda89a4ec6e6560ed464e917861c9e40bf576e7a64856dafc55abaaff51', curl_options=curl_options,
+ version('12.0.2_10', sha256='2dde6fda89a4ec6e6560ed464e917861c9e40bf576e7a64856dafc55abaaff51',
url='https://download.oracle.com/otn-pub/java/jdk/12.0.2+10/e482c34c86bd4bf8b56c0b35558996b9/jdk-12.0.2_linux-x64_bin.tar.gz')
- version('12.0.1_12', sha256='9fd6dcdaf2cfca7da59e39b009a0f5bcd53bec2fb16105f7ca8d689cdab68d75', curl_options=curl_options,
+ version('12.0.1_12', sha256='9fd6dcdaf2cfca7da59e39b009a0f5bcd53bec2fb16105f7ca8d689cdab68d75',
url='https://download.oracle.com/otn-pub/java/jdk/12.0.1+12/69cfe15208a647278a19ef0990eea691/jdk-12.0.1_linux-x64_bin.tar.gz')
- version('11.0.2_9', sha256='7b4fd8ffcf53e9ff699d964a80e4abf9706b5bdb5644a765c2b96f99e3a2cdc8', curl_options=curl_options,
+ version('11.0.2_9', sha256='7b4fd8ffcf53e9ff699d964a80e4abf9706b5bdb5644a765c2b96f99e3a2cdc8',
url='https://download.oracle.com/otn-pub/java/jdk/11.0.2+9/f51449fcd52f4d52b93a989c5c56ed3c/jdk-11.0.2_linux-x64_bin.tar.gz')
- version('11.0.1_13', sha256='e7fd856bacad04b6dbf3606094b6a81fa9930d6dbb044bbd787be7ea93abc885', curl_options=curl_options,
+ version('11.0.1_13', sha256='e7fd856bacad04b6dbf3606094b6a81fa9930d6dbb044bbd787be7ea93abc885',
url='https://download.oracle.com/otn-pub/java/jdk/11.0.1+13/90cf5d8f270a4347a95050320eef3fb7/jdk-11.0.1_linux-x64_bin.tar.gz')
- version('10.0.2_13', sha256='6633c20d53c50c20835364d0f3e172e0cbbce78fff81867488f22a6298fa372b', curl_options=curl_options,
+ version('10.0.2_13', sha256='6633c20d53c50c20835364d0f3e172e0cbbce78fff81867488f22a6298fa372b',
url='https://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.tar.gz')
- version('10.0.1_10', sha256='ae8ed645e6af38432a56a847597ac61d4283b7536688dbab44ab536199d1e5a4', curl_options=curl_options,
+ version('10.0.1_10', sha256='ae8ed645e6af38432a56a847597ac61d4283b7536688dbab44ab536199d1e5a4',
url='https://download.oracle.com/otn-pub/java/jdk/10.0.1+10/fb4372174a714e6b8c52526dc134031e/jdk-10.0.1_linux-x64_bin.tar.gz')
- version('1.8.0_241-b07', sha256='419d32677855f676076a25aed58e79432969142bbd778ff8eb57cb618c69e8cb', curl_options=curl_options,
+ version('1.8.0_241-b07', sha256='419d32677855f676076a25aed58e79432969142bbd778ff8eb57cb618c69e8cb',
url='https://download.oracle.com/otn-pub/java/jdk/8u241-b07/1f5b5a70bf22433b84d0e960903adac8/jdk-8u241-linux-x64.tar.gz')
- version('1.8.0_231-b11', sha256='a011584a2c9378bf70c6903ef5fbf101b30b08937441dc2ec67932fb3620b2cf', curl_options=curl_options,
+ version('1.8.0_231-b11', sha256='a011584a2c9378bf70c6903ef5fbf101b30b08937441dc2ec67932fb3620b2cf',
url='https://download.oracle.com/otn-pub/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.tar.gz')
- version('1.8.0_212-b10', sha256='3160c50aa8d8e081c8c7fe0f859ea452922eca5d2ae8f8ef22011ae87e6fedfb', curl_options=curl_options,
+ version('1.8.0_212-b10', sha256='3160c50aa8d8e081c8c7fe0f859ea452922eca5d2ae8f8ef22011ae87e6fedfb',
url='https://download.oracle.com/otn-pub/java/jdk/8u212-b10/59066701cf1a433da9770636fbc4c9aa/jdk-8u212-linux-x64.tar.gz')
- version('1.8.0_202-b08', sha256='9a5c32411a6a06e22b69c495b7975034409fa1652d03aeb8eb5b6f59fd4594e0', curl_options=curl_options,
+ version('1.8.0_202-b08', sha256='9a5c32411a6a06e22b69c495b7975034409fa1652d03aeb8eb5b6f59fd4594e0',
url='https://download.oracle.com/otn-pub/java/jdk/8u202-b08/1961070e4c9b4e26a04e7f5a083f551e/jdk-8u202-linux-x64.tar.gz')
- version('1.8.0_141-b15', sha256='041d5218fbea6cd7e81c8c15e51d0d32911573af2ed69e066787a8dc8a39ba4f', curl_options=curl_options,
+ version('1.8.0_141-b15', sha256='041d5218fbea6cd7e81c8c15e51d0d32911573af2ed69e066787a8dc8a39ba4f',
url='https://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz')
- version('1.8.0_131-b11', sha256='62b215bdfb48bace523723cdbb2157c665e6a25429c73828a32f00e587301236', curl_options=curl_options,
+ version('1.8.0_131-b11', sha256='62b215bdfb48bace523723cdbb2157c665e6a25429c73828a32f00e587301236',
url='https://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz')
provides('java@12', when='@12.0:12.999')
diff --git a/var/spack/repos/builtin/packages/kallisto/package.py b/var/spack/repos/builtin/packages/kallisto/package.py
index 337b50f188..d33bd970a2 100644
--- a/var/spack/repos/builtin/packages/kallisto/package.py
+++ b/var/spack/repos/builtin/packages/kallisto/package.py
@@ -13,8 +13,37 @@ class Kallisto(CMakePackage):
homepage = "http://pachterlab.github.io/kallisto"
url = "https://github.com/pachterlab/kallisto/archive/v0.43.1.tar.gz"
+ version('0.46.2', sha256='c447ca8ddc40fcbd7d877d7c868bc8b72807aa8823a8a8d659e19bdd515baaf2')
version('0.43.1', sha256='7baef1b3b67bcf81dc7c604db2ef30f5520b48d532bf28ec26331cb60ce69400')
depends_on('zlib')
depends_on('hdf5')
depends_on('mpich')
+
+ # htslib isn't built in time to be used....
+ parallel = False
+
+ # v0.44.0 vendored a copy of htslib and uses auto* to build
+ # its configure script.
+ depends_on('autoconf', type='build', when='@0.44.0:')
+ depends_on('automake', type='build', when='@0.44.0:')
+ depends_on('libtool', type='build', when='@0.44.0:')
+ depends_on('m4', type='build', when='@0.44.0:')
+
+ # Including '-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON' in the cmake args
+ # causes bits of cmake's output to end up in the autoconf-generated
+ # configure script.
+ # See https://github.com/spack/spack/issues/15274 and
+ # https://github.com/pachterlab/kallisto/issues/253
+ @property
+ def std_cmake_args(self):
+ """Call the original std_cmake_args and then filter the verbose
+ setting.
+ """
+ a = super(Kallisto, self).std_cmake_args
+ if (self.spec.version >= Version('0.44.0')):
+ args = [i for i in a if i != '-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON']
+ else:
+ args = a
+
+ return args
diff --git a/var/spack/repos/builtin/packages/kealib/package.py b/var/spack/repos/builtin/packages/kealib/package.py
index e164dac4b4..3e050a213c 100644
--- a/var/spack/repos/builtin/packages/kealib/package.py
+++ b/var/spack/repos/builtin/packages/kealib/package.py
@@ -23,12 +23,13 @@ class Kealib(CMakePackage):
Development work on this project has been funded by Landcare Research.
"""
homepage = "http://www.kealib.org/"
- url = "https://bitbucket.org/chchrsc/kealib/downloads/kealib-1.4.11.tar.gz"
- hg = "https://bitbucket.org/chchrsc/kealib"
+ url = "https://github.com/ubarsc/kealib/releases/download/kealib-1.4.12/kealib-1.4.12.tar.gz"
+ git = "https://github.com/ubarsc/kealib"
maintainers = ['gillins']
- version('develop', hg=hg)
+ version('develop', git=git)
+ version('1.4.12', sha256='0b100e36b3e25e57487aa197d7be47f22e1b30afb16a57fdaa5f877696ec321e')
version('1.4.11', sha256='3d64cdec560c7a338ccb38e3a456db4e3b176ac62f945daa6e332e60fe4eca90')
version('1.4.10', sha256='b1bd2d6834d2fe09ba456fce77f7a9452b406dbe302f7ef1aabe924e45e6bb5e')
version('1.4.9', sha256='1c80489f17114a229097c2e8c61d5e4c82ea63ae631c81a817fef95cfd527174')
diff --git a/var/spack/repos/builtin/packages/keyutils/package.py b/var/spack/repos/builtin/packages/keyutils/package.py
new file mode 100644
index 0000000000..049dbb1c22
--- /dev/null
+++ b/var/spack/repos/builtin/packages/keyutils/package.py
@@ -0,0 +1,27 @@
+# Copyright 2013-2020 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 import *
+import glob
+
+
+class Keyutils(MakefilePackage):
+ """These tools are used to control the key management system built
+ into the Linux kernel."""
+
+ homepage = "https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/keyutils.git/"
+ url = "https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/keyutils.git/snapshot/keyutils-1.6.1.tar.gz"
+
+ version('1.6.1', sha256='3c71dcfc6900d07b02f4e061d8fb218a4ae6519c1d283d6a57b8e27718e2f557')
+ version('1.6', sha256='c6a27b4e3d0122d921f3dcea4b1f02a8616ca844535960d6af76ef67d015b5cf')
+ version('1.5.10', sha256='e1fdbde234c786b65609a4cf080a2c5fbdb57f049249c139160c85fc3dfa7da9')
+ version('1.5.9', sha256='2dc0bdb099ab8331e02e5dbbce320359bef76eda0a4ddbd2ba1d1b9d3a8cdff8')
+
+ def install(self, spec, prefix):
+ install_tree('.', prefix)
+ mkdirp(prefix.include)
+ headers = glob.glob(join_path(prefix, '*.h'))
+ for h in headers:
+ install(h, prefix.include)
diff --git a/var/spack/repos/builtin/packages/kraken2/package.py b/var/spack/repos/builtin/packages/kraken2/package.py
new file mode 100644
index 0000000000..e970752ad2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/kraken2/package.py
@@ -0,0 +1,35 @@
+# Copyright 2013-2020 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 import *
+import glob
+import os
+
+
+class Kraken2(Package):
+ """Kraken2 is a system for assigning taxonomic labels to short DNA
+ sequences, usually obtained through metagenomic studies."""
+
+ homepage = "https://ccb.jhu.edu/software/kraken2/"
+ url = "https://github.com/DerrickWood/kraken2/archive/v2.0.8-beta.tar.gz"
+
+ maintainers = ['rberg2']
+
+ version('2.0.8-beta', sha256='f2a91fc57a40b3e87df8ac2ea7c0ff1060cc9295c95de417ee53249ee3f7ad8e')
+ version('2.0.7-beta', sha256='baa160f5aef73327e1a79e6d1c54b64b2fcdaee0be31b456f7bc411d1897a744')
+ version('2.0.6-beta', sha256='d77db6251179c4d7e16bc9b5e5e9043d25acf81f3e32ad6eadfba829a31e1d09')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('rsync', type=('run'))
+ depends_on('wget', type=('run'))
+
+ def install(self, spec, prefix):
+ installer = Executable('./install_kraken2.sh')
+ installer(self.stage.source_path)
+ mkdirp(prefix.bin)
+ files = glob.iglob('*')
+ for file in files:
+ if os.path.isfile(file):
+ install(file, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/kvtree/package.py b/var/spack/repos/builtin/packages/kvtree/package.py
index be265f5ecd..40e57ed0ee 100644
--- a/var/spack/repos/builtin/packages/kvtree/package.py
+++ b/var/spack/repos/builtin/packages/kvtree/package.py
@@ -10,8 +10,8 @@ class Kvtree(CMakePackage):
"""KVTree provides a fully extensible C datastructure modeled after perl
hashes."""
- homepage = "https://github.com/ECP-VeloC/KVTree"
- url = "https://github.com/ECP-VeloC/KVTree/archive/v1.0.2.zip"
+ homepage = "https://github.com/ecp-veloc/KVTree"
+ url = "https://github.com/ecp-veloc/KVTree/archive/v1.0.2.zip"
git = "https://github.com/ecp-veloc/kvtree.git"
tags = ['ecp']
diff --git a/var/spack/repos/builtin/packages/lammps/package.py b/var/spack/repos/builtin/packages/lammps/package.py
index 72a1a9246f..9a6ef2e2b4 100644
--- a/var/spack/repos/builtin/packages/lammps/package.py
+++ b/var/spack/repos/builtin/packages/lammps/package.py
@@ -20,7 +20,16 @@ class Lammps(CMakePackage, CudaPackage):
tags = ['ecp', 'ecp-apps']
- version('develop', branch='master')
+ version('master', branch='master')
+ version('20200303', sha256='9aa56dfb8673a06e6c88588505ec1dfc01dd94f9d60e719ed0c605e48cc06c58')
+ version('20200227', sha256='1aabcf38bc72285797c710b648e906151a912c36b634a9c88ac383aacf85516e')
+ version('20200218', sha256='73bcf146660804ced954f6a0a8dce937482677778d46018ca5a688127bf97211')
+ version('20200204', sha256='3bf3de546ede34ffcd89f1fca5fd66aa78c662e7c8a76e30ce593e44a00d23ce')
+ version('20200124', sha256='443829560d760690e1ae21ad54922f56f34f640a81e817f5cc65d2a4af3a6a5d')
+ version('20200109', sha256='f2fd24f6c10837801f490913d73f672ec7c6becda08465d7e834a2bfbe3d7cd6')
+ version('20191120', sha256='fd146bf517a6c2fb8a69ecb3749dc352eef94414739cd7855c668c690af85d27')
+ version('20191030', sha256='5279567f731386ffdb87800b448903a63de2591064e13b4d5216acae25b7e541')
+ version('20190919', sha256='0f693203afe86bc70c084c55f29330bdeea3e3ad6791f81c727f7a34a7f6caf3')
version('20190807', sha256='895d71914057e070fdf0ae5ccf9d6552b932355056690bdb8e86d96549218cc0')
version('20190605', sha256='c7b35090aef7b114d2b47a7298c1e8237dd811da87995c997bf7639cca743152')
version('20181212', sha256='ccc5d2c21c4b62ce4afe7b3a0fe2f37b83e5a5e43819b7c2e2e255cce2ce0f24')
diff --git a/var/spack/repos/builtin/packages/lastz/package.py b/var/spack/repos/builtin/packages/lastz/package.py
index cbe4ee4e14..4b0431b2e9 100644
--- a/var/spack/repos/builtin/packages/lastz/package.py
+++ b/var/spack/repos/builtin/packages/lastz/package.py
@@ -12,7 +12,15 @@ class Lastz(MakefilePackage):
homepage = "https://lastz.github.io/lastz"
url = "https://github.com/lastz/lastz/archive/1.04.00.tar.gz"
+ version('1.04.03', sha256='c58ed8e37c4b0e82492b3a2b3e12447a3c40286fb8358906d19f10b0a713e9f4')
version('1.04.00', sha256='a4c2c7a77430387e96dbc9f5bdc75874334c672be90f5720956c0f211abf9f5a')
+ # Ref: https://github.com/lastz/lastz/commit/20aa14f483265b4eac97f25aca666c708b9655e4
+ patch('sequences.c.patch', when='@:1.04.03')
+
+ # set compile commands for each compiler
+ def edit(self, spec, prefix):
+ filter_file('gcc', spack_cc, 'src/Makefile')
+
def install(self, spec, prefix):
make('install', 'LASTZ_INSTALL={0}'.format(prefix.bin))
diff --git a/var/spack/repos/builtin/packages/lastz/sequences.c.patch b/var/spack/repos/builtin/packages/lastz/sequences.c.patch
new file mode 100644
index 0000000000..b5c34108aa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lastz/sequences.c.patch
@@ -0,0 +1,244 @@
+--- spack-src/src/sequences.c.org 2020-03-05 13:34:15.764971874 +0900
++++ spack-src/src/sequences.c 2020-03-05 13:49:45.315370741 +0900
+@@ -2180,7 +2180,7 @@
+
+ ch = skip_seq_whitespace (_seq);
+
+- if (ch != '>') seq_ungetc (ch, _seq);
++ if (ch != '>') seq_ungetc ((char)ch, _seq);
+ else parse_fasta_header (_seq);
+
+ debugFastaFile_2;
+@@ -2298,7 +2298,7 @@
+ if (ch == '\r') // handle possible DOS CR-LF line ending
+ {
+ ch = seq_getc (_seq);
+- if (ch != '\n') seq_ungetc (ch, _seq);
++ if (ch != '\n') seq_ungetc ((char)ch, _seq);
+ }
+
+ }
+@@ -2346,7 +2346,7 @@
+ while (ch != EOF)
+ {
+ if ((prevCh == '\n') && (ch == '>')) // (start of next sequence)
+- { seq_ungetc (ch, _seq); break; }
++ { seq_ungetc ((char)ch, _seq); break; }
+
+ if ((_seq->separatorCh == 0) || (ch != _seq->separatorCh))
+ {
+@@ -2445,7 +2445,7 @@
+ // while (ch != EOF)
+ // {
+ // if ((prevCh == '\n') && (ch == '>')) // (start of next sequence)
+-// { seq_ungetc (ch, _seq); break; }
++// { seq_ungetc ((char)ch, _seq); break; }
+ //
+ // switch (char_to_fasta_type[(u8)ch])
+ // {
+@@ -2627,7 +2627,7 @@
+ if (ch == '\r') // handle possible DOS CR-LF line ending
+ {
+ ch = seq_getc (_seq);
+- if (ch != '\n') seq_ungetc (ch, _seq);
++ if (ch != '\n') seq_ungetc ((char)ch, _seq);
+ }
+
+ // copy from trueHeader into the header (unless the header is locked), then
+@@ -2762,7 +2762,7 @@
+ if (ch == '\r') // handle possible DOS CR-LF line ending
+ {
+ ch = seq_getc (_seq);
+- if (ch != '\n') seq_ungetc (ch, _seq);
++ if (ch != '\n') seq_ungetc ((char)ch, _seq);
+ }
+
+ _seq->v[_seq->len] = 0; // (set the terminating zero)
+@@ -2834,7 +2834,7 @@
+ if (ch == '\r') // handle possible DOS CR-LF line ending
+ {
+ ch = seq_getc (_seq);
+- if (ch != '\n') seq_ungetc (ch, _seq);
++ if (ch != '\n') seq_ungetc ((char)ch, _seq);
+ }
+
+ //////////
+@@ -2877,7 +2877,7 @@
+ if (ch == '\r') // handle possible DOS CR-LF line ending
+ {
+ ch = seq_getc (_seq);
+- if (ch != '\n') seq_ungetc (ch, _seq);
++ if (ch != '\n') seq_ungetc ((char)ch, _seq);
+ }
+
+ if (qualCount < nucCount) goto not_enough_qualities;
+@@ -3061,7 +3061,7 @@
+ ch = seq_getc (_seq);
+ }
+
+- if (ch != '>') seq_ungetc (ch, _seq);
++ if (ch != '>') seq_ungetc ((char)ch, _seq);
+ else parse_csfasta_header (_seq);
+
+ //////////
+@@ -3166,7 +3166,7 @@
+ if (ch == '\r') // handle possible DOS CR-LF line ending
+ {
+ ch = seq_getc (_seq);
+- if (ch != '\n') seq_ungetc (ch, _seq);
++ if (ch != '\n') seq_ungetc ((char)ch, _seq);
+ }
+
+ }
+@@ -3223,7 +3223,7 @@
+ {
+ if ((prevCh == '\n')
+ && ((ch == '#') || (ch == '>'))) // (start of next sequence)
+- { seq_ungetc (ch, _seq); break; }
++ { seq_ungetc ((char)ch, _seq); break; }
+
+ chType = char_to_csfasta_type[(u8)ch];
+ switch (chType)
+@@ -3324,7 +3324,7 @@
+ // {
+ // if ((prevCh == '\n')
+ // && ((ch == '#') || (ch == '>'))) // (start of next sequence)
+-// { seq_ungetc (ch, _seq); break; }
++// { seq_ungetc ((char)ch, _seq); break; }
+ //
+ // switch (char_to_csfasta_type[(u8)ch])
+ // {
+@@ -4701,10 +4701,10 @@
+ else if (magic == oldQdnaMagicBig) { oldFormat = bigEndian = true; }
+ else
+ {
+- seq_ungetc ((magic >> 24) & 0xFF, _seq);
+- seq_ungetc ((magic >> 16) & 0xFF, _seq);
+- seq_ungetc ((magic >> 8) & 0xFF, _seq);
+- seq_ungetc ( magic & 0xFF, _seq);
++ seq_ungetc ((char) ((magic >> 24) & 0xFF), _seq);
++ seq_ungetc ((char) ((magic >> 16) & 0xFF), _seq);
++ seq_ungetc ((char) ((magic >> 8) & 0xFF), _seq);
++ seq_ungetc ((char) ( magic & 0xFF), _seq);
+ oldFormat = true;
+ }
+
+@@ -5050,7 +5050,7 @@
+ _seq->filename);
+ if (ch == EOF) return false; // we're at end of file now
+
+- seq_ungetc (ch, _seq); // save what we peeked at
++ seq_ungetc ((char)ch, _seq); // save what we peeked at
+ return true; // we have characters to process
+ }
+
+@@ -5074,7 +5074,8 @@
+ int headerLen;
+ int mustBeHeader;
+ int leadingWhite;
+- char ch, *s;
++ int ch;
++ char* s;
+ int ix;
+
+ debugNamesFile_12;
+@@ -5118,7 +5119,7 @@
+
+ ch = seq_getc (_seq);
+ if (ch == EOF) goto failure;
+- while ((ch != '\n') && (isspace (ch)))
++ while ((ch != '\n') && (isspace (ch))) // nota bene: isspace's arg type is an int
+ {
+ leadingWhite++;
+ ch = seq_getc (_seq);
+@@ -5186,7 +5187,7 @@
+
+ // unget the header
+
+- seq_ungetc (ch, _seq); // (ch terminated the header)
++ seq_ungetc ((char)ch, _seq); // (ch terminated the header)
+
+ for (ix=strlen(buffer) ; ix>0 ; )
+ seq_ungetc (buffer[--ix], _seq);
+@@ -5218,7 +5219,8 @@
+ char buffer[maxSequenceHeader+1];
+ char* header;
+ int headerLen;
+- char ch, *s;
++ int ch;
++ char* s;
+ int ix;
+ int ok;
+
+@@ -5257,7 +5259,7 @@
+ if (ch == '\r') // handle possible DOS CR-LF line ending
+ {
+ ch = seq_getc (_seq);
+- if (ch != '\n') seq_ungetc (ch, _seq);
++ if (ch != '\n') seq_ungetc ((char)ch, _seq);
+ }
+
+ // if we have a name trigger, locate the sequence's name
+@@ -5310,7 +5312,7 @@
+
+ // unget the header
+
+- seq_ungetc (ch, _seq); // (ch terminated the header)
++ seq_ungetc ((char)ch, _seq); // (ch terminated the header)
+
+ for (ix=strlen(buffer) ; ix>0 ; )
+ seq_ungetc (buffer[--ix], _seq);
+@@ -9067,10 +9069,10 @@
+
+ // put those four bytes back in the file (in reverse of the read order)
+
+- seq_ungetc (magic >> 24, _seq);
+- seq_ungetc (magic >> 16, _seq);
+- seq_ungetc (magic >> 8, _seq);
+- seq_ungetc (magic , _seq);
++ seq_ungetc ((char) (magic >> 24), _seq);
++ seq_ungetc ((char) (magic >> 16), _seq);
++ seq_ungetc ((char) (magic >> 8), _seq);
++ seq_ungetc ((char) magic , _seq);
+
+ if (type != seq_type_unknown)
+ return type;
+@@ -9080,7 +9082,7 @@
+ //////////
+
+ ch = seq_getc (_seq);
+- seq_ungetc (ch, _seq);
++ seq_ungetc ((char)ch, _seq);
+ if (ch == '@')
+ return seq_type_fastq;
+
+@@ -9095,12 +9097,12 @@
+ ch = seq_getc (_seq);
+ if (ch == '#')
+ {
+- seq_ungetc (ch, _seq);
++ seq_ungetc ((char)ch, _seq);
+ return seq_type_csfasta;
+ }
+
+ if (ch != '>')
+- seq_ungetc (ch, _seq);
++ seq_ungetc ((char)ch, _seq);
+ else
+ {
+ // read header
+@@ -9122,12 +9124,12 @@
+
+ intCh = seq_getc (_seq);
+ if (intCh == EOF) goto unknown;
+- buffer[bufferLen++] = intCh;
++ buffer[bufferLen++] = (char) intCh;
+ if (ustrchr ("ACGTacgtNn", intCh) != NULL)
+ {
+ intCh = seq_getc (_seq);
+ if (intCh == EOF) goto unknown;
+- buffer[bufferLen++] = intCh;
++ buffer[bufferLen++] = (char) intCh;
+ if (ustrchr ("ACGTacgtNn", intCh) != NULL)
+ type = seq_type_fasta;
+ else if (ustrchr ("0123", intCh) != NULL)
diff --git a/var/spack/repos/builtin/packages/legion/package.py b/var/spack/repos/builtin/packages/legion/package.py
index 5b8b761d49..15effc6bea 100644
--- a/var/spack/repos/builtin/packages/legion/package.py
+++ b/var/spack/repos/builtin/packages/legion/package.py
@@ -27,9 +27,9 @@ class Legion(CMakePackage):
version('master', branch='master')
version('ctrl-rep', branch='control_replication')
- version('ctrl-rep-2', commit='96682fd8aae071ecd30a3ed5f481a9d84457a4b6')
- version('ctrl-rep-1', commit='a03671b21851d5f0d3f63210343cb61a630f4405')
- version('ctrl-rep-0', commit='177584e77036c9913d8a62e33b55fa784748759c')
+ version('19.12.0', sha256='ea517638de7256723bb9c119796d4d9d4ef662c52d0151ad24af5288e5a72e7d')
+ version('19.09.1', sha256='c507133fb9dce16b7fcccd7eb2933d13cce96ecf835da60a27c0f66840cabf51')
+ version('19.09.0', sha256='a01c3e3c6698cafb64b77a66341cc06d039faed4fa31b764159f021b94ce13e8')
version('19.06.0', sha256='31cd97e9264c510ab83b1f9e8e1e6bf72021a0c6ee4a028966fce08736e39fbf')
version('19.04.0', sha256='279bbc8dcdab4c75be570318989a9fc9821178143e9db9c3f62e58bf9070b5ac')
version('18.12.0', sha256='71f2c409722975c0ad92f2caffcc9eaa9260f7035e2b55b731d819eb6a94016c')
@@ -46,14 +46,15 @@ class Legion(CMakePackage):
description='Build on top of ibv conduit for InfiniBand support')
variant('shared', default=True, description='Build shared libraries')
variant('hdf5', default=True, description='Enable HDF5 support')
- variant('build_type', default='Release', values=('Debug', 'Release'),
- description='The build type to build')
+ variant('build_type', default='Release',
+ values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'),
+ description='The build type to build', multi=False)
depends_on("cmake@3.1:", type='build')
depends_on("gasnet~aligned-segments~pshm segment-mmap-max='16GB'", when='~mpi')
depends_on("gasnet~aligned-segments~pshm segment-mmap-max='16GB' +mpi", when='+mpi')
depends_on("gasnet~aligned-segments~pshm segment-mmap-max='16GB' +ibv", when='+ibv')
- depends_on("hdf5~mpi", when='+hdf5')
+ depends_on("hdf5", when='+hdf5')
def cmake_args(self):
cmake_cxx_flags = [
@@ -69,7 +70,11 @@ class Legion(CMakePackage):
'-DBUILD_SHARED_LIBS=%s' % ('+shared' in self.spec)]
if self.spec.variants['build_type'].value == 'Debug':
- cmake_cxx_flags.append('-DDEBUG_REALM', '-DDEBUG_LEGION', '-ggdb')
+ cmake_cxx_flags.extend([
+ '-DDEBUG_REALM',
+ '-DDEBUG_LEGION',
+ '-ggdb',
+ ])
options.append('-DCMAKE_CXX_FLAGS=%s' % (" ".join(cmake_cxx_flags)))
diff --git a/var/spack/repos/builtin/packages/libfabric/package.py b/var/spack/repos/builtin/packages/libfabric/package.py
index 030b4b0788..cddaee99a7 100644
--- a/var/spack/repos/builtin/packages/libfabric/package.py
+++ b/var/spack/repos/builtin/packages/libfabric/package.py
@@ -3,7 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-import os.path
from spack import *
@@ -12,24 +11,22 @@ class Libfabric(AutotoolsPackage):
fabric communication services to applications."""
homepage = "https://libfabric.org/"
- url = "https://github.com/ofiwg/libfabric/releases/download/v1.6.1/libfabric-1.6.1.tar.gz"
+ url = "https://github.com/ofiwg/libfabric/releases/download/v1.8.0/libfabric-1.8.0.tar.bz2"
git = "https://github.com/ofiwg/libfabric.git"
- version('develop', branch='master')
- version('1.9.0', sha256='559bfb7376c38253c936d0b104591c3394880376d676894895706c4f5f88597c',
- url='https://github.com/ofiwg/libfabric/releases/download/v1.9.0/libfabric-1.9.0.tar.bz2')
- version('1.8.1', sha256='3c560b997f9eafd89f961dd8e8a29a81aad3e39aee888e3f3822da419047dc88',
- url='https://github.com/ofiwg/libfabric/releases/download/v1.8.1/libfabric-1.8.1.tar.bz2')
- version('1.8.0', sha256='c4763383a96af4af52cd81b3b094227f5cf8e91662f861670965994539b7ee37',
- url='https://github.com/ofiwg/libfabric/releases/download/v1.8.0/libfabric-1.8.0.tar.bz2')
- version('1.7.1', sha256='312e62c57f79b7274f89c41823932c00b15f1cc8de9c1f8dce17cd7fdae66fa1')
- version('1.7.0', sha256='9d7059e2ef48341f967f2a20ee215bc50f9079b32aad485f654098f83040e4be')
- version('1.6.2', sha256='b1a9cf8c47189a1c918f8b5710d05cb50df6b47a1c9b2ba51d927e97503b4df0')
- version('1.6.1', sha256='ac85f18bbf09226e868d72771ecba39cfdb7915aab3aeb855c95f8be7817f8bc')
- version('1.6.0', sha256='cd7d4543cf706820e4a33003457eff97336b5160f35d0e8b001aea18b5470423')
- version('1.5.3', sha256='770e505185074b4c66a0c33ac2155670142746a71a6299c286f6d5cd220cbff8')
- version('1.5.0', sha256='f62709e70fab6abea719402da854f3c6ab60369be6b1e31e4f77554c7454da28')
- version('1.4.2', sha256='858e30d92b69ee5e47ac10a8ac0c731b491d75a6e28267a128f3d6eb43f940a1')
+ version('master', branch='master')
+ version('1.9.1', sha256='c305c6035c992523e08c7591a6a3707225ba3e72de40443eaed837a10df6771a')
+ version('1.9.0', sha256='559bfb7376c38253c936d0b104591c3394880376d676894895706c4f5f88597c')
+ version('1.8.1', sha256='3c560b997f9eafd89f961dd8e8a29a81aad3e39aee888e3f3822da419047dc88')
+ version('1.8.0', sha256='c4763383a96af4af52cd81b3b094227f5cf8e91662f861670965994539b7ee37')
+ version('1.7.1', sha256='f4e9cc48319763cff4943de96bf527b737c9f1d6ac3088b8b5c75d07bd719569')
+ version('1.7.0', sha256='b3dd9cc0fa36fe8c3b9997ba279ec831a905704816c25fe3c4c09fc7eeceaac4')
+ version('1.6.2', sha256='ec63f61f5e529964ef65fd101627d8782c0efc2b88b3d5fc7f0bfd2c1e95ab2c')
+ version('1.6.1', sha256='33215a91450e2234ebdc7c467f041b6757f76f5ba926425e89d80c27b3fd7da2')
+ version('1.6.0', sha256='b3ce7bd655052ea4da7bf01a3177d96d94e5f41b3fd6011ac43f50fcb2dc7581')
+ version('1.5.3', sha256='f62a40da06f8951db267a59a4ee7363b6ee60a7abbc55cd5db6c8b067d93fa0c')
+ version('1.5.0', sha256='88a8ad6772f11d83e5b6f7152a908ffcb237af273a74a1bd1cb4202f577f1f23')
+ version('1.4.2', sha256='5d027d7e4e34cb62508803e51d6bd2f477932ad68948996429df2bfff37ca2a5')
fabrics = ('psm',
'psm2',
@@ -76,38 +73,8 @@ class Libfabric(AutotoolsPackage):
depends_on('automake', when='@develop', type='build')
depends_on('libtool', when='@develop', type='build')
- resource(name='fabtests',
- url='https://github.com/ofiwg/libfabric/releases/download/v1.9.0/fabtests-1.9.0.tar.bz2',
- sha256='60cc21db7092334904cbdafd142b2403572976018a22218e7c453195caef366e',
- placement='fabtests', when='@1.9.0')
- resource(name='fabtests',
- url='https://github.com/ofiwg/libfabric/releases/download/v1.8.0/fabtests-1.8.0.tar.gz',
- sha256='4b9af18c9c7c8b28eaeac4e6e9148bd2ea7dc6b6f00f8e31c90a6fc536c5bb6c',
- placement='fabtests', when='@1.8.0')
- resource(name='fabtests',
- url='https://github.com/ofiwg/libfabric/releases/download/v1.7.0/fabtests-1.7.0.tar.gz',
- sha256='ebb4129dc69dc0e1f48310ce1abb96673d8ddb18166bc595312ebcb96e803de9',
- placement='fabtests', when='@1.7.0')
- resource(name='fabtests',
- url='https://github.com/ofiwg/fabtests/releases/download/v1.6.1/fabtests-1.6.1.tar.gz',
- sha256='d357466b868fdaf1560d89ffac4c4e93a679486f1b4221315644d8d3e21174bf',
- placement='fabtests', when='@1.6.1')
- resource(name='fabtests',
- url='https://github.com/ofiwg/fabtests/releases/download/v1.6.0/fabtests-1.6.0.tar.gz',
- sha256='dc3eeccccb005205017f5af60681ede15782ce202a0103450a6d56a7ff515a67',
- placement='fabtests', when='@1.6.0')
- resource(name='fabtests',
- url='https://github.com/ofiwg/fabtests/releases/download/v1.5.3/fabtests-1.5.3.tar.gz',
- sha256='3835b3bf86cd00d23df0ddba8bf317e4a195e8d5c3c2baa918b373d548f77f29',
- placement='fabtests', when='@1.5.3')
- resource(name='fabtests',
- url='https://github.com/ofiwg/fabtests/releases/download/v1.5.0/fabtests-1.5.0.tar.gz',
- sha256='1dddd446c3f1df346899f9a8636f1b4265de5b863103ae24876e9f0c1e40a69d',
- placement='fabtests', when='@1.5.0')
- resource(name='fabtests',
- url='https://github.com/ofiwg/fabtests/releases/download/v1.4.2/fabtests-1.4.2.tar.gz',
- sha256='3b78d0ca1b223ff21b7f5b3627e67e358e3c18b700f86b017e2233fee7e88c2e',
- placement='fabtests', when='@1.4.2')
+ conflicts('@1.9.0', when='platform=darwin',
+ msg='This distribution is missing critical files')
def setup_build_environment(self, env):
if self.run_tests:
@@ -118,10 +85,6 @@ class Libfabric(AutotoolsPackage):
bash = which('bash')
bash('./autogen.sh')
- if self.run_tests:
- with working_dir('fabtests'):
- bash('./autogen.sh')
-
def configure_args(self):
args = []
@@ -138,29 +101,6 @@ class Libfabric(AutotoolsPackage):
return args
- def install(self, spec, prefix):
- # Call main install method
- super(Libfabric, self).install(spec, prefix)
-
- # Build and install fabtests, if available
- if not os.path.isdir('fabtests'):
- return
- with working_dir('fabtests'):
- configure = Executable('./configure')
- configure('--prefix={0}'.format(self.prefix),
- '--with-libfabric={0}'.format(self.prefix))
- make()
- make('install')
-
def installcheck(self):
fi_info = Executable(self.prefix.bin.fi_info)
fi_info()
-
- # Run fabtests test suite if available
- if not os.path.isdir('fabtests'):
- return
- if self.spec.satisfies('@1.8.0,1.9.0'):
- # make test seems broken.
- return
- with working_dir('fabtests'):
- make('test')
diff --git a/var/spack/repos/builtin/packages/libffi/package.py b/var/spack/repos/builtin/packages/libffi/package.py
index e5bf7b1df6..07ec319fb8 100644
--- a/var/spack/repos/builtin/packages/libffi/package.py
+++ b/var/spack/repos/builtin/packages/libffi/package.py
@@ -13,6 +13,9 @@ class Libffi(AutotoolsPackage):
run time."""
homepage = "https://sourceware.org/libffi/"
+ # The server is sometimes a bit slow to respond
+ fetch_options = {'timeout': 60}
+
version('3.2.1', sha256='d06ebb8e1d9a22d19e38d63fdb83954253f39bedc5d46232a05645685722ca37',
url="https://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz")
diff --git a/var/spack/repos/builtin/packages/libgcrypt/package.py b/var/spack/repos/builtin/packages/libgcrypt/package.py
index 496bfc3465..bc566fad52 100644
--- a/var/spack/repos/builtin/packages/libgcrypt/package.py
+++ b/var/spack/repos/builtin/packages/libgcrypt/package.py
@@ -7,14 +7,10 @@ from spack import *
class Libgcrypt(AutotoolsPackage):
- """Libgcrypt is a general purpose cryptographic library based on
- the code from GnuPG. It provides functions for all cryptographic
- building blocks: symmetric ciphers, hash algorithms, MACs, public
- key algorithms, large integer functions, random numbers and a lot
- of supporting functions."""
+ """Cryptographic library based on the code from GnuPG."""
- homepage = "http://www.gnu.org/software/libgcrypt/"
- url = "https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.5.tar.bz2"
+ homepage = "https://gnupg.org/software/libgcrypt/index.html"
+ url = "https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.5.tar.bz2"
version('1.8.5', sha256='3b4a2a94cb637eff5bdebbcaf46f4d95c4f25206f459809339cdada0eb577ac3')
version('1.8.4', sha256='f638143a0672628fde0cad745e9b14deb85dffb175709cacc1f4fe24b93f2227')
@@ -23,3 +19,18 @@ class Libgcrypt(AutotoolsPackage):
version('1.6.2', sha256='de084492a6b38cdb27b67eaf749ceba76bf7029f63a9c0c3c1b05c88c9885c4c')
depends_on('libgpg-error@1.25:')
+
+ def check(self):
+ # Without this hack, `make check` fails on macOS when SIP is enabled
+ # https://bugs.gnupg.org/gnupg/issue2056
+ # https://github.com/Homebrew/homebrew-core/pull/3004
+ if self.spec.satisfies('platform=darwin'):
+ old = self.prefix.lib.join('libgcrypt.20.dylib')
+ new = join_path(
+ self.stage.source_path, 'src', '.libs', 'libgcrypt.20.dylib')
+ filename = 'tests/.libs/random'
+
+ install_name_tool = Executable('install_name_tool')
+ install_name_tool('-change', old, new, filename)
+
+ make('check')
diff --git a/var/spack/repos/builtin/packages/libgit2/package.py b/var/spack/repos/builtin/packages/libgit2/package.py
index 58ea638de0..222075ffdb 100644
--- a/var/spack/repos/builtin/packages/libgit2/package.py
+++ b/var/spack/repos/builtin/packages/libgit2/package.py
@@ -16,8 +16,79 @@ class Libgit2(CMakePackage):
homepage = "https://libgit2.github.com/"
url = "https://github.com/libgit2/libgit2/archive/v0.26.0.tar.gz"
- version('0.28.2', sha256='42b5f1e9b9159d66d86fff0394215c5733b6ef8f9b9d054cdd8c73ad47177fc3')
- version('0.26.0', sha256='6a62393e0ceb37d02fe0d5707713f504e7acac9006ef33da1e88960bd78b6eac')
+ version('0.99.0', sha256='174024310c1563097a6613a0d3f7539d11a9a86517cd67ce533849065de08a11')
+ version('0.28.4', sha256='30f3877469d09f2e4a21be933b4e2800560d16646028dd800744dc5f7fb0c749')
+ version('0.28.3', sha256='ee5344730fe11ce7c86646e19c2d257757be293f5a567548d398fb3af8b8e53b')
+ version('0.28.2', sha256='42b5f1e9b9159d66d86fff0394215c5733b6ef8f9b9d054cdd8c73ad47177fc3')
+ version('0.28.1', sha256='0ca11048795b0d6338f2e57717370208c2c97ad66c6d5eac0c97a8827d13936b')
+ version('0.28.0', sha256='9d60d64dc77085e8e530e5c66314057eafe0c06e4a7a61149a70ff3e0688f284')
+ version('0.27.10', sha256='f6fd26378ff71bd7a4b17b576c82c774a2e9c2d6b74b24718a8fb29551e1c4a5')
+ version('0.27.9', sha256='adf17310b590e6e7618f070c742b5ee028aeeed2c60099bc4190c386b5060de1')
+ version('0.27.8', sha256='8313873d49dc01e8b880ec334d7430ae67496a89aaa8c6e7bbd3affb47a00c76')
+ version('0.27.7', sha256='1a5435a483759b1cd96feb12b11abb5231b0688016db506ce5947178f6ba2531')
+ version('0.27.6', sha256='d98db2ed11ec82fee94dce4819b466524613852c2c9c3426d351c57729ec49da')
+ version('0.27.5', sha256='15f2775f4f325951d9139ed906502b6c71fee6787cada9b045f5994072ccbd33')
+ version('0.27.4', sha256='0b7ca31cb959ff1b22afa0da8621782afe61f99242bf716c403802ffbdb21d51')
+ version('0.27.3', sha256='50a57bd91f57aa310fb7d5e2a340b3779dc17e67b4e7e66111feac5c2432f1a5')
+ version('0.27.2', sha256='ffacdbd5588aeb03e98e3866a7e2ceace468723a439bdc9bb01362fe140fa9e5')
+ version('0.27.1', sha256='837b11927bc5f64e7f9ab0376f57cfe3ca5aa52ffd2007ac41184b21124fb086')
+ version('0.27.0', sha256='545b0458292c786aba334f1bf1c8f73600ae73dd7205a7bb791a187ee48ab8d2')
+ version('0.26.8', sha256='0f20d7e239be030db33d7350bab38ada2830b3bffab5539730074e71b0267796')
+ version('0.26.7', sha256='65584ac1f4de2c3ab8491351c8629eb68bad2d65e67f6411bf0333b8976dc4ef')
+ version('0.26.6', sha256='7669dd47ebdab86ced8888816c552596ec923b6e126704a3445b2081cb0e5662')
+ version('0.26.5', sha256='52e28a5166564bc4365a2e4112f5e5c6e334708dbf13596241b2fd34efc1b0a9')
+ version('0.26.4', sha256='292fa2600bbb4e52641793cfcc1c19ffc0bf97b5fd8378d422a6bfe7afffcb97')
+ version('0.26.3', sha256='0da4e211dfb63c22e5f43f2a4a5373e86a140afa88a25ca6ba3cc2cae58263d2')
+ version('0.26.2', sha256='747b47d5b02a2387ff81301c694763785181b895690b6eb91ed1ae4b7904307b')
+ version('0.26.1', sha256='68cd0f8ee9e0ca84dcf0f0267d0a8297471d3365622d22d3da67c57165bb0722')
+ version('0.26.0', sha256='6a62393e0ceb37d02fe0d5707713f504e7acac9006ef33da1e88960bd78b6eac')
- depends_on('cmake@2.8:', type='build')
- depends_on('libssh2')
+ # Backends
+ variant(
+ 'https', default='system', description='HTTPS support',
+ values=('system', 'openssl', 'none'), multi=False)
+ variant('ssh', default=True, description='Enable SSH support')
+ variant('curl', default=False, description='Enable libcurl support (only supported through v0.27)')
+
+ # Build Dependencies
+ depends_on('cmake@2.8:', type='build', when="@:0.28")
+ depends_on('cmake@3.5:', type='build', when="@0.99:")
+
+ # Runtime Dependencies
+ depends_on('libssh2', when='+ssh')
+ depends_on('openssl', when='https=system platform=linux')
+ depends_on('openssl', when='https=system platform=cray')
+ depends_on('openssl', when='https=openssl')
+ depends_on('curl', when='+curl')
+
+ conflicts('+curl', when='@0.28:')
+
+ def cmake_args(self):
+ args = []
+ if 'https=system' in self.spec:
+ if 'platform=linux' in self.spec or 'platform=cray' in self.spec:
+ args.append('-DUSE_HTTPS=OpenSSL')
+ elif 'platform=darwin' in self.spec:
+ args.append('-DUSE_HTTPS=SecureTransport')
+ else:
+ # Let CMake try to find an HTTPS implementation. Mileage on
+ # your platform may vary
+ args.append('-DUSE_HTTPS=ON')
+ elif 'https=openssl' in self.spec:
+ args.append('-DUSE_HTTPS=OpenSSL')
+ else:
+ args.append('-DUSE_HTTPS=OFF')
+
+ args.append(
+ '-DUSE_SSH={0}'.format('ON' if '+ssh' in self.spec else 'OFF'))
+
+ # The curl backed is not supported after 0.27.x
+ if '@:0.27 +curl' in self.spec:
+ args.append(
+ '-DCURL={0}'.format('ON' if '+curl' in self.spec else 'OFF'))
+
+ # Control tests
+ args.append(
+ '-DBUILD_CLAR={0}'.format('ON' if self.run_tests else 'OFF'))
+
+ return args
diff --git a/var/spack/repos/builtin/packages/libgpg-error/package.py b/var/spack/repos/builtin/packages/libgpg-error/package.py
index 6e61bf1403..c4978751ff 100644
--- a/var/spack/repos/builtin/packages/libgpg-error/package.py
+++ b/var/spack/repos/builtin/packages/libgpg-error/package.py
@@ -7,14 +7,12 @@ from spack import *
class LibgpgError(AutotoolsPackage):
- """Libgpg-error is a small library that defines common error
- values for all GnuPG components. Among these are GPG, GPGSM,
- GPGME, GPG-Agent, libgcrypt, Libksba, DirMngr, Pinentry,
- SmartCard Daemon and possibly more in the future. """
+ """Common error values for all GnuPG components."""
- homepage = "https://www.gnupg.org/related_software/libgpg-error"
- url = "https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.27.tar.bz2"
+ homepage = "https://www.gnupg.org/related_software/libgpg-error/index.en.html"
+ url = "https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.37.tar.bz2"
+ version('1.37', sha256='b32d6ff72a73cf79797f7f2d039e95e9c6f92f0c1450215410840ab62aea9763')
version('1.36', sha256='babd98437208c163175c29453f8681094bcaf92968a15cafb1a276076b33c97c')
version('1.27', sha256='4f93aac6fecb7da2b92871bb9ee33032be6a87b174f54abf8ddf0911a22d29d2')
version('1.21', sha256='b7dbdb3cad63a740e9f0c632a1da32d4afdb694ec86c8625c98ea0691713b84d')
@@ -23,3 +21,13 @@ class LibgpgError(AutotoolsPackage):
depends_on('awk', type=('build'))
# Patch for using gawk@5, c.f. https://dev.gnupg.org/T4459
patch('awk-5.patch', when='@1.36^gawk@5:')
+
+ def configure_args(self):
+ args = ['--enable-static']
+
+ if self.run_tests:
+ args.append('--enable-tests')
+ else:
+ args.append('--disable-tests')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/libhio/package.py b/var/spack/repos/builtin/packages/libhio/package.py
index 42ef377a5a..f04dc7c660 100644
--- a/var/spack/repos/builtin/packages/libhio/package.py
+++ b/var/spack/repos/builtin/packages/libhio/package.py
@@ -16,11 +16,15 @@ class Libhio(AutotoolsPackage):
homepage = "https://github.com/hpc/libhio"
url = "https://github.com/hpc/libhio/releases/download/hio.1.4.1.0/libhio-1.4.1.0.tar.bz2"
+ git = "https://github.com/hpc/libhio.git"
+ maintainers = ['plamborn']
#
# We don't include older versions since they are missing features
# needed by current and future consumers of libhio
#
+ version('master', branch='master')
+ version('1.4.1.4', sha256='6998a424cff97be9a207032b3addd19f292d8ebda72043be92a8f942ae3b4da1')
version('1.4.1.3', sha256='b6ad2354f1bc597e7e55fc989ff50944835d64149f4925c2f45df950919e4d08')
version('1.4.1.2', sha256='87a0f9b72b7aa69485c40d9bd36f02af653b70e8eed3eb0b50eaeb02ff0a9049')
version('1.4.1.1', sha256='5c65d18bf74357f9d9960bf6b9ad2432f8fc5a2b653e72befe4d1caabb9a2f7a')
@@ -57,4 +61,6 @@ class Libhio(AutotoolsPackage):
if '+hdf5' in spec:
args.append('--with-hdf5={0}'.format(spec['hdf5'].prefix))
+ args.append('--with-external-json={0}'.format(spec['json-c'].prefix))
+
return args
diff --git a/var/spack/repos/builtin/packages/libiscsi/package.py b/var/spack/repos/builtin/packages/libiscsi/package.py
new file mode 100644
index 0000000000..621cc875d6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libiscsi/package.py
@@ -0,0 +1,28 @@
+# Copyright 2013-2020 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 import *
+
+
+class Libiscsi(AutotoolsPackage):
+ """Libiscsi is a client-side library to implement the iSCSI protocol that can
+ be used to access the resources of an iSCSI target."""
+
+ homepage = "https://github.com/sahlberg/libiscsi"
+ url = "https://github.com/sahlberg/libiscsi/archive/1.19.0.tar.gz"
+
+ version('1.19.0', sha256='c7848ac722c8361d5064654bc6e926c2be61ef11dd3875020a63931836d806df')
+ version('1.18.0', sha256='464d104e12533dc11f0dd7662cbc2f01c132f94aa4f5bd519e3413ef485830e8')
+ version('1.17.0', sha256='80a7f75bfaffc8bec9920ba7af3f1d14cd862c35c3c5f2c9617b45b975232112')
+ version('1.16.0', sha256='35c7be63a8c3a7cee7b697901b6d2dd464e098e1881671eb67462983053b3c7b')
+ version('1.15.0', sha256='489e625e58c1e6da2fa3536f9c4b12290f2d3fb4ce14edc0583b8ba500605c34')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+
+ def autoreconf(self, spec, prefix):
+ autoreconf('--install', '--force')
diff --git a/var/spack/repos/builtin/packages/libmesh/package.py b/var/spack/repos/builtin/packages/libmesh/package.py
index 541e98a0d4..a828b3c87a 100644
--- a/var/spack/repos/builtin/packages/libmesh/package.py
+++ b/var/spack/repos/builtin/packages/libmesh/package.py
@@ -79,10 +79,7 @@ class Libmesh(AutotoolsPackage):
'variant.')
depends_on('boost', when='+boost')
- # The Scotch dependency of Eigen is not used by libMesh. Since Scotch can
- # only be used with certain versions of flex it conflicts with several
- # versions of GCC, so explicitly disable it.
- depends_on('eigen~scotch', when='+eigen')
+ depends_on('eigen', when='+eigen')
depends_on('hdf5+mpi', when='+hdf5+mpi')
depends_on('mpi', when='+mpi')
depends_on('mpi', when='+slepc')
diff --git a/var/spack/repos/builtin/packages/libsndfile/package.py b/var/spack/repos/builtin/packages/libsndfile/package.py
new file mode 100644
index 0000000000..4c5c294d48
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libsndfile/package.py
@@ -0,0 +1,40 @@
+# Copyright 2013-2020 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 import *
+
+
+class Libsndfile(AutotoolsPackage):
+ """Libsndfile is a C library for reading and writing files containing
+ sampled sound (such as MS Windows WAV and the Apple/SGI AIFF format)
+ through one standard library interface. It is released in source code
+ format under the Gnu Lesser General Public License."""
+
+ homepage = "http://www.mega-nerd.com/libsndfile/"
+ url = "http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28.tar.gz"
+
+ version('1.0.28', sha256='1ff33929f042fa333aed1e8923aa628c3ee9e1eb85512686c55092d1e5a9dfa9')
+
+ variant('alsa', default=False, description='Use alsa in example programs')
+ variant('external-libs',
+ default=False,
+ description='Build with support for FLAC, Ogg and Vorbis')
+ variant('sqlite', default=False, description='Build with sqlite support')
+
+ depends_on('pkgconfig', type='build')
+ depends_on('alsa-lib', when='+alsa')
+ depends_on('flac@1.3.1:', when='+external-libs')
+ depends_on('libogg@1.1.3:', when='+external-libs')
+ depends_on('libvorbis@1.2.3:', when='+external-libs')
+ depends_on('sqlite@3.2:', when='+sqlite')
+
+ def configure_args(self):
+ args = []
+
+ args += self.enable_or_disable('alsa')
+ args += self.enable_or_disable('external-libs')
+ args += self.enable_or_disable('sqlite')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/libunwind/package.py b/var/spack/repos/builtin/packages/libunwind/package.py
index b8e01f0a92..971840f5e0 100644
--- a/var/spack/repos/builtin/packages/libunwind/package.py
+++ b/var/spack/repos/builtin/packages/libunwind/package.py
@@ -13,9 +13,10 @@ class Libunwind(AutotoolsPackage):
homepage = "http://www.nongnu.org/libunwind/"
url = "http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz"
git = "https://github.com/libunwind/libunwind"
+ maintainers = ['mwkrentel']
- version('develop', branch='master')
- version('2018.10.12', commit='f551e16213c52169af8bda554e4051b756a169cc')
+ version('master', branch='master')
+ version('1.4-head', branch='v1.4-stable')
version('1.4-rc1', sha256='1928459139f048f9b4aca4bb5010540cb7718d44220835a2980b85429007fa9f')
version('1.3.1', sha256='43997a3939b6ccdf2f669b50fdb8a4d3205374728c2923ddc2354c65260214f8', preferred=True)
version('1.2.1', sha256='3f3ecb90e28cbe53fba7a4a27ccce7aad188d3210bb1964a923a731a27a75acb')
@@ -24,14 +25,19 @@ class Libunwind(AutotoolsPackage):
variant('xz', default=False,
description='Support xz (lzma) compressed symbol tables.')
+ variant('zlib', default=False,
+ description='Support zlib compressed symbol tables (master '
+ 'branch only).')
+
# The libunwind releases contain the autotools generated files,
# but the git repo snapshots do not.
- depends_on('autoconf', type='build', when='@2018:')
- depends_on('automake', type='build', when='@2018:')
- depends_on('libtool', type='build', when='@2018:')
- depends_on('m4', type='build', when='@2018:')
+ depends_on('autoconf', type='build', when='@master,1.4-head')
+ depends_on('automake', type='build', when='@master,1.4-head')
+ depends_on('libtool', type='build', when='@master,1.4-head')
+ depends_on('m4', type='build', when='@master,1.4-head')
depends_on('xz', type='link', when='+xz')
+ depends_on('zlib', type='link', when='+zlib')
conflicts('platform=darwin',
msg='Non-GNU libunwind needs ELF libraries Darwin does not have')
@@ -49,4 +55,11 @@ class Libunwind(AutotoolsPackage):
else:
args.append('--disable-minidebuginfo')
+ # zlib support is only in the master branch (for now).
+ if spec.satisfies('@master'):
+ if '+zlib' in spec:
+ args.append('--enable-zlibdebuginfo')
+ else:
+ args.append('--disable-zlibdebuginfo')
+
return args
diff --git a/var/spack/repos/builtin/packages/libxpresent/package.py b/var/spack/repos/builtin/packages/libxpresent/package.py
index 0fddba389a..1305623472 100644
--- a/var/spack/repos/builtin/packages/libxpresent/package.py
+++ b/var/spack/repos/builtin/packages/libxpresent/package.py
@@ -15,10 +15,15 @@ class Libxpresent(AutotoolsPackage):
version('1.0.0', sha256='92f1bdfb67ae2ffcdb25ad72c02cac5e4912dc9bc792858240df1d7f105946fa')
- depends_on('libx11')
+ depends_on('libx11', type='link')
+ depends_on('libxext', type='link')
+ depends_on('libxfixes', type='link')
+ depends_on('libxrandr', type='link')
- depends_on('xproto', type='build')
- depends_on('presentproto@1.0:', type='build')
- depends_on('xextproto', type='build')
+ depends_on('xproto', type='link')
+ depends_on('presentproto@1.0:', type='link')
+ depends_on('xextproto', type='link')
+ depends_on('fixesproto', type='link')
+ depends_on('randrproto', type='link')
depends_on('pkgconfig', type='build')
depends_on('util-macros', type='build')
diff --git a/var/spack/repos/builtin/packages/libxsmm/package.py b/var/spack/repos/builtin/packages/libxsmm/package.py
index 070b24396f..12cfc32dfd 100644
--- a/var/spack/repos/builtin/packages/libxsmm/package.py
+++ b/var/spack/repos/builtin/packages/libxsmm/package.py
@@ -14,10 +14,11 @@ class Libxsmm(MakefilePackage):
and deep learning primitives."""
homepage = 'https://github.com/hfp/libxsmm'
- url = 'https://github.com/hfp/libxsmm/archive/1.14.tar.gz'
+ url = 'https://github.com/hfp/libxsmm/archive/1.15.tar.gz'
git = 'https://github.com/hfp/libxsmm.git'
- version('develop', branch='master')
+ version('master', branch='master')
+ version('1.15', sha256='499e5adfbf90cd3673309243c2b56b237d54f86db2437e1ac06c8746b55ab91c')
version('1.14', sha256='9c0af4509ea341d1ee2c6c19fc6f19289318c3bd4b17844efeb9e7f9691abf76')
version('1.13', sha256='47c034e169820a9633770eece0e0fdd8d4a744e09b81da2af8c2608a4625811e')
version('1.12.1', sha256='3687fb98da00ba92cd50b5f0d18b39912c7886dad3856843573aee0cb34e9791')
diff --git a/var/spack/repos/builtin/packages/likwid/package.py b/var/spack/repos/builtin/packages/likwid/package.py
index c24d5e720a..8556fb0d8e 100644
--- a/var/spack/repos/builtin/packages/likwid/package.py
+++ b/var/spack/repos/builtin/packages/likwid/package.py
@@ -19,7 +19,9 @@ class Likwid(Package):
homepage = "https://github.com/RRZE-HPC/likwid"
url = "https://github.com/RRZE-HPC/likwid/archive/v5.0.0.tar.gz"
git = "https://github.com/RRZE-HPC/likwid.git"
+ maintainers = ['TomTheBear']
+ version('5.0.1', sha256='3757b0cb66e8af0116f9288c7f90543acbd8e2af8f72f77aef447ca2b3e76453')
version('5.0.0', sha256='26623f5a1a5fec19d798f0114774a5293d1c93a148538b9591a13e50930fa41e')
version('4.3.4', sha256='5c0d1c66b25dac8292a02232f06454067f031a238f010c62f40ef913c6609a83')
version('4.3.3', sha256='a681378cd66c1679ca840fb5fac3136bfec93c01b3d78cc1d00a641db325a9a3')
@@ -40,8 +42,6 @@ class Likwid(Package):
depends_on('perl', type=('build', 'run'))
- supported_compilers = {'clang': 'CLANG', 'gcc': 'GCC', 'intel': 'ICC'}
-
def patch(self):
files = glob.glob('perl/*.*') + glob.glob('bench/perl/*.*')
@@ -59,13 +59,18 @@ class Likwid(Package):
*files)
def install(self, spec, prefix):
- if self.compiler.name not in self.supported_compilers:
+ supported_compilers = {'clang': 'CLANG', 'gcc': 'GCC', 'intel': 'ICC'}
+ if spec.target.family == 'aarch64':
+ supported_compilers = {'gcc': 'GCCARMv8', 'clang': 'ARMCLANG'}
+ elif spec.target.family == 'ppc64' or spec.target.family == 'ppc64le':
+ supported_compilers = {'gcc': 'GCCPOWER'}
+ if self.compiler.name not in supported_compilers:
raise RuntimeError('{0} is not a supported compiler \
to compile Likwid'.format(self.compiler.name))
filter_file('^COMPILER .*',
'COMPILER = ' +
- self.supported_compilers[self.compiler.name],
+ supported_compilers[self.compiler.name],
'config.mk')
filter_file('^PREFIX .*',
'PREFIX = ' +
diff --git a/var/spack/repos/builtin/packages/lksctp-tools/package.py b/var/spack/repos/builtin/packages/lksctp-tools/package.py
new file mode 100644
index 0000000000..ca168aa320
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lksctp-tools/package.py
@@ -0,0 +1,20 @@
+# Copyright 2013-2020 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 import *
+
+
+class LksctpTools(AutotoolsPackage):
+ """A Linux SCTP helper library"""
+
+ homepage = "https://github.com/sctp/lksctp-tools"
+ url = "https://github.com/sctp/lksctp-tools/archive/v1.0.18.tar.gz"
+
+ version('1.0.18', sha256='3e9ab5b3844a8b65fc8152633aafe85f406e6da463e53921583dfc4a443ff03a')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
diff --git a/var/spack/repos/builtin/packages/lmbench/package.py b/var/spack/repos/builtin/packages/lmbench/package.py
new file mode 100644
index 0000000000..e38ca29e24
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lmbench/package.py
@@ -0,0 +1,30 @@
+# Copyright 2013-2020 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 import *
+
+
+class Lmbench(MakefilePackage):
+ """lmbench is a suite of simple, portable, ANSI/C microbenchmarks for
+ UNIX/POSIX. In general, it measures two key features: latency and
+ bandwidth. lmbench is intended to give system developers insight into
+ basic costs of key operations."""
+
+ homepage = "http://lmbench.sourceforge.net/"
+ git = "https://github.com/intel/lmbench.git"
+
+ version('master', branch='master')
+
+ depends_on('libtirpc')
+
+ def setup_build_environment(self, env):
+ env.prepend_path('CPATH', self.spec['libtirpc'].prefix.include.tirpc)
+ env.append_flags('LDFLAGS', '-ltirpc')
+
+ def build(self, spec, prefix):
+ make('build')
+
+ def install(self, spec, prefix):
+ install_tree('.', prefix)
diff --git a/var/spack/repos/builtin/packages/lua-luaposix/package.py b/var/spack/repos/builtin/packages/lua-luaposix/package.py
index f69c2a3682..f5290eae1c 100644
--- a/var/spack/repos/builtin/packages/lua-luaposix/package.py
+++ b/var/spack/repos/builtin/packages/lua-luaposix/package.py
@@ -13,6 +13,7 @@ class LuaLuaposix(Package):
url = "https://github.com/luaposix/luaposix/archive/release-v33.4.0.tar.gz"
version('33.4.0', sha256='e66262f5b7fe1c32c65f17a5ef5ffb31c4d1877019b4870a5d373e2ab6526a21')
+ version('33.2.1', sha256='4fb34dfea67f4cf3194cdecc6614c9aea67edc3c4093d34137669ea869c358e1')
extends("lua")
diff --git a/var/spack/repos/builtin/packages/lvm2/package.py b/var/spack/repos/builtin/packages/lvm2/package.py
index c552fe3ef5..55fa1f1d39 100644
--- a/var/spack/repos/builtin/packages/lvm2/package.py
+++ b/var/spack/repos/builtin/packages/lvm2/package.py
@@ -20,6 +20,9 @@ class Lvm2(AutotoolsPackage):
homepage = "https://www.sourceware.org/lvm2"
url = "https://sourceware.org/pub/lvm2/releases/LVM2.2.03.05.tgz"
+ # The server is sometimes a bit slow to respond
+ fetch_options = {'timeout': 60}
+
version('2.03.05', sha256='ca52815c999b20c6d25e3192f142f081b93d01f07b9d787e99664b169dba2700')
version('2.03.04', sha256='f151f36fc0039997d2d9369b607b9262568b1a268afe19fd1535807355402142')
version('2.03.03', sha256='cedefa63ec5ae1b62fedbfddfc30706c095be0fc7c6aaed6fd1c50bc8c840dde')
diff --git a/var/spack/repos/builtin/packages/margo/package.py b/var/spack/repos/builtin/packages/margo/package.py
index c6f932e1bb..30e124cac6 100644
--- a/var/spack/repos/builtin/packages/margo/package.py
+++ b/var/spack/repos/builtin/packages/margo/package.py
@@ -13,7 +13,7 @@ class Margo(AutotoolsPackage):
url = "https://xgitlab.cels.anl.gov/sds/margo/-/archive/v0.4.3/margo-v0.4.3.tar.gz"
git = "https://xgitlab.cels.anl.gov/sds/margo.git"
- maintainers = ['fbudin69500', 'chuckatkins']
+ maintainers = ['fbudin69500', 'chuckatkins', 'carns']
version('develop', branch='master')
version('0.4.3', sha256='61a634d6983bee2ffa06e1e2da4c541cb8f56ddd9dd9f8e04e8044fb38657475')
diff --git a/var/spack/repos/builtin/packages/minigan/package.py b/var/spack/repos/builtin/packages/minigan/package.py
new file mode 100644
index 0000000000..5d3b553bcf
--- /dev/null
+++ b/var/spack/repos/builtin/packages/minigan/package.py
@@ -0,0 +1,28 @@
+# Copyright 2013-2019 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 import *
+
+
+class Minigan(Package):
+ """miniGAN is a generative adversarial network code developed as part of the
+ Exascale Computing Project's (ECP) ExaLearn project at
+ Sandia National Laboratories."""
+
+ homepage = "https://github.com/SandiaMLMiniApps/miniGAN"
+ url = "https://github.com/SandiaMLMiniApps/miniGAN/archive/1.0.0.tar.gz"
+
+ version('1.0.0', sha256='ef6d5def9c7040af520acc64b7a8b6c8ec4b7901721b11b0cb25a583ea0c8ae3')
+
+ depends_on('python', type=('build', 'run'))
+ depends_on('py-setuptools', type='build')
+ depends_on('py-torch', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-horovod@master', type=('build', 'run'))
+ depends_on('py-torchvision', type=('build', 'run'))
+ depends_on('py-matplotlib@3.0.0', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ install_tree('.', prefix)
diff --git a/var/spack/repos/builtin/packages/mofem-cephas/package.py b/var/spack/repos/builtin/packages/mofem-cephas/package.py
index 28e00565d2..24e8815084 100644
--- a/var/spack/repos/builtin/packages/mofem-cephas/package.py
+++ b/var/spack/repos/builtin/packages/mofem-cephas/package.py
@@ -42,7 +42,7 @@ class MofemCephas(CMakePackage):
depends_on("parmetis")
# Fixed version of hdf5, to remove some problems with dependent
# packages, f.e. MED format
- depends_on("hdf5@:1.8.19+hl+mpi")
+ depends_on("hdf5@:1.8.19+hl+mpi+fortran")
depends_on("petsc@:3.9.3+mumps+mpi")
depends_on('slepc', when='+slepc')
depends_on("moab")
diff --git a/var/spack/repos/builtin/packages/netcdf-fortran/nag.patch b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_0.patch
index 458c18813e..18d5c2ad65 100644
--- a/var/spack/repos/builtin/packages/netcdf-fortran/nag.patch
+++ b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_0.patch
@@ -1,30 +1,28 @@
-diff --git a/configure b/configure
-index 06ac8b0..d518a1a 100755
--- a/configure
+++ b/configure
-@@ -10657,6 +10657,8 @@ _LT_EOF
+@@ -11563,6 +11563,8 @@ _LT_EOF
lf95*) # Lahey Fortran 8.1
whole_archive_flag_spec=
tmp_sharedflag='--shared' ;;
-+ nagfor*)
++ nagfor*) # NAGFOR 5.3
+ tmp_sharedflag='-Wl,-shared' ;;
xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
tmp_addflag= ;;
-@@ -14252,6 +14254,8 @@ _LT_EOF
+@@ -19036,6 +19038,8 @@ _LT_EOF
lf95*) # Lahey Fortran 8.1
whole_archive_flag_spec_F77=
tmp_sharedflag='--shared' ;;
-+ nagfor*)
++ nagfor*) # NAGFOR 5.3
+ tmp_sharedflag='-Wl,-shared' ;;
xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
tmp_addflag= ;;
-@@ -17142,6 +17146,8 @@ _LT_EOF
+@@ -22116,6 +22120,8 @@ _LT_EOF
lf95*) # Lahey Fortran 8.1
whole_archive_flag_spec_FC=
tmp_sharedflag='--shared' ;;
-+ nagfor*)
++ nagfor*) # NAGFOR 5.3
+ tmp_sharedflag='-Wl,-shared' ;;
xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
tmp_sharedflag='-qmkshrobj'
diff --git a/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_1.patch b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_1.patch
new file mode 100644
index 0000000000..8fb671093b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_1.patch
@@ -0,0 +1,71 @@
+--- a/confdb/ltmain.sh
++++ b/confdb/ltmain.sh
+@@ -180,6 +180,20 @@ func_basename ()
+ func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+ } # func_basename may be replaced by extended shell implementation
+
++# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
++func_cc_basename ()
++{
++ for cc_temp in $*""; do
++ case $cc_temp in
++ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
++ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
++ \-*) ;;
++ *) break;;
++ esac
++ done
++ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
++}
++
+
+ # func_dirname_and_basename file append nondir_replacement
+ # perform func_basename and func_dirname in a single function
+@@ -6419,6 +6433,13 @@ func_mode_link ()
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
++
++ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
++ esac
++
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+@@ -8001,6 +8022,13 @@ EOF
+ ;;
+ esac
+
++ # Time to revert the changes made for nagfor.
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*)
++ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
++ esac
++
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+--- a/configure
++++ b/configure
+@@ -11614,6 +11614,8 @@ _LT_EOF
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
++ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
++ compiler_needs_object=yes
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+@@ -19246,6 +19248,8 @@ _LT_EOF
+ whole_archive_flag_spec_FC=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
++ whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
++ compiler_needs_object_FC=yes
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
diff --git a/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_2.patch b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_2.patch
new file mode 100644
index 0000000000..871ffe6dd2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.2_2.patch
@@ -0,0 +1,11 @@
+--- a/configure
++++ b/configure
+@@ -22237,6 +22237,8 @@ _LT_EOF
+ whole_archive_flag_spec_F77=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
++ whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
++ compiler_needs_object_F77=yes
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
diff --git a/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.6.patch b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.6.patch
new file mode 100644
index 0000000000..50f73f2dde
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mpich/nag_libtool_2.4.6.patch
@@ -0,0 +1,69 @@
+--- a/confdb/ltmain.sh
++++ b/confdb/ltmain.sh
+@@ -7867,6 +7867,13 @@ func_mode_link ()
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
++
++ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
++ esac
++
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+@@ -8886,7 +8893,8 @@ func_mode_link ()
+ xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ # On Darwin other compilers
+- case $CC in
++ func_cc_basename $CC
++ case $func_cc_basename_result in
+ nagfor*)
+ verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ ;;
+@@ -9498,6 +9506,13 @@ EOF
+ ;;
+ esac
+
++ # Time to revert the changes made for nagfor.
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*)
++ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
++ esac
++
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+--- a/configure
++++ b/configure
+@@ -12583,6 +12583,8 @@ _LT_EOF
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
++ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
++ compiler_needs_object=yes
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+@@ -20684,6 +20686,8 @@ _LT_EOF
+ whole_archive_flag_spec_FC=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
++ whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
++ compiler_needs_object_FC=yes
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+@@ -23958,6 +23962,8 @@ _LT_EOF
+ whole_archive_flag_spec_F77=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
++ whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
++ compiler_needs_object_F77=yes
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
diff --git a/var/spack/repos/builtin/packages/mpich/package.py b/var/spack/repos/builtin/packages/mpich/package.py
index 0980c66818..8360046ab4 100644
--- a/var/spack/repos/builtin/packages/mpich/package.py
+++ b/var/spack/repos/builtin/packages/mpich/package.py
@@ -63,6 +63,9 @@ spack package at this time.''',
)
variant('pci', default=(sys.platform != 'darwin'),
description="Support analyzing devices on PCI bus")
+ variant('libxml2', default=True,
+ description='Use libxml2 for XML support instead of the custom '
+ 'minimalistic implementation')
provides('mpi')
provides('mpi@:3.0', when='@3:')
@@ -86,6 +89,23 @@ spack package at this time.''',
sha256='c7d4ecf865dccff5b764d9c66b6a470d11b0b1a5b4f7ad1ffa61079ad6b5dede',
when='@3.3:3.3.0')
+ # This patch for Libtool 2.4.2 enables shared libraries for NAG and is
+ # applied by MPICH starting version 3.1.
+ patch('nag_libtool_2.4.2_0.patch', when='@:3.0%nag')
+
+ # This patch for Libtool 2.4.2 fixes the problem with '-pthread' flag and
+ # enables convenience libraries for NAG. Starting version 3.1, the order of
+ # checks for FC and F77 is changed, therefore we need to apply the patch in
+ # two steps (the patch files can be merged once the support for versions
+ # 3.1 and older is dropped).
+ patch('nag_libtool_2.4.2_1.patch', when='@:3.1.3%nag')
+ patch('nag_libtool_2.4.2_2.patch', when='@:3.1.3%nag')
+
+ # This patch for Libtool 2.4.6 does the same as the previous two. The
+ # problem is not fixed upstream yet and the upper version constraint is
+ # given just to avoid application of the patch to the develop version.
+ patch('nag_libtool_2.4.6.patch', when='@3.1.4:3.3%nag')
+
depends_on('findutils', type='build')
depends_on('pkgconfig', type='build')
@@ -96,8 +116,14 @@ spack package at this time.''',
depends_on('ucx', when='netmod=ucx')
- depends_on('libpciaccess', when="+pci")
- depends_on('libxml2')
+ # The dependencies on libpciaccess and libxml2 come from the embedded
+ # hwloc, which, before version 3.3, was used only for Hydra.
+ depends_on('libpciaccess', when="@:3.2+hydra+pci")
+ depends_on('libxml2', when='@:3.2+hydra+libxml2')
+
+ # Starting with version 3.3, MPICH uses hwloc directly.
+ depends_on('libpciaccess', when="@3.3:+pci")
+ depends_on('libxml2', when='@3.3:+libxml2')
# Starting with version 3.3, Hydra can use libslurm for nodelist parsing
depends_on('slurm', when='+slurm')
@@ -119,6 +145,12 @@ spack package at this time.''',
conflicts('pmi=pmi2', when='device=ch3 netmod=ofi')
conflicts('pmi=pmix', when='device=ch3')
+ # MPICH does not require libxml2 and libpciaccess for versions before 3.3
+ # when ~hydra is set: prevent users from setting +libxml2 and +pci in this
+ # case to avoid generating an identical MPICH installation.
+ conflicts('+pci', when='@:3.2~hydra')
+ conflicts('+libxml2', when='@:3.2~hydra')
+
def setup_build_environment(self, env):
env.unset('F90')
env.unset('F90FLAGS')
@@ -181,6 +213,7 @@ spack package at this time.''',
def configure_args(self):
spec = self.spec
config_args = [
+ '--disable-silent-rules',
'--enable-shared',
'--with-pm={0}'.format('hydra' if '+hydra' in spec else 'no'),
'--{0}-romio'.format('enable' if '+romio' in spec else 'disable'),
@@ -234,4 +267,11 @@ spack package at this time.''',
config_args.append('--with-ucx={0}'.format(
spec['ucx'].prefix))
+ # In other cases the argument is redundant.
+ if '@:3.2+hydra' in spec or '@3.3:' in spec:
+ # The root configure script passes the argument to the configure
+ # scripts of all instances of hwloc (there are three copies of it:
+ # for hydra, for hydra2, and for MPICH itself).
+ config_args += self.enable_or_disable('libxml2')
+
return config_args
diff --git a/var/spack/repos/builtin/packages/mrcpp/package.py b/var/spack/repos/builtin/packages/mrcpp/package.py
new file mode 100644
index 0000000000..558b145a71
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mrcpp/package.py
@@ -0,0 +1,46 @@
+# Copyright 2013-2020 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 import *
+
+
+class Mrcpp(CMakePackage):
+ """The MultiResolution Computation Program Package (MRCPP) is a general purpose
+ numerical mathematics library based on multiresolution analysis and the
+ multiwavelet basis which provide low-scaling algorithms as well as rigorous
+ error control in numerical computations."""
+
+ homepage = "https://mrcpp.readthedocs.io/en/latest/"
+ url = "https://github.com/MRChemSoft/mrcpp/archive/v1.1.0.tar.gz"
+
+ maintainers = ["robertodr", "stigrj", "ilfreddy"]
+
+ version('1.2.0-alpha2',
+ sha256='8f4df594751a5b7e76b09a62450c6c4956b1974876afa143cc9b5703156ccd40')
+ version('1.1.0',
+ sha256='e9ffb87eccbd45305f822a0b46b875788b70386b3c1d38add6540dc4e0327ab2',
+ preferred=True)
+ version('1.0.2',
+ sha256='d2b26f7d7b16fa67f16788119abc0f6c7562cb37ece9ba075c116463dcf19df3')
+ version('1.0.1',
+ sha256='b4d7120545da3531bc7aa0a4cb4eb579fdbe1f8e5d32b1fd1086976583e3e27c')
+ version('1.0.0',
+ sha256='0858146141d3a60232e8874380390f9e9fa0b1bd6e67099d5833704478213efd')
+
+ variant("openmp", default=True, description="Enable OpenMP support.")
+
+ variant("mpi", default=True, description="Enable MPI support")
+ depends_on("mpi", when="+mpi")
+
+ depends_on("cmake@3.11:", type="build")
+ depends_on("eigen")
+
+ def cmake_args(self):
+ args = [
+ "-DENABLE_OPENMP={0}".format("ON" if "+openmp" in
+ self.spec else "OFF"),
+ "-DENABLE_MPI={0}".format("ON" if "+mpi" in self.spec else "OFF"),
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/mumps/package.py b/var/spack/repos/builtin/packages/mumps/package.py
index a56bc111e2..de34b6aa19 100644
--- a/var/spack/repos/builtin/packages/mumps/package.py
+++ b/var/spack/repos/builtin/packages/mumps/package.py
@@ -241,7 +241,7 @@ class Mumps(Package):
else:
makefile_conf.extend([
'LIBEXT = .a',
- 'AR = ar vr',
+ 'AR = ar vr ',
'RANLIB = ranlib'
])
diff --git a/var/spack/repos/builtin/packages/munge/package.py b/var/spack/repos/builtin/packages/munge/package.py
index 5c10720e77..66d14ec5d7 100644
--- a/var/spack/repos/builtin/packages/munge/package.py
+++ b/var/spack/repos/builtin/packages/munge/package.py
@@ -10,14 +10,28 @@ import os
class Munge(AutotoolsPackage):
""" MUNGE Uid 'N' Gid Emporium """
homepage = "https://code.google.com/p/munge/"
- url = "https://github.com/dun/munge/releases/download/munge-0.5.13/munge-0.5.13.tar.xz"
+ url = "https://github.com/dun/munge/releases/download/munge-0.5.14/munge-0.5.14.tar.xz"
+ maintainers = ['ChristianTackeGSI']
+
+ version('0.5.14', sha256='6606a218f18090fa1f702e3f6fb608073eb6aafed534cf7dd81b67b2e0d30640')
version('0.5.13', sha256='99753dfd06a4f063c36f3fb0eb1964f394feb649937d94c4734d85b7964144da')
version('0.5.12', sha256='e972e3c3e947995a99e023f5758047db16cfe2f0c2c9ca76399dc1511fa71be8')
version('0.5.11', sha256='8e075614f81cb0a6df21a0aafdc825498611a04429d0876f074fc828739351a5',
url='https://github.com/dun/munge/releases/download/munge-0.5.11/munge-0.5.11.tar.bz2')
+ variant('localstatedir', default='PREFIX/var', values=any,
+ description='Set local state path (possibly to /var)')
+
depends_on('openssl')
depends_on('libgcrypt')
+ depends_on('bzip2')
+
+ def configure_args(self):
+ args = []
+ localstatedir = self.spec.variants['localstatedir'].value
+ if localstatedir != 'PREFIX/var':
+ args.append('--localstatedir={0}'.format(localstatedir))
+ return args
def install(self, spec, prefix):
os.makedirs(os.path.join(prefix, "lib/systemd/system"))
diff --git a/var/spack/repos/builtin/packages/mvapich2/package.py b/var/spack/repos/builtin/packages/mvapich2/package.py
index 87e9f77848..f6301a564a 100644
--- a/var/spack/repos/builtin/packages/mvapich2/package.py
+++ b/var/spack/repos/builtin/packages/mvapich2/package.py
@@ -10,10 +10,11 @@ import sys
class Mvapich2(AutotoolsPackage):
"""MVAPICH2 is an MPI implementation for Infiniband networks."""
homepage = "http://mvapich.cse.ohio-state.edu/"
- url = "http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.3.2.tar.gz"
+ url = "http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.3.3.tar.gz"
list_url = "http://mvapich.cse.ohio-state.edu/downloads/"
# Prefer the latest stable release
+ version('2.3.3', sha256='41d3261be57e5bc8aabf4e32981543c015c5443ff032a26f18205985e18c2b73')
version('2.3.2', sha256='30cc0d7bcaa075d204692f76bca4d65a539e0f661c7460ffa9f835d6249e1ebf')
version('2.3.1', sha256='314e12829f75f3ed83cd4779a972572d1787aac6543a3d024ea7c6080e0ee3bf')
version('2.3', sha256='01d5fb592454ddd9ecc17e91c8983b6aea0e7559aa38f410b111c8ef385b50dd')
diff --git a/var/spack/repos/builtin/packages/mxnet/package.py b/var/spack/repos/builtin/packages/mxnet/package.py
index f3b7cddb23..492a2573bc 100644
--- a/var/spack/repos/builtin/packages/mxnet/package.py
+++ b/var/spack/repos/builtin/packages/mxnet/package.py
@@ -13,6 +13,8 @@ class Mxnet(MakefilePackage):
homepage = "http://mxnet.io"
url = "https://github.com/apache/incubator-mxnet/releases/download/1.3.0/apache-mxnet-src-1.3.0-incubating.tar.gz"
+ maintainers = ['adamjstewart']
+
version('1.3.0', sha256='c00d6fbb2947144ce36c835308e603f002c1eb90a9f4c5a62f4d398154eed4d2')
variant('cuda', default=False, description='Enable CUDA support')
diff --git a/var/spack/repos/builtin/packages/ncurses/package.py b/var/spack/repos/builtin/packages/ncurses/package.py
index 7b9b67b939..9df2de49b7 100644
--- a/var/spack/repos/builtin/packages/ncurses/package.py
+++ b/var/spack/repos/builtin/packages/ncurses/package.py
@@ -20,13 +20,14 @@ class Ncurses(AutotoolsPackage, GNUMirrorPackage):
# URL must remain http:// so Spack can bootstrap curl
gnu_mirror_path = "ncurses/ncurses-6.1.tar.gz"
+ version('6.2', sha256='30306e0c76e0f9f1f0de987cf1c82a5c21e1ce6568b9227f7da5b71cbea86c9d')
version('6.1', sha256='aa057eeeb4a14d470101eff4597d5833dcef5965331be3528c08d99cebaa0d17')
version('6.0', sha256='f551c24b30ce8bfb6e96d9f59b42fbea30fa3a6123384172f9e7284bcf647260')
version('5.9', sha256='9046298fb440324c9d4135ecea7879ffed8546dd1b58e59430ea07a4633f563b')
variant('symlinks', default=False,
description='Enables symlinks. Needed on AFS filesystem.')
- variant('termlib', default=False,
+ variant('termlib', default=True,
description='Enables termlib needs for gnutls in emacs.')
depends_on('pkgconfig', type='build')
diff --git a/var/spack/repos/builtin/packages/netcdf-fortran/excessive_linking.patch b/var/spack/repos/builtin/packages/netcdf-fortran/excessive_linking.patch
new file mode 100644
index 0000000000..11e149081a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/netcdf-fortran/excessive_linking.patch
@@ -0,0 +1,312 @@
+--- a/config.h.in
++++ b/config.h.in
+@@ -52,9 +52,6 @@
+ /* Define to 1 if you have the <inttypes.h> header file. */
+ #undef HAVE_INTTYPES_H
+
+-/* Define to 1 if you have the `curl' library (-lcurl). */
+-#undef HAVE_LIBCURL
+-
+ /* Define to 1 if you have the `m' library (-lm). */
+ #undef HAVE_LIBM
+
+--- a/configure
++++ b/configure
+@@ -22122,6 +22122,14 @@ $as_echo "$as_me: checking types, headers, and functions" >&6;}
+
+ # We must check for all these, because they may be used by the netCDF
+ # C library.
++# Removing the checks for some of the libraries because of issues
++# observed when they are detected, are not needed, and an attempt to
++# link against is made anyways.
++# See https://github.com/Unidata/netcdf-fortran/issues/164
++#
++# Specifying LDFLAGS="$(nc-config --libs [--static])" should
++# let downstream developers link more reliably against libnetcdf.
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for floor in -lm" >&5
+ $as_echo_n "checking for floor in -lm... " >&6; }
+ if ${ac_cv_lib_m_floor+:} false; then :
+@@ -22167,163 +22175,6 @@ _ACEOF
+
+ fi
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl_easy_setopt in -lcurl" >&5
+-$as_echo_n "checking for curl_easy_setopt in -lcurl... " >&6; }
+-if ${ac_cv_lib_curl_curl_easy_setopt+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- ac_check_lib_save_LIBS=$LIBS
+-LIBS="-lcurl $LIBS"
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-
+-/* Override any GCC internal prototype to avoid an error.
+- Use char because int might match the return type of a GCC
+- builtin and then its argument prototype would still apply. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char curl_easy_setopt ();
+-int
+-main ()
+-{
+-return curl_easy_setopt ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_link "$LINENO"; then :
+- ac_cv_lib_curl_curl_easy_setopt=yes
+-else
+- ac_cv_lib_curl_curl_easy_setopt=no
+-fi
+-rm -f core conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+-LIBS=$ac_check_lib_save_LIBS
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curl_curl_easy_setopt" >&5
+-$as_echo "$ac_cv_lib_curl_curl_easy_setopt" >&6; }
+-if test "x$ac_cv_lib_curl_curl_easy_setopt" = xyes; then :
+- cat >>confdefs.h <<_ACEOF
+-#define HAVE_LIBCURL 1
+-_ACEOF
+-
+- LIBS="-lcurl $LIBS"
+-
+-fi
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing deflate" >&5
+-$as_echo_n "checking for library containing deflate... " >&6; }
+-if ${ac_cv_search_deflate+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- ac_func_search_save_LIBS=$LIBS
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-
+-/* Override any GCC internal prototype to avoid an error.
+- Use char because int might match the return type of a GCC
+- builtin and then its argument prototype would still apply. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char deflate ();
+-int
+-main ()
+-{
+-return deflate ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-for ac_lib in '' zlibwapi zlibstat zlib zlib1 z; do
+- if test -z "$ac_lib"; then
+- ac_res="none required"
+- else
+- ac_res=-l$ac_lib
+- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+- fi
+- if ac_fn_c_try_link "$LINENO"; then :
+- ac_cv_search_deflate=$ac_res
+-fi
+-rm -f core conftest.err conftest.$ac_objext \
+- conftest$ac_exeext
+- if ${ac_cv_search_deflate+:} false; then :
+- break
+-fi
+-done
+-if ${ac_cv_search_deflate+:} false; then :
+-
+-else
+- ac_cv_search_deflate=no
+-fi
+-rm conftest.$ac_ext
+-LIBS=$ac_func_search_save_LIBS
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_deflate" >&5
+-$as_echo "$ac_cv_search_deflate" >&6; }
+-ac_res=$ac_cv_search_deflate
+-if test "$ac_res" != no; then :
+- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+-
+-fi
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing SZ_Compress" >&5
+-$as_echo_n "checking for library containing SZ_Compress... " >&6; }
+-if ${ac_cv_search_SZ_Compress+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- ac_func_search_save_LIBS=$LIBS
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-
+-/* Override any GCC internal prototype to avoid an error.
+- Use char because int might match the return type of a GCC
+- builtin and then its argument prototype would still apply. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char SZ_Compress ();
+-int
+-main ()
+-{
+-return SZ_Compress ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-for ac_lib in '' szip sz; do
+- if test -z "$ac_lib"; then
+- ac_res="none required"
+- else
+- ac_res=-l$ac_lib
+- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+- fi
+- if ac_fn_c_try_link "$LINENO"; then :
+- ac_cv_search_SZ_Compress=$ac_res
+-fi
+-rm -f core conftest.err conftest.$ac_objext \
+- conftest$ac_exeext
+- if ${ac_cv_search_SZ_Compress+:} false; then :
+- break
+-fi
+-done
+-if ${ac_cv_search_SZ_Compress+:} false; then :
+-
+-else
+- ac_cv_search_SZ_Compress=no
+-fi
+-rm conftest.$ac_ext
+-LIBS=$ac_func_search_save_LIBS
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_SZ_Compress" >&5
+-$as_echo "$ac_cv_search_SZ_Compress" >&6; }
+-ac_res=$ac_cv_search_SZ_Compress
+-if test "$ac_res" != no; then :
+- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+-
+-fi
+-
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
+ $as_echo_n "checking for library containing dlopen... " >&6; }
+ if ${ac_cv_search_dlopen+:} false; then :
+@@ -22380,118 +22231,6 @@ if test "$ac_res" != no; then :
+
+ fi
+
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing H5Fflush" >&5
+-$as_echo_n "checking for library containing H5Fflush... " >&6; }
+-if ${ac_cv_search_H5Fflush+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- ac_func_search_save_LIBS=$LIBS
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-
+-/* Override any GCC internal prototype to avoid an error.
+- Use char because int might match the return type of a GCC
+- builtin and then its argument prototype would still apply. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char H5Fflush ();
+-int
+-main ()
+-{
+-return H5Fflush ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-for ac_lib in '' hdf5dll hdf5; do
+- if test -z "$ac_lib"; then
+- ac_res="none required"
+- else
+- ac_res=-l$ac_lib
+- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+- fi
+- if ac_fn_c_try_link "$LINENO"; then :
+- ac_cv_search_H5Fflush=$ac_res
+-fi
+-rm -f core conftest.err conftest.$ac_objext \
+- conftest$ac_exeext
+- if ${ac_cv_search_H5Fflush+:} false; then :
+- break
+-fi
+-done
+-if ${ac_cv_search_H5Fflush+:} false; then :
+-
+-else
+- ac_cv_search_H5Fflush=no
+-fi
+-rm conftest.$ac_ext
+-LIBS=$ac_func_search_save_LIBS
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_H5Fflush" >&5
+-$as_echo "$ac_cv_search_H5Fflush" >&6; }
+-ac_res=$ac_cv_search_H5Fflush
+-if test "$ac_res" != no; then :
+- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+-
+-fi
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing H5DSis_scale" >&5
+-$as_echo_n "checking for library containing H5DSis_scale... " >&6; }
+-if ${ac_cv_search_H5DSis_scale+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- ac_func_search_save_LIBS=$LIBS
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-
+-/* Override any GCC internal prototype to avoid an error.
+- Use char because int might match the return type of a GCC
+- builtin and then its argument prototype would still apply. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-char H5DSis_scale ();
+-int
+-main ()
+-{
+-return H5DSis_scale ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-for ac_lib in '' hdf5_hldll hdf5_hl; do
+- if test -z "$ac_lib"; then
+- ac_res="none required"
+- else
+- ac_res=-l$ac_lib
+- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+- fi
+- if ac_fn_c_try_link "$LINENO"; then :
+- ac_cv_search_H5DSis_scale=$ac_res
+-fi
+-rm -f core conftest.err conftest.$ac_objext \
+- conftest$ac_exeext
+- if ${ac_cv_search_H5DSis_scale+:} false; then :
+- break
+-fi
+-done
+-if ${ac_cv_search_H5DSis_scale+:} false; then :
+-
+-else
+- ac_cv_search_H5DSis_scale=no
+-fi
+-rm conftest.$ac_ext
+-LIBS=$ac_func_search_save_LIBS
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_H5DSis_scale" >&5
+-$as_echo "$ac_cv_search_H5DSis_scale" >&6; }
+-ac_res=$ac_cv_search_H5DSis_scale
+-if test "$ac_res" != no; then :
+- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+-
+-fi
+-
+
+ # Find the netCDF header and library.
+ for ac_header in netcdf.h
diff --git a/var/spack/repos/builtin/packages/netcdf-fortran/logging.patch b/var/spack/repos/builtin/packages/netcdf-fortran/logging.patch
new file mode 100644
index 0000000000..fadeb8cfe6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/netcdf-fortran/logging.patch
@@ -0,0 +1,13 @@
+--- a/fortran/nf_logging.F90
++++ b/fortran/nf_logging.F90
+@@ -1,3 +1,10 @@
++! This file is compiled only if logging is enabled. However, the macro LOGGING
++! is never defined. For most of the compilers this simply leads to an empty
++! object: they do not complain when a source file is empty. This is not the
++! case for NAG: the compiler fails the compilation of empty sources. To fix
++! this problem, we define the macro here.
++#define LOGGING
++
+ #ifdef LOGGING
+ ! Function to turn on logging
+ !-------------------------------- nf_set_log_level ----------------------------
diff --git a/var/spack/repos/builtin/packages/netcdf-fortran/nag_libtool_2.4.2.patch b/var/spack/repos/builtin/packages/netcdf-fortran/nag_libtool_2.4.2.patch
new file mode 100644
index 0000000000..73fbdbd03b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/netcdf-fortran/nag_libtool_2.4.2.patch
@@ -0,0 +1,124 @@
+--- a/configure
++++ b/configure
+@@ -9584,6 +9584,10 @@ for cc_temp in $compiler""; do
+ esac
+ done
+ cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
++case $cc_basename in
++ nagfor*) ;;
++ *) $cc_temp -V 2>&1 | $GREP '^NAG Fortran Compiler Release' >/dev/null 2>&1 && cc_basename='nagfor-wrapper' ;;
++esac
+
+
+ # Only perform the check for file, if the check method requires it
+@@ -10657,6 +10661,10 @@ _LT_EOF
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
++ nagfor*)
++ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
++ compiler_needs_object=yes
++ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+@@ -13415,6 +13423,10 @@ $RM -r conftest*
+ esac
+ done
+ cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
++case $cc_basename in
++ nagfor*) ;;
++ *) $cc_temp -V 2>&1 | $GREP '^NAG Fortran Compiler Release' >/dev/null 2>&1 && cc_basename='nagfor-wrapper' ;;
++esac
+
+ GCC=$G77
+ if test -n "$compiler"; then
+@@ -14252,6 +14264,10 @@ _LT_EOF
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec_F77=
+ tmp_sharedflag='--shared' ;;
++ nagfor*)
++ whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
++ compiler_needs_object_F77=yes
++ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+@@ -16142,6 +16158,10 @@ $RM -r conftest*
+ esac
+ done
+ cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
++case $cc_basename in
++ nagfor*) ;;
++ *) $cc_temp -V 2>&1 | $GREP '^NAG Fortran Compiler Release' >/dev/null 2>&1 && cc_basename='nagfor-wrapper' ;;
++esac
+
+
+ if test -n "$compiler"; then
+@@ -17142,6 +17162,10 @@ _LT_EOF
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec_FC=
+ tmp_sharedflag='--shared' ;;
++ nagfor*)
++ whole_archive_flag_spec_FC='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
++ compiler_needs_object_FC=yes
++ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+--- a/ltmain.sh
++++ b/ltmain.sh
+@@ -180,6 +180,24 @@ func_basename ()
+ func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+ } # func_basename may be replaced by extended shell implementation
+
++# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
++func_cc_basename ()
++{
++ for cc_temp in $*""; do
++ case $cc_temp in
++ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
++ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
++ \-*) ;;
++ *) break;;
++ esac
++ done
++ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
++ case $func_cc_basename_result in
++ nagfor*) ;;
++ *) $cc_temp -V 2>&1 | $GREP '^NAG Fortran Compiler Release' >/dev/null 2>&1 && func_cc_basename_result='nagfor-wrapper' ;;
++ esac
++}
++
+
+ # func_dirname_and_basename file append nondir_replacement
+ # perform func_basename and func_dirname in a single function
+@@ -6422,6 +6440,13 @@ func_mode_link ()
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
++
++ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
++ esac
++
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+@@ -8007,6 +8032,14 @@ EOF
+ ;;
+ esac
+
++ # Time to revert the changes made for nagfor.
++
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*)
++ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
++ esac
++
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
diff --git a/var/spack/repos/builtin/packages/netcdf-fortran/nag_libtool_2.4.6.patch b/var/spack/repos/builtin/packages/netcdf-fortran/nag_libtool_2.4.6.patch
new file mode 100644
index 0000000000..dfb47fd5f2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/netcdf-fortran/nag_libtool_2.4.6.patch
@@ -0,0 +1,96 @@
+--- a/configure
++++ b/configure
+@@ -9034,6 +9034,12 @@ func_cc_basename ()
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
++
++ # Set result to 'nagfor-wrapper' when NAG compiler is called via a wrapper (e.g. mpif90).
++ case $func_cc_basename_result in
++ nagfor*) ;;
++ *) $cc_temp -V 2>&1 | $GREP '^NAG Fortran Compiler Release' >/dev/null 2>&1 && func_cc_basename_result='nagfor-wrapper' ;;
++ esac
+ }
+
+ # Check whether --enable-libtool-lock was given.
+@@ -11811,6 +11817,8 @@ _LT_EOF
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
++ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
++ compiler_needs_object=yes
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+@@ -15663,6 +15671,8 @@ _LT_EOF
+ whole_archive_flag_spec_F77=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
++ whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
++ compiler_needs_object_F77=yes
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+@@ -18788,6 +18798,8 @@ _LT_EOF
+ whole_archive_flag_spec_FC=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
++ whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
++ compiler_needs_object_FC=yes
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+@@ -26086,6 +26098,12 @@ func_cc_basename ()
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
++
++ # Set result to 'nagfor-wrapper' when NAG compiler is called via a wrapper (e.g. mpif90).
++ case $func_cc_basename_result in
++ nagfor*) ;;
++ *) $cc_temp -V 2>&1 | $GREP '^NAG Fortran Compiler Release' >/dev/null 2>&1 && func_cc_basename_result='nagfor-wrapper' ;;
++ esac
+ }
+
+
+--- a/ltmain.sh
++++ b/ltmain.sh
+@@ -7868,6 +7868,13 @@ func_mode_link ()
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
++
++ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
++ esac
++
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+@@ -8890,7 +8897,8 @@ func_mode_link ()
+ xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ # On Darwin other compilers
+- case $CC in
++ func_cc_basename $CC
++ case $func_cc_basename_result in
+ nagfor*)
+ verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ ;;
+@@ -9502,6 +9510,14 @@ EOF
+ ;;
+ esac
+
++ # Time to revert the changes made for nagfor.
++
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*)
++ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
++ esac
++
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
diff --git a/var/spack/repos/builtin/packages/netcdf-fortran/nag_testing.patch b/var/spack/repos/builtin/packages/netcdf-fortran/nag_testing.patch
new file mode 100644
index 0000000000..4c730f94c8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/netcdf-fortran/nag_testing.patch
@@ -0,0 +1,11 @@
+--- a/nf_test/ftst_rengrps.F
++++ b/nf_test/ftst_rengrps.F
+@@ -11,7 +11,7 @@ C use typeSizes
+ C use netcdf
+ C use netcdf4_f03
+ implicit none
+- include "netcdf.inc"
++ include "netcdf.inc"
+
+ C This is the name of the data file we will create.
+ character (len = *), parameter :: FILE_NAME = "ftst_rengrps.nc"
diff --git a/var/spack/repos/builtin/packages/netcdf-fortran/package.py b/var/spack/repos/builtin/packages/netcdf-fortran/package.py
index e3703fd609..5aed9697cd 100644
--- a/var/spack/repos/builtin/packages/netcdf-fortran/package.py
+++ b/var/spack/repos/builtin/packages/netcdf-fortran/package.py
@@ -13,7 +13,9 @@ class NetcdfFortran(AutotoolsPackage):
distribution."""
homepage = "https://www.unidata.ucar.edu/software/netcdf"
- url = "https://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-fortran-4.5.2.tar.gz"
+ url = "https://www.gfd-dennou.org/arch/netcdf/unidata-mirror/netcdf-fortran-4.5.2.tar.gz"
+
+ maintainers = ['skosukhin']
version('4.5.2', sha256='b959937d7d9045184e9d2040a915d94a7f4d0185f4a9dceb8f08c94b0c3304aa')
version('4.4.5', sha256='2467536ce29daea348c736476aa8e684c075d2f6cab12f3361885cb6905717b8')
@@ -24,6 +26,7 @@ class NetcdfFortran(AutotoolsPackage):
description='Enable parallel I/O for netcdf-4')
variant('pic', default=True,
description='Produce position-independent code (for shared libs)')
+ variant('shared', default=True, description='Enable shared library')
# We need to build with MPI wrappers if parallel I/O features is enabled:
# https://www.unidata.ucar.edu/software/netcdf/docs/building_netcdf_fortran.html
@@ -34,42 +37,79 @@ class NetcdfFortran(AutotoolsPackage):
# The default libtool.m4 is too old to handle NAG compiler properly:
# https://github.com/Unidata/netcdf-fortran/issues/94
- patch('nag.patch', when='@:4.4.4%nag')
+ # Moreover, Libtool can't handle '-pthread' flag coming from libcurl,
+ # doesn't inject convenience libraries into the shared ones, and is unable
+ # to detect NAG when it is called with an MPI wrapper.
+ patch('nag_libtool_2.4.2.patch', when='@:4.4.4%nag')
+ patch('nag_libtool_2.4.6.patch', when='@4.4.5:%nag')
+
+ # Enable 'make check' for NAG, which is too strict.
+ patch('nag_testing.patch', when='@4.4.5%nag')
+
+ # File fortran/nf_logging.F90 is compiled without -DLOGGING, which leads
+ # to missing symbols in the library. Additionally, the patch enables
+ # building with NAG, which refuses to compile empty source files (see also
+ # comments in the patch):
+ patch('logging.patch', when='@:4.4.5')
+
+ # Prevent excessive linking to system libraries. Without this patch the
+ # library might get linked to the system installation of libcurl. See
+ # https://github.com/Unidata/netcdf-fortran/commit/0a11f580faebbc1c4dce68bf5135709d1c7c7cc1#diff-67e997bcfdac55191033d57a16d1408a
+ patch('excessive_linking.patch', when='@4.4.5')
# Parallel builds do not work in the fortran directory. This patch is
# derived from https://github.com/Unidata/netcdf-fortran/pull/211
patch('no_parallel_build.patch', when='@4.5.2')
def flag_handler(self, name, flags):
+ config_flags = None
+
if name in ['cflags', 'fflags'] and '+pic' in self.spec:
- flags.append(self.compiler.pic_flag)
+ # Unlike NetCDF-C, we add PIC flag only when +pic. Adding the
+ # flags also when ~shared would make it impossible to build a
+ # static-only version of the library with NAG.
+ config_flags = [self.compiler.pic_flag]
elif name == 'cppflags':
- flags.append(self.spec['netcdf-c'].headers.cpp_flags)
+ config_flags = [self.spec['netcdf-c'].headers.cpp_flags]
elif name == 'ldflags':
# We need to specify LDFLAGS to get correct dependency_libs
# in libnetcdff.la, so packages that use libtool for linking
# could correctly link to all the dependencies even when the
# building takes place outside of Spack environment, i.e.
# without Spack's compiler wrappers.
- flags.append(self.spec['netcdf-c'].libs.search_flags)
+ config_flags = [self.spec['netcdf-c'].libs.search_flags]
- return None, None, flags
+ return flags, None, config_flags
@property
def libs(self):
libraries = ['libnetcdff']
- # This package installs both shared and static libraries. Permit
- # clients to query which one they want.
query_parameters = self.spec.last_query.extra_parameters
- shared = 'shared' in query_parameters
- return find_libraries(
+ if 'shared' in query_parameters:
+ shared = True
+ elif 'static' in query_parameters:
+ shared = False
+ else:
+ shared = '+shared' in self.spec
+
+ libs = find_libraries(
libraries, root=self.prefix, shared=shared, recursive=True
)
+ if libs:
+ return libs
+
+ msg = 'Unable to recursively locate {0} {1} libraries in {2}'
+ raise spack.error.NoLibrariesError(
+ msg.format('shared' if shared else 'static',
+ self.spec.name,
+ self.spec.prefix))
+
def configure_args(self):
- config_args = []
+ config_args = self.enable_or_disable('shared')
+ config_args.append('--enable-static')
if '+mpi' in self.spec:
config_args.append('CC=%s' % self.spec['mpi'].mpicc)
@@ -77,3 +117,8 @@ class NetcdfFortran(AutotoolsPackage):
config_args.append('F77=%s' % self.spec['mpi'].mpif77)
return config_args
+
+ @when('@:4.4.5')
+ def check(self):
+ with working_dir(self.build_directory):
+ make('check', parallel=False)
diff --git a/var/spack/repos/builtin/packages/nfs-utils/package.py b/var/spack/repos/builtin/packages/nfs-utils/package.py
new file mode 100644
index 0000000000..be46c57030
--- /dev/null
+++ b/var/spack/repos/builtin/packages/nfs-utils/package.py
@@ -0,0 +1,34 @@
+# Copyright 2013-2020 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 import *
+
+
+class NfsUtils(AutotoolsPackage):
+ """The NFS Utilities package contains the userspace server and client tools
+ necessary to use the kernel's NFS abilities. NFS is a protocol that allows
+ sharing file systems over the network."""
+
+ homepage = "http://linux-nfs.org/"
+ url = "https://sourceforge.net/projects/nfs/files/nfs-utils/2.4.2/nfs-utils-2.4.2.tar.gz/download"
+
+ version('2.4.2', sha256='bb08106cd7bd397c6cc34e2461bc7818a664450d2805da08b07e1ced88e5155f')
+ version('2.4.1', sha256='c0dda96318af554881f4eb1590bfe91f1aba2fba59ed2ac3ba099f80fdf838e9')
+ version('2.3.4', sha256='36e70b0a583751ead0034ebe5d8826caf2dcc7ee7c0beefe94d6ee5a3b0b2484')
+
+ depends_on('libtirpc')
+ depends_on('libevent')
+ depends_on('libdmx')
+ depends_on('lvm2')
+ depends_on('keyutils')
+ depends_on('sqlite')
+ depends_on('util-linux')
+
+ def setup_build_environment(self, env):
+ env.append_flags('LDFLAGS', '-lintl')
+
+ def configure_args(self):
+ args = ['--disable-gss', '--with-rpcgen=internal']
+ return args
diff --git a/var/spack/repos/builtin/packages/nlopt/package.py b/var/spack/repos/builtin/packages/nlopt/package.py
index c533bf60e8..509218ea83 100644
--- a/var/spack/repos/builtin/packages/nlopt/package.py
+++ b/var/spack/repos/builtin/packages/nlopt/package.py
@@ -17,6 +17,7 @@ class Nlopt(CMakePackage):
git = "https://github.com/stevengj/nlopt.git"
version('master', branch='master')
+ version('2.6.1', sha256='66d63a505187fb6f98642703bd0ef006fedcae2f9a6d1efa4f362ea919a02650')
version('2.5.0', sha256='c6dd7a5701fff8ad5ebb45a3dc8e757e61d52658de3918e38bab233e7fd3b4ae')
variant('shared', default=True, description='Enables the build of shared libraries')
diff --git a/var/spack/repos/builtin/packages/ntirpc/package.py b/var/spack/repos/builtin/packages/ntirpc/package.py
new file mode 100644
index 0000000000..fa29056e16
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ntirpc/package.py
@@ -0,0 +1,22 @@
+# Copyright 2013-2020 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 import *
+
+
+class Ntirpc(CMakePackage):
+ """New development on tirpc"""
+
+ homepage = "https://github.com/nfs-ganesha/ntirpc"
+ url = "https://github.com/nfs-ganesha/ntirpc/archive/v3.2.tar.gz"
+
+ version('3.2', sha256='db1639ca2f15df7e30d8c0a820ed9adf4eb623798db03b56a3659eedff49af76')
+ version('3.1', sha256='280b57db3a37c5b05116a7850460152b1ac53c050fd61ce190f5a5eb55ed3ba1')
+ version('3.0', sha256='9a6b11c1aa3e7f5f1f491bca0275e759de5bed2d73c8a028af7b6aadb68ac795')
+ version('1.8.0', sha256='3bb642dccc8f2506b57a03b5d3358654f59f47b33fddfaa5a7330df4cf336f9f')
+ version('1.7.3', sha256='8713ef095efc44df426bbd2b260ad457e5335bf3008fb97f01b0775c8042e54b')
+
+ depends_on('libnsl')
+ depends_on('userspace-rcu')
diff --git a/var/spack/repos/builtin/packages/ocaml/package.py b/var/spack/repos/builtin/packages/ocaml/package.py
index 34ff99eb93..f155c55c13 100644
--- a/var/spack/repos/builtin/packages/ocaml/package.py
+++ b/var/spack/repos/builtin/packages/ocaml/package.py
@@ -13,11 +13,22 @@ class Ocaml(Package):
homepage = "http://ocaml.org/"
url = "https://caml.inria.fr/pub/distrib/ocaml-4.06/ocaml-4.06.0.tar.gz"
+ maintainers = ['scemama']
+
+ version('4.10.0', sha256='58d431dde66f5750ebe9b15d5a1c4872f80d283dec23448689b0d1a498b7e4c7')
+ version('4.09.0', sha256='2b728f8a0e90da14f22fdc04660f2ab33819cdbb12bff0ceae3fdbb0133cf7a6')
+ version('4.08.1', sha256='ee50118ee88472fd4b64311fa560f8f8ab66a1899f0117815c69a16070980f78')
+ version('4.08.0', sha256='e6e244f893f2070ebcdeac0637fbe2054fd82deebefefa3e3ed85a405cd4ecd8')
+ version('4.07.1', sha256='2ad43be17ed5c74ea27887ae0cc4793b835408180c0b9175bc9ad53082a59af4')
+ version('4.07.0', sha256='50e10b0c4e28300cb889e56839ec9e07e2847a85e04bfbd5a7ed0290b7239ef8')
+ version('4.06.1', sha256='0c38c6f531103e87fab1c218a7e76287d7cb4d7ee4dea64e7f85952af3b1b50e')
version('4.06.0', sha256='c17578e243c4b889fe53a104d8927eb8749c7be2e6b622db8b3c7b386723bf50')
version('4.03.0', sha256='7fdf280cc6c0a2de4fc9891d0bf4633ea417046ece619f011fd44540fcfc8da2')
depends_on('ncurses')
+ sanity_check_file = ['bin/ocaml']
+
def url_for_version(self, version):
url = "http://caml.inria.fr/pub/distrib/ocaml-{0}/ocaml-{1}.tar.gz"
return url.format(str(version)[:-2], version)
diff --git a/var/spack/repos/builtin/packages/opam/package.py b/var/spack/repos/builtin/packages/opam/package.py
index 179fad0bd9..d25999f89e 100644
--- a/var/spack/repos/builtin/packages/opam/package.py
+++ b/var/spack/repos/builtin/packages/opam/package.py
@@ -16,14 +16,35 @@ class Opam(AutotoolsPackage):
homepage = "https://opam.ocaml.org/"
url = "https://github.com/ocaml/opam/releases/download/1.2.2/opam-full-1.2.2.tar.gz"
+ maintainers = ['scemama']
+
+ version('2.0.6', sha256='7c4bff5e5f3628ad00c53ee1b044ced8128ffdcfbb7582f8773fb433e12e07f4')
+ version('2.0.5', sha256='776c7e64d6e24c2ef1efd1e6a71d36e007645efae94eaf860c05c1929effc76f')
+ version('2.0.4', sha256='debfb828b400fb511ca290f1bfc928db91cad74ec1ccbddcfdbfeff26f7099e5')
+ version('2.0.3', sha256='0589da4da184584a5445d59385009536534f60bc0e27772245b2f49e5fa8f0e2')
+ version('2.0.2', sha256='eeb99fdda4b10ad3467a700fa4d1dfedb30714837d18d2faf1ef9c87d94cf0bc')
+ version('2.0.1', sha256='81f7f1b661a0c1e04642fe02d0bea5524b32aa2cbed0ecf9b18d7145324ed97c')
+ version('2.0.0', sha256='9dad4fcb4f53878c9daa6285d8456ccc671e21bfa71544d1f926fb8a63bfed25')
version('1.2.2', sha256='15e617179251041f4bf3910257bbb8398db987d863dd3cfc288bdd958de58f00')
version('1.2.1', sha256='f210ece7a2def34b486c9ccfb75de8febd64487b2ea4a14a7fa0358f37eacc3b')
- depends_on('ocaml') # Not a strict dependency, but recommended
+ # OCaml 4.10.0 has removed the -safe-string flag, which is necessary
+ # for OPAM 1i (see docstring of setup_build_environment).
+ depends_on('ocaml@:4.09.0', type='build', when='@:1.2.2')
+ depends_on('ocaml', type='build', when='@2.0.0:')
parallel = False
+ sanity_check_is_file = ['bin/opam']
+
+ @when('@:1.2.2')
def setup_build_environment(self, env):
+ ''' In OCaml <4.06.1, the default was -safe-string=0, and this has
+ changed in OCaml >=4.06.1. OPAM version 1 was written before 4.06.1
+ was released, so OPAM <2.0 assumes mutable strings and requires the
+ safe-string=0 flag. This is not true with OPAM >=2.0, so the flag
+ should not be set.'''
+
# Environment variable setting taken from
# https://github.com/Homebrew/homebrew-core/blob/master/Formula/opam.rb
env.set('OCAMLPARAM', 'safe-string=0,_') # OCaml 4.06.0 compat
@@ -31,4 +52,5 @@ class Opam(AutotoolsPackage):
def build(self, spec, prefix):
make('lib-ext')
make()
- make('man')
+ if spec.satisfies('@:1.2.2'):
+ make('man')
diff --git a/var/spack/repos/builtin/packages/openblas/lapack-0.3.9-xerbl.patch b/var/spack/repos/builtin/packages/openblas/lapack-0.3.9-xerbl.patch
new file mode 100644
index 0000000000..a61f3b3c00
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openblas/lapack-0.3.9-xerbl.patch
@@ -0,0 +1,14 @@
+diff --git a/lapack-netlib/SRC/sorhr_col.f b/lapack-netlib/SRC/sorhr_col.f
+index 38976245..600c19fb 100644
+--- a/lapack-netlib/SRC/sorhr_col.f
++++ b/lapack-netlib/SRC/sorhr_col.f
+@@ -282,7 +282,8 @@
+ $ NPLUSONE
+ * ..
+ * .. External Subroutines ..
+- EXTERNAL SCOPY, SLAORHR_COL_GETRFNP, SSCAL, STRSM, XERBLA
++ EXTERNAL SCOPY, SLAORHR_COL_GETRFNP, SSCAL, STRSM,
++ $ XERBLA
+ * ..
+ * .. Intrinsic Functions ..
+ INTRINSIC MAX, MIN
diff --git a/var/spack/repos/builtin/packages/openblas/package.py b/var/spack/repos/builtin/packages/openblas/package.py
index 0ad58605c4..71d2ec4a6b 100644
--- a/var/spack/repos/builtin/packages/openblas/package.py
+++ b/var/spack/repos/builtin/packages/openblas/package.py
@@ -18,6 +18,7 @@ class Openblas(MakefilePackage):
git = 'https://github.com/xianyi/OpenBLAS.git'
version('develop', branch='develop')
+ version('0.3.9', sha256='17d4677264dfbc4433e97076220adc79b050e4f8a083ea3f853a53af253bc380')
version('0.3.8', sha256='8f86ade36f0dbed9ac90eb62575137388359d97d8f93093b38abe166ad7ef3a8')
version('0.3.7', sha256='bde136122cef3dd6efe2de1c6f65c10955bbb0cc01a520c2342f5287c28f9379')
version('0.3.6', sha256='e64c8fe083832ffbc1459ab6c72f71d53afd3b36e8497c922a15a06b72e9002f')
@@ -37,7 +38,7 @@ class Openblas(MakefilePackage):
variant('ilp64', default=False, description='Force 64-bit Fortran native integers')
variant('pic', default=True, description='Build position independent code')
variant('shared', default=True, description='Build shared libraries')
- variant('consistentFPCSR', default=False, description='Synchronize FP CSR between threads (x86/x86_64 only)')
+ variant('consistent_fpcsr', default=False, description='Synchronize FP CSR between threads (x86/x86_64 only)')
variant(
'threads', default='none',
@@ -59,6 +60,8 @@ class Openblas(MakefilePackage):
patch('openblas_icc_openmp.patch', when='@:0.2.20%intel@16.0:')
patch('openblas_icc_fortran.patch', when='%intel@16.0:')
patch('openblas_icc_fortran2.patch', when='%intel@18.0:')
+ # See https://github.com/spack/spack/issues/15385
+ patch('lapack-0.3.9-xerbl.patch', when='@0.3.8: %intel')
# Fixes compilation error on POWER8 with GCC 7
# https://github.com/xianyi/OpenBLAS/pull/1098
@@ -93,7 +96,10 @@ class Openblas(MakefilePackage):
# Add conditions to f_check to determine the Fujitsu compiler
patch('openblas_fujitsu.patch', when='%fj')
+ # See https://github.com/spack/spack/issues/3036
conflicts('%intel@16', when='@0.2.15:0.2.19')
+ conflicts('+consistent_fpcsr', when='threads=none',
+ msg='FPCSR consistency only applies to multithreading')
@property
def parallel(self):
@@ -136,12 +142,23 @@ class Openblas(MakefilePackage):
return micros
- @staticmethod
- def _microarch_target_args(microarch, available_targets):
+ def _microarch_target_args(self):
"""Given a spack microarchitecture and a list of targets found in
OpenBLAS' TargetList.txt, determine the best command-line arguments.
"""
- args = [] # Return value
+ # Read available openblas targets
+ targetlist_name = join_path(self.stage.source_path, "TargetList.txt")
+ if os.path.exists(targetlist_name):
+ with open(targetlist_name) as f:
+ available_targets = self._read_targets(f)
+ else:
+ available_targets = []
+
+ # Get our build microarchitecture
+ microarch = self.spec.target
+
+ # List of arguments returned by this function
+ args = []
# List of available architectures, and possible aliases
openblas_arch = set(['alpha', 'arm', 'ia64', 'mips', 'mips64',
@@ -165,11 +182,14 @@ class Openblas(MakefilePackage):
if microarch.name in available_targets:
break
- arch_name = microarch.family.name
- if arch_name in openblas_arch:
- # Apply possible spack->openblas arch name mapping
- arch_name = openblas_arch_map.get(arch_name, arch_name)
- args.append('ARCH=' + arch_name)
+ if self.version >= Version("0.3"):
+ # 'ARCH' argument causes build errors in older OpenBLAS
+ # see https://github.com/spack/spack/issues/15385
+ arch_name = microarch.family.name
+ if arch_name in openblas_arch:
+ # Apply possible spack->openblas arch name mapping
+ arch_name = openblas_arch_map.get(arch_name, arch_name)
+ args.append('ARCH=' + arch_name)
if microarch.vendor == 'generic':
# User requested a generic platform, or we couldn't find a good
@@ -189,8 +209,6 @@ class Openblas(MakefilePackage):
@property
def make_defs(self):
- spec = self.spec
-
# Configure fails to pick up fortran from FC=/abs/path/to/fc, but
# works fine with FC=/abs/path/to/gfortran.
# When mixing compilers make sure that
@@ -208,13 +226,7 @@ class Openblas(MakefilePackage):
make_defs.append('MAKE_NB_JOBS=0') # flag provided by OpenBLAS
# Add target and architecture flags
- targetlist_name = join_path(self.stage.source_path, "TargetList.txt")
- if os.path.exists(targetlist_name):
- with open(targetlist_name) as f:
- avail_targets = self._read_targets(f)
- else:
- avail_targets = []
- make_defs += self._microarch_target_args(spec.target, avail_targets)
+ make_defs += self._microarch_target_args()
if '~shared' in self.spec:
if '+pic' in self.spec:
@@ -241,7 +253,7 @@ class Openblas(MakefilePackage):
# Synchronize floating-point control and status register (FPCSR)
# between threads (x86/x86_64 only).
- if '+consistentFPCSR' in self.spec:
+ if '+consistent_fpcsr' in self.spec:
make_defs += ['CONSISTENT_FPCSR=1']
# Prevent errors in `as` assembler from newer instructions
diff --git a/var/spack/repos/builtin/packages/opencv/package.py b/var/spack/repos/builtin/packages/opencv/package.py
index 95abf6368a..7adacd1eef 100644
--- a/var/spack/repos/builtin/packages/opencv/package.py
+++ b/var/spack/repos/builtin/packages/opencv/package.py
@@ -105,8 +105,7 @@ class Opencv(CMakePackage, CudaPackage):
# the current development branch of OpenCV. See #8461 for more information.
patch('dnn_cuda.patch', when='@3.3.0:3.4.1+cuda+dnn')
- depends_on('eigen~mpfr', when='+eigen', type='build')
-
+ depends_on('eigen', when='+eigen')
depends_on('zlib', when='+zlib')
depends_on('libpng', when='+png')
depends_on('jpeg', when='+jpeg')
diff --git a/var/spack/repos/builtin/packages/openfoam/package.py b/var/spack/repos/builtin/packages/openfoam/package.py
index f741db61d9..72fd615805 100644
--- a/var/spack/repos/builtin/packages/openfoam/package.py
+++ b/var/spack/repos/builtin/packages/openfoam/package.py
@@ -825,10 +825,12 @@ class OpenfoamArch(object):
self.arch_option = '-march=knl'
# spec.architecture.platform is like `uname -s`, but lower-case
- platform = spec.architecture.platform
+ platform = str(spec.architecture.platform)
# spec.target.family is like `uname -m`
- target = spec.target.family
+ target = str(spec.target.family)
+
+ # No spack platform family for ia64 or armv7l
if platform == 'linux':
if target == 'x86_64':
diff --git a/var/spack/repos/builtin/packages/openmpi/nag_ltmain_1.patch b/var/spack/repos/builtin/packages/openmpi/nag_ltmain_1.patch
new file mode 100644
index 0000000000..3d20169718
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openmpi/nag_ltmain_1.patch
@@ -0,0 +1,49 @@
+--- a/config/ltmain.sh
++++ b/config/ltmain.sh
+@@ -7860,14 +7860,15 @@ func_mode_link ()
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+- # and "-pthread" to "-Wl,-pthread" if NAG compiler
+ if test -n "$inherited_linker_flags"; then
+- case "$CC" in
+- *nagfor*)
+- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g' | $SED 's/-pthread/-Wl,-pthread/g'`;;
+- *)
+- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`;;
+- esac
++ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
++
++ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
++ esac
++
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+@@ -8887,7 +8888,8 @@ func_mode_link ()
+ xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ # On Darwin other compilers
+- case $CC in
++ func_cc_basename $CC
++ case $func_cc_basename_result in
+ nagfor*)
+ verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ ;;
+@@ -9499,6 +9501,13 @@ EOF
+ ;;
+ esac
+
++ # Time to revert the changes made for nagfor.
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*)
++ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
++ esac
++
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
diff --git a/var/spack/repos/builtin/packages/openmpi/nag_ltmain_2.patch b/var/spack/repos/builtin/packages/openmpi/nag_ltmain_2.patch
new file mode 100644
index 0000000000..af1b600039
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openmpi/nag_ltmain_2.patch
@@ -0,0 +1,49 @@
+--- a/config/ltmain.sh
++++ b/config/ltmain.sh
+@@ -7860,14 +7860,15 @@ func_mode_link ()
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+- # and "-pthread" to "-Wl,-pthread" if NAG compiler
+ if test -n "$inherited_linker_flags"; then
+- case "$CC" in
+- nagfor*)
+- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g' | $SED 's/-pthread/-Wl,-pthread/g'`;;
+- *)
+- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`;;
+- esac
++ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
++
++ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
++ esac
++
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+@@ -8887,7 +8888,8 @@ func_mode_link ()
+ xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ # On Darwin other compilers
+- case $CC in
++ func_cc_basename $CC
++ case $func_cc_basename_result in
+ nagfor*)
+ verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ ;;
+@@ -9499,6 +9501,13 @@ EOF
+ ;;
+ esac
+
++ # Time to revert the changes made for nagfor.
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*)
++ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
++ esac
++
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
diff --git a/var/spack/repos/builtin/packages/openmpi/nag_ltmain_3.patch b/var/spack/repos/builtin/packages/openmpi/nag_ltmain_3.patch
new file mode 100644
index 0000000000..0d4250001a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openmpi/nag_ltmain_3.patch
@@ -0,0 +1,40 @@
+--- a/config/ltmain.sh
++++ b/config/ltmain.sh
+@@ -7862,6 +7862,13 @@ func_mode_link ()
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
++
++ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
++ esac
++
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+@@ -8881,7 +8888,8 @@ func_mode_link ()
+ xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ # On Darwin other compilers
+- case $CC in
++ func_cc_basename $CC
++ case $func_cc_basename_result in
+ nagfor*)
+ verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ ;;
+@@ -9493,6 +9501,13 @@ EOF
+ ;;
+ esac
+
++ # Time to revert the changes made for nagfor.
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*)
++ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
++ esac
++
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
diff --git a/var/spack/repos/builtin/packages/openmpi/nag_ltmain_4.patch b/var/spack/repos/builtin/packages/openmpi/nag_ltmain_4.patch
new file mode 100644
index 0000000000..82bdb9f752
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openmpi/nag_ltmain_4.patch
@@ -0,0 +1,49 @@
+--- a/config/ltmain.sh
++++ b/config/ltmain.sh
+@@ -7860,14 +7860,15 @@ func_mode_link ()
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+- # and "-pthread" to "-Wl,-pthread" if NAG compiler
+ if test -n "$inherited_linker_flags"; then
+- case "$CC" in
+- nagfor*)
+- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g' | $SED 's/-pthread/-Wl,-pthread'`;;
+- *)
+- tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`;;
+- esac
++ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
++
++ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
++ esac
++
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+@@ -8887,7 +8888,8 @@ func_mode_link ()
+ xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ # On Darwin other compilers
+- case $CC in
++ func_cc_basename $CC
++ case $func_cc_basename_result in
+ nagfor*)
+ verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ ;;
+@@ -9499,6 +9501,13 @@ EOF
+ ;;
+ esac
+
++ # Time to revert the changes made for nagfor.
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*)
++ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
++ esac
++
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
diff --git a/var/spack/repos/builtin/packages/openmpi/nolegacylaunchers.sh b/var/spack/repos/builtin/packages/openmpi/nolegacylaunchers.sh
index b6defd69f0..61ee50c53d 100755
--- a/var/spack/repos/builtin/packages/openmpi/nolegacylaunchers.sh
+++ b/var/spack/repos/builtin/packages/openmpi/nolegacylaunchers.sh
@@ -3,7 +3,7 @@ echo "This version of Spack (openmpi ~legacylaunchers schedulers=slurm) "
echo "is installed without the mpiexec/mpirun commands to prevent "
echo "unintended performance issues. See https://github.com/spack/spack/pull/10340 "
echo "for more details."
-echo "If you understand the potential consequences of a misconfigured `mpirun`, you can"
-echo "use spack to install `openmpi+legacylaunchers` to restore the executables."
-echo "Otherwise, use `srun` to launch your MPI executables."
+echo "If you understand the potential consequences of a misconfigured mpirun, you can"
+echo "use spack to install 'openmpi+legacylaunchers' to restore the executables."
+echo "Otherwise, use srun to launch your MPI executables."
exit 2
diff --git a/var/spack/repos/builtin/packages/openmpi/package.py b/var/spack/repos/builtin/packages/openmpi/package.py
index aac0c4c60b..a2b75bd67e 100644
--- a/var/spack/repos/builtin/packages/openmpi/package.py
+++ b/var/spack/repos/builtin/packages/openmpi/package.py
@@ -80,9 +80,10 @@ class Openmpi(AutotoolsPackage):
version('develop', branch='master')
# Current
- version('4.0.2', sha256='900bf751be72eccf06de9d186f7b1c4b5c2fa9fa66458e53b77778dffdfe4057') # libmpi.so.40.20.2
+ version('4.0.3', sha256='1402feced8c3847b3ab8252165b90f7d1fa28c23b6b2ca4632b6e4971267fd03') # libmpi.so.40.20.3
# Still supported
+ version('4.0.2', sha256='900bf751be72eccf06de9d186f7b1c4b5c2fa9fa66458e53b77778dffdfe4057') # libmpi.so.40.20.2
version('4.0.1', sha256='cce7b6d20522849301727f81282201d609553103ac0b09162cf28d102efb9709') # libmpi.so.40.20.1
version('4.0.0', sha256='2f0b8a36cfeb7354b45dda3c5425ef8393c9b04115570b615213faaa3f97366b') # libmpi.so.40.20.0
version('3.1.5', preferred=True, sha256='fbf0075b4579685eec8d56d34d4d9c963e6667825548554f5bf308610af72133') # libmpi.so.40.10.4
@@ -193,7 +194,7 @@ class Openmpi(AutotoolsPackage):
patch('llnl-platforms.patch', when="@1.6.5")
patch('configure.patch', when="@1.10.1")
patch('fix_multidef_pmi_class.patch', when="@2.0.0:2.0.1")
- patch('fix-ucx-1.7.0-api-instability.patch', when='@4.0.0:4.0.3')
+ patch('fix-ucx-1.7.0-api-instability.patch', when='@4.0.0:4.0.2')
# Vader Bug: https://github.com/open-mpi/ompi/issues/5375
# Haven't release fix for 2.1.x
@@ -203,6 +204,13 @@ class Openmpi(AutotoolsPackage):
patch('btl_vader.patch', when='@3.0.1:3.0.2')
patch('btl_vader.patch', when='@3.1.0:3.1.2')
+ # Reported upstream: https://github.com/open-mpi/ompi/pull/6378
+ # We support only versions based on Libtool 2.4.6.
+ patch('nag_ltmain_1.patch', when='@2.1.4:2.1.999,3.0.1:4%nag')
+ patch('nag_ltmain_2.patch', when='@2.1.2:2.1.3,3.0.0%nag')
+ patch('nag_ltmain_3.patch', when='@2.0.0:2.1.1%nag')
+ patch('nag_ltmain_4.patch', when='@1.10.4:1.10.999%nag')
+
variant(
'fabrics',
values=disjoint_sets(
@@ -398,6 +406,7 @@ class Openmpi(AutotoolsPackage):
spec = self.spec
config_args = [
'--enable-shared',
+ '--disable-silent-rules'
]
# Add extra_rpaths dirs from compilers.yaml into link wrapper
diff --git a/var/spack/repos/builtin/packages/openpmd-api/hdf5-1.12.0.patch b/var/spack/repos/builtin/packages/openpmd-api/hdf5-1.12.0.patch
new file mode 100644
index 0000000000..f190f12ff1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openpmd-api/hdf5-1.12.0.patch
@@ -0,0 +1,23 @@
+From 61ccc18cdd478c6281466f1f77de416559234dd8 Mon Sep 17 00:00:00 2001
+From: Axel Huebl <axel.huebl@plasma.ninja>
+Date: Tue, 17 Mar 2020 10:51:20 -0700
+Subject: [PATCH] HDF5: H5Oget_info Compatibility
+
+Update to work with HDF5 1.12.0 signature.
+Macro for older releases.
+---
+ src/IO/HDF5/HDF5IOHandler.cpp | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/IO/HDF5/HDF5IOHandler.cpp b/src/IO/HDF5/HDF5IOHandler.cpp
+index 7043861b..c125e1f4 100644
+--- a/src/IO/HDF5/HDF5IOHandler.cpp
++++ b/src/IO/HDF5/HDF5IOHandler.cpp
+@@ -1535,3 +1535,7 @@ void HDF5IOHandlerImpl::listAttributes(Writable* writable,
+ H5O_info_t object_info;
+ herr_t status;
++#if H5_VERSION_GE(1,12,0)
++ status = H5Oget_info(node_id, &object_info, H5O_INFO_NUM_ATTRS);
++#else
+ status = H5Oget_info(node_id, &object_info);
++#endif
diff --git a/var/spack/repos/builtin/packages/openpmd-api/package.py b/var/spack/repos/builtin/packages/openpmd-api/package.py
index 46ac2eaecb..1459a11271 100644
--- a/var/spack/repos/builtin/packages/openpmd-api/package.py
+++ b/var/spack/repos/builtin/packages/openpmd-api/package.py
@@ -15,6 +15,7 @@ class OpenpmdApi(CMakePackage):
maintainers = ['ax3l']
version('dev', branch='dev')
+ version('0.11.0', tag='0.11.0-alpha')
version('0.10.3', tag='0.10.3-alpha')
version('0.10.2', tag='0.10.2-alpha')
version('0.10.1', tag='0.10.1-alpha')
@@ -54,6 +55,10 @@ class OpenpmdApi(CMakePackage):
extends('python', when='+python')
+ # Fix breaking HDF5 1.12.0 API
+ # https://github.com/openPMD/openPMD-api/pull/696
+ patch('hdf5-1.12.0.patch', when='@:0.11.0 +hdf5')
+
def cmake_args(self):
spec = self.spec
diff --git a/var/spack/repos/builtin/packages/openspeedshop/package.py b/var/spack/repos/builtin/packages/openspeedshop/package.py
index 56f9b0c689..a0cf6e46cd 100644
--- a/var/spack/repos/builtin/packages/openspeedshop/package.py
+++ b/var/spack/repos/builtin/packages/openspeedshop/package.py
@@ -96,7 +96,7 @@ class Openspeedshop(CMakePackage):
depends_on("libxml2")
- depends_on("qt@3", when='gui=qt3')
+ depends_on("qt@3:3.9", when='gui=qt3')
# Dependencies for the openspeedshop cbtf packages.
depends_on("cbtf@develop", when='@develop', type=('build', 'link', 'run'))
diff --git a/var/spack/repos/builtin/packages/openssl/package.py b/var/spack/repos/builtin/packages/openssl/package.py
index 450990c179..3f8e4647c4 100644
--- a/var/spack/repos/builtin/packages/openssl/package.py
+++ b/var/spack/repos/builtin/packages/openssl/package.py
@@ -25,6 +25,7 @@ class Openssl(Package): # Uses Fake Autotools, should subclass Package
# The latest stable version is the 1.1.1 series. This is also our Long Term
# Support (LTS) version, supported until 11th September 2023.
+ version('1.1.1e', sha256='694f61ac11cb51c9bf73f54e771ff6022b0327a43bbdfa1b2f19de1662a6dcbe')
version('1.1.1d', sha256='1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2')
version('1.1.1c', sha256='f6fb3079ad15076154eda9413fed42877d668e7069d9b87396d0804fdb3f4c90')
version('1.1.1b', sha256='5c557b023230413dfb0756f3137a13e6d726838ccd1430888ad15bfb2b43ea4b')
@@ -45,6 +46,7 @@ class Openssl(Package): # Uses Fake Autotools, should subclass Package
# Our previous LTS version (1.0.2 series) will continue to be supported
# until 31st December 2019 (security fixes only during the last year of
# support).
+ version('1.0.2u', sha256='ecd0c6ffb493dd06707d38b14bb4d8c2288bb7033735606569d8f90f89669d16')
version('1.0.2t', sha256='14cb464efe7ac6b54799b34456bd69558a749a4931ecfd9cf9f71d7881cac7bc')
version('1.0.2s', sha256='cabd5c9492825ce5bd23f3c3aeed6a97f8142f606d893df216411f07d1abab96')
version('1.0.2r', sha256='ae51d08bba8a83958e894946f15303ff894d75c2b8bbd44a852b64e3fe11d0d6')
diff --git a/var/spack/repos/builtin/packages/opensubdiv/package.py b/var/spack/repos/builtin/packages/opensubdiv/package.py
new file mode 100644
index 0000000000..69f9aeba4c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/opensubdiv/package.py
@@ -0,0 +1,85 @@
+# Copyright 2013-2019 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 import *
+
+
+class Opensubdiv(CMakePackage, CudaPackage):
+ """OpenSubdiv is a set of open source libraries that
+ implement high performance subdivision surface (subdiv)
+ evaluation on massively parallel CPU and GPU architectures.
+ This code path is optimized for drawing deforming surfaces
+ with static topology at interactive framerates."""
+
+ homepage = "http://graphics.pixar.com/opensubdiv/docs/intro.html"
+ url = "https://github.com/PixarAnimationStudios/OpenSubdiv/archive/v3_4_0.tar.gz"
+ git = "https://github.com/PixarAnimationStudios/OpenSubdiv"
+
+ version('develop', branch='dev')
+ version('3_4_0', sha256='d932b292f83371c7518960b2135c7a5b931efb43cdd8720e0b27268a698973e4')
+
+ variant('tbb', default=False, description='Builds with Intel TBB support')
+ variant('openmp', default=False, description='Builds with OpenMP support')
+ variant('doc', default=False, description='Builds documentation. Requires Python 2')
+
+ depends_on('cmake@2.8.6:', type='build')
+ depends_on('graphviz', type='build', when='+doc')
+ depends_on('doxygen', type='build', when='+doc')
+ depends_on('py-docutils', type='build', when='+doc')
+ depends_on('python@2.6:2.999', type='build', when='+doc')
+ depends_on('gl')
+ depends_on('glew@1.9.0:')
+ depends_on('glfw@3.0.0:')
+ depends_on('intel-tbb@4.0:', when='+tbb')
+ depends_on('libxrandr')
+ depends_on('libxcursor')
+ depends_on('libxinerama')
+ depends_on('llvm-openmp', when='+openmp')
+
+ def cmake_args(self):
+ spec = self.spec
+ args = []
+
+ args.append('-DNO_EXAMPLES=1') # disable examples build
+ args.append('-DNO_TUTORIALS=1') # disable tutorials build
+ args.append('-DNO_REGRESSION=1') # disable regression tests build
+ args.append('-DNO_PTEX=1') # disable PTex support
+ args.append('-DNO_OPENCL=1') # disable OpenCL
+ args.append('-DNO_CLEW=1') # disable CLEW wrapper library
+ args.append('-DNO_METAL=1') # disable Metal
+
+ args.append('-DNO_OPENGL=0') # OpenGL always on
+ args.append('-DGLEW_LOCATION={0}'.format(spec['glew'].prefix))
+
+ if '+cuda' in spec:
+ args.append('-DNO_CUDA=0')
+
+ cuda_arch = [x for x in spec.variants['cuda_arch'].value if x]
+ if cuda_arch:
+ args.append('-DOSD_CUDA_NVCC_FLAGS={0}'.format(
+ ' '.join(self.cuda_flags(cuda_arch))))
+ else:
+ args.append('-DOSD_CUDA_NVCC_FLAGS=')
+
+ else:
+ args.append('-DNO_CUDA=1')
+
+ if '+tbb' in spec:
+ args.append('-DNO_TBB=0')
+ else:
+ args.append('-DNO_TBB=1')
+
+ if '+doc' in spec:
+ args.append('-DNO_DOC=0')
+ else:
+ args.append('-DNO_DOC=1')
+
+ if '+openmp' in spec:
+ args.append('-DNO_OMP=0')
+ else:
+ args.append('-DNO_OMP=1')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/papi/package.py b/var/spack/repos/builtin/packages/papi/package.py
index c6dc408eb6..6e0b6cb817 100644
--- a/var/spack/repos/builtin/packages/papi/package.py
+++ b/var/spack/repos/builtin/packages/papi/package.py
@@ -23,6 +23,7 @@ class Papi(Package):
maintainers = ['G-Ragghianti']
url = "http://icl.cs.utk.edu/projects/papi/downloads/papi-5.4.1.tar.gz"
+ version('6.0.0', sha256='3442709dae3405c2845b304c06a8b15395ecf4f3899a89ceb4d715103cb4055f')
version('5.7.0', sha256='d1a3bb848e292c805bc9f29e09c27870e2ff4cda6c2fba3b7da8b4bba6547589')
version('5.6.0', sha256='49b7293f9ca2d74d6d80bd06b5c4be303663123267b4ac0884cbcae4c914dc47')
version('5.5.1', sha256='49dc2c2323f6164c4a7e81b799ed690ee73158671205e71501f849391dd2c2d4')
diff --git a/var/spack/repos/builtin/packages/parallel-netcdf/nag_libtool.patch b/var/spack/repos/builtin/packages/parallel-netcdf/nag_libtool.patch
new file mode 100644
index 0000000000..f391c1dc5e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/parallel-netcdf/nag_libtool.patch
@@ -0,0 +1,69 @@
+--- a/configure
++++ b/configure
+@@ -11745,6 +11745,8 @@ _LT_EOF
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
++ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
++ compiler_needs_object=yes
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+@@ -21030,6 +21032,8 @@ _LT_EOF
+ whole_archive_flag_spec_F77=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
++ whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
++ compiler_needs_object_F77=yes
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+@@ -24765,6 +24769,8 @@ _LT_EOF
+ whole_archive_flag_spec_FC=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
++ whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
++ compiler_needs_object_FC=yes
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+--- a/scripts/ltmain.sh
++++ b/scripts/ltmain.sh
+@@ -7862,6 +7862,13 @@ func_mode_link ()
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
++
++ # Additionally convert " -pthread" to " -Wl,-pthread" for nagfor
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*) tmp_inherited_linker_flags=`$ECHO "$tmp_inherited_linker_flags" | $SED 's/ -pthread/ -Wl,-pthread/g'` ;;
++ esac
++
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+@@ -8881,7 +8888,8 @@ func_mode_link ()
+ xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ # On Darwin other compilers
+- case $CC in
++ func_cc_basename $CC
++ case $func_cc_basename_result in
+ nagfor*)
+ verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ ;;
+@@ -9493,6 +9501,13 @@ EOF
+ ;;
+ esac
+
++ # Time to revert the changes made for nagfor.
++ func_cc_basename $CC
++ case $func_cc_basename_result in
++ nagfor*)
++ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% -Wl,-pthread% -pthread%g'` ;;
++ esac
++
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
diff --git a/var/spack/repos/builtin/packages/parallel-netcdf/package.py b/var/spack/repos/builtin/packages/parallel-netcdf/package.py
index 34a1af5984..384717d05e 100644
--- a/var/spack/repos/builtin/packages/parallel-netcdf/package.py
+++ b/var/spack/repos/builtin/packages/parallel-netcdf/package.py
@@ -25,7 +25,6 @@ class ParallelNetcdf(AutotoolsPackage):
return url.format(version.dotted)
- version('develop', branch='develop')
version('master', branch='master')
version('1.12.1', sha256='56f5afaa0ddc256791c405719b6436a83b92dcd5be37fe860dea103aee8250a2')
version('1.11.2', sha256='d2c18601b364c35b5acb0a0b46cd6e14cae456e0eb854e5c789cf65f3cd6a2a7')
@@ -42,41 +41,74 @@ class ParallelNetcdf(AutotoolsPackage):
variant('fortran', default=True, description='Build the Fortran Interface')
variant('pic', default=True,
description='Produce position-independent code (for shared libs)')
+ variant('shared', default=True, description='Enable shared library')
depends_on('mpi')
depends_on('m4', type='build')
+ depends_on('autoconf', when='@master', type='build')
+ depends_on('automake', when='@master', type='build')
+ depends_on('libtool', when='@master', type='build')
- # See:
- # https://trac.mcs.anl.gov/projects/parallel-netcdf/browser/trunk/INSTALL
- def configure_args(self):
- spec = self.spec
+ conflicts('+shared', when='@:1.9%nag+fortran')
+ conflicts('+shared', when='@:1.8')
+
+ patch('nag_libtool.patch', when='@1.9:1.12.1%nag')
- args = ['--with-mpi={0}'.format(spec['mpi'].prefix)]
- args.append('MPICC={0}'.format(spec['mpi'].mpicc))
- args.append('MPICXX={0}'.format(spec['mpi'].mpicxx))
- args.append('MPIF77={0}'.format(spec['mpi'].mpifc))
- args.append('MPIF90={0}'.format(spec['mpi'].mpifc))
- args.append('SEQ_CC={0}'.format(spack_cc))
+ @property
+ def libs(self):
+ libraries = ['libpnetcdf']
- if '+pic' in spec:
- args.extend([
- 'CFLAGS={0}'.format(self.compiler.pic_flag),
- 'CXXFLAGS={0}'.format(self.compiler.pic_flag),
- 'FFLAGS={0}'.format(self.compiler.pic_flag)
- ])
+ query_parameters = self.spec.last_query.extra_parameters
+
+ if 'shared' in query_parameters:
+ shared = True
+ elif 'static' in query_parameters:
+ shared = False
+ else:
+ shared = '+shared' in self.spec
- if '~cxx' in spec:
- args.append('--disable-cxx')
+ libs = find_libraries(
+ libraries, root=self.prefix, shared=shared, recursive=True
+ )
- if '~fortran' in spec:
- args.append('--disable-fortran')
+ if libs:
+ return libs
- if spec.satisfies('@1.8.0:'):
+ msg = 'Unable to recursively locate {0} {1} libraries in {2}'
+ raise spack.error.NoLibrariesError(
+ msg.format('shared' if shared else 'static',
+ self.spec.name,
+ self.spec.prefix))
+
+ @when('@master')
+ def autoreconf(self, spec, prefix):
+ with working_dir(self.configure_directory):
+ # We do not specify '-f' because we need to use libtool files from
+ # the repository.
+ autoreconf('-iv')
+
+ def configure_args(self):
+ args = ['--with-mpi=%s' % self.spec['mpi'].prefix,
+ 'SEQ_CC=%s' % spack_cc]
+
+ args += self.enable_or_disable('cxx')
+ args += self.enable_or_disable('fortran')
+
+ if '+pic' in self.spec:
+ args.extend(['{0}FLAGS={1}'.format(lang, self.compiler.pic_flag)
+ for lang in ['C', 'CXX', 'F', 'FC']])
+
+ if self.version >= Version('1.8'):
args.append('--enable-relax-coord-bound')
- return args
+ if self.version >= Version('1.9'):
+ args += self.enable_or_disable('shared')
+ args.extend(['--enable-static',
+ '--disable-silent-rules'])
+
+ if self.spec.satisfies('%nag+fortran+shared'):
+ args.extend(['ac_cv_prog_fc_v=-Wl,-v',
+ 'ac_cv_prog_f77_v=-Wl,-v'])
- def install(self, spec, prefix):
- # Installation fails in parallel
- make('install', parallel=False)
+ return args
diff --git a/var/spack/repos/builtin/packages/paraview/package.py b/var/spack/repos/builtin/packages/paraview/package.py
index 111c8df7a4..48dff877e0 100644
--- a/var/spack/repos/builtin/packages/paraview/package.py
+++ b/var/spack/repos/builtin/packages/paraview/package.py
@@ -20,6 +20,7 @@ class Paraview(CMakePackage, CudaPackage):
maintainers = ['chuckatkins', 'danlipsa']
version('develop', branch='master', submodules=True)
+ version('5.8.0', sha256='219e4107abf40317ce054408e9c3b22fb935d464238c1c00c0161f1c8697a3f9')
version('5.7.0', sha256='e41e597e1be462974a03031380d9e5ba9a7efcdb22e4ca2f3fec50361f310874')
version('5.6.2', sha256='1f3710b77c58a46891808dbe23dc59a1259d9c6b7bb123aaaeaa6ddf2be882ea')
version('5.6.0', sha256='cb8c4d752ad9805c74b4a08f8ae6e83402c3f11e38b274dba171b99bb6ac2460')
diff --git a/var/spack/repos/builtin/packages/perfstubs/package.py b/var/spack/repos/builtin/packages/perfstubs/package.py
new file mode 100644
index 0000000000..9162e749fc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perfstubs/package.py
@@ -0,0 +1,34 @@
+# Copyright 2013-2020 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 import *
+
+
+class Perfstubs(CMakePackage):
+ """Profiling API for adding tool instrumentation support to any project.
+
+ This was motivated by the need to quickly add instrumentation to the
+ [ADIOS2](https://github.com/ornladios/ADIOS2) library without adding a build
+ dependency, or tying to a specific measurement tool.
+
+ The initial prototype implementation was tied to TAU, but evolved to this more
+ generic version, which was extracted as a separate repository for testing and
+ demonstration purposes.
+ """
+
+ homepage = "https://github.com/khuck/perfstubs"
+ git = "https://github.com/khuck/perfstubs.git"
+
+ version('master', branch='master')
+ variant('static', default=False, description='Build static executable support')
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ '-DPERFSTUBS_USE_STATIC:BOOL={0}'.format(
+ 'ON' if '+static' in spec else 'OFF')
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/perl-want/package.py b/var/spack/repos/builtin/packages/perl-want/package.py
index 8cf43446ba..82b926234a 100644
--- a/var/spack/repos/builtin/packages/perl-want/package.py
+++ b/var/spack/repos/builtin/packages/perl-want/package.py
@@ -9,7 +9,7 @@ from spack import *
class PerlWant(PerlPackage):
"""A generalisation of wantarray."""
- homepage = "search.cpan.org/~robin/Want/Want.pm"
+ homepage = "http://search.cpan.org/~robin/Want/Want.pm"
url = "http://search.cpan.org/CPAN/authors/id/R/RO/ROBIN/Want-0.29.tar.gz"
version('0.29', sha256='b4e4740b8d4cb783591273c636bd68304892e28d89e88abf9273b1de17f552f7')
diff --git a/var/spack/repos/builtin/packages/petsc/package.py b/var/spack/repos/builtin/packages/petsc/package.py
index 88332caec9..577f53a163 100644
--- a/var/spack/repos/builtin/packages/petsc/package.py
+++ b/var/spack/repos/builtin/packages/petsc/package.py
@@ -24,6 +24,7 @@ class Petsc(Package):
version('develop', branch='master')
version('xsdk-0.2.0', tag='xsdk-0.2.0')
+ version('3.12.4', sha256='56a941130da93bbacb3cfa74dcacea1e3cd8e36a0341f9ced09977b1457084c3')
version('3.12.3', sha256='91f77d7b0f54056f085b9e27938922db3d9bb1734a2e2a6d26f43d3e6c0cf631')
version('3.12.2', sha256='d874b2e198c4cb73551c2eca1d2c5d27da710be4d00517adb8f9eb3d6d0375e8')
version('3.12.1', sha256='b72d895d0f4a79acb13ebc782b47b26d10d4e5706d399f533afcd5b3dba13737')
@@ -99,6 +100,8 @@ class Petsc(Package):
description='Activate X support')
variant('batch', default=False,
description='Enable when mpiexec is not available to run binaries')
+ variant('valgrind', default=False,
+ description='Enable Valgrind Client Request mechanism')
# 3.8.0 has a build issue with MKL - so list this conflict explicitly
conflicts('^intel-mkl', when='@3.8.0')
@@ -143,9 +146,10 @@ class Petsc(Package):
depends_on('metis@5:~int64', when='@3.8:+metis~int64')
depends_on('metis@5:+int64', when='@3.8:+metis+int64')
- depends_on('hdf5+mpi+hl+fortran', when='+hdf5+mpi')
+ depends_on('hdf5@:1.10.99+mpi+hl+fortran', when='+hdf5+mpi')
depends_on('zlib', when='+hdf5')
depends_on('parmetis', when='+metis+mpi')
+ depends_on('valgrind', when='+valgrind')
# Hypre does not support complex numbers.
# Also PETSc prefer to build it without internal superlu, likely due to
# conflict in headers see
@@ -160,8 +164,8 @@ class Petsc(Package):
depends_on('hypre@develop~internal-superlu~int64', when='@develop+hypre+mpi~complex~int64')
depends_on('superlu-dist@:4.3~int64', when='@3.4.4:3.6.4+superlu-dist+mpi~int64')
depends_on('superlu-dist@:4.3+int64', when='@3.4.4:3.6.4+superlu-dist+mpi+int64')
- depends_on('superlu-dist@5.0.0:~int64', when='@3.7:3.7.99+superlu-dist+mpi~int64')
- depends_on('superlu-dist@5.0.0:+int64', when='@3.7:3.7.99+superlu-dist+mpi+int64')
+ depends_on('superlu-dist@5.0.0:5.1.3~int64', when='@3.7:3.7.99+superlu-dist+mpi~int64')
+ depends_on('superlu-dist@5.0.0:5.1.3+int64', when='@3.7:3.7.99+superlu-dist+mpi+int64')
depends_on('superlu-dist@5.2:5.2.99~int64', when='@3.8:3.9.99+superlu-dist+mpi~int64')
depends_on('superlu-dist@5.2:5.2.99+int64', when='@3.8:3.9.99+superlu-dist+mpi+int64')
depends_on('superlu-dist@5.4:5.4.99~int64', when='@3.10:3.10.2+superlu-dist+mpi~int64')
@@ -280,7 +284,7 @@ class Petsc(Package):
# Activates library support if needed
for library in ('metis', 'hdf5', 'hypre', 'parmetis',
- 'mumps', 'trilinos', 'fftw'):
+ 'mumps', 'trilinos', 'fftw', 'valgrind'):
options.append(
'--with-{library}={value}'.format(
library=library, value=('1' if library in spec else '0'))
diff --git a/var/spack/repos/builtin/packages/pfunit/package.py b/var/spack/repos/builtin/packages/pfunit/package.py
index 30704ac62e..ab6bc53d2c 100644
--- a/var/spack/repos/builtin/packages/pfunit/package.py
+++ b/var/spack/repos/builtin/packages/pfunit/package.py
@@ -30,10 +30,14 @@ class Pfunit(CMakePackage):
variant('shared', default=True,
description='Build shared library in addition to static')
variant('mpi', default=False, description='Enable MPI')
- variant('use_comm_world', default=False, description='Enable MPI_COMM_WORLD for testing')
+ variant('use_comm_world', default=False,
+ description='Enable MPI_COMM_WORLD for testing')
variant('openmp', default=False, description='Enable OpenMP')
variant('docs', default=False, description='Build docs')
+ variant('max_array_rank', values=int, default=5,
+ description='Max number of Fortran dimensions of array asserts')
+
depends_on('python@2.7:', type=('build', 'run')) # python3 too!
depends_on('mpi', when='+mpi')
@@ -53,7 +57,8 @@ class Pfunit(CMakePackage):
'-DBUILD_SHARED=%s' % ('YES' if '+shared' in spec else 'NO'),
'-DCMAKE_Fortran_MODULE_DIRECTORY=%s' % spec.prefix.include,
'-DBUILD_DOCS=%s' % ('YES' if '+docs' in spec else 'NO'),
- '-DOPENMP=%s' % ('YES' if '+openmp' in spec else 'NO')]
+ '-DOPENMP=%s' % ('YES' if '+openmp' in spec else 'NO'),
+ '-DMAX_RANK=%s' % spec.variants['max_array_rank'].value]
if spec.satisfies('+mpi'):
args.extend(['-DMPI=YES', '-DMPI_USE_MPIEXEC=YES',
diff --git a/var/spack/repos/builtin/packages/pgi/package.py b/var/spack/repos/builtin/packages/pgi/package.py
index 783bf75faa..aa6e60ddcc 100644
--- a/var/spack/repos/builtin/packages/pgi/package.py
+++ b/var/spack/repos/builtin/packages/pgi/package.py
@@ -20,6 +20,7 @@ class Pgi(Package):
homepage = "http://www.pgroup.com/"
+ version('19.10', sha256='ac9db73ba80a66fe3bc875f63aaa9e16f54674a4e88b25416432430ba8cf203d')
version('19.4', sha256='23eee0d4da751dd6f247d624b68b03538ebd172e63a053c41bb67013f07cf68e')
version('19.1', sha256='3e05a6db2bf80b5d15f6ff83188f20cb89dc23e233417921e5c0822e7e57d34f')
version('18.10', sha256='4b3ff83d2a13de6001bed599246eff8e63ef711b8952d4a9ee12efd666b3e326')
@@ -90,6 +91,9 @@ class Pgi(Package):
def setup_run_environment(self, env):
prefix = Prefix(join_path(self.prefix, 'linux86-64', self.version))
+ env.prepend_path('PATH', prefix.bin)
+ env.prepend_path('MANPATH', prefix.man)
+ env.prepend_path('LD_LIBRARY_PATH', prefix.lib)
env.set('CC', join_path(prefix.bin, 'pgcc'))
env.set('CXX', join_path(prefix.bin, 'pgc++'))
env.set('F77', join_path(prefix.bin, 'pgfortran'))
diff --git a/var/spack/repos/builtin/packages/php/package.py b/var/spack/repos/builtin/packages/php/package.py
new file mode 100644
index 0000000000..714bfb0e8f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/php/package.py
@@ -0,0 +1,41 @@
+# Copyright 2013-2019 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 import *
+
+
+class Php(AutotoolsPackage):
+ """
+ PHP is a popular general-purpose scripting language that is especially
+ suited to web development. Fast, flexible and pragmatic, PHP powers
+ everything from your blog to the most popular websites in the world.
+ """
+
+ homepage = "https://php.net/"
+ url = "https://github.com/php/php-src/archive/php-7.3.13.tar.gz"
+
+ version('7.4.1', sha256='4d9d7c5681bec3af38a935d033657dce09a9913498f8022d7ca163a7f2f493a7')
+ version('7.4.0', sha256='91d34b48025ab9789216df89e247b6904912eeeaeff38c300ef314bdda8920b0')
+ version('7.3.13', sha256='e68b8d9e659f2993eee912f05860e546fdc18e459f31cd2771f404df21285f0b')
+ version('7.3.12', sha256='d0672ea84c0ab184f636acff3230d376d89a2067d59a87a2f1842361ee1f97d6')
+ version('7.3.11', sha256='4d861b2f3bc640ded8b591ce87250161392a6244a3c84042da0c06fd8c500eb2')
+ version('7.2.26', sha256='da132a836cec8021c00f22952e6044d91628ee3d2ef92a95d65cf91bad810600')
+ version('7.2.25', sha256='049b2d291c45cb889d15fcd2bac6da7d15ca5d535d272d2f8879fb834bbf276e')
+ version('7.2.24', sha256='334c9915733f6a29e1462f64038b1b4b1b21cb18f4f5f980add86792b5550ab3')
+ version('7.1.33', sha256='f80a795a09328a9441bae4a8a60fa0d6d43ec5adc98f5aa5f51d06f4522c07fe')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+ depends_on('pkgconfig', type='build')
+ depends_on('bison', type='build')
+ depends_on('re2c', type='build')
+ depends_on('libxml2')
+ depends_on('sqlite')
+
+ def autoreconf(self, spec, prefix):
+ bash = which('bash')
+ bash('./buildconf', '--force')
diff --git a/var/spack/repos/builtin/packages/pinentry/package.py b/var/spack/repos/builtin/packages/pinentry/package.py
new file mode 100644
index 0000000000..3a9e6e526c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pinentry/package.py
@@ -0,0 +1,47 @@
+# Copyright 2013-2020 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 import *
+
+
+class Pinentry(AutotoolsPackage):
+ """pinentry is a small collection of dialog programs that allow GnuPG to
+ read passphrases and PIN numbers in a secure manner. There are versions for
+ the common GTK and Qt toolkits as well as for the text terminal (Curses).
+ """
+
+ homepage = "https://gnupg.org/related_software/pinentry/index.html"
+ url = "https://gnupg.org/ftp/gcrypt/pinentry/pinentry-1.1.0.tar.bz2"
+
+ version('1.1.0', sha256='68076686fa724a290ea49cdf0d1c0c1500907d1b759a3bcbfbec0293e8f56570')
+
+ depends_on('libgpg-error@1.16:')
+ depends_on('libassuan@2.1.0:')
+
+ def configure_args(self):
+ return [
+ # Autotools automatically enables these if dependencies found
+ # TODO: add variants for these
+ '--disable-pinentry-curses',
+ '--disable-pinentry-emacs',
+ '--disable-pinentry-gtk2',
+ '--disable-pinentry-gnome3',
+ '--disable-pinentry-qt',
+ '--disable-pinentry-qt5',
+ '--disable-pinentry-tqt',
+ '--disable-pinentry-fltk',
+
+ # No dependencies, simplest installation
+ '--enable-pinentry-tty',
+
+ # Disable extra features
+ '--disable-fallback-curses',
+ '--disable-inside-emacs',
+ '--disable-libsecret',
+
+ # Required dependencies
+ '--with-gpg-error-prefix=' + self.spec['libgpg-error'].prefix,
+ '--with-libassuan-prefix=' + self.spec['libassuan'].prefix,
+ ]
diff --git a/var/spack/repos/builtin/packages/plumed/package.py b/var/spack/repos/builtin/packages/plumed/package.py
index c8b1f8e9b9..b51d3c12c2 100644
--- a/var/spack/repos/builtin/packages/plumed/package.py
+++ b/var/spack/repos/builtin/packages/plumed/package.py
@@ -25,8 +25,9 @@ class Plumed(AutotoolsPackage):
git = 'https://github.com/plumed/plumed2.git'
version('master', branch='master')
- version('2.6b', sha256='3ecda9d46967c8ddd08e820aed974794d926cffb78b262f9d42cdbece3b15677')
- version('2.5.3', preferred=True, sha256='543288be667dc4201fc461ecd2dd4878ddfbeac682d0c021c99ea8e501c7c9dc')
+ version('2.6.0', sha256='3d57ae460607a49547ef38a52c4ac93493a3966857c352280a9c05f5dcdb1820')
+ version('2.5.4', preferred=True, sha256='a1647e598191f261e75d06351e607475d395af481315052a4c28563ac9989a7f')
+ version('2.5.3', sha256='543288be667dc4201fc461ecd2dd4878ddfbeac682d0c021c99ea8e501c7c9dc')
version('2.5.2', sha256='85d10cc46e2e37c7719cf51c0931278f56c2c8f8a9d86188b2bf97c2535a2ab4')
version('2.5.1', sha256='de309980dcfd6f6e0e70e138856f4bd9eb4d8a513906a5e6389f18a5af7f2eba')
version('2.5.0', sha256='53e08187ec9f8af2326fa84407e34644a7c51d2af93034309fb70675eee5e4f7')
@@ -68,6 +69,7 @@ class Plumed(AutotoolsPackage):
depends_on('autoconf', type='build')
depends_on('automake', type='build')
depends_on('libtool', type='build')
+ depends_on('py-cython', type='build', when='@2.5:')
force_autoreconf = True
diff --git a/var/spack/repos/builtin/packages/portage/package.py b/var/spack/repos/builtin/packages/portage/package.py
index 097ec9aab1..95c881ae6c 100644
--- a/var/spack/repos/builtin/packages/portage/package.py
+++ b/var/spack/repos/builtin/packages/portage/package.py
@@ -60,6 +60,6 @@ class Portage(CMakePackage):
self.spec['lapack'].libs.joined())
options.append("-DLAPACKE_LIBRARY=" +
- self.spec["lapack"].libs.joined(";"))
+ self.spec["lapack:c"].libs.joined(";"))
return options
diff --git a/var/spack/repos/builtin/packages/precice/package.py b/var/spack/repos/builtin/packages/precice/package.py
index 22556719e4..40661e4329 100644
--- a/var/spack/repos/builtin/packages/precice/package.py
+++ b/var/spack/repos/builtin/packages/precice/package.py
@@ -19,6 +19,7 @@ class Precice(CMakePackage):
maintainers = ['fsimonis', 'MakisH']
version('develop', branch='develop')
+ version('2.0.1', sha256='e4fe2d2063042761ab325f8c802f88ae088c90862af288ad1a642967d074bd50')
version('2.0.0', sha256='c8979d366f06e35626a8da08a1c589df77ec13972eb524a1ba99a011e245701f')
version('1.6.1', sha256='7d0c54faa2c69e52304f36608d93c408629868f16f3201f663a0f9b2008f0763')
version('1.6.0', sha256='c3b16376fda9eb3449adb6cc3c1e267c3dc792a5d118e37d93a32a59b5a4bc6f')
diff --git a/var/spack/repos/builtin/packages/protobuf/package.py b/var/spack/repos/builtin/packages/protobuf/package.py
index 0923d3a961..05702d9fc9 100644
--- a/var/spack/repos/builtin/packages/protobuf/package.py
+++ b/var/spack/repos/builtin/packages/protobuf/package.py
@@ -39,6 +39,9 @@ class Protobuf(CMakePackage):
variant('shared', default=True,
description='Enables the build of shared libraries')
+ variant('build_type', default='Release',
+ description='The build type to build',
+ values=('Debug', 'Release'))
depends_on('zlib')
diff --git a/var/spack/repos/builtin/packages/py-arviz/package.py b/var/spack/repos/builtin/packages/py-arviz/package.py
new file mode 100644
index 0000000000..20e1be3839
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-arviz/package.py
@@ -0,0 +1,26 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyArviz(PythonPackage):
+ """ArviZ (pronounced "AR-vees") is a Python package for exploratory
+ analysis of Bayesian models. Includes functions for posterior analysis,
+ model checking, comparison and diagnostics."""
+
+ homepage = "http://github.com/arviz-devs/arviz"
+ url = "https://pypi.io/packages/source/a/arviz/arviz-0.6.1.tar.gz"
+
+ version('0.6.1', sha256='435edf8db49c41a8fa198f959e7581063006c49a4efdef4755bb778db6fd4f72')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-matplotlib@3.0:', type=('build', 'run'))
+ depends_on('py-numpy@1.12:', type=('build', 'run'))
+ depends_on('py-scipy@0.19:', type=('build', 'run'))
+ depends_on('py-packaging', type=('build', 'run'))
+ depends_on('py-pandas@0.23:', type=('build', 'run'))
+ depends_on('py-xarray@0.11:', type=('build', 'run'))
+ depends_on('py-netcdf4', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-astpretty/package.py b/var/spack/repos/builtin/packages/py-astpretty/package.py
new file mode 100644
index 0000000000..b6b4e9855f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-astpretty/package.py
@@ -0,0 +1,21 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyAstpretty(PythonPackage):
+ """Pretty print the output of python stdlib `ast.parse`."""
+
+ homepage = "https://github.com/asottile/astpretty"
+ url = "https://pypi.io/packages/source/a/astpretty/astpretty-2.0.0.tar.gz"
+
+ version('2.0.0', sha256='e4724bfd753636ba4a84384702e9796e5356969f40af2596d846ce64addde086')
+
+ variant('typed', default=False, description='Add support for typed comments')
+
+ depends_on('python@3.6.1:', type=('build', 'run'))
+ depends_on('py-setuptools', type=('build', 'run'))
+ depends_on('py-typed-ast', type=('build', 'run'), when='+typed')
diff --git a/var/spack/repos/builtin/packages/py-audioread/package.py b/var/spack/repos/builtin/packages/py-audioread/package.py
new file mode 100644
index 0000000000..b69f22b720
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-audioread/package.py
@@ -0,0 +1,21 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyAudioread(PythonPackage):
+ """cross-library (GStreamer + Core Audio + MAD + FFmpeg) audio decoding for
+ Python."""
+
+ homepage = "https://github.com/beetbox/audioread"
+ url = "https://pypi.io/packages/source/a/audioread/audioread-2.1.8.tar.gz"
+
+ version('2.1.8', sha256='073904fabc842881e07bd3e4a5776623535562f70b1655b635d22886168dd168')
+
+ depends_on('py-setuptools', type='build')
+ # the following does not seem to be used for building but is listed in
+ # setup.py
+ depends_on('py-pytest-runner', type='build')
diff --git a/var/spack/repos/builtin/packages/py-auxlib/package.py b/var/spack/repos/builtin/packages/py-auxlib/package.py
new file mode 100644
index 0000000000..4d18101e5d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-auxlib/package.py
@@ -0,0 +1,20 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyAuxlib(PythonPackage):
+ """Auxlib is an auxiliary library to the python standard library."""
+
+ homepage = "https://github.com/kalefranz/auxlib"
+ url = "https://pypi.io/packages/source/a/auxlib/auxlib-0.0.43.tar.gz"
+
+ version('0.0.43', sha256='0f175637e96a090a785767ce28483cf1aeec316a19afce9b2fbd113e1122786a')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-enum34', type=('build', 'run'), when='^python@:3.3')
+ depends_on('py-ordereddict', type=('build', 'run'), when='^python@:2.6')
+ depends_on('py-wheel', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-basis-set-exchange/package.py b/var/spack/repos/builtin/packages/py-basis-set-exchange/package.py
new file mode 100644
index 0000000000..92cd2b6d72
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-basis-set-exchange/package.py
@@ -0,0 +1,33 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyBasisSetExchange(PythonPackage):
+ """Command-line interface for the Basis Set Exchange Website"""
+
+ homepage = "https://www.basissetexchange.org"
+ url = "https://github.com/MolSSI-BSE/basis_set_exchange/archive/v0.8.12.tar.gz"
+
+ maintainers = ['bennybp', 'scemama']
+
+ version('0.8.12', sha256='41f0242e2c11392c511d3308c0345e14b0eb3344686d865bdfcb48257910fc0d')
+ version('0.8.11', sha256='dbd4cf9382d97b79a3143c6b2086d1d24562bd13e0ab0d18fc0423b9ee877b9b')
+ version('0.8.10', sha256='7f974faf513791d59ef47dd4eba9d8386f75bbd85f253ca5c08732ff56004a57')
+ version('0.8.9', sha256='faf01a00c8ef7cf7331562052fbf1ff861e901545a927310ab09ac03604b400b')
+ version('0.8.8', sha256='4770bc901b93bfbf1aa5e1c4b486804753b3ff19c41794d3200ffe990b12dfa1')
+ version('0.8.7', sha256='5e9e18ca84bd378d1e02b6543cee122d8cc4efeaf05b1801061b500dda4cb2fc')
+ version('0.8.6', sha256='96da4ab45adaab11825917dc4cf0e236f5d2f0af0f2e026578262ce389784912')
+ version('0.8.5', sha256='ff8e6e03474319245e641c9da05715a6ea90dccab0e60ad2b0bc8556f85a9bca')
+ version('0.8.4', sha256='005f95794ce55f1b1e8faa0b6910b814819dd4ee9dba367a3ec29dfe53816684')
+ version('0.8.3', sha256='0721f3cf55f588f62d74a408bccdd44046ebeaab8ec802c02fae7983d8f0359f')
+
+ depends_on('py-argcomplete', type=('build', 'run'))
+ depends_on('py-jsonschema', type=('build', 'run'))
+ depends_on('py-setuptools', type='build')
+ depends_on('python@3:', type=('build', 'run'))
+ depends_on('py-pytest@4.0:', type='test')
+ depends_on('py-pytest-cov', type='test')
diff --git a/var/spack/repos/builtin/packages/py-bx-python/package.py b/var/spack/repos/builtin/packages/py-bx-python/package.py
index ee4dfff7fc..3d73b21d18 100644
--- a/var/spack/repos/builtin/packages/py-bx-python/package.py
+++ b/var/spack/repos/builtin/packages/py-bx-python/package.py
@@ -11,10 +11,17 @@ class PyBxPython(PythonPackage):
to allow for rapid implementation of genome scale analyses."""
homepage = "https://github.com/bxlab/bx-python"
- url = "https://github.com/bxlab/bx-python/archive/v0.7.4.tar.gz"
+ url = "https://pypi.io/packages/source/b/bx-python/bx-python-0.8.8.tar.gz"
- version('0.7.4', sha256='1066d1e56d062d0661f23c19942eb757bd7ab7cb8bc7d89a72fdc3931c995cb4')
+ version('0.8.8', sha256='ad0808ab19c007e8beebadc31827e0d7560ac0e935f1100fb8cc93607400bb47')
+ version('0.7.4',
+ sha256='1066d1e56d062d0661f23c19942eb757bd7ab7cb8bc7d89a72fdc3931c995cb4',
+ url="https://github.com/bxlab/bx-python/archive/v0.7.4.tar.gz")
+ depends_on('python@2.4:2.7', type=('build', 'run'), when='@:0.7')
+ depends_on('python@2.7:2.8,3.5:', type=('build', 'run'), when='@0.8:')
depends_on('py-setuptools', type='build')
- depends_on('py-numpy', type=('build', 'run'))
- depends_on('py-six', type=('build', 'run'))
+ depends_on('py-python-lzo', type=('build', 'run'), when='@:0.7')
+ depends_on('py-cython', type='build', when='@0.8:')
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-six', type=('build', 'run'), when='@0.8:')
diff --git a/var/spack/repos/builtin/packages/py-cnvkit/package.py b/var/spack/repos/builtin/packages/py-cnvkit/package.py
new file mode 100644
index 0000000000..17d4508b15
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-cnvkit/package.py
@@ -0,0 +1,28 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyCnvkit(PythonPackage):
+ """Copy number variation toolkit for high-throughput sequencing."""
+
+ homepage = "https://github.com/etal/cnvkit"
+ url = "https://pypi.io/packages/source/C/CNVkit/CNVkit-0.9.6.tar.gz"
+
+ version('0.9.6', sha256='be889c98a5cf0a994330b8c31c0a65151fb0095fe4e75a1e04118da2516248c2')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-futures@3.0:', type=('build', 'run'), when='^python@:2.7')
+ depends_on('py-biopython@1.62:', type=('build', 'run'))
+ depends_on('py-future@0.15.2:', type=('build', 'run'))
+ depends_on('py-pomegranate@0.9.0:', type=('build', 'run'))
+ depends_on('py-matplotlib@1.3.1:', type=('build', 'run'))
+ depends_on('py-numpy@1.9:', type=('build', 'run'))
+ depends_on('py-pandas@0.20.1:0.24.999', type=('build', 'run'))
+ depends_on('py-pyfaidx@0.4.7:', type=('build', 'run'))
+ depends_on('py-pysam@0.10.0:', type=('build', 'run'))
+ depends_on('py-reportlab@3.0:', type=('build', 'run'))
+ depends_on('py-scipy@0.15.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-contextlib2/package.py b/var/spack/repos/builtin/packages/py-contextlib2/package.py
index c4409c8497..7231512b35 100644
--- a/var/spack/repos/builtin/packages/py-contextlib2/package.py
+++ b/var/spack/repos/builtin/packages/py-contextlib2/package.py
@@ -15,6 +15,7 @@ class PyContextlib2(PythonPackage):
url = "https://github.com/jazzband/contextlib2/archive/v0.6.0.tar.gz"
version('0.6.0', sha256='4f18e2f28bb642aae9447aacec93b1319c8ee838711553c0a2bd906753f2ad33')
+ version('0.5.5', sha256='613569263db0271f34c8484792360272a731f2185567c31c8118e9c994412170')
depends_on('py-setuptools', type='build')
depends_on('python@2.7:2.8,3.4:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-decorator/package.py b/var/spack/repos/builtin/packages/py-decorator/package.py
index 80174932ee..d174fc8a1f 100644
--- a/var/spack/repos/builtin/packages/py-decorator/package.py
+++ b/var/spack/repos/builtin/packages/py-decorator/package.py
@@ -12,8 +12,9 @@ class PyDecorator(PythonPackage):
various non-trivial examples."""
homepage = "https://github.com/micheles/decorator"
- url = "https://pypi.io/packages/source/d/decorator/decorator-4.4.0.tar.gz"
+ url = "https://pypi.io/packages/source/d/decorator/decorator-4.4.2.tar.gz"
+ version('4.4.2', sha256='e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7')
version('4.4.0', sha256='86156361c50488b84a3f148056ea716ca587df2f0de1d34750d35c21312725de')
version('4.3.2', sha256='33cd704aea07b4c28b3eb2c97d288a06918275dac0ecebdaf1bc8a48d98adb9e')
version('4.3.0', sha256='c39efa13fbdeb4506c476c9b3babf6a718da943dab7811c206005a4a956c080c')
diff --git a/var/spack/repos/builtin/packages/py-deprecated/package.py b/var/spack/repos/builtin/packages/py-deprecated/package.py
new file mode 100644
index 0000000000..7d1fe4af93
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-deprecated/package.py
@@ -0,0 +1,20 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyDeprecated(PythonPackage):
+ """Python @deprecated decorator to deprecate old python classes,
+ functions or methods."""
+
+ homepage = "https://github.com/tantale/deprecated"
+ url = "https://github.com/tantale/deprecated/archive/v1.2.7.tar.gz"
+
+ version("1.2.7", sha256="7db3c814ddcac9d79c5bae8a0e82a5bba55cb8e46f3d611d0d8611c34a72a783")
+
+ depends_on("python@2.7:2.8,3.4:", type=("build", "run"))
+ depends_on("py-wrapt@1.10:1.99999", type=("build", "run"))
+ depends_on("py-setuptools", type="build")
diff --git a/var/spack/repos/builtin/packages/py-dgl/package.py b/var/spack/repos/builtin/packages/py-dgl/package.py
new file mode 100644
index 0000000000..336d69edf2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-dgl/package.py
@@ -0,0 +1,94 @@
+# Copyright 2013-2020 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)
+
+
+class PyDgl(CMakePackage):
+ """Deep Graph Library (DGL).
+
+ DGL is an easy-to-use, high performance and scalable Python package for
+ deep learning on graphs. DGL is framework agnostic, meaning if a deep graph
+ model is a component of an end-to-end application, the rest of the logics
+ can be implemented in any major frameworks, such as PyTorch, Apache MXNet
+ or TensorFlow."""
+
+ homepage = "https://www.dgl.ai/"
+ git = "https://github.com/dmlc/dgl.git"
+
+ maintainers = ['adamjstewart']
+
+ version('master', branch='master', submodules=True)
+ version('0.4.2', tag='0.4.2', submodules=True)
+
+ variant('cuda', default=True, description='Build with CUDA')
+ variant('openmp', default=True, description='Build with OpenMP')
+ variant('backend', default='pytorch', description='Default backend',
+ values=['pytorch', 'mxnet', 'tensorflow'], multi=False)
+
+ depends_on('cmake@3.5:', type='build')
+ depends_on('cuda', when='+cuda')
+ depends_on('llvm-openmp', when='%clang platform=darwin +openmp')
+
+ # Python dependencies
+ extends('python')
+ depends_on('python@3.5:', type=('build', 'run'))
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cython', type='build')
+ depends_on('py-numpy@1.14.0:', type=('build', 'run'))
+ depends_on('py-scipy@1.1.0:', type=('build', 'run'))
+ depends_on('py-networkx@2.1:', type=('build', 'run'))
+
+ # Backends
+ depends_on('py-torch@0.4.1:', when='backend=pytorch', type='run')
+ depends_on('mxnet@1.5:', when='backend=mxnet', type='run')
+ depends_on('py-tensorflow@2.0:', when='backend=tensorflow', type='run')
+ depends_on('py-tfdlpack', when='backend=tensorflow', type='run')
+
+ build_directory = 'build'
+
+ def cmake_args(self):
+ args = []
+
+ if '+cuda' in self.spec:
+ args.append('-DUSE_CUDA=ON')
+ else:
+ args.append('-DUSE_CUDA=OFF')
+
+ if '+openmp' in self.spec:
+ args.append('-DUSE_OPENMP=ON')
+
+ if self.spec.satisfies('%clang platform=darwin'):
+ args.extend([
+ '-DOpenMP_CXX_FLAGS=' +
+ self.spec['llvm-openmp'].headers.include_flags,
+ '-DOpenMP_CXX_LIB_NAMES=' +
+ self.spec['llvm-openmp'].libs.names[0],
+ '-DOpenMP_C_FLAGS=' +
+ self.spec['llvm-openmp'].headers.include_flags,
+ '-DOpenMP_C_LIB_NAMES=' +
+ self.spec['llvm-openmp'].libs.names[0],
+ '-DOpenMP_omp_LIBRARY=' +
+ self.spec['llvm-openmp'].libs[0],
+ ])
+ else:
+ args.append('-DUSE_OPENMP=OFF')
+
+ if self.run_tests:
+ args.append('-DBUILD_CPP_TEST=ON')
+ else:
+ args.append('-DBUILD_CPP_TEST=OFF')
+
+ return args
+
+ def install(self, spec, prefix):
+ with working_dir('python'):
+ import os
+ print('Current dir:', os.getcwd())
+ setup_py('install', '--prefix=' + prefix,
+ '--single-version-externally-managed', '--root=/')
+
+ def setup_run_environment(self, env):
+ # https://docs.dgl.ai/install/backend.html
+ backend = self.spec.variants['backend'].value
+ env.set('DGLBACKEND', backend)
diff --git a/var/spack/repos/builtin/packages/py-git-review/package.py b/var/spack/repos/builtin/packages/py-git-review/package.py
index b68538eaac..5f4caa3b5c 100644
--- a/var/spack/repos/builtin/packages/py-git-review/package.py
+++ b/var/spack/repos/builtin/packages/py-git-review/package.py
@@ -12,6 +12,7 @@ class PyGitReview(PythonPackage):
homepage = "http://docs.openstack.org/infra/git-review"
url = "https://pypi.io/packages/source/g/git-review/git-review-1.25.0.tar.gz"
+ version('1.28.0', sha256='8e3aabb7b9484063e49c2504d137609401e32ad5128ff2a5cf43e98d5d3dc15a')
version('1.26.0', sha256='487c3c1d7cc81d02b303a1245e432579f683695c827ad454685b3953f70f0b94')
version('1.25.0', sha256='087e0a7dc2415796a9f21c484a6f652c5410e6ba4562c36291c5399f9395a11d')
diff --git a/var/spack/repos/builtin/packages/py-h5glance/package.py b/var/spack/repos/builtin/packages/py-h5glance/package.py
index 93a1be4028..9d3c3c9171 100644
--- a/var/spack/repos/builtin/packages/py-h5glance/package.py
+++ b/var/spack/repos/builtin/packages/py-h5glance/package.py
@@ -15,7 +15,9 @@ class PyH5glance(PythonPackage):
homepage = "https://github.com/European-XFEL/h5glance"
url = "https://pypi.io/packages/source/h/h5glance/h5glance-0.4.tar.gz"
- version('0.4', sha256='03babaee0d481991062842796126bc9e6b11e2e6e7daba57c26f2b58bf3bbd32')
+ version('0.6', sha256='203369ab614273aaad3419f151e234609bb8390b201b65f678d7e17c57633e35')
+ version('0.5', sha256='bc34ee42429f0440b329083e3f67fbf3d7016a4aed9e8b30911e5905217bc8d9')
+ version('0.4', sha256='03babaee0d481991062842796126bc9e6b11e2e6e7daba57c26f2b58bf3bbd32')
depends_on('python@3.5:', type=('build', 'run'))
depends_on('py-h5py', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-h5py/package.py b/var/spack/repos/builtin/packages/py-h5py/package.py
index d09fc71505..5f05081de1 100644
--- a/var/spack/repos/builtin/packages/py-h5py/package.py
+++ b/var/spack/repos/builtin/packages/py-h5py/package.py
@@ -11,10 +11,11 @@ class PyH5py(PythonPackage):
HDF5 library from Python."""
homepage = "http://www.h5py.org/"
- url = "https://pypi.io/packages/source/h/h5py/h5py-2.9.0.tar.gz"
+ url = "https://pypi.io/packages/source/h/h5py/h5py-2.10.0.tar.gz"
import_modules = ['h5py', 'h5py._hl']
+ version('2.10.0', sha256='84412798925dc870ffd7107f045d7659e60f5d46d1c70c700375248bf6bf512d')
version('2.9.0', sha256='9d41ca62daf36d6b6515ab8765e4c8c4388ee18e2a665701fef2b41563821002')
version('2.8.0', sha256='e626c65a8587921ebc7fb8d31a49addfdd0b9a9aa96315ea484c09803337b955')
version('2.7.1', sha256='180a688311e826ff6ae6d3bda9b5c292b90b28787525ddfcb10a29d5ddcae2cc')
@@ -31,6 +32,7 @@ class PyH5py(PythonPackage):
depends_on('py-setuptools', type='build')
# Build and runtime dependencies
+ depends_on('py-cached-property@1.5:', type=('build', 'run'))
depends_on('py-numpy@1.7:', type=('build', 'run'))
depends_on('py-six', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-hatchet/package.py b/var/spack/repos/builtin/packages/py-hatchet/package.py
new file mode 100644
index 0000000000..91df70b61b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-hatchet/package.py
@@ -0,0 +1,27 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyHatchet(PythonPackage):
+ """Hatchet is an analysis tool for structured tree or graph performance data
+ using an indexed Pandas dataframe."""
+
+ homepage = "https://github.com/LLNL/hatchet"
+ url = "https://github.com/LLNL/hatchet/archive/v1.0.0.tar.gz"
+
+ maintainers = ["slabasan", "bhatele", "tgamblin"]
+
+ version('1.0.0', sha256='efd218bc9152abde0a8006489a2c432742f00283a114c1eeb6d25abc10f5862d')
+
+ depends_on('python@2.7,3:', type=('build', 'run'))
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-matplotlib', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-pandas', type=('build', 'run'))
+ depends_on('py-pydot', type=('build', 'run'))
+ depends_on('py-pyyaml', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-horovod/package.py b/var/spack/repos/builtin/packages/py-horovod/package.py
new file mode 100644
index 0000000000..598e01c6f9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-horovod/package.py
@@ -0,0 +1,120 @@
+# Copyright 2013-2019 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)
+
+
+class PyHorovod(PythonPackage):
+ """Horovod is a distributed deep learning training framework for
+ TensorFlow, Keras, PyTorch, and Apache MXNet."""
+
+ homepage = "https://github.com/horovod"
+ git = "https://github.com/horovod/horovod.git"
+
+ maintainers = ['adamjstewart']
+
+ version('master', branch='master', submodules=True)
+ version('0.19.1', tag='v0.19.1', submodules=True)
+ version('0.19.0', tag='v0.19.0', submodules=True)
+ version('0.18.2', tag='v0.18.2', submodules=True)
+ version('0.18.1', tag='v0.18.1', submodules=True)
+ version('0.18.0', tag='v0.18.0', submodules=True)
+ version('0.17.1', tag='v0.17.1', submodules=True)
+ version('0.17.0', tag='v0.17.0', submodules=True)
+ version('0.16.4', tag='v0.16.4', submodules=True)
+ version('0.16.3', tag='v0.16.3', submodules=True)
+ version('0.16.2', tag='v0.16.2', submodules=True)
+
+ # Deep learning frameworks
+ variant('pytorch', default=True, description='Enables PyTorch')
+ variant('tensorflow', default=False, description='Enables TensorFlow')
+ variant('mxnet', default=False, description='Enables Apache MXNet')
+
+ # Distributed support
+ variant('gloo', default=False, description='Enables features related to distributed support')
+ variant('mpi', default=True, description='Enables MPI build')
+
+ # GPU support
+ variant('cuda', default=True, description='Enables CUDA build')
+ variant('gpu_allreduce', default='mpi',
+ description='Backend to use for GPU_ALLREDUCE',
+ values=('mpi', 'nccl'), multi=False) # DDL support is deprecated
+ variant('gpu_allgather', default='mpi',
+ description='Backend to use for GPU_ALLGATHER',
+ values=('mpi',), multi=False)
+ variant('gpu_broadcast', default='mpi',
+ description='Backend to use for GPU_BROADCAST',
+ values=('mpi', 'nccl'), multi=False)
+
+ # Required dependencies
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cloudpickle', type=('build', 'run'))
+ depends_on('py-psutil', type=('build', 'run'))
+ depends_on('py-pyyaml', type=('build', 'run'))
+ depends_on('py-six', type=('build', 'run'))
+
+ # Deep learning frameworks
+ depends_on('py-torch@0.4.0:', type=('build', 'run'), when='+pytorch')
+ depends_on('py-torch+cuda', type=('build', 'run'), when='+pytorch+cuda')
+ depends_on('py-cffi@1.4.0:', type=('build', 'run'), when='+pytorch')
+ depends_on('py-tensorflow@1.1.0:', type=('build', 'link', 'run'), when='+tensorflow')
+ depends_on('mxnet@1.4.0:+python', type=('build', 'link', 'run'), when='+mxnet')
+ depends_on('mxnet+cuda', type=('build', 'link', 'run'), when='+mxnet+cuda')
+
+ # Distributed support
+ # There does not appear to be a way to use an external Gloo installation
+ depends_on('cmake', type='build', when='+gloo')
+ depends_on('mpi', when='+mpi')
+ depends_on('mpi', when='gpu_allreduce=mpi')
+ depends_on('mpi', when='gpu_allgather=mpi')
+ depends_on('mpi', when='gpu_broadcast=mpi')
+
+ # GPU support
+ depends_on('cuda', when='+cuda')
+ depends_on('nccl@2.0:', when='gpu_allreduce=nccl')
+ depends_on('nccl@2.0:', when='gpu_broadcast=nccl')
+
+ # Test dependencies
+ depends_on('py-mock', type='test')
+ depends_on('py-pytest', type='test')
+ depends_on('py-pytest-forked', type='test')
+
+ conflicts('+gloo', when='platform=darwin', msg='Gloo cannot be compiled on MacOS')
+ conflicts('~gloo~mpi', msg='One of Gloo or MPI are required for Horovod to run')
+ conflicts('~pytorch~tensorflow~mxnet', msg='At least one deep learning backend is required')
+
+ def setup_build_environment(self, env):
+ # Deep learning frameworks
+ if '~pytorch' in self.spec:
+ env.set('HOROVOD_WITHOUT_PYTORCH', 1)
+ if '~tensorflow' in self.spec:
+ env.set('HOROVOD_WITHOUT_TENSORFLOW', 1)
+ if '~mxnet' in self.spec:
+ env.set('HOROVOD_WITHOUT_MXNET', 1)
+
+ # Distributed support
+ if '~gloo' in self.spec:
+ env.set('HOROVOD_WITHOUT_GLOO', 1)
+ if '+mpi' in self.spec:
+ env.set('HOROVOD_WITH_MPI', 1)
+ else:
+ env.set('HOROVOD_WITHOUT_MPI', 1)
+
+ # GPU support
+ if '+cuda' in self.spec:
+ env.set('HOROVOD_CUDA_HOME', self.spec['cuda'].prefix)
+ env.set('HOROVOD_CUDA_INCLUDE',
+ self.spec['cuda'].headers.directories[0])
+ env.set('HOROVOD_CUDA_LIB', self.spec['cuda'].libs.directories[0])
+ if '^nccl' in self.spec:
+ env.set('HOROVOD_NCCL_HOME', self.spec['nccl'].prefix)
+ env.set('HOROVOD_NCCL_INCLUDE',
+ self.spec['nccl'].headers.directories[0])
+ env.set('HOROVOD_NCCL_LIB', self.spec['nccl'].libs.directories[0])
+ env.set('HOROVOD_GPU_ALLREDUCE',
+ self.spec.variants['gpu_allreduce'].value.upper())
+ env.set('HOROVOD_GPU_ALLGATHER',
+ self.spec.variants['gpu_allgather'].value.upper())
+ env.set('HOROVOD_GPU_BROADCAST',
+ self.spec.variants['gpu_broadcast'].value.upper())
+ env.set('HOROVOD_ALLOW_MIXED_GPU_IMPL', 1)
diff --git a/var/spack/repos/builtin/packages/py-ipython/package.py b/var/spack/repos/builtin/packages/py-ipython/package.py
index d21d272a4b..5bfad819e7 100644
--- a/var/spack/repos/builtin/packages/py-ipython/package.py
+++ b/var/spack/repos/builtin/packages/py-ipython/package.py
@@ -18,7 +18,8 @@ class PyIpython(PythonPackage):
version('3.1.0', sha256='532092d3f06f82b1d8d1e5c37097eae19fcf025f8f6a4b670dd49c3c338d5624')
version('2.3.1', sha256='3e98466aa2fe54540bcba9aa6e01a39f40110d67668c297340c4b9514b7cc49c')
- depends_on('python@2.7:2.8,3.3:')
+ depends_on('python@2.7:2.8,3.3:', type=('build', 'run'), when='@:6')
+ depends_on('python@3.5:', type=('build', 'run'), when='@7:')
depends_on('py-backports-shutil-get-terminal-size', type=('build', 'run'), when="^python@:3.2")
depends_on('py-pathlib2', type=('build', 'run'), when="^python@:3.3")
@@ -32,5 +33,3 @@ class PyIpython(PythonPackage):
depends_on('py-pexpect', type=('build', 'run'))
depends_on('py-backcall', type=('build', 'run'), when="^python@3.3:")
depends_on('py-appnope', type=('build', 'run'), when='platform=darwin')
-
- conflicts('^python@2.7:2.8', when='@7.0.0:')
diff --git a/var/spack/repos/builtin/packages/py-ipywidgets/package.py b/var/spack/repos/builtin/packages/py-ipywidgets/package.py
index 5f211e977b..11b0989069 100644
--- a/var/spack/repos/builtin/packages/py-ipywidgets/package.py
+++ b/var/spack/repos/builtin/packages/py-ipywidgets/package.py
@@ -12,6 +12,7 @@ class PyIpywidgets(PythonPackage):
homepage = "https://github.com/ipython/ipywidgets"
url = "https://github.com/ipython/ipywidgets/archive/5.2.2.tar.gz"
+ version('7.5.1', sha256='e4253384886aabbaf10966916a2cf9ffa72551bd045d536fa2a379f14b50cec3')
version('7.4.2', sha256='f156165e8a855ed862fdf48e72700bdcd6956d089a2018c5b36d358255d45b2b')
version('5.2.2', sha256='d61ab8bb12b90981a3a6010429816d70eaa041e622043207bcb74239b664d4f3')
@@ -23,6 +24,11 @@ class PyIpywidgets(PythonPackage):
depends_on('py-traitlets@4.2.1:', type=('build', 'run'))
depends_on('py-traitlets@4.3.1:', type=('build', 'run'), when='@6:')
depends_on('py-nbformat@4.2.0:', type=('build', 'run'), when='@6:')
- depends_on('py-widgetsnbextension@3.4.0:3.4.999', type=('build', 'run'), when='@6:')
+ depends_on('py-widgetsnbextension@1.2.6:1.9', type=('build', 'run'),
+ when='@5.2.2')
+ depends_on('py-widgetsnbextension@3.4.0:3.4.999', type=('build', 'run'),
+ when='@7.4.2')
+ depends_on('py-widgetsnbextension@3.5.0:3.5.999', type=('build', 'run'),
+ when='@7.5.1')
depends_on('py-mock', type='test', when='^python@2.7:2.8')
depends_on('py-nose', type='test')
diff --git a/var/spack/repos/builtin/packages/py-jupyter-console/package.py b/var/spack/repos/builtin/packages/py-jupyter-console/package.py
index 990c8a4f7b..0f06d1422d 100644
--- a/var/spack/repos/builtin/packages/py-jupyter-console/package.py
+++ b/var/spack/repos/builtin/packages/py-jupyter-console/package.py
@@ -12,6 +12,7 @@ class PyJupyterConsole(PythonPackage):
homepage = "https://github.com/jupyter/jupyter_console"
url = "https://github.com/jupyter/jupyter_console/archive/5.0.0.tar.gz"
+ version('6.1.0', sha256='838c95c99ce52978e1660e7a30dd933dede158e2f4da1bc5fad1a8fad44570b7')
version('5.2.0', sha256='371d03aeefcf48967f2f00af4c1709f52d2a688deee33f395c6330e4e8aa171c')
version('5.0.0', sha256='e966b2b5bf9a1e8c5bd11a6335bb11f68ec585ea39b801721b2ed9dd964468fa')
version('4.1.1', sha256='0bb06a1f878d0c44c2f6f66406a80f949bcd86f3508035500af7dceffb9cc7dc')
@@ -19,8 +20,12 @@ class PyJupyterConsole(PythonPackage):
version('4.0.3', sha256='b1867a89b693f247e9089a8f367fa4f27af6eac27930cad2966054adfa7b9aa1')
version('4.0.2', sha256='116a56763899bbb12c762f865372eb52c08619ef070c237c7f1387e192bfd3df')
- depends_on('python@2.7:2.8,3.3:')
+ depends_on('python@2.7:2.8,3.3:', type=('build', 'run'))
+ depends_on('python@3.5:', type=('build', 'run'), when='@6:')
depends_on('py-jupyter-client', type=('build', 'run'))
+ depends_on('py-ipython@:5.8.0', type=('build', 'run'), when='@:5')
depends_on('py-ipython', type=('build', 'run'))
depends_on('py-ipykernel', type=('build', 'run'))
depends_on('py-pygments', type=('build', 'run'))
+ depends_on('py-prompt-toolkit@1.0.0:1.999', type=('build', 'run'), when='@:5')
+ depends_on('py-prompt-toolkit@2.0.0:2.999,3.0.2:3.0.999', type=('build', 'run'), when='@6:')
diff --git a/var/spack/repos/builtin/packages/py-librosa/package.py b/var/spack/repos/builtin/packages/py-librosa/package.py
new file mode 100644
index 0000000000..c720c12e63
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-librosa/package.py
@@ -0,0 +1,27 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyLibrosa(PythonPackage):
+ """A python package for music and audio analysis."""
+
+ homepage = "http://github.com/librosa/librosa"
+ url = "https://pypi.io/packages/source/l/librosa/librosa-0.7.2.tar.gz"
+
+ version('0.7.2', sha256='656bbda80e98e6330db1ead79cd084b13a762284834d7603fcf7cf7c0dc65f3c')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-audioread@2.0.0:', type=('build', 'run'))
+ depends_on('py-numpy@1.15.0:', type=('build', 'run'))
+ depends_on('py-scipy@1.0.0:', type=('build', 'run'))
+ depends_on('py-scikit-learn@0.14.0:0.18.999,0.19.1:', type=('build', 'run'))
+ depends_on('py-joblib@0.12:', type=('build', 'run'))
+ depends_on('py-decorator@3.0.0:', type=('build', 'run'))
+ depends_on('py-six@1.3:', type=('build', 'run'))
+ depends_on('py-resampy@0.2.2:', type=('build', 'run'))
+ depends_on('py-numba@0.43.0:', type=('build', 'run'))
+ depends_on('py-soundfile@0.9.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-llvmlite/package.py b/var/spack/repos/builtin/packages/py-llvmlite/package.py
index ad5e401963..c225e74354 100644
--- a/var/spack/repos/builtin/packages/py-llvmlite/package.py
+++ b/var/spack/repos/builtin/packages/py-llvmlite/package.py
@@ -12,6 +12,7 @@ class PyLlvmlite(PythonPackage):
homepage = "http://llvmlite.readthedocs.io/en/latest/index.html"
url = "https://pypi.io/packages/source/l/llvmlite/llvmlite-0.23.0.tar.gz"
+ version('0.31.0', sha256='22ab2b9d7ec79fab66ac8b3d2133347de86addc2e2df1b3793e523ac84baa3c8')
version('0.29.0', sha256='3adb0d4c9a17ad3dca82c7e88118babd61eeee0ee985ce31fa43ec27aa98c963')
version('0.27.1', sha256='48a1c3ae69fd8920cba153bfed8a46ac46474bc706a2100226df4abffe0000ab')
version('0.26.0', sha256='13e84fe6ebb0667233074b429fd44955f309dead3161ec89d9169145dbad2ebf')
@@ -25,7 +26,11 @@ class PyLlvmlite(PythonPackage):
# llvmlite compatibility information taken from https://github.com/numba/llvmlite#compatibility
depends_on('llvm@7.0:8.0.99', when='@0.29.0:')
- depends_on('llvm@7.0:7.99', when='@0.27.0:0.28.99')
- depends_on('llvm@6.0:6.99', when='@0.23.0:0.26.99')
- depends_on('llvm@4.0:4.99', when='@0.17.0:0.20.99')
+ depends_on('llvm@7.0:7.0.99', when='@0.27.0:0.28.99')
+ depends_on('llvm@6.0:6.0.99', when='@0.23.0:0.26.99')
+ depends_on('llvm@4.0:4.0.99', when='@0.17.0:0.20.99')
depends_on('binutils', type='build')
+
+ def setup_build_environment(self, env):
+ # Need to set PIC flag since this is linking statically with LLVM
+ env.set('CXX_FLTO_FLAGS', '-flto {0}'.format(self.compiler.pic_flag))
diff --git a/var/spack/repos/builtin/packages/py-matplotlib/package.py b/var/spack/repos/builtin/packages/py-matplotlib/package.py
index eb4f5e3da5..4e5dbf9135 100644
--- a/var/spack/repos/builtin/packages/py-matplotlib/package.py
+++ b/var/spack/repos/builtin/packages/py-matplotlib/package.py
@@ -9,12 +9,11 @@ from spack import *
class PyMatplotlib(PythonPackage):
- """matplotlib is a python 2D plotting library which produces publication
- quality figures in a variety of hardcopy formats and interactive
- environments across platforms."""
+ """Matplotlib is a comprehensive library for creating static, animated,
+ and interactive visualizations in Python."""
- homepage = "https://pypi.python.org/pypi/matplotlib"
- url = "https://pypi.io/packages/source/m/matplotlib/matplotlib-3.1.3.tar.gz"
+ homepage = "https://matplotlib.org/"
+ url = "https://pypi.io/packages/source/m/matplotlib/matplotlib-3.2.1.tar.gz"
maintainers = ['adamjstewart']
@@ -28,6 +27,8 @@ class PyMatplotlib(PythonPackage):
'matplotlib.testing.jpl_units'
]
+ version('3.2.1', sha256='ffe2f9cdcea1086fc414e82f42271ecf1976700b8edd16ca9d376189c6d93aee')
+ version('3.2.0', sha256='651d76daf9168250370d4befb09f79875daa2224a9096d97dfc3ed764c842be4')
version('3.1.3', sha256='db3121f12fb9b99f105d1413aebaeb3d943f269f3d262b45586d12765866f0c6')
version('3.1.2', sha256='8e8e2c2fe3d873108735c6ee9884e6f36f467df4a143136209cff303b183bada')
version('3.1.1', sha256='1febd22afe1489b13c6749ea059d392c03261b2950d1d45c17e3aed812080c93')
@@ -84,7 +85,7 @@ class PyMatplotlib(PythonPackage):
depends_on('py-cycler@0.10:', type=('build', 'run'))
depends_on('py-python-dateutil@2.1:', type=('build', 'run'))
depends_on('py-kiwisolver@1.0.1:', type=('build', 'run'), when='@2.2.0:')
- depends_on('py-pyparsing', type=('build', 'run'))
+ depends_on('py-pyparsing@2.0.3,2.0.5:2.1.1,2.1.3:2.1.5,2.1.7:', type=('build', 'run'))
depends_on('py-pytz', type=('build', 'run'), when='@:2')
depends_on('py-subprocess32', type=('build', 'run'), when='^python@:2.7')
depends_on('py-functools32', type=('build', 'run'), when='@:2.0.999 ^python@2.7')
diff --git a/var/spack/repos/builtin/packages/py-merlin/package.py b/var/spack/repos/builtin/packages/py-merlin/package.py
index 7ae05a8014..c4185e9193 100644
--- a/var/spack/repos/builtin/packages/py-merlin/package.py
+++ b/var/spack/repos/builtin/packages/py-merlin/package.py
@@ -7,15 +7,30 @@ from spack import *
class PyMerlin(PythonPackage):
- """A custom version of Phillip J. Eby's setuptools."""
+ """Merlin Workflow for HPC."""
- homepage = "https://pypi.org/project/merlin/"
- url = "https://pypi.io/packages/source/m/merlin/merlin-1.8.tar.gz"
+ homepage = "https://github.com/LLNL/merlin"
+ url = "https://pypi.io/packages/source/m/merlin/merlin-1.4.1.tar.gz"
+ git = "https://github.com/LLNL/merlin.git"
- version('1.8', sha256='a1ba9c13c74daa1724dd3820f1c241d7594d487b11f35347606986028c1881fd')
+ version('1.4.1', sha256='9d515cfdbcde2443892afd92b78dbc5bf2aed2060ed3a336e683188e015bca7c')
+ version('master', branch='master')
+ version('develop', branch='develop')
- depends_on('python@:2', type=('build', 'run'))
+ depends_on('python@3.6:', type=('build', 'run'))
+ depends_on('py-setuptools', type=('build', 'run'))
- def test(self):
- # Unit tests are missing from tarball
- pass
+ depends_on('py-pytest', type='test')
+
+ depends_on('py-cached-property', type=('build', 'run'))
+ depends_on('py-celery@4.3.0:+redis', type=('build', 'run'))
+ depends_on('py-coloredlogs@10.0:', type=('build', 'run'))
+ depends_on('py-cryptography', type=('build', 'run'))
+ depends_on('py-importlib-resources', when="^python@3.0:3.6.99", type=('build', 'run'))
+ depends_on('py-maestrowf@1.1.7dev0:', when="@1.2.0:", type=('build', 'run'))
+ depends_on('py-maestrowf@1.1.6:', when="@:1.1.99", type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-parse', type=('build', 'run'))
+ depends_on('py-psutil@5.1.0:', type=('build', 'run'))
+ depends_on('py-pyyaml@5.1.2:', type=('build', 'run'))
+ depends_on('py-tabulate', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-merlinwf/package.py b/var/spack/repos/builtin/packages/py-merlinwf/package.py
deleted file mode 100644
index 2082e77997..0000000000
--- a/var/spack/repos/builtin/packages/py-merlinwf/package.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright 2013-2019 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 import *
-
-
-class PyMerlinwf(PythonPackage):
- """Merlin Workflow for HPC."""
-
- homepage = "https://github.com/LLNL/merlin"
- url = "https://pypi.io/packages/source/m/merlinwf/merlinwf-1.2.3.tar.gz"
- git = "https://github.com/LLNL/merlin.git"
-
- version('1.2.3', sha256='6b13a315f3e8e2894ea05d9cc072639f02eaf71ae0fdbd2bafebd1c20c8470ab')
- version('1.1.1', sha256='306055a987e42a79ce348a3f9d71293ed8a9b7f5909c26b6fd233d6a176fff6d')
- version('1.0.5', sha256='d66f50eac84ff9d7aa484f2d9655dc60f0352196d333284d81b6623a6f0aa180')
- version('master', branch='master')
- version('develop', branch='develop')
-
- depends_on('python@3.6:', type=('build', 'run'))
- depends_on('py-setuptools', type=('build', 'run'))
-
- depends_on('py-pytest', type='test')
-
- depends_on('py-cached-property', type=('build', 'run'))
- depends_on('py-celery@4.3.0:+redis', type=('build', 'run'))
- depends_on('py-coloredlogs@10.0:', type=('build', 'run'))
- depends_on('py-cryptography', type=('build', 'run'))
- depends_on('py-importlib-resources', when="^python@3.0:3.6.99", type=('build', 'run'))
- depends_on('py-maestrowf@1.1.7dev0:', when="@1.2.0:", type=('build', 'run'))
- depends_on('py-maestrowf@1.1.6:', when="@:1.1.99", type=('build', 'run'))
- depends_on('py-numpy', type=('build', 'run'))
- depends_on('py-parse', type=('build', 'run'))
- depends_on('py-psutil@5.1.0:', type=('build', 'run'))
- depends_on('py-pyyaml@5.1.2:', type=('build', 'run'))
- depends_on('py-tabulate', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-networkx/package.py b/var/spack/repos/builtin/packages/py-networkx/package.py
index da616eefd4..04f82dac03 100644
--- a/var/spack/repos/builtin/packages/py-networkx/package.py
+++ b/var/spack/repos/builtin/packages/py-networkx/package.py
@@ -9,16 +9,29 @@ from spack import *
class PyNetworkx(PythonPackage):
"""NetworkX is a Python package for the creation, manipulation, and study
of the structure, dynamics, and functions of complex networks."""
+
homepage = "http://networkx.github.io/"
- url = "https://pypi.io/packages/source/n/networkx/networkx-1.11.tar.gz"
+ url = "https://pypi.io/packages/source/n/networkx/networkx-2.4.tar.gz"
- version('2.2', sha256='45e56f7ab6fe81652fb4bc9f44faddb0e9025f469f602df14e3b2551c2ea5c8b',
- url='https://pypi.io/packages/source/n/networkx/networkx-2.2.zip')
- version('2.1', sha256='64272ca418972b70a196cb15d9c85a5a6041f09a2f32e0d30c0255f25d458bb1',
- url='https://pypi.io/packages/source/n/networkx/networkx-2.1.zip')
+ version('2.4', sha256='f8f4ff0b6f96e4f9b16af6b84622597b5334bf9cae8cf9b2e42e7985d5c95c64')
+ version('2.3', sha256='8311ddef63cf5c5c5e7c1d0212dd141d9a1fe3f474915281b73597ed5f1d4e3d')
+ version('2.2', sha256='45e56f7ab6fe81652fb4bc9f44faddb0e9025f469f602df14e3b2551c2ea5c8b')
+ version('2.1', sha256='64272ca418972b70a196cb15d9c85a5a6041f09a2f32e0d30c0255f25d458bb1')
+ version('2.0', sha256='cd5ff8f75d92c79237f067e2f0876824645d37f017cfffa5b7c9678cae1454aa')
version('1.11', sha256='0d0e70e10dfb47601cbb3425a00e03e2a2e97477be6f80638fef91d54dd1e4b8')
version('1.10', sha256='ced4095ab83b7451cec1172183eff419ed32e21397ea4e1971d92a5808ed6fb8')
- depends_on('py-decorator', type=('build', 'run'))
- depends_on('py-decorator@4.1.0:', type=('build', 'run'), when='@2.1:')
+ depends_on('python@2.7:', type=('build', 'run'))
+ depends_on('python@3.5:', type=('build', 'run'), when='@2.3:')
depends_on('py-setuptools', type='build')
+ depends_on('py-decorator@3.4.0:', type=('build', 'run'))
+ depends_on('py-decorator@4.1.0:', type=('build', 'run'), when='@2.0:')
+ depends_on('py-decorator@4.3.0:', type=('build', 'run'), when='@2.2:')
+
+ def url_for_version(self, version):
+ ext = 'tar.gz'
+ if Version('2.0') <= version <= Version('2.3'):
+ ext = 'zip'
+
+ url = 'https://pypi.io/packages/source/n/networkx/networkx-{0}.{1}'
+ return url.format(version, ext)
diff --git a/var/spack/repos/builtin/packages/py-numba/package.py b/var/spack/repos/builtin/packages/py-numba/package.py
index a6f4175e07..c3c288a4ae 100644
--- a/var/spack/repos/builtin/packages/py-numba/package.py
+++ b/var/spack/repos/builtin/packages/py-numba/package.py
@@ -12,18 +12,22 @@ class PyNumba(PythonPackage):
homepage = "https://numba.pydata.org/"
url = "https://pypi.io/packages/source/n/numba/numba-0.35.0.tar.gz"
+ version('0.48.0', sha256='9d21bc77e67006b5723052840c88cc59248e079a907cc68f1a1a264e1eaba017')
version('0.40.1', sha256='52d046c13bcf0de79dbfb936874b7228f141b9b8e3447cc35855e9ad3e12aa33')
version('0.35.0', sha256='11564937757605bee590c5758c73cfe9fd6d569726b56d970316a6228971ecc3')
+ depends_on('python@3.6:', type=('build', 'run'), when='@0.48.0:')
depends_on('python@3.3:3.7.9999', type=('build', 'run'), when='@0.40.1:')
depends_on('python@3.3:3.6.9999', type=('build', 'run'), when='@:0.35.0')
+ depends_on('py-numpy@1.15:', type=('build', 'run'), when='@0.48.0:')
depends_on('py-numpy@1.10:1.99', type=('build', 'run'))
- depends_on('py-setuptools', type='build')
+ depends_on('py-setuptools', type=('build', 'run'))
# Note: As of 1 Nov 2018, 0.25 was the latest version of py-llvmlite.
# That's why it was chosen as an upper bound in the following depends_on
# calls. If newer versions maintain backwards compatibility, the calls
# can be updated accordingly.
+ depends_on('py-llvmlite@0.31.0:0.32.0', type=('build', 'run'), when='@0.48.0')
depends_on('py-llvmlite@0.25:', type=('build', 'run'), when='@0.40.1:')
depends_on('py-llvmlite@0.20:0.25', type=('build', 'run'), when='@0.35.1')
diff --git a/var/spack/repos/builtin/packages/py-numpy/package.py b/var/spack/repos/builtin/packages/py-numpy/package.py
index c685a6fb4c..639ff48d8e 100644
--- a/var/spack/repos/builtin/packages/py-numpy/package.py
+++ b/var/spack/repos/builtin/packages/py-numpy/package.py
@@ -16,7 +16,7 @@ class PyNumpy(PythonPackage):
number capabilities"""
homepage = "https://numpy.org/"
- url = "https://pypi.io/packages/source/n/numpy/numpy-1.18.1.zip"
+ url = "https://pypi.io/packages/source/n/numpy/numpy-1.18.2.zip"
git = "https://github.com/numpy/numpy.git"
maintainers = ['adamjstewart']
@@ -30,6 +30,7 @@ class PyNumpy(PythonPackage):
]
version('master', branch='master')
+ version('1.18.2', sha256='e7894793e6e8540dbeac77c87b489e331947813511108ae097f1715c018b8f3d')
version('1.18.1', sha256='b6ff59cee96b454516e47e7721098e6ceebef435e3e21ac2d6c3b8b02628eb77')
version('1.18.0', sha256='a9d72d9abaf65628f0f31bbb573b7d9304e43b1e6bbae43149c17737a42764c4')
version('1.17.5', sha256='16507ba6617f62ae3c6ab1725ae6f550331025d4d9a369b83f6d5a470446c342')
diff --git a/var/spack/repos/builtin/packages/py-pomegranate/package.py b/var/spack/repos/builtin/packages/py-pomegranate/package.py
new file mode 100644
index 0000000000..91085ba554
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pomegranate/package.py
@@ -0,0 +1,23 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyPomegranate(PythonPackage):
+ """Fast, flexible and easy to use probabilistic modelling in Python."""
+
+ homepage = "https://github.com/jmschrei/pomegranate"
+ url = "https://pypi.io/packages/source/p/pomegranate/pomegranate-0.12.0.tar.gz"
+
+ version('0.12.0', sha256='8b00c88f7cf9cad8d38ea00ea5274821376fefb217a1128afe6b1fcac54c975a')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cython@0.22.1:', type='build')
+ depends_on('py-numpy@1.8.0:', type=('build', 'run'))
+ depends_on('py-joblib@0.9.0b4:', type=('build', 'run'))
+ depends_on('py-networkx@2.0:', type=('build', 'run'))
+ depends_on('py-scipy@0.17.0:', type=('build', 'run'))
+ depends_on('py-pyyaml', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pycairo/package.py b/var/spack/repos/builtin/packages/py-pycairo/package.py
index 7a373609cd..a8838cfa19 100644
--- a/var/spack/repos/builtin/packages/py-pycairo/package.py
+++ b/var/spack/repos/builtin/packages/py-pycairo/package.py
@@ -11,14 +11,16 @@ class PyPycairo(PythonPackage):
"""Pycairo is a set of Python bindings for the cairo graphics library."""
homepage = "https://www.cairographics.org/pycairo/"
- url = "https://github.com/pygobject/pycairo/releases/download/v1.17.1/pycairo-1.17.1.tar.gz"
- url = "https://files.pythonhosted.org/packages/68/76/340ff847897296b2c8174dfa5a5ec3406e3ed783a2abac918cf326abad86/pycairo-1.17.1.tar.gz"
+ url = "https://pypi.io/packages/source/p/pycairo/pycairo-1.17.1.tar.gz"
+ version('1.18.1', sha256='70172e58b6bad7572a3518c26729b074acdde15e6fee6cbab6d3528ad552b786')
version('1.17.1', sha256='0f0a35ec923d87bc495f6753b1e540fd046d95db56a35250c44089fbce03b698')
- depends_on('cairo@1.2.0:')
+ depends_on('cairo@1.13.1:')
depends_on('pkgconfig', type='build')
depends_on('py-setuptools', type='build')
+ depends_on('python@2.7:2.8,3.3:', when='@:1.17.1', type=('build', 'run'))
+ depends_on('python@2.7:2.8,3.4:', when='@1.18.1:', type=('build', 'run'))
@run_after('install')
def post_install(self):
diff --git a/var/spack/repos/builtin/packages/py-pycifrw/package.py b/var/spack/repos/builtin/packages/py-pycifrw/package.py
new file mode 100644
index 0000000000..c16a3b2894
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pycifrw/package.py
@@ -0,0 +1,18 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyPycifrw(PythonPackage):
+ """Python library for interacting with Crystallographic Information
+ Framework (CIF) files."""
+
+ homepage = "https://bitbucket.org/jamesrhester/pycifrw/src/development/"
+ url = "https://pypi.io/packages/source/P/PyCifRW/PyCifRW-4.4.1.tar.gz"
+
+ version('4.4.1', sha256='cef7662f475e0eb78a55c2d55774d474e888c96b0539e5f08550afa902cdc4e1')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-pycosat/package.py b/var/spack/repos/builtin/packages/py-pycosat/package.py
new file mode 100644
index 0000000000..ac10891cef
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pycosat/package.py
@@ -0,0 +1,20 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyPycosat(PythonPackage):
+ """PicoSAT is a popular SAT solver written by Armin Biere in pure C. This
+ package provides efficient Python bindings to picosat on the C level, i.e.
+ when importing pycosat, the picosat solver becomes part of the Python
+ process itself. For ease of deployment, the picosat source (namely
+ picosat.c and picosat.h) is included in this project. These files have been
+ extracted from the picosat source (picosat-965.tar.gz)."""
+
+ homepage = "https://github.com/ContinuumIO/pycosat"
+ url = "https://pypi.io/packages/source/p/pycosat/pycosat-0.6.3.zip"
+
+ version('0.6.3', sha256='4c99874946a7e939bb941bbb019dd2c20e6068e3107c91366e7779c69d70e0ed')
diff --git a/var/spack/repos/builtin/packages/py-pyfftw/package.py b/var/spack/repos/builtin/packages/py-pyfftw/package.py
index f021516857..41d9db5b74 100644
--- a/var/spack/repos/builtin/packages/py-pyfftw/package.py
+++ b/var/spack/repos/builtin/packages/py-pyfftw/package.py
@@ -13,11 +13,12 @@ class PyPyfftw(PythonPackage):
homepage = "http://hgomersall.github.com/pyFFTW"
url = "https://pypi.io/packages/source/p/pyFFTW/pyFFTW-0.10.4.tar.gz"
+ version('0.12.0', sha256='60988e823ca75808a26fd79d88dbae1de3699e72a293f812aa4534f8a0a58cb0')
version('0.11.1', sha256='05ea28dede4c3aaaf5c66f56eb0f71849d0d50f5bc0f53ca0ffa69534af14926')
version('0.10.4', sha256='739b436b7c0aeddf99a48749380260364d2dc027cf1d5f63dafb5f50068ede1a')
depends_on('fftw')
- depends_on('py-setuptools', type='build')
- depends_on('py-cython', type='build')
- depends_on('py-numpy@1.6:', type=('build', 'run'))
- depends_on('py-scipy@0.12.0:', type=('build', 'run'))
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cython@0.29:0.999', type='build')
+ depends_on('py-numpy@1.6:', type=('build', 'run'), when='@:0.10.4')
+ depends_on('py-numpy@1.10:1.999', type=('build', 'run'), when='@0.11.0:')
diff --git a/var/spack/repos/builtin/packages/py-pymc3/package.py b/var/spack/repos/builtin/packages/py-pymc3/package.py
new file mode 100644
index 0000000000..5f4fbce9a6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pymc3/package.py
@@ -0,0 +1,29 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyPymc3(PythonPackage):
+ """PyMC3 is a Python package for Bayesian statistical modeling and
+ Probabilistic Machine Learning focusing on advanced Markov chain Monte
+ Carlo (MCMC) and variational inference (VI) algorithms. Its flexibility and
+ extensibility make it applicable to a large suite of problems."""
+
+ homepage = "http://github.com/pymc-devs/pymc3"
+ url = "https://pypi.io/packages/source/p/pymc3/pymc3-3.8.tar.gz"
+
+ version('3.8', sha256='1bb2915e4a29877c681ead13932b0b7d276f7f496e9c3f09ba96b977c99caf00')
+
+ depends_on('python@3.5.4:', type=('build', 'run'))
+ depends_on('py-setuptools', type='build')
+ depends_on('py-arviz@0.4.1:', type=('build', 'run'))
+ depends_on('py-theano@1.0.4:', type=('build', 'run'))
+ depends_on('py-numpy@1.13.0:', type=('build', 'run'))
+ depends_on('py-scipy@0.18.1:', type=('build', 'run'))
+ depends_on('py-pandas@0.18.0:', type=('build', 'run'))
+ depends_on('py-patsy@0.4.0:', type=('build', 'run'))
+ depends_on('py-tqdm@4.8.4:', type=('build', 'run'))
+ depends_on('py-h5py@2.7.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pyqt4/package.py b/var/spack/repos/builtin/packages/py-pyqt4/package.py
index c0e3ae1085..d1a90042d9 100644
--- a/var/spack/repos/builtin/packages/py-pyqt4/package.py
+++ b/var/spack/repos/builtin/packages/py-pyqt4/package.py
@@ -34,6 +34,7 @@ class PyPyqt4(SIPPackage):
# Supposedly can also be built with Qt 5 compatibility layer
depends_on('qt@:4')
depends_on('qscintilla', when='+qsci')
+ depends_on('py-sip module=PyQt4.sip')
# For building Qscintilla python bindings
resource(name='qscintilla',
@@ -68,7 +69,7 @@ class PyPyqt4(SIPPackage):
pydir = join_path(site_packages_dir, 'PyQt4')
python = self.spec['python'].command
python('configure.py',
- '--sip=' + self.prefix.bin.sip,
+ '--sip=' + self.spec['py-sip'].prefix.bin.sip,
'--qsci-incdir=' +
self.spec['qscintilla'].prefix.include,
'--qsci-libdir=' + self.spec['qscintilla'].prefix.lib,
@@ -76,7 +77,10 @@ class PyPyqt4(SIPPackage):
'--apidir=' + self.prefix.share.qsci,
'--destdir=' + pydir,
'--pyqt-sipdir=' + self.prefix.share.sip.PyQt4,
- '--sip-incdir=' + python_include_dir,
+ '--sip-incdir=' +
+ join_path(self.spec['py-sip'].prefix.include,
+ 'python' +
+ str(self.spec['python'].version.up_to(2))),
'--stubsdir=' + pydir)
# Fix build errors
diff --git a/var/spack/repos/builtin/packages/py-pyqt5/package.py b/var/spack/repos/builtin/packages/py-pyqt5/package.py
index f70461a1b7..bc37d4dcab 100644
--- a/var/spack/repos/builtin/packages/py-pyqt5/package.py
+++ b/var/spack/repos/builtin/packages/py-pyqt5/package.py
@@ -26,6 +26,7 @@ class PyPyqt5(SIPPackage):
'PyQt5.QtXmlPatterns'
]
+ version('5.13.1', sha256='54b7f456341b89eeb3930e786837762ea67f235e886512496c4152ebe106d4af')
version('5.13.0', sha256='0cdbffe5135926527b61cc3692dd301cd0328dd87eeaf1313e610787c46faff9')
version('5.12.3', sha256='0db0fa37debab147450f9e052286f7a530404e2aaddc438e97a7dcdf56292110')
@@ -36,7 +37,8 @@ class PyPyqt5(SIPPackage):
depends_on('qt@5:+opengl')
depends_on('python@2.6:', type=('build', 'run'))
depends_on('py-enum34', type=('build', 'run'), when='^python@:3.3')
-
+ depends_on('py-sip module=PyQt5.sip', type=('build', 'run'))
+ depends_on('py-sip@:4.19.18 module=PyQt5.sip', type=('build', 'run'), when='@:5.13.0')
depends_on('qscintilla', when='+qsci')
# For building Qscintilla python bindings
@@ -52,7 +54,10 @@ class PyPyqt5(SIPPackage):
args = [
'--pyuic5-interpreter', self.spec['python'].command.path,
'--sipdir', self.prefix.share.sip.PyQt5,
- '--stubsdir', join_path(site_packages_dir, 'PyQt5'),
+ '--stubsdir', join_path(
+ self.prefix,
+ self.spec['python'].package.site_packages_dir,
+ 'PyQt5'),
]
if '+qsci' in self.spec:
args.extend(['--qsci-api-destdir', self.prefix.share.qsci])
@@ -66,10 +71,13 @@ class PyPyqt5(SIPPackage):
'spack-resource-qscintilla/QScintilla_gpl-' +
str(self.spec['qscintilla'].version), 'Python')
with working_dir(rsrc_py_path):
- pydir = join_path(site_packages_dir, 'PyQt5')
+ pydir = join_path(
+ self.prefix,
+ self.spec['python'].package.site_packages_dir,
+ 'PyQt5')
python = self.spec['python'].command
python('configure.py', '--pyqt=PyQt5',
- '--sip=' + self.prefix.bin.sip,
+ '--sip=' + self.spec['py-sip'].prefix.bin.sip,
'--qsci-incdir=' +
self.spec['qscintilla'].prefix.include,
'--qsci-libdir=' + self.spec['qscintilla'].prefix.lib,
@@ -77,7 +85,10 @@ class PyPyqt5(SIPPackage):
'--apidir=' + self.prefix.share.qsci,
'--destdir=' + pydir,
'--pyqt-sipdir=' + self.prefix.share.sip.PyQt5,
- '--sip-incdir=' + python_include_dir,
+ '--sip-incdir=' +
+ join_path(self.spec['py-sip'].prefix.include,
+ 'python' +
+ str(self.spec['python'].version.up_to(2))),
'--stubsdir=' + pydir)
# Fix build errors
diff --git a/var/spack/repos/builtin/packages/py-pythia/package.py b/var/spack/repos/builtin/packages/py-pythia/package.py
deleted file mode 100644
index 721d7470fa..0000000000
--- a/var/spack/repos/builtin/packages/py-pythia/package.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2013-2020 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 import *
-
-
-class PyPythia(PythonPackage):
- """Pythia refers to the Pyre framework and a collection of packages that
- interact with it, such as an interface to the ACIS solid modelling package.
- """
-
- homepage = "https://geodynamics.org/cig/software/pythia/"
- url = "https://geodynamics.org/cig/software/github/pythia/v0.8.1.18/pythia-0.8.1.18.tar.gz"
-
- version('0.8.1.18', sha256='f6025e6d70046dc71e375eded3d731506f8dd79e2e53b7e1436754439dcdef1e')
-
- depends_on('python@:2', type=('build', 'run'))
- depends_on('py-merlin', type='build')
diff --git a/var/spack/repos/builtin/packages/py-python-lzo/package.py b/var/spack/repos/builtin/packages/py-python-lzo/package.py
new file mode 100644
index 0000000000..acf60351b7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-python-lzo/package.py
@@ -0,0 +1,18 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyPythonLzo(PythonPackage):
+ """This module provides Python bindings for the LZO data compression
+ library."""
+
+ homepage = "https://github.com/jd-boyd/python-lzo"
+ url = "https://pypi.io/packages/source/p/python-lzo/python-lzo-1.12.tar.gz"
+
+ version('1.12', sha256='97a8e46825e8f1abd84c2a3372bc09adae9745a5be5d3af2692cd850dac35345')
+
+ depends_on('lzo')
diff --git a/var/spack/repos/builtin/packages/py-qtconsole/package.py b/var/spack/repos/builtin/packages/py-qtconsole/package.py
index 9fd8475662..046e04c2e5 100644
--- a/var/spack/repos/builtin/packages/py-qtconsole/package.py
+++ b/var/spack/repos/builtin/packages/py-qtconsole/package.py
@@ -17,7 +17,7 @@ class PyQtconsole(PythonPackage):
variant('doc', default=False, description='Build documentation')
- depends_on('python@2.7:2.8,3.3:', type=('build', 'run'))
+ depends_on('python@2.7:2.8,3.3:', type=('build', 'run'))
depends_on('py-ipykernel@4.1:', type=('build', 'run'))
depends_on('py-jupyter-client@4.1:', type=('build', 'run'))
depends_on('py-jupyter-core', type=('build', 'run'))
@@ -25,5 +25,6 @@ class PyQtconsole(PythonPackage):
depends_on('py-traitlets', type=('build', 'run'))
depends_on('py-ipython-genutils', type=('build', 'run'), when='@4.5.1:')
depends_on('py-sphinx@1.3:', type=('build', 'run'), when='+docs')
+ depends_on('py-pyqt5', type='run')
depends_on('py-mock', type='test', when='^python@2.7:2.8')
diff --git a/var/spack/repos/builtin/packages/py-resampy/package.py b/var/spack/repos/builtin/packages/py-resampy/package.py
new file mode 100644
index 0000000000..35249c8acc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-resampy/package.py
@@ -0,0 +1,21 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyResampy(PythonPackage):
+ """Efficient sample rate conversion in python"""
+
+ homepage = "https://github.com/bmcfee/resampy"
+ url = "https://pypi.io/packages/source/r/resampy/resampy-0.2.2.tar.gz"
+
+ version('0.2.2', sha256='62af020d8a6674d8117f62320ce9470437bb1d738a5d06cd55591b69b463929e')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy@1.10:', type=('build', 'run'))
+ depends_on('py-scipy@0.13:', type=('build', 'run'))
+ depends_on('py-numba@0.32:', type=('build', 'run'))
+ depends_on('py-six@1.3:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-resultsfile/package.py b/var/spack/repos/builtin/packages/py-resultsfile/package.py
new file mode 100644
index 0000000000..6f00a3ab1d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-resultsfile/package.py
@@ -0,0 +1,22 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyResultsfile(PythonPackage):
+ """Python module to read output files of quantum chemistry programs"""
+
+ homepage = "https://gitlab.com/scemama/resultsFile"
+ url = "https://gitlab.com/scemama/resultsFile/-/archive/v1.0/resultsFile-v1.0.tar.gz"
+ git = "https://gitlab.com/scemama/resultsFile.git"
+
+ maintainers = ['scemama']
+
+ version('2.0', sha256='2a34208254e4bea155695690437f6a59bf5f7b0ddb421d6c1a2d377510f018f7')
+ version('1.0', sha256='e029054b2727131da9684fa2ec9fb8b6a3225dc7f648216a9390267b2d5d60c3')
+
+ depends_on('python@2.7:2.8.999', type=('build', 'run'), when='@1.0:1.999')
+ depends_on('python@3:', type=('build', 'run'), when='@2.0:')
diff --git a/var/spack/repos/builtin/packages/py-rseqc/package.py b/var/spack/repos/builtin/packages/py-rseqc/package.py
index 1b3ac0a88a..fa9fc581b4 100644
--- a/var/spack/repos/builtin/packages/py-rseqc/package.py
+++ b/var/spack/repos/builtin/packages/py-rseqc/package.py
@@ -14,10 +14,16 @@ class PyRseqc(PythonPackage):
homepage = "http://rseqc.sourceforge.net"
url = "https://pypi.io/packages/source/R/RSeQC/RSeQC-2.6.4.tar.gz"
+ version('3.0.1', sha256='d5f4cb2c24a7348929f5c4947d84c5869e8cd2cba5ba5248d991ebb37c4c6b3d')
version('2.6.4', sha256='e11df661bda1c24fc950f0bce06f586a68ab5f4a2c356f43e4a0dfdc1e184315')
+ depends_on('python@2.7:2.8', type=('build', 'run'), when='@:2')
+ depends_on('python@3.5:', type=('build', 'run'), when='@3:')
depends_on('py-setuptools', type='build')
- depends_on('py-bx-python', type=('build', 'run'))
- depends_on('py-numpy', type=('build', 'run'))
- depends_on('py-pysam', type=('build', 'run'))
- depends_on('r', type=('build', 'run'))
+ depends_on('py-nose@0.10.4:', type='build')
+ depends_on('py-cython@0.17:', type=('build', 'run'))
+ depends_on('py-bx-python', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-pysam', type=('build', 'run'))
+ depends_on('py-pybigwig', type=('build', 'run'), when='@3:')
+ depends_on('r', type='run')
diff --git a/var/spack/repos/builtin/packages/py-sentencepiece/package.py b/var/spack/repos/builtin/packages/py-sentencepiece/package.py
new file mode 100644
index 0000000000..9d9552a47b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-sentencepiece/package.py
@@ -0,0 +1,24 @@
+# Copyright 2013-2020 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)
+
+
+class PySentencepiece(PythonPackage):
+ """Unsupervised text tokenizer for Neural Network-based text generation.
+
+ These are the Python bindings."""
+
+ homepage = "https://github.com/google/sentencepiece/blob/master/python/README.md"
+ url = "https://github.com/google/sentencepiece/archive/v0.1.85.tar.gz"
+
+ maintainers = ['adamjstewart']
+
+ version('0.1.85', sha256='dd4956287a1b6af3cbdbbd499b7227a859a4e3f41c9882de5e6bdd929e219ae6')
+
+ depends_on('sentencepiece')
+ depends_on('sentencepiece@0.1.85', when='@0.1.85')
+ depends_on('pkgconfig', type='build')
+ depends_on('py-setuptools', type='build')
+
+ build_directory = 'python'
diff --git a/var/spack/repos/builtin/packages/py-setproctitle/package.py b/var/spack/repos/builtin/packages/py-setproctitle/package.py
new file mode 100644
index 0000000000..972e595cad
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-setproctitle/package.py
@@ -0,0 +1,18 @@
+# Copyright 2013-2020 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 import *
+
+
+class PySetproctitle(PythonPackage):
+ """The setproctitle module allows a process to change its title (as
+ displayed by system tools such as ps and top)."""
+
+ homepage = "https://github.com/dvarrazzo/py-setproctitle"
+ url = "https://pypi.io/packages/source/s/setproctitle/setproctitle-1.1.10.tar.gz"
+
+ version('1.1.10', sha256='6283b7a58477dd8478fbb9e76defb37968ee4ba47b05ec1c053cb39638bd7398')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-simplejson/package.py b/var/spack/repos/builtin/packages/py-simplejson/package.py
index ea8799b75a..7206102d2e 100644
--- a/var/spack/repos/builtin/packages/py-simplejson/package.py
+++ b/var/spack/repos/builtin/packages/py-simplejson/package.py
@@ -13,6 +13,7 @@ class PySimplejson(PythonPackage):
homepage = "https://github.com/simplejson/simplejson"
url = "https://pypi.io/packages/source/s/simplejson/simplejson-3.10.0.tar.gz"
+ version('3.16.0', sha256='b1f329139ba647a9548aa05fb95d046b4a677643070dc2afc05fa2e975d09ca5')
version('3.10.0', sha256='953be622e88323c6f43fad61ffd05bebe73b9fd9863a46d68b052d2aa7d71ce2')
version('3.9.0', sha256='e9abeee37424f4bfcd27d001d943582fb8c729ffc0b74b72bd0e9b626ed0d1b6')
version('3.8.2', sha256='d58439c548433adcda98e695be53e526ba940a4b9c44fb9a05d92cd495cdd47f')
diff --git a/var/spack/repos/builtin/packages/py-sip/package.py b/var/spack/repos/builtin/packages/py-sip/package.py
index 09c6b743b1..d454f05740 100644
--- a/var/spack/repos/builtin/packages/py-sip/package.py
+++ b/var/spack/repos/builtin/packages/py-sip/package.py
@@ -4,6 +4,7 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
+import os
class PySip(Package):
@@ -16,6 +17,9 @@ class PySip(Package):
hg = "https://www.riverbankcomputing.com/hg/sip"
version('develop', hg=hg) # wasn't actually able to clone this
+ version('4.19.21', sha256='6af9979ab41590e8311b8cc94356718429ef96ba0e3592bdd630da01211200ae')
+ version('4.19.20', sha256='04cc2f87ac97e8718d8e1ef036e3ec26050ab44c21f9277618d5b67432fcbfd6')
+ version('4.19.19', sha256='5436b61a78f48c7e8078e93a6b59453ad33780f80c644e5f3af39f94be1ede44')
version('4.19.18', sha256='c0bd863800ed9b15dcad477c4017cdb73fa805c25908b0240564add74d697e1e')
version('4.19.15', sha256='2b5c0b2c0266b467b365c21376d50dde61a3236722ab87ff1e8dacec283eb610')
version('4.19.13', sha256='e353a7056599bf5fbd5d3ff9842a6ab2ea3cf4e0304a0f925ec5862907c0d15e')
@@ -53,3 +57,14 @@ class PySip(Package):
def install(self, spec, prefix):
make('install')
+
+ @run_after('install')
+ def extend_path_setup(self):
+ # See github issue #14121 and PR #15297
+ module = self.spec.variants['module'].value
+ if module != 'sip':
+ module = module.split('.')[0]
+ with working_dir(site_packages_dir):
+ with open(os.path.join(module, '__init__.py'), 'w') as f:
+ f.write('from pkgutil import extend_path\n')
+ f.write('__path__ = extend_path(__path__, __name__)\n')
diff --git a/var/spack/repos/builtin/packages/py-soundfile/package.py b/var/spack/repos/builtin/packages/py-soundfile/package.py
new file mode 100644
index 0000000000..aa485deca3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-soundfile/package.py
@@ -0,0 +1,23 @@
+# Copyright 2013-2020 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 import *
+
+
+class PySoundfile(PythonPackage):
+ """SoundFile is an audio library based on libsndfile, CFFI and NumPy."""
+
+ homepage = "https://github.com/bastibe/PySoundFile"
+ url = "https://pypi.io/packages/source/S/SoundFile/SoundFile-0.10.3.post1.tar.gz"
+
+ version('0.10.3.post1', sha256='490cff42650733d1832728b937fe99fa1802896f5ef4d61bcf78cf7ebecb107b')
+
+ variant('numpy', default=True,
+ description='Support for processing audio data as numpy arrays')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cffi@1.0:', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'), when='+numpy')
+ depends_on('libsndfile', type='run')
diff --git a/var/spack/repos/builtin/packages/py-tfdlpack/package.py b/var/spack/repos/builtin/packages/py-tfdlpack/package.py
new file mode 100644
index 0000000000..678cc2d6db
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-tfdlpack/package.py
@@ -0,0 +1,45 @@
+# Copyright 2013-2020 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)
+
+
+class PyTfdlpack(CMakePackage):
+ """Tensorflow plugin for DLPack."""
+
+ homepage = "https://github.com/VoVAllen/tf-dlpack"
+ git = "https://github.com/VoVAllen/tf-dlpack.git"
+
+ maintainers = ['adamjstewart']
+
+ version('master', branch='master', submodules=True)
+ version('0.1.1', tag='v0.1.1', submodules=True)
+
+ variant('cuda', default=True, description='Build with CUDA support')
+
+ depends_on('cmake@3.5:', type='build')
+ depends_on('cuda', when='+cuda')
+
+ # Python dependencies
+ extends('python')
+ depends_on('py-setuptools', type='build')
+ depends_on('py-tensorflow', type=('build', 'run'))
+
+ def cmake_args(self):
+ args = ['-DPYTHON_EXECUTABLE=' + self.spec['python'].command.path]
+
+ if '+cuda' in self.spec:
+ args.append('-DUSE_CUDA=ON')
+ else:
+ args.append('-DUSE_CUDA=OFF')
+
+ return args
+
+ def install(self, spec, prefix):
+ with working_dir('python'):
+ setup_py('install', '--prefix=' + prefix,
+ '--single-version-externally-managed', '--root=/')
+
+ def setup_run_environment(self, env):
+ # Prevent TensorFlow from taking over the whole GPU
+ env.set('TF_FORCE_GPU_ALLOW_GROWTH', 'true')
diff --git a/var/spack/repos/builtin/packages/py-torch/package.py b/var/spack/repos/builtin/packages/py-torch/package.py
index e40bc840fe..c0be1176e4 100644
--- a/var/spack/repos/builtin/packages/py-torch/package.py
+++ b/var/spack/repos/builtin/packages/py-torch/package.py
@@ -105,22 +105,22 @@ class PyTorch(PythonPackage, CudaPackage):
cuda_arch_conflict = ('This version of Torch/Caffe2 only supports compute '
'capabilities ')
- conflicts('cuda_arch=none', when='+cuda+caffe2',
+ conflicts('cuda_arch=none', when='+cuda',
msg='Must specify CUDA compute capabilities of your GPU, see '
'https://developer.nvidia.com/cuda-gpus')
- conflicts('cuda_arch=52', when='@1.3.0:+cuda+caffe2',
+ conflicts('cuda_arch=52', when='@1.3.0:+cuda',
msg=cuda_arch_conflict + '>=5.3')
- conflicts('cuda_arch=50', when='@1.3.0:+cuda+caffe2',
+ conflicts('cuda_arch=50', when='@1.3.0:+cuda',
msg=cuda_arch_conflict + '>=5.3')
- conflicts('cuda_arch=35', when='@1.3.0:+cuda+caffe2',
+ conflicts('cuda_arch=35', when='@1.3.0:+cuda',
msg=cuda_arch_conflict + '>=5.3')
- conflicts('cuda_arch=32', when='@1.3.0:+cuda+caffe2',
+ conflicts('cuda_arch=32', when='@1.3.0:+cuda',
msg=cuda_arch_conflict + '>=5.3')
- conflicts('cuda_arch=30', when='@1.3.0:+cuda+caffe2',
+ conflicts('cuda_arch=30', when='@1.3.0:+cuda',
msg=cuda_arch_conflict + '>=5.3')
- conflicts('cuda_arch=30', when='@1.2.0:+cuda+caffe2',
+ conflicts('cuda_arch=30', when='@1.2.0:+cuda',
msg=cuda_arch_conflict + '>=3.2')
- conflicts('cuda_arch=20', when='@1.0.0:+cuda+caffe2',
+ conflicts('cuda_arch=20', when='@1.0.0:+cuda',
msg=cuda_arch_conflict + '>=3.0')
# Required dependencies
diff --git a/var/spack/repos/builtin/packages/py-torchtext/package.py b/var/spack/repos/builtin/packages/py-torchtext/package.py
new file mode 100644
index 0000000000..6bcae3d1e9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-torchtext/package.py
@@ -0,0 +1,24 @@
+# Copyright 2013-2020 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)
+
+
+class PyTorchtext(PythonPackage):
+ """Text utilities and datasets for PyTorch."""
+
+ homepage = "https://github.com/pytorch/text"
+ url = "https://pypi.io/packages/source/t/torchtext/torchtext-0.5.0.tar.gz"
+
+ maintainers = ['adamjstewart']
+
+ version('0.5.0', sha256='7f22e24e9b939fff56b9118c78dc07aafec8dcc67164de15b9b5ed339e4179c6')
+
+ depends_on('python@2.7:2.8,3.5:', type=('build', 'run'))
+ depends_on('py-setuptools', type='build')
+ depends_on('py-tqdm', type=('build', 'run'))
+ depends_on('py-requests', type=('build', 'run'))
+ depends_on('py-torch@0.4.0:', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-six', type=('build', 'run'))
+ depends_on('py-sentencepiece', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-tuiview/package.py b/var/spack/repos/builtin/packages/py-tuiview/package.py
index 95090a2694..9757dd2343 100644
--- a/var/spack/repos/builtin/packages/py-tuiview/package.py
+++ b/var/spack/repos/builtin/packages/py-tuiview/package.py
@@ -11,11 +11,13 @@ class PyTuiview(PythonPackage):
table manipulation abilities.
"""
- homepage = "https://bitbucket.org/chchrsc/tuiview"
- url = "https://bitbucket.org/chchrsc/tuiview/get/tuiview-1.1.7.tar.gz"
+ homepage = "https://github.com/ubarsc/tuiview"
+ url = "https://github.com/ubarsc/tuiview/releases/download/tuiview-1.2.6/tuiview-1.2.6.tar.gz"
+ version('1.2.6', sha256='61b136fa31c949d7a7a4dbf8562e6fc677d5b1845b152ec39e337f4eb2e91662')
version('1.1.7', sha256='fbf0bf29cc775357dad4f8a2f0c2ffa98bbf69d603a96353e75b321adef67573')
- depends_on("py-pyqt4", type=('build', 'run'))
+ depends_on("py-pyqt4", type=('build', 'run'), when='@:1.1.99')
+ depends_on("py-pyqt5", type=('build', 'run'), when='@1.2.0:')
depends_on("py-numpy", type=('build', 'run'))
- depends_on("gdal")
+ depends_on("gdal@1.11.0:+python")
diff --git a/var/spack/repos/builtin/packages/py-versioneer/package.py b/var/spack/repos/builtin/packages/py-versioneer/package.py
new file mode 100644
index 0000000000..d98ec6524c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-versioneer/package.py
@@ -0,0 +1,21 @@
+# Copyright 2013-2020 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 import *
+
+
+class PyVersioneer(PythonPackage):
+ """Versioneer is a tool to automatically update version strings by
+ asking your version-control system about the current tree."""
+
+ homepage = "https://github.com/warner/python-versioneer"
+ url = "https://github.com/warner/python-versioneer/archive/0.18.tar.gz"
+ git = "https://github.com/warner/python-versioneer.git"
+
+ maintainers = ['scemama']
+
+ version('0.18', sha256='cf895b67f5bc62d61c4837458069ded8f66b4e5764c19f7253c51ee27e8b3a99')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-widgetsnbextension/package.py b/var/spack/repos/builtin/packages/py-widgetsnbextension/package.py
index aa6dbb31c2..347641a8da 100644
--- a/var/spack/repos/builtin/packages/py-widgetsnbextension/package.py
+++ b/var/spack/repos/builtin/packages/py-widgetsnbextension/package.py
@@ -14,6 +14,7 @@ class PyWidgetsnbextension(PythonPackage):
version('3.5.1', sha256='079f87d87270bce047512400efd70238820751a11d2d8cb137a5a5bdbaf255c7')
version('3.4.2', sha256='fa618be8435447a017fd1bf2c7ae922d0428056cfc7449f7a8641edf76b48265')
+ version('3.4.0', sha256='c9d6e426a1d79d132b57b93b368feba2c66eb7b0fd34bdb901716b4b88e94497')
version('3.3.0', sha256='c5280a62d293735cdadc7b8884e2affcfb0488420ee09963577f042359726392')
version('1.2.6', sha256='c618cfb32978c9517caf0b4ef3aec312f8dd138577745e7b0d4abfcc7315ce51')
diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py
index 978548163b..b35584d2c9 100644
--- a/var/spack/repos/builtin/packages/python/package.py
+++ b/var/spack/repos/builtin/packages/python/package.py
@@ -31,6 +31,7 @@ class Python(AutotoolsPackage):
maintainers = ['adamjstewart']
+ version('3.8.2', sha256='e634a7a74776c2b89516b2e013dda1728c89c8149b9863b8cea21946daf9d561')
version('3.8.1', sha256='c7cfa39a43b994621b245e029769e9126caa2a93571cee2e743b213cceac35fb')
version('3.8.0', sha256='f1069ad3cae8e7ec467aa98a6565a62a48ef196cb8f1455a245a08db5e1792df')
version('3.7.6', sha256='aeee681c235ad336af116f08ab6563361a0c81c537072c1b309d6e4050aa2114', preferred=True)
diff --git a/var/spack/repos/builtin/packages/qgis/package.py b/var/spack/repos/builtin/packages/qgis/package.py
new file mode 100644
index 0000000000..4a6d6a3583
--- /dev/null
+++ b/var/spack/repos/builtin/packages/qgis/package.py
@@ -0,0 +1,217 @@
+# Copyright 2013-2019 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 import *
+
+
+class Qgis(CMakePackage):
+ """QGIS is a free and open-source cross-platform desktop geographic
+ information system application that supports viewing, editing, and
+ analysis of geospatial data.
+ """
+
+ homepage = "https://qgis.org"
+ url = "https://qgis.org/downloads/qgis-3.8.1.tar.bz2"
+
+ maintainers = ['adamjstewart', 'Sinan81']
+
+ version('3.12.0', sha256='19e9c185dfe88cad7ee6e0dcf5ab7b0bbfe1672307868a53bf771e0c8f9d5e9c')
+ # Prefer latest long term release
+ version('3.10.3', sha256='0869704df9120dd642996ff1ed50213ac8247650aa0640b62f8c9c581c05d7a7', preferred=True)
+ version('3.10.2', sha256='381cb01a8ac2f5379a915b124e9c830d727d2c67775ec49609c7153fe765a6f7')
+ version('3.10.1', sha256='466ac9fad91f266cf3b9d148f58e2adebd5b9fcfc03e6730eb72251e6c34c8ab')
+ version('3.10.0', sha256='25eb1c41d9fb922ffa337a720dfdceee43cf2d38409923f087c2010c9742f012')
+ version('3.8.3', sha256='3cca3e8483bc158cb8e972eb819a55a5734ba70f2c7da28ebc485864aafb17bd')
+ version('3.8.2', sha256='4d682f7625465a5b3596b3f7e83eddad86a60384fead9c81a6870704baffaddd')
+ version('3.8.1', sha256='d65c8e1c7471bba46f5017f261ebbef81dffb5843a24f0e7713a00f70785ea99')
+ version('3.4.15', sha256='81c93b72adbea41bd765294c0cdb09476a632d8b3f90101abc409ca9ea7fb04d')
+ version('3.4.14', sha256='e138716c7ea84011d3b28fb9c75e6a79322fb66f532246393571906a595d7261')
+
+ variant('3d', default=False, description='Build QGIS 3D library')
+ variant('analysis', default=True, description='Build QGIS analysis library')
+ variant('apidoc', default=False, description='Build QGIS API doxygen documentation')
+ variant('astyle', default=False, description='Contribute QGIS with astyle')
+ variant('bindings', default=True, description='Build Python bindings')
+ variant('clang_tidy', default=False, description='Use Clang tidy')
+ variant('core', default=True, description='Build QGIS Core')
+ variant('custom_widgets', default=False, description='Build QGIS custom widgets for Qt Designer')
+ variant('desktop', default=True, description='Build QGIS desktop')
+ variant('georeferencer', default=True, description='Build GeoReferencer plugin')
+ variant('globe', default=False, description='Build Globe plugin')
+ variant('grass7', default=False, description='Build with GRASS providers and plugin')
+ variant('gui', default=True, description='Build QGIS GUI library and everything built on top of it')
+ variant('internal_mdal', default=True, description='Build with MDAl support')
+ variant('internal_o2', default=True, description='Download and locally include source of o2 library')
+ variant('oauth2_plugin', default=True, description='Build OAuth2 authentication method plugin')
+ variant('oracle', default=False, description='Build with Oracle support')
+ variant('postgresql', default=True, description='Build with PostreSQL support')
+ variant('py_compile', default=False, description='Byte compile Python modules in staged or installed locations')
+ variant('qsciapi', default=True, description='Generate PyQGIS QScintilla2 API')
+ variant('qspatialite', default=False, description='Build QSpatialite sql driver')
+ variant('qt5serialport', default=True, description='Try Qt5SerialPort for GPS positioning')
+ variant('qtmobility', default=False, description='Build QtMobility related code')
+ variant('qtwebkit', default=False, description='Enable QtWebkit Support')
+ variant('quick', default=False, description='Build QGIS Quick library')
+ variant('qwtpolar', default=False, description='Build QwtPolar')
+ variant('server', default=False, description='Build QGIS server')
+ variant('staged_plugins', default=True, description='Stage-install core Python plugins to run from build directory')
+ variant('thread_local', default=True, description='Use std::thread_local')
+ variant('txt2tags', default=False, description='Generate PDF for txt2tags documentation')
+
+ # Ref. for dependencies:
+ # http://htmlpreview.github.io/?https://raw.github.com/qgis/QGIS/master/doc/INSTALL.html
+ # https://github.com/qgis/QGIS/blob/master/INSTALL
+ depends_on('qt+dbus')
+ depends_on('proj@4.4.0:')
+ depends_on('geos@3.4.0:')
+ depends_on('sqlite@3.0.0: +column_metadata')
+ depends_on('libspatialite@4.2.0:')
+ depends_on('libspatialindex')
+ depends_on('gdal@2.1.0: +python', type=('build', 'link', 'run'))
+ depends_on('qwt@5:')
+ depends_on('qwtpolar')
+ depends_on('expat@1.95:')
+ depends_on('qca@2.2.1')
+ depends_on('py-pyqt4 +qsci', when='@2')
+ depends_on('py-pyqt5@5.3: +qsci', when='@3')
+ depends_on('qscintilla')
+ depends_on('qjson')
+ depends_on('py-requests', type=('build', 'run')) # TODO: is build dependency necessary?
+ depends_on('py-psycopg2', type=('build', 'run')) # TODO: is build dependency necessary?
+ depends_on('qtkeychain@0.5:', when='@3:')
+ depends_on('libzip')
+ depends_on('exiv2')
+ depends_on('python@3.0.0:', type=('build', 'run'), when='@3')
+ depends_on('python@2.7:2.8', type=('build', 'run'), when='@2')
+
+ # Runtime python dependencies, not mentioned in install instructions
+ depends_on('py-pyyaml', type='run')
+ depends_on('py-owslib', type='run')
+ depends_on('py-jinja2', type='run')
+ depends_on('py-pygments', type='run')
+
+ # optionals
+ depends_on('postgresql@8:', when='+postgresql') # for PostGIS support
+ depends_on('gsl', when='+georeferencer') # for georeferencer
+ depends_on('grass@7.0.0', type=('build', 'link', 'run'), when='+grass7') # for georeferencer
+
+ # the below dependencies are shown in cmake config
+ depends_on('hdf5')
+ depends_on('netcdf-c')
+
+ # build
+ depends_on('cmake@3.0.0:', type='build')
+ depends_on('flex@2.5.6:', type='build')
+ depends_on('bison@2.4:', type='build')
+ depends_on('pkg-config', type='build')
+
+ # Take care of conflicts using depends_on
+ depends_on('proj@5:', when='@3.8.2:')
+ depends_on('qt@5.9.0:5.12.99', when='@3.8')
+ depends_on('qt@5.9.0:', when='@3.10.0:')
+ depends_on('qtkeychain@:1.5.99', when='^qt@4')
+ depends_on('qt@:4', when='@2')
+
+ patch('pyqt5.patch', when='^qt@5')
+
+ def cmake_args(self):
+ spec = self.spec
+ args = []
+ # qtwebkit module was removed from qt as of version 5.6
+ # needs to be compiled as a separate package
+ args.extend([
+ '-DUSE_OPENCL=OFF',
+ # cmake couldn't determine the following paths
+ '-DEXPAT_LIBRARY={0}'.format(self.spec['expat'].libs),
+ '-DPOSTGRESQL_PREFIX={0}'.format(
+ self.spec['postgresql'].prefix),
+ '-DQSCINTILLA_INCLUDE_DIR=' +
+ self.spec['qscintilla'].prefix.include,
+ '-DQSCINTILLA_LIBRARY=' + self.spec['qscintilla'].prefix +
+ '/lib/libqscintilla2_qt5.so',
+ '-DLIBZIP_INCLUDE_DIR=' +
+ self.spec['libzip'].prefix.include,
+ '-DLIBZIP_CONF_INCLUDE_DIR=' +
+ self.spec['libzip'].prefix.lib.libzip.include,
+ '-DGDAL_CONFIG_PREFER_PATH=' +
+ self.spec['gdal'].prefix.bin,
+ '-DGEOS_CONFIG_PREFER_PATH=' +
+ self.spec['geos'].prefix.bin,
+ '-DGSL_CONFIG_PREFER_PATH=' + self.spec['gsl'].prefix.bin,
+ '-DPOSTGRES_CONFIG_PREFER_PATH=' +
+ self.spec['postgresql'].prefix.bin
+ ])
+
+ args.extend([
+ '-DWITH_3D={0}'.format(
+ 'TRUE' if '+3d' in spec else 'FALSE'),
+ '-DWITH_ANALYSIS={0}'.format(
+ 'TRUE' if '+analysis' in spec else 'FALSE'),
+ '-DWITH_APIDOC={0}'.format(
+ 'TRUE' if '+apidoc' in spec else 'FALSE'),
+ '-DWITH_ASTYLE={0}'.format(
+ 'TRUE' if '+astyle' in spec else 'FALSE'),
+ '-DWITH_BINDINGS={0}'.format(
+ 'TRUE' if '+bindings' in spec else 'FALSE'),
+ '-DWITH_CLANG_TIDY={0}'.format(
+ 'TRUE' if '+clang_tidy' in spec else 'FALSE'),
+ '-DWITH_CORE={0}'.format(
+ 'TRUE' if '+core' in spec else 'FALSE'),
+ '-DWITH_CUSTOM_WIDGETS={0}'.format(
+ 'TRUE' if '+custom_widgets' in spec else 'FALSE'),
+ '-DWITH_DESKTOP={0}'.format(
+ 'TRUE' if '+desktop' in spec else 'FALSE'),
+ '-DWITH_GEOREFERENCER={0}'.format(
+ 'TRUE' if '+georeferencer' in spec else 'FALSE'),
+ '-DWITH_GLOBE={0}'.format(
+ 'TRUE' if '+globe' in spec else 'FALSE'),
+ '-DWITH_GUI={0}'.format(
+ 'TRUE' if '+gui' in spec else 'FALSE'),
+ '-DWITH_INTERNAL_MDAL={0}'.format(
+ 'TRUE' if '+internal_mdal' in spec else 'FALSE'),
+ '-DWITH_INTERNAL_O2={0}'.format(
+ 'ON' if '+internal_o2' in spec else 'OFF'),
+ '-DWITH_OAUTH2_PLUGIN={0}'.format(
+ 'TRUE' if '+oauth2_plugin' in spec else 'FALSE'),
+ '-DWITH_ORACLE={0}'.format(
+ 'TRUE' if '+oracle' in spec else 'FALSE'),
+ '-DWITH_POSTGRESQL={0}'.format(
+ 'TRUE' if '+postgresql' in spec else 'FALSE'),
+ '-DWITH_PY_COMPILE={0}'.format(
+ 'TRUE' if '+py_compile' in spec else 'FALSE'),
+ '-DWITH_QSCIAPI={0}'.format(
+ 'TRUE' if '+qsciapi' in spec else 'FALSE'),
+ '-DWITH_QSPATIALITE={0}'.format(
+ 'ON' if '+qspatialite' in spec else 'OFF'),
+ '-DWITH_QT5SERIALPORT={0}'.format(
+ 'TRUE' if '+qt5serialport' in spec else 'FALSE'),
+ '-DWITH_QTMOBILITY={0}'.format(
+ 'TRUE' if '+qtmobility' in spec else 'FALSE'),
+ '-DWITH_QTWEBKIT={0}'.format(
+ 'ON' if '+qtwebkit' in spec else 'OFF'),
+ '-DWITH_QUICK={0}'.format(
+ 'TRUE' if '+quick' in spec else 'FALSE'),
+ '-DWITH_QWTPOLAR={0}'.format(
+ 'TRUE' if '+qwtpolar' in spec else 'FALSE'),
+ '-DWITH_SERVER={0}'.format(
+ 'TRUE' if '+server' in spec else 'FALSE'),
+ '-DWITH_STAGED_PLUGINS={0}'.format(
+ 'TRUE' if '+staged_plugins' in spec else 'FALSE'),
+ '-DWITH_THREAD_LOCAL={0}'.format(
+ 'TRUE' if '+thread_local' in spec else 'FALSE'),
+ '-DWITH_TXT2TAGS_PDF={0}'.format(
+ 'TRUE' if '+txt2tags_pdf' in spec else 'FALSE'),
+ ])
+
+ if '+grass7' in self.spec:
+ args.extend([
+ '-DWITH_GRASS7=ON',
+ '-DGRASS_PREFIX7={0}'.format(self.spec['grass'].prefix),
+ '-DGRASS_INCLUDE_DIR7={0}'.format(
+ self.spec['grass'].prefix.include)
+ ])
+ else:
+ args.append('-DWITH_GRASS7=OFF')
+ return args
diff --git a/var/spack/repos/builtin/packages/qgis/pyqt5.patch b/var/spack/repos/builtin/packages/qgis/pyqt5.patch
new file mode 100644
index 0000000000..1e6b7e6149
--- /dev/null
+++ b/var/spack/repos/builtin/packages/qgis/pyqt5.patch
@@ -0,0 +1,25 @@
+diff --git a/cmake/FindPyQt5.py b/cmake/FindPyQt5.py
+index 6a55a0f801..d6eda1fa1e 100644
+--- a/cmake/FindPyQt5.py
++++ b/cmake/FindPyQt5.py
+@@ -40,6 +40,7 @@ except ImportError:
+ import sys
+ cfg = sipconfig.Configuration()
+ sip_dir = cfg.default_sip_dir
++ pyqt_prefix = os.sep.join(PyQt5.QtCore.__file__.split(os.sep)[0:-5])
+ if sys.platform.startswith('freebsd'):
+ py_version = str(sys.version_info.major) + str(sys.version_info.minor)
+ sip_dir = sip_dir.replace(py_version, '')
+@@ -53,9 +54,9 @@ except ImportError:
+ 'pyqt_version': PyQt5.QtCore.PYQT_VERSION,
+ 'pyqt_version_str': PyQt5.QtCore.PYQT_VERSION_STR,
+ 'pyqt_sip_flags': PyQt5.QtCore.PYQT_CONFIGURATION['sip_flags'],
+- 'pyqt_mod_dir': os.path.join(cfg.default_mod_dir, "PyQt5"),
+- 'pyqt_sip_dir': sip_dir,
+- 'pyqt_bin_dir': cfg.default_bin_dir,
++ 'pyqt_mod_dir': os.path.dirname(PyQt5.QtCore.__file__),
++ 'pyqt_sip_dir': os.path.join(pyqt_prefix,'share','sip','PyQt5'),
++ 'pyqt_bin_dir': os.path.join(pyqt_prefix,'bin'),
+ }
+ pyqtcfg = sipconfig.Configuration([cfg])
+
diff --git a/var/spack/repos/builtin/packages/qmcpack/package.py b/var/spack/repos/builtin/packages/qmcpack/package.py
index 0ad9ac2418..ba67282c0c 100644
--- a/var/spack/repos/builtin/packages/qmcpack/package.py
+++ b/var/spack/repos/builtin/packages/qmcpack/package.py
@@ -44,11 +44,10 @@ class Qmcpack(CMakePackage, CudaPackage):
description='Build the complex (general twist/k-point) version')
variant('mixed', default=False,
description='Build the mixed precision (mixture of single and '
- 'double precision) version for gpu and cpu')
+ 'double precision) version')
variant('soa', default=True,
description='Build with Structure-of-Array instead of '
- 'Array-of-Structure code. Only for CPU code'
- 'and only in mixed precision')
+ 'Array-of-Structure code. Only for CPU code')
variant('timers', default=False,
description='Build with support for timers')
variant('da', default=False,
@@ -57,10 +56,20 @@ class Qmcpack(CMakePackage, CudaPackage):
description='Install with Matplotlib (long installation time)')
variant('qe', default=False,
description='Install with patched Quantum Espresso 6.4.1')
+ variant('afqmc', default=False,
+ description='Install with AFQMC support. NOTE that if used in '
+ 'combination with CUDA, only AFQMC will have CUDA.')
+ # Notes about CUDA-centric peculiarities:
+ #
# cuda variant implies mixed precision variant by default, but there is
# no way to express this in variant syntax, need something like
# variant('+mixed', default=True, when='+cuda', description="...")
+ #
+ # cuda+afqmc variant will not build the legacy CUDA code in real-space
+ # QMCPACK. This is due to a conflict in the build system. This is not
+ # worth fixing since the legacy CUDA code, will be superseded
+ # by the OpenMP 4.5 code.
# high-level variant conflicts
conflicts(
@@ -94,6 +103,12 @@ class Qmcpack(CMakePackage, CudaPackage):
conflicts('%pgi@:17', when='@3.6.0:', msg=compiler_warning)
conflicts('%llvm@:3.4', when='@3.6.0:', msg=compiler_warning)
+ conflicts('+afqmc', when='@:3.6.0', msg='AFQMC not recommended before v3.7')
+ conflicts('+afqmc', when='~mpi', msg='AFQMC requires building with +mpi')
+ conflicts('+afqmc', when='%gcc@:6.0', msg='AFQMC code requires gcc@6.1 or greater')
+ conflicts('+afqmc', when='%clang@:4.0', msg='AFQMC code requires clang 4.1 or greater')
+ conflicts('+afqmc', when='%intel@:18', msg='AFQMC code requires intel19 or greater')
+
# Prior to QMCPACK 3.5.0 Intel MKL was not properly detected with
# non-Intel compilers without a Spack-based hack. This hack
# had the potential for negative side effects and led to more
@@ -231,6 +246,11 @@ class Qmcpack(CMakePackage, CudaPackage):
else:
args.append('-DQMC_COMPLEX=0')
+ if '+afqmc' in spec:
+ args.append('-DBUILD_AFQMC=1')
+ else:
+ args.append('-DBUILD_AFQMC=0')
+
# When '-DQMC_CUDA=1', CMake automatically sets:
# '-DQMC_MIXED_PRECISION=1'
#
@@ -238,7 +258,12 @@ class Qmcpack(CMakePackage, CudaPackage):
# tested.
if '+cuda' in spec:
- args.append('-DQMC_CUDA=1')
+ # Cannot support both CUDA builds at the same time, see
+ # earlier notes in this package.
+ if '+afqmc' in spec:
+ args.append('-DENABLE_CUDA=1')
+ else:
+ args.append('-DQMC_CUDA=1')
cuda_arch_list = spec.variants['cuda_arch'].value
cuda_arch = cuda_arch_list[0]
if len(cuda_arch_list) > 1:
diff --git a/var/spack/repos/builtin/packages/qrupdate/package.py b/var/spack/repos/builtin/packages/qrupdate/package.py
index 185bd1f421..3f21501711 100644
--- a/var/spack/repos/builtin/packages/qrupdate/package.py
+++ b/var/spack/repos/builtin/packages/qrupdate/package.py
@@ -29,17 +29,31 @@ class Qrupdate(MakefilePackage):
return
def install(self, spec, prefix):
+
lapack_blas = spec['lapack'].libs + spec['blas'].libs
- # Build static and dynamic libraries
- make('lib', 'solib',
- 'BLAS={0}'.format(lapack_blas.ld_flags),
- 'LAPACK={0}'.format(lapack_blas.ld_flags))
- # "INSTALL" confuses "make install" on case-insensitive filesystems
+
+ make_args = [
+ 'BLAS={0}'.format(lapack_blas.ld_flags),
+ 'LAPACK={0}'.format(lapack_blas.ld_flags)
+ ]
+
+ # If 64-bit BLAS is used:
+ if (spec.satisfies('^openblas+ilp64') or
+ spec.satisfies('^intel-mkl+ilp64') or
+ spec.satisfies('^intel-parallel-studio+mkl+ilp64')):
+ make_args.append('FFLAGS=-fdefault-integer-8')
+
+ # Build static and dynamic libraries:
+ make('lib', 'solib', *make_args)
+
+ # "INSTALL" confuses "make install" on case-insensitive filesystems:
if os.path.isfile("INSTALL"):
os.remove("INSTALL")
- # create lib folder:
+
+ # Create lib folder:
if (sys.platform == 'darwin'):
mkdirp(prefix.lib)
+
make("install", "PREFIX=%s" % prefix)
@run_after('install')
diff --git a/var/spack/repos/builtin/packages/qt/package.py b/var/spack/repos/builtin/packages/qt/package.py
index c07aa5c86e..3f4c767a69 100644
--- a/var/spack/repos/builtin/packages/qt/package.py
+++ b/var/spack/repos/builtin/packages/qt/package.py
@@ -128,13 +128,13 @@ class Qt(Package):
depends_on("gperf", when='+webkit')
depends_on("gtkplus", when='+gtk')
depends_on("openssl", when='+ssl')
- depends_on("sqlite", when='+sql', type=('build', 'run'))
- depends_on("sqlite+column_metadata", when='+sql%intel', type=('build', 'run'))
+ depends_on("sqlite+column_metadata", when='+sql', type=('build', 'run'))
depends_on("libpng@1.2.57", when='@3')
+ depends_on("libsm", when='@3')
depends_on("pcre+multibyte", when='@5.0:5.8')
depends_on("inputproto", when='@:5.8')
- depends_on("openssl@:1.0.999", when='@:5.9+ssl')
+ depends_on("openssl@:1.0.999", when='@4:5.9+ssl')
depends_on("glib", when='@4:')
depends_on("libpng", when='@4:')
diff --git a/var/spack/repos/builtin/packages/quantum-espresso/package.py b/var/spack/repos/builtin/packages/quantum-espresso/package.py
index 49352192f7..403a8a3082 100644
--- a/var/spack/repos/builtin/packages/quantum-espresso/package.py
+++ b/var/spack/repos/builtin/packages/quantum-espresso/package.py
@@ -78,7 +78,7 @@ class QuantumEspresso(Package):
# Conflicts
# MKL with 64-bit integers not supported.
conflicts(
- '^intel-mkl+ilp64',
+ '^mkl+ilp64',
msg='Quantum ESPRESSO does not support MKL 64-bit integer variant'
)
@@ -211,7 +211,7 @@ class QuantumEspresso(Package):
# you need to pass it in the FFTW_INCLUDE and FFT_LIBS directory.
# QE supports an internal FFTW2, but only an external FFTW3 interface.
- if '^intel-mkl' in spec:
+ if '^mkl' in spec:
# A seperate FFT library is not needed when linking against MKL
options.append(
'FFTW_INCLUDE={0}'.format(join_path(env['MKLROOT'],
@@ -230,10 +230,21 @@ class QuantumEspresso(Package):
# appear twice in in link line but this is harmless
lapack_blas = spec['lapack'].libs + spec['blas'].libs
- options.append('BLAS_LIBS={0}'.format(lapack_blas.ld_flags))
+ # qe-6.5 fails to detect MKL for FFT if BLAS_LIBS is set due to
+ # an unfortunate upsteam change in their autoconf/configure:
+ # - qe-6.5/install/m4/x_ac_qe_blas.m4 only sets 'have_blas'
+ # but no 'have_mkl' if BLAS_LIBS is set (which seems to be o.k.)
+ # - however, qe-6.5/install/m4/x_ac_qe_fft.m4 in 6.5 unfortunately
+ # relies on x_ac_qe_blas.m4 to detect MKL and set 'have_mkl'
+ # - qe-5.4 up to 6.4.1 had a different logic and worked fine with
+ # BLAS_LIBS being set
+ # However, MKL is correctly picked up by qe-6.5 for BLAS and FFT if
+ # MKLROOT is set (which SPACK does automatically for ^mkl)
+ if not ('quantum-espresso@6.5' in spec and '^mkl' in spec):
+ options.append('BLAS_LIBS={0}'.format(lapack_blas.ld_flags))
if '+scalapack' in spec:
- scalapack_option = 'intel' if '^intel-mkl' in spec else 'yes'
+ scalapack_option = 'intel' if '^mkl' in spec else 'yes'
options.append('--with-scalapack={0}'.format(scalapack_option))
if '+elpa' in spec:
diff --git a/var/spack/repos/builtin/packages/r-openssl/package.py b/var/spack/repos/builtin/packages/r-openssl/package.py
index 36ddd5ed7d..71f648b480 100644
--- a/var/spack/repos/builtin/packages/r-openssl/package.py
+++ b/var/spack/repos/builtin/packages/r-openssl/package.py
@@ -30,3 +30,8 @@ class ROpenssl(RPackage):
depends_on('r-askpass', when='@1.2:', type=('build', 'run'))
depends_on('openssl@1.0.1:')
+
+ def flag_handler(self, name, flags):
+ if name == 'cflags':
+ flags.append(self.compiler.c99_flag)
+ return (flags, None, None)
diff --git a/var/spack/repos/builtin/packages/r-sys/package.py b/var/spack/repos/builtin/packages/r-sys/package.py
index bd9aff9519..1901e54354 100644
--- a/var/spack/repos/builtin/packages/r-sys/package.py
+++ b/var/spack/repos/builtin/packages/r-sys/package.py
@@ -18,3 +18,8 @@ class RSys(RPackage):
list_url = "https://cloud.r-project.org/src/contrib/Archive/sys"
version('3.2', sha256='2819498461fe2ce83d319d1a47844e86bcea6d01d10861818dba289e7099bbcc')
+
+ def flag_handler(self, name, flags):
+ if name == 'cflags':
+ flags.append(self.compiler.c99_flag)
+ return (flags, None, None)
diff --git a/var/spack/repos/builtin/packages/r/change_optflags_tmp.patch b/var/spack/repos/builtin/packages/r/change_optflags_tmp.patch
new file mode 100644
index 0000000000..4e39b02be7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r/change_optflags_tmp.patch
@@ -0,0 +1,67 @@
+diff -ur R-3.6.3.org/configure R-3.6.3/configure
+--- R-3.6.3.org/configure 2020-03-09 11:09:16.060825352 +0900
++++ R-3.6.3/configure 2020-03-09 11:10:47.011280195 +0900
+@@ -6470,13 +6470,13 @@
+ CFLAGS=$ac_save_CFLAGS
+ elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+- CFLAGS="-g -O2"
++ CFLAGS="-g -O1"
+ else
+ CFLAGS="-g"
+ fi
+ else
+ if test "$GCC" = yes; then
+- CFLAGS="-O2"
++ CFLAGS="-O1"
+ else
+ CFLAGS=
+ fi
+@@ -7445,13 +7445,13 @@
+ FCFLAGS=$ac_save_FCFLAGS
+ elif test $ac_cv_prog_fc_g = yes; then
+ if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+- FCFLAGS="-g -O2"
++ FCFLAGS="-g -O1"
+ else
+ FCFLAGS="-g"
+ fi
+ else
+ if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+- FCFLAGS="-O2"
++ FCFLAGS="-O1"
+ else
+ FCFLAGS=
+ fi
+@@ -7717,13 +7717,13 @@
+ CXXFLAGS=$ac_save_CXXFLAGS
+ elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+- CXXFLAGS="-g -O2"
++ CXXFLAGS="-g -O1"
+ else
+ CXXFLAGS="-g"
+ fi
+ else
+ if test "$GXX" = yes; then
+- CXXFLAGS="-O2"
++ CXXFLAGS="-O1"
+ else
+ CXXFLAGS=
+ fi
+@@ -8336,13 +8336,13 @@
+ OBJCFLAGS=$ac_save_OBJCFLAGS
+ elif test $ac_cv_prog_objc_g = yes; then
+ if test "$GOBJC" = yes; then
+- OBJCFLAGS="-g -O2"
++ OBJCFLAGS="-g -O1"
+ else
+ OBJCFLAGS="-g"
+ fi
+ else
+ if test "$GOBJC" = yes; then
+- OBJCFLAGS="-O2"
++ OBJCFLAGS="-O1"
+ else
+ OBJCFLAGS=
+ fi
diff --git a/var/spack/repos/builtin/packages/r/package.py b/var/spack/repos/builtin/packages/r/package.py
index 6489a8585c..1893aca9ac 100644
--- a/var/spack/repos/builtin/packages/r/package.py
+++ b/var/spack/repos/builtin/packages/r/package.py
@@ -21,6 +21,7 @@ class R(AutotoolsPackage):
extendable = True
+ version('3.6.3', sha256='89302990d8e8add536e12125ec591d6951022cf8475861b3690bc8bf1cefaa8f')
version('3.6.2', sha256='bd65a45cddfb88f37370fbcee4ac8dd3f1aebeebe47c2f968fd9770ba2bbc954')
version('3.6.1', sha256='5baa9ebd3e71acecdcc3da31d9042fb174d55a42829f8315f2457080978b1389')
version('3.6.0', sha256='36fcac3e452666158e62459c6fc810adc247c7109ed71c5b6c3ad5fc2bf57509')
@@ -85,6 +86,12 @@ class R(AutotoolsPackage):
patch('zlib.patch', when='@:3.3.2')
+ # R cannot be built with '-O2' optimization
+ # with Fujitsu Compiler @4.1.0 now.
+ # Until the Fujitsu compiler resolves this problem,
+ # temporary fix to lower the optimization level.
+ patch('change_optflags_tmp.patch', when='%fj@4.1.0')
+
filter_compiler_wrappers(
'Makeconf', relative_root=os.path.join('rlib', 'R', 'etc')
)
diff --git a/var/spack/repos/builtin/packages/rankstr/package.py b/var/spack/repos/builtin/packages/rankstr/package.py
index 6cf2dc42f9..98d7aea87f 100644
--- a/var/spack/repos/builtin/packages/rankstr/package.py
+++ b/var/spack/repos/builtin/packages/rankstr/package.py
@@ -9,8 +9,8 @@ from spack import *
class Rankstr(CMakePackage):
"""Assign one-to-one mapping of MPI ranks to strings"""
- homepage = "https://github.com/ECP-VeloC/rankstr"
- url = "https://github.com/ECP-VeloC/rankstr/archive/v0.0.2.zip"
+ homepage = "https://github.com/ecp-veloc/rankstr"
+ url = "https://github.com/ecp-veloc/rankstr/archive/v0.0.2.zip"
git = "https://github.com/ecp-veloc/rankstr.git"
tags = ['ecp']
diff --git a/var/spack/repos/builtin/packages/redset/package.py b/var/spack/repos/builtin/packages/redset/package.py
index d06eaca108..88ea8b92d4 100644
--- a/var/spack/repos/builtin/packages/redset/package.py
+++ b/var/spack/repos/builtin/packages/redset/package.py
@@ -9,8 +9,8 @@ from spack import *
class Redset(CMakePackage):
"""Create MPI communicators for disparate redundancy sets"""
- homepage = "https://github.com/ECP-VeloC/redset"
- url = "https://github.com/ECP-VeloC/redset/archive/v0.0.3.zip"
+ homepage = "https://github.com/ecp-veloc/redset"
+ url = "https://github.com/ecp-veloc/redset/archive/v0.0.3.zip"
git = "https://github.com/ecp-veloc/redset.git"
tags = ['ecp']
diff --git a/var/spack/repos/builtin/packages/revbayes/package.py b/var/spack/repos/builtin/packages/revbayes/package.py
index 7cf707a72e..5e02dc974d 100644
--- a/var/spack/repos/builtin/packages/revbayes/package.py
+++ b/var/spack/repos/builtin/packages/revbayes/package.py
@@ -15,10 +15,10 @@ class Revbayes(CMakePackage):
git = "https://github.com/revbayes/revbayes.git"
version('develop', branch='development')
- version('1.0.13', sha256='472b4ccc44d813c1ff1b8d27e8ccf3d96388de79aa1688b3714f683ba65038fa')
- version('1.0.12', sha256='d79f3a9bc72305cab35009d11e1f027fcaacde7329a4c49b5b8285588a8d3588')
- version('1.0.11', sha256='7e81b1952e3a63cb84617fa632f4ccdf246b4d79e7d537a423540de047dadf50')
- version('1.0.10', sha256='95e9affe8ca8d62880cf46778b6ec9dd8726e62a185670ebcbadf2eb2bb79f93')
+ version('1.0.13', sha256='e85e2e1fe182fe9f504900150d936a06d252a362c591b9d3d8272dd085aa85d9')
+ version('1.0.12', sha256='80c926bb6b37288d02e36e07b44e4663841cd1fe541e2cc0b0e44c89ca929759')
+ version('1.0.11', sha256='03052194baa220dde7e622a739f09f34393f67ea00a0b163b409d313d7fc7c02')
+ version('1.0.10', sha256='6a3cf303e7224b0b32637bd8e2c3c2cf2621f5dbe599cd74ce4b0c215d0fcd2d')
variant('mpi', default=True, description='Enable MPI parallel support')
@@ -27,6 +27,12 @@ class Revbayes(CMakePackage):
conflicts('%gcc@7.1.0:', when='@:1.0.12')
+ def url_for_version(self, version):
+ if version > Version('1.0.13'):
+ return 'https://github.com/revbayes/revbayes/archive/v{0}.tar.gz'.format(version)
+ else:
+ return 'https://github.com/revbayes/revbayes.archive/archive/v{0}.tar.gz'.format(version)
+
@property
def root_cmakelists_dir(self):
if self.spec.version > Version('1.0.13') and '+mpi' in self.spec:
@@ -38,6 +44,11 @@ class Revbayes(CMakePackage):
def regenerate(self):
with working_dir(join_path('projects', 'cmake')):
mkdirp('build')
+ if self.spec.version > Version('1.0.13'):
+ generate_version = Executable('./generate_version_number.sh')
+ generate_version()
+ dest = join_path('..', '..', 'src', 'revlanguage', 'utils')
+ install('GitVersion.cpp', dest)
edit = FileFilter('regenerate.sh')
edit.filter('boost="true"', 'boost="false"')
if '+mpi' in self.spec:
diff --git a/var/spack/repos/builtin/packages/ripgrep/package.py b/var/spack/repos/builtin/packages/ripgrep/package.py
new file mode 100644
index 0000000000..eadaa6df79
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ripgrep/package.py
@@ -0,0 +1,31 @@
+# Copyright 2013-2020 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 import *
+
+
+class Ripgrep(Package):
+ """ripgrep is a line-oriented search tool that recursively searches
+ your current directory for a regex pattern. ripgrep is similar to
+ other popular search tools like The Silver Searcher, ack and grep.
+ """
+
+ homepage = "https://github.com/BurntSushi/ripgrep"
+ url = "https://github.com/BurntSushi/ripgrep/archive/11.0.2.tar.gz"
+
+ version('11.0.2', sha256='0983861279936ada8bc7a6d5d663d590ad34eb44a44c75c2d6ccd0ab33490055')
+
+ depends_on('rust')
+
+ def install(self, spec, prefix):
+ cargo = which('cargo')
+ cargo('install', '--root', prefix, '--path', '.')
+
+ # needed for onig_sys
+ def setup_build_environment(self, env):
+ env.append_flags('LLVM_CONFIG_PATH',
+ join_path(self.spec['llvm'].prefix.libexec.llvm,
+ 'llvm-config'))
+ env.append_flags('LIBCLANG_PATH', self.spec['llvm'].prefix.lib)
diff --git a/var/spack/repos/builtin/packages/root/package.py b/var/spack/repos/builtin/packages/root/package.py
index 4def4129da..9db1a70254 100644
--- a/var/spack/repos/builtin/packages/root/package.py
+++ b/var/spack/repos/builtin/packages/root/package.py
@@ -15,7 +15,7 @@ class Root(CMakePackage):
homepage = "https://root.cern.ch"
url = "https://root.cern/download/root_v6.16.00.source.tar.gz"
- maintainers = ['chissg', 'HadrienG2']
+ maintainers = ['chissg', 'HadrienG2', 'drbenmorgan']
# ###################### Versions ##########################
@@ -26,6 +26,8 @@ class Root(CMakePackage):
# Development version (when more recent than production).
# Production version
+ version('6.20.02', sha256='0997586bf097c0afbc6f08edbffcebf5eb6a4237262216114ba3f5c8087dcba6')
+ version('6.20.00', sha256='68421eb0434b38b66346fa8ea6053a0fdc9a6d254e4a72019f4e3633ae118bf0')
version('6.18.04', sha256='315a85fc8363f8eb1bffa0decbf126121258f79bd273513ed64795675485cfa4',
preferred=True)
@@ -110,6 +112,9 @@ class Root(CMakePackage):
# otherwise it crashes with the internal minuit library
variant('minuit', default=True,
description='Automatically search for support libraries')
+ variant('mlp', default=False,
+ description="Enable support for TMultilayerPerceptron "
+ "classes' federation")
variant('mysql', default=False)
variant('opengl', default=True,
description='Enable OpenGL support')
@@ -143,7 +148,7 @@ class Root(CMakePackage):
description='TBB multi-threading support')
variant('threads', default=True,
description='Enable using thread library')
- variant('tmva', default=True,
+ variant('tmva', default=False,
description='Build TMVA multi variate analysis library')
variant('unuran', default=True,
description='Use UNURAN for random number generation')
@@ -185,6 +190,7 @@ class Root(CMakePackage):
depends_on('xxhash', when='@6.13.02:') # See cmake_args, below.
depends_on('xz')
depends_on('zlib')
+ depends_on('zstd', when='@6.20:')
# X-Graphics
depends_on('libx11', when="+x")
@@ -203,8 +209,14 @@ class Root(CMakePackage):
# Qt4
depends_on('qt@:4.999', when='+qt4')
- # TMVA
- depends_on('py-numpy', when='+tmva')
+ # Python
+ depends_on('python@2.7:', when='+python', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'), when='+tmva')
+ # This numpy dependency was not intended and will hopefully
+ # be fixed in 6.20.04.
+ # See: https://sft.its.cern.ch/jira/browse/ROOT-10626
+ depends_on('py-numpy', type=('build', 'run'),
+ when='@6.20.00:6.20.03 +python')
# Optional dependencies
depends_on('davix @0.7.1:', when='+davix')
@@ -219,7 +231,6 @@ class Root(CMakePackage):
depends_on('postgresql', when='+postgres')
depends_on('pythia6+root', when='+pythia6')
depends_on('pythia8', when='+pythia8')
- depends_on('python@2.7:', when='+python', type=('build', 'run'))
depends_on('r', when='+r', type=('build', 'run'))
depends_on('r-rcpp', when='+r', type=('build', 'run'))
depends_on('r-rinside', when='+r', type=('build', 'run'))
@@ -255,6 +266,7 @@ class Root(CMakePackage):
# Incompatible variants
conflicts('+opengl', when='~x', msg='OpenGL requires X')
conflicts('+tmva', when='~gsl', msg='TVMA requires GSL')
+ conflicts('+tmva', when='~mlp', msg='TVMA requires MLP')
conflicts('cxxstd=11', when='+root7', msg='root7 requires at least C++14')
# Feature removed in 6.18:
@@ -357,6 +369,7 @@ class Root(CMakePackage):
['minimal'],
['minuit'],
['minuit2', 'minuit'],
+ ['mlp'],
['monalisa', False],
['mysql'],
['odbc'],
diff --git a/var/spack/repos/builtin/packages/rust/package.py b/var/spack/repos/builtin/packages/rust/package.py
index 2ae30b5c03..59e827f67d 100644
--- a/var/spack/repos/builtin/packages/rust/package.py
+++ b/var/spack/repos/builtin/packages/rust/package.py
@@ -4,59 +4,455 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
+from six import iteritems
class Rust(Package):
- """The rust programming language toolchain"""
+ """The Rust programming language toolchain
- homepage = "http://www.rust-lang.org"
- git = "https://github.com/rust-lang/rust.git"
+ This package can bootstrap any version of the Rust compiler since Rust
+ 1.23. It does this by downloading the platform-appropriate binary
+ distribution of the desired version of the rust compiler, and then building
+ that compiler from source.
+ """
- version('develop', branch='master')
- version('1.41.0', tag='1.41.0')
- version('1.34.0', tag='1.34.0')
- version('1.32.0', tag='1.32.0')
- version('1.31.1', tag='1.31.1')
- version('1.31.0', tag='1.31.0') # "Rust 2018" edition
- version('1.30.1', tag='1.30.1')
+ homepage = "https://www.rust-lang.org"
+ url = "https://static.rust-lang.org/dist/rustc-1.42.0-src.tar.gz"
+
+ maintainers = ["AndrewGaspar"]
+
+ phases = ['configure', 'build', 'install']
extendable = True
- # Rust
- depends_on("llvm")
- depends_on("curl")
- depends_on("git")
- depends_on("cmake")
- depends_on("binutils")
- depends_on("python@:2.8")
+ variant(
+ 'rustfmt',
+ default=True,
+ description='Formatting tool for Rust code'
+ )
+
+ variant(
+ 'analysis',
+ default=True,
+ description='Outputs code analysis that can be consumed by other tools'
+ )
+
+ variant(
+ 'clippy',
+ default=True,
+ description='Linting tool for Rust'
+ )
+
+ variant(
+ 'rls',
+ default=False,
+ description='The Rust Language Server can be used for IDE integration'
+ )
+
+ variant(
+ 'src',
+ default=True,
+ description='Install Rust source files'
+ )
+
+ depends_on('cmake', type='build')
+ depends_on('python@:2.8', type='build')
+ depends_on('openssl')
+ depends_on('libssh2')
+ depends_on('libgit2')
+
+ # Version Notes:
+ # Here's some information on why your favorite Rust version may be missing.
+ #
+ # < 1.23:
+ # Rust seems to eagerly search for ar next to cc. Spack makes wrappers for
+ # cc and c++, but not for ar, so no ar is found. In future versions, ar
+ # can be specified in the config.
+ #
+ # < 1.17:
+ # The `x.py` bootstrapping script did not exist prior to Rust 1.17. It
+ # would be possible to support both, but for simplicitly, we only support
+ # Rust 1.17 and newer
+ version('1.42.0', sha256='d2e8f931d16a0539faaaacd801e0d92c58df190269014b2360c6ab2a90ee3475')
+ version('1.41.1', sha256='38c93d016e6d3e083aa15e8f65511d3b4983072c0218a529f5ee94dd1de84573')
+ version('1.41.0', sha256='5546822c09944c4d847968e9b7b3d0e299f143f307c00fa40e84a99fabf8d74b')
+ version('1.40.0', sha256='dd97005578defc10a482bff3e4e728350d2099c60ffcf1f5e189540c39a549ad')
+ version('1.39.0', sha256='b4a1f6b6a93931f270691aba4fc85eee032fecda973e6b9c774cd06857609357')
+ version('1.38.0', sha256='644263ca7c7106f8ee8fcde6bb16910d246b30668a74be20b8c7e0e9f4a52d80')
+ version('1.37.0', sha256='120e7020d065499cc6b28759ff04153bfdc2ac9b5adeb252331a4eb87cbe38c3')
+ version('1.36.0', sha256='04c4e4d7213d036d6aaed392841496d272146312c0290f728b7400fccd15bb1b')
+ version('1.35.0', sha256='5a4d637a716bac18d085f44dd87ef48b32195f71b967d872d80280b38cff712d')
+ version('1.34.2', sha256='c69a4a85a1c464368597df8878cb9e1121aae93e215616d45ad7d23af3052f56')
+ version('1.34.1', sha256='b0c785264d17e1dac4598627c248a2d5e07dd39b6666d1881fcfc8e2cf4c40a7')
+ version('1.34.0', sha256='7ac85acffd79dd3a7c44305d9eaabd1f1e7116e2e6e11e770e4bf5f92c0f1f59')
+ version('1.33.0', sha256='5a01a8d7e65126f6079042831385e77485fa5c014bf217e9f3e4aff36a485d94')
+ version('1.32.0', sha256='4c594c7712a0e7e8eae6526c464bf6ea1d82f77b4f61717c3fc28fb27ba2224a')
+ version('1.31.1', sha256='91d2fc22f08d986adab7a54eb3a6a9b99e490f677d2d092e5b9e4e069c23686a')
+ version('1.30.1', sha256='36a38902dbd9a3e1240d46ab0f2ca40d2fd07c2ab6508ed7970c6c4c036b5b29')
+ version('1.30.0', sha256='cd0ba83fcca55b64c0c9f23130fe731dfc1882b73ae21bef96be8f2362c108ee')
+ version('1.29.2', sha256='5088e796aa2e47478cdf41e7243fc5443fafab0a7c70a11423e57c80c04167c9')
+ version('1.29.1', sha256='f1b0728b66ce6bce6d72bbe5ea9e3a24ea22a045665da2ed8fcdfad14f61a349')
+ version('1.29.0', sha256='a4eb34ffd47f76afe2abd813f398512d5a19ef00989d37306217c9c9ec2f61e9')
+ version('1.28.0', sha256='1d5a81729c6f23a0a23b584dd249e35abe9c6f7569cee967cc42b1758ecd6486')
+ version('1.27.2', sha256='9a818c50cdb7880abeaa68b3d97792711e6c64c1cdfb6efdc23f75b8ced0e15d')
+ version('1.27.1', sha256='2133beb01ddc3aa09eebc769dd884533c6cfb08ce684f042497e097068d733d1')
+ version('1.27.0', sha256='2cb9803f690349c9fd429564d909ddd4676c68dc48b670b8ddf797c2613e2d21')
+ version('1.26.2', sha256='fb9ecf304488c9b56600ab20cfd1937482057f7e5db7899fddb86e0774548700')
+ version('1.26.1', sha256='70a7961bd8ec43b2c01e9896e90b0a06804a7fbe0a5c05acc7fd6fed19500df0')
+ version('1.26.0', sha256='4fb09bc4e233b71dcbe08a37a3f38cabc32219745ec6a628b18a55a1232281dd')
+ version('1.25.0', sha256='eef63a0aeea5147930a366aee78cbde248bb6e5c6868801bdf34849152965d2d')
+ version('1.24.1', sha256='3ea53d45e8d2e9a41afb3340cf54b9745f845b552d802d607707cf04450761ef')
+ version('1.24.0', sha256='bb8276f6044e877e447f29f566e4bbf820fa51fea2f912d59b73233ffd95639f')
+ version('1.23.0', sha256='7464953871dcfdfa8afcc536916a686dd156a83339d8ec4d5cb4eb2fe146cb91')
+
+ # The Rust bootstrapping process requires a bootstrapping compiler. The
+ # easiest way to do this is to download the binary distribution of the
+ # same version of the compiler and build with that.
+ #
+ # This dictionary contains a version: hash dictionary for each supported
+ # Rust target.
+ rust_releases = {
+ '1.42.0': {
+ 'x86_64-unknown-linux-gnu': '7d1e07ad9c8a33d8d039def7c0a131c5917aa3ea0af3d0cc399c6faf7b789052',
+ 'powerpc64le-unknown-linux-gnu': '805b08fa1e0aad4d706301ca1f13e2d80810d385cece2c15070360b3c4bd6e4a',
+ 'aarch64-unknown-linux-gnu': 'fdd39f856a062af265012861949ff6654e2b7103be034d046bec84ebe46e8d2d',
+ 'x86_64-apple-darwin': 'db1055c46e0d54b99da05e88c71fea21b3897e74a4f5ff9390e934f3f050c0a8'
+ },
+ '1.41.1': {
+ 'x86_64-unknown-linux-gnu': 'a6d5a3b3f574aafc8f787fea37aad9fb8a7946b383ae5348146927192ff0bef0',
+ 'powerpc64le-unknown-linux-gnu': 'f9b53ca636625b3a2dd87600b6274223c11f866c9b5a34b638ea0013186659d3',
+ 'aarch64-unknown-linux-gnu': 'd54c0f9165b86216b6f1b499f451141407939c5dc6b36c89a3772895a1370242',
+ 'x86_64-apple-darwin': '16615288cf74239783de1b435d329f3d56ed13803c7c10cd4b207d7c8ffa8f67'
+ },
+ '1.41.0': {
+ 'x86_64-unknown-linux-gnu': '343ba8ef7397eab7b3bb2382e5e4cb08835a87bff5c8074382c0b6930a41948b',
+ 'powerpc64le-unknown-linux-gnu': 'ba231b0d8273d6928f61e2be3456e816a1de8050135e20c0623dc7a6ea03ba68',
+ 'aarch64-unknown-linux-gnu': '79ddfb5e2563d0ee09a567fbbe121a2aed3c3bc61255b2787f2dd42183a10f27',
+ 'x86_64-apple-darwin': 'b6504003ab70b11f278e0243a43ba9d6bf75e8ad6819b4058a2b6e3991cc8d7a'
+ },
+ '1.40.0': {
+ 'x86_64-unknown-linux-gnu': 'fc91f8b4bd18314e83a617f2389189fc7959146b7177b773370d62592d4b07d0',
+ 'powerpc64le-unknown-linux-gnu': 'b1a23e35c383f99e647df6a9239b1dc9313e293deb70a76ba58e8ebe55ef623b',
+ 'aarch64-unknown-linux-gnu': '639271f59766d291ebdade6050e7d05d61cb5c822a3ef9a1e2ab185fed68d729',
+ 'x86_64-apple-darwin': '749ca5e0b94550369cc998416b8854c13157f5d11d35e9b3276064b6766bcb83'
+ },
+ '1.39.0': {
+ 'x86_64-unknown-linux-gnu': 'b10a73e5ba90034fe51f0f02cb78f297ed3880deb7d3738aa09dc5a4d9704a25',
+ 'powerpc64le-unknown-linux-gnu': '53b3fd942c52709f7e6fe11ea572d086e315a57a40b84b9b3290ac0ec8c7c84a',
+ 'aarch64-unknown-linux-gnu': 'e27dc8112fe577012bd88f30e7c92dffd8c796478ce386c49465c03b6db8209f',
+ 'x86_64-apple-darwin': '3736d49c5e9592844e1a5d5452883aeaf8f1e25d671c1bc8f01e81c1766603b5'
+ },
+ '1.38.0': {
+ 'x86_64-unknown-linux-gnu': 'adda26b3f0609dbfbdc2019da4a20101879b9db2134fae322a4e863a069ec221',
+ 'powerpc64le-unknown-linux-gnu': 'f9ed1bb6525abdd4dd6ef10782ad45d2f71496e0c3c88e806b510c81a91c4ff7',
+ 'aarch64-unknown-linux-gnu': '06afd6d525326cea95c3aa658aaa8542eab26f44235565bb16913ac9d12b7bda',
+ 'x86_64-apple-darwin': 'bd301b78ddcd5d4553962b115e1dca5436dd3755ed323f86f4485769286a8a5a'
+ },
+ '1.37.0': {
+ 'x86_64-unknown-linux-gnu': 'cb573229bfd32928177c3835fdeb62d52da64806b844bc1095c6225b0665a1cb',
+ 'powerpc64le-unknown-linux-gnu': '27c59ec40e9e9f71490dc00bf165156ae3ea77c20ffa4b5e5fd712e67527b477',
+ 'aarch64-unknown-linux-gnu': '263ef98fa3a6b2911b56f89c06615cdebf6ef676eb9b2493ad1539602f79b6ba',
+ 'x86_64-apple-darwin': 'b2310c97ffb964f253c4088c8d29865f876a49da2a45305493af5b5c7a3ca73d'
+ },
+ '1.36.0': {
+ 'x86_64-unknown-linux-gnu': '15e592ec52f14a0586dcebc87a957e472c4544e07359314f6354e2b8bd284c55',
+ 'powerpc64le-unknown-linux-gnu': '654a7a18d881811c09f630b0c917825b586e94a6142eceaede6b8046718e4054',
+ 'aarch64-unknown-linux-gnu': 'db78c24d93756f9fe232f081dbc4a46d38f8eec98353a9e78b9b164f9628042d',
+ 'x86_64-apple-darwin': '91f151ec7e24f5b0645948d439fc25172ec4012f0584dd16c3fb1acb709aa325'
+ },
+ '1.35.0': {
+ 'x86_64-unknown-linux-gnu': 'cf600e2273644d8629ed57559c70ca8db4023fd0156346facca9ab3ad3e8f86c',
+ 'powerpc64le-unknown-linux-gnu': 'a933955adec386d75d126e78df5b9941936e156acb3353fc44b85995a81c7bb2',
+ 'aarch64-unknown-linux-gnu': '31e6da56e67838fd2874211ae896a433badf67c13a7b68481f1d5f7dedcc5952',
+ 'x86_64-apple-darwin': 'ac14b1c7dc330dcb53d8641d74ebf9b32aa8b03b9d650bcb9258030d8b10dbd6'
+ },
+ '1.34.2': {
+ 'x86_64-unknown-linux-gnu': '2bf6622d980a52832bae141304e96f317c8a1ccd2dfd69a134a14033e6e43c0f',
+ 'powerpc64le-unknown-linux-gnu': '4ddd55014bbd954b3499859bfa3146bff471de21c1d73fc6e7cccde290fc1918',
+ 'aarch64-unknown-linux-gnu': '15fc6b7ec121df9d4e42483dd12c677203680bec8c69b6f4f62e5a35a07341a8',
+ 'x86_64-apple-darwin': '6fdd4bf7fe26dded0cd57b41ab5f0500a5a99b7bc770523a425e9e34f63d0fd8'
+ },
+ '1.34.1': {
+ 'x86_64-unknown-linux-gnu': '8e2eead11bd5bf61409e29018d007c6fc874bcda2ff54db3d04d1691e779c14e',
+ 'powerpc64le-unknown-linux-gnu': '94ac92d08afcfa2d77ae207e91b57c00cb48ff7ba08a27ed3deb2493f33e8fb1',
+ 'aarch64-unknown-linux-gnu': '0565e50dae58759a3a5287abd61b1a49dfc086c4d6acf2ce604fe1053f704e53',
+ 'x86_64-apple-darwin': 'f4e46b9994ccfab4a84059298d1dc8fd446b1bbb7449462e0459948f7debea0e'
+ },
+ '1.34.0': {
+ 'x86_64-unknown-linux-gnu': '170647ed41b497dc937a6b2556700210bc4be187b1735029ef9ccf52e2cb5ab8',
+ 'powerpc64le-unknown-linux-gnu': '3027e87802e161cce6f3a23d961f6d73b9ed6e829b2cd7af5dfccf6e1207e552',
+ 'aarch64-unknown-linux-gnu': '370c3a8fb9a69df36d645a95e622fb59ac5b513baecddde706cedaf20defa269',
+ 'x86_64-apple-darwin': 'e6bea8d865cc7341c17fa3b8f25f7989e6b04f53e9da24878addc524f3a32664'
+ },
+ '1.33.0': {
+ 'x86_64-unknown-linux-gnu': '6623168b9ee9de79deb0d9274c577d741ea92003768660aca184e04fe774393f',
+ 'powerpc64le-unknown-linux-gnu': 'db885aa4c2c6896c85257be2ade5c9edea660ca6878970683e8d5796618329b5',
+ 'aarch64-unknown-linux-gnu': 'a308044e4076b62f637313ea803fa0a8f340b0f1b53136856f2c43afcabe5387',
+ 'x86_64-apple-darwin': '864e7c074a0b88e38883c87c169513d072300bb52e1d320a067bd34cf14f66bd'
+ },
+ '1.32.0': {
+ 'x86_64-unknown-linux-gnu': 'e024698320d76b74daf0e6e71be3681a1e7923122e3ebd03673fcac3ecc23810',
+ 'powerpc64le-unknown-linux-gnu': 'd6d5c9154f4459465d68ebd4fa1e17bad4b6cfe219667dddd9123c3bfb5dd839',
+ 'aarch64-unknown-linux-gnu': '60def40961728212da4b3a9767d5a2ddb748400e150a5f8a6d5aa0e1b8ba1cee',
+ 'x86_64-apple-darwin': 'f0dfba507192f9b5c330b5984ba71d57d434475f3d62bd44a39201e36fa76304'
+ },
+ '1.31.1': {
+ 'x86_64-unknown-linux-gnu': 'a64685535d0c457f49a8712a096a5c21564cd66fd2f7da739487f028192ebe3c',
+ 'powerpc64le-unknown-linux-gnu': 'a6f61b7a8a06a2b0a785391cc3e6bb8004aa72095eea80db1561039f5bb3e975',
+ 'aarch64-unknown-linux-gnu': '29a7c6eb536fefd0ca459e48dfaea006aa8bff8a87aa82a9b7d483487033632a',
+ 'x86_64-apple-darwin': '8398b1b303bdf0e7605d08b87070a514a4f588797c6fb3593718cb9cec233ad6'
+ },
+ '1.30.1': {
+ 'x86_64-unknown-linux-gnu': 'a01a493ed8946fc1c15f63e74fc53299b26ebf705938b4d04a388a746dfdbf9e',
+ 'powerpc64le-unknown-linux-gnu': 'a7d4806e6702bdbad5017eeddc62f7ff7eb2438b1b9c39cbc90c2b1207f8e65f',
+ 'aarch64-unknown-linux-gnu': '6d87d81561285abd6c1987e07b60b2d723936f037c4b46eedcc12e8566fd3874',
+ 'x86_64-apple-darwin': '3ba1704a7defe3d9a6f0c1f68792c084da83bcba85e936d597bac0c019914b94'
+ },
+ '1.30.0': {
+ 'x86_64-unknown-linux-gnu': 'f620e3125cc505c842150bd873c0603432b6cee984cdae8b226cf92c8aa1a80f',
+ 'powerpc64le-unknown-linux-gnu': '0b53e257dc3d9f3d75cd97be569d3bf456d2c0af57ed0bd5e7a437227d8f465a',
+ 'aarch64-unknown-linux-gnu': '9690c7c50eba5a8461184ee4138b4c284bad31ccc4aa1f2ddeec58b253e6363e',
+ 'x86_64-apple-darwin': '07008d90932712282bc599f1e9a226e97879c758dc1f935e6e2675e45694cc1b'
+ },
+ '1.29.2': {
+ 'x86_64-unknown-linux-gnu': 'e9809825c546969a9609ff94b2793c9107d7d9bed67d557ed9969e673137e8d8',
+ 'powerpc64le-unknown-linux-gnu': '344003b808c20424c4699c9452bd37cdee23857dd4aa125e67d1d6e4bc992091',
+ 'aarch64-unknown-linux-gnu': 'e11461015ca7106ef8ebf00859842bf4be518ee170226cb8eedaaa666946509f',
+ 'x86_64-apple-darwin': '63f54e3013406b39fcb5b84bcf5e8ce85860d0b97a1e156700e467bf5fb5d5f2'
+ },
+ '1.29.1': {
+ 'x86_64-unknown-linux-gnu': 'b36998aea6d58525f25d89f1813b6bfd4cad6ff467e27bd11e761a20dde43745',
+ 'powerpc64le-unknown-linux-gnu': '26a6d652ade6b6a96e6af18e846701ee28f912233372dfe15432139252f88958',
+ 'aarch64-unknown-linux-gnu': '2685224f67b2ef951e0e8b48829f786cbfed95e19448ba292ac33af719843dbe',
+ 'x86_64-apple-darwin': '07b07fbd6fab2390e19550beb8008745a8626cc5e97b72dc659061c1c3b3d008'
+ },
+ '1.29.0': {
+ 'x86_64-unknown-linux-gnu': '09f99986c17b1b6b1bfbc9dd8785e0e4693007c5feb67915395d115c1a3aea9d',
+ 'powerpc64le-unknown-linux-gnu': 'd6954f1da53f7b3618fba3284330d99b6142bb25d9febba6dbfedad59ca53329',
+ 'aarch64-unknown-linux-gnu': '0ed3be0fd9f847afeb4e587fff61f6769ea61b53719d3ea999326284e8975b36',
+ 'x86_64-apple-darwin': '28a0473637585742f6d80ccd8afd88b6b400e65d623c33cb892412759444da93'
+ },
+ '1.28.0': {
+ 'x86_64-unknown-linux-gnu': '2a1390340db1d24a9498036884e6b2748e9b4b057fc5219694e298bdaa37b810',
+ 'powerpc64le-unknown-linux-gnu': '255818156ec1f795ed808a44b4fdb8019187d5ebb7f837ae8f55a1ca40862bb6',
+ 'aarch64-unknown-linux-gnu': '9b6fbcee73070332c811c0ddff399fa31965bec62ef258656c0c90354f6231c1',
+ 'x86_64-apple-darwin': '5d7a70ed4701fe9410041c1eea025c95cad97e5b3d8acc46426f9ac4f9f02393'
+ },
+ '1.27.2': {
+ 'x86_64-unknown-linux-gnu': '5028a18e913ef3eb53e8d8119d2cc0594442725e055a9361012f8e26f754f2bf',
+ 'powerpc64le-unknown-linux-gnu': '11034d150e811d4903b09fd42f0cb76d467a6365a158101493405fff1054572f',
+ 'aarch64-unknown-linux-gnu': 'cf84da70269c0e50bb3cc3d248bae1ffcd70ee69dc5a4e3513b54fefc6685fb4',
+ 'x86_64-apple-darwin': '30c5cc58759caa4efdf2ea7d8438633139c98bee3408beb29ceb26985f3f5f70'
+ },
+ '1.27.1': {
+ 'x86_64-unknown-linux-gnu': '435778a837af764da2a7a7fb4d386b7b78516c7dfc732d892858e9a8a539989b',
+ 'powerpc64le-unknown-linux-gnu': 'a08e6b6fed3329fcd1220b2ee4cd7a311d99121cf780fb6e1c6353bfeddfb176',
+ 'aarch64-unknown-linux-gnu': 'd1146b240e6f628224c3a67e3aae2a57e6c25d544115e5ece9ce91861ec92b3a',
+ 'x86_64-apple-darwin': '475be237962d6aef1038a2faada26fda1e0eaea5d71d6950229a027a9c2bfe08'
+ },
+ '1.27.0': {
+ 'x86_64-unknown-linux-gnu': '235ad78e220b10a2d0267aea1e2c0f19ef5eaaff53ad6ff8b12c1d4370dec9a3',
+ 'powerpc64le-unknown-linux-gnu': '847774a751e848568215739d384e3baf4d6ec37d27fb3add7a8789208c213aff',
+ 'aarch64-unknown-linux-gnu': 'e74ebc33dc3fc19e501a677a87b619746efdba2901949a0319176352f556673a',
+ 'x86_64-apple-darwin': 'a1d48190992e01aac1a181bce490c80cb2c1421724b4ff0e2fb7e224a958ce0f'
+ },
+ '1.26.2': {
+ 'x86_64-unknown-linux-gnu': 'd2b4fb0c544874a73c463993bde122f031c34897bb1eeb653d2ba2b336db83e6',
+ 'powerpc64le-unknown-linux-gnu': 'ea045869074ae3617eeb51207ce183e6915784b9ed615ecb92ce082ddb86ec1f',
+ 'aarch64-unknown-linux-gnu': '3dfad0dc9c795f7ee54c2099c9b7edf06b942adbbf02e9ed9e5d4b5e3f1f3759',
+ 'x86_64-apple-darwin': 'f193705d4c0572a358670dbacbf0ffadcd04b3989728b442f4680fa1e065fa72'
+ },
+ '1.26.1': {
+ 'x86_64-unknown-linux-gnu': 'b7e964bace1286696d511c287b945f3ece476ba77a231f0c31f1867dfa5080e0',
+ 'powerpc64le-unknown-linux-gnu': 'ad8b2f6dd8c5cca1251d65b75ed2120aae3c5375d2c8ed690259cf4a652d7d3c',
+ 'aarch64-unknown-linux-gnu': 'd4a369053c2dfd5f457de6853557dab563944579fa4bb55bc919bacf259bff6d',
+ 'x86_64-apple-darwin': 'ebf898b9fa7e2aafc53682a41f18af5ca6660ebe82dd78f28cd9799fe4dc189a'
+ },
+ '1.26.0': {
+ 'x86_64-unknown-linux-gnu': '13691d7782577fc9f110924b26603ade1990de0b691a3ce2dc324b4a72a64a68',
+ 'powerpc64le-unknown-linux-gnu': '3ba3a4905730ec01007ca1096d9fc3780f4e81f71139a619e1f526244301b7f4',
+ 'aarch64-unknown-linux-gnu': 'e12dc84bdb569cdb382268a5fe6ae6a8e2e53810cb890ec3a7133c20ba8451ac',
+ 'x86_64-apple-darwin': '38708803c3096b8f101d1919ee2d7e723b0adf1bc1bb986b060973b57d8c7c28'
+ },
+ '1.25.0': {
+ 'x86_64-unknown-linux-gnu': '06fb45fb871330a2d1b32a27badfe9085847fe824c189ddc5204acbe27664f5e',
+ 'powerpc64le-unknown-linux-gnu': '79eeb2a7fafa2e0f65f29a1dc360df69daa725347e4b6a533684f1c07308cc6e',
+ 'aarch64-unknown-linux-gnu': '19a43451439e515a216d0a885d14203f9a92502ee958abf86bf7000a7d73d73d',
+ 'x86_64-apple-darwin': 'fcd0302b15e857ba4a80873360cf5453275973c64fa82e33bfbed02d88d0ad17'
+ },
+ '1.24.1': {
+ 'x86_64-unknown-linux-gnu': '4567e7f6e5e0be96e9a5a7f5149b5452828ab6a386099caca7931544f45d5327',
+ 'powerpc64le-unknown-linux-gnu': '6f6c4bebbd7d6dc9989bf372c512dea55af8f56a1a0cfe97784667f0ac5430ee',
+ 'aarch64-unknown-linux-gnu': '64bb25a9689b18ddadf025b90d9bdb150b809ebfb74432dc69cc2e46120adbb2',
+ 'x86_64-apple-darwin': '9d4aacdb5849977ea619d399903c9378163bd9c76ea11dac5ef6eca27849f501'
+ },
+ '1.24.0': {
+ 'x86_64-unknown-linux-gnu': '336cf7af6c857cdaa110e1425719fa3a1652351098dc73f156e5bf02ed86443c',
+ 'powerpc64le-unknown-linux-gnu': '25d9b965a63ad2f345897028094d4c7eafa432237b478754ccbcc299f80629c8',
+ 'aarch64-unknown-linux-gnu': 'a981de306164b47f3d433c1d53936185260642849c79963af7e07d36b063a557',
+ 'x86_64-apple-darwin': '1aecba7cab4bc1a9e0e931c04aa00849e930b567d243da7b676ede8f527a2992'
+ },
+ '1.23.0': {
+ 'x86_64-unknown-linux-gnu': '9a34b23a82d7f3c91637e10ceefb424539dcfa327c2dcd292ff10c047b1fdc7e',
+ 'powerpc64le-unknown-linux-gnu': '60f1a1cc182c516de08c1f42ada01604a3d94383e9dded6b237ae2233999437b',
+ 'aarch64-unknown-linux-gnu': '38379fbd976d2286cb73f21466db40a636a583b9f8a80af5eea73617c7912bc7',
+ 'x86_64-apple-darwin': '9274e977322bb4b153f092255ac9bd85041142c73eaabf900cb2ef3d3abb2eba'
+ }
+ }
+
+ # This dictionary maps Rust target architectures to Spack constraints that
+ # match that target.
+ rust_archs = {
+ 'x86_64-unknown-linux-gnu': [
+ {'platform': 'linux', 'target': 'x86_64:'},
+ {'platform': 'cray', 'target': 'x86_64:'}
+ ],
+ 'powerpc64le-unknown-linux-gnu': [
+ {'platform': 'linux', 'target': 'ppc64le:'},
+ {'platform': 'cray', 'target': 'ppc64le:'}
+ ],
+ 'aarch64-unknown-linux-gnu': [
+ {'platform': 'linux', 'target': 'aarch64:'},
+ {'platform': 'cray', 'target': 'aarch64:'}
+ ],
+ 'x86_64-apple-darwin': [
+ {'platform': 'darwin', 'target': 'x86_64:'}
+ ]
+ }
- # Cargo
- depends_on("openssl")
+ # This loop generates resources for each binary distribution, and maps
+ # them to the version of the compiler they bootstrap. This is in place
+ # of listing each resource explicitly, which would be potentially even
+ # more verbose.
+ #
+ # NOTE: This loop should technically specify the architecture to be the
+ # _host_ architecture, not the target architecture, in order to support
+ # cross compiling. I'm not sure Spack provides a way to specify a
+ # distinction in the when clause, though.
+ for rust_version, rust_targets in iteritems(rust_releases):
+ for rust_target, rust_sha256 in iteritems(rust_targets):
+ for rust_arch in rust_archs[rust_target]:
+ resource(
+ name='rust-{version}-{target}'.format(
+ version=rust_version,
+ target=rust_target
+ ),
+ url='https://static.rust-lang.org/dist/rust-{version}-{target}.tar.gz'.format(
+ version=rust_version,
+ target=rust_target
+ ),
+ sha256=rust_sha256,
+ destination='spack_bootstrap_stage',
+ when='@{version} platform={platform} target={target}'\
+ .format(
+ version=rust_version,
+ platform=rust_arch['platform'],
+ target=rust_arch['target']
+ )
+ )
- phases = ['configure', 'install']
+ # This routine returns the target architecture we intend to build for.
+ def get_rust_target(self):
+ if 'platform=linux' in self.spec or 'platform=cray' in self.spec:
+ if 'target=x86_64:' in self.spec:
+ return 'x86_64-unknown-linux-gnu'
+ elif 'target=ppc64le:' in self.spec:
+ return 'powerpc64le-unknown-linux-gnu'
+ elif 'target=aarch64:' in self.spec:
+ return 'aarch64-unknown-linux-gnu'
+ elif 'platform=darwin target=x86_64:' in self.spec:
+ return 'x86_64-apple-darwin'
+
+ raise InstallError(
+ "rust is not supported for '{0}'".format(
+ self.spec.architecture
+ ))
def configure(self, spec, prefix):
- configure_args = [
- '--prefix=%s' % prefix,
- '--llvm-root=' + spec['llvm'].prefix,
- # Workaround for "FileCheck does not exist" error
- '--disable-codegen-tests',
- # Includes Cargo in the build
- # https://github.com/rust-lang/cargo/issues/3772#issuecomment-283109482
- '--enable-extended',
- # Prevent build from writing bash completion into system path
- '--sysconfdir=%s' % join_path(prefix, 'etc/')
- ]
-
- configure(*configure_args)
-
- # Build system defaults to searching in the same path as Spack's
- # compiler wrappers which causes the build to fail
- filter_file(
- '#ar = "ar"',
- 'ar = "%s"' % join_path(spec['binutils'].prefix.bin, 'ar'),
- 'config.toml')
+ target = self.get_rust_target()
+ # See the NOTE above the resource loop - should be host architecture,
+ # not target aarchitecture if we're to support cross-compiling.
+ bootstrapping_install = Executable(
+ './spack_bootstrap_stage/rust-{version}-{target}/install.sh'
+ .format(
+ version=spec.version,
+ target=target
+ )
+ )
+ # install into the staging area
+ bootstrapping_install('--prefix={0}'.format(
+ join_path(self.stage.source_path, 'spack_bootstrap')
+ ))
+
+ boot_bin = join_path(self.stage.source_path, 'spack_bootstrap/bin')
+
+ # Always build rustc and cargo
+ tools = ['rustc', 'cargo']
+ # Only make additional components available in 'rust-bootstrap'
+ if '+rustfmt' in self.spec:
+ tools.append('rustfmt')
+ if '+analysis' in self.spec:
+ tools.append('analysis')
+ if '@1.33: +clippy' in self.spec:
+ tools.append('clippy')
+ if '+rls' in self.spec:
+ tools.append('rls')
+ if '+src' in self.spec:
+ tools.append('src')
+
+ ar = which('ar', required=True)
+
+ # build.tools was introduced in Rust 1.25
+ tools_spec = 'tools={0}'.format(tools) if '@1.25:' in self.spec else ''
+ # This is a temporary fix due to rust 1.42 breaking self bootstrapping
+ # See: https://github.com/rust-lang/rust/issues/69953
+ #
+ # In general, this should be safe because bootstrapping typically
+ # ensures everything but the bootstrapping script is warning free for
+ # the latest set of warning.
+ deny_warnings_spec = \
+ 'deny-warnings = false' if '@1.42.0' in self.spec else ''
+
+ with open('config.toml', 'w') as out_file:
+ out_file.write("""\
+[build]
+cargo = "{cargo}"
+rustc = "{rustc}"
+docs = false
+vendor = true
+extended = true
+verbose = 2
+{tools_spec}
+
+[rust]
+channel = "stable"
+rpath = true
+{deny_warnings_spec}
+
+[target.{target}]
+ar = "{ar}"
+
+[install]
+prefix = "{prefix}"
+sysconfdir = "etc"
+""".format(
+ cargo=join_path(boot_bin, 'cargo'),
+ rustc=join_path(boot_bin, 'rustc'),
+ prefix=prefix,
+ target=target,
+ deny_warnings_spec=deny_warnings_spec,
+ ar=ar.path,
+ tools_spec=tools_spec
+ )
+ )
+
+ def build(self, spec, prefix):
+ python('./x.py', 'build', extra_env={
+ # vendored libgit2 wasn't correctly building (couldn't find the
+ # vendored libssh2), so let's just have spack build it
+ 'LIBSSH2_SYS_USE_PKG_CONFIG': '1',
+ 'LIBGIT2_SYS_USE_PKG_CONFIG': '1'
+ })
def install(self, spec, prefix):
- make()
- make("install")
+ python('./x.py', 'install')
diff --git a/var/spack/repos/builtin/packages/samtools/package.py b/var/spack/repos/builtin/packages/samtools/package.py
index ad1eb5e38d..bce5fe7b52 100644
--- a/var/spack/repos/builtin/packages/samtools/package.py
+++ b/var/spack/repos/builtin/packages/samtools/package.py
@@ -11,8 +11,8 @@ class Samtools(Package):
the SAM format, including sorting, merging, indexing and generating
alignments in a per-position format"""
- homepage = "www.htslib.org"
- url = "https://github.com/samtools/samtools/releases/download/1.3.1/samtools-1.3.1.tar.bz2"
+ homepage = "http://www.htslib.org"
+ url = "https://github.com/samtools/samtools/releases/download/1.3.1/samtools-1.3.1.tar.bz2"
version('1.10', sha256='7b9ec5f05d61ec17bd9a82927e45d8ef37f813f79eb03fe06c88377f1bd03585')
version('1.9', sha256='083f688d7070082411c72c27372104ed472ed7a620591d06f928e653ebc23482')
diff --git a/var/spack/repos/builtin/packages/scr/package.py b/var/spack/repos/builtin/packages/scr/package.py
index 63d0af34eb..3e0e1456cd 100644
--- a/var/spack/repos/builtin/packages/scr/package.py
+++ b/var/spack/repos/builtin/packages/scr/package.py
@@ -17,7 +17,10 @@ class Scr(CMakePackage):
url = "https://github.com/LLNL/scr/archive/v1.2.0.tar.gz"
git = "https://github.com/llnl/scr.git"
- version('master', branch='master')
+ version('develop', branch='develop')
+ version('legacy', branch='legacy')
+
+ version('2.0.0', sha256='471978ae0afb56a20847d3989b994fbd680d1dea21e77a5a46a964b6e3deed6b')
version('1.2.2', sha256='764a85638a9e8762667ec1f39fa5f7da7496fca78de379a22198607b3e027847')
version('1.2.1', sha256='23acab2dc7203e9514455a5168f2fd57bc590affb7a1876912b58201513628fe')
version('1.2.0', sha256='e3338ab2fa6e9332d2326c59092b584949a083a876adf5a19d4d5c7a1bbae047')
@@ -26,6 +29,14 @@ class Scr(CMakePackage):
depends_on('zlib')
depends_on('mpi')
+ # SCR legacy is anything 2.x.x or earlier
+ # SCR components is anything 3.x.x or later
+ depends_on('er', when="@3:")
+ depends_on('kvtree', when="@3:")
+ depends_on('rankstr', when="@3:")
+ depends_on('filo', when="@3:")
+ depends_on('spath', when="@3:")
+
variant('dtcmp', default=True,
description="Build with DTCMP. "
"Necessary to enable user directory naming at runtime")
diff --git a/var/spack/repos/builtin/packages/seacas/package.py b/var/spack/repos/builtin/packages/seacas/package.py
index 0e5ac9b72a..f9790370a0 100644
--- a/var/spack/repos/builtin/packages/seacas/package.py
+++ b/var/spack/repos/builtin/packages/seacas/package.py
@@ -26,6 +26,8 @@ class Seacas(CMakePackage):
# ###################### Versions ##########################
version('master', branch='master')
+ version('2020-03-16', sha256='2eb404f3dcb17c3e7eacf66978372830d40ef3722788207741fcd48417807af6')
+ version('2020-01-16', sha256='5ae84f61e410a4f3f19153737e0ac0493b144f20feb1bbfe2024f76613d8bff5')
version('2019-12-18', sha256='f82cfa276ebc5fe6054852383da16eba7a51c81e6640c73b5f01fc3109487c6f')
version('2019-10-14', sha256='ca4cf585cdbc15c25f302140fe1f61ee1a30d72921e032b9a854492b6c61fb91')
version('2019-08-20', sha256='a82c1910c2b37427616dc3716ca0b3c1c77410db6723aefb5bea9f47429666e5')
diff --git a/var/spack/repos/builtin/packages/sentencepiece/package.py b/var/spack/repos/builtin/packages/sentencepiece/package.py
new file mode 100644
index 0000000000..f3b168db66
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sentencepiece/package.py
@@ -0,0 +1,20 @@
+# Copyright 2013-2020 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)
+
+
+class Sentencepiece(CMakePackage):
+ """Unsupervised text tokenizer for Neural Network-based text generation.
+
+ This is the C++ package."""
+
+ homepage = "https://github.com/google/sentencepiece"
+ url = "https://github.com/google/sentencepiece/archive/v0.1.85.tar.gz"
+
+ maintainers = ['adamjstewart']
+
+ version('0.1.85', sha256='dd4956287a1b6af3cbdbbd499b7227a859a4e3f41c9882de5e6bdd929e219ae6')
+
+ depends_on('cmake@3.1:', type='build')
+ depends_on('gperftools') # optional, 10-40% performance improvement
diff --git a/var/spack/repos/builtin/packages/shuffile/package.py b/var/spack/repos/builtin/packages/shuffile/package.py
index 1dc23f1a2c..e7a8da2c0e 100644
--- a/var/spack/repos/builtin/packages/shuffile/package.py
+++ b/var/spack/repos/builtin/packages/shuffile/package.py
@@ -9,8 +9,8 @@ from spack import *
class Shuffile(CMakePackage):
"""Shuffle files between MPI ranks"""
- homepage = "https://github.com/ECP-VeloC/shuffile"
- url = "https://github.com/ECP-VeloC/shuffile/archive/v0.0.3.zip"
+ homepage = "https://github.com/ecp-veloc/shuffile"
+ url = "https://github.com/ecp-veloc/shuffile/archive/v0.0.3.zip"
git = "https://github.com/ecp-veloc/shuffile.git"
tags = ['ecp']
diff --git a/var/spack/repos/builtin/packages/silo/package.py b/var/spack/repos/builtin/packages/silo/package.py
index ef39dfdaaf..98e8b4be15 100644
--- a/var/spack/repos/builtin/packages/silo/package.py
+++ b/var/spack/repos/builtin/packages/silo/package.py
@@ -28,17 +28,26 @@ class Silo(AutotoolsPackage):
variant('mpi', default=True,
description='Compile with MPI Compatibility')
+ depends_on('hdf5@:1.10.999', when='@:4.10.2')
depends_on('hdf5~mpi', when='~mpi')
depends_on('mpi', when='+mpi')
depends_on('hdf5+mpi', when='+mpi')
- depends_on('qt', when='+silex')
+ depends_on('qt~framework@4.8:4.9', when='+silex')
+ depends_on('libx11', when='+silex')
+ depends_on('readline')
depends_on('zlib')
patch('remove-mpiposix.patch', when='@4.8:4.10.2')
def flag_handler(self, name, flags):
- if name == 'ldflags' and self.spec['hdf5'].satisfies('~shared'):
- flags.append('-ldl')
+ spec = self.spec
+ if name == 'ldflags':
+ if spec['hdf5'].satisfies('~shared'):
+ flags.append('-ldl')
+ flags.append(spec['readline'].libs.search_flags)
+ elif name in ('cflags', 'cxxflags', 'fcflags'):
+ if '+pic' in spec:
+ flags.append(self.compiler.pic_flag)
return (flags, None, None)
@when('%clang@9:')
@@ -81,13 +90,13 @@ class Silo(AutotoolsPackage):
]
if '+silex' in spec:
- config_args.append('--with-Qt-dir=%s' % spec['qt'].prefix)
-
- if '+pic' in spec:
- config_args += [
- 'CFLAGS={0}'.format(self.compiler.pic_flag),
- 'CXXFLAGS={0}'.format(self.compiler.pic_flag),
- 'FCFLAGS={0}'.format(self.compiler.pic_flag)]
+ x = spec['libx11']
+ config_args.extend([
+ '--with-Qt-dir=' + spec['qt'].prefix,
+ '--with-Qt-lib=QtGui -lQtCore',
+ '--x-includes=' + x.prefix.include,
+ '--x-libraries=' + x.prefix.lib,
+ ])
if '+mpi' in spec:
config_args.append('CC=%s' % spec['mpi'].mpicc)
diff --git a/var/spack/repos/builtin/packages/sirius/package.py b/var/spack/repos/builtin/packages/sirius/package.py
index 5ac903e263..f45aa07781 100644
--- a/var/spack/repos/builtin/packages/sirius/package.py
+++ b/var/spack/repos/builtin/packages/sirius/package.py
@@ -19,6 +19,8 @@ class Sirius(CMakePackage, CudaPackage):
version('develop', branch='develop')
version('master', branch='master')
+ version('6.5.0', sha256='5544f3abbb71dcd6aa08d18aceaf53c38373de4cbd0c3af44fbb39c20cfeb7cc')
+ version('6.4.4', sha256='1c5de9565781847658c3cc11edcb404e6e6d1c5a9dfc81e977de7a9a7a162c8a')
version('6.4.3', sha256='4d1effeadb84b3e1efd7d9ac88018ef567aa2e0aa72e1112f0abf2e493e2a189')
version('6.4.2', sha256='40b9b66deebb6538fc0f4cd802554d0d763ea6426b9b2f0e8db8dc617e494479')
version('6.4.1', sha256='86f25c71517952a63e92e0a9bcf66d27e4afb2b0d67cf84af480f116b8e7f53c')
@@ -59,7 +61,7 @@ class Sirius(CMakePackage, CudaPackage):
depends_on('py-pybind11', when='+python', type=('build', 'run'))
depends_on('magma', when='+magma')
- depends_on('spfft', when='@6.4.0:~cuda')
+ depends_on('spfft', when='@6.4.0:')
depends_on('spfft+cuda', when='@6.4.0:+cuda')
depends_on('elpa+openmp', when='+elpa+openmp')
depends_on('elpa~openmp', when='+elpa~openmp')
diff --git a/var/spack/repos/builtin/packages/slepc/package.py b/var/spack/repos/builtin/packages/slepc/package.py
index 2c72af0342..6d3bb5dba2 100644
--- a/var/spack/repos/builtin/packages/slepc/package.py
+++ b/var/spack/repos/builtin/packages/slepc/package.py
@@ -11,8 +11,8 @@ from spack import *
class Slepc(Package):
"""Scalable Library for Eigenvalue Problem Computations."""
- homepage = "http://slepc.upv.es"
- url = "http://slepc.upv.es/download/distrib/slepc-3.6.2.tar.gz"
+ homepage = "https://slepc.upv.es"
+ url = "https://slepc.upv.es/download/distrib/slepc-3.6.2.tar.gz"
git = "https://gitlab.com/slepc/slepc.git"
maintainers = ['joseeroman', 'balay']
diff --git a/var/spack/repos/builtin/packages/source-highlight/package.py b/var/spack/repos/builtin/packages/source-highlight/package.py
new file mode 100644
index 0000000000..eee706518a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/source-highlight/package.py
@@ -0,0 +1,21 @@
+# Copyright 2013-2019 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 import *
+
+
+class SourceHighlight(AutotoolsPackage, GNUMirrorPackage):
+ """This program, given a source file, produces a document with syntax
+ highlighting. It also provides a C++ highlight library
+ (since version 3.0). """
+
+ homepage = "https://www.gnu.org/software/src-highlite/"
+ gnu_mirror_path = "src-highlite/source-highlight-3.1.8.tar.gz"
+
+ version('3.1.9', sha256='3a7fd28378cb5416f8de2c9e77196ec915145d44e30ff4e0ee8beb3fe6211c91')
+ version('3.1.8', sha256='01336a7ea1d1ccc374201f7b81ffa94d0aecb33afc7d6903ebf9fbf33a55ada3')
+
+ depends_on('boost')
diff --git a/var/spack/repos/builtin/packages/spath/package.py b/var/spack/repos/builtin/packages/spath/package.py
new file mode 100644
index 0000000000..5ccd259f48
--- /dev/null
+++ b/var/spack/repos/builtin/packages/spath/package.py
@@ -0,0 +1,34 @@
+# Copyright 2013-2020 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 import *
+
+
+class Spath(CMakePackage):
+ """Represent and manipulate file system paths"""
+
+ homepage = "https://github.com/ecp-veloc/spath"
+ git = "https://github.com/ecp-veloc/spath.git"
+
+ tags = ['ecp']
+
+ version('master', branch='master')
+
+ variant('mpi', default=True, description="Build with MPI support.")
+ depends_on('mpi', when='+mpi')
+
+ def cmake_args(self):
+ args = []
+
+ if self.spec.satisfies('platform=cray'):
+ args.append("-DSPATH_LINK_STATIC=ON")
+
+ if "+mpi" in self.spec:
+ args.append('-DMPI=ON')
+ args.append("-DMPI_C_COMPILER=%s" % self.spec['mpi'].mpicc)
+ else:
+ args.append('-DMPI=OFF')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/spdlog/package.py b/var/spack/repos/builtin/packages/spdlog/package.py
index e4aad3bf42..15a0cc1d9d 100644
--- a/var/spack/repos/builtin/packages/spdlog/package.py
+++ b/var/spack/repos/builtin/packages/spdlog/package.py
@@ -12,6 +12,8 @@ class Spdlog(CMakePackage):
homepage = "https://github.com/gabime/spdlog"
url = "https://github.com/gabime/spdlog/archive/v0.9.0.tar.gz"
+ version('1.5.0', sha256='b38e0bbef7faac2b82fed550a0c19b0d4e7f6737d5321d4fd8f216b80f8aee8a')
+ version('1.4.2', sha256='821c85b120ad15d87ca2bc44185fa9091409777c756029125a02f81354072157')
version('1.4.1', sha256='3291958eb54ed942d1bd3aef1b4f8ccf70566cbc04d34296ec61eb96ceb73cff')
version('1.2.1', sha256='867a4b7cedf9805e6f76d3ca41889679054f7e5a3b67722fe6d0eae41852a767')
version('1.2.0', sha256='0ba31b9e7f8e43a7be328ab0236d57810e5d4fc8a1a7842df665ae22d5cbd128')
diff --git a/var/spack/repos/builtin/packages/spiral/package.py b/var/spack/repos/builtin/packages/spiral/package.py
new file mode 100644
index 0000000000..5011875e13
--- /dev/null
+++ b/var/spack/repos/builtin/packages/spiral/package.py
@@ -0,0 +1,65 @@
+# Copyright 2013-2019 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 import *
+
+
+class Spiral(CMakePackage):
+ """SPIRAL is a program generation system for linear transforms and other
+ mathematical functions that produces very high performance code for a wide
+ spectrum of hardware platforms."""
+
+ homepage = "https://spiral.net"
+ url = "https://github.com/spiral-software/spiral-software/archive/8.1.2.tar.gz"
+
+ maintainers = ['spiralgen']
+
+ version('8.1.2', sha256='506f1dbf923aa1c9f19f05444fa947085715eef37c9d2494d133fcaaa1dd50bc')
+
+ extendable = True
+
+ # No dependencies.
+
+ def build(self, spec, prefix):
+ with working_dir(self.build_directory):
+ make('all')
+ make('install/local')
+
+ # For some reason the make install/local doesn't seem to install
+ # the gap exe...though it does work if run manually
+ gapfil = join_path(self.build_directory, 'gap/src/gap')
+ dest = join_path(self.stage.source_path, 'gap/bin')
+ install(gapfil, dest)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.gap.bin)
+ gapfil = join_path(self.build_directory, 'gap/src/gap')
+ install(gapfil, prefix.gap.bin)
+ with working_dir(join_path(self.build_directory, 'gap')):
+ files = ('spiral', 'spirald', '_spiral.g')
+ for fil in files:
+ install(fil, prefix)
+ set_executable(join_path(prefix, fil))
+
+ with working_dir(self.stage.source_path):
+ files = ('LICENSE', 'README.md', 'ReleaseNotes.md')
+ for fil in files:
+ install(fil, prefix)
+
+ mkdirp(prefix.gap.lib)
+ mkdirp(prefix.gap.grp)
+ mkdirp(prefix.namespaces)
+ mkdirp(prefix.profiler)
+ mkdirp(prefix.tests)
+
+ print("self.stage.source_path = " + self.stage.source_path)
+ with working_dir(self.stage.source_path):
+ install_tree('namespaces', prefix.namespaces)
+ install_tree('profiler', prefix.profiler)
+ install_tree('tests', prefix.tests)
+
+ with working_dir(join_path(self.stage.source_path, 'gap')):
+ install_tree('lib', prefix.gap.lib)
+ install_tree('grp', prefix.gap.grp)
diff --git a/var/spack/repos/builtin/packages/sqlite/package.py b/var/spack/repos/builtin/packages/sqlite/package.py
index f8dd0e4948..4e79463f36 100644
--- a/var/spack/repos/builtin/packages/sqlite/package.py
+++ b/var/spack/repos/builtin/packages/sqlite/package.py
@@ -38,7 +38,7 @@ class Sqlite(AutotoolsPackage):
'(unsafe for <3.26.0.0 due to Magellan).')
variant('rtree', default=False, description='Build with Rtree module')
- variant('column_metadata', default=False, description="Build with COLUMN_METADATA")
+ variant('column_metadata', default=True, description="Build with COLUMN_METADATA")
# See https://blade.tencent.com/magellan/index_en.html
conflicts('+fts', when='@:3.25.99.99')
diff --git a/var/spack/repos/builtin/packages/ssht/float_conversion.patch b/var/spack/repos/builtin/packages/ssht/float_conversion.patch
new file mode 100644
index 0000000000..af81bcafd8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ssht/float_conversion.patch
@@ -0,0 +1,11 @@
+--- spack-src/src/c/ssht_sampling.h
++++ spack-src/src/c/ssht_sampling.h
+@@ -89,7 +89,7 @@
+ */
+ static inline void ssht_sampling_ind2elm(int *el, int *m, int ind) {
+
+- *el = sqrt(ind);
++ *el = lrint(floor(sqrt(ind)));
+ *m = ind - (*el)*(*el) - (*el);
+
+ }
diff --git a/var/spack/repos/builtin/packages/ssht/package.py b/var/spack/repos/builtin/packages/ssht/package.py
index 293ab0eedd..7a4cd4857b 100644
--- a/var/spack/repos/builtin/packages/ssht/package.py
+++ b/var/spack/repos/builtin/packages/ssht/package.py
@@ -7,18 +7,41 @@ from spack import *
class Ssht(Package):
- """The SSHT code provides functionality to perform fast and exact
- spin spherical harmonic transforms."""
+ """ssht: Spin spherical harmonic transforms
+
+ The SSHT code provides functionality to perform fast and exact
+ spin spherical harmonic transforms based on the sampling theorem
+ on the sphere derived in our paper: A novel sampling theorem on
+ the sphere <http://dx.doi.org/10.1109/TSP.2011.2166394>.
+ """
homepage = "https://astro-informatics.github.io/ssht/"
git = "https://github.com/astro-informatics/ssht.git"
+ maintainers = ['eschnett']
+
version('1.2b1', commit='7378ce8853897cbd1b08adebf7ec088c1e40f860')
depends_on('fftw')
+ patch('float_conversion.patch')
+
def install(self, spec, prefix):
- make('default')
- install_tree('include/c', join_path(prefix, 'include'))
+ make('default', 'SSHTDIR=.')
+ mkdirp(join_path(prefix, 'include'))
+ install('src/c/ssht.h',
+ join_path(prefix, 'include', 'ssht.h'))
+ install('src/c/ssht_adjoint.h',
+ join_path(prefix, 'include', 'ssht_adjoint.h'))
+ install('src/c/ssht_core.h',
+ join_path(prefix, 'include', 'ssht_core.h'))
+ install('src/c/ssht_dl.h',
+ join_path(prefix, 'include', 'ssht_dl.h'))
+ install('src/c/ssht_error.h',
+ join_path(prefix, 'include', 'ssht_error.h'))
+ install('src/c/ssht_sampling.h',
+ join_path(prefix, 'include', 'ssht_sampling.h'))
+ install('src/c/ssht_types.h',
+ join_path(prefix, 'include', 'ssht_types.h'))
install_tree('doc/c', join_path(prefix, 'doc'))
install_tree('lib/c', join_path(prefix, 'lib'))
diff --git a/var/spack/repos/builtin/packages/stat/package.py b/var/spack/repos/builtin/packages/stat/package.py
index 86338a2b9d..2db8a33ab8 100644
--- a/var/spack/repos/builtin/packages/stat/package.py
+++ b/var/spack/repos/builtin/packages/stat/package.py
@@ -14,6 +14,8 @@ class Stat(AutotoolsPackage):
git = "https://github.com/llnl/stat.git"
version('develop', branch='develop')
+ version('4.0.2', sha256='9ece10dde8e1579c9db469ac8d2391b26e59498c0947dbb271c2d01d7ef0a65d',
+ url='https://github.com/LLNL/STAT/releases/download/v4.0.2/stat-4.0.2.tar.gz')
version('4.0.1', sha256='ae3fbd6946003fb16233d82d40285780a9a802da5fe30d09adb8a8b2a2cc4ad6',
url='https://github.com/LLNL/STAT/files/2489327/stat-4.0.1.tar.gz')
version('4.0.0', sha256='1c4f62686645f6dc1d9ef890acc9c2839c150789dc220718775878feb41bdabf',
diff --git a/var/spack/repos/builtin/packages/suite-sparse/package.py b/var/spack/repos/builtin/packages/suite-sparse/package.py
index 0e6a27f1dd..20c1dbd88e 100644
--- a/var/spack/repos/builtin/packages/suite-sparse/package.py
+++ b/var/spack/repos/builtin/packages/suite-sparse/package.py
@@ -14,6 +14,7 @@ class SuiteSparse(Package):
url = 'https://github.com/DrTimothyAldenDavis/SuiteSparse/archive/v4.5.3.tar.gz'
git = 'https://github.com/DrTimothyAldenDavis/SuiteSparse.git'
+ version('5.7.1', sha256='5ba5add1663d51a1b6fb128b50fe869b497f3096765ff7f8212f0ede044b9557')
version('5.6.0', sha256='76d34d9f6dafc592b69af14f58c1dc59e24853dcd7c2e8f4c98ffa223f6a1adb')
version('5.5.0', sha256='63c73451734e2bab19d1915796c6776565ea6aea5da4063a9797ecec60da2e3d')
version('5.4.0', sha256='d9d62d539410d66550d0b795503a556830831f50087723cb191a030525eda770')
@@ -130,8 +131,7 @@ class SuiteSparse(Package):
# In those SuiteSparse versions calling "make install" in one go is
# not possible, mainly because of GraphBLAS. Thus compile first and
# install in a second run.
- if (self.spec.version >= Version('5.4.0') and
- self.spec.version <= Version('5.6.0')):
+ if '@5.4.0:' in self.spec:
make('default', *make_args)
make_args.append('INSTALL=%s' % prefix)
diff --git a/var/spack/repos/builtin/packages/swig/package.py b/var/spack/repos/builtin/packages/swig/package.py
index ac48fb1246..ebc04dd077 100644
--- a/var/spack/repos/builtin/packages/swig/package.py
+++ b/var/spack/repos/builtin/packages/swig/package.py
@@ -23,6 +23,7 @@ class Swig(AutotoolsPackage):
url = "http://prdownloads.sourceforge.net/swig/swig-3.0.12.tar.gz"
version('master', git='https://github.com/swig/swig.git')
+ version('4.0.1', sha256='7a00b4d0d53ad97a14316135e2d702091cd5f193bb58bcfcd8bc59d41e7887a9')
version('4.0.0', sha256='e8a39cd6437e342cdcbd5af27a9bf11b62dc9efec9248065debcb8276fcbb925')
version('3.0.12', sha256='7cf9f447ae7ed1c51722efc45e7f14418d15d7a1e143ac9f09a668999f4fc94d')
version('3.0.11', sha256='d9031d531d7418829a54d0d51c4ed9007016b213657ec70be44031951810566e')
diff --git a/var/spack/repos/builtin/packages/sz/package.py b/var/spack/repos/builtin/packages/sz/package.py
index 3453a5675e..0982883e29 100644
--- a/var/spack/repos/builtin/packages/sz/package.py
+++ b/var/spack/repos/builtin/packages/sz/package.py
@@ -3,21 +3,20 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-
from spack import *
-class Sz(AutotoolsPackage):
- """Error-bounded Lossy Compressor for HPC Data."""
+class Sz(CMakePackage):
+ """Error-bounded Lossy Compressor for HPC Data"""
homepage = "https://collab.cels.anl.gov/display/ESR/SZ"
url = "https://github.com/disheng222/SZ/archive/v2.1.8.0.tar.gz"
+ git = "https://github.com/disheng222/sz"
maintainers = ['disheng222']
- parallel = False
-
- git = "https://github.com/disheng222/SZ.git"
version('develop', branch='master')
+ version('2.1.8.3', sha256='be94f3c8ab03d6849c59a98e0ebf80816a6b8d07a1d762a4b285498acb2f3871')
+ version('2.1.8.1', sha256='a27c9c9da16c9c4232c54813ba79178945f47609043f11501d49a171e47d3f46')
version('2.1.8.0', sha256='8d6bceb59a03d52e601e29d9b35c21b146c248abae352f9a4828e91d8d26aa24')
version('2.0.2.0', sha256='176c65b421bdec8e91010ffbc9c7bf7852c799972101d6b66d2a30d9702e59b0')
version('1.4.13.5', sha256='b5e37bf3c377833eed0a7ca0471333c96cd2a82863abfc73893561aaba5f18b9')
@@ -32,17 +31,88 @@ class Sz(AutotoolsPackage):
version('1.4.10.0', sha256='cf23cf1ffd7c69c3d3128ae9c356b6acdc03a38f92c02db5d9bfc04f3fabc506')
version('1.4.9.2', sha256='9dc785274d068d04c2836955fc93518a9797bfd409b46fea5733294b7c7c18f8')
- variant('fortran', default=False,
- description='Enable fortran compilation')
+ variant('python', default=False, description="builds the python wrapper")
+ variant('netcdf', default=False, description="build the netcdf reader")
+ variant('hdf5', default=False, description="build the hdf5 filter")
+ variant('pastri', default=False, description="build the pastri mode")
+ variant('time_compression', default=False, description="build the time based compression mode")
+ variant('random_access', default=False, description="build the random access compression mode")
+ variant('fortran', default=False, description='Enable fortran compilation')
+ variant('shared', default=True, description="build shared versions of the libraries")
# Part of latest sources don't support -O3 optimization
# with Fujitsu compiler.
patch('fix_optimization.patch', when='@2.0.2.0:%fj')
- def configure_args(self):
+ depends_on('zlib')
+ depends_on('zstd')
+
+ extends('python', when="+python")
+ depends_on('python@3:', when="+python", type=('build', 'link', 'run'))
+ depends_on('swig@3.12:', when="+python", type='build')
+ depends_on('py-numpy', when="+python", type=('build', 'link', 'run'))
+ depends_on('hdf5', when="+hdf5")
+ depends_on('netcdf-c', when="+netcdf")
+
+ @property
+ def build_directory(self):
+ """autotools needs a different build directory to work"""
+ if self.version >= Version("2.1.8.1"):
+ return "spack-build"
+ else:
+ return "."
+
+ @when("@:2.1.8.0")
+ def cmake(self, spec, prefix):
+ """use autotools before 2.1.8.1"""
+ configure_args = ["--prefix=" + prefix]
+ if "+fortran" in spec:
+ configure_args.append("--enable-fortran")
+ else:
+ configure_args.append("--disable-fortran")
+ configure(*configure_args)
+
+ def cmake_args(self):
+ """configure the package with CMake for version 2.1.8.1 and later"""
args = []
- if '+fortran' in self.spec:
- args += ['--enable-fortran']
+
+ if "+python" in self.spec:
+ args.append("-DBUILD_PYTHON_WRAPPER=ON")
+ else:
+ args.append("-DBUILD_PYTHON_WRAPPER=OFF")
+
+ if "+netcdf" in self.spec:
+ args.append("-DBUILD_NETCDF_READER=ON")
+ else:
+ args.append("-DBUILD_NETCDF_READER=OFF")
+
+ if "+hdf5" in self.spec:
+ args.append("-DBUILD_HDF5_FILTER=ON")
+ else:
+ args.append("-DBUILD_HDF5_FILTER=OFF")
+
+ if "+pastri" in self.spec:
+ args.append("-DBUILD_PASTRI=ON")
+ else:
+ args.append("-DBUILD_PASTRI=OFF")
+
+ if "+time_compression" in self.spec:
+ args.append("-DBUILD_TIMECMPR=ON")
+ else:
+ args.append("-DBUILD_TIMECMPR=OFF")
+
+ if "+random_access" in self.spec:
+ args.append("-DBUILD_RANDOMACCESS=ON")
+ else:
+ args.append("-DBUILD_RANDOMACCESS=OFF")
+
+ if "+fortran" in self.spec:
+ args.append("-DBUILD_FORTRAN=ON")
+ else:
+ args.append("-DBUILD_FORTRAN=OFF")
+
+ if "+shared" in self.spec:
+ args.append("-DBUILD_SHARED_LIBS=ON")
else:
- args += ['--disable-fortran']
+ args.append("-DBUILD_SHARED_LIBS=OFF")
return args
diff --git a/var/spack/repos/builtin/packages/tau/package.py b/var/spack/repos/builtin/packages/tau/package.py
index c5ac0a43e8..0329841029 100644
--- a/var/spack/repos/builtin/packages/tau/package.py
+++ b/var/spack/repos/builtin/packages/tau/package.py
@@ -67,6 +67,8 @@ class Tau(Package):
variant('cuda', default=False, description='Activates CUDA support')
variant('fortran', default=darwin_default, description='Activates Fortran support')
variant('io', default=True, description='Activates POSIX I/O support')
+ variant('adios2', default=False, description='Activates ADIOS2 output support')
+ variant('sqlite', default=False, description='Activates SQLite3 output support')
# Support cross compiling.
# This is a _reasonable_ subset of the full set of TAU
@@ -85,18 +87,23 @@ class Tau(Package):
depends_on('libdwarf', when='+libdwarf')
depends_on('libelf', when='+libdwarf')
# TAU requires the ELF header support, libiberty and demangle.
- depends_on('binutils+libiberty+headers~nls', when='+binutils')
+ depends_on('binutils@:2.33.1+libiberty+headers~nls', when='+binutils')
depends_on('python@2.7:', when='+python')
depends_on('libunwind', when='+libunwind')
- depends_on('mpi', when='+mpi')
+ depends_on('mpi', when='+mpi', type=('build', 'run', 'link'))
depends_on('cuda', when='+cuda')
depends_on('gasnet', when='+gasnet')
+ depends_on('adios2', when='+adios2')
+ depends_on('sqlite', when='+sqlite')
+ depends_on('hwloc')
# Elf only required from 2.28.1 on
conflicts('+libelf', when='@:2.28.0')
conflicts('+libdwarf', when='@:2.28.0')
- filter_compiler_wrappers('tau_cc.sh', 'Makefile.tau', relative_root='bin')
+ # ADIOS2, SQLite only available from 2.29.1 on
+ conflicts('+adios2', when='@:2.29.1')
+ conflicts('+sqlite', when='@:2.29.1')
def set_compiler_options(self, spec):
@@ -145,8 +152,7 @@ class Tau(Package):
# TAU configure, despite the name , seems to be a manually
# written script (nothing related to autotools). As such it has
# a few #peculiarities# that make this build quite hackish.
- options = ["-prefix=%s" % prefix,
- "-iowrapper"]
+ options = ["-prefix=%s" % prefix]
if '+craycnl' in spec:
options.append('-arch=craycnl')
@@ -206,6 +212,11 @@ class Tau(Package):
options.append("-otf=%s" % spec['otf2'].prefix)
if '+mpi' in spec:
+ env['CC'] = spec['mpi'].mpicc
+ env['CXX'] = spec['mpi'].mpicxx
+ env['F77'] = spec['mpi'].mpif77
+ env['FC'] = spec['mpi'].mpifc
+
options.append('-mpi')
if '+comm' in spec:
options.append('-PROFILECOMMUNICATORS')
@@ -219,6 +230,12 @@ class Tau(Package):
if '+cuda' in spec:
options.append("-cuda=%s" % spec['cuda'].prefix)
+ if '+adios2' in spec:
+ options.append("-adios=%s" % spec['adios2'].prefix)
+
+ if '+sqlite' in spec:
+ options.append("-sqlite3=%s" % spec['sqlite'].prefix)
+
if '+phase' in spec:
options.append('-PROFILEPHASE')
@@ -253,11 +270,15 @@ class Tau(Package):
compiler_specific_options = self.set_compiler_options(spec)
options.extend(compiler_specific_options)
configure(*options)
+
make("install")
# Link arch-specific directories into prefix since there is
# only one arch per prefix the way spack installs.
self.link_tau_arch_dirs()
+ # TAU may capture Spack's internal compiler wrapper. Replace
+ # it with the correct compiler.
+ self.fix_tau_compilers()
def link_tau_arch_dirs(self):
for subdir in os.listdir(self.prefix):
@@ -267,6 +288,22 @@ class Tau(Package):
if os.path.isdir(src) and not os.path.exists(dest):
os.symlink(join_path(subdir, d), dest)
+ def fix_tau_compilers(self):
+ filter_file('FULL_CC=' + spack_cc, 'FULL_CC=' + self.compiler.cc,
+ self.prefix + '/include/Makefile', backup=False,
+ string=True)
+ filter_file('FULL_CXX=' + spack_cxx, 'FULL_CXX=' +
+ self.compiler.cxx, self.prefix + '/include/Makefile',
+ backup=False, string=True)
+ for makefile in os.listdir(self.prefix.lib):
+ if makefile.startswith('Makefile.tau'):
+ filter_file('FULL_CC=' + spack_cc, 'FULL_CC=' +
+ self.compiler.cc, self.prefix.lib + "/" +
+ makefile, backup=False, string=True)
+ filter_file('FULL_CXX=' + spack_cxx, 'FULL_CXX=' +
+ self.compiler.cxx, self.prefix.lib +
+ "/" + makefile, backup=False, string=True)
+
def setup_run_environment(self, env):
pattern = join_path(self.prefix.lib, 'Makefile.*')
files = glob.glob(pattern)
diff --git a/var/spack/repos/builtin/packages/tcsh/package.py b/var/spack/repos/builtin/packages/tcsh/package.py
index 19bdde1503..90625e352d 100644
--- a/var/spack/repos/builtin/packages/tcsh/package.py
+++ b/var/spack/repos/builtin/packages/tcsh/package.py
@@ -15,10 +15,11 @@ class Tcsh(AutotoolsPackage):
syntax."""
homepage = "http://www.tcsh.org/"
- url = "http://ftp.funet.fi/pub/mirrors/ftp.astron.com/pub/tcsh/old/tcsh-6.20.00.tar.gz"
+ url = "http://ftp.funet.fi/pub/mirrors/ftp.astron.com/pub/tcsh/tcsh-6.20.00.tar.gz"
+ list_url = "http://ftp.funet.fi/pub/mirrors/ftp.astron.com/pub/tcsh/old/"
- version('6.21.00', sha256='c438325448371f59b12a4c93bfd3f6982e6f79f8c5aef4bc83aac8f62766e972',
- url='http://ftp.funet.fi/pub/mirrors/ftp.astron.com/pub/tcsh/tcsh-6.21.00.tar.gz')
+ version('6.22.02', sha256='ed287158ca1b00ba477e8ea57bac53609838ebcfd05fcb05ca95021b7ebe885b')
+ version('6.21.00', sha256='c438325448371f59b12a4c93bfd3f6982e6f79f8c5aef4bc83aac8f62766e972')
version('6.20.00', sha256='b89de7064ab54dac454a266cfe5d8bf66940cb5ed048d0c30674ea62e7ecef9d')
def fedora_patch(commit, file, **kwargs): # noqa
@@ -40,7 +41,7 @@ class Tcsh(AutotoolsPackage):
# Downstream patches
fedora_patch('8a6066c901fb4fc75013dd488ba958387f00c74d', 'tcsh-6.20.00-manpage-memoryuse.patch', sha256='3a4e60fe56a450632140c48acbf14d22850c1d72835bf441e3f8514d6c617a9f') # noqa: E501
- depends_on('ncurses')
+ depends_on('ncurses+termlib')
@run_after('install')
def link_csh(self):
diff --git a/var/spack/repos/builtin/packages/the-silver-searcher/package.py b/var/spack/repos/builtin/packages/the-silver-searcher/package.py
index 905fdabba2..516e744247 100644
--- a/var/spack/repos/builtin/packages/the-silver-searcher/package.py
+++ b/var/spack/repos/builtin/packages/the-silver-searcher/package.py
@@ -12,6 +12,7 @@ class TheSilverSearcher(AutotoolsPackage):
homepage = "http://geoff.greer.fm/ag/"
url = "http://geoff.greer.fm/ag/releases/the_silver_searcher-0.32.0.tar.gz"
+ version('2.2.0', sha256='d9621a878542f3733b5c6e71c849b9d1a830ed77cb1a1f6c2ea441d4b0643170')
version('2.1.0', sha256='d4652bd91c3a05e87a15809c5f3f14ad2e5e1f80185af510e3fa4ad2038c15d4')
version('0.32.0', sha256='944ca77e498f344b2bfbd8df6d5d8df7bbc1c7e080b50c0bab3d1a9a55151b60')
version('0.30.0', sha256='b4bf9e50bf48bc5fde27fc386f7bcad8644ef15a174c862a10813e81bd127e69')
diff --git a/var/spack/repos/builtin/packages/tixi/package.py b/var/spack/repos/builtin/packages/tixi/package.py
new file mode 100644
index 0000000000..74a7ed7c65
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tixi/package.py
@@ -0,0 +1,24 @@
+# Copyright 2013-2020 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 import *
+
+
+class Tixi(CMakePackage):
+ """TiXI is a fast and simple XML interface library and could be used
+ from applications written in C, C++, Fortran, JAVA and Python. """
+
+ homepage = "https://github.com/DLR-SC/tixi"
+ url = "https://github.com/DLR-SC/tixi/archive/v3.0.3.tar.gz"
+ git = "https://github.com/DLR-SC/tixi.git"
+
+ version('3.0.3', sha256='3584e0cec6ab811d74fb311a9af0663736b1d7f11b81015fcb378efaf5ad3589')
+ version('2.2.4', sha256='9080d2a617b7c411b9b4086de23998ce86e261b88075f38c73d3ce25da94b21c')
+
+ depends_on('python', type='build')
+ depends_on('expat')
+ depends_on('curl')
+ depends_on('libxml2')
+ depends_on('libxslt')
diff --git a/var/spack/repos/builtin/packages/tmux/package.py b/var/spack/repos/builtin/packages/tmux/package.py
index 6ee165a7b1..e6677668fd 100644
--- a/var/spack/repos/builtin/packages/tmux/package.py
+++ b/var/spack/repos/builtin/packages/tmux/package.py
@@ -29,13 +29,7 @@ class Tmux(AutotoolsPackage):
version('2.1', sha256='31564e7bf4bcef2defb3cb34b9e596bd43a3937cad9e5438701a81a5a9af6176')
version('1.9a', sha256='c5e3b22b901cf109b20dab54a4a651f0471abd1f79f6039d79b250d21c2733f5')
+ # used by configure to e.g. find libtinfo
+ depends_on('pkgconfig', type='build')
depends_on('libevent')
depends_on('ncurses')
-
- def flag_handler(self, name, flags):
- if name == 'cppflags':
- flags.append(self.spec['ncurses'].headers.include_flags)
- return (None, flags, None)
-
- def configure_args(self):
- return ['LIBTINFO_LIBS=-lncurses']
diff --git a/var/spack/repos/builtin/packages/tree/package.py b/var/spack/repos/builtin/packages/tree/package.py
index c3823d313c..3f3e480969 100644
--- a/var/spack/repos/builtin/packages/tree/package.py
+++ b/var/spack/repos/builtin/packages/tree/package.py
@@ -18,6 +18,7 @@ class Tree(Package):
homepage = "http://mama.indstate.edu/users/ice/tree/"
url = "http://mama.indstate.edu/users/ice/tree/src/tree-1.7.0.tgz"
+ version('1.8.0', sha256='715d5d4b434321ce74706d0dd067505bb60c5ea83b5f0b3655dae40aa6f9b7c2')
version('1.7.0', sha256='6957c20e82561ac4231638996e74f4cfa4e6faabc5a2f511f0b4e3940e8f7b12')
def install(self, spec, prefix):
@@ -30,6 +31,10 @@ class Tree(Package):
'hash.o',
'color.o'
]
+ # version 1.8.0 added file.c
+ if spec.version >= Version('1.8.0'):
+ objs.append('file.o')
+
if (sys.platform == 'darwin'):
objs.append('strverscmp.o')
diff --git a/var/spack/repos/builtin/packages/triangle/package.py b/var/spack/repos/builtin/packages/triangle/package.py
index 882b8b472b..f8703f33b3 100644
--- a/var/spack/repos/builtin/packages/triangle/package.py
+++ b/var/spack/repos/builtin/packages/triangle/package.py
@@ -18,6 +18,8 @@ class Triangle(Package):
version('1.6', sha256='1766327add038495fa3499e9b7cc642179229750f7201b94f8e1b7bee76f8480')
+ depends_on('libx11', type='link')
+
def install(self, spec, prefix):
make()
mkdirp(prefix.bin)
diff --git a/var/spack/repos/builtin/packages/trilinos/fix_clang_errors_12_18_1.patch b/var/spack/repos/builtin/packages/trilinos/fix_clang_errors_12_18_1.patch
new file mode 100644
index 0000000000..6da3f4314d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/trilinos/fix_clang_errors_12_18_1.patch
@@ -0,0 +1,39 @@
+From 01b88601a85691da73042089778db6db5bf6cf01 Mon Sep 17 00:00:00 2001
+From: Jean-Paul Pelteret <jppelteret@gmail.com>
+Date: Sat, 1 Feb 2020 05:48:48 +0100
+Subject: [PATCH] Fix Clang 8.0.0 compiler errors 12.18.1
+
+---
+ packages/belos/tpetra/src/solvers/Belos_Tpetra_Krylov.hpp | 2 +-
+ packages/muelu/src/Interface/MueLu_ParameterListUtils.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/packages/belos/tpetra/src/solvers/Belos_Tpetra_Krylov.hpp b/packages/belos/tpetra/src/solvers/Belos_Tpetra_Krylov.hpp
+index d4f72bc..302dfc2 100644
+--- a/packages/belos/tpetra/src/solvers/Belos_Tpetra_Krylov.hpp
++++ b/packages/belos/tpetra/src/solvers/Belos_Tpetra_Krylov.hpp
+@@ -126,7 +126,7 @@ public:
+ virtual void
+ getDefaultParameters (Teuchos::ParameterList& params) const
+ {
+- const SolverInput<SC> input;
++ const SolverInput<SC> input{};
+ const int verbosity = 0;
+ const std::string implResScal = input.needToScale ?
+ "Norm of Preconditioned Initial Residual" : "None"; // ???
+diff --git a/packages/muelu/src/Interface/MueLu_ParameterListUtils.cpp b/packages/muelu/src/Interface/MueLu_ParameterListUtils.cpp
+index 051a2df..a703aff 100644
+--- a/packages/muelu/src/Interface/MueLu_ParameterListUtils.cpp
++++ b/packages/muelu/src/Interface/MueLu_ParameterListUtils.cpp
+@@ -143,7 +143,7 @@ namespace MueLu {
+
+ // Usage: GetMLSubList(paramList, "smoother", 2);
+ const Teuchos::ParameterList & GetMLSubList(const Teuchos::ParameterList & paramList, const std::string & type, int levelID) {
+- static const Teuchos::ParameterList emptyParamList;
++ static const Teuchos::ParameterList emptyParamList{};
+
+ char levelChar[11];
+ sprintf(levelChar, "(level %d)", levelID);
+--
+2.10.1 (Apple Git-78)
+
diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py
index 74e6b7f85e..fd623fe8db 100644
--- a/var/spack/repos/builtin/packages/trilinos/package.py
+++ b/var/spack/repos/builtin/packages/trilinos/package.py
@@ -66,6 +66,10 @@ class Trilinos(CMakePackage):
description='Enable explicit template instantiation (ETI)')
variant('float', default=False,
description='Enable single precision (float) numbers in Trilinos')
+ variant('gotype', default='long',
+ values=('int', 'long', 'long_long'),
+ multi=False,
+ description='global ordinal type for Tpetra')
variant('fortran', default=True,
description='Compile with Fortran support')
variant('openmp', default=False,
@@ -82,18 +86,24 @@ class Trilinos(CMakePackage):
description='Compile with Boost')
variant('cgns', default=False,
description='Enable CGNS')
- variant('adios2', default=False,
+ variant('adios2', default=False,
description='Enable ADIOS2')
+ variant('glm', default=True,
+ description='Compile with GLM')
variant('gtest', default=True,
description='Compile with Gtest')
variant('hdf5', default=True,
description='Compile with HDF5')
variant('hypre', default=True,
description='Compile with Hypre preconditioner')
+ variant('matio', default=True,
+ description='Compile with Matio')
variant('metis', default=True,
description='Compile with METIS and ParMETIS')
variant('mumps', default=True,
description='Compile with support for MUMPS solvers')
+ variant('netcdf', default=True,
+ description='Compile with netcdf')
variant('pnetcdf', default=False,
description='Compile with parallel-netcdf')
variant('suite-sparse', default=True,
@@ -185,6 +195,8 @@ class Trilinos(CMakePackage):
description='Enable DataTransferKit')
variant('fortrilinos', default=False,
description='Enable ForTrilinos')
+ variant('mesquite', default=False,
+ description='Enable Mesquite')
resource(name='dtk',
git='https://github.com/ornl-cees/DataTransferKit.git',
@@ -208,6 +220,21 @@ class Trilinos(CMakePackage):
tag='develop',
placement='packages/ForTrilinos',
when='+fortrilinos')
+ resource(name='mesquite',
+ url='https://github.com/trilinos/mesquite/archive/trilinos-release-12-12-1.tar.gz',
+ sha256='e0d09b0939dbd461822477449dca611417316e8e8d8268fd795debb068edcbb5',
+ placement='packages/mesquite',
+ when='+mesquite @12.12.1:12.16.99')
+ resource(name='mesquite',
+ git='https://github.com/trilinos/mesquite.git',
+ commit='20a679679b5cdf15bf573d66c5dc2b016e8b9ca1', # branch trilinos-release-12-12-1
+ placement='packages/mesquite',
+ when='+mesquite @12.18.1:12.18.99')
+ resource(name='mesquite',
+ git='https://github.com/trilinos/mesquite.git',
+ tag='develop',
+ placement='packages/mesquite',
+ when='+mesquite @develop')
conflicts('+amesos2', when='~teuchos')
conflicts('+amesos2', when='~tpetra')
@@ -266,6 +293,8 @@ class Trilinos(CMakePackage):
conflicts('+fortrilinos', when='~fortran')
conflicts('+fortrilinos', when='@:99')
conflicts('+fortrilinos', when='@master')
+ # Only allow Mesquite with Trilinos 12.12 and up, and develop
+ conflicts('+mesquite', when='@0:12.10.99,master')
# Can only use one type of SuperLU
conflicts('+superlu-dist', when='+superlu')
# For Trilinos v11 we need to force SuperLUDist=OFF, since only the
@@ -289,6 +318,8 @@ class Trilinos(CMakePackage):
# ADIOS2 was only added after v12.14.1
conflicts('+adios2', when='@:12.14.1')
conflicts('+adios2', when='@xsdk-0.2.0')
+ conflicts('+pnetcdf', when='~netcdf')
+
# ###################### Dependencies ##########################
# Everything should be compiled position independent (-fpic)
@@ -296,17 +327,17 @@ class Trilinos(CMakePackage):
depends_on('lapack')
depends_on('boost', when='+boost')
depends_on('boost', when='+dtk')
- depends_on('matio')
- depends_on('glm')
+ depends_on('matio', when='+matio')
+ depends_on('glm', when='+glm')
depends_on('metis@5:', when='+metis')
depends_on('suite-sparse', when='+suite-sparse')
depends_on('zlib', when="+zlib")
# MPI related dependencies
depends_on('mpi')
- depends_on('netcdf-c+mpi', when="~pnetcdf")
- depends_on('netcdf-c+mpi+parallel-netcdf', when="+pnetcdf@master,12.12.1:")
- depends_on('parallel-netcdf', when="+pnetcdf@master,12.12.1:")
+ depends_on('netcdf-c+mpi', when="+netcdf~pnetcdf")
+ depends_on('netcdf-c+mpi+parallel-netcdf', when="+netcdf+pnetcdf@master,12.12.1:")
+ depends_on('parallel-netcdf', when="+netcdf+pnetcdf@master,12.12.1:")
depends_on('parmetis', when='+metis')
depends_on('cgns', when='+cgns')
depends_on('adios2', when='+adios2')
@@ -342,6 +373,7 @@ class Trilinos(CMakePackage):
patch('xlf_tpetra.patch', when='@12.12.1%xl')
patch('xlf_tpetra.patch', when='@12.12.1%xl_r')
patch('xlf_tpetra.patch', when='@12.12.1%clang')
+ patch('fix_clang_errors_12_18_1.patch', when='@12.18.1%clang')
def url_for_version(self, version):
url = "https://github.com/trilinos/Trilinos/archive/trilinos-release-{0}.tar.gz"
@@ -417,6 +449,8 @@ class Trilinos(CMakePackage):
'ON' if '+kokkos' in spec else 'OFF'),
'-DTrilinos_ENABLE_MiniTensor=%s' % (
'ON' if '+minitensor' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Mesquite:BOOL=%s' % (
+ 'ON' if '+mesquite' in spec else 'OFF'),
'-DTrilinos_ENABLE_ML:BOOL=%s' % (
'ON' if '+ml' in spec else 'OFF'),
'-DTrilinos_ENABLE_MueLu:BOOL=%s' % (
@@ -511,14 +545,23 @@ class Trilinos(CMakePackage):
'-DTPL_ENABLE_LAPACK=ON',
'-DLAPACK_LIBRARY_NAMES=%s' % ';'.join(lapack.names),
'-DLAPACK_LIBRARY_DIRS=%s' % ';'.join(lapack.directories),
- '-DTPL_ENABLE_Netcdf:BOOL=ON',
- '-DNetCDF_ROOT:PATH=%s' % spec['netcdf-c'].prefix,
+ '-DTPL_ENABLE_GLM:BOOL=%s' % ('ON' if '+glm' in spec else 'OFF'),
+ '-DTPL_ENABLE_Matio:BOOL=%s' % (
+ 'ON' if '+matio' in spec else 'OFF'),
'-DTPL_ENABLE_X11:BOOL=%s' % (
'ON' if '+x11' in spec else 'OFF'),
'-DTrilinos_ENABLE_Gtest:BOOL=%s' % (
'ON' if '+gtest' in spec else 'OFF'),
])
+ if '+netcdf' in spec:
+ options.extend([
+ '-DTPL_ENABLE_Netcdf:BOOL=ON',
+ '-DNetCDF_ROOT:PATH=%s' % spec['netcdf-c'].prefix
+ ])
+ else:
+ options.extend(['-DTPL_ENABLE_Netcdf:BOOL=OFF'])
+
if '+hypre' in spec:
options.extend([
'-DTPL_ENABLE_HYPRE:BOOL=ON',
@@ -722,10 +765,15 @@ class Trilinos(CMakePackage):
)
if '+explicit_template_instantiation' in spec and '+tpetra' in spec:
+ gotype = spec.variants['gotype'].value
options.extend([
'-DTpetra_INST_DOUBLE:BOOL=ON',
- '-DTpetra_INST_INT_LONG:BOOL=ON',
- '-DTpetra_INST_INT_LONG_LONG:BOOL=ON',
+ '-DTpetra_INST_INT_INT:BOOL=%s' % (
+ 'ON' if gotype == 'int' else 'OFF'),
+ '-DTpetra_INST_INT_LONG:BOOL=%s' % (
+ 'ON' if gotype == 'long' else 'OFF'),
+ '-DTpetra_INST_INT_LONG_LONG:BOOL=%s' % (
+ 'ON' if gotype == 'long_long' else 'OFF'),
'-DTpetra_INST_COMPLEX_DOUBLE=%s' % complex_s,
'-DTpetra_INST_COMPLEX_FLOAT=%s' % complex_float_s,
'-DTpetra_INST_FLOAT=%s' % float_s,
diff --git a/var/spack/repos/builtin/packages/ucx/package.py b/var/spack/repos/builtin/packages/ucx/package.py
index 681fa5b6bf..e6ce377c70 100644
--- a/var/spack/repos/builtin/packages/ucx/package.py
+++ b/var/spack/repos/builtin/packages/ucx/package.py
@@ -13,7 +13,10 @@ class Ucx(AutotoolsPackage):
homepage = "http://www.openucx.org"
url = "https://github.com/openucx/ucx/releases/download/v1.3.1/ucx-1.3.1.tar.gz"
+ maintainers = ['hppritcha']
+
# Current
+ version('1.7.0', sha256='6ab81ee187bfd554fe7e549da93a11bfac420df87d99ee61ffab7bb19bdd3371')
version('1.6.1', sha256='1425648aa03f5fa40e4bc5c4a5a83fe0292e2fe44f6054352fbebbf6d8f342a1')
version('1.6.0', sha256='360e885dd7f706a19b673035a3477397d100a02eb618371697c7f3ee4e143e2c')
version('1.5.2', sha256='1a333853069860e86ba69b8d071ccc9871209603790e2b673ec61f8086913fad')
diff --git a/var/spack/repos/builtin/packages/umpire/package.py b/var/spack/repos/builtin/packages/umpire/package.py
index fc33ca7feb..90ea23dde3 100644
--- a/var/spack/repos/builtin/packages/umpire/package.py
+++ b/var/spack/repos/builtin/packages/umpire/package.py
@@ -16,6 +16,13 @@ class Umpire(CMakePackage):
version('develop', branch='develop', submodules='True')
version('master', branch='master', submodules='True')
+ version('2.1.0', tag='v2.1.0', submodules='True')
+ version('2.0.0', tag='v2.0.0', submodules='True')
+ version('1.1.0', tag='v1.1.0', submodules='True')
+ version('1.0.1', tag='v1.0.1', submodules='True')
+ version('1.0.0', tag='v1.0.0', submodules='True')
+ version('0.3.5', tag='v0.3.5', submodules='True')
+ version('0.3.4', tag='v0.3.4', submodules='True')
version('0.3.3', tag='v0.3.3', submodules='True')
version('0.3.2', tag='v0.3.2', submodules='True')
version('0.3.1', tag='v0.3.1', submodules='True')
@@ -29,7 +36,8 @@ class Umpire(CMakePackage):
version('0.1.3', tag='v0.1.3', submodules='True')
variant('cuda', default=False, description='Build with CUDA support')
- variant('fortran', default=False, description='Build C/Fortran API')
+ variant('fortran', default=False, description='Build Fortran API')
+ variant('c', default=True, description='Build C API')
variant('numa', default=False, description='Enable NUMA support')
depends_on('cuda', when='+cuda')
@@ -37,6 +45,7 @@ class Umpire(CMakePackage):
depends_on('cmake@3.9:', when='+cuda', type='build')
conflicts('+numa', when='@:0.3.2')
+ conflicts('~c', when='+fortran', msg='Fortran API requires C API')
def cmake_args(self):
spec = self.spec
@@ -50,6 +59,9 @@ class Umpire(CMakePackage):
else:
options.append('-DENABLE_CUDA=Off')
+ if '+c' in spec:
+ options.append('-DENABLE_C=On')
+
if '+fortran' in spec:
options.append('-DENABLE_FORTRAN=On')
diff --git a/var/spack/repos/builtin/packages/unifyfs/auto-mount.patch b/var/spack/repos/builtin/packages/unifyfs/auto-mount.patch
new file mode 100644
index 0000000000..a621f7dd11
--- /dev/null
+++ b/var/spack/repos/builtin/packages/unifyfs/auto-mount.patch
@@ -0,0 +1,25 @@
+diff --git a/client/src/pmpi_wrappers.c b/client/src/pmpi_wrappers.c
+index ac86d39..38755f5 100644
+--- a/client/src/pmpi_wrappers.c
++++ b/client/src/pmpi_wrappers.c
+@@ -14,7 +14,6 @@
+
+ #include "pmpi_wrappers.h"
+ #include "unifyfs.h"
+-#include <mpi.h>
+ #include <stdio.h>
+
+ int unifyfs_mpi_init(int* argc, char*** argv)
+diff --git a/client/src/pmpi_wrappers.h b/client/src/pmpi_wrappers.h
+index b90057c..995e44b 100644
+--- a/client/src/pmpi_wrappers.h
++++ b/client/src/pmpi_wrappers.h
+@@ -15,6 +15,8 @@
+ #ifndef UNIFYFS_PMPI_WRAPPERS_H
+ #define UNIFYFS_PMPI_WRAPPERS_H
+
++#include <mpi.h>
++
+ /* MPI_Init PMPI wrapper */
+ int unifyfs_mpi_init(int* argc, char*** argv);
+ int MPI_Init(int* argc, char*** argv);
diff --git a/var/spack/repos/builtin/packages/unifyfs/package.py b/var/spack/repos/builtin/packages/unifyfs/package.py
index cf4a8e0c4f..77b4014741 100644
--- a/var/spack/repos/builtin/packages/unifyfs/package.py
+++ b/var/spack/repos/builtin/packages/unifyfs/package.py
@@ -43,6 +43,7 @@ class Unifyfs(AutotoolsPackage):
depends_on('margo')
depends_on('mercury+bmi+sm')
depends_on('mpi')
+ depends_on('openssl')
# Optional dependencies
depends_on('hdf5', when='+hdf5')
@@ -53,6 +54,10 @@ class Unifyfs(AutotoolsPackage):
conflicts('%intel', when='+fortran')
conflicts('%xl', when='+fortran')
+ # Fix broken --enable-mpi-mount config option for version 0.9.0
+ # See https://github.com/LLNL/UnifyFS/issues/467
+ patch('auto-mount.patch', when='@0.9.0')
+
# Parallel disabled to prevent tests from being run out-of-order when
# installed with the --test={root, all} option.
parallel = False
diff --git a/var/spack/repos/builtin/packages/unqlite/package.py b/var/spack/repos/builtin/packages/unqlite/package.py
new file mode 100644
index 0000000000..84c3b5575e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/unqlite/package.py
@@ -0,0 +1,18 @@
+# Copyright 2013-2020 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 import *
+
+
+class Unqlite(CMakePackage):
+ """UnQLite is a in-process software library which implements a self-contained,
+ serverless, zero-configuration, transactional NoSQL database engine."""
+
+ homepage = "https://unqlite.org/"
+ url = "https://github.com/symisc/unqlite/archive/v1.1.9.tar.gz"
+ git = 'https://github.com/symisc/unqlite.git'
+
+ version('master', branch='master')
+ version('1.1.9', sha256='33d5b5e7b2ca223942e77d31112d2e20512bc507808414451c8a98a7be5e15c0')
diff --git a/var/spack/repos/builtin/packages/uqtk/package.py b/var/spack/repos/builtin/packages/uqtk/package.py
new file mode 100644
index 0000000000..c6af83e759
--- /dev/null
+++ b/var/spack/repos/builtin/packages/uqtk/package.py
@@ -0,0 +1,20 @@
+# Copyright 2013-2020 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 import *
+
+
+class Uqtk(CMakePackage):
+ """Sandia Uncertainty Quantification Toolkit. The UQ Toolkit (UQTk) is a
+ collection of libraries and tools for the quantification of uncertainty
+ in numerical model predictions"""
+
+ homepage = "https://www.sandia.gov/UQToolkit/"
+ url = "https://github.com/sandialabs/UQTk/archive/v3.0.4.tar.gz"
+ git = "https://github.com/sandialabs/UQTk.git"
+
+ version('master', branch='master')
+ version('3.0.4', sha256='0a72856438134bb571fd328d1d30ce3d0d7aead32eda9b7fb6e436a27d546d2e')
+
+ depends_on('expat')
diff --git a/var/spack/repos/builtin/packages/userspace-rcu/examples.patch b/var/spack/repos/builtin/packages/userspace-rcu/examples.patch
new file mode 100644
index 0000000000..ef65ab4b79
--- /dev/null
+++ b/var/spack/repos/builtin/packages/userspace-rcu/examples.patch
@@ -0,0 +1,13 @@
+diff --git a/doc/examples/Makefile.am b/doc/examples/Makefile.am
+index edf00eb..cd491df 100644
+--- a/doc/examples/Makefile.am
++++ b/doc/examples/Makefile.am
+@@ -141,7 +141,7 @@ all-local:
+ else \
+ rel_build_subdir="../"; \
+ fi; \
+- $(MAKE) -f dist-files/Makefile CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" AM_CPPFLAGS="$(AM_CPPFLAGS) -I"$${rel_src_subdir}/$(top_srcdir)/include/" -I"$${rel_src_subdir}/$(top_srcdir)/src/" -I"$${rel_build_subdir}$(top_builddir)/include/" -I"$${rel_build_subdir}$(top_builddir)/include/src/"" CFLAGS="$(CFLAGS)" AM_CFLAGS="$(AM_CFLAGS)" LDFLAGS="$(LDFLAGS)" AM_LDFLAGS="$(AM_LDFLAGS) -L../../../src/.libs/ -Wl,-rpath "$(PWD)/../../src/.libs/"" AM_V_P="$(AM_V_P)" AM_V_at="$(AM_V_at)" $(AM_MAKEFLAGS) all;
++ $(MAKE) -f dist-files/Makefile CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" AM_CPPFLAGS="$(AM_CPPFLAGS) -I"$${rel_src_subdir}/$(top_srcdir)/include/" -I"$${rel_src_subdir}/$(top_srcdir)/src/" -I"$${rel_build_subdir}$(top_builddir)/include/" -I"$${rel_build_subdir}$(top_builddir)/include/src/"" CFLAGS="$(CFLAGS)" AM_CFLAGS="$(AM_CFLAGS)" LDFLAGS="$(LDFLAGS)" AM_LDFLAGS="$(AM_LDFLAGS) -L../../../src/.libs/ -Wl,-rpath="$(PWD)/../../src/.libs/"" AM_V_P="$(AM_V_P)" AM_V_at="$(AM_V_at)" $(AM_MAKEFLAGS) all;
+
+ clean-local:
+ $(AM_V_at)$(MAKE) -f dist-files/Makefile $(AM_MAKEFLAGS) clean; \
diff --git a/var/spack/repos/builtin/packages/userspace-rcu/package.py b/var/spack/repos/builtin/packages/userspace-rcu/package.py
new file mode 100644
index 0000000000..be03459d34
--- /dev/null
+++ b/var/spack/repos/builtin/packages/userspace-rcu/package.py
@@ -0,0 +1,31 @@
+# Copyright 2013-2020 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 import *
+
+
+class UserspaceRcu(AutotoolsPackage):
+ """liburcu is a LGPLv2.1 userspace RCU (read-copy-update) library. This
+ data synchronization library provides read-side access which scales
+ linearly with the number of cores."""
+
+ homepage = "http://liburcu.org/"
+ url = "https://github.com/urcu/userspace-rcu/archive/v0.11.1.tar.gz"
+
+ version('0.11.1', sha256='a0ed8995edfbeac5f5eb2f152a8f3654040ecfc99a746bfe3da3bccf435b7d5d')
+ version('0.11.0', sha256='7834e4692565b491b9d2d258095d6c05089c9bae8a1bef280c338d15ba02e9ac')
+ version('0.10.2', sha256='e117c416fced894e24720cc1b38247074a13020f19d6704b38e554cbcb993d06')
+ version('0.9.6', sha256='4d9e4ca40c079e0b0e9f912a9092589b97fbaf80eb6537e9ae70d48c09472efa')
+
+ depends_on('m4', type='build')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+
+ patch('examples.patch', sha256='49aa8fa99d3a1315c639d2a90014079c34a7d0a6dde110b6cbb7b02f87324742')
+
+ def autoreconf(self, spec, prefix):
+ bash = which('bash')
+ bash('./bootstrap')
diff --git a/var/spack/repos/builtin/packages/util-linux/package.py b/var/spack/repos/builtin/packages/util-linux/package.py
index 49afb16f54..b95f8222e2 100644
--- a/var/spack/repos/builtin/packages/util-linux/package.py
+++ b/var/spack/repos/builtin/packages/util-linux/package.py
@@ -14,6 +14,10 @@ class UtilLinux(AutotoolsPackage):
list_url = "https://www.kernel.org/pub/linux/utils/util-linux"
list_depth = 1
+ version('2.35.1', sha256='37ac05d82c6410d89bc05d43cee101fefc8fe6cf6090b3ce7a1409a6f35db606')
+ version('2.35', sha256='98acab129a8490265052e6c1e033ca96d68758a13bb7fcd232c06bf16cc96238')
+ version('2.34', sha256='b62c92e5e1629642113cd41cec1ee86d1ee7e36b8ffe8ec3ac89c11797e9ac25')
+ version('2.33', sha256='952fb0d3498e81bd67b3c48e283c80cb12c719bc2357ec5801e7d420991ad319')
version('2.29.2', sha256='29ccdf91d2c3245dc705f0ad3bf729ac41d8adcdbeff914e797c552ecb04a4c7')
version('2.29.1', sha256='a6a7adba65a368e6dad9582d9fbedee43126d990df51266eaee089a73c893653')
version('2.25', sha256='7e43273a9e2ab99b5a54ac914fddf5d08ba7ab9b114c550e9f03474672bd23a1')
diff --git a/var/spack/repos/builtin/packages/valgrind/package.py b/var/spack/repos/builtin/packages/valgrind/package.py
index 684a5bdfa8..3f759efeac 100644
--- a/var/spack/repos/builtin/packages/valgrind/package.py
+++ b/var/spack/repos/builtin/packages/valgrind/package.py
@@ -22,6 +22,9 @@ class Valgrind(AutotoolsPackage):
url = "https://sourceware.org/pub/valgrind/valgrind-3.13.0.tar.bz2"
git = "git://sourceware.org/git/valgrind.git"
+ # The server is sometimes a bit slow to respond
+ fetch_options = {'timeout': 60}
+
version('develop', branch='master')
version('3.15.0', sha256='417c7a9da8f60dd05698b3a7bc6002e4ef996f14c13f0ff96679a16873e78ab1')
version('3.14.0', sha256='037c11bfefd477cc6e9ebe8f193bb237fe397f7ce791b4a4ce3fa1c6a520baa5')
diff --git a/var/spack/repos/builtin/packages/veccore/package.py b/var/spack/repos/builtin/packages/veccore/package.py
new file mode 100644
index 0000000000..a339358a08
--- /dev/null
+++ b/var/spack/repos/builtin/packages/veccore/package.py
@@ -0,0 +1,40 @@
+# Copyright 2013-2020 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 import *
+
+
+class Veccore(CMakePackage, CudaPackage):
+ """SIMD Vectorization Library for VecGeom and GeantV"""
+
+ homepage = "https://gitlab.cern.ch/VecGeom/VecCore"
+ url = "https://gitlab.cern.ch/VecGeom/VecCore/-/archive/v0.6.0/VecCore-v0.6.0.tar.gz"
+ git = "https://gitlab.cern.ch/VecGeom/VecCore.git"
+
+ maintainers = ['drbenmorgan', 'sethrj']
+
+ version('master', branch='master')
+ version('0.6.0', sha256='e7ff874ba2a8201624795cbe11c84634863e4ac7da691a936772d4202ef54413')
+ version('0.5.2', sha256='0cfaa830b9d10fb9df4ced5208a742623da08520fea5949461fe81637a27db15')
+ version('0.5.1', sha256='5ef3a8d8692d8f82641aae76b58405b8b3a1539a8f21b23d66a5df8327eeafc4')
+ version('0.5.0', sha256='aba3e0217c0cd829290c9fe63f1db865838aa25312ae0a09effdcb186f7771be')
+ version('0.4.2', sha256='4a3bb944bce63dc1dc9757ba53624b822e1aff5ed088d542039a20227ed2b715')
+
+ variant('cxxstd',
+ default='11',
+ values=('11', '14', '17'),
+ multi=False,
+ description='Use the specified C++ standard when building.')
+ conflicts('cxxstd=14', when='@:0.5')
+ conflicts('cxxstd=17', when='@:0.5')
+
+ def cmake_args(self):
+ define = CMakePackage.define
+ return [
+ define('VC', False),
+ define('UMESIMD', False),
+ self.define_from_variant('CMAKE_CXX_STANDARD', 'cxxstd'),
+ self.define_from_variant('CUDA'),
+ ]
diff --git a/var/spack/repos/builtin/packages/vecgeom/package.py b/var/spack/repos/builtin/packages/vecgeom/package.py
index ed6e516c8a..2e28586ef6 100644
--- a/var/spack/repos/builtin/packages/vecgeom/package.py
+++ b/var/spack/repos/builtin/packages/vecgeom/package.py
@@ -5,49 +5,96 @@
from spack import *
-import platform
-class Vecgeom(CMakePackage):
+class Vecgeom(CMakePackage, CudaPackage):
"""The vectorized geometry library for particle-detector simulation
(toolkits)."""
homepage = "https://gitlab.cern.ch/VecGeom/VecGeom"
- url = "https://gitlab.cern.ch/api/v4/projects/VecGeom%2FVecGeom/repository/archive.tar.gz?sha=v0.3.rc"
+ url = "https://gitlab.cern.ch/VecGeom/VecGeom/-/archive/v1.1.6/VecGeom-v1.1.6.tar.gz"
+ git = "https://gitlab.cern.ch/VecGeom/VecGeom.git"
- version('01.01.03', git='https://gitlab.cern.ch/VecGeom/VecGeom.git', tag='v01.01.03', preferred=True)
- version('01.00.00', git='https://gitlab.cern.ch/VecGeom/VecGeom.git', tag='v01.00.00')
- version('00.05.00', git='https://gitlab.cern.ch/VecGeom/VecGeom.git', tag='v00.05.00')
+ maintainers = ['drbenmorgan', 'sethrj']
+
+ version('master', branch='master')
+ version('1.1.6', sha256='c4806a6b67d01b40074b8cc6865d78574a6a1c573be51696f2ecdf98b9cb954a')
+ version('1.1.5', sha256='da674f3bbc75c30f56c1a2d251fa8930c899f27fa64b03a36569924030d87b95')
+ version('1.1.3', sha256='ada09e8b6b2fa6c058290302b2cb5a6c2e644192aab1623c31d18c6a2f4c01c8')
+ version('1.0.1', sha256='1eae7ac9014c608e8d8db5568058b8c0fea1a1dc7a8f54157a3a1c997b6fd9eb')
+ version('0.5.2', tag='v00.05.02',
+ commit='a7e0828c915ff936a79e672d1dd84b087a323b51')
version('0.3.rc', sha256='a87a9ea4ab126b59ff9c79182bc0911ead3d76dd197194742e2a35ccd341299d')
- variant('cxxstd',
- default='17',
- values=('11', '14', '17'),
- multi=False,
- description='Use the specified C++ standard when building.')
- variant('vector',
- default='native',
- values=('sse3', 'sse4.2', 'native'),
- multi=False,
- description='Specify the instruction set for vectorization.')
+ _cxxstd_values = ('11', '14', '17')
+ variant('cxxstd', default='11', values=_cxxstd_values, multi=False,
+ description='Use the specified C++ standard when building')
+ variant('gdml', default=True,
+ description='Support native GDML geometry descriptions')
+ variant('geant4', default=False,
+ description='Support Geant4 geometry construction')
+ variant('root', default=False,
+ description='Support ROOT geometry construction')
+ variant('shared', default=True,
+ description='Build shared libraries')
+
+ depends_on('veccore@0.5.2:', type=('build', 'link'), when='@1.1.0:')
+ depends_on('veccore@0.4.2', type=('build', 'link'), when='@:1.0')
+ depends_on('veccore+cuda', type=('build', 'link'), when='+cuda')
+
+ conflicts('+cuda', when='@:1.1.5')
- depends_on('cmake@3.5:', type='build')
+ for std in _cxxstd_values:
+ depends_on('geant4 cxxstd=' + std, when='+geant4 cxxstd=' + std)
+ depends_on('root cxxstd=' + std, when='+root cxxstd=' + std)
+ depends_on('veccore cxxstd=' + std, when='cxxstd=' + std)
+ depends_on('xerces-c cxxstd=' + std, when='+gdml cxxstd=' + std)
def cmake_args(self):
- options = [
- '-DBACKEND=Scalar',
- '-DGEANT4=OFF',
- '-DUSOLIDS=ON',
- '-DUSOLIDS_VECGEOM=ON',
- '-DROOT=OFF',
- '-DNO_SPECIALIZATION=ON',
- '-DCMAKE_VERBOSE_MAKEFILE=TRUE']
- options.append('-DCMAKE_CXX_STANDARD={0}'.
- format(self.spec.variants['cxxstd'].value))
- arch = platform.machine()
- if arch == 'x86_64':
- options.append('-DVECGEOM_VECTOR={0}'.
- format(self.spec.variants['vector'].value))
+ # Possible target options are from the main CMakeLists.txt, assuming
+ # "best" is last
+ target = self.spec.target
+ vecgeom_arch = "sse2 sse3 ssse3 sse4.1 sse4.2 avx avx2".split()
+ for feature in reversed(vecgeom_arch):
+ if feature.replace('.', '_') in target:
+ target_instructions = feature
+ break
else:
- options.append('-DVECGEOM_VECTOR=' + arch)
+ # No features available (could be 'generic' arch)
+ target_instructions = 'empty'
+
+ define = CMakePackage.define
+ options = [
+ define('BACKEND', 'Scalar'),
+ define('BUILTIN_VECCORE', False),
+ define('NO_SPECIALIZATION', True),
+ define('VECGEOM_VECTOR', target_instructions),
+ self.define_from_variant('BUILD_SHARED_LIBS', 'shared'),
+ self.define_from_variant('CMAKE_CXX_STANDARD', 'cxxstd'),
+ self.define_from_variant('CUDA'),
+ self.define_from_variant('GDML'),
+ self.define_from_variant('GEANT4'),
+ self.define_from_variant('ROOT'),
+ ]
+
+ # Set testing flags
+ build_tests = self.run_tests
+ options.extend([
+ define('BUILD_TESTING', build_tests),
+ define('CTEST', build_tests),
+ define('GDMLTESTING', build_tests and '+gdml' in self.spec),
+ ])
+
+ if '+cuda' in self.spec:
+ arch = self.spec.variants['cuda_arch'].value
+ if len(arch) != 1 or arch[0] == 'none':
+ raise InstallError("Exactly one cuda_arch must be specified")
+ options.append(define('CUDA_ARCH', arch[0]))
+
+ if self.spec.satisfies("@:0.5.2"):
+ options.extend([
+ define('USOLIDS', True),
+ define('USOLIDS_VECGEOM', True),
+ ])
+
return options
diff --git a/var/spack/repos/builtin/packages/verrou/package.py b/var/spack/repos/builtin/packages/verrou/package.py
index 265ee2b096..f92443d144 100644
--- a/var/spack/repos/builtin/packages/verrou/package.py
+++ b/var/spack/repos/builtin/packages/verrou/package.py
@@ -32,18 +32,24 @@ class Verrou(AutotoolsPackage):
version('2.0.0', sha256='798df6e426ec57646a2a626d756b72f0171647ae5b07c982952dae2d71e26045')
version('1.1.0', sha256='b5105f61c65680f31551199cd143b2e15f412c34c821537998a7165e315dde2d')
+ # The server is sometimes a bit slow to respond
+ timeout = {'timeout': 60}
+
resource(name='valgrind-3.15.0',
url='https://sourceware.org/pub/valgrind/valgrind-3.15.0.tar.bz2',
sha256='417c7a9da8f60dd05698b3a7bc6002e4ef996f14c13f0ff96679a16873e78ab1',
- when='@2.2.0:')
+ when='@2.2.0:',
+ fetch_options=timeout)
resource(name='valgrind-3.14.0',
url='https://sourceware.org/pub/valgrind/valgrind-3.14.0.tar.bz2',
sha256='037c11bfefd477cc6e9ebe8f193bb237fe397f7ce791b4a4ce3fa1c6a520baa5',
- when='@2.1.0:2.1.99')
+ when='@2.1.0:2.1.99',
+ fetch_options=timeout)
resource(name='valgrind-3.13.0',
url='https://sourceware.org/pub/valgrind/valgrind-3.13.0.tar.bz2',
sha256='d76680ef03f00cd5e970bbdcd4e57fb1f6df7d2e2c071635ef2be74790190c3b',
- when='@1.1.0:2.0.99')
+ when='@1.1.0:2.0.99',
+ fetch_options=timeout)
variant('fma', default=True,
description='Activates fused multiply-add support for Verrou')
diff --git a/var/spack/repos/builtin/packages/xcfun/package.py b/var/spack/repos/builtin/packages/xcfun/package.py
new file mode 100644
index 0000000000..a40234c643
--- /dev/null
+++ b/var/spack/repos/builtin/packages/xcfun/package.py
@@ -0,0 +1,37 @@
+# Copyright 2013-2020 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 import *
+
+
+class Xcfun(CMakePackage):
+ """Exchange-Correlation functionals with arbitrary order derivatives."""
+
+ homepage = "https://github.com/dftlibs/xcfun"
+ url = "https://github.com/dftlibs/xcfun/archive/v2.0.0a4.tar.gz"
+
+ maintainers = ['robertodr', 'bast']
+
+ version('2.0.0a6',
+ sha256='a51086490890393439f98c5e3e4e1622908fe934bbc5063b1d4363cc4c15496d')
+
+ extends('python')
+ depends_on('cmake@3.11:', type='build')
+ depends_on('python@3:')
+ depends_on('py-pybind11')
+ depends_on('py-numpy')
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ "-DCMAKE_INSTALL_LIBDIR=lib",
+ "-DPYMOD_INSTALL_LIBDIR=/python{0}/site-packages".format(
+ spec["python"].version[:-1]),
+ "-DXCFUN_MAX_ORDER=8",
+ "-DXCFUN_PYTHON_INTERFACE=ON",
+ "-DPYTHON_EXECUTABLE={0}".format(spec['python'].command),
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/xgboost/package.py b/var/spack/repos/builtin/packages/xgboost/package.py
index f65ea1621b..15cdbb763e 100644
--- a/var/spack/repos/builtin/packages/xgboost/package.py
+++ b/var/spack/repos/builtin/packages/xgboost/package.py
@@ -13,7 +13,9 @@ class Xgboost(CMakePackage, CudaPackage):
homepage = "https://xgboost.ai/"
url = "https://github.com/dmlc/xgboost/releases/download/v0.81/xgboost-0.81.tar.bz2"
+ git = "https://github.com/dmlc/xgboost.git"
+ version('0.90', tag='v0.90', submodules=True)
version('0.81', sha256='9d8ff161699111d45c96bd15229aa6d80eb1cab7cbbef7e8eaa60ccfb5a4f806')
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/xsetpointer/package.py b/var/spack/repos/builtin/packages/xsetpointer/package.py
index 57775a6a19..cfd89eb061 100644
--- a/var/spack/repos/builtin/packages/xsetpointer/package.py
+++ b/var/spack/repos/builtin/packages/xsetpointer/package.py
@@ -14,9 +14,9 @@ class Xsetpointer(AutotoolsPackage):
version('1.0.1', sha256='54be93b20fd6f1deac67246d6e214a60b02dcfbf05295e43751f7a04edb986ac')
- depends_on('libxi')
- depends_on('libx11')
+ depends_on('libxi', type='link')
+ depends_on('libx11', type='link')
+ depends_on('inputproto@1.4:', type='link')
- depends_on('inputproto@1.4:', type='build')
depends_on('pkgconfig', type='build')
depends_on('util-macros', type='build')
diff --git a/var/spack/repos/builtin/packages/xts/package.py b/var/spack/repos/builtin/packages/xts/package.py
index 19149f9ec9..89dcc96bf7 100644
--- a/var/spack/repos/builtin/packages/xts/package.py
+++ b/var/spack/repos/builtin/packages/xts/package.py
@@ -15,14 +15,17 @@ class Xts(AutotoolsPackage):
version('0.99.1', sha256='d04d987b9a9f8b3921dfe8de8577d0c2a0f21d2c4c3196948fc9805838a352e6')
- depends_on('libx11')
- depends_on('libxext')
- depends_on('libxi')
- depends_on('libxtst')
- depends_on('libxau')
- depends_on('libxt')
- depends_on('libxmu')
- depends_on('libxaw')
+ depends_on('libx11', type='link')
+ depends_on('libxext', type='link')
+ depends_on('libxi', type='link')
+ depends_on('libxtst', type='link')
+ depends_on('libxau', type='link')
+ depends_on('libxt', type='link')
+ depends_on('libxmu', type='link')
+ depends_on('libxaw', type='link')
+ depends_on('inputproto', type='link')
+ depends_on('recordproto', type='link')
+ depends_on('fixesproto', type='link')
depends_on('xtrans', type='build')
depends_on('bdftopcf', type='build')
diff --git a/var/spack/repos/builtin/packages/yarn/package.py b/var/spack/repos/builtin/packages/yarn/package.py
new file mode 100644
index 0000000000..c9a5299a10
--- /dev/null
+++ b/var/spack/repos/builtin/packages/yarn/package.py
@@ -0,0 +1,22 @@
+# Copyright 2013-2020 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 import *
+
+
+class Yarn(Package):
+ """Fast, reliable, and secure dependency management."""
+
+ homepage = "https://yarnpkg.com"
+ url = "https://github.com/yarnpkg/yarn/releases/download/v1.22.4/yarn-v1.22.4.tar.gz"
+
+ version('1.22.4', sha256='bc5316aa110b2f564a71a3d6e235be55b98714660870c5b6b2d2d3f12587fb58')
+ version('1.22.2', sha256='de4cff575ae7151f8189bf1d747f026695d768d0563e2860df407ab79c70693d')
+ version('1.22.1', sha256='3af905904932078faa8f485d97c928416b30a86dd09dcd76e746a55c7f533b72')
+ version('1.22.0', sha256='de8871c4e2822cba80d58c2e72366fb78567ec56e873493c9ca0cca76c60f9a5')
+ version('1.21.1', sha256='d1d9f4a0f16f5ed484e814afeb98f39b82d4728c6c8beaafb5abc99c02db6674')
+
+ def install(self, spec, prefix):
+ install_tree('.', prefix)