From aaf6f80d4c055b6522bcf101b74c06a1f4baeab1 Mon Sep 17 00:00:00 2001 From: darmac Date: Wed, 1 Jul 2020 11:22:32 +0800 Subject: [PATCH 001/149] hbase: refine url , java and version (#17306) * hbase: refine url , java and version * Update var/spack/repos/builtin/packages/hbase/package.py Co-authored-by: Adam J. Stewart Co-authored-by: Adam J. Stewart --- .../repos/builtin/packages/hbase/package.py | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/var/spack/repos/builtin/packages/hbase/package.py b/var/spack/repos/builtin/packages/hbase/package.py index d34fe2f9f17..1e87f8a2973 100644 --- a/var/spack/repos/builtin/packages/hbase/package.py +++ b/var/spack/repos/builtin/packages/hbase/package.py @@ -7,21 +7,24 @@ class Hbase(Package): - """ - Apache HBase is an open-source, distributed, versioned, column-oriented + """Apache HBase is an open-source, distributed, versioned, column-oriented store modeled after Google' Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, HBase provides - Bigtable-like capabilities on top of Apache Hadoop. - """ + Bigtable-like capabilities on top of Apache Hadoop.""" - homepage = "https://github.com/apache/hbase" - url = "https://github.com/apache/hbase/archive/rel/2.2.2.tar.gz" + homepage = "https://archive.apache.org/" + url = "https://archive.apache.org/dist/hbase/2.2.4/hbase-2.2.4-bin.tar.gz" + list_url = "https://archive.apache.org/dist/hbase" + list_depth = 1 - version('2.2.2', sha256='e9a58946e9adff1cac23a0b261ecf32da32f8d2ced0706af1d04e8a67d582926') - version('2.1.8', sha256='121cea4c554879c8401f676c8eb49e39bd35d41c358e919379ad4a318844c8de') + version('2.2.5', sha256='25d08f8f038d9de5beb43dfb0392e8a8b34eae7e0f2670d6c2c172abc3855194') + version('2.2.4', sha256='ec91b628352931e22a091a206be93061b6bf5364044a28fb9e82f0023aca3ca4') + version('2.2.3', sha256='ea8fa72aa6220e038e30bd7c439d181b10bd7225383f7f2d224ebb5f5397310a') + version('2.2.2', sha256='97dcca3a031925a379a0ee6bbfb6007533fb4fdb982c23345e5fc04d6c52bebc') + version('2.1.8', sha256='d8296e8405b1c39c73f0dd03fc6b4d2af754035724168fd56e8f2a0ff175ad90') - depends_on('java@7:', type='run') + depends_on('java@8', type='run') def install(self, spec, prefix): install_tree('.', prefix) From 4433e4de2d9e43ce85aca211a897fd97f540e8e4 Mon Sep 17 00:00:00 2001 From: Greg Becker Date: Wed, 1 Jul 2020 01:21:08 -0500 Subject: [PATCH 002/149] Use apple-clang for MacOS nightly tests (#17320) --- .github/workflows/macos_python.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/macos_python.yml b/.github/workflows/macos_python.yml index e136102a466..d5bbb003c28 100644 --- a/.github/workflows/macos_python.yml +++ b/.github/workflows/macos_python.yml @@ -32,7 +32,7 @@ jobs: - name: spack install run: | . .github/workflows/install_spack.sh - spack install -v py-jupyter %clang + spack install -v py-jupyter %apple-clang install_scipy_clang: name: scipy, mpl, pd @@ -42,9 +42,9 @@ jobs: - name: spack install run: | . .github/workflows/install_spack.sh - spack install -v py-scipy %clang - spack install -v py-matplotlib %clang - spack install -v py-pandas %clang + spack install -v py-scipy %apple-clang + spack install -v py-matplotlib %apple-clang + spack install -v py-pandas %apple-clang install_mpi4py_clang: name: mpi4py, petsc4py @@ -54,5 +54,5 @@ jobs: - name: spack install run: | . .github/workflows/install_spack.sh - spack install -v py-mpi4py %clang - spack install -v py-petsc4py %clang + spack install -v py-mpi4py %apple-clang + spack install -v py-petsc4py %apple-clang From 60283775b30b85469e663b321a4718fc06a55752 Mon Sep 17 00:00:00 2001 From: Glenn Johnson Date: Wed, 1 Jul 2020 01:40:36 -0500 Subject: [PATCH 003/149] Documentation update for container example (#17321) This updates the documentation to reflect #17316. --- lib/spack/docs/containers.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/spack/docs/containers.rst b/lib/spack/docs/containers.rst index fe678fd76d4..b215507701d 100644 --- a/lib/spack/docs/containers.rst +++ b/lib/spack/docs/containers.rst @@ -45,7 +45,7 @@ Environments: && echo " view: /opt/view") > /opt/spack-environment/spack.yaml # Install the software, remove unnecessary deps - RUN cd /opt/spack-environment && spack install && spack gc -y + RUN cd /opt/spack-environment && spack env activate . && spack install && spack gc -y # Strip all the binaries RUN find -L /opt/view/* -type f -exec readlink -f '{}' \; | \ @@ -267,7 +267,7 @@ following ``Dockerfile``: && echo " view: /opt/view") > /opt/spack-environment/spack.yaml # Install the software, remove unnecessary deps - RUN cd /opt/spack-environment && spack install && spack gc -y + RUN cd /opt/spack-environment && spack env activate . && spack install && spack gc -y # Strip all the binaries RUN find -L /opt/view/* -type f -exec readlink -f '{}' \; | \ From 6a77f1ff457600523477380257bd698b8824648e Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Wed, 1 Jul 2020 09:46:20 -0500 Subject: [PATCH 004/149] Fix hashlib function capitalization (#17323) --- lib/spack/spack/util/crypto.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/spack/spack/util/crypto.py b/lib/spack/spack/util/crypto.py index 566e99da216..74a6ee06bd7 100644 --- a/lib/spack/spack/util/crypto.py +++ b/lib/spack/spack/util/crypto.py @@ -133,7 +133,7 @@ def __init__(self, hexdigest, **kwargs): @property def hash_name(self): """Get the name of the hash function this Checker is using.""" - return self.hash_fun().name + return self.hash_fun().name.lower() def check(self, filename): """Read the file with the specified name and check its checksum From a5eabfad9117c1423bb0bfc33bbe0571c5e17c04 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Wed, 1 Jul 2020 18:58:53 +0200 Subject: [PATCH 005/149] Moved flake8, shell and documentation tests to Github Action (#17328) * Move flake8 tests on Github Actions * Move shell test to Github Actions * Moved documentation build to Github Action * Don't run coverage on Python 2.6 Since we get connection errors consistently on Travis when trying to upload coverage results for Python 2.6, avoid computing coverage entirely to speed-up tests. --- .github/workflows/linux_unit_tests.yaml | 80 ++++++++++++++++ .travis.yml | 119 ++---------------------- lib/spack/spack/test/llnl/util/lock.py | 2 - share/spack/qa/run-shell-tests | 2 +- share/spack/qa/run-unit-tests | 6 +- share/spack/qa/setup.sh | 16 ++-- 6 files changed, 100 insertions(+), 125 deletions(-) diff --git a/.github/workflows/linux_unit_tests.yaml b/.github/workflows/linux_unit_tests.yaml index 3130bfa36e0..78fd0e8ce03 100644 --- a/.github/workflows/linux_unit_tests.yaml +++ b/.github/workflows/linux_unit_tests.yaml @@ -60,3 +60,83 @@ jobs: uses: codecov/codecov-action@v1 with: flags: unittests,linux + flake8: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install Python packages + run: | + pip install --upgrade pip six setuptools flake8 + - name: Setup git configuration + run: | + # Need this for the git tests to succeed. + git --version + git config --global user.email "spack@example.com" + git config --global user.name "Test User" + git fetch -u origin develop:develop + - name: Run flake8 tests + run: | + share/spack/qa/run-flake8-tests + shell: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install System packages + run: | + sudo apt-get -y update + sudo apt-get install -y coreutils gfortran gnupg2 mercurial ninja-build patchelf zsh fish + # Needed for kcov + sudo apt-get -y install cmake binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev + - name: Install Python packages + run: | + pip install --upgrade pip six setuptools codecov coverage + - name: Setup git configuration + run: | + # Need this for the git tests to succeed. + git --version + git config --global user.email "spack@example.com" + git config --global user.name "Test User" + git fetch -u origin develop:develop + - name: Install kcov for bash script coverage + env: + KCOV_VERSION: 38 + run: | + KCOV_ROOT=$(mktemp -d) + wget --output-document=${KCOV_ROOT}/${KCOV_VERSION}.tar.gz https://github.com/SimonKagstrom/kcov/archive/v${KCOV_VERSION}.tar.gz + tar -C ${KCOV_ROOT} -xzvf ${KCOV_ROOT}/${KCOV_VERSION}.tar.gz + mkdir -p ${KCOV_ROOT}/build + cd ${KCOV_ROOT}/build && cmake -Wno-dev ${KCOV_ROOT}/kcov-${KCOV_VERSION} && cd - + make -C ${KCOV_ROOT}/build && sudo make -C ${KCOV_ROOT}/build install + - name: Run shell tests + env: + COVERAGE: true + run: | + share/spack/qa/run-shell-tests + - name: Upload to codecov.io + uses: codecov/codecov-action@v1 + with: + flags: shelltests,linux + documentation: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install System packages + run: | + sudo apt-get -y update + sudo apt-get install -y coreutils ninja-build graphviz + - name: Install Python packages + run: | + pip install --upgrade pip six setuptools + pip install --upgrade -r lib/spack/docs/requirements.txt + - name: Build documentation + run: | + share/spack/qa/run-doc-tests diff --git a/.travis.yml b/.travis.yml index 5d8b7937589..df4262bf1e8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,3 @@ -#============================================================================= -# Project settings -#============================================================================= # Only build master and develop on push; do not build every branch. branches: only: @@ -8,107 +5,30 @@ branches: - develop - /^releases\/.*$/ -#============================================================================= -# Build matrix -#============================================================================= - -dist: bionic - -jobs: - fast_finish: true - include: - - stage: 'style checks' - python: '3.8' - os: linux - language: python - env: TEST_SUITE=flake8 - - stage: 'unit tests + documentation' - python: '2.6' - dist: trusty - os: linux - language: python - addons: - apt: - # Everything but patchelf, that is not available for trusty - packages: - - ccache - - gfortran - - graphviz - - gnupg2 - - kcov - - mercurial - - ninja-build - - realpath - - zsh - - fish - env: [ TEST_SUITE=unit, COVERAGE=true ] - - python: '3.8' - os: linux - language: python - env: [ TEST_SUITE=shell, COVERAGE=true, KCOV_VERSION=38 ] - - python: '3.8' - os: linux - language: python - env: TEST_SUITE=doc - -stages: - - 'style checks' - - 'unit tests + documentation' - - -#============================================================================= -# Environment -#============================================================================= - -# Docs need graphviz to build +language: python +python: '2.6' +dist: trusty +os: linux addons: - # for Linux builds, we use APT apt: packages: - - ccache - - coreutils - gfortran - graphviz - gnupg2 + - kcov - mercurial - ninja-build - - patchelf + - realpath - zsh - fish - update: true - -# ~/.ccache needs to be cached directly as Travis is not taking care of it -# (possibly because we use 'language: python' and not 'language: c') -cache: - pip: true - ccache: true - directories: - - ~/.ccache - -before_install: - - ccache -M 2G && ccache -z - # Install kcov manually, since it's not packaged for bionic beaver - - if [[ "$KCOV_VERSION" ]]; then - sudo apt-get -y install cmake binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev; - KCOV_ROOT=$(mktemp -d); - wget --output-document=${KCOV_ROOT}/${KCOV_VERSION}.tar.gz https://github.com/SimonKagstrom/kcov/archive/v${KCOV_VERSION}.tar.gz; - tar -C ${KCOV_ROOT} -xzvf ${KCOV_ROOT}/${KCOV_VERSION}.tar.gz; - mkdir -p ${KCOV_ROOT}/build; - cd ${KCOV_ROOT}/build && cmake -Wno-dev ${KCOV_ROOT}/kcov-${KCOV_VERSION} && cd - ; - make -C ${KCOV_ROOT}/build && sudo make -C ${KCOV_ROOT}/build install; - fi # Install various dependencies install: - pip install --upgrade pip - pip install --upgrade six - pip install --upgrade setuptools - - pip install --upgrade codecov coverage==4.5.4 - pip install --upgrade flake8 - pip install --upgrade pep8-naming - - if [[ "$TEST_SUITE" == "doc" ]]; then - pip install --upgrade -r lib/spack/docs/requirements.txt; - fi before_script: # Need this for the git tests to succeed. @@ -118,31 +38,12 @@ before_script: # Need this to be able to compute the list of changed files - git fetch origin ${TRAVIS_BRANCH}:${TRAVIS_BRANCH} -#============================================================================= -# Building -#============================================================================= script: - - share/spack/qa/run-$TEST_SUITE-tests + - python bin/spack -h + - python bin/spack help -a + - python bin/spack -p --lines 20 spec mpileaks%gcc ^elfutils@0.170 + - python bin/spack test -x --verbose -after_success: - - ccache -s - - case "$TEST_SUITE" in - unit) - if [[ "$COVERAGE" == "true" ]]; then - codecov --env PYTHON_VERSION - --required - --flags "${TEST_SUITE}${TRAVIS_OS_NAME}"; - fi - ;; - shell) - codecov --env PYTHON_VERSION - --required - --flags "${TEST_SUITE}${TRAVIS_OS_NAME}"; - esac - -#============================================================================= -# Notifications -#============================================================================= notifications: email: recipients: diff --git a/lib/spack/spack/test/llnl/util/lock.py b/lib/spack/spack/test/llnl/util/lock.py index a959ea0c73a..b2b7cf85acc 100644 --- a/lib/spack/spack/test/llnl/util/lock.py +++ b/lib/spack/spack/test/llnl/util/lock.py @@ -1143,8 +1143,6 @@ def read(): assert vals['read'] == 1 -@pytest.mark.skipif('macos' in os.environ.get('GITHUB_WORKFLOW', ''), - reason="Skip failing test for GA on MacOS") def test_lock_debug_output(lock_path): host = socket.getfqdn() diff --git a/share/spack/qa/run-shell-tests b/share/spack/qa/run-shell-tests index 126e6391867..c5c3425a8e7 100755 --- a/share/spack/qa/run-shell-tests +++ b/share/spack/qa/run-shell-tests @@ -18,7 +18,7 @@ ORIGINAL_PATH="$PATH" . "$(dirname $0)/setup.sh" -check_dependencies $coverage git hg svn +check_dependencies $coverage kcov git hg svn # Clean the environment by removing Spack from the path and getting rid of # the spack shell function diff --git a/share/spack/qa/run-unit-tests b/share/spack/qa/run-unit-tests index 7c4abb14130..c529f8297e9 100755 --- a/share/spack/qa/run-unit-tests +++ b/share/spack/qa/run-unit-tests @@ -37,11 +37,7 @@ bin/spack -h bin/spack help -a # Profile and print top 20 lines for a simple call to spack spec -if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then - spack -p --lines 20 spec openmpi -else - spack -p --lines 20 spec mpileaks%gcc ^elfutils@0.170 -fi +spack -p --lines 20 spec mpileaks%gcc ^elfutils@0.170 #----------------------------------------------------------- # Run unit tests with code coverage diff --git a/share/spack/qa/setup.sh b/share/spack/qa/setup.sh index 65364790154..34b426dcd72 100755 --- a/share/spack/qa/setup.sh +++ b/share/spack/qa/setup.sh @@ -26,14 +26,11 @@ if [[ "$COVERAGE" == "true" ]]; then coverage=coverage coverage_run="coverage run" - # bash coverage depends on some other factors -- there are issues with - # kcov for Python 2.6, unit tests, and build tests. - if [[ $TRAVIS_PYTHON_VERSION != 2.6 ]]; then - mkdir -p coverage - cc_script="$SPACK_ROOT/lib/spack/env/cc" - bashcov=$(realpath ${QA_DIR}/bashcov) - sed -i~ "s@#\!/bin/bash@#\!${bashcov}@" "$cc_script" - fi + # bash coverage depends on some other factors + mkdir -p coverage + cc_script="$SPACK_ROOT/lib/spack/env/cc" + bashcov=$(realpath ${QA_DIR}/bashcov) + sed -i~ "s@#\!/bin/bash@#\!${bashcov}@" "$cc_script" fi # @@ -74,6 +71,9 @@ check_dependencies() { spack_package=mercurial pip_package=mercurial ;; + kcov) + spack_package=kcov + ;; svn) spack_package=subversion ;; From 8a9fa9bd18f226f34574a440d1ae6e13917a78d2 Mon Sep 17 00:00:00 2001 From: ketsubouchi <67359246+ketsubouchi@users.noreply.github.com> Date: Thu, 2 Jul 2020 15:11:56 +0900 Subject: [PATCH 006/149] biobloom: use the correct standard library for Fujitsu compilers (#17327) --- var/spack/repos/builtin/packages/sdsl-lite/package.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/var/spack/repos/builtin/packages/sdsl-lite/package.py b/var/spack/repos/builtin/packages/sdsl-lite/package.py index d5d2a251c00..ba2485c6b79 100644 --- a/var/spack/repos/builtin/packages/sdsl-lite/package.py +++ b/var/spack/repos/builtin/packages/sdsl-lite/package.py @@ -32,5 +32,11 @@ def install(self, spec, prefix): tar('-xvf', self.stage.archive_file) with working_dir('sdsl-lite-{0}'.format(spec.version.dotted)): + if self.spec.satisfies('%fj'): + filter_file( + 'stdlib=libc', + 'stdlib=libstdc', + './CMakeLists.txt' + ) helper = Executable('./install.sh') helper(prefix) From 509b3c30161512f519978efbf0fbde7aacf2d1ba Mon Sep 17 00:00:00 2001 From: mic84 Date: Wed, 1 Jul 2020 23:28:57 -0700 Subject: [PATCH 007/149] amrex: added v20.07 (#17337) Also added support for hdf5, petsc and hypre --- .../repos/builtin/packages/amrex/package.py | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/amrex/package.py b/var/spack/repos/builtin/packages/amrex/package.py index f6cb778f4b4..1f90ed1e57a 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.07', sha256='c386f566f4c57ee56b5630f79ce2c6117d5a612a4aab69b7b26e48d577251165') version('20.06', sha256='be2f2a5107111fcb8b3928b76024b370c7cb01a9e5dd79484cf7fcf59d0b4858') version('20.05', sha256='97d753bb75e845a0a959ec1a044a48e6adb86dd008b5e29ce7a01d49ed276338') version('20.04', sha256='a7ece54d5d89cc00fd555551902a0d4d0fb50db15d2600f441353eed0dddd83b') @@ -57,6 +58,12 @@ class Amrex(CMakePackage): values=('Debug', 'Release')) variant('sundials', default=False, description='Build AMReX with SUNDIALS support') + variant('hdf5', default=False, + description='Enable HDF5-based I/O') + variant('hypre', default=False, + description='Enable Hypre interfaces') + variant('petsc', default=False, + description='Enable PETSc interfaces') # Build dependencies depends_on('mpi', when='+mpi') @@ -68,6 +75,24 @@ class Amrex(CMakePackage): conflicts('%apple-clang') conflicts('%clang') + # Check options compatibility + conflicts('+sundials', when='~fortran', + msg='AMReX SUNDIALS support needs AMReX Fortran API (+fortran)') + conflicts('+hdf5', when='@:20.06', + msg='AMReX HDF5 support needs AMReX newer than version 20.06') + conflicts('+hypre', when='@:20.06', + msg='AMReX Hypre support needs AMReX newer than version 20.06') + conflicts('+hypre', when='~fortran', + msg='AMReX Hypre support needs AMReX Fortran API (+fortran)') + conflicts('+hypre', when='~linear_solvers', + msg='AMReX Hypre support needs variant +linear_solvers') + conflicts('+petsc', when='@:20.06', + msg='AMReX PETSc support needs AMReX newer than version 20.06') + conflicts('+petsc', when='~fortran', + msg='AMReX PETSc support needs AMReX Fortran API (+fortran)') + conflicts('+petsc', when='~linear_solvers', + msg='AMReX PETSc support needs variant +linear_solvers') + def url_for_version(self, version): if version >= Version('20.05'): url = "https://github.com/AMReX-Codes/amrex/releases/download/{0}/amrex-{0}.tar.gz" @@ -89,11 +114,16 @@ def cmake_args(self): self.spec.variants['precision'].value.upper(), '-DENABLE_EB:BOOL=%s' % self.cmake_is_on('+eb'), '-DXSDK_ENABLE_Fortran:BOOL=%s' % self.cmake_is_on('+fortran'), + '-DENABLE_FORTRAN_INTERFACES:BOOL=%s' + % self.cmake_is_on('+fortran'), '-DENABLE_LINEAR_SOLVERS:BOOL=%s' % self.cmake_is_on('+linear_solvers'), '-DENABLE_AMRDATA:BOOL=%s' % self.cmake_is_on('+amrdata'), '-DENABLE_PARTICLES:BOOL=%s' % self.cmake_is_on('+particles'), - '-DENABLE_SUNDIALS:BOOL=%s' % self.cmake_is_on('+sundials') + '-DENABLE_SUNDIALS:BOOL=%s' % self.cmake_is_on('+sundials'), + '-DENABLE_HDF5:BOOL=%s' % self.cmake_is_on('+hdf5'), + '-DENABLE_HYPRE:BOOL=%s' % self.cmake_is_on('+hypre'), + '-DENABLE_PETSC:BOOL=%s' % self.cmake_is_on('+petsc'), ] if self.spec.satisfies('%fj'): args.append('-DCMAKE_Fortran_MODDIR_FLAG=-M') From 5732d8de50a958ce2005c3cf567d884433f10544 Mon Sep 17 00:00:00 2001 From: "Paul R. C. Kent" Date: Thu, 2 Jul 2020 02:32:26 -0400 Subject: [PATCH 008/149] py-sphinxcontrib-bibtex: added v1.0.0 (#17336) --- .../repos/builtin/packages/py-sphinxcontrib-bibtex/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/py-sphinxcontrib-bibtex/package.py b/var/spack/repos/builtin/packages/py-sphinxcontrib-bibtex/package.py index 9ba3dbc7208..d7820786b05 100644 --- a/var/spack/repos/builtin/packages/py-sphinxcontrib-bibtex/package.py +++ b/var/spack/repos/builtin/packages/py-sphinxcontrib-bibtex/package.py @@ -14,6 +14,7 @@ class PySphinxcontribBibtex(PythonPackage): import_modules = ['sphinxcontrib', 'sphinxcontrib.bibtex'] + version('1.0.0', sha256='629612b001f86784669d65e662377a482052decfd9a0a17c46860878eef7b9e0') version('0.3.5', sha256='c93e2b4a0d14f0ab726f95f0a33c1675965e9df3ed04839635577b8f978206cd') depends_on('py-setuptools', type='build') From e133b44da63a30ac5aed5dd3bb8b6d18a288b52d Mon Sep 17 00:00:00 2001 From: Sinan Date: Thu, 2 Jul 2020 00:14:39 -0700 Subject: [PATCH 009/149] py-opt-einsum: added v3.2.1, v3.2.0 and v2.3.2 (#17339) Co-authored-by: Sinan81 --- var/spack/repos/builtin/packages/py-opt-einsum/package.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/py-opt-einsum/package.py b/var/spack/repos/builtin/packages/py-opt-einsum/package.py index 4de5712076e..0f430c76f8a 100644 --- a/var/spack/repos/builtin/packages/py-opt-einsum/package.py +++ b/var/spack/repos/builtin/packages/py-opt-einsum/package.py @@ -12,9 +12,13 @@ class PyOptEinsum(PythonPackage): homepage = "https://github.com/dgasmith/opt_einsum" url = "https://pypi.io/packages/source/o/opt_einsum/opt_einsum-3.1.0.tar.gz" + version('3.2.1', sha256='83b76a98d18ae6a5cc7a0d88955a7f74881f0e567a0f4c949d24c942753eb998') + version('3.2.0', sha256='738b0a1db1d3084d360081bb64d826f9db06d2df7cc0bf8e2c9356028da1fa31') version('3.1.0', sha256='edfada4b1d0b3b782ace8bc14e80618ff629abf53143e1e6bbf9bd00b11ece77') + version('2.3.2', sha256='d3d464b4da7ef09e444c30e4003a27def37f85ff10ff2671e5f7d7813adac35b') - depends_on('python@3.5:', type=('build', 'run')) + depends_on('python@:2', type=('build', 'run'), when='@2') + depends_on('python@3.5:', type=('build', 'run'), when='@3:') depends_on('py-setuptools', type='build') depends_on('py-numpy@1.7:', type=('build', 'run')) depends_on('py-pytest', type='test') From 10016a34e08f49dbe025a90f5742a32a9976eb17 Mon Sep 17 00:00:00 2001 From: Michael Kuhn Date: Thu, 2 Jul 2020 09:45:41 +0200 Subject: [PATCH 010/149] autotools: Fix config.guess detection, take two (#17333) The previous fix from #17149 contained a thinko that produced errors for packages that overwrite configure_directory. --- lib/spack/spack/build_systems/autotools.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/spack/spack/build_systems/autotools.py b/lib/spack/spack/build_systems/autotools.py index 27a3ee7657a..f07a2169ac0 100644 --- a/lib/spack/spack/build_systems/autotools.py +++ b/lib/spack/spack/build_systems/autotools.py @@ -118,17 +118,15 @@ def _do_patch_config_files(self): config_file = 'config.{0}'.format(config_name) if os.path.exists(config_file): # First search the top-level source directory - my_config_files[config_name] = os.path.join( - self.configure_directory, config_file) + my_config_files[config_name] = os.path.abspath(config_file) else: # Then search in all sub directories recursively. # We would like to use AC_CONFIG_AUX_DIR, but not all packages # ship with their configure.in or configure.ac. config_path = next((os.path.join(r, f) - for r, ds, fs in os.walk( - self.configure_directory) for f in fs + for r, ds, fs in os.walk('.') for f in fs if f == config_file), None) - my_config_files[config_name] = config_path + my_config_files[config_name] = os.path.abspath(config_path) if my_config_files[config_name] is not None: try: From a4fff39d7e0a53ceb7741007bf0acfd01560c20a Mon Sep 17 00:00:00 2001 From: Michael Kuhn Date: Thu, 2 Jul 2020 10:14:57 +0200 Subject: [PATCH 011/149] py-shroud: added v0.12.1 (#17332) py-setuptools is also needed at runtime, otherwise we get errors: ``` ModuleNotFoundError: No module named 'pkg_resources' ``` --- var/spack/repos/builtin/packages/py-shroud/package.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/py-shroud/package.py b/var/spack/repos/builtin/packages/py-shroud/package.py index 504c992f156..0e66ca1a23b 100644 --- a/var/spack/repos/builtin/packages/py-shroud/package.py +++ b/var/spack/repos/builtin/packages/py-shroud/package.py @@ -14,10 +14,11 @@ class PyShroud(PythonPackage): version('develop', branch='develop') version('master', branch='master') + version('0.12.1', tag='v0.12.1') version('0.11.0', tag='v0.11.0') version('0.10.1', tag='v0.10.1') version('0.9.0', tag='v0.9.0') version('0.8.0', tag='v0.8.0') - depends_on("py-setuptools", type='build') + depends_on("py-setuptools", type=('build', 'run')) depends_on("py-pyyaml@4.2b1:", type=('build', 'run')) From 204f15b4c143c7a0945119d2325c1c29749ad16f Mon Sep 17 00:00:00 2001 From: Andrew Gaspar Date: Thu, 2 Jul 2020 02:22:01 -0600 Subject: [PATCH 012/149] py-fortran-language-server: new package at v1.11.1 (#17318) Co-authored-by: Adam J. Stewart --- .../py-fortran-language-server/package.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 var/spack/repos/builtin/packages/py-fortran-language-server/package.py diff --git a/var/spack/repos/builtin/packages/py-fortran-language-server/package.py b/var/spack/repos/builtin/packages/py-fortran-language-server/package.py new file mode 100644 index 00000000000..277cf91c9db --- /dev/null +++ b/var/spack/repos/builtin/packages/py-fortran-language-server/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 PyFortranLanguageServer(PythonPackage): + """A Fortran implementation of the Language Server Protocol using Python + (2.7+ or 3.0+).""" + + homepage = "https://github.com/hansec/fortran-language-server" + url = "https://github.com/hansec/fortran-language-server/archive/v1.10.3.tar.gz" + + maintainers = ['AndrewGaspar'] + + version('1.11.1', sha256='8f03782dd992d6652a3f2d349115fdad3aa3464fee3fafbbc4f8ecf780166e3c') + + depends_on('python@2.7:', type=('build', 'run')) + depends_on('py-future', type=('build', 'run'), when='^python@:2') + depends_on('py-argparse', type=('build', 'run'), when='^python@:2.6,3.0:3.1') + depends_on('py-setuptools', type='build') From f780839b87cf1cb6839b35a5b067331212528fe3 Mon Sep 17 00:00:00 2001 From: manifest Date: Fri, 3 Jul 2020 00:13:47 +0930 Subject: [PATCH 013/149] examl + (#17265) * examl + * examl style fix * examl flake8 fix * Update var/spack/repos/builtin/packages/examl/package.py using `working_dir` Co-authored-by: Adam J. Stewart Co-authored-by: Adam J. Stewart --- .../repos/builtin/packages/examl/package.py | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 var/spack/repos/builtin/packages/examl/package.py diff --git a/var/spack/repos/builtin/packages/examl/package.py b/var/spack/repos/builtin/packages/examl/package.py new file mode 100644 index 00000000000..d5f115b9beb --- /dev/null +++ b/var/spack/repos/builtin/packages/examl/package.py @@ -0,0 +1,50 @@ +# 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 Examl(MakefilePackage): + """ + Exascale Maximum Likelihood (ExaML) code for phylogenetic inference + using MPI. This code implements the popular RAxML search algorithm + for maximum likelihood based inference of phylogenetic trees. + """ + + homepage = "https://github.com/stamatak/ExaML" + url = "https://github.com/stamatak/ExaML/archive/v3.0.22.tar.gz" + + maintainers = ['robqiao'] + + version('3.0.22', sha256='802e673b0c2ea83fdbe6b060048d83f22b6978933a04be64fb9b4334fe318ca3') + version('3.0.21', sha256='6c7e6c5d7bf4ab5cfbac5cc0d577885272a803c142e06b531693a6a589102e2e') + version('3.0.20', sha256='023681248bbc7f19821b509948d79301e46bbf275aa90bf12e9f4879639a023b') + version('3.0.19', sha256='3814230bf7578b8396731dc87ce665d0b1a671d8effd571f924c5b7936ae1c9e') + version('3.0.18', sha256='1bacb5124d943d921e7beae52b7062626d0ce3cf2f83e3aa3acf6ea26cf9cd87') + version('3.0.17', sha256='90a859e0b8fff697722352253e748f03c57b78ec5fbc1ae72f7e702d299dac67') + version('3.0.16', sha256='abc922994332d40892e30f077e4644db08cd59662da8e2a9197d1bd8bcb9aa5f') + version('3.0.15', sha256='da5e66a63d6fa34b640535c359d8daf67f23bd2fcc958ac604551082567906b0') + version('3.0.14', sha256='698b538996946ae23a2d6fa1e230c210832e59080da33679ff7d6b342a9e6180') + version('3.0.13', sha256='893aecb5545798235a17975aa07268693d3526d0aee0ed59a2d6e791248791ed') + + variant('mpi', default=True, description='Enable MPI parallel support') + + depends_on('mpi', when='+mpi') + + def build(self, spec, prefix): + ##################### + # Build Directories # + ##################### + with working_dir('examl'): + make('-f', 'Makefile.SSE3.gcc') + with working_dir('parser'): + make('-f', 'Makefile.SSE3.gcc') + + def install(self, spec, prefix): + mkdirp(prefix.bin) + install("examl/examl", prefix.bin) + install("parser/parse-examl", prefix.bin) + install_tree("manual", prefix.manual) + install_tree("testData", prefix.testData) From 1e75dde7b2193bb926fb1fc0f5624f7d2fc76766 Mon Sep 17 00:00:00 2001 From: Sinan Date: Thu, 2 Jul 2020 14:56:36 -0700 Subject: [PATCH 014/149] mapnik: add version 3.0.23, update boost dependency (#17338) --- var/spack/repos/builtin/packages/mapnik/package.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/var/spack/repos/builtin/packages/mapnik/package.py b/var/spack/repos/builtin/packages/mapnik/package.py index 2fc61f568d0..880bd3bc133 100644 --- a/var/spack/repos/builtin/packages/mapnik/package.py +++ b/var/spack/repos/builtin/packages/mapnik/package.py @@ -15,11 +15,12 @@ class Mapnik(AutotoolsPackage): homepage = "https://mapnik.org/" url = "https://github.com/mapnik/mapnik/releases/download/v3.0.22/mapnik-v3.0.22.tar.bz2" + version('3.0.23', sha256='4b1352e01f7ce25ab099e586d7ae98e0b74145a3bf94dd365cb0a2bdab3b9dc2') version('3.0.22', sha256='930612ad9e604b6a29b9cea1bc1de85cf7cf2b2b8211f57ec8b6b94463128ab9') depends_on('python', type=('build', 'run')) - # Build fails with boost@1.70 - depends_on('boost@:1.69.0+regex+filesystem+system+icu+program_options cxxstd=11') + depends_on('boost@:1.72.0 +regex+filesystem+system+icu+program_options cxxstd=11', when='@3.0.23') + depends_on('boost@:1.69.0 +regex+filesystem+system+icu+program_options cxxstd=11', when='@3.0.22') depends_on('icu4c') depends_on('zlib') depends_on('freetype') From f1bb8999abeabe15d7478d74832b5f468924be53 Mon Sep 17 00:00:00 2001 From: Harmen Stoppels Date: Fri, 3 Jul 2020 00:02:12 +0200 Subject: [PATCH 015/149] cpprestsdk: add version 2.10.16 (#17331) Also * Patch is only needed for 2.9.1 * Add openssl dependency * Build with -DWERROR:BOOL=Off --- .../repos/builtin/packages/cpprestsdk/package.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/cpprestsdk/package.py b/var/spack/repos/builtin/packages/cpprestsdk/package.py index 3bfbf52c292..70425ed7dbc 100644 --- a/var/spack/repos/builtin/packages/cpprestsdk/package.py +++ b/var/spack/repos/builtin/packages/cpprestsdk/package.py @@ -15,13 +15,22 @@ class Cpprestsdk(CMakePackage): homepage = "https://github.com/Microsoft/cpprestsdk" url = "https://github.com/Microsoft/cpprestsdk/archive/v2.9.1.tar.gz" + version('2.10.16', git='https://github.com/Microsoft/cpprestsdk', branch='v2.10.16', submodules=True) version('2.9.1', sha256='537358760acd782f4d2ed3a85d92247b4fc423aff9c85347dc31dbb0ab9bab16') depends_on('boost@:1.69.0') + depends_on('openssl') # 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') + patch('Release.patch', when='@2.9.1') root_cmakelists_dir = 'Release' + + def cmake_args(self): + args = [ + '-DWERROR:BOOL=Off' + ] + + return args From 3d98ad3f4cc82e96dce25c7a70db2f59456b864a Mon Sep 17 00:00:00 2001 From: iarspider Date: Fri, 3 Jul 2020 00:05:20 +0200 Subject: [PATCH 016/149] New packages: heputils and mcutils (#17330) heputils is a (conditional) dependency of mcutils --- .../builtin/packages/heputils/package.py | 36 +++++++++++++++++++ .../repos/builtin/packages/mcutils/package.py | 34 ++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 var/spack/repos/builtin/packages/heputils/package.py create mode 100644 var/spack/repos/builtin/packages/mcutils/package.py diff --git a/var/spack/repos/builtin/packages/heputils/package.py b/var/spack/repos/builtin/packages/heputils/package.py new file mode 100644 index 00000000000..e856d7b5d04 --- /dev/null +++ b/var/spack/repos/builtin/packages/heputils/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 Heputils(MakefilePackage): + """Generic tools for high energy physics, e.g. vectors, event records, + math and other util functions.""" + + homepage = "https://bitbucket.org/andybuckley/heputils/src/default/" + url = "https://bitbucket.org/andybuckley/heputils/get/heputils-1.3.2.tar.gz" + + version('1.3.2', sha256='be43586979ab1a81a55348d795c2f63a5da19fc6367d5f66f354217c76c809c0') + version('1.3.1', sha256='7f33ef44364a3d3a39cc65005fb6aa9dfd06bd1b18b41151c0e5e3d28d6ba15b') + version('1.3.0', sha256='1ec9d9d71d409ce6b2e668e4927b1090ddf2ee9acf25457f767925cf89b24852') + version('1.2.1', sha256='99f0b27cddffb98977d37418d53f3386e5defda547aeb4c4fda00ab6fcf2cc31') + version('1.2.0', sha256='0f9f96bd7589f9aec8f1271524b8622291216fe2294ffed772b84d010759eaef') + version('1.1.0', sha256='671374641cdb6dc093327b69da2d2854df805b6eb8e90f0efefb0788ee4a2edd') + version('1.0.8', sha256='9b9a45ebff1367cd2ab1ec4ee8c0e124a9b7ed66c75d8961412163ade1962d91') + version('1.0.7', sha256='481a26755d4e2836563d1f8fcdad663bfa7e21b9878c01bd8a73a67876726b81') + version('1.0.6', sha256='1ecd8597ef7921a63606b21136900a05a818c9342da7994a42aae768ecca507f') + version('1.0.5', sha256='efff3d7d6973822f1dced903017f86661e2d054ff3f0d4fe926de2347160e329') + version('1.0.4', sha256='aeca00c1012bce469c6fe6393edbf4f33043ab671c97a8283a21861caee8b1b4') + version('1.0.3', sha256='8e7ebe0ad5e87a97cbbff7097092ed8afe5a2d1ecae0f4d4f9a7bf694e221d40') + version('1.0.2', sha256='83ba7876d884406463cc8ae42214038b7d6c40ead77a1532d64bc96887173f75') + version('1.0.1', sha256='4bfccc4f4380becb776343e546deb2474deeae79f053ba8ca22287827b8bd4b1') + version('1.0.0', sha256='4f71c2bee6736ed87d0151e62546d2fc9ff639db58172c26dcf033e5bb1ea04c') + + def build(self, spec, prefix): + return + + def install(self, spec, prefix): + make('install', 'PREFIX={0}'.format(prefix)) diff --git a/var/spack/repos/builtin/packages/mcutils/package.py b/var/spack/repos/builtin/packages/mcutils/package.py new file mode 100644 index 00000000000..3065f70fe0c --- /dev/null +++ b/var/spack/repos/builtin/packages/mcutils/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 Mcutils(MakefilePackage): + """A collection of routines for classification and manipulation of + particle physics simulated HepMC event records.""" + + homepage = "https://bitbucket.org/andybuckley/mcutils" + url = "https://bitbucket.org/andybuckley/mcutils/get/mcutils-1.3.4.tar.gz" + + version('1.3.4', sha256='0bf9795cc248871ab2b663d2eef647311eacaea4982997950096de68747e65a3') + version('1.3.3', sha256='bfb2f0e0e6de358928436f309f3f1b084d3d652073c440f262de878332116ecb') + version('1.3.2', sha256='e17d417e8d4f8d17a6879ea18dcd2cd76e161d37eae08b84893504d1b08f9708') + version('1.3.1', sha256='081263ee6844fccedad780e6a2fbaf1ad0073a6706bc4b34109050b72c2c4b27') + version('1.3.0', sha256='20a89ce536547dc8f56e7779a3ec8cfe9987edb1646009ecfc682ff1ddf0277b') + version('1.2.1', sha256='004325be41925d97e711ffe4311d9c8aa8e88873541bcc1a385d2e1ce1d17a96') + version('1.2.0', sha256='f9589d45bff06d8c8742d35d78d1ed570a0d181fd7ee5d6f97ab9e48f0ee32f4') + version('1.1.2', sha256='5a5781caf2d81c21f4b040a1d31975c354526bcf7c8c9067543f7303c8155844') + version('1.1.1', sha256='3e5c47d2264886613fc9423b020cf50dc7031a02b752da3a84f794c36ba7443a') + version('1.1.0', sha256='96fc2586430032ed4b378edb02150c5c9db405e1767dbf847ffe9ac043daf6e9') + version('1.0.3', sha256='b5bec5a4b2146b6987b351d632119c3b4c449c2ee53ae0ddc8cb1d3672907df5') + version('1.0.2', sha256='74e2c381f5f3719888b15a2e00075051bb2b84b3d73633d429818a77de66ca7c') + version('1.0.1', sha256='bb884a4cfb56b5139c08df0be554466e504e9c46096a858f904d659894a62131') + version('1.0.0', sha256='d08dea19fb42b1846e0a7134e2347648b037bf82b2d75086d018734bc2996b06') + + depends_on('heputils', when='@1.1.0:') + + def install(self, spec, prefix): + make('install', 'PREFIX={0}'.format(prefix)) From 06da1f195c006d3aa1c3d43b4454a10d1ce06ee9 Mon Sep 17 00:00:00 2001 From: Amjad Kotobi Date: Fri, 3 Jul 2020 00:10:06 +0200 Subject: [PATCH 017/149] openmpi: add singularity variant (#17288) --- var/spack/repos/builtin/packages/openmpi/package.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/var/spack/repos/builtin/packages/openmpi/package.py b/var/spack/repos/builtin/packages/openmpi/package.py index 4184e64f021..82838e5a877 100644 --- a/var/spack/repos/builtin/packages/openmpi/package.py +++ b/var/spack/repos/builtin/packages/openmpi/package.py @@ -219,6 +219,8 @@ class Openmpi(AutotoolsPackage): variant('cxx', default=False, description='Enable C++ MPI bindings') variant('cxx_exceptions', default=False, description='Enable C++ Exception support') variant('gpfs', default=True, description='Enable GPFS support (if present)') + variant('singularity', default=False, + description="Build support for the Singularity container") # Adding support to build a debug version of OpenMPI that activates # Memchecker, as described here: # @@ -265,6 +267,8 @@ class Openmpi(AutotoolsPackage): depends_on('sqlite', when='+sqlite3@:1.11') depends_on('zlib', when='@3.0.0:') depends_on('valgrind~mpi', when='+memchecker') + # Singularity release 3 works better + depends_on('singularity@3.0.0:', when='+singularity') depends_on('opa-psm2', when='fabrics=psm2') depends_on('rdma-core', when='fabrics=verbs') @@ -317,6 +321,8 @@ class Openmpi(AutotoolsPackage): conflicts('schedulers=loadleveler', when='@3.0.0:', msg='The loadleveler scheduler is not supported with ' 'openmpi(>=3.0.0).') + conflicts('+singularity', when='@5:', + msg='singularity support has been dropped in OpenMPI 5') filter_compiler_wrappers('openmpi/*-wrapper-data*', relative_root='share') @@ -528,6 +534,10 @@ def configure_args(self): '--with-valgrind={0}'.format(spec['valgrind'].prefix), ]) + # Singularity container support + if spec.satisfies('+singularity @:4.9'): + singularity_opt = '--with-singularity={0}'.format(spec['singularity'].prefix) + config_args.append(singularity_opt) # Hwloc support if spec.satisfies('@1.5.2:'): config_args.append('--with-hwloc={0}'.format(spec['hwloc'].prefix)) From ff60f51a7aee5c46d446739ff74550eb0bfaf099 Mon Sep 17 00:00:00 2001 From: darmac Date: Fri, 3 Jul 2020 06:13:24 +0800 Subject: [PATCH 018/149] keepalived: openssl is a link and build dependency (#17346) --- var/spack/repos/builtin/packages/keepalived/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/keepalived/package.py b/var/spack/repos/builtin/packages/keepalived/package.py index bb6cf013376..2b1e9f7b072 100644 --- a/var/spack/repos/builtin/packages/keepalived/package.py +++ b/var/spack/repos/builtin/packages/keepalived/package.py @@ -25,4 +25,4 @@ class Keepalived(AutotoolsPackage): version('2.0.12', sha256='fd50e433d784cfd948de5726752cf89ab7001f587fe10a5110c6c7cbda4b7b5e') version('2.0.11', sha256='a298b0c02a20959cfc365b62c14f45abd50d5e0595b2869f5bce10ec2392fa48') - depends_on('openssl', type='build') + depends_on('openssl') From 4349c091e70775fa1f13d4bfe4d1ada717b318be Mon Sep 17 00:00:00 2001 From: Michio Ogawa Date: Fri, 3 Jul 2020 07:34:25 +0900 Subject: [PATCH 019/149] FrontISTR: add version 5.1 (#17349) --- var/spack/repos/builtin/packages/frontistr/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/frontistr/package.py b/var/spack/repos/builtin/packages/frontistr/package.py index ebdfa0a3e31..e59da463248 100644 --- a/var/spack/repos/builtin/packages/frontistr/package.py +++ b/var/spack/repos/builtin/packages/frontistr/package.py @@ -15,6 +15,7 @@ class Frontistr(CMakePackage): git = "https://gitlab.com/FrontISTR-Commons/FrontISTR.git" maintainers = ['hiroshi.okuda', 'kgoto', 'morita', 'inagaki', 'michioga'] + version('5.1', tag='v5.1') version('5.0', tag='v5.0') version('master', tag='master') From 7679e20e839ff561f26e1fd64540e433ecd89b66 Mon Sep 17 00:00:00 2001 From: takanori-ihara <62980219+takanori-ihara@users.noreply.github.com> Date: Fri, 3 Jul 2020 11:49:29 +0900 Subject: [PATCH 020/149] py-tensorflow: Fix for tensorflow issue #40688 (#17324) * py-tensorflow: Fix for #40688 * py-tensorflow: Fix for tensorflow issue #40688 --- var/spack/repos/builtin/packages/py-tensorflow/package.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/var/spack/repos/builtin/packages/py-tensorflow/package.py b/var/spack/repos/builtin/packages/py-tensorflow/package.py index 5c8a10a4a92..7c4a0849c56 100644 --- a/var/spack/repos/builtin/packages/py-tensorflow/package.py +++ b/var/spack/repos/builtin/packages/py-tensorflow/package.py @@ -141,8 +141,9 @@ class PyTensorflow(Package, CudaPackage): depends_on('py-keras-preprocessing@1.1.0:', type=('build', 'run'), when='@2.1:') depends_on('py-keras-preprocessing@1.0.5:', type=('build', 'run'), when='@1.12:') depends_on('py-keras-preprocessing@1.0.3:', type=('build', 'run'), when='@1.11:') - depends_on('py-numpy@1.16.0:1.999', type=('build', 'run'), when='@1.13.2,1.15:') - depends_on('py-numpy@1.14.5:1.999', type=('build', 'run'), when='@1.12.1,1.14.0') + # https://github.com/tensorflow/tensorflow/issues/40688 + depends_on('py-numpy@1.16.0:1.18', type=('build', 'run'), when='@1.13.2,1.15:') + depends_on('py-numpy@1.14.5:1.18', type=('build', 'run'), when='@1.12.1,1.14.0') depends_on('py-numpy@1.13.3:1.14.5', type=('build', 'run'), when='@1.10.0:1.10.1') depends_on('py-numpy@1.13.3:', type=('build', 'run'), when='@1.6:') depends_on('py-numpy@1.12.1:', type=('build', 'run'), when='@1.4:') From cc0dda95c48a9667c9e8079a075075b67e1211ef Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Thu, 2 Jul 2020 19:10:41 -0600 Subject: [PATCH 021/149] quicksilver: add v1.0 --- var/spack/repos/builtin/packages/quicksilver/package.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/quicksilver/package.py b/var/spack/repos/builtin/packages/quicksilver/package.py index ceef9e1bfba..e39a82337dc 100644 --- a/var/spack/repos/builtin/packages/quicksilver/package.py +++ b/var/spack/repos/builtin/packages/quicksilver/package.py @@ -14,12 +14,13 @@ class Quicksilver(MakefilePackage): tags = ['proxy-app'] homepage = "https://codesign.llnl.gov/quicksilver.php" - url = "https://github.com/LLNL/Quicksilver" + url = "https://github.com/LLNL/Quicksilver/tarball/V1.0" git = "https://github.com/LLNL/Quicksilver.git" maintainers = ['richards12'] version('master', branch='master') + version('1.0', sha256='83371603b169ec75e41fb358881b7bd498e83597cd251ff9e5c35769ef22c59a') variant('openmp', default=True, description='Build with OpenMP support') variant('mpi', default=True, description='Build with MPI support') From 17106a131df7906dc17e957b5c0c052a057435a1 Mon Sep 17 00:00:00 2001 From: "Kelly (KT) Thompson" Date: Fri, 3 Jul 2020 00:25:53 -0600 Subject: [PATCH 022/149] Random123: add versions 1.10, 1.13.2 (#17361) --- var/spack/repos/builtin/packages/random123/package.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/var/spack/repos/builtin/packages/random123/package.py b/var/spack/repos/builtin/packages/random123/package.py index 48df03fee80..7cc754a5bdd 100644 --- a/var/spack/repos/builtin/packages/random123/package.py +++ b/var/spack/repos/builtin/packages/random123/package.py @@ -15,6 +15,8 @@ class Random123(Package): homepage = "http://www.deshawresearch.com/resources_random123.html" url = "http://www.deshawresearch.com/downloads/download_random123.cgi/Random123-1.09.tar.gz" + version('1.13.2', sha256='74a1c6bb66b2684f03d3b1008642a2e9141909103cd09f428d2c60bcaa51cb40') + version('1.10', sha256='4afdfba4b941e33e23b5de9b7907b7e3ac326cb4d34b5fa8225edd00b5fe053b') version('1.09', sha256='cf6abf623061bcf3d17e5e49bf3f3f0ae400ee89ae2e97c8cb8dcb918b1ebabe') patch('ibmxl.patch', when='@1.09') @@ -25,5 +27,7 @@ def install(self, spec, prefix): # We have to do our own install here. install_tree('include', prefix.include) install('./LICENSE', "%s" % prefix) - # used by some packages, e.g. quinoa - install('examples/uniform.hpp', join_path(prefix.include, 'Random123')) + if spec.satisfies('@1.09'): + # used by some packages, e.g. quinoa + install('examples/uniform.hpp', + join_path(prefix.include, 'Random123')) From cf104b0f102cacad96b7de918d5fdd2c960560d0 Mon Sep 17 00:00:00 2001 From: g-mathias <40861554+g-mathias@users.noreply.github.com> Date: Fri, 3 Jul 2020 08:34:00 +0200 Subject: [PATCH 023/149] jmol: add version 14.31.0 (#17351) Also: * Add url_for_version function * Add Java to PATH for run environment * Update `install` method to handle old and new version Co-authored-by: lu64bag3 --- var/spack/repos/builtin/packages/jmol/package.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/var/spack/repos/builtin/packages/jmol/package.py b/var/spack/repos/builtin/packages/jmol/package.py index 6bbe7e28cd2..9da452f3968 100644 --- a/var/spack/repos/builtin/packages/jmol/package.py +++ b/var/spack/repos/builtin/packages/jmol/package.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) from spack import * +import os.path class Jmol(Package): @@ -11,15 +12,26 @@ class Jmol(Package): with features for chemicals, crystals, materials and biomolecules.""" homepage = "http://jmol.sourceforge.net/" - url = "https://sourceforge.net/projects/jmol/files/Jmol/Version%2014.8/Jmol%2014.8.0/Jmol-14.8.0-binary.tar.gz" + url = "https://sourceforge.net/projects/jmol/files/Jmol/Version%2014.8/Jmol%2014.8.0/Jmol-14.8.0-binary.tar.gz" + version('14.31.0', sha256='eee0703773607c8bd6d51751d0d062c3e10ce44c11e1d7828e4ea3d5f710e892') version('14.8.0', sha256='8ec45e8d289aa0762194ca71848edc7d736121ddc72276031a253a3651e6d588') + def url_for_version(self, version): + url = 'https://sourceforge.net/projects/jmol/files/Jmol/Version%20{0}/Jmol%20{1}/Jmol-{1}-binary.tar.gz' + return url.format(version.up_to(2), version) + depends_on('java', type='run') def install(self, spec, prefix): - install_tree('jmol-{0}'.format(self.version), prefix) + if os.path.exists('jmol-{0}'.format(self.version)): + # tar ball contains subdir with different versions + install_tree('jmol-{0}'.format(self.version), prefix) + else: + # no subdirs - tarball was unpacked in spack-src + install_tree('./', prefix) def setup_run_environment(self, env): env.prepend_path('PATH', self.prefix) env.set('JMOL_HOME', self.prefix) + env.prepend_path('PATH', self.spec['java'].prefix.bin) From 61804f201a004bafb786fc0f7ea6c7ab2487b0f0 Mon Sep 17 00:00:00 2001 From: darmac Date: Fri, 3 Jul 2020 14:35:38 +0800 Subject: [PATCH 024/149] glusterfs: add pkgconfig dependency (#17343) --- var/spack/repos/builtin/packages/glusterfs/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/glusterfs/package.py b/var/spack/repos/builtin/packages/glusterfs/package.py index 89024cf9774..95c482da2fb 100644 --- a/var/spack/repos/builtin/packages/glusterfs/package.py +++ b/var/spack/repos/builtin/packages/glusterfs/package.py @@ -34,6 +34,7 @@ class Glusterfs(AutotoolsPackage): depends_on('libuuid') depends_on('libtirpc') depends_on('userspace-rcu') + depends_on('pkgconfig', type='build') def url_for_version(self, version): url = 'https://download.gluster.org/pub/gluster/glusterfs/{0}/{1}/glusterfs-{1}.tar.gz' From 2cd9e1eb62dd2d3b1cc6d9f21bdbc7e0bee0057d Mon Sep 17 00:00:00 2001 From: ketsubouchi <67359246+ketsubouchi@users.noreply.github.com> Date: Fri, 3 Jul 2020 15:38:23 +0900 Subject: [PATCH 025/149] blat: use SPACK_CC (#17364) --- var/spack/repos/builtin/packages/blat/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/blat/package.py b/var/spack/repos/builtin/packages/blat/package.py index 34c9f0da6be..831329eafb3 100644 --- a/var/spack/repos/builtin/packages/blat/package.py +++ b/var/spack/repos/builtin/packages/blat/package.py @@ -21,5 +21,6 @@ def setup_build_environment(self, env): env.set('MACHTYPE', 'x86_64') def install(self, spec, prefix): + filter_file('CC=.*', 'CC={0}'.format(spack_cc), 'inc/common.mk') mkdirp(prefix.bin) make("BINDIR=%s" % prefix.bin) From 986f68f7ed3b06ccd9ec44d1c8896a97f64c4920 Mon Sep 17 00:00:00 2001 From: ketsubouchi <67359246+ketsubouchi@users.noreply.github.com> Date: Fri, 3 Jul 2020 15:39:04 +0900 Subject: [PATCH 026/149] blktrace: use Spack compiler wrappers (#17365) --- var/spack/repos/builtin/packages/blktrace/package.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/var/spack/repos/builtin/packages/blktrace/package.py b/var/spack/repos/builtin/packages/blktrace/package.py index d088439139b..bf0b1eae05c 100644 --- a/var/spack/repos/builtin/packages/blktrace/package.py +++ b/var/spack/repos/builtin/packages/blktrace/package.py @@ -27,5 +27,12 @@ class Blktrace(MakefilePackage): depends_on('libaio') + def edit(self, spec, prefix): + makefiles = ['Makefile', 'btreplay/Makefile', + 'btt/Makefile', 'iowatcher/Makefile'] + for m in makefiles: + makefile = FileFilter(m) + makefile.filter('CC.*=.*', 'CC = {0}'.format(spack_cc)) + def install(self, spec, prefix): install_tree('.', prefix) From b45fc975642d224693f450d645b52accba190571 Mon Sep 17 00:00:00 2001 From: yellowhat Date: Fri, 3 Jul 2020 09:05:24 +0100 Subject: [PATCH 027/149] Package request: HPCG (#17350) * use patch from upstream Co-authored-by: Michael Kuhn --- .../repos/builtin/packages/hpcg/package.py | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 var/spack/repos/builtin/packages/hpcg/package.py diff --git a/var/spack/repos/builtin/packages/hpcg/package.py b/var/spack/repos/builtin/packages/hpcg/package.py new file mode 100644 index 00000000000..4de150cda2e --- /dev/null +++ b/var/spack/repos/builtin/packages/hpcg/package.py @@ -0,0 +1,78 @@ +# 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 os +import platform + + +class Hpcg(AutotoolsPackage): + """HPCG is a software package that performs a fixed number of multigrid + preconditioned (using a symmetric Gauss-Seidel smoother) conjugate gradient + (PCG) iterations using double precision (64 bit) floating point values.""" + + homepage = "https://www.hpcg-benchmark.org" + url = "http://www.hpcg-benchmark.org/downloads/hpcg-3.1.tar.gz" + git = "https://github.com/hpcg-benchmark/hpcg.git" + + version('develop', branch='master') + version('3.1', sha256='33a434e716b79e59e745f77ff72639c32623e7f928eeb7977655ffcaade0f4a4') + + variant('openmp', default=True, description='Enable OpenMP support') + + patch('https://github.com/hpcg-benchmark/hpcg/commit/e9e0b7e6cae23e1f30dd983c2ce2d3bd34d56f75.patch', sha256='23b9de83042eb7a8207fdddcfa79ae2cc1a17e8e623e2224c7751d7c328ee482', when='%gcc@9:') + + depends_on('mpi@1.1:') + + arch = '{0}-{1}'.format(platform.system(), platform.processor()) + build_targets = ['arch={0}'.format(arch)] + + def configure(self, spec, prefix): + CXXFLAGS = '-O3 -ffast-math ' + CXXFLAGS += '-ftree-vectorize -ftree-vectorizer-verbose=0 ' + if '+openmp' in self.spec: + CXXFLAGS += self.compiler.openmp_flag + config = [ + # Shell + 'SHELL = /bin/sh', + 'CD = cd', + 'CP = cp', + 'LN_S = ln -fs', + 'MKDIR = mkdir -p', + 'RM = /bin/rm -f', + 'TOUCH = touch', + # Platform identifier + 'ARCH = {0}'.format(self.arch), + # HPCG Directory Structure / HPCG library + 'TOPdir = {0}'.format(os.getcwd()), + 'SRCdir = $(TOPdir)/src', + 'INCdir = $(TOPdir)/src', + 'BINdir = $(TOPdir)/bin', + # Message Passing library (MPI) + 'MPinc = -I{0}'.format(spec['mpi'].prefix.include), + 'MPlib = -L{0}'.format(spec['mpi'].prefix.lib), + # HPCG includes / libraries / specifics + 'HPCG_INCLUDES = -I$(INCdir) -I$(INCdir)/$(arch) $(MPinc)', + 'HPCG_LIBS =', + 'HPCG_OPTS =', + 'HPCG_DEFS = $(HPCG_OPTS) $(HPCG_INCLUDES)', + # Compilers / linkers - Optimization flags + 'CXX = {0}'.format(spec['mpi'].mpicxx), + 'CXXFLAGS = $(HPCG_DEFS) {0}'.format(CXXFLAGS), + 'LINKER = $(CXX)', + 'LINKFLAGS = $(CXXFLAGS)', + 'ARCHIVER = ar', + 'ARFLAGS = r', + 'RANLIB = echo', + ] + + # Write configuration options to include file + with open('setup/Make.{0}'.format(self.arch), 'w') as makefile: + for var in config: + makefile.write('{0}\n'.format(var)) + + def install(self, spec, prefix): + # Manual installation + install_tree('bin', prefix.bin) From 9c85d87b901f55ee1fca9409d24e7f1c268688ce Mon Sep 17 00:00:00 2001 From: g-mathias <40861554+g-mathias@users.noreply.github.com> Date: Fri, 3 Jul 2020 10:13:37 +0200 Subject: [PATCH 028/149] jube: added v2.3.0 (#17366) Co-authored-by: lu64bag3 --- var/spack/repos/builtin/packages/jube/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/jube/package.py b/var/spack/repos/builtin/packages/jube/package.py index dae9fc2932c..f108d991723 100644 --- a/var/spack/repos/builtin/packages/jube/package.py +++ b/var/spack/repos/builtin/packages/jube/package.py @@ -14,6 +14,7 @@ class Jube(PythonPackage): homepage = "https://www.fz-juelich.de/jsc/jube/" url = "https://apps.fz-juelich.de/jsc/jube/jube2/download.php?version=2.2.2" + version('2.3.0', sha256='6051d45af2ff35031ccc460185fbfa61f7f36ea14f17a0d51a9e62cd7af3709a', extension="tar.gz") version('2.2.2', sha256='135bc03cf07c4624ef2cf581ba5ec52eb44ca1dac15cffb83637e86170980477', extension="tar.gz") version('2.2.1', sha256='68751bf2e17766650ccddb7a5321dd1ac8b34ffa3585db392befbe9ff180ddd9', extension="tar.gz") version('2.2.0', sha256='bc825884fc8506d0fb7b3b5cbb5ad4c7e82b1fe1d7ec861ca33699adfc8100f1', extension="tar.gz") From 8fcd917e515b3d31585f2c33493722891acfb653 Mon Sep 17 00:00:00 2001 From: "Paul R. C. Kent" Date: Fri, 3 Jul 2020 05:49:58 -0400 Subject: [PATCH 029/149] libelf: added extra url (#17358) --- var/spack/repos/builtin/packages/libelf/package.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/libelf/package.py b/var/spack/repos/builtin/packages/libelf/package.py index 9054753c48c..2f59c61dfad 100644 --- a/var/spack/repos/builtin/packages/libelf/package.py +++ b/var/spack/repos/builtin/packages/libelf/package.py @@ -19,7 +19,11 @@ class Libelf(AutotoolsPackage): # homepage = "http://www.mr511.de/software/english.html" homepage = "https://directory.fsf.org/wiki/Libelf" - url = "https://fossies.org/linux/misc/old/libelf-0.8.13.tar.gz" + + urls = [ + 'https://fossies.org/linux/misc/old/libelf-0.8.13.tar.gz', + 'https://ftp.osuosl.org/pub/blfs/conglomeration/libelf/libelf-0.8.13.tar.gz' + ] version('0.8.13', sha256='591a9b4ec81c1f2042a97aa60564e0cb79d041c52faa7416acb38bc95bd2c76d') From 02fa7b680f3e997054ba1bb80b9d9a806327c435 Mon Sep 17 00:00:00 2001 From: g-mathias <40861554+g-mathias@users.noreply.github.com> Date: Fri, 3 Jul 2020 11:52:02 +0200 Subject: [PATCH 030/149] elpa: added v2019.11.001 and v2020.05.001 (#17368) Co-authored-by: lu64bag3 --- var/spack/repos/builtin/packages/elpa/package.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/var/spack/repos/builtin/packages/elpa/package.py b/var/spack/repos/builtin/packages/elpa/package.py index 3aad567fe5a..58c088393f0 100644 --- a/var/spack/repos/builtin/packages/elpa/package.py +++ b/var/spack/repos/builtin/packages/elpa/package.py @@ -14,9 +14,10 @@ class Elpa(AutotoolsPackage): homepage = 'http://elpa.mpcdf.mpg.de/' url = 'http://elpa.mpcdf.mpg.de/elpa-2015.11.001.tar.gz' + version('2020.05.001', sha256='66ff1cf332ce1c82075dc7b5587ae72511d2bcb3a45322c94af6b01996439ce5') + version('2019.11.001', sha256='10374a8f042e23c7e1094230f7e2993b6f3580908a213dbdf089792d05aff357') version('2019.05.002', sha256='d2eab5e5d74f53601220b00d18185670da8c00c13e1c1559ecfb0cd7cb2c4e8d') - version('2018.11.001', - sha256='cc27fe8ba46ce6e6faa8aea02c8c9983052f8e73a00cfea38abf7613cb1e1b16') + version('2018.11.001', sha256='cc27fe8ba46ce6e6faa8aea02c8c9983052f8e73a00cfea38abf7613cb1e1b16') version('2018.05.001.rc1', sha256='598c01da20600a4514ea4d503b93e977ac0367e797cab7a7c1b0e0e3e86490db') version('2017.11.001', sha256='59f99c3abe2190fac0db8a301d0b9581ee134f438669dbc92551a54f6f861820') version('2017.05.003', sha256='bccd49ce35a323bd734b17642aed8f2588fea4cc78ee8133d88554753bc3bf1b') From f3eba3c48298d00ba098be3160c9fc9319bfe465 Mon Sep 17 00:00:00 2001 From: Amjad Kotobi Date: Fri, 3 Jul 2020 12:25:54 +0200 Subject: [PATCH 031/149] py-python-swiftclient: added v3.10.0 (#17352) --- .../repos/builtin/packages/py-python-swiftclient/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/py-python-swiftclient/package.py b/var/spack/repos/builtin/packages/py-python-swiftclient/package.py index bd8f766624b..a016686406f 100644 --- a/var/spack/repos/builtin/packages/py-python-swiftclient/package.py +++ b/var/spack/repos/builtin/packages/py-python-swiftclient/package.py @@ -16,6 +16,7 @@ class PyPythonSwiftclient(PythonPackage): import_modules = ['sys', 'setuptools', 'requests'] + version('3.10.0', sha256='66227eaf29a691c70675fb9982022980b92797c273dd5e6dc7e680425e9a3634') version('3.9.0', sha256='4f2097492e4c76e948882fc859bfa033ade09bed72f8e6b328e34a3467d9a377') version('3.8.1', sha256='3a013303643f77a99befa05582dfb93671e1fba1aed9f4a517418129700aedb8') version('3.8.0', sha256='107a9d5356663365a9f7c0b3a2b55da97a0a9ba7f10da2319b3972481510f33d') From 04f300064651acf8a3e7721eb95bf2f7337a07b1 Mon Sep 17 00:00:00 2001 From: Shahzeb Siddiqui Date: Fri, 3 Jul 2020 06:29:45 -0400 Subject: [PATCH 032/149] Pipelines doc: fixed two broken links (#17355) --- lib/spack/docs/pipelines.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/spack/docs/pipelines.rst b/lib/spack/docs/pipelines.rst index 34ff9cfc6da..342024d94c4 100644 --- a/lib/spack/docs/pipelines.rst +++ b/lib/spack/docs/pipelines.rst @@ -82,9 +82,9 @@ or Amazon Elastic Kubernetes Service (`EKS `_), thou topics are outside the scope of this document. Spack's pipelines are now making use of the -`trigger ` syntax to run +`trigger `_ syntax to run dynamically generated -`child pipelines `. +`child pipelines `_. Note that the use of dynamic child pipelines requires running Gitlab version ``>= 12.9``. From c797a0611caf8b2788bfa0f9edaadcd89fd8fe23 Mon Sep 17 00:00:00 2001 From: fcannini Date: Sat, 4 Jul 2020 10:27:32 -0300 Subject: [PATCH 033/149] dtfbplus: New package. (#15191) * dtfbplus: New package. * dftbplus: Addresses @adamjstewart's comments on PR #15191 * dftbplus: Fixes format() calls that slipped in previous commit. * dftbplus: Appease flake8. * dftbplus: Change 'url' and misc. fixes. * Add a resource to do the job of './utils/get_opt_externals' --- .../builtin/packages/dftbplus/package.py | 147 ++++++++++++++++++ .../builtin/packages/dftd3-lib/package.py | 38 +++++ 2 files changed, 185 insertions(+) create mode 100644 var/spack/repos/builtin/packages/dftbplus/package.py create mode 100644 var/spack/repos/builtin/packages/dftd3-lib/package.py diff --git a/var/spack/repos/builtin/packages/dftbplus/package.py b/var/spack/repos/builtin/packages/dftbplus/package.py new file mode 100644 index 00000000000..a8b313988e0 --- /dev/null +++ b/var/spack/repos/builtin/packages/dftbplus/package.py @@ -0,0 +1,147 @@ +# 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 os + + +class Dftbplus(MakefilePackage): + """DFTB+ is an implementation of the + Density Functional based Tight Binding (DFTB) method, + containing many extensions to the original method.""" + + homepage = "https://www.dftbplus.org" + url = "https://github.com/dftbplus/dftbplus/archive/19.1.tar.gz" + + version('19.1', sha256='4d07f5c6102f06999d8cfdb1d17f5b59f9f2b804697f14b3bc562e3ea094b8a8') + + resource(name='slakos', + url='https://github.com/dftbplus/testparams/archive/dftbplus-18.2.tar.gz', + sha256='bd191b3d240c1a81a8754a365e53a78b581fc92eb074dd5beb8b56a669a8d3d1', + destination='external/slakos', + when='@18.2:') + + variant('mpi', default=True, + description="Build an MPI-paralelised version of the code.") + + variant('gpu', default=False, + description="Use the MAGMA library " + "for GPU accelerated computation") + + variant('elsi', default=False, + description="Use the ELSI library for large scale systems. " + "Only has any effect if you build with '+mpi'") + + variant('sockets', default=False, + description="Whether the socket library " + "(external control) should be linked") + + variant('arpack', default=False, + description="Use ARPACK for excited state DFTB functionality") + + variant('transport', default=False, + description="Whether transport via libNEGF should be included. " + "Only affects parallel build. " + "(serial version is built without libNEGF/transport)") + + variant('dftd3', default=False, + description="Use DftD3 dispersion library " + "(if you need this dispersion model)") + + depends_on('lapack') + depends_on('blas') + depends_on('scalapack', when="+mpi") + depends_on('mpi', when="+mpi") + depends_on('elsi', when="+elsi") + depends_on('magma', when="+gpu") + depends_on('arpack-ng', when="+arpack") + depends_on('dftd3-lib@0.9.2', when="+dftd3") + + def edit(self, spec, prefix): + """ + First, change the ROOT variable, because, for some reason, + the Makefile and the spack install script run in different directories + + Then, if using GCC, rename the file 'sys/make.x86_64-linux-gnu' + to make.arch. + + After that, edit the make.arch to point to the dependencies + + And the last thing we do here is to set the installdir + """ + dircwd = os.getcwd() + makefile = FileFilter("makefile") + makefile.filter("ROOT := .*", "ROOT := {0}".format(dircwd)) + + archmake = join_path(".", "sys", "make.x86_64-linux-gnu") + copy(archmake, join_path(dircwd, "make.arch")) + + march = FileFilter(join_path(dircwd, 'make.arch')) + + mconfig = FileFilter(join_path(dircwd, 'make.config')) + + mconfig.filter('INSTALLDIR := .*', 'INSTALLDIR := {0}'.format(prefix)) + + if '+gpu' in self.spec: + march.filter('MAGMADIR = .*', + 'MAGMADIR = {0}'.format(spec['magma'].prefix)) + + mconfig.filter('WITH_GPU := .*', 'WITH_GPU := 1') + + if '+mpi' in self.spec: + march.filter('SCALAPACKDIR = .*', + 'SCALAPACKDIR = {0}'.format(spec['scalapack'].prefix)) + + march.filter('LIB_LAPACK = -l.*', + 'LIB_LAPACK = {0}'.format(spec['blas'].libs.ld_flags)) + + march.filter('mpifort', '{0}'.format(spec['mpi'].mpifc)) + + mconfig.filter('WITH_MPI := .*', 'WITH_MPI := 1') + + if '+elsi' in self.spec: + mconfig.filter('WITH_ELSI := .*', 'WITH_ELSI := 1') + + has_pexsi = '+enable_pexsi' in spec['elsi'] + + mconfig.filter('WITH_PEXSI := .*', 'WITH_PEXSI := {0}'.format( + '1' if has_pexsi is True else '0' + )) + + march.filter("ELSIINCDIR .*", "ELSIINCDIR = {0}".format( + spec['elsi'].prefix.include + )) + + march.filter("ELSIDIR .*", + "ELSIDIR = {0}".format(spec['elsi'].prefix)) + + else: + march.filter('LIB_LAPACK += -l.*', 'LIB_LAPACK += {0}'.format( + spec['blas'].libs.ld_flags)) + + if '+sockets' in self.spec: + mconfig.filter('WITH_SOCKETS := .*', 'WITH_SOCKETS := 1') + + if '+transport' in self.spec: + mconfig.filter('WITH_TRANSPORT := .*', 'WITH_TRANSPORT := 1') + + if '+arpack' in self.spec: + march.filter('ARPACK_LIBS = .*', 'ARPACK_LIBS = {0}'.format( + spec['arpack-ng'].libs.ld_flags + )) + + mconfig.filter('WITH_ARPACK := .*', 'WITH_ARPACK := 1') + + if '+dftd3' in self.spec: + march.filter('COMPILE_DFTD3 = .*', 'COMPILE_DFTD3 = 0') + march.filter('DFTD3_INCS = .*', 'DFTD3_INCS = -I{0}'.format( + spec['dftd3-lib'].prefix.include + )) + + march.filter('DFTD3_LIBS = .*', + 'DFTD3_LIBS = -L{0} -ldftd3'.format( + spec['dftd3-lib'].prefix)) + + mconfig.filter('WITH_DFTD3 := .*', 'WITH_DFTD3 := 1') diff --git a/var/spack/repos/builtin/packages/dftd3-lib/package.py b/var/spack/repos/builtin/packages/dftd3-lib/package.py new file mode 100644 index 00000000000..793a312342a --- /dev/null +++ b/var/spack/repos/builtin/packages/dftd3-lib/package.py @@ -0,0 +1,38 @@ +# 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 Dftd3Lib(MakefilePackage): + """A dispersion correction for density functionals, + Hartree-Fock and semi-empirical quantum chemical methods""" + + homepage = "https://www.chemie.uni-bonn.de/pctc/mulliken-center/software/dft-d3/dft-d3" + url = "https://github.com/dftbplus/dftd3-lib/archive/0.9.2.tar.gz" + + version('0.9.2', sha256='4178f3cf2f3e7e982a7084ec66bac92b4fdf164537d9fc0ada840a11b784f0e0') + + # This fixes a concurrency bug, where make would try to start compiling + # the dftd3 target before the lib target ended. + # Since the library is small, disabling causes not much harm + parallel = False + + def edit(self, spec, prefix): + makefile = FileFilter('make.arch') + makefile.filter("FC = gfortran", "") + makefile.filter("LN = gfortran", "LN = $(FC)") + + def install(self, spec, prefix): + mkdir(prefix.lib) + mkdir(prefix.bin) + mkdir(prefix.include) + install("lib/libdftd3.a", prefix.lib) + install("prg/dftd3", prefix.bin) + install("lib/dftd3_api.mod", prefix.include) + install("lib/dftd3_common.mod", prefix.include) + install("lib/dftd3_core.mod", prefix.include) + install("lib/dftd3_pars.mod", prefix.include) + install("lib/dftd3_sizes.mod", prefix.include) From e9e3e88f637dcaa8e3d7a463c6af03ce77c49ce1 Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Sun, 5 Jul 2020 11:09:24 -0500 Subject: [PATCH 034/149] Fix Intel MPI super invocation, again (#17378) --- var/spack/repos/builtin/packages/intel-mpi/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/intel-mpi/package.py b/var/spack/repos/builtin/packages/intel-mpi/package.py index 57d173bc950..7c87139a7bf 100644 --- a/var/spack/repos/builtin/packages/intel-mpi/package.py +++ b/var/spack/repos/builtin/packages/intel-mpi/package.py @@ -65,7 +65,7 @@ def setup_dependent_build_environment(self, *args): }) def setup_run_environment(self, env): - super(IntelMPI, self).setup_run_environment(env) + super(IntelMpi, self).setup_run_environment(env) for name, value in self.mpi_compiler.wrappers.items(): env.set(name, value) From bb15addad5226fd64a4bfe824669376e270e9db8 Mon Sep 17 00:00:00 2001 From: TZ Date: Sun, 5 Jul 2020 18:10:28 +0200 Subject: [PATCH 035/149] inel-mpi: fix for wrong structure name instroduced in ea8a0be4 (#17382) it's mpi_compiler_wrappers and not mpi_compiler._wrappers fixes 2nd part of #17371 --- var/spack/repos/builtin/packages/intel-mpi/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/intel-mpi/package.py b/var/spack/repos/builtin/packages/intel-mpi/package.py index 7c87139a7bf..65e7d6d4ce2 100644 --- a/var/spack/repos/builtin/packages/intel-mpi/package.py +++ b/var/spack/repos/builtin/packages/intel-mpi/package.py @@ -67,5 +67,5 @@ def setup_dependent_build_environment(self, *args): def setup_run_environment(self, env): super(IntelMpi, self).setup_run_environment(env) - for name, value in self.mpi_compiler.wrappers.items(): + for name, value in self.mpi_compiler_wrappers.items(): env.set(name, value) From cce629e7912d05221c3561491e7bf7b5777d3b12 Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Sun, 5 Jul 2020 14:58:26 -0500 Subject: [PATCH 036/149] SciPy: add v1.5.1 (#17380) --- var/spack/repos/builtin/packages/py-scipy/package.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/py-scipy/package.py b/var/spack/repos/builtin/packages/py-scipy/package.py index 6775d533fa8..29cdb70bb10 100644 --- a/var/spack/repos/builtin/packages/py-scipy/package.py +++ b/var/spack/repos/builtin/packages/py-scipy/package.py @@ -12,7 +12,7 @@ class PyScipy(PythonPackage): as routines for numerical integration and optimization.""" homepage = "https://www.scipy.org/" - url = "https://pypi.io/packages/source/s/scipy/scipy-1.5.0.tar.gz" + url = "https://pypi.io/packages/source/s/scipy/scipy-1.5.1.tar.gz" maintainers = ['adamjstewart'] install_time_test_callbacks = ['install_test', 'import_module_test'] @@ -30,6 +30,7 @@ class PyScipy(PythonPackage): 'scipy.sparse.linalg.eigen.lobpcg', 'scipy.special._precompute' ] + version('1.5.1', sha256='039572f0ca9578a466683558c5bf1e65d442860ec6e13307d528749cfe6d07b8') version('1.5.0', sha256='4ff72877d19b295ee7f7727615ea8238f2d59159df0bdd98f91754be4a2767f0') version('1.4.1', sha256='dee1bbf3a6c8f73b6b218cb28eed8dd13347ea2f87d572ce19b289d6fd3fbc59') version('1.4.0', sha256='31f7cfa93b01507c935c12b535e24812594002a02a56803d7cd063e9920d25e8') From 7bba9cd2a50ccfb14d1e1ad2b35c07c837f061cc Mon Sep 17 00:00:00 2001 From: Timo Heister Date: Sun, 5 Jul 2020 16:13:22 -0400 Subject: [PATCH 037/149] update aspect to 2.2.0 (#17379) --- var/spack/repos/builtin/packages/aspect/package.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/aspect/package.py b/var/spack/repos/builtin/packages/aspect/package.py index e3e613d406b..08e2b59abd7 100644 --- a/var/spack/repos/builtin/packages/aspect/package.py +++ b/var/spack/repos/builtin/packages/aspect/package.py @@ -7,7 +7,7 @@ class Aspect(CMakePackage): - """Parallel, extendible finite element code to simulate convection in the + """Parallel and extensible Finite Element code to simulate convection in the Earth's mantle and elsewhere.""" homepage = "https://aspect.geodynamics.org" @@ -17,6 +17,7 @@ class Aspect(CMakePackage): maintainers = ['tjhei'] version('develop', branch='master') + version('2.2.0', sha256='6dc31c4b991c8a96495ba0e9a3c92e57f9305ba94b8dbed3c8c5cfbab91ec5c1') version('2.1.0', sha256='bd574d60ed9df1f4b98e68cd526a074d0527c0792763187c9851912327d861a3') version('2.0.1', sha256='0bf5600c42afce9d39c1d285b0654ecfdeb0f30e9f3421651c95f54ca01ac165') version('2.0.0', sha256='d485c07f54248e824bdfa35f3eec8971b65e8b7114552ffa2c771bc0dede8cc0') @@ -26,9 +27,11 @@ class Aspect(CMakePackage): values=('Debug', 'Release')) variant('gui', default=False, description='Enable the deal.II parameter GUI') variant('fpe', default=False, description='Enable floating point exception checks') + variant('opendap', default=False, description='Enable OPeNDAP support for remote file access') depends_on('dealii+p4est+trilinos+mpi') depends_on('dealii-parameter-gui', when='+gui') + depends_on('libdap4', when='+opendap') def cmake_args(self): return [ From e5ec89ad5b89d4ef3e68d65f0b52ced7994f1da8 Mon Sep 17 00:00:00 2001 From: Gilles Gouaillardet Date: Mon, 6 Jul 2020 05:14:36 +0900 Subject: [PATCH 038/149] openblas: fix fj compiler support in 0.3.10 (#17376) The latest 0.3.10 version openblas changed how Fortran libraries are detected, and this broke Fujitsu compiler support. This (new) openblas patch addresses that issue. --- .../packages/openblas/openblas_fujitsu2.patch | 13 +++++++++++++ .../repos/builtin/packages/openblas/package.py | 1 + 2 files changed, 14 insertions(+) create mode 100644 var/spack/repos/builtin/packages/openblas/openblas_fujitsu2.patch diff --git a/var/spack/repos/builtin/packages/openblas/openblas_fujitsu2.patch b/var/spack/repos/builtin/packages/openblas/openblas_fujitsu2.patch new file mode 100644 index 00000000000..bfda30cced7 --- /dev/null +++ b/var/spack/repos/builtin/packages/openblas/openblas_fujitsu2.patch @@ -0,0 +1,13 @@ +--- OpenBLAS-0.3.10/f_check 2020-07-04 00:02:19.000000000 +0900 ++++ OpenBLAS-0.3.10/f_check_fix 2020-07-04 00:00:52.000000000 +0900 +@@ -337,8 +337,8 @@ + && ($flags !~ /kernel32/) + && ($flags !~ /advapi32/) + && ($flags !~ /shell32/) +- && ($flags !~ /omp/ || ($vendor !~ /PGI/ && $flags =~ /omp/)) +- && ($flags !~ /[0-9]+/) ++ && ($flags !~ /omp/ || ($vendor !~ /PGI/ && $vendor !~ /FUJITSU/ && $flags =~ /omp/)) ++ && ($flags !~ /[0-9]+/ || ($vendor == FUJITSU && $flags =~ /^-lfj90/)) + && ($flags !~ /^\-l$/) + ) { + $linker_l .= $flags . " "; diff --git a/var/spack/repos/builtin/packages/openblas/package.py b/var/spack/repos/builtin/packages/openblas/package.py index 61a530b37f4..ad0a6c82f83 100644 --- a/var/spack/repos/builtin/packages/openblas/package.py +++ b/var/spack/repos/builtin/packages/openblas/package.py @@ -99,6 +99,7 @@ class Openblas(MakefilePackage): # Add conditions to f_check to determine the Fujitsu compiler patch('openblas_fujitsu.patch', when='%fj') + patch('openblas_fujitsu2.patch', when='@0.3.10 %fj') # See https://github.com/spack/spack/issues/3036 conflicts('%intel@16', when='@0.2.15:0.2.19') From 8d5aa4676580cad5867eeaa14bd88be3f397b950 Mon Sep 17 00:00:00 2001 From: g-mathias <40861554+g-mathias@users.noreply.github.com> Date: Sun, 5 Jul 2020 22:17:38 +0200 Subject: [PATCH 039/149] package Amber: amber tools 20 (#17374) * package amber: added amber_tools 20 hash; added minor version for amber_tools * fix flake8 issues Co-authored-by: lu64bag3 --- .../repos/builtin/packages/amber/package.py | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/var/spack/repos/builtin/packages/amber/package.py b/var/spack/repos/builtin/packages/amber/package.py index 481377047ca..9b772e0a6a6 100644 --- a/var/spack/repos/builtin/packages/amber/package.py +++ b/var/spack/repos/builtin/packages/amber/package.py @@ -9,28 +9,41 @@ class Amber(Package, CudaPackage): - """Amber is a suite of biomolecular simulation programs. + """Amber is a suite of biomolecular simulation programs together + with Amber tools. - Note: A manual download is required for Amber. - Spack will search your current directory for the download file. - Alternatively, add this file to a mirror so that Spack can find it. + Note: The version number is composed of the Amber version (major) + and the tools version (minor). A manual download is required for + both Amber and Amber tools. + Spack will search your current directory for the download files. + Alternatively, add the files to a mirror so that Spack can find them. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html""" homepage = "http://ambermd.org/" - url = "file://{0}/Amber18.tar.bz2".format(os.getcwd()) + url = "file://{0}/Amber18.tar.bz2".format(os.getcwd()) maintainers = ['hseara'] - version('18', sha256='2060897c0b11576082d523fb63a51ba701bc7519ff7be3d299d5ec56e8e6e277') - version('16', sha256='3b7ef281fd3c46282a51b6a6deed9ed174a1f6d468002649d84bfc8a2577ae5d') + def url_for_version(self, version): + url = "file://{0}/Amber{1}.tar.bz2".format( + os.getcwd(), version.up_to(1)) + return url + + version( + '18.20', sha256='2060897c0b11576082d523fb63a51ba701bc7519ff7be3d299d5ec56e8e6e277') + version( + '18.19', sha256='2060897c0b11576082d523fb63a51ba701bc7519ff7be3d299d5ec56e8e6e277') + version( + '16.16', sha256='3b7ef281fd3c46282a51b6a6deed9ed174a1f6d468002649d84bfc8a2577ae5d') resources = [ # [version amber, version ambertools , sha256sum] + ('18', '20', 'b1e1f8f277c54e88abc9f590e788bbb2f7a49bcff5e8d8a6eacfaf332a4890f9'), ('18', '19', '0c86937904854b64e4831e047851f504ec45b42e593db4ded92c1bee5973e699'), ('16', '16', '7b876afe566e9dd7eb6a5aa952a955649044360f15c1f5d4d91ba7f41f3105fa'), ] for ver, ambertools_ver, checksum in resources: - resource(when='@{0}'.format(ver), + resource(when='@{0}.{1}'.format(ver, ambertools_ver), name='AmberTools', url='file://{0}/AmberTools{1}.tar.bz2'.format(os.getcwd(), ambertools_ver), @@ -100,10 +113,14 @@ class Amber(Package, CudaPackage): depends_on('cuda@7.5.18', when='@:16+cuda') # conflicts - conflicts('+x11', when='platform=cray', msg='x11 amber applications not available for cray') - conflicts('+openmp', when='%clang', msg='OpenMP optimizations not available for the clang compiler') - conflicts('+openmp', when='%apple-clang', msg='OpenMP optimizations not available for the Apple clang compiler') - conflicts('+openmp', when='%pgi', msg='OpenMP optimizations not available for the pgi compiler') + conflicts('+x11', when='platform=cray', + msg='x11 amber applications not available for cray') + conflicts('+openmp', when='%clang', + msg='OpenMP not available for the clang compiler') + conflicts('+openmp', when='%apple-clang', + msg='OpenMP not available for the Apple clang compiler') + conflicts('+openmp', when='%pgi', + msg='OpenMP not available for the pgi compiler') def setup_build_environment(self, env): amber_src = self.stage.source_path From 52cafe6c9690cc6678932ccf4ea743f16622034e Mon Sep 17 00:00:00 2001 From: yellowhat Date: Sun, 5 Jul 2020 21:22:11 +0100 Subject: [PATCH 040/149] amdblis bump to 2.2. (#17369) --- var/spack/repos/builtin/packages/amdblis/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/amdblis/package.py b/var/spack/repos/builtin/packages/amdblis/package.py index 706e7f6bd25..82d1f189381 100644 --- a/var/spack/repos/builtin/packages/amdblis/package.py +++ b/var/spack/repos/builtin/packages/amdblis/package.py @@ -20,4 +20,5 @@ class Amdblis(BlisBase): url = "https://github.com/amd/blis/archive/2.1.tar.gz" git = "https://github.com/amd/blis.git" + version('2.2', sha256='e1feb60ac919cf6d233c43c424f6a8a11eab2c62c2c6e3f2652c15ee9063c0c9') version('2.1', sha256='3b1d611d46f0f13b3c0917e27012e0f789b23dbefdddcf877b20327552d72fb3') From 66d4bc3f3c14f7c21de2a8c6907366944c054d2a Mon Sep 17 00:00:00 2001 From: figroc Date: Mon, 6 Jul 2020 04:22:31 +0800 Subject: [PATCH 041/149] protobuf: add versions (#17381) --- var/spack/repos/builtin/packages/protobuf/package.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/protobuf/package.py b/var/spack/repos/builtin/packages/protobuf/package.py index 1cbd94b3144..060d345b45b 100644 --- a/var/spack/repos/builtin/packages/protobuf/package.py +++ b/var/spack/repos/builtin/packages/protobuf/package.py @@ -12,8 +12,13 @@ class Protobuf(Package): """Google's data interchange format.""" homepage = "https://developers.google.com/protocol-buffers" - url = "https://github.com/protocolbuffers/protobuf/archive/v3.10.1.tar.gz" + url = "https://github.com/protocolbuffers/protobuf/archive/v3.12.2.tar.gz" + version('3.12.2', sha256='bb8ce9ba11eb7bccf080599fe7cad9cc461751c8dd1ba61701c0070d58cde973') + version('3.12.1', sha256='cb9b3f9d625b5739a358268eb3421de11cacd90025f5f7672c3930553eca810e') + version('3.12.0', sha256='946ba5371e423e1220d2cbefc1f65e69a1e81ca5bab62a03d66894172983cfcd') + version('3.11.4', sha256='a79d19dcdf9139fa4b81206e318e33d245c4c9da1ffed21c87288ed4380426f9') + version('3.11.3', sha256='cf754718b0aa945b00550ed7962ddc167167bd922b842199eeb6505e6f344852') version('3.11.2', sha256='e8c7601439dbd4489fe5069c33d374804990a56c2f710e00227ee5d8fd650e67') version('3.11.1', sha256='4f8e805825c53bbc3c9f6b6abc009b5b5679e4702bccfca1121c42ff5ec801c7') version('3.11.0', sha256='6d356a6279cc76d2d5c4dfa6541641264b59eae0bc96b852381361e3400d1f1c') From 9abadd49855026588909c9c09e1dbc0c8aa0e12d Mon Sep 17 00:00:00 2001 From: iarspider Date: Sun, 5 Jul 2020 22:23:03 +0200 Subject: [PATCH 042/149] New version of LHAPDF: 6.3.0 (#17367) --- var/spack/repos/builtin/packages/lhapdf/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/lhapdf/package.py b/var/spack/repos/builtin/packages/lhapdf/package.py index 10a69aba755..13adae48187 100644 --- a/var/spack/repos/builtin/packages/lhapdf/package.py +++ b/var/spack/repos/builtin/packages/lhapdf/package.py @@ -13,6 +13,7 @@ class Lhapdf(AutotoolsPackage): homepage = "https://lhapdf.hepforge.org/" url = "https://lhapdf.hepforge.org/downloads/?f=LHAPDF-6.2.3.tar.gz" + version('6.3.0', sha256='ed4d8772b7e6be26d1a7682a13c87338d67821847aa1640d78d67d2cef8b9b5d') version('6.2.3', sha256='d6e63addc56c57b6286dc43ffc56d901516f4779a93a0f1547e14b32cfd82dd1') depends_on('autoconf', type='build') From 4e6d189a9469afe4550d95b5340480059d0327ea Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Sun, 5 Jul 2020 15:25:38 -0500 Subject: [PATCH 043/149] [opencascade] depends_on freetype, tcl, tk, gl (#17357) * [opencascade] depends_on freetype, tcl, tk, gl * [opencascade] new version 7.4.0p1 and url_for_version --- .../repos/builtin/packages/opencascade/package.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/var/spack/repos/builtin/packages/opencascade/package.py b/var/spack/repos/builtin/packages/opencascade/package.py index 8267716e789..7df9668f01c 100644 --- a/var/spack/repos/builtin/packages/opencascade/package.py +++ b/var/spack/repos/builtin/packages/opencascade/package.py @@ -16,6 +16,8 @@ class Opencascade(CMakePackage): homepage = "https://www.opencascade.com" url = "http://git.dev.opencascade.org/gitweb/?p=occt.git;a=snapshot;h=refs/tags/V7_4_0;sf=tgz" + version('7.4.0p1', extension='tar.gz', + sha256='e00fedc221560fda31653c23a8f3d0eda78095c87519f338d4f4088e2ee9a9c0') version('7.4.0', extension='tar.gz', sha256='655da7717dac3460a22a6a7ee68860c1da56da2fec9c380d8ac0ac0349d67676') @@ -32,6 +34,14 @@ class Opencascade(CMakePackage): depends_on('vtk', when='+vtk') depends_on('freeimage', when='+freeimage') depends_on('rapidjson', when='+rapidjson') + depends_on('freetype') + depends_on('tcl') + depends_on('tk') + depends_on('gl') + + def url_for_version(self, version): + url = "http://git.dev.opencascade.org/gitweb/?p=occt.git;a=snapshot;h=refs/tags/V{0};sf=tgz" + return url.format(version.underscored) def cmake_args(self): args = [] From 00f7577273f220ad21acfd97b787e73274ef8f8c Mon Sep 17 00:00:00 2001 From: darmac Date: Mon, 6 Jul 2020 04:27:49 +0800 Subject: [PATCH 044/149] brpc: fix depends issue (#17347) --- var/spack/repos/builtin/packages/brpc/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/brpc/package.py b/var/spack/repos/builtin/packages/brpc/package.py index ba1417babf0..d5481d300bc 100644 --- a/var/spack/repos/builtin/packages/brpc/package.py +++ b/var/spack/repos/builtin/packages/brpc/package.py @@ -22,5 +22,6 @@ class Brpc(CMakePackage): depends_on('gflags') depends_on('protobuf') depends_on('leveldb') + depends_on('openssl') patch('narrow.patch', sha256='d7393029443853ddda6c09e3d2185ac2f60920a36a8b685eb83b6b80c1535539', when='@:0.9.7') From 58cfe4e078227da6b442b71b2024934fdf0c428c Mon Sep 17 00:00:00 2001 From: darmac Date: Mon, 6 Jul 2020 04:28:29 +0800 Subject: [PATCH 045/149] acl: fix depends error (#17341) --- var/spack/repos/builtin/packages/acl/package.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/var/spack/repos/builtin/packages/acl/package.py b/var/spack/repos/builtin/packages/acl/package.py index ea9bf4172f5..17f916d2971 100644 --- a/var/spack/repos/builtin/packages/acl/package.py +++ b/var/spack/repos/builtin/packages/acl/package.py @@ -24,6 +24,10 @@ class Acl(AutotoolsPackage): depends_on('automake', type='build') depends_on('libtool', type='build') depends_on('attr') + depends_on('gettext') + + def setup_build_environment(self, env): + env.append_flags('LDFLAGS', '-lintl') def autoreconf(self, spec, prefix): bash = which('bash') From 466f7fd9966ae47c6f5fd64a5fe63f001aac3cb0 Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Sun, 5 Jul 2020 21:06:05 -0500 Subject: [PATCH 046/149] GMT: add v6.1.0 (#17384) --- var/spack/repos/builtin/packages/gmt/package.py | 7 +++++-- var/spack/repos/builtin/packages/gmt/regexp.patch | 11 +++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 var/spack/repos/builtin/packages/gmt/regexp.patch diff --git a/var/spack/repos/builtin/packages/gmt/package.py b/var/spack/repos/builtin/packages/gmt/package.py index 003c0d24be1..02400cb66e3 100644 --- a/var/spack/repos/builtin/packages/gmt/package.py +++ b/var/spack/repos/builtin/packages/gmt/package.py @@ -15,12 +15,13 @@ class Gmt(Package): """ homepage = "https://www.generic-mapping-tools.org/" - url = "https://github.com/GenericMappingTools/gmt/archive/6.0.0.tar.gz" + url = "https://github.com/GenericMappingTools/gmt/archive/6.1.0.tar.gz" git = "https://github.com/GenericMappingTools/gmt.git" maintainers = ['adamjstewart'] version('master', branch='master') + version('6.1.0', sha256='f76ad7f444d407dfd7e5762644eec3a719c6aeb06d877bf746fe51abd79b1a9e') version('6.0.0', sha256='7a733e670f01d99f8fc0da51a4337320d764c06a68746621f83ccf2e3453bcb7') version('5.4.4', sha256='b593dfb101e6507c467619f3d2190a9f78b09d49fe2c27799750b8c4c0cd2da0') version('4.5.9', sha256='9b13be96ccf4bbd38c14359c05dfa7eeeb4b5f06d6f4be9c33d6c3ea276afc86', @@ -41,7 +42,7 @@ class Gmt(Package): # https://github.com/GenericMappingTools/gmt/blob/master/MAINTENANCE.md # Required dependencies - depends_on('cmake@2.8.7:', type='build', when='@5:') + depends_on('cmake@2.8.12:', type='build', when='@5:') depends_on('netcdf-c@4:') depends_on('curl', when='@5.4:') @@ -59,6 +60,8 @@ class Gmt(Package): depends_on('graphicsmagick', type='test') + # https://github.com/GenericMappingTools/gmt/pull/3603 + patch('regexp.patch', when='@6.1.0') patch('type.patch', when='@4.5.9') @when('@5:') diff --git a/var/spack/repos/builtin/packages/gmt/regexp.patch b/var/spack/repos/builtin/packages/gmt/regexp.patch new file mode 100644 index 00000000000..00011591a96 --- /dev/null +++ b/var/spack/repos/builtin/packages/gmt/regexp.patch @@ -0,0 +1,11 @@ +--- a/src/gmt_regexp.c 2020-07-04 15:13:40.000000000 -0500 ++++ b/src/gmt_regexp.c 2020-07-05 18:35:02.000000000 -0500 +@@ -217,7 +217,7 @@ + /* this is when errors have been encountered */ + regerror(status, &re, err_msg, MAX_ERR_LENGTH); + GMT_Report (GMT->parent, GMT_MSG_ERROR, "gmtlib_regexp_match: POSIX ERE matching error: %s\n", err_msg); /* Report error. */ +- return (-GMT_RUNTIME_ERROR;) ++ return (-GMT_RUNTIME_ERROR); + } + return (0); /* No match */ + From 29fc94e29e8af78736cf3db659f9080853c7d0a4 Mon Sep 17 00:00:00 2001 From: fcannini Date: Mon, 6 Jul 2020 04:07:26 -0300 Subject: [PATCH 047/149] psi4: fix "filter_compilers" signature (#17375) --- var/spack/repos/builtin/packages/psi4/package.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/psi4/package.py b/var/spack/repos/builtin/packages/psi4/package.py index 64cb85a5ee5..bc2e6db0113 100644 --- a/var/spack/repos/builtin/packages/psi4/package.py +++ b/var/spack/repos/builtin/packages/psi4/package.py @@ -51,7 +51,7 @@ def cmake_args(self): ] @run_after('install') - def filter_compilers(self, spec, prefix): + def filter_compilers(self): """Run after install to tell the configuration files to use the compilers that Spack built the package with. @@ -59,6 +59,9 @@ def filter_compilers(self, spec, prefix): Spack's generic cxx. We want it to be bound to whatever compiler it was built with.""" + spec = self.spec + prefix = spec.prefix + kwargs = {'ignore_absent': True, 'backup': False, 'string': True} cc_files = ['bin/psi4-config'] From b3bc538df649c5b6bfaba697b70cf874da454c26 Mon Sep 17 00:00:00 2001 From: TZ Date: Mon, 6 Jul 2020 11:40:11 +0200 Subject: [PATCH 048/149] esmf: set ESMF_COMM=intelmpi also for ^intel-mpi (#17387) Not only intel-parallel-studio+mpi provides Intel MPI but also intel-mpi. --- var/spack/repos/builtin/packages/esmf/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/esmf/package.py b/var/spack/repos/builtin/packages/esmf/package.py index b533851228f..3055b4446e4 100644 --- a/var/spack/repos/builtin/packages/esmf/package.py +++ b/var/spack/repos/builtin/packages/esmf/package.py @@ -169,7 +169,7 @@ def edit(self, spec, prefix): os.environ['ESMF_CXXLINKLIBS'] = '-lmpifort' elif '^openmpi' in spec: os.environ['ESMF_COMM'] = 'openmpi' - elif '^intel-parallel-studio+mpi' in spec: + elif '^intel-parallel-studio+mpi' in spec or '^intel-mpi' in spec: os.environ['ESMF_COMM'] = 'intelmpi' else: # Force use of the single-processor MPI-bypass library. From e62ddcb5823133ce20ff6c00084f71b3bde28992 Mon Sep 17 00:00:00 2001 From: iarspider Date: Mon, 6 Jul 2020 17:51:36 +0200 Subject: [PATCH 049/149] Add Rivet and YODA (#17372) * Add Rivet and YODA * Add patches * Flake-8 * Set level for Rivet patches * Syntax fix * Fix dependencies of Rivet * Update var/spack/repos/builtin/packages/rivet/package.py Co-authored-by: Adam J. Stewart Co-authored-by: Adam J. Stewart --- .../repos/builtin/packages/rivet/package.py | 123 ++++++++++++++++++ .../builtin/packages/rivet/rivet-1.8.2.patch | 44 +++++++ .../builtin/packages/rivet/rivet-1.9.0.patch | 30 +++++ .../builtin/packages/rivet/rivet-2.2.0.patch | 11 ++ .../builtin/packages/rivet/rivet-2.2.1.patch | 11 ++ .../builtin/packages/rivet/rivet-2.4.0.patch | 12 ++ .../builtin/packages/rivet/rivet-2.4.2.patch | 39 ++++++ .../builtin/packages/rivet/rivet-2.4.3.patch | 39 ++++++ .../builtin/packages/rivet/rivet-2.5.1.patch | 39 ++++++ .../builtin/packages/rivet/rivet-2.5.2.patch | 10 ++ .../builtin/packages/rivet/rivet-2.5.3.patch | 43 ++++++ .../builtin/packages/rivet/rivet-2.5.4.patch | 42 ++++++ .../builtin/packages/rivet/rivet-2.6.0.patch | 90 +++++++++++++ .../builtin/packages/rivet/rivet-2.6.1.patch | 24 ++++ .../builtin/packages/rivet/rivet-2.6.2.patch | 97 ++++++++++++++ .../builtin/packages/rivet/rivet-2.7.0.patch | 97 ++++++++++++++ .../builtin/packages/rivet/rivet-3.0.0.patch | 70 ++++++++++ .../builtin/packages/rivet/rivet-3.0.1.patch | 11 ++ .../builtin/packages/rivet/rivet-3.1.0.patch | 11 ++ .../builtin/packages/rivet/rivet-3.1.1.patch | 11 ++ .../repos/builtin/packages/yoda/package.py | 84 ++++++++++++ .../builtin/packages/yoda/yoda-1.5.5.patch | 50 +++++++ .../builtin/packages/yoda/yoda-1.5.9.patch | 50 +++++++ .../builtin/packages/yoda/yoda-1.6.1.patch | 72 ++++++++++ .../builtin/packages/yoda/yoda-1.6.2.patch | 22 ++++ .../builtin/packages/yoda/yoda-1.6.3.patch | 50 +++++++ .../builtin/packages/yoda/yoda-1.6.4.patch | 11 ++ .../builtin/packages/yoda/yoda-1.6.5.patch | 23 ++++ .../builtin/packages/yoda/yoda-1.6.6.patch | 11 ++ .../builtin/packages/yoda/yoda-1.6.7.patch | 11 ++ 30 files changed, 1238 insertions(+) create mode 100644 var/spack/repos/builtin/packages/rivet/package.py create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-1.8.2.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-1.9.0.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.2.0.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.2.1.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.4.0.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.4.2.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.4.3.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.5.1.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.5.2.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.5.3.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.5.4.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.6.0.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.6.1.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.6.2.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-2.7.0.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-3.0.0.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-3.0.1.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-3.1.0.patch create mode 100644 var/spack/repos/builtin/packages/rivet/rivet-3.1.1.patch create mode 100644 var/spack/repos/builtin/packages/yoda/package.py create mode 100644 var/spack/repos/builtin/packages/yoda/yoda-1.5.5.patch create mode 100644 var/spack/repos/builtin/packages/yoda/yoda-1.5.9.patch create mode 100644 var/spack/repos/builtin/packages/yoda/yoda-1.6.1.patch create mode 100644 var/spack/repos/builtin/packages/yoda/yoda-1.6.2.patch create mode 100644 var/spack/repos/builtin/packages/yoda/yoda-1.6.3.patch create mode 100644 var/spack/repos/builtin/packages/yoda/yoda-1.6.4.patch create mode 100644 var/spack/repos/builtin/packages/yoda/yoda-1.6.5.patch create mode 100644 var/spack/repos/builtin/packages/yoda/yoda-1.6.6.patch create mode 100644 var/spack/repos/builtin/packages/yoda/yoda-1.6.7.patch diff --git a/var/spack/repos/builtin/packages/rivet/package.py b/var/spack/repos/builtin/packages/rivet/package.py new file mode 100644 index 00000000000..8baf2c42ec4 --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/package.py @@ -0,0 +1,123 @@ +# 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 Rivet(AutotoolsPackage): + """Rivet - the particle-physics MC analysis toolkit""" + + homepage = "https://rivet.hepforge.org/" + url = "https://rivet.hepforge.org/downloads/?f=Rivet-3.1.2.tar.bz2" + + version('3.1.2', sha256='c041d09644f4eae7c212d82237033267fbc1583dfbb4e3e67377f86cece9577a') + version('3.1.1', sha256='7c98b26af5f859bc65200499d15765e4b056b4cf233b34176f27a7e6bc4cf9b1') + version('3.1.0', sha256='4e156daee5eb10bd1573ef32d4a6a6df74788cd9180fc977db93ef4cb281000c') + version('3.0.2', sha256='9624d6cdcad77eafde40312cf6a1c97f4263f22faf9244b198c140b2c256d2f3') + version('3.0.1', sha256='e7551168b86a05c9c029c319c313a0aa142a476195e7ff986c896c1b868f89dd') + version('3.0.0', sha256='3944434d3791dccb54f7b2257589df6252cc7c065ce9deb57fbef466ff9e62b1') + version('2.7.2b', sha256='e9f0a709f8226cde54f9406d36efab1e1b8ed0c6574fbcb1d72a186b09188106') + version('2.7.2', sha256='a6634537c005660e56514b70ab9efb9d466c50685d6fb45ed03e9e1988479f02') + version('2.7.1', sha256='b4145d8369b8a9fa0ada7ba2e5a2e9992d8e4a12ca4874d835246d2e708cbdef') + version('2.7.0', sha256='34ad6a0b47dc4736feac8580a275e8b3a46df8fbeefd91e813add0a1525aacaf') + version('2.6.2', sha256='9dde49d5c02038a295f03d2972f85be8746205bdb5ca1eab868b2c9129ade37a') + version('2.6.1', sha256='e490d1f35aafa3e175690ae92f862c07a5fe2c51f693c88c87789f0441c89022') + version('2.6.0', sha256='fb3229dccd31ea40b0af09974253073f6ad0a3a97e9a0cf44b53748ea8e2f900') + version('2.5.4', sha256='772252193698d994fd111f790e72a4024df7572d492e3d5a9e840a074c5527e2') + version('2.5.3', sha256='99e10330564ac479c6637d317c08882889a272db8ee204ad45a6ee1dcb291de4') + version('2.5.2', sha256='70aa27764a14159c94c0b753a0c3d3600ac669def398cb2d8a6c63ae17704f05') + version('2.5.1', sha256='14ee5828de217e96a30e666192515a2083afee030d81d36fc6bea948e9f7810a') + version('2.5.0', sha256='c59ff35715be0caf65d6ba808b3badad0f6f7e7758f2049fb6ba43ed579bd4af') + version('2.4.3', sha256='18aafecab6c3baeac871a9743946433c2dc01825d8fe291b157719a15c342682') + version('2.4.2', sha256='accb146f3082719781a51eec879427c31401577c44f60b27ec8450102fe68aff') + version('2.4.1', sha256='c14f0f58d1792d84d62c62b44ebb94db004776feba83fd8186bba898d55123cf') + version('2.4.0', sha256='5ee2f34a277ed058b8aef750d946b40d4cf781023b9adab03ca95e803a39fb06') + version('2.3.0', sha256='dd07702981d586e4b97b0fa56ae08cd08a631a952322a9b52e7622a46a7741ab') + version('2.2.1', sha256='9e64ba19d567bdf4d0cc42b435491c4363b5fec90170d034445a99a1e752b691') + version('2.2.0', sha256='3bdafe2007ff54c4734e0c8bc6ba9dc97028d4c41d538201b9582a869af8ae1a') + version('2.1.2', sha256='40a20c1ee186326e5bfd906e0bc88f16dc740551be9cc274e9a826873d9c1eed') + version('2.1.1', sha256='eefa936de6f6c34a6bab39899841f3189d7621c8ba227032f0f32e6e20dfcf85') + version('2.1.0', sha256='58a1ca7b5a47719933782c050e67d0eb3823a7384cfc3c434fece41724c307e6') + version('2.0.0', sha256='038f81f92fbba001ed23b56c1229a4f3b41e0c32e00bc92ea58d042909e3855a') + version('1.9.0', sha256='55ef552b351328c287194aa99fa2b797e6632dc3fa88dfccd58264602012e044') + version('1.8.3', sha256='aa82742fd4d7c68bfbef1367c4c605e06f9fed479a753db96aa6659407fcc4fd') + version('1.8.2', sha256='56be98d31693253543f3e657c8f8edc7979c89fdb0ede1bdddfb3a9f5d4cfc3a') + version('1.8.1', sha256='7e06d22350bec30220186e796caa93e9bfebd8d771a7efd35673897248437c61') + version('1.8.0', sha256='7b28f9163f74583b1542b87c48f28a3ad1338da6136d8e3ca0aeba21095f5fe0') + version('1.7.0', sha256='180741f590f210474b686d60241ad59e008221751ead21f0950c59aff93e54fd') + version('1.6.0', sha256='1affd9e779f48477402e4150f315b3179204cbbc920db2d0129cd9c38bd18b26') + version('1.5.1', sha256='9f24e9824286d5b0302c7e440f4803a8e3b8da50e1260e78c3b3c2eb587b317a') + version('1.5.0', sha256='b7fe63e8caacc5c038ab567fe505d275288eedaa1aed6c379057629eef126006') + version('1.4.0', sha256='067c94659bb7859904e20e72a676f94f103e6e012b7dba8071f51e8a6e624dbb') + version('1.3.0', sha256='5ce41c8492c2fcf809a7135bf8335a01a98ea85fb556b3d00bd4260151efd12f') + version('1.2.1', sha256='2d0380b819f778d8d9c2a462af90bd6a6188121e4edcc6202d936130b59bab17') + version('1.2.0', sha256='ff5869f6dc9465f429e54686e12c39becac57a83273542179a59bac7561b6404') + version('1.1.3', sha256='4be3cd9e6f808cdc5511991be2756f5fa838b6ecd01806fdbe7aec0aa382f946') + version('1.1.2', sha256='a15b5d3339481446dec1b719d7d531a87a2e9d11c9fe8044e270ea69611b07c8') + version('1.1.1', sha256='bd87fefee6bb8368216755342dc80ab3f8f3c813732dd03c6f94135d45f7036b') + + depends_on('yoda', type=('build', 'run'), when='@2.0.0:') + depends_on('yoda@1.8.0:', type=('build', 'run'), when='@3.1.0:') + + depends_on('hepmc', type=('build', 'run')) + depends_on('boost', when='@:2.5.0,3:', type=('build', 'run')) + depends_on('fastjet', type=('build', 'run')) + depends_on('gsl', type=('build', 'run'), when='@:2.6.0,2.6.2:') + depends_on('python', type=('build', 'run')) + depends_on('swig', type=('build', 'run')) + depends_on('yaml-cpp', when='@2.0.0:2.1.2', type=('build', 'run')) + + patch('rivet-1.8.2.patch', when='@1.8.2', level=0) + patch('rivet-1.9.0.patch', when='@1.9.0', level=0) + patch('rivet-2.2.0.patch', when='@2.2.0', level=0) + patch('rivet-2.2.1.patch', when='@2.2.1', level=0) + patch('rivet-2.4.0.patch', when='@2.4.0', level=0) + patch('rivet-2.4.2.patch', when='@2.4.2', level=0) + patch('rivet-2.4.3.patch', when='@2.4.3', level=0) + patch('rivet-2.5.1.patch', when='@2.5.1', level=0) + patch('rivet-2.5.2.patch', when='@2.5.2', level=0) + patch('rivet-2.5.3.patch', when='@2.5.3', level=0) + patch('rivet-2.5.4.patch', when='@2.5.4', level=0) + patch('rivet-2.6.0.patch', when='@2.6.0', level=0) + patch('rivet-2.6.1.patch', when='@2.6.1', level=0) + patch('rivet-2.6.2.patch', when='@2.6.2', level=0) + patch('rivet-2.7.0.patch', when='@2.7.0', level=0) + patch('rivet-3.0.0.patch', when='@3.0.0', level=0) + patch('rivet-3.0.1.patch', when='@3.0.1', level=0) + patch('rivet-3.1.0.patch', when='@3.1.0', level=0) + patch('rivet-3.1.1.patch', when='@3.1.1', level=0) + + @run_before('configure') + def copy_gsl_m4(self): + if self.spec.satisfies('@2.6.2:'): + copy('rivet/gsl.m4', 'm4/gsl.m4') + + @property + def force_autoreconf(self): + return self.version >= Version('2.6.2') + + def configure_args(self): + args = [] + args += ['--with-hepmc=' + self.spec['hepmc'].prefix] + + if self.spec.satisfies('@:1.999.999'): + args += ['--with-boost-incpath=' + self.spec['boost'].includes] + else: + if spec.satisfies('@:2.5.0,3:'): + args += ['--with-boost=' + self.spec['boost'].prefix] + + args += ['--with-fastjet=' + self.spec['fastjet'].prefix] + if self.spec.satisfies('@2:'): + args += ['--with-yoda=' + self.spec['yoda'].prefix] + + if self.spec.satisfies('@:2.6.0,2.6.2:'): + args += ['--with-gsl=' + self.spc['gsl'].prefix] + + args += ['--disable-pdfmanual', '--enable-unvalidated'] + + if self.spec.satisfies('@2:'): + args += ['--enable-stdcxx11'] + + return args diff --git a/var/spack/repos/builtin/packages/rivet/rivet-1.8.2.patch b/var/spack/repos/builtin/packages/rivet/rivet-1.8.2.patch new file mode 100644 index 00000000000..95cbe774a0e --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-1.8.2.patch @@ -0,0 +1,44 @@ +--- src/Tools/Makefile.in.orig 2013-05-15 14:02:25.000000000 +0200 ++++ src/Tools/Makefile.in 2013-05-15 14:03:14.000000000 +0200 +@@ -79,7 +79,7 @@ + libRivetTools_la-ParticleIdUtils.lo \ + libRivetTools_la-tinyxml.lo libRivetTools_la-tinyxmlerror.lo \ + libRivetTools_la-tinyxmlparser.lo \ +- libRivetTools_la-BinnedHistogram.lo \ ++# libRivetTools_la-BinnedHistogram.lo \ + libRivetTools_la-mt2_bisect.lo libRivetTools_la-RivetMT2.lo \ + libRivetTools_la-BinnedHistogram.lo + libRivetTools_la_OBJECTS = $(am_libRivetTools_la_OBJECTS) +@@ -371,7 +371,7 @@ + TinyXML/tinyxml.cpp \ + TinyXML/tinyxmlerror.cpp \ + TinyXML/tinyxmlparser.cpp \ +- BinnedHistogram.cc \ ++# BinnedHistogram.cc \ + mt2_bisect.cc \ + RivetMT2.cc \ + BinnedHistogram.cc +--- include/LWH/Axis.h.orig 2013-05-14 18:30:02.000000000 +0200 ++++ include/LWH/Axis.h 2013-05-14 18:31:35.000000000 +0200 + +@@ -115,7 +115,7 @@ + * + */ + int coordToIndex(double coord) const { +- assert( ! isnan(coord) ); ++ assert( ! std::isnan(coord) ); + if ( coord >= upper ) return OVERFLOW_BIN; + else if ( coord < lower ) return UNDERFLOW_BIN; + else return int((coord - lower)/binWidth(0)); + +--- src/Tools/Makefile.am.orig 2013-05-15 13:14:11.000000000 +0200 ++++ src/Tools/Makefile.am 2013-05-15 13:16:53.000000000 +0200 +@@ -14,7 +14,7 @@ + TinyXML/tinyxml.cpp \ + TinyXML/tinyxmlerror.cpp \ + TinyXML/tinyxmlparser.cpp \ +- BinnedHistogram.cc \ ++# BinnedHistogram.cc \ + mt2_bisect.cc \ + RivetMT2.cc \ + BinnedHistogram.cc diff --git a/var/spack/repos/builtin/packages/rivet/rivet-1.9.0.patch b/var/spack/repos/builtin/packages/rivet/rivet-1.9.0.patch new file mode 100644 index 00000000000..9d274550b7e --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-1.9.0.patch @@ -0,0 +1,30 @@ +--- bin/rivet-buildplugin.in.orig 2014-09-02 11:22:32.000000000 +0200 ++++ bin/rivet-buildplugin.in 2014-09-02 11:26:31.000000000 +0200 +@@ -62,6 +62,7 @@ + mycppflags="" + prefix="@prefix@" + irivet="@includedir@" ++exec_prefix=@exec_prefix@ + test -n "$irivet" && mycppflags="$mycppflags -I${irivet}" + ihepmc="@HEPMCINCPATH@" + test -n "$ihepmc" && mycppflags="$mycppflags -I${ihepmc}" +@@ -74,7 +75,7 @@ + + ## Get Rivet system linker flags (duplicating that in rivet-config.in) + myldflags="" +-lrivet="@libdir@" ++lrivet="${exec_prefix}/lib" + test -n "$lrivet" && myldflags="$myldflags -L${lrivet}" + lhepmc="@HEPMCLIBPATH@" + test -n "$lhepmc" && myldflags="$myldflags -L${lhepmc}" +--- bin/rivet-findid 2015-06-23 09:15:28.000000001 +0200 ++++ bin/rivet-findid 2015-06-23 09:15:38.000000001 +0200 +@@ -170,7 +170,7 @@ + if k=='code': + entries[v] = c.text + if entries.get('9') == 'SPIRESTeX': +- result['bibtex'] = entries['z'] ++ result['bibtex'] = entries['a'] + + if i.get('tag') == '037': + entries = {} diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.2.0.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.2.0.patch new file mode 100644 index 00000000000..ac9268a2522 --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.2.0.patch @@ -0,0 +1,11 @@ +--- bin/rivet-findid 2015-06-23 09:39:49.000000001 +0200 ++++ bin/rivet-findid 2015-06-23 09:40:09.000000001 +0200 +@@ -160,7 +160,7 @@ + if k=='code': + entries[v] = c.text + if entries.get('9') == 'SPIRESTeX': +- result['bibtex'] = entries['z'] ++ result['bibtex'] = entries['a'] + + if i.get('tag') == '037': + entries = {} diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.2.1.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.2.1.patch new file mode 100644 index 00000000000..a9fceb92c0f --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.2.1.patch @@ -0,0 +1,11 @@ +--- bin/rivet-findid 2015-06-23 09:40:38.000000001 +0200 ++++ bin/rivet-findid 2015-06-23 09:40:45.000000001 +0200 +@@ -160,7 +160,7 @@ + if k=='code': + entries[v] = c.text + if entries.get('9') == 'SPIRESTeX': +- result['bibtex'] = entries['z'] ++ result['bibtex'] = entries['a'] + + if i.get('tag') == '037': + entries = {} diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.4.0.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.4.0.patch new file mode 100644 index 00000000000..7ce4f1dd55d --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.4.0.patch @@ -0,0 +1,12 @@ +--- configure 2015-10-07 12:35:57.000000000 +0300 ++++ configure 2015-10-09 16:18:02.432562522 +0300 +@@ -18728,7 +18728,7 @@ + ## Boost utility library + echo "$as_me: this is boost.m4 serial 24" >&5 + boost_save_IFS=$IFS +-boost_version_req=1.55.0 ++boost_version_req=1.53.0 + IFS=. + set x $boost_version_req 0 0 0 + IFS=$boost_save_IFS + diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.4.2.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.4.2.patch new file mode 100644 index 00000000000..98436c5acfb --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.4.2.patch @@ -0,0 +1,39 @@ +--- configure.orig 2016-09-30 14:12:42.317369715 +0200 ++++ configure 2016-09-30 14:17:21.690229397 +0200 +@@ -19644,11 +19644,15 @@ + cat >conftest.py <<_ACEOF + + import sys, string ++# Python 2 and 3 compatible ++from future.builtins import map ++# Python 2 and 3: forward-compatible ++from future.builtins import range + # split strings by '.' and convert to numeric. Append some zeros + # because we need at least 4 digits for the hex conversion. +-minver = map(int, string.split('2.5', '.')) + [0, 0, 0] ++minver = list(map(int, '2.5'.split('.'))) + [0, 0, 0] + minverhex = 0 +-for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i] ++for i in range(0, 4): minverhex = (minverhex << 8) + minver[i] + if sys.hexversion >= minverhex: + sys.exit( 0 ) + else: +@@ -19676,15 +19680,15 @@ + fi + + +- PYTHON_VERSION=`$PYTHON -c "import sys; print '.'.join(map(str, sys.version_info[:2]));"` ++ PYTHON_VERSION=`$PYTHON -c "from __future__ import print_function; import sys; print('.'.join(map(str, sys.version_info[:2])));"` + +- RIVET_PYTHONPATH=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True);"` ++ RIVET_PYTHONPATH=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True));"` + + ## Test for Python header + if test -x "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5 + $as_echo_n "checking for Python include path... " >&6; } +- python_incpath=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc();"` ++ python_incpath=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_inc());"` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_incpath" >&5 + $as_echo "$python_incpath" >&6; } + python_header="$python_incpath/Python.h" diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.4.3.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.4.3.patch new file mode 100644 index 00000000000..9d006df8c0c --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.4.3.patch @@ -0,0 +1,39 @@ +--- configure.orig 2016-06-28 23:57:35.000000000 +0200 ++++ configure 2016-09-19 12:44:23.411192406 +0200 +@@ -19643,11 +19643,15 @@ + cat >conftest.py <<_ACEOF + + import sys, string ++# Python 2 and 3 compatible ++from future.builtins import map ++# Python 2 and 3: forward-compatible ++from future.builtins import range + # split strings by '.' and convert to numeric. Append some zeros + # because we need at least 4 digits for the hex conversion. +-minver = map(int, string.split('2.5', '.')) + [0, 0, 0] ++minver = list(map(int, '2.5'.split('.'))) + [0, 0, 0] + minverhex = 0 +-for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i] ++for i in range(0, 4): minverhex = (minverhex << 8) + minver[i] + if sys.hexversion >= minverhex: + sys.exit( 0 ) + else: +@@ -19675,15 +19679,15 @@ + fi + + +- PYTHON_VERSION=`$PYTHON -c "import sys; print '.'.join(map(str, sys.version_info[:2]));"` ++ PYTHON_VERSION=`$PYTHON -c "from __future__ import print_function; import sys; print('.'.join(map(str, sys.version_info[:2])));"` + +- RIVET_PYTHONPATH=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True);"` ++ RIVET_PYTHONPATH=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True));"` + + ## Test for Python header + if test -x "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5 + $as_echo_n "checking for Python include path... " >&6; } +- python_incpath=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc();"` ++python_incpath=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_inc());"` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_incpath" >&5 + $as_echo "$python_incpath" >&6; } + python_header="$python_incpath/Python.h" diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.5.1.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.5.1.patch new file mode 100644 index 00000000000..dc5f484203a --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.5.1.patch @@ -0,0 +1,39 @@ +--- configure.orig 2016-09-30 09:25:10.000000000 +0200 ++++ configure 2016-09-30 09:27:01.000000000 +0200 +@@ -19681,11 +19681,15 @@ + cat >conftest.py <<_ACEOF + + import sys, string ++# Python 2 and 3 compatible ++from future.builtins import map ++# Python 2 and 3: forward-compatible ++from future.builtins import range + # split strings by '.' and convert to numeric. Append some zeros + # because we need at least 4 digits for the hex conversion. +-minver = map(int, string.split('2.5', '.')) + [0, 0, 0] ++minver = list(map(int, '2.5'.split('.'))) + [0, 0, 0] + minverhex = 0 +-for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i] ++for i in range(0, 4): minverhex = (minverhex << 8) + minver[i] + if sys.hexversion >= minverhex: + sys.exit( 0 ) + else: +@@ -19713,15 +19717,15 @@ + fi + + +- PYTHON_VERSION=`$PYTHON -c "import sys; print '.'.join(map(str, sys.version_info[:2]));"` ++ PYTHON_VERSION=`$PYTHON -c "from __future__ import print_function; import sys; print('.'.join(map(str, sys.version_info[:2])));"` + +- RIVET_PYTHONPATH=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True);"` ++ RIVET_PYTHONPATH=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True));"` + + ## Test for Python header + if test -x "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5 + $as_echo_n "checking for Python include path... " >&6; } +- python_incpath=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc();"` ++python_incpath=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_inc());"` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_incpath" >&5 + $as_echo "$python_incpath" >&6; } + python_header="$python_incpath/Python.h" diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.5.2.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.5.2.patch new file mode 100644 index 00000000000..9f536d37511 --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.5.2.patch @@ -0,0 +1,10 @@ +--- ./include/Rivet/Tools/RivetSTL.hh.orig 2017-08-03 11:49:33.005431033 +0200 ++++ ./include/Rivet/Tools/RivetSTL.hh 2017-08-03 11:50:13.817841608 +0200 +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + + #ifndef foreach diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.5.3.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.5.3.patch new file mode 100644 index 00000000000..bebf5c73ab0 --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.5.3.patch @@ -0,0 +1,43 @@ +--- include/Rivet/Config/RivetCommon.hh.orig 2017-05-31 12:32:04.547062840 +0200 ++++ include/Rivet/Config/RivetCommon.hh 2017-05-31 12:32:12.379054886 +0200 +@@ -2,6 +2,7 @@ + #define RIVET_RivetCommon_HH + + // Convenience build-setup header for Rivet internal use ++#include + + // Automatic build info from autoconf + #include "Rivet/Config/RivetConfig.hh" +--- include/Rivet/Run.hh.orig 2017-05-31 12:36:00.225823486 +0200 ++++ include/Rivet/Run.hh 2017-05-31 12:36:18.653804770 +0200 +@@ -4,6 +4,7 @@ + + #include "Rivet/Tools/RivetSTL.hh" + #include "Rivet/Tools/RivetHepMC.hh" ++#include + + namespace Rivet { + +--- include/Rivet/Particle.hh.orig 2017-05-31 12:39:14.273626411 +0200 ++++ include/Rivet/Particle.hh 2017-05-31 14:00:02.387272379 +0200 +@@ -11,6 +11,8 @@ + // NOTE: Rivet/Tools/ParticleUtils.hh included at the end + #include "fastjet/PseudoJet.hh" + ++#include ++ + namespace Rivet { + + +--- include/Rivet/Tools/RivetSTL.hh.orig 2017-05-31 14:05:28.368975178 +0200 ++++ include/Rivet/Tools/RivetSTL.hh 2017-05-31 14:05:44.432960512 +0200 +@@ -1,6 +1,8 @@ + #ifndef RIVET_RivetSTL_HH + #define RIVET_RivetSTL_HH + ++#include ++ + #include + #include + #include + diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.5.4.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.5.4.patch new file mode 100644 index 00000000000..af338da6d5f --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.5.4.patch @@ -0,0 +1,42 @@ +patch written by GENSER to avoid system libraries of GLS coming from fastjet-config +--- include/Rivet/Tools/JetUtils.hh ++++ include/Rivet/Tools/JetUtils.hh +@@ -47,4 +47,5 @@ + struct BoolJetFunctor { + virtual bool operator()(const Jet& p) const = 0; ++ virtual ~BoolJetFunctor() {} + }; + +--- include/Rivet/Tools/ParticleBaseUtils.hh ++++ include/Rivet/Tools/ParticleBaseUtils.hh +@@ -23,4 +23,5 @@ + struct BoolParticleBaseFunctor { + virtual bool operator()(const ParticleBase& p) const = 0; ++ virtual ~BoolParticleBaseFunctor() {} + }; + +@@ -397,4 +398,5 @@ + struct DoubleParticleBaseFunctor { + virtual double operator()(const ParticleBase& p) const = 0; ++ virtual ~DoubleParticleBaseFunctor() {} + }; + +--- include/Rivet/Tools/ParticleUtils.hh ++++ include/Rivet/Tools/ParticleUtils.hh +@@ -486,4 +486,5 @@ + struct BoolParticleFunctor { + virtual bool operator()(const Particle& p) const = 0; ++ virtual ~BoolParticleFunctor() {} + }; + +--- src/Makefile.in.orig 2018-01-30 13:52:58.641670247 +0100 ++++ src/Makefile.in 2018-01-30 13:53:19.377586118 +0100 +@@ -449,7 +449,7 @@ + libRivet_la_SOURCES = + libRivet_la_LDFLAGS = -export-dynamic -avoid-version -L$(YODALIBPATH) -L$(HEPMCLIBPATH) + libRivet_la_LIBADD = Core/libRivetCore.la Projections/libRivetProjections.la Tools/libRivetTools.la $(ANA_LIBADD) \ +- -lYODA -lHepMC -ldl -lm $(FASTJETCONFIGLIBADD) $(GSL_LDFLAGS) ++ -lYODA -lHepMC -ldl -lm $(GSL_LDFLAGS) $(FASTJETCONFIGLIBADD) + + all: all-recursive + diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.6.0.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.6.0.patch new file mode 100644 index 00000000000..2cb7cab14b5 --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.6.0.patch @@ -0,0 +1,90 @@ +--- include/Rivet/Tools/JetUtils.hh ++++ include/Rivet/Tools/JetUtils.hh +@@ -47,4 +47,5 @@ + struct BoolJetFunctor { + virtual bool operator()(const Jet& p) const = 0; ++ virtual ~BoolJetFunctor() {} + }; + +--- include/Rivet/Tools/ParticleBaseUtils.hh ++++ include/Rivet/Tools/ParticleBaseUtils.hh +@@ -23,4 +23,5 @@ + struct BoolParticleBaseFunctor { + virtual bool operator()(const ParticleBase& p) const = 0; ++ virtual ~BoolParticleBaseFunctor() {} + }; + +@@ -397,4 +398,5 @@ + struct DoubleParticleBaseFunctor { + virtual double operator()(const ParticleBase& p) const = 0; ++ virtual ~DoubleParticleBaseFunctor() {} + }; + +--- include/Rivet/Tools/ParticleUtils.hh ++++ include/Rivet/Tools/ParticleUtils.hh +@@ -486,4 +486,5 @@ + struct BoolParticleFunctor { + virtual bool operator()(const Particle& p) const = 0; ++ virtual ~BoolParticleFunctor() {} + }; + +--- analyses/Makefile.in.orig 2018-06-28 09:22:46.722022129 +0200 ++++ analyses/Makefile.in 2018-06-28 10:11:59.772373529 +0200 +@@ -523,21 +523,21 @@ + @ENABLE_ANALYSES_TRUE@%.so: + @ENABLE_ANALYSES_TRUE@ @+echo && RIVET_BUILDPLUGIN_BEFORE_INSTALL=1 bash $(top_builddir)/bin/rivet-buildplugin -j2 $@ $^ -I$(top_builddir)/include + +-@ENABLE_ANALYSES_TRUE@RivetALICEAnalyses.so: $(shell ls $(srcdir)/pluginALICE/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetATLASAnalyses.so: $(shell ls $(srcdir)/pluginATLAS/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetCDFAnalyses.so : $(shell ls $(srcdir)/pluginCDF/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetCMSAnalyses.so : $(shell ls $(srcdir)/pluginCMS/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetD0Analyses.so : $(shell ls $(srcdir)/pluginD0/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetHERAAnalyses.so : $(shell ls $(srcdir)/pluginHERA/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetLEPAnalyses.so : $(shell ls $(srcdir)/pluginLEP/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetLHCbAnalyses.so : $(shell ls $(srcdir)/pluginLHCb/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetLHCfAnalyses.so : $(shell ls $(srcdir)/pluginLHCf/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetMCAnalyses.so : $(shell ls $(srcdir)/pluginMC/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetMiscAnalyses.so : $(shell ls $(srcdir)/pluginMisc/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetPetraAnalyses.so: $(shell ls $(srcdir)/pluginPetra/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetRHICAnalyses.so : $(shell ls $(srcdir)/pluginRHIC/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetSPSAnalyses.so : $(shell ls $(srcdir)/pluginSPS/*.cc) +-@ENABLE_ANALYSES_TRUE@RivetTOTEMAnalyses.so: $(shell ls $(srcdir)/pluginTOTEM/*.cc) ++@ENABLE_ANALYSES_TRUE@RivetALICEAnalyses.so: $(shell find $(srcdir)/pluginALICE/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetATLASAnalyses.so: $(shell find $(srcdir)/pluginATLAS/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetCDFAnalyses.so : $(shell find $(srcdir)/pluginCDF/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetCMSAnalyses.so : $(shell find $(srcdir)/pluginCMS/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetD0Analyses.so : $(shell find $(srcdir)/pluginD0/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetHERAAnalyses.so : $(shell find $(srcdir)/pluginHERA/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetLEPAnalyses.so : $(shell find $(srcdir)/pluginLEP/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetLHCbAnalyses.so : $(shell find $(srcdir)/pluginLHCb/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetLHCfAnalyses.so : $(shell find $(srcdir)/pluginLHCf/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetMCAnalyses.so : $(shell find $(srcdir)/pluginMC/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetMiscAnalyses.so : $(shell find $(srcdir)/pluginMisc/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetPetraAnalyses.so: $(shell find $(srcdir)/pluginPetra/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetRHICAnalyses.so : $(shell find $(srcdir)/pluginRHIC/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetSPSAnalyses.so : $(shell find $(srcdir)/pluginSPS/ -name '*.cc' -not -name 'tmp*') ++@ENABLE_ANALYSES_TRUE@RivetTOTEMAnalyses.so: $(shell find $(srcdir)/pluginTOTEM/ -name '*.cc' -not -name 'tmp*') + + @ENABLE_ANALYSES_TRUE@all-local: $(PLUGIN_LIBS) $(PLUGIN_DATAFILES) + @ENABLE_ANALYSES_TRUE@ mkdir -p $(builddir)/data +--- analyses/pluginATLAS/ATLAS_2016_CONF_2016_037.cc.orig 2018-07-02 10:43:08.656094368 +0200 ++++ analyses/pluginATLAS/ATLAS_2016_CONF_2016_037.cc 2018-07-02 10:44:04.920361160 +0200 +@@ -2,6 +2,7 @@ + #include "Rivet/Analysis.hh" + #include "Rivet/Projections/FinalState.hh" + #include "Rivet/Projections/PromptFinalState.hh" ++#include "Rivet/Projections/ChargedFinalState.hh" + #include "Rivet/Projections/FastJets.hh" + #include "Rivet/Projections/Sphericity.hh" + #include "Rivet/Projections/SmearedParticles.hh" +--- include/Rivet/AnalysisHandler.hh.orig 2018-07-10 10:39:21.719532209 +0200 ++++ include/Rivet/AnalysisHandler.hh 2018-07-10 10:39:29.225608530 +0200 +@@ -17,7 +17,7 @@ + + // Needed to make smart pointers compare equivalent in the STL set + struct CmpAnaHandle { +- bool operator() (const AnaHandle& a, const AnaHandle& b) { ++ bool operator() (const AnaHandle& a, const AnaHandle& b) const { + return a.get() < b.get(); + } + }; diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.6.1.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.6.1.patch new file mode 100644 index 00000000000..878e72d7393 --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.6.1.patch @@ -0,0 +1,24 @@ +--- doc/Makefile.in.orig 2018-10-17 18:29:15.568630034 +0200 ++++ doc/Makefile.in 2018-10-17 18:31:45.829375147 +0200 +@@ -594,15 +594,15 @@ + .PRECIOUS: Makefile + + @ENABLE_PYEXT_TRUE@analyses.html: $(top_srcdir)/analyses $(srcdir)/mk-analysis-html +-@ENABLE_PYEXT_TRUE@ LD_LIBRARY_PATH=$(top_builddir)/src/.libs:$(LD_LIBRARY_PATH) \ +-@ENABLE_PYEXT_TRUE@ DYLD_LIBRARY_PATH=$(top_builddir)/src/.libs:$(DYLD_LIBRARY_PATH) \ ++@ENABLE_PYEXT_TRUE@ LD_LIBRARY_PATH=$(top_builddir)/src/.libs:$(HEPMCLIBPATH):$(FASTJETLIBPATH):$(YODALIBPATH):$(RIVETLIBPATH):$(LD_LIBRARY_PATH) \ ++@ENABLE_PYEXT_TRUE@ DYLD_LIBRARY_PATH=$(top_builddir)/src/.libs:$(HEPMCLIBPATH):$(FASTJETLIBPATH):$(YODALIBPATH):$(RIVETLIBPATH):$(DYLD_LIBRARY_PATH) \ + @ENABLE_PYEXT_TRUE@ PYTHONPATH=$(YODA_PYTHONPATH):$(RIVET_PYTHONPATH):$(PYTHONPATH) \ +-@ENABLE_PYEXT_TRUE@ $(srcdir)/mk-analysis-html ++@ENABLE_PYEXT_TRUE@ $(PYTHON) $(srcdir)/mk-analysis-html + @ENABLE_PYEXT_TRUE@analyses.json: $(top_srcdir)/analyses $(srcdir)/mk-analysis-json +-@ENABLE_PYEXT_TRUE@ LD_LIBRARY_PATH=$(top_builddir)/src/.libs:$(LD_LIBRARY_PATH) \ +-@ENABLE_PYEXT_TRUE@ DYLD_LIBRARY_PATH=$(top_builddir)/src/.libs:$(DYLD_LIBRARY_PATH) \ ++@ENABLE_PYEXT_TRUE@ LD_LIBRARY_PATH=$(top_builddir)/src/.libs:$(HEPMCLIBPATH):$(FASTJETLIBPATH):$(YODALIBPATH):$(RIVETLIBPATH):$(LD_LIBRARY_PATH) \ ++@ENABLE_PYEXT_TRUE@ DYLD_LIBRARY_PATH=$(top_builddir)/src/.libs:$(HEPMCLIBPATH):$(FASTJETLIBPATH):$(YODALIBPATH):$(RIVETLIBPATH):$(DYLD_LIBRARY_PATH) \ + @ENABLE_PYEXT_TRUE@ PYTHONPATH=$(YODA_PYTHONPATH):$(RIVET_PYTHONPATH):$(PYTHONPATH) \ +-@ENABLE_PYEXT_TRUE@ $(srcdir)/mk-analysis-json ++@ENABLE_PYEXT_TRUE@ $(PYTHON) $(srcdir)/mk-analysis-json + + @WITH_ASCIIDOC_TRUE@compare-histos.html: compare-histos.txt + @WITH_ASCIIDOC_TRUE@ asciidoc -a toc compare-histos.txt diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.6.2.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.6.2.patch new file mode 100644 index 00000000000..a327f481d49 --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.6.2.patch @@ -0,0 +1,97 @@ +--- configure.ac.orig 2019-01-23 11:02:06.206570992 +0100 ++++ configure.ac 2019-01-23 11:02:26.704761899 +0100 +@@ -151,12 +151,12 @@ + + + # ## GNU Scientific Library +-# AC_SEARCH_GSL +-# AC_CEDAR_HEADERS([gsl], , , [AC_MSG_ERROR([GSL (GNU Scientific Library) is required])]) +-# oldCPPFLAGS=$CPPFLAGS +-# CPPFLAGS="$CPPFLAGS -I$GSLINCPATH" +-# AC_CHECK_HEADER([gsl/gsl_vector.h], [], [AC_MSG_ERROR([GSL vectors not found.])]) +-# CPPFLAGS=$oldCPPFLAGS ++AC_SEARCH_GSL ++AC_CEDAR_HEADERS([gsl], , , [AC_MSG_ERROR([GSL (GNU Scientific Library) is required])]) ++oldCPPFLAGS=$CPPFLAGS ++CPPFLAGS="$CPPFLAGS -I$GSLINCPATH" ++AC_CHECK_HEADER([gsl/gsl_vector.h], [], [AC_MSG_ERROR([GSL vectors not found.])]) ++CPPFLAGS=$oldCPPFLAGS + + + ## Disable build/install of standard analyses +@@ -256,7 +256,7 @@ + ## Set default build flags + AM_CPPFLAGS="-I\$(top_srcdir)/include -I\$(top_builddir)/include" + #AM_CPPFLAGS="$AM_CPPFLAGS -I\$(top_srcdir)/include/eigen3" +-#AM_CPPFLAGS="$AM_CPPFLAGS \$(GSL_CPPFLAGS)" ++AM_CPPFLAGS="$AM_CPPFLAGS \$(GSL_CPPFLAGS)" + dnl AM_CPPFLAGS="$AM_CPPFLAGS \$(BOOST_CPPFLAGS)" + AM_CPPFLAGS="$AM_CPPFLAGS -I\$(YODAINCPATH)" + AM_CPPFLAGS="$AM_CPPFLAGS -I\$(HEPMCINCPATH)" +--- bin/rivet-config.in.orig 2019-01-23 11:08:04.608907832 +0100 ++++ bin/rivet-config.in 2019-01-23 11:08:25.058098155 +0100 +@@ -82,8 +82,8 @@ + test -n "$iyoda" && OUT="$OUT -I${iyoda}" + ifastjet="@FASTJETINCPATH@" + test -n "$ifastjet" && OUT="$OUT -I${ifastjet}" +- # igsl="@GSLINCPATH@" +- # test -n "$igsl" && OUT="$OUT -I${igsl}" ++ igsl="@GSLINCPATH@" ++ test -n "$igsl" && OUT="$OUT -I${igsl}" + # iboost="@BOOST_CPPFLAGS@" + # test -n "$iboost" && OUT="$OUT ${iboost}" + fi +@@ -98,8 +98,8 @@ + test -n "$lyoda" && OUT="$OUT -L${lyoda} -lYODA" + lfastjet="@FASTJETCONFIGLIBADD@" + test -n "$lfastjet" && OUT="$OUT ${lfastjet}" +- # lgsl="@GSLLIBPATH@" +- # test -n "$lgsl" && OUT="$OUT -L${lgsl}" ++ lgsl="@GSLLIBPATH@" ++ test -n "$lgsl" && OUT="$OUT -L${lgsl}" + fi + + tmp=$( echo "$*" | egrep -- '--\|--\') +--- bin/rivet-buildplugin.in.orig 2019-01-23 11:10:07.804054317 +0100 ++++ bin/rivet-buildplugin.in 2019-01-23 11:10:34.370301517 +0100 +@@ -169,8 +169,8 @@ + test -n "$iyoda" && mycppflags="$mycppflags -I${iyoda}" + ifastjet="@FASTJETINCPATH@" + test -n "$ifastjet" && mycppflags="$mycppflags -I${ifastjet}" +-# igsl="@GSLINCPATH@" +-# test -n "$igsl" && mycppflags="$mycppflags -I${igsl}" ++igsl="@GSLINCPATH@" ++test -n "$igsl" && mycppflags="$mycppflags -I${igsl}" + # iboost="@BOOST_CPPFLAGS@" + # test -n "$iboost" && mycppflags="$mycppflags ${iboost}" + +--- pyext/setup.py.in.orig 2019-01-23 11:12:04.694141901 +0100 ++++ pyext/setup.py.in 2019-01-23 11:12:44.531512512 +0100 +@@ -29,11 +29,11 @@ + + + ## Be careful with extracting the GSL path from the flags string +-# import re +-# re_libdirflag = re.compile(r".*-L\s*(\S+).*") +-# re_match = re_libdirflag.search("@GSL_LDFLAGS@") +-# if re_match: +- # lookupdirs.append( re_match.group(1) ) ++import re ++re_libdirflag = re.compile(r".*-L\s*(\S+).*") ++re_match = re_libdirflag.search("@GSL_LDFLAGS@") ++if re_match: ++ lookupdirs.append( re_match.group(1) ) + + ## A helper function + def ext(name, depends=[], statics=[]): +@@ -47,8 +47,8 @@ + language="c++", + # depends=depends, + include_dirs=[incdir1, incdir2, incdir3, incdir4], +- # extra_compile_args="-I@prefix@/include @PYEXT_CXXFLAGS@ @HEPMCCPPFLAGS@ @FASTJETCPPFLAGS@ @YODACPPFLAGS@ @GSLCPPFLAGS@".split(), +- extra_compile_args="-I@prefix@/include @PYEXT_CXXFLAGS@ @HEPMCCPPFLAGS@ @FASTJETCPPFLAGS@ @YODACPPFLAGS@".split(), ++ extra_compile_args="-I@prefix@/include @PYEXT_CXXFLAGS@ @HEPMCCPPFLAGS@ @FASTJETCPPFLAGS@ @YODACPPFLAGS@ @GSLCPPFLAGS@".split(), ++ # extra_compile_args="-I@prefix@/include @PYEXT_CXXFLAGS@ @HEPMCCPPFLAGS@ @FASTJETCPPFLAGS@ @YODACPPFLAGS@".split(), + extra_link_args=BASE_LINK_ARGS, + library_dirs=lookupdirs, + runtime_library_dirs=lookupdirs[1:], diff --git a/var/spack/repos/builtin/packages/rivet/rivet-2.7.0.patch b/var/spack/repos/builtin/packages/rivet/rivet-2.7.0.patch new file mode 100644 index 00000000000..a327f481d49 --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-2.7.0.patch @@ -0,0 +1,97 @@ +--- configure.ac.orig 2019-01-23 11:02:06.206570992 +0100 ++++ configure.ac 2019-01-23 11:02:26.704761899 +0100 +@@ -151,12 +151,12 @@ + + + # ## GNU Scientific Library +-# AC_SEARCH_GSL +-# AC_CEDAR_HEADERS([gsl], , , [AC_MSG_ERROR([GSL (GNU Scientific Library) is required])]) +-# oldCPPFLAGS=$CPPFLAGS +-# CPPFLAGS="$CPPFLAGS -I$GSLINCPATH" +-# AC_CHECK_HEADER([gsl/gsl_vector.h], [], [AC_MSG_ERROR([GSL vectors not found.])]) +-# CPPFLAGS=$oldCPPFLAGS ++AC_SEARCH_GSL ++AC_CEDAR_HEADERS([gsl], , , [AC_MSG_ERROR([GSL (GNU Scientific Library) is required])]) ++oldCPPFLAGS=$CPPFLAGS ++CPPFLAGS="$CPPFLAGS -I$GSLINCPATH" ++AC_CHECK_HEADER([gsl/gsl_vector.h], [], [AC_MSG_ERROR([GSL vectors not found.])]) ++CPPFLAGS=$oldCPPFLAGS + + + ## Disable build/install of standard analyses +@@ -256,7 +256,7 @@ + ## Set default build flags + AM_CPPFLAGS="-I\$(top_srcdir)/include -I\$(top_builddir)/include" + #AM_CPPFLAGS="$AM_CPPFLAGS -I\$(top_srcdir)/include/eigen3" +-#AM_CPPFLAGS="$AM_CPPFLAGS \$(GSL_CPPFLAGS)" ++AM_CPPFLAGS="$AM_CPPFLAGS \$(GSL_CPPFLAGS)" + dnl AM_CPPFLAGS="$AM_CPPFLAGS \$(BOOST_CPPFLAGS)" + AM_CPPFLAGS="$AM_CPPFLAGS -I\$(YODAINCPATH)" + AM_CPPFLAGS="$AM_CPPFLAGS -I\$(HEPMCINCPATH)" +--- bin/rivet-config.in.orig 2019-01-23 11:08:04.608907832 +0100 ++++ bin/rivet-config.in 2019-01-23 11:08:25.058098155 +0100 +@@ -82,8 +82,8 @@ + test -n "$iyoda" && OUT="$OUT -I${iyoda}" + ifastjet="@FASTJETINCPATH@" + test -n "$ifastjet" && OUT="$OUT -I${ifastjet}" +- # igsl="@GSLINCPATH@" +- # test -n "$igsl" && OUT="$OUT -I${igsl}" ++ igsl="@GSLINCPATH@" ++ test -n "$igsl" && OUT="$OUT -I${igsl}" + # iboost="@BOOST_CPPFLAGS@" + # test -n "$iboost" && OUT="$OUT ${iboost}" + fi +@@ -98,8 +98,8 @@ + test -n "$lyoda" && OUT="$OUT -L${lyoda} -lYODA" + lfastjet="@FASTJETCONFIGLIBADD@" + test -n "$lfastjet" && OUT="$OUT ${lfastjet}" +- # lgsl="@GSLLIBPATH@" +- # test -n "$lgsl" && OUT="$OUT -L${lgsl}" ++ lgsl="@GSLLIBPATH@" ++ test -n "$lgsl" && OUT="$OUT -L${lgsl}" + fi + + tmp=$( echo "$*" | egrep -- '--\|--\') +--- bin/rivet-buildplugin.in.orig 2019-01-23 11:10:07.804054317 +0100 ++++ bin/rivet-buildplugin.in 2019-01-23 11:10:34.370301517 +0100 +@@ -169,8 +169,8 @@ + test -n "$iyoda" && mycppflags="$mycppflags -I${iyoda}" + ifastjet="@FASTJETINCPATH@" + test -n "$ifastjet" && mycppflags="$mycppflags -I${ifastjet}" +-# igsl="@GSLINCPATH@" +-# test -n "$igsl" && mycppflags="$mycppflags -I${igsl}" ++igsl="@GSLINCPATH@" ++test -n "$igsl" && mycppflags="$mycppflags -I${igsl}" + # iboost="@BOOST_CPPFLAGS@" + # test -n "$iboost" && mycppflags="$mycppflags ${iboost}" + +--- pyext/setup.py.in.orig 2019-01-23 11:12:04.694141901 +0100 ++++ pyext/setup.py.in 2019-01-23 11:12:44.531512512 +0100 +@@ -29,11 +29,11 @@ + + + ## Be careful with extracting the GSL path from the flags string +-# import re +-# re_libdirflag = re.compile(r".*-L\s*(\S+).*") +-# re_match = re_libdirflag.search("@GSL_LDFLAGS@") +-# if re_match: +- # lookupdirs.append( re_match.group(1) ) ++import re ++re_libdirflag = re.compile(r".*-L\s*(\S+).*") ++re_match = re_libdirflag.search("@GSL_LDFLAGS@") ++if re_match: ++ lookupdirs.append( re_match.group(1) ) + + ## A helper function + def ext(name, depends=[], statics=[]): +@@ -47,8 +47,8 @@ + language="c++", + # depends=depends, + include_dirs=[incdir1, incdir2, incdir3, incdir4], +- # extra_compile_args="-I@prefix@/include @PYEXT_CXXFLAGS@ @HEPMCCPPFLAGS@ @FASTJETCPPFLAGS@ @YODACPPFLAGS@ @GSLCPPFLAGS@".split(), +- extra_compile_args="-I@prefix@/include @PYEXT_CXXFLAGS@ @HEPMCCPPFLAGS@ @FASTJETCPPFLAGS@ @YODACPPFLAGS@".split(), ++ extra_compile_args="-I@prefix@/include @PYEXT_CXXFLAGS@ @HEPMCCPPFLAGS@ @FASTJETCPPFLAGS@ @YODACPPFLAGS@ @GSLCPPFLAGS@".split(), ++ # extra_compile_args="-I@prefix@/include @PYEXT_CXXFLAGS@ @HEPMCCPPFLAGS@ @FASTJETCPPFLAGS@ @YODACPPFLAGS@".split(), + extra_link_args=BASE_LINK_ARGS, + library_dirs=lookupdirs, + runtime_library_dirs=lookupdirs[1:], diff --git a/var/spack/repos/builtin/packages/rivet/rivet-3.0.0.patch b/var/spack/repos/builtin/packages/rivet/rivet-3.0.0.patch new file mode 100644 index 00000000000..229bfb4acc8 --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-3.0.0.patch @@ -0,0 +1,70 @@ +--- bin/rivet-buildplugin.in.orig Mon Jul 08 15:16:09 2019 +0100 ++++ bin/rivet-buildplugin.in Wed Jul 10 16:15:41 2019 +0100 +@@ -172,4 +172,6 @@ + ifastjet="@FASTJETINCPATH@" + test -n "$ifastjet" && mycppflags="$mycppflags -I${ifastjet}" ++ifjcontrib="@FJCONTRIBCPPFLAGS@" ++test -n "$ifjcontrib" && mycppflags="$mycppflags ${ifjcontrib}" + + ## Get Rivet system linker flags (duplicating that in rivet-config.in) +--- bin/rivet-config.in.orig Mon Jul 08 15:16:09 2019 +0100 ++++ bin/rivet-config.in Wed Jul 10 16:15:41 2019 +0100 +@@ -83,4 +83,6 @@ + ifastjet="@FASTJETINCPATH@" + test -n "$ifastjet" && OUT="$OUT -I${ifastjet}" ++ ifjcontrib="@FJCONTRIBCPPFLAGS@" ++ test -n "$ifjcontrib" && OUT="$OUT ${ifjcontrib}" + fi + +--- configure.ac.orig Mon Jul 08 15:16:09 2019 +0100 ++++ configure.ac Wed Jul 10 16:15:41 2019 +0100 +@@ -197,10 +197,26 @@ + FASTJETLIBADD="$FASTJETLIBADD -lEECambridgePlugin -lJadePlugin" + fi; ++ ++## FastJet contrib (allow paths specified separately from FJ) ++AC_ARG_WITH([fjcontrib], ++ [AC_HELP_STRING(--with-fjcontrib, path to FastJet Contrib @<:@$FASTJETPATH@:>@)], [], []) ++if test -n "$with_fjcontrib"; then ++ AC_MSG_NOTICE([FastJet Contrib base path given: $with_fjcontrib]) ++ FJCONTRIBINCPATH=$with_fjcontrib/include ++ FJCONTRIBLIBPATH=$with_fjcontrib/lib ++ FJCONTRIBCPPFLAGS=-I$FJCONTRIBINCPATH ++ AC_SUBST(FJCONTRIBINCPATH) ++ AC_SUBST(FJCONTRIBLIBPATH) ++ AC_SUBST(FJCONTRIBCPPFLAGS) ++ FASTJETLIBADD="-L$FJCONTRIBLIBPATH $FASTJETLIBADD" ++fi + FASTJETLIBADD="$FASTJETLIBADD -lfastjetcontribfragile -lfastjettools" ++ ++## Test FastJet + Contrib ++## Check for FastJet headers that require the --enable-all(cxx)plugins option + AC_MSG_NOTICE([FastJet LIBADD = $FASTJETLIBADD]) + AC_SUBST(FASTJETLIBADD) +-# Check for FastJet headers that require the --enable-all(cxx)plugins option + oldCPPFLAGS=$CPPFLAGS +-CPPFLAGS="$CPPFLAGS -I$FASTJETINCPATH" ++CPPFLAGS="$CPPFLAGS $FASTJETCPPFLAGS $FJCONTRIBCPPFLAGS" + oldLIBS=$LIBS + LIBS="$LIBS $FASTJETLIBADD" +@@ -339,5 +355,4 @@ + #AM_CPPFLAGS="$AM_CPPFLAGS -I\$(top_srcdir)/include/eigen3" + #AM_CPPFLAGS="$AM_CPPFLAGS \$(GSL_CPPFLAGS)" +-dnl AM_CPPFLAGS="$AM_CPPFLAGS \$(BOOST_CPPFLAGS)" + AM_CPPFLAGS="$AM_CPPFLAGS -I\$(YODAINCPATH)" + if test x$use_hepmc2 = xyes ; then +@@ -346,5 +361,5 @@ + AM_CPPFLAGS="$AM_CPPFLAGS -I\$(HEPMC3INCPATH)" + fi +-AM_CPPFLAGS="$AM_CPPFLAGS -I\$(FASTJETINCPATH)" ++AM_CPPFLAGS="$AM_CPPFLAGS \$(FASTJETCPPFLAGS) \$(FJCONTRIBCPPFLAGS)" + AC_CEDAR_CHECKCXXFLAG([-pedantic], [AM_CXXFLAGS="$AM_CXXFLAGS -pedantic"]) + AC_CEDAR_CHECKCXXFLAG([-Wall], [AM_CXXFLAGS="$AM_CXXFLAGS -Wall"]) +--- src/AnalysisTools/Makefile.am.org Mon Jul 08 15:16:09 2019 +0100 ++++ src/AnalysisTools/Makefile.am Wed Jul 10 16:15:41 2019 +0100 +@@ -6,4 +6,4 @@ + MC_JetSplittings.cc + +-libRivetAnalysisTools_la_LDFLAGS = $(AM_LDFLAGS) -L$(FASTJETLIBPATH) ++libRivetAnalysisTools_la_LDFLAGS = $(AM_LDFLAGS) -L$(FASTJETLIBPATH) -L$(FJCONTRIBLIBPATH) + libRivetAnalysisTools_la_LIBS = $(FASTJETLIBADD) diff --git a/var/spack/repos/builtin/packages/rivet/rivet-3.0.1.patch b/var/spack/repos/builtin/packages/rivet/rivet-3.0.1.patch new file mode 100644 index 00000000000..31bdcbc7e38 --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-3.0.1.patch @@ -0,0 +1,11 @@ +--- bin/rivet-buildplugin.in.orig 2020-04-30 14:41:44.988555918 +0200 ++++ bin/rivet-buildplugin.in 2020-04-30 14:42:21.301319083 +0200 +@@ -249,7 +249,7 @@ + srcnames[$idx]="$tmpfile" + fi + done +-objnames=("${srcnames[@]/.cc/.o}") ++objnames=("${srcnames[@]/%.cc/.o}") + + if [[ -z "$debug" ]]; then silencer="@"; fi + tmpmakefile=$(mktemp Makefile.tmp.XXXXXXXXXX) diff --git a/var/spack/repos/builtin/packages/rivet/rivet-3.1.0.patch b/var/spack/repos/builtin/packages/rivet/rivet-3.1.0.patch new file mode 100644 index 00000000000..ff09f528629 --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-3.1.0.patch @@ -0,0 +1,11 @@ +--- bin/rivet-build.in.orig 2020-04-30 11:11:53.820773774 +0200 ++++ bin/rivet-build.in 2020-04-30 11:12:32.766024110 +0200 +@@ -249,7 +249,7 @@ + srcnames[$idx]="$tmpfile" + fi + done +-objnames=("${srcnames[@]/.cc/.o}") ++objnames=("${srcnames[@]/%.cc/.o}") + + if [[ -z "$debug" ]]; then silencer="@"; fi + tmpmakefile=$(mktemp Makefile.tmp.XXXXXXXXXX) diff --git a/var/spack/repos/builtin/packages/rivet/rivet-3.1.1.patch b/var/spack/repos/builtin/packages/rivet/rivet-3.1.1.patch new file mode 100644 index 00000000000..687d22819a8 --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/rivet-3.1.1.patch @@ -0,0 +1,11 @@ +--- configure.ac.orig 2020-05-12 11:26:03.482506197 +0200 ++++ configure.ac 2020-05-12 11:54:55.569077342 +0200 +@@ -211,7 +211,7 @@ + if test "$fjmajor" -lt 3; then + AC_MSG_ERROR([FastJet version 3.0.0 or later is required]) + fi +- FASTJETLIBADD="$($FJCONFIG --plugins --shared --libs| tr ' ' '\n' | grep -v gcc | tr '\n' ' ')" ++ FASTJETLIBADD="$($FJCONFIG --plugins --shared --libs)" + else + FASTJETLIBADD="-L$FASTJETLIBPATH -l$FASTJETLIBNAME" + FASTJETLIBADD="$FASTJETLIBADD -lSISConePlugin -lsiscone -lsiscone_spherical" diff --git a/var/spack/repos/builtin/packages/yoda/package.py b/var/spack/repos/builtin/packages/yoda/package.py new file mode 100644 index 00000000000..21ebb020d08 --- /dev/null +++ b/var/spack/repos/builtin/packages/yoda/package.py @@ -0,0 +1,84 @@ +# 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 Yoda(AutotoolsPackage): + """YODA - Yet more Objects for Data Analysis""" + + homepage = "https://yoda.hepforge.org/" + url = "https://yoda.hepforge.org/downloads/?f=YODA-1.8.3.tar.bz2" + + version('1.8.3', sha256='d9dd0ea5e0f630cdf4893c09a40c78bd44455777c2125385ecc26fa9a2acba8a') + version('1.8.2', sha256='89558c11cf9b88b0899713e5b4bf8781fdcecc480ff155985ebbf148c6d80bdb') + version('1.8.1', sha256='51472e12065b9469f13906f0dc609e036d0c1dbd2a8e445e7d654aba73660112') + version('1.8.0', sha256='82c62bbaedb4b6b7d50cd42ce5409d453d46c1cc6724047db5efa74d34dd6dc5') + version('1.7.7', sha256='cfb64b099a79ec4d138792f0b464a8fbb04c4345143f77bbdca07acb744628ce') + version('1.7.6', sha256='864a1459c82676c991fcaed931263a415e815e3c9dc2cad2f94bda6fa4d112e5') + version('1.7.5', sha256='7b1dc7bb380d0fbadce12072f5cc21912c115e826182a3922d864e7edea131db') + version('1.7.4', sha256='3df316b89e9c0052104f8956e4f7d26c0b0b05cdace7d908be35c383361e3a71') + version('1.7.3', sha256='ebf6094733823e9cc2d1586aff06db2d8999c74a47e666baf305322f62c48058') + version('1.7.2', sha256='7f093cf947824ec118767c7c1999a50ea9343c173cf8c5062e3800ba54c2943e') + version('1.7.1', sha256='edd7971ecd272314309c800395200b07cf68547cbac3378a02d0b8c9ac03027b') + version('1.7.0', sha256='b3d6bfb0c52ed87cd240cee5e93e09102832d9ef32505d7275f4d3191a35ce3b') + version('1.6.7', sha256='2abf378573832c201bc6a9fecfff5b2006fc98c7a272540326cda8eb5bd95e16') + version('1.6.6', sha256='cf172a496d9108b93420530ea91055d07ecd514d2894d78db46b806530e91d21') + version('1.6.5', sha256='1477fe754cfe2e4e06aa363a773accf18aab960a8b899968b77834368cac14c5') + version('1.6.4', sha256='4c01f43c18b7b2e71f61dea0bb8c6fdc099c8e1a66256c510652884c4ffffbca') + version('1.6.3', sha256='1dd7e334fe54a05ff911d9e227d395abc5efd29e29d60187a036b2201f97da19') + version('1.6.2', sha256='5793cd1320694118423888801ca520f2719565fde04699ee69e1751f47cb57a8') + version('1.6.1', sha256='ec3f4cc4eb57f94fb431cc37db10eb831f025df95ffd9e516b8009199253c62b') + version('1.6.0', sha256='2920ef2588268484b650dc08438664a3539b79c65a9e80d58e3771bb699e2a6b') + version('1.5.9', sha256='1a19cc8c34c08f1797a93d355250e682eb85d62d4ab277b6714d7873b4bdde75') + version('1.5.8', sha256='011c5be5cc565f8baf02e7ebbe57a57b4d70dc6a528d5b0102700020bbf5a973') + version('1.5.7', sha256='f775df11b034154b8f5d43f12007692c3314672e60d3e554b3928fe5b0f00c29') + version('1.5.6', sha256='050e17b1b80658213281a2e4112dfecc0096f01f269cd739d601b2fd0e790a0c') + version('1.5.5', sha256='ce45df6248c6c50633953048240513dc52ca5c9144ef69ea72ada2df23bc4918') + version('1.5.4', sha256='c41853a1f3aa0794875ae09c1ba4348942eb890e798ac7cee6e3505a9b68b678') + version('1.5.3', sha256='1220ac0ae204c3ed6b22a6a35c30d9b5c1ded35a1054cff131861b4a919d4904') + version('1.5.2', sha256='ec113c53a6174b174aaea8f45802cc419184ce056123b93ab8d3f80fc1bd4986') + version('1.5.1', sha256='a8b088b3ede67d560e40f91f4f99be313f21841c46ce2f657af7692a7bbe3276') + version('1.5.0', sha256='2c2b77344854fac937a8ef07c0928c50829ff4c69bcad6e0afb92da611b7dd18') + version('1.4.0', sha256='e76a129f7c2b72b53525fe0b712606eeeab0dc145daa070ebf0728f0384eaf48') + version('1.3.1', sha256='274e196d009e3aac6dd1f2db876de9613ca1a3c21ec3364bc3662f5493bc9747') + version('1.3.0', sha256='d63197d5940b481ecb06cf4703d9c0b49388f32cad61ccae580d1b80312bd215') + version('1.2.1', sha256='e86964e91e4fbbba443d2848f55c028001de4713dcc64c40339389de053e7d8b') + version('1.2.0', sha256='143fa86cd7965d26d3897a5752307bfe08f4866c2f9a9f226a393127d19ee353') + version('1.1.0', sha256='5d2e8f3c1cddfb59fe651931c7c605fe0ed067864fa86047aed312c6a7938e01') + version('1.0.7', sha256='145c27d922c27a4e1d6d50030f4ddece5f03d6c309a5e392a5fcbb5e83e747ab') + version('1.0.6', sha256='357732448d67a593e5ff004418f2a2a263a1401ffe84e021f8a714aa183eaa21') + version('1.0.5', sha256='ba72bc3943a1b39fa63900570948199cf5ed5c7523f2c4af4740e51b098f1794') + version('1.0.4', sha256='697fe397c69689feecb2a731e19b2ff85e19343b8198c4f18a7064c4f7123950') + version('1.0.3', sha256='6a1d1d75d9d74da457726ea9463c1b0b6ba38d4b43ef54e1c33f885e70fdae4b') + + variant("root", default=False, description="Enable ROOT interface") + + depends_on('python', type=('build', 'run')) + depends_on('py-future', type=('build', 'run')) + depends_on('boost', when='@:1.6.0', type=('build', 'run')) + depends_on('py-cython', type='build') + depends_on('py-matplotlib', when='@1.3.0:', type=('build', 'run')) + depends_on('root', type=('build', 'run'), when='+root') + + patch('yoda-1.5.5.patch', level=0, when='@1.5.5') + patch('yoda-1.5.9.patch', level=0, when='@1.5.9') + patch('yoda-1.6.1.patch', level=0, when='@1.6.1') + patch('yoda-1.6.2.patch', level=0, when='@1.6.2') + patch('yoda-1.6.3.patch', level=0, when='@1.6.3') + patch('yoda-1.6.4.patch', level=0, when='@1.6.4') + patch('yoda-1.6.5.patch', level=0, when='@1.6.5') + patch('yoda-1.6.6.patch', level=0, when='@1.6.6') + patch('yoda-1.6.7.patch', level=0, when='@1.6.7') + + def configure_args(self): + args = [] + if self.spec.satisfies('@:1.6.0'): + args += '--with-boost=' + self.spec['boost'].prefix + + if '+root' in spec: + args += '--enable-root' + + return args diff --git a/var/spack/repos/builtin/packages/yoda/yoda-1.5.5.patch b/var/spack/repos/builtin/packages/yoda/yoda-1.5.5.patch new file mode 100644 index 00000000000..ba86d4cc31c --- /dev/null +++ b/var/spack/repos/builtin/packages/yoda/yoda-1.5.5.patch @@ -0,0 +1,50 @@ +--- configure.orig 2016-09-30 08:52:56.000000000 +0200 ++++ configure 2016-09-30 08:56:39.000000000 +0200 +@@ -16568,11 +16568,15 @@ + cat >conftest.py <<_ACEOF + + import sys, string ++# Python 2 and 3 compatible ++from future.builtins import map ++# Python 2 and 3: forward-compatible ++from future.builtins import range + # split strings by '.' and convert to numeric. Append some zeros + # because we need at least 4 digits for the hex conversion. +-minver = map(int, string.split('2.5', '.')) + [0, 0, 0] ++minver = list(map(int, '2.5'.split('.'))) + [0, 0, 0] + minverhex = 0 +-for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i] ++for i in range(0, 4): minverhex = (minverhex << 8) + minver[i] + if sys.hexversion >= minverhex: + sys.exit( 0 ) + else: +@@ -16600,15 +16604,15 @@ + fi + + +- PYTHON_VERSION=`$PYTHON -c "import sys; print '.'.join(map(str, sys.version_info[:2]));"` ++ PYTHON_VERSION=`$PYTHON -c "from __future__ import print_function; import sys; print('.'.join(list(map(str, sys.version_info[:2]))));"` + +- YODA_PYTHONPATH=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True);"` ++ YODA_PYTHONPATH=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True));"` + + ## Test for Python header + if test -x "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5 + $as_echo_n "checking for Python include path... " >&6; } +- python_incpath=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc();"` ++ python_incpath=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_inc());"` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_incpath" >&5 + $as_echo "$python_incpath" >&6; } + python_header="$python_incpath/Python.h" + --- pyext/setup.py.in.orig 2016-09-30 08:57:23.000000000 +0200 + +++ pyext/setup.py.in 2016-09-30 08:57:58.000000000 +0200 + @@ -34,7 +34,7 @@ + extns = [ext("util"), ext("core", statics=static_files, depends=core_depends)] + + ## Enable building of ROOT extension if ROOT is present + -if os.environ.has_key("BUILD_ROOTCOMPAT"): + +if "BUILD_ROOTCOMPAT" in os.environ: + try: + # import ROOT + # TODO: Need to test for and use root-config in configure diff --git a/var/spack/repos/builtin/packages/yoda/yoda-1.5.9.patch b/var/spack/repos/builtin/packages/yoda/yoda-1.5.9.patch new file mode 100644 index 00000000000..37a9ffab32b --- /dev/null +++ b/var/spack/repos/builtin/packages/yoda/yoda-1.5.9.patch @@ -0,0 +1,50 @@ +--- configure.orig 2016-09-30 09:01:00.000000000 +0200 ++++ configure 2016-09-30 09:03:05.000000000 +0200 +@@ -16574,11 +16574,15 @@ + cat >conftest.py <<_ACEOF + + import sys, string ++# Python 2 and 3 compatible ++from future.builtins import map ++# Python 2 and 3: forward-compatible ++from future.builtins import range + # split strings by '.' and convert to numeric. Append some zeros + # because we need at least 4 digits for the hex conversion. +-minver = map(int, string.split('2.5', '.')) + [0, 0, 0] ++minver = list(map(int, '2.5'.split('.'))) + [0, 0, 0] + minverhex = 0 +-for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i] ++for i in range(0, 4): minverhex = (minverhex << 8) + minver[i] + if sys.hexversion >= minverhex: + sys.exit( 0 ) + else: +@@ -16606,15 +16610,15 @@ + fi + + +- PYTHON_VERSION=`$PYTHON -c "import sys; print '.'.join(map(str, sys.version_info[:2]));"` ++ PYTHON_VERSION=`$PYTHON -c "from __future__ import print_function; import sys; print('.'.join(list(map(str, sys.version_info[:2]))));"` + +- YODA_PYTHONPATH=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True);"` ++ YODA_PYTHONPATH=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True));"` + + ## Test for Python header + if test -x "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5 + $as_echo_n "checking for Python include path... " >&6; } +- python_incpath=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc();"` ++ python_incpath=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_inc());"` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_incpath" >&5 + $as_echo "$python_incpath" >&6; } + python_header="$python_incpath/Python.h" + --- pyext/setup.py.in.orig 2016-09-30 09:03:25.000000000 +0200 + +++ pyext/setup.py.in 2016-09-30 09:04:03.000000000 +0200 + @@ -34,7 +34,7 @@ + extns = [ext("util"), ext("core", statics=static_files, depends=core_depends)] + + ## Enable building of ROOT extension if ROOT is present + -if os.environ.has_key("BUILD_ROOTCOMPAT"): + +if "BUILD_ROOTCOMPAT" in os.environ: + try: + # import ROOT + # TODO: Need to test for and use root-config in configure diff --git a/var/spack/repos/builtin/packages/yoda/yoda-1.6.1.patch b/var/spack/repos/builtin/packages/yoda/yoda-1.6.1.patch new file mode 100644 index 00000000000..0a5996a70d7 --- /dev/null +++ b/var/spack/repos/builtin/packages/yoda/yoda-1.6.1.patch @@ -0,0 +1,72 @@ +--- bin/yoda-config.in.orig 2016-07-11 14:43:05.700511377 +0300 ++++ bin/yoda-config.in 2016-07-11 14:43:50.312499322 +0300 +@@ -59,7 +59,7 @@ + + ## "Pre-rolled" build info + tmp=$( echo "$*" | egrep -- '--\|--\|--\') +-test -n "$tmp" && OUT="$OUT -I@includedir@ @BOOST_CPPFLAGS@" ++test -n "$tmp" && OUT="$OUT -I@includedir@" + + tmp=$( echo "$*" | egrep -- '--\|--\|--\') + test -n "$tmp" && OUT="$OUT -L@libdir@ -lYODA" +--- bin/yoda-config.orig 2016-07-11 14:43:31.960503275 +0300 ++++ bin/yoda-config 2016-07-11 14:43:41.200501112 +0300 +@@ -59,7 +59,7 @@ + + ## "Pre-rolled" build info + tmp=$( echo "$*" | egrep -- '--\|--\|--\') +-test -n "$tmp" && OUT="$OUT -I${prefix}/include @BOOST_CPPFLAGS@" ++test -n "$tmp" && OUT="$OUT -I${prefix}/include" + + tmp=$( echo "$*" | egrep -- '--\|--\|--\') + test -n "$tmp" && OUT="$OUT -L${exec_prefix}/lib -lYODA" +--- configure.orig 2016-09-30 09:04:54.000000000 +0200 ++++ configure 2016-09-30 09:07:44.000000000 +0200 +@@ -16508,11 +16508,15 @@ + cat >conftest.py <<_ACEOF + + import sys, string ++# Python 2 and 3 compatible ++from future.builtins import map ++# Python 2 and 3: forward-compatible ++from future.builtins import range + # split strings by '.' and convert to numeric. Append some zeros + # because we need at least 4 digits for the hex conversion. +-minver = map(int, string.split('2.5', '.')) + [0, 0, 0] ++minver = list(map(int, '2.5'.split('.'))) + [0, 0, 0] + minverhex = 0 +-for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i] ++for i in range(0, 4): minverhex = (minverhex << 8) + minver[i] + if sys.hexversion >= minverhex: + sys.exit( 0 ) + else: +@@ -16540,15 +16544,15 @@ + fi + + +- PYTHON_VERSION=`$PYTHON -c "import sys; print '.'.join(map(str, sys.version_info[:2]));"` ++ PYTHON_VERSION=`$PYTHON -c "from __future__ import print_function; import sys; print('.'.join(list(map(str, sys.version_info[:2]))));"` + +- YODA_PYTHONPATH=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True);"` ++ YODA_PYTHONPATH=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True));"` + + ## Test for Python header + if test -x "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5 + $as_echo_n "checking for Python include path... " >&6; } +- python_incpath=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc();"` ++ python_incpath=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_inc());"` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_incpath" >&5 + $as_echo "$python_incpath" >&6; } + python_header="$python_incpath/Python.h" + --- pyext/setup.py.in.orig 2016-09-30 09:07:58.000000000 +0200 + +++ pyext/setup.py.in 2016-09-30 09:08:17.000000000 +0200 + @@ -34,7 +34,7 @@ + extns = [ext("util"), ext("core", statics=static_files, depends=core_depends)] + + ## Enable building of ROOT extension if ROOT is present + -if os.environ.has_key("BUILD_ROOTCOMPAT"): + +if "BUILD_ROOTCOMPAT" in os.environ: + try: + # import ROOT + # TODO: Need to test for and use root-config in configure diff --git a/var/spack/repos/builtin/packages/yoda/yoda-1.6.2.patch b/var/spack/repos/builtin/packages/yoda/yoda-1.6.2.patch new file mode 100644 index 00000000000..a0eb97d0f3a --- /dev/null +++ b/var/spack/repos/builtin/packages/yoda/yoda-1.6.2.patch @@ -0,0 +1,22 @@ +--- bin/yoda-config.in.orig 2016-07-11 14:43:05.700511377 +0300 ++++ bin/yoda-config.in 2016-07-11 14:43:50.312499322 +0300 +@@ -59,7 +59,7 @@ + + ## "Pre-rolled" build info + tmp=$( echo "$*" | egrep -- '--\|--\|--\') +-test -n "$tmp" && OUT="$OUT -I@includedir@ @BOOST_CPPFLAGS@" ++test -n "$tmp" && OUT="$OUT -I@includedir@" + + tmp=$( echo "$*" | egrep -- '--\|--\|--\') + test -n "$tmp" && OUT="$OUT -L@libdir@ -lYODA" +--- bin/yoda-config.orig 2016-07-11 14:43:31.960503275 +0300 ++++ bin/yoda-config 2016-07-11 14:43:41.200501112 +0300 +@@ -59,7 +59,7 @@ + + ## "Pre-rolled" build info + tmp=$( echo "$*" | egrep -- '--\|--\|--\') +-test -n "$tmp" && OUT="$OUT -I${prefix}/include @BOOST_CPPFLAGS@" ++test -n "$tmp" && OUT="$OUT -I${prefix}/include" + + tmp=$( echo "$*" | egrep -- '--\|--\|--\') + test -n "$tmp" && OUT="$OUT -L${exec_prefix}/lib -lYODA" diff --git a/var/spack/repos/builtin/packages/yoda/yoda-1.6.3.patch b/var/spack/repos/builtin/packages/yoda/yoda-1.6.3.patch new file mode 100644 index 00000000000..4d50a3cf2d5 --- /dev/null +++ b/var/spack/repos/builtin/packages/yoda/yoda-1.6.3.patch @@ -0,0 +1,50 @@ +--- configure.orig 2016-08-09 21:07:54.000000000 +0200 ++++ configure 2016-09-19 11:49:18.560986340 +0200 +@@ -16520,11 +16520,15 @@ + cat >conftest.py <<_ACEOF + + import sys, string ++# Python 2 and 3 compatible ++from future.builtins import map ++# Python 2 and 3: forward-compatible ++from future.builtins import range + # split strings by '.' and convert to numeric. Append some zeros + # because we need at least 4 digits for the hex conversion. +-minver = map(int, string.split('2.5', '.')) + [0, 0, 0] ++minver = list(map(int, '2.5'.split('.'))) + [0, 0, 0] + minverhex = 0 +-for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i] ++for i in range(0, 4): minverhex = (minverhex << 8) + minver[i] + if sys.hexversion >= minverhex: + sys.exit( 0 ) + else: +@@ -16552,15 +16556,15 @@ + fi + + +- PYTHON_VERSION=`$PYTHON -c "import sys; print '.'.join(map(str, sys.version_info[:2]));"` ++ PYTHON_VERSION=`$PYTHON -c "from __future__ import print_function; import sys; print('.'.join(list(map(str, sys.version_info[:2]))));"` + +- YODA_PYTHONPATH=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True);"` ++ YODA_PYTHONPATH=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(prefix='$prefix', plat_specific=True));"` + + ## Test for Python header + if test -x "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5 + $as_echo_n "checking for Python include path... " >&6; } +- python_incpath=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc();"` ++ python_incpath=`$PYTHON -c "from __future__ import print_function; import distutils.sysconfig; print(distutils.sysconfig.get_python_inc());"` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_incpath" >&5 + $as_echo "$python_incpath" >&6; } + python_header="$python_incpath/Python.h" + --- pyext/setup.py.in.orig 2016-09-06 17:25:39.993785138 +0200 + +++ pyext/setup.py.in 2016-09-06 17:26:10.368489432 +0200 + @@ -34,7 +34,7 @@ + extns = [ext("util"), ext("core", statics=static_files, depends=core_depends)] + + ## Enable building of ROOT extension if ROOT is present + -if os.environ.has_key("BUILD_ROOTCOMPAT"): + +if "BUILD_ROOTCOMPAT" in os.environ: + try: + # import ROOT + # TODO: Need to test for and use root-config in configure diff --git a/var/spack/repos/builtin/packages/yoda/yoda-1.6.4.patch b/var/spack/repos/builtin/packages/yoda/yoda-1.6.4.patch new file mode 100644 index 00000000000..44b8ed06bca --- /dev/null +++ b/var/spack/repos/builtin/packages/yoda/yoda-1.6.4.patch @@ -0,0 +1,11 @@ +--- pyext/setup.py.in.orig 2016-09-30 09:13:02.000000000 +0200 ++++ pyext/setup.py.in 2016-09-30 09:13:21.000000000 +0200 +@@ -34,7 +34,7 @@ + extns = [ext("util"), ext("core", statics=static_files, depends=core_depends)] + + ## Enable building of ROOT extension if ROOT is present +-if os.environ.has_key("BUILD_ROOTCOMPAT"): ++if "BUILD_ROOTCOMPAT" in os.environ: + try: + # import ROOT + # TODO: Need to test for and use root-config in configure diff --git a/var/spack/repos/builtin/packages/yoda/yoda-1.6.5.patch b/var/spack/repos/builtin/packages/yoda/yoda-1.6.5.patch new file mode 100644 index 00000000000..ee632655ad4 --- /dev/null +++ b/var/spack/repos/builtin/packages/yoda/yoda-1.6.5.patch @@ -0,0 +1,23 @@ +--- bin/yoda2aida.orig 2016-10-07 13:25:57.355168158 +0200 ++++ bin/yoda2aida 2016-10-07 13:26:04.779169090 +0200 +@@ -18,7 +18,7 @@ + parser.add_option("-M", "--unmatch", dest="UNMATCH", metavar="PATT", default=None, + help="exclude histograms whose path matches this regex") + +-sys.stderr.write("WARNING: yoda2aida is DEPRECATED.\n It will die when AIDA does... *soon*\n" ++sys.stderr.write("WARNING: yoda2aida is DEPRECATED.\n It will die when AIDA does... *soon*\n") + + opts, args = parser.parse_args() + in_out = parse_x2y_args(args, ".yoda", ".aida") + +--- pyext/setup.py.in.orig 2016-09-30 09:13:02.000000000 +0200 ++++ pyext/setup.py.in 2016-09-30 09:13:21.000000000 +0200 +@@ -34,7 +34,7 @@ + extns = [ext("util"), ext("core", statics=static_files, depends=core_depends)] + + ## Enable building of ROOT extension if ROOT is present +-if os.environ.has_key("BUILD_ROOTCOMPAT"): ++if "BUILD_ROOTCOMPAT" in os.environ: + try: + # import ROOT + # TODO: Need to test for and use root-config in configure diff --git a/var/spack/repos/builtin/packages/yoda/yoda-1.6.6.patch b/var/spack/repos/builtin/packages/yoda/yoda-1.6.6.patch new file mode 100644 index 00000000000..fd400e4d7e8 --- /dev/null +++ b/var/spack/repos/builtin/packages/yoda/yoda-1.6.6.patch @@ -0,0 +1,11 @@ +--- pyext/setup.py.in.orig 2017-02-01 15:24:41.000000000 +0100 ++++ pyext/setup.py.in 2017-02-01 15:25:04.000000000 +0100 +@@ -34,7 +34,7 @@ + extns = [ext("util"), ext("core", statics=static_files, depends=core_depends)] + + ## Enable building of ROOT extension if ROOT is present +-if os.environ.has_key("BUILD_ROOTCOMPAT"): ++if "BUILD_ROOTCOMPAT" in os.environ: + try: + # import ROOT + # TODO: Need to test for and use root-config in configure diff --git a/var/spack/repos/builtin/packages/yoda/yoda-1.6.7.patch b/var/spack/repos/builtin/packages/yoda/yoda-1.6.7.patch new file mode 100644 index 00000000000..cc45b3e6891 --- /dev/null +++ b/var/spack/repos/builtin/packages/yoda/yoda-1.6.7.patch @@ -0,0 +1,11 @@ +--- pyext/setup.py.in.orig 2017-07-17 12:13:12.057895620 +0200 ++++ pyext/setup.py.in 2017-07-17 12:15:11.991048036 +0200 +@@ -34,7 +34,7 @@ + extns = [ext("util"), ext("core", statics=static_files, depends=core_depends)] + + ## Enable building of ROOT extension if ROOT is present +-if os.environ.has_key("BUILD_ROOTCOMPAT"): ++if "BUILD_ROOTCOMPAT" in os.environ: + try: + # import ROOT + # TODO: Need to test for and use root-config in configure From 516c3e659f3af89912edeb5209a1d1584c345545 Mon Sep 17 00:00:00 2001 From: Michael Kuhn Date: Mon, 6 Jul 2020 19:53:02 +0200 Subject: [PATCH 050/149] autotools bugfix: handle missing config.guess (#17356) Spack was attempting to calculate abspath on the located config.guess path even when it was not found (None); this commit skips the abspath calculation when config.guess is not found. --- lib/spack/spack/build_systems/autotools.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/spack/spack/build_systems/autotools.py b/lib/spack/spack/build_systems/autotools.py index f07a2169ac0..1ea238e2d16 100644 --- a/lib/spack/spack/build_systems/autotools.py +++ b/lib/spack/spack/build_systems/autotools.py @@ -123,10 +123,10 @@ def _do_patch_config_files(self): # Then search in all sub directories recursively. # We would like to use AC_CONFIG_AUX_DIR, but not all packages # ship with their configure.in or configure.ac. - config_path = next((os.path.join(r, f) + config_path = next((os.path.abspath(os.path.join(r, f)) for r, ds, fs in os.walk('.') for f in fs if f == config_file), None) - my_config_files[config_name] = os.path.abspath(config_path) + my_config_files[config_name] = config_path if my_config_files[config_name] is not None: try: From f0275d7e1b31b27c584c17eaf77d1495c2cd222e Mon Sep 17 00:00:00 2001 From: cedricchevalier19 Date: Mon, 6 Jul 2020 20:02:35 +0200 Subject: [PATCH 051/149] Fix gcc + binutils compilation. (#9024) * fix binutils deptype for gcc binutils needs to be a run dependency of gcc * Fix gcc+binutils build on RHEL7+ static-libstdc++ is not available with system gcc. Anyway, as it is for bootstraping, we do not really care depending on a shared libstdc++. Co-authored-by: Michael Kuhn --- var/spack/repos/builtin/packages/gcc/package.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/var/spack/repos/builtin/packages/gcc/package.py b/var/spack/repos/builtin/packages/gcc/package.py index 4c822b11982..3072402dabe 100644 --- a/var/spack/repos/builtin/packages/gcc/package.py +++ b/var/spack/repos/builtin/packages/gcc/package.py @@ -115,7 +115,7 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage): depends_on('zstd', when='@10:') depends_on('iconv', when='platform=darwin') depends_on('gnat', when='languages=ada') - depends_on('binutils~libiberty', when='+binutils') + depends_on('binutils~libiberty', when='+binutils', type=('build', 'link', 'run')) depends_on('zip', type='build', when='languages=java') depends_on('cuda', when='+nvptx') @@ -373,8 +373,6 @@ def configure_args(self): # enable appropriate bootstrapping flags stage1_ldflags = str(self.rpath_args) boot_ldflags = stage1_ldflags + ' -static-libstdc++ -static-libgcc' - if '%gcc' in spec: - stage1_ldflags = boot_ldflags options.append('--with-stage1-ldflags=' + stage1_ldflags) options.append('--with-boot-ldflags=' + boot_ldflags) From 4ea76dc95ce0992de869250c8570acbb59f9202c Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Tue, 30 Jun 2020 23:54:29 -0700 Subject: [PATCH 052/149] change master/child to controller/minion in pty docstrings PTY support used the concept of 'master' and 'child' processes. 'master' has been renamed to 'controller' and 'child' to 'minion'. --- lib/spack/llnl/util/tty/pty.py | 150 +++++++++++----------- lib/spack/spack/test/llnl/util/tty/log.py | 42 +++--- 2 files changed, 97 insertions(+), 95 deletions(-) diff --git a/lib/spack/llnl/util/tty/pty.py b/lib/spack/llnl/util/tty/pty.py index ef5d40ea57c..84c272a6e23 100644 --- a/lib/spack/llnl/util/tty/pty.py +++ b/lib/spack/llnl/util/tty/pty.py @@ -31,17 +31,17 @@ class ProcessController(object): """Wrapper around some fundamental process control operations. - This allows one process to drive another similar to the way a shell - would, by sending signals and I/O. + This allows one process (the controller) to drive another (the + minion) similar to the way a shell would, by sending signals and I/O. """ - def __init__(self, pid, master_fd, + def __init__(self, pid, controller_fd, timeout=1, sleep_time=1e-1, debug=False): """Create a controller to manipulate the process with id ``pid`` Args: pid (int): id of process to control - master_fd (int): master file descriptor attached to pid's stdin + controller_fd (int): controller fd attached to pid's stdin timeout (int): time in seconds for wait operations to time out (default 1 second) sleep_time (int): time to sleep after signals, to control the @@ -58,7 +58,7 @@ def __init__(self, pid, master_fd, """ self.pid = pid self.pgid = os.getpgid(pid) - self.master_fd = master_fd + self.controller_fd = controller_fd self.timeout = timeout self.sleep_time = sleep_time self.debug = debug @@ -67,8 +67,8 @@ def __init__(self, pid, master_fd, self.ps = which("ps", required=True) def get_canon_echo_attrs(self): - """Get echo and canon attributes of the terminal of master_fd.""" - cfg = termios.tcgetattr(self.master_fd) + """Get echo and canon attributes of the terminal of controller_fd.""" + cfg = termios.tcgetattr(self.controller_fd) return ( bool(cfg[3] & termios.ICANON), bool(cfg[3] & termios.ECHO), @@ -82,7 +82,7 @@ def horizontal_line(self, name): ) def status(self): - """Print debug message with status info for the child.""" + """Print debug message with status info for the minion.""" if self.debug: canon, echo = self.get_canon_echo_attrs() sys.stderr.write("canon: %s, echo: %s\n" % ( @@ -94,12 +94,12 @@ def status(self): sys.stderr.write("\n") def input_on(self): - """True if keyboard input is enabled on the master_fd pty.""" + """True if keyboard input is enabled on the controller_fd pty.""" return self.get_canon_echo_attrs() == (False, False) def background(self): - """True if pgid is in a background pgroup of master_fd's terminal.""" - return self.pgid != os.tcgetpgrp(self.master_fd) + """True if pgid is in a background pgroup of controller_fd's tty.""" + return self.pgid != os.tcgetpgrp(self.controller_fd) def tstp(self): """Send SIGTSTP to the controlled process.""" @@ -115,18 +115,18 @@ def cont(self): def fg(self): self.horizontal_line("fg") with log.ignore_signal(signal.SIGTTOU): - os.tcsetpgrp(self.master_fd, os.getpgid(self.pid)) + os.tcsetpgrp(self.controller_fd, os.getpgid(self.pid)) time.sleep(self.sleep_time) def bg(self): self.horizontal_line("bg") with log.ignore_signal(signal.SIGTTOU): - os.tcsetpgrp(self.master_fd, os.getpgrp()) + os.tcsetpgrp(self.controller_fd, os.getpgrp()) time.sleep(self.sleep_time) def write(self, byte_string): self.horizontal_line("write '%s'" % byte_string.decode("utf-8")) - os.write(self.master_fd, byte_string) + os.write(self.controller_fd, byte_string) def wait(self, condition): start = time.time() @@ -156,50 +156,51 @@ def wait_running(self): class PseudoShell(object): - """Sets up master and child processes with a PTY. + """Sets up controller and minion processes with a PTY. You can create a ``PseudoShell`` if you want to test how some function responds to terminal input. This is a pseudo-shell from a - job control perspective; ``master_function`` and ``child_function`` - are set up with a pseudoterminal (pty) so that the master can drive - the child through process control signals and I/O. + job control perspective; ``controller_function`` and ``minion_function`` + are set up with a pseudoterminal (pty) so that the controller can drive + the minion through process control signals and I/O. The two functions should have signatures like this:: - def master_function(proc, ctl, **kwargs) - def child_function(**kwargs) + def controller_function(proc, ctl, **kwargs) + def minion_function(**kwargs) - ``master_function`` is spawned in its own process and passed three + ``controller_function`` is spawned in its own process and passed three arguments: proc - the ``multiprocessing.Process`` object representing the child + the ``multiprocessing.Process`` object representing the minion ctl - a ``ProcessController`` object tied to the child + a ``ProcessController`` object tied to the minion kwargs keyword arguments passed from ``PseudoShell.start()``. - ``child_function`` is only passed ``kwargs`` delegated from + ``minion_function`` is only passed ``kwargs`` delegated from ``PseudoShell.start()``. - The ``ctl.master_fd`` will have its ``master_fd`` connected to - ``sys.stdin`` in the child process. Both processes will share the + The ``ctl.controller_fd`` will have its ``controller_fd`` connected to + ``sys.stdin`` in the minion process. Both processes will share the same ``sys.stdout`` and ``sys.stderr`` as the process instantiating ``PseudoShell``. Here are the relationships between processes created:: ._________________________________________________________. - | Child Process | pid 2 - | - runs child_function | pgroup 2 + | Minion Process | pid 2 + | - runs minion_function | pgroup 2 |_________________________________________________________| session 1 ^ - | create process with master_fd connected to stdin + | create process with controller_fd connected to stdin | stdout, stderr are the same as caller ._________________________________________________________. - | Master Process | pid 1 - | - runs master_function | pgroup 1 - | - uses ProcessController and master_fd to control child | session 1 + | Controller Process | pid 1 + | - runs controller_function | pgroup 1 + | - uses ProcessController and controller_fd to | session 1 + | control minion | |_________________________________________________________| ^ | create process @@ -207,51 +208,51 @@ def child_function(**kwargs) ._________________________________________________________. | Caller | pid 0 | - Constructs, starts, joins PseudoShell | pgroup 0 - | - provides master_function, child_function | session 0 + | - provides controller_function, minion_function | session 0 |_________________________________________________________| """ - def __init__(self, master_function, child_function): + def __init__(self, controller_function, minion_function): self.proc = None - self.master_function = master_function - self.child_function = child_function + self.controller_function = controller_function + self.minion_function = minion_function # these can be optionally set to change defaults self.controller_timeout = 1 self.sleep_time = 0 def start(self, **kwargs): - """Start the master and child processes. + """Start the controller and minion processes. Arguments: kwargs (dict): arbitrary keyword arguments that will be - passed to master and child functions + passed to controller and minion functions - The master process will create the child, then call - ``master_function``. The child process will call - ``child_function``. + The controller process will create the minion, then call + ``controller_function``. The minion process will call + ``minion_function``. """ self.proc = multiprocessing.Process( - target=PseudoShell._set_up_and_run_master_function, - args=(self.master_function, self.child_function, + target=PseudoShell._set_up_and_run_controller_function, + args=(self.controller_function, self.minion_function, self.controller_timeout, self.sleep_time), kwargs=kwargs, ) self.proc.start() def join(self): - """Wait for the child process to finish, and return its exit code.""" + """Wait for the minion process to finish, and return its exit code.""" self.proc.join() return self.proc.exitcode @staticmethod - def _set_up_and_run_child_function( - tty_name, stdout_fd, stderr_fd, ready, child_function, **kwargs): - """Child process wrapper for PseudoShell. + def _set_up_and_run_minion_function( + tty_name, stdout_fd, stderr_fd, ready, minion_function, **kwargs): + """Minion process wrapper for PseudoShell. Handles the mechanics of setting up a PTY, then calls - ``child_function``. + ``minion_function``. """ # new process group, like a command or pipeline launched by a shell @@ -266,45 +267,45 @@ def _set_up_and_run_child_function( if kwargs.get("debug"): sys.stderr.write( - "child: stdin.isatty(): %s\n" % sys.stdin.isatty()) + "minion: stdin.isatty(): %s\n" % sys.stdin.isatty()) # tell the parent that we're really running if kwargs.get("debug"): - sys.stderr.write("child: ready!\n") + sys.stderr.write("minion: ready!\n") ready.value = True try: - child_function(**kwargs) + minion_function(**kwargs) except BaseException: traceback.print_exc() @staticmethod - def _set_up_and_run_master_function( - master_function, child_function, controller_timeout, sleep_time, - **kwargs): - """Set up a pty, spawn a child process, and execute master_function. + def _set_up_and_run_controller_function( + controller_function, minion_function, controller_timeout, + sleep_time, **kwargs): + """Set up a pty, spawn a minion process, execute controller_function. Handles the mechanics of setting up a PTY, then calls - ``master_function``. + ``controller_function``. """ os.setsid() # new session; this process is the controller - master_fd, child_fd = os.openpty() - pty_name = os.ttyname(child_fd) + controller_fd, minion_fd = os.openpty() + pty_name = os.ttyname(minion_fd) # take controlling terminal pty_fd = os.open(pty_name, os.O_RDWR) os.close(pty_fd) ready = multiprocessing.Value('i', False) - child_process = multiprocessing.Process( - target=PseudoShell._set_up_and_run_child_function, + minion_process = multiprocessing.Process( + target=PseudoShell._set_up_and_run_minion_function, args=(pty_name, sys.stdout.fileno(), sys.stderr.fileno(), - ready, child_function), + ready, minion_function), kwargs=kwargs, ) - child_process.start() + minion_process.start() # wait for subprocess to be running and connected. while not ready.value: @@ -315,30 +316,31 @@ def _set_up_and_run_master_function( sys.stderr.write("pid: %d\n" % os.getpid()) sys.stderr.write("pgid: %d\n" % os.getpgrp()) sys.stderr.write("sid: %d\n" % os.getsid(0)) - sys.stderr.write("tcgetpgrp: %d\n" % os.tcgetpgrp(master_fd)) + sys.stderr.write("tcgetpgrp: %d\n" % os.tcgetpgrp(controller_fd)) sys.stderr.write("\n") - child_pgid = os.getpgid(child_process.pid) - sys.stderr.write("child pid: %d\n" % child_process.pid) - sys.stderr.write("child pgid: %d\n" % child_pgid) - sys.stderr.write("child sid: %d\n" % os.getsid(child_process.pid)) + minion_pgid = os.getpgid(minion_process.pid) + sys.stderr.write("minion pid: %d\n" % minion_process.pid) + sys.stderr.write("minion pgid: %d\n" % minion_pgid) + sys.stderr.write( + "minion sid: %d\n" % os.getsid(minion_process.pid)) sys.stderr.write("\n") sys.stderr.flush() - # set up master to ignore SIGTSTP, like a shell + # set up controller to ignore SIGTSTP, like a shell signal.signal(signal.SIGTSTP, signal.SIG_IGN) - # call the master function once the child is ready + # call the controller function once the minion is ready try: controller = ProcessController( - child_process.pid, master_fd, debug=kwargs.get("debug")) + minion_process.pid, controller_fd, debug=kwargs.get("debug")) controller.timeout = controller_timeout controller.sleep_time = sleep_time - error = master_function(child_process, controller, **kwargs) + error = controller_function(minion_process, controller, **kwargs) except BaseException: error = 1 traceback.print_exc() - child_process.join() + minion_process.join() - # return whether either the parent or child failed - return error or child_process.exitcode + # return whether either the parent or minion failed + return error or minion_process.exitcode diff --git a/lib/spack/spack/test/llnl/util/tty/log.py b/lib/spack/spack/test/llnl/util/tty/log.py index f23f6637131..97950e8324b 100644 --- a/lib/spack/spack/test/llnl/util/tty/log.py +++ b/lib/spack/spack/test/llnl/util/tty/log.py @@ -111,7 +111,7 @@ def test_log_subproc_and_echo_output_capfd(capfd, tmpdir): # Tests below use a pseudoterminal to test llnl.util.tty.log # def simple_logger(**kwargs): - """Mock logger (child) process for testing log.keyboard_input.""" + """Mock logger (minion) process for testing log.keyboard_input.""" def handler(signum, frame): running[0] = False signal.signal(signal.SIGUSR1, handler) @@ -125,7 +125,7 @@ def handler(signum, frame): def mock_shell_fg(proc, ctl, **kwargs): - """PseudoShell master function for test_foreground_background.""" + """PseudoShell controller function for test_foreground_background.""" ctl.fg() ctl.status() ctl.wait_enabled() @@ -134,7 +134,7 @@ def mock_shell_fg(proc, ctl, **kwargs): def mock_shell_fg_no_termios(proc, ctl, **kwargs): - """PseudoShell master function for test_foreground_background.""" + """PseudoShell controller function for test_foreground_background.""" ctl.fg() ctl.status() ctl.wait_disabled_fg() @@ -143,7 +143,7 @@ def mock_shell_fg_no_termios(proc, ctl, **kwargs): def mock_shell_bg(proc, ctl, **kwargs): - """PseudoShell master function for test_foreground_background.""" + """PseudoShell controller function for test_foreground_background.""" ctl.bg() ctl.status() ctl.wait_disabled() @@ -152,7 +152,7 @@ def mock_shell_bg(proc, ctl, **kwargs): def mock_shell_tstp_cont(proc, ctl, **kwargs): - """PseudoShell master function for test_foreground_background.""" + """PseudoShell controller function for test_foreground_background.""" ctl.tstp() ctl.wait_stopped() @@ -163,7 +163,7 @@ def mock_shell_tstp_cont(proc, ctl, **kwargs): def mock_shell_tstp_tstp_cont(proc, ctl, **kwargs): - """PseudoShell master function for test_foreground_background.""" + """PseudoShell controller function for test_foreground_background.""" ctl.tstp() ctl.wait_stopped() @@ -177,7 +177,7 @@ def mock_shell_tstp_tstp_cont(proc, ctl, **kwargs): def mock_shell_tstp_tstp_cont_cont(proc, ctl, **kwargs): - """PseudoShell master function for test_foreground_background.""" + """PseudoShell controller function for test_foreground_background.""" ctl.tstp() ctl.wait_stopped() @@ -194,7 +194,7 @@ def mock_shell_tstp_tstp_cont_cont(proc, ctl, **kwargs): def mock_shell_bg_fg(proc, ctl, **kwargs): - """PseudoShell master function for test_foreground_background.""" + """PseudoShell controller function for test_foreground_background.""" ctl.bg() ctl.status() ctl.wait_disabled() @@ -207,7 +207,7 @@ def mock_shell_bg_fg(proc, ctl, **kwargs): def mock_shell_bg_fg_no_termios(proc, ctl, **kwargs): - """PseudoShell master function for test_foreground_background.""" + """PseudoShell controller function for test_foreground_background.""" ctl.bg() ctl.status() ctl.wait_disabled() @@ -220,7 +220,7 @@ def mock_shell_bg_fg_no_termios(proc, ctl, **kwargs): def mock_shell_fg_bg(proc, ctl, **kwargs): - """PseudoShell master function for test_foreground_background.""" + """PseudoShell controller function for test_foreground_background.""" ctl.fg() ctl.status() ctl.wait_enabled() @@ -233,7 +233,7 @@ def mock_shell_fg_bg(proc, ctl, **kwargs): def mock_shell_fg_bg_no_termios(proc, ctl, **kwargs): - """PseudoShell master function for test_foreground_background.""" + """PseudoShell controller function for test_foreground_background.""" ctl.fg() ctl.status() ctl.wait_disabled_fg() @@ -299,7 +299,7 @@ def test_foreground_background(test_fn, termios_on_or_off, tmpdir): def synchronized_logger(**kwargs): - """Mock logger (child) process for testing log.keyboard_input. + """Mock logger (minion) process for testing log.keyboard_input. This logger synchronizes with the parent process to test that 'v' can toggle output. It is used in ``test_foreground_background_output`` below. @@ -330,7 +330,7 @@ def handler(signum, frame): def mock_shell_v_v(proc, ctl, **kwargs): - """PseudoShell master function for test_foreground_background_output.""" + """Controller function for test_foreground_background_output.""" write_lock = kwargs["write_lock"] v_lock = kwargs["v_lock"] @@ -357,7 +357,7 @@ def mock_shell_v_v(proc, ctl, **kwargs): def mock_shell_v_v_no_termios(proc, ctl, **kwargs): - """PseudoShell master function for test_foreground_background_output.""" + """Controller function for test_foreground_background_output.""" write_lock = kwargs["write_lock"] v_lock = kwargs["v_lock"] @@ -395,9 +395,9 @@ def test_foreground_background_output( shell = PseudoShell(test_fn, synchronized_logger) log_path = str(tmpdir.join("log.txt")) - # Locks for synchronizing with child - write_lock = multiprocessing.Lock() # must be held by child to write - v_lock = multiprocessing.Lock() # held while master is in v mode + # Locks for synchronizing with minion + write_lock = multiprocessing.Lock() # must be held by minion to write + v_lock = multiprocessing.Lock() # held while controller is in v mode with termios_on_or_off(): shell.start( @@ -423,16 +423,16 @@ def test_foreground_background_output( with open(log_path) as log: log = log.read().strip().split("\n") - # Master and child process coordinate with locks such that the child + # Controller and minion process coordinate with locks such that the minion # writes "off" when echo is off, and "on" when echo is on. The # output should contain mostly "on" lines, but may contain an "off" - # or two. This is because the master toggles echo by sending "v" on - # stdin to the child, but this is not synchronized with our locks. + # or two. This is because the controller toggles echo by sending "v" on + # stdin to the minion, but this is not synchronized with our locks. # It's good enough for a test, though. We allow at most 2 "off"'s in # the output to account for the race. assert ( ['forced output', 'on'] == uniq(output) or - output.count("off") <= 2 # if master_fd is a bit slow + output.count("off") <= 2 # if controller_fd is a bit slow ) # log should be off for a while, then on, then off From 11088df4024a512c8e2fe88f9ffe848e9940f808 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Fri, 3 Jul 2020 23:52:11 -0700 Subject: [PATCH 053/149] Remove references to `master` from CI - [x] remove master from github actions - [x] remove master from .travis.yml - [x] make `develop` the default branch for `spack ci` --- .github/workflows/linux_build_tests.yaml | 3 +-- .github/workflows/macos_unit_tests.yaml | 3 +-- .github/workflows/minimum_python_versions.yaml | 3 +-- .travis.yml | 3 +-- lib/spack/spack/ci.py | 2 +- 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/linux_build_tests.yaml b/.github/workflows/linux_build_tests.yaml index ecdf38bfe4e..3f5c575df3d 100644 --- a/.github/workflows/linux_build_tests.yaml +++ b/.github/workflows/linux_build_tests.yaml @@ -3,13 +3,12 @@ name: linux builds on: push: branches: - - master - develop - releases/** pull_request: branches: - - master - develop + - releases/** paths-ignore: # Don't run if we only modified packages in the built-in repository - 'var/spack/repos/builtin/**' diff --git a/.github/workflows/macos_unit_tests.yaml b/.github/workflows/macos_unit_tests.yaml index 38feb2fc6ad..f1e856070c5 100644 --- a/.github/workflows/macos_unit_tests.yaml +++ b/.github/workflows/macos_unit_tests.yaml @@ -3,13 +3,12 @@ name: macos tests on: push: branches: - - master - develop - releases/** pull_request: branches: - - master - develop + - releases/** jobs: build: diff --git a/.github/workflows/minimum_python_versions.yaml b/.github/workflows/minimum_python_versions.yaml index 474f0915148..a6ab5dfa405 100644 --- a/.github/workflows/minimum_python_versions.yaml +++ b/.github/workflows/minimum_python_versions.yaml @@ -3,13 +3,12 @@ name: python version check on: push: branches: - - master - develop - releases/** pull_request: branches: - - master - develop + - releases/** jobs: validate: diff --git a/.travis.yml b/.travis.yml index df4262bf1e8..e4e6383dbdc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ -# Only build master and develop on push; do not build every branch. +# Only build releases and develop on push; do not build every branch. branches: only: - - master - develop - /^releases\/.*$/ diff --git a/lib/spack/spack/ci.py b/lib/spack/spack/ci.py index 55d311d6a50..732b985dd15 100644 --- a/lib/spack/spack/ci.py +++ b/lib/spack/spack/ci.py @@ -493,7 +493,7 @@ def generate_gitlab_ci_yaml(env, print_summary, output_file, after_script = None if custom_spack_repo: if not custom_spack_ref: - custom_spack_ref = 'master' + custom_spack_ref = 'develop' before_script = [ ('git clone "{0}"'.format(custom_spack_repo)), 'pushd ./spack && git checkout "{0}" && popd'.format( From 9ec9327f5aacc7b62a1469771c8917547393676d Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Sat, 4 Jul 2020 01:50:55 -0700 Subject: [PATCH 054/149] docs: document releases and branches in Spack - [x] Remove references to `master` branch - [x] Document how release branches are structured - [x] Document how to make a major release - [x] Document how to make a point release - [x] Document how to do work in our release projects --- README.md | 26 +- lib/spack/docs/contribution_guide.rst | 21 +- lib/spack/docs/developer_guide.rst | 367 ++++++++++++++++++++++++++ lib/spack/docs/getting_started.rst | 2 +- lib/spack/docs/images/pr-commit.png | Bin 0 -> 44592 bytes lib/spack/docs/images/projects.png | Bin 0 -> 69075 bytes 6 files changed, 405 insertions(+), 11 deletions(-) create mode 100644 lib/spack/docs/images/pr-commit.png create mode 100644 lib/spack/docs/images/projects.png diff --git a/README.md b/README.md index d278378ce7a..2ab9d2dfdf9 100644 --- a/README.md +++ b/README.md @@ -78,11 +78,27 @@ these guidelines with [Travis CI](https://travis-ci.org/spack/spack). To run these tests locally, and for helpful tips on git, see our [Contribution Guide](http://spack.readthedocs.io/en/latest/contribution_guide.html). -Spack uses a rough approximation of the -[Git Flow](http://nvie.com/posts/a-successful-git-branching-model/) -branching model. The ``develop`` branch contains the latest -contributions, and ``master`` is always tagged and points to the latest -stable release. +Spack's `develop` branch has the latest contributions. Pull requests +should target `develop`, and users who want the latest package versions, +features, etc. can use `develop`. + +Releases +-------- + +For multi-user site deployments or other use cases that need very stable +software installations, we recommend using Spack's +[stable releases](https://github.com/spack/spack/releases). + +Each Spack release series also has a corresponding branch, e.g. +`releases/v0.14` has `0.14.x` versions of Spack, and `releases/v0.13` has +`0.13.x` versions. We backport important bug fixes to these branches but +we do not advance the package versions or make other changes that would +change the way Spack concretizes dependencies within a release branch. +So, you can base your Spack deployment on a release branch and `git pull` +to get fixes, without the package churn that comes with `develop`. + +See the [docs on releases](https://spack.readthedocs.io/en/latest/developer_guide.html#releases) +for more details. Code of Conduct ------------------------ diff --git a/lib/spack/docs/contribution_guide.rst b/lib/spack/docs/contribution_guide.rst index 9935ec0c83a..10c0875e852 100644 --- a/lib/spack/docs/contribution_guide.rst +++ b/lib/spack/docs/contribution_guide.rst @@ -27,11 +27,22 @@ correspond to one feature/bugfix/extension/etc. One can create PRs with changes relevant to different ideas, however reviewing such PRs becomes tedious and error prone. If possible, try to follow the **one-PR-one-package/feature** rule. -Spack uses a rough approximation of the `Git Flow `_ -branching model. The develop branch contains the latest contributions, and -master is always tagged and points to the latest stable release. Therefore, when -you send your request, make ``develop`` the destination branch on the -`Spack repository `_. +-------- +Branches +-------- + +Spack's ``develop`` branch has the latest contributions. Nearly all pull +requests should start from ``develop`` and target ``develop``. + +There is a branch for each major release series. Release branches +originate from ``develop`` and have tags for each point release in the +series. For example, ``releases/v0.14`` has tags for ``0.14.0``, +``0.14.1``, ``0.14.2``, etc. versions of Spack. We backport important bug +fixes to these branches, but we do not advance the package versions or +make other changes that would change the way Spack concretizes +dependencies. Currently, the maintainers manage these branches by +cherry-picking from ``develop``. See :ref:`releases` for more +information. ---------------------- Continuous Integration diff --git a/lib/spack/docs/developer_guide.rst b/lib/spack/docs/developer_guide.rst index de2fe80f850..5c57f28226f 100644 --- a/lib/spack/docs/developer_guide.rst +++ b/lib/spack/docs/developer_guide.rst @@ -495,3 +495,370 @@ The bottom of the output shows the top most time consuming functions, slowest on top. The profiling support is from Python's built-in tool, `cProfile `_. + +.. _releases: + +-------- +Releases +-------- + +This section documents Spack's release process. It is intended for +project maintainers, as the tasks described here require maintainer +privileges on the Spack repository. For others, we hope this section at +least provides some insight into how the Spack project works. + +.. _release-branches: + +^^^^^^^^^^^^^^^^ +Release branches +^^^^^^^^^^^^^^^^ + +There are currently two types of Spack releases: :ref:`major releases +` (``0.13.0``, ``0.14.0``, etc.) and :ref:`point releases +` (``0.13.1``, ``0.13.2``, ``0.13.3``, etc.). Here is a +diagram of how Spack release branches work:: + + o branch: develop (latest version) + | + o merge v0.14.1 into develop + |\ + | o branch: releases/v0.14, tag: v0.14.1 + o | merge v0.14.0 into develop + |\| + | o tag: v0.14.0 + |/ + o merge v0.13.2 into develop + |\ + | o branch: releases/v0.13, tag: v0.13.2 + o | merge v0.13.1 into develop + |\| + | o tag: v0.13.1 + o | merge v0.13.0 into develop + |\| + | o tag: v0.13.0 + o | + | o + |/ + o + +The ``develop`` branch has the latest contributions, and nearly all pull +requests target ``develop``. + +Each Spack release series also has a corresponding branch, e.g. +``releases/v0.14`` has ``0.14.x`` versions of Spack, and +``releases/v0.13`` has ``0.13.x`` versions. A major release is the first +tagged version on a release branch. Minor releases are back-ported from +develop onto release branches. This is typically done by cherry-picking +bugfix commits off of ``develop``. + +To avoid version churn for users of a release series, minor releases +should **not** make changes that would change the concretization of +packages. They should generally only contain fixes to the Spack core. + +Both major and minor releases are tagged. After each release, we merge +the release branch back into ``develop`` so that the version bump and any +other release-specific changes are visible in the mainline (see +:ref:`merging-releases-to-develop`). + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Scheduling work for releases +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +We schedule work for releases by creating `GitHub projects +`_. At any time, there may be +several open release projects. For example, here are two releases (from +some past version of the page linked above): + +.. image:: images/projects.png + +Here, there's one release in progress for ``0.15.1`` and another for +``0.16.0``. Each of these releases has a project board containing issues +and pull requests. GitHub shows a status bar with completed work in +green, work in progress in purple, and work not started yet in gray, so +it's fairly easy to see progress. + +Spack's project boards are not firm commitments, and we move work between +releases frequently. If we need to make a release and some tasks are not +yet done, we will simply move them to next minor or major release, rather +than delaying the release to complete them. + +For more on using GitHub project boards, see `GitHub's documentation +`_. + +.. _major-releases: + +^^^^^^^^^^^^^^^^^^^^^ +Making Major Releases +^^^^^^^^^^^^^^^^^^^^^ + +Assuming you've already created a project board and completed the work +for a major release, the steps to make the release are as follows: + +#. Create two new project boards: + + * One for the next major release + * One for the next point release + +#. Move any tasks that aren't done yet to one of the new project boards. + Small bugfixes should go to the next point release. Major features, + refactors, and changes that could affect concretization should go in + the next major release. + +#. Create a branch for the release, based on ``develop``: + + .. code-block:: console + + $ git checkout -b releases/v0.15 develop + + For a version ``vX.Y.Z``, the branch's name should be + ``releases/vX.Y``. That is, you should create a ``releases/vX.Y`` + branch if you are preparing the ``X.Y.0`` release. + +#. Bump the version in ``lib/spack/spack/__init__.py``. See `this example from 0.13.0 + `_ + +#. Updaate the release version lists in these files to include the new version: + + * ``lib/spack/spack/schema/container.py`` + * ``lib/spack/spack/container/images.json`` + + **TODO**: We should get rid of this step in some future release. + +#. Update ``CHANGELOG.md`` with major highlights in bullet form. Use + proper markdown formatting, like `this example from 0.15.0 + `_. + +#. Push the release branch to GitHub. + +#. Make sure CI passes on the release branch, including: + * Regular unit tests + * Build tests + * The E4S pipeline at `gitlab.spack.io `_ + + If CI is not passing, submit pull requests to ``develop`` as normal + and keep rebasing the release branch on ``develop`` until CI passes. + +#. Follow the steps in :ref:`publishing-releases`. + +#. Follow the steps in :ref:`merging-releases-to-develop`. + +#. Follow the steps in :ref:`announcing-releases`. + + +.. _point-releases: + +^^^^^^^^^^^^^^^^^^^^^ +Making Point Releases +^^^^^^^^^^^^^^^^^^^^^ + +This assumes you've already created a project board for a point release +and completed the work to be done for the release. To make a point +release: + +#. Create one new project board for the next point release. + +#. Move any cards that aren't done yet to the next project board. + +#. Check out the release branch (it should already exist). For the + ``X.Y.Z`` release, the release branch is called ``releases/vX.Y``. For + ``v0.15.1``, you would check out ``releases/v0.15``: + + .. code-block:: console + + $ git checkout releases/v0.15 + +#. Cherry-pick each pull request in the ``Done`` column of the release + project onto the release branch. + + This is **usually** fairly simple since we squash the commits from the + vast majority of pull requests, which means there is only one commit + per pull request to cherry-pick. For example, `this pull request + `_ has three commits, but + the were squashed into a single commit on merge. You can see the + commit that was created here: + + .. image:: images/pr-commit.png + + You can easily cherry pick it like this (assuming you already have the + release branch checked out): + + .. code-block:: console + + $ git cherry-pick 7e46da7 + + For pull requests that were rebased, you'll need to cherry-pick each + rebased commit individually. There have not been any rebased PRs like + this in recent point releases. + + .. warning:: + + It is important to cherry-pick commits in the order they happened, + otherwise you can get conflicts while cherry-picking. When + cherry-picking onto a point release, look at the merge date, + **not** the number of the pull request or the date it was opened. + + Sometimes you may **still** get merge conflicts even if you have + cherry-picked all the commits in order. This generally means there + is some other intervening pull request that the one you're trying + to pick depends on. In these cases, you'll need to make a judgment + call: + + 1. If the dependency is small, you might just cherry-pick it, too. + If you do this, add it to the release board. + + 2. If it is large, then you may decide that this fix is not worth + including in a point release, in which case you should remove it + from the release project. + + 3. You can always decide to manually back-port the fix to the release + branch if neither of the above options makes sense, but this can + require a lot of work. It's seldom the right choice. + +#. Bump the version in ``lib/spack/spack/__init__.py``. See `this example from 0.14.1 + `_. + +#. Updaate the release version lists in these files to include the new version: + + * ``lib/spack/spack/schema/container.py`` + * ``lib/spack/spack/container/images.json`` + + **TODO**: We should get rid of this step in some future release. + +#. Update ``CHANGELOG.md`` with a list of bugfixes. This is typically just a + summary of the commits you cherry-picked onto the release branch. See + `the changelog from 0.14.1 + `_. + +#. Push the release branch to GitHub. + +#. Make sure CI passes on the release branch, including: + * Regular unit tests + * Build tests + * The E4S pipeline at `gitlab.spack.io `_ + + If CI does not pass, you'll need to figure out why, and make changes + to the release branch until it does. You can make more commits, modify + or remove cherry-picked commits, or cherry-pick **more** from + ``develop`` to make this happen. + +#. Follow the steps in :ref:`publishing-releases`. + +#. Follow the steps in :ref:`merging-releases-to-develop`. + +#. Follow the steps in :ref:`announcing-releases`. + + +.. _publishing-releases: + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Publishing a release on GitHub +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +#. Go to `github.com/spack/spack/releases + `_ and click ``Draft a new + release``. Set the following: + + * ``Tag version`` should start with ``v`` and contain *all three* + parts of the version, .g. ``v0.15.1``. This is the name of the tag + that will be created. + + * ``Target`` should be the ``releases/vX.Y`` branch (e.g., ``releases/v0.15``). + + * ``Release title`` should be ``vX.Y.Z`` (To match the tag, e.g., ``v0.15.1``). + + * For the text, paste the latest release markdown from your ``CHANGELOG.md``. + + You can save the draft and keep coming back to this as you prepare the release. + +#. When you are done, click ``Publish release``. + +#. Immediately after publishing, go back to + `github.com/spack/spack/releases + `_ and download the + auto-generated ``.tar.gz`` file for the release. It's the ``Source + code (tar.gz)`` link. + +#. Click ``Edit`` on the release you just did and attach the downloaded + release tarball as a binary. This does two things: + + #. Makes sure that the hash of our releases doesn't change over time. + GitHub sometimes annoyingly changes they way they generate + tarballs, and then hashes can change if you rely on the + auto-generated tarball links. + + #. Gets us download counts on releases visible through the GitHub + API. GitHub tracks downloads of artifacts, but *not* the source + links. See the `releases + page `_ and search + for ``download_count`` to see this. + + +.. _merging-releases-to-develop: + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Merging back into ``develop`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Once each release is complete, make sure that it is merged back into +``develop`` with a merge commit: + +.. code-block:: console + + $ git checkout develop + $ git merge --no-ff releases/v0.15 + $ git push + +We merge back to ``develop`` because it: + + * updates the version and ``CHANGELOG.md`` on ``develop``. + * ensures that your release tag is reachable from the head of + ``develop`` + +We *must* use a real merge commit (via the ``--no-ff`` option) because it +ensures that the release tag is reachable from the tip of ``develop``. +This is necessary for ``spack -V`` to work properly -- it uses ``git +describe --tags`` to find the last reachable tag in the repository and +reports how far we are from it. For example: + +.. code-block:: console + + $ spack -V + 0.14.2-1486-b80d5e74e5 + +This says that we are at commit ``b80d5e74e5``, which is 1,486 commits +ahead of the ``0.14.2`` release. + +We put this step last in the process because it's best to do it only once +the release is complete and tagged. If you do it before you've tagged the +release and later decide you want to tag some later commit, you'll need +to merge again. + + +.. _announcing-releases: + +^^^^^^^^^^^^^^^^^^^^ +Announcing a release +^^^^^^^^^^^^^^^^^^^^ + +We announce releases in all of the major Spack communication channels. +Publishing the release takes care of GitHub. The remaining channels are +Twitter, Slack, and the mailing list. Here are the steps: + +#. Make a tweet to announce the release. It should link to the release's + page on GitHub. You can base it on `this example tweet + `_. + +#. Ping ``@channel`` in ``#general`` on Slack (`spackpm.slack.com + `_) with a link to the tweet. The tweet + will be shown inline so that you do not have to retype your release + announcement. + +#. Email the Spack mailing list to let them know about the release. As + with the tweet, you likely want to link to the release's page on + GitHub. It's also helpful to include some information directly in the + email. You can base yours on this `example email + `_. + +Once you've announced the release, congratulations, you're done! You've +finished making the release! diff --git a/lib/spack/docs/getting_started.rst b/lib/spack/docs/getting_started.rst index 226b1f0883c..7b908465f56 100644 --- a/lib/spack/docs/getting_started.rst +++ b/lib/spack/docs/getting_started.rst @@ -818,7 +818,7 @@ Git Some Spack packages use ``git`` to download, which might not work on some computers. For example, the following error was -encountered on a Macintosh during ``spack install julia-master``: +encountered on a Macintosh during ``spack install julia@master``: .. code-block:: console diff --git a/lib/spack/docs/images/pr-commit.png b/lib/spack/docs/images/pr-commit.png new file mode 100644 index 0000000000000000000000000000000000000000..a87c800ef5d282bea64c30d2d34ee9e9bdaf400b GIT binary patch literal 44592 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

u6^`yDUZo`+E;5t^8#)ld?1D4sfsW#Lth zsqH-38K%|}2`PI+N@=%MPO#qUBfp9{#pYXDzW1Yi;jjLT;JLXw27P7{9QlLZpWJ{Q z5VEA^8JdSi+c{rjy;Nfq?+8C8v7B2o4zg$@4|1u}tM;=r6-m$VaV}!Mp-CN_-5W9P zdM?nVNFFOeZEpvbY|}NYxM1bXf&T zcd-r^TgogPgt_RB*jF+3k{LdeFkK1xhqQE2N3vNxGA;ab!_p_ke8D1kK-ZT8D3s5i z&b5_0Lo;qp1TJ<2d%Oz6PD(msq^49spxgr=DaPo+Qpn*0+AM91ujTzrk#{CIMHi-=<<9KI$I@ zHbMK7e~?X^9k7l8Ooba z6#|*K*`Y^T!(~Qgxrq0EU3}qP+4q09SK)|gPAPeEd&1(*Xc*JA5~AI@wQ30QtL>8f zeEnR>*O{#2D&pe;phr2+S`AU{V@ETqp?Vm-YYElV+`8u?$4!)A{Z!oYiHw9JhzcE< z$qS9@-a9AC6ffI%KNx!K{*MtEw0rj%rGO?CP-s`O6zx^$$2+J0w_BB0GV4>~fv@na zzQ2#VFmRFMaF;KEpdTvHa3EYD4PFCK5E)wtJxzqu75wJppEA%q>ppcs@(W>Hp>MdZ zVlNkdDc*g8vRMI8DP3MD5!x*IRDm)xQNctGaq)WY-`-#vV60G^=S|+XJIYy@)%seg zVN0XImrB}7*gy#_e^!?YDR=)=<;!Fmo!IfO-GP(A!5s_evV&j0b^QvsZo+Gix)leE z_KzVXZ3`$}ZQ8pRHAF&)MULYy-Mf@1ZSTv{f! z>FDp>0gzr+(i*}3uwE$4Ed82Ip2vJMxQ0kR&#(O_c25P)EezWPgm4i=Tfspr=*He= zs)$r(v9#E+qje<2-o4blIu=rc&gQk27A5HF9;={1>ZC9F)L6g^eJ{O4lRIqa@w+MI z*vMO|LTI1F$yTq34wNxDE=m*^zmDB_lw@Z zfH;~%SCJo`9nEuxP04j)hUULU71n5K8tZI&ok+9!O<_=sy*S7=+<5J?a-Wd$+}&mp z6^TJwAWF&cEPE=@5IIQmt?ZL#O5FTot@#P8YO9KD;y(nXCY|l&PAgT#Zu`eG zRbRXN6?A&7LGl!+7AnG{y-AJU{@|N0x~?{SiJ7YuF;GP{rIDy+-0g#_9Dx8i#osYXv63@A;k&GW)vm=PSjQea)Z;0yd*A z%$QbH+L#a$*x5#YGm*?Z)>8GY zx?e&Y_t*wzti_%GV+~nW@;=aVBm=pHDUaf)cKI2_{_TijzC!KWAmY5glf$|X=At7%+$pZ*(`Nwk z$Iy84nN$i-rw8$1mLh&lBuG8GTEs(7?fKfh7>woa1Q|K+PpdK9&xLjE>14&C;Lg_D ziQOGFmFbv-oHhd>#HpCjKMDf>JD}!1e{MA9gCBHvmOlE?z|x=N$q1hc?;^9+ePzGdWYduiJ3T5B@dZsO zgXNV4`q3oh01SL)c)Ub~xKJa5zD_l2VH{CIW%EVvkipMv=$NfG88X*+RqqCy%I zf^N5A)i~YYZRHf?IBEN%YHR^Vq9kZiOwafVeq@?Brya9CN#AD8Uh0{h_uA5j=YFH7 z&<~mdK+x=b>T_ohXnL|F)$RPC)-|YBVawQ}Og^@CuOY7}bGPy(PECCLWi>FuY@W?_65<4LmAF99 zauuZx-q>Q+CSkPHGyW=}istcNL~UkYznAS(2T(-=oAgtp=yA&gj#`Nlvd1SAc&4Jm z--$WMXpM3xOYB9|$mF%pJVQ|G0IW)_1gdeL_V4iQH;A4f*xISd?XwejDj7@Nm4a6U zO$(twqwV`%v`NEugcWrPNMU*TW%oB?omHL4R)o^yz{zC__`yRKELQ$*GlsY;VgK#X zwlg#j<9$4_&~j>VYGp!L#%yk+rN`cWY2b2Xoh&10ar3kpV7<^%Wbm5?{af~8?V>9| zsb_TtY9xyxYoImi=?zDjwsb2}QRhE}P})?j1=TPPs0A5SRuC3>5Xv<$Rlvj7et!Cp z&EgYo*`O#Js;Vpd3+R-G-coH`P}#m2z--hN9{58#${+A1g+fsFhoLPYWj8<~432zB z(d$YW^Fj>~^_#U*Sy$j4vM&lDQ?$0klUGqV(zLz@2(xy6e5Xw8G5L4Z9y zIuO_Hrf*SVOo&Hdt!^vy^eoWHolhRWM2?*^|bQb5@8FtyBx0+hHAb z5EOXaXG>D3wq1}8Eq~*x3nDq*XzZ{iuLw$+iYt2a%C7`BYlEll);4ID(ilWoZvj$H zw=Gx{Vrf{;-;yHa(_FtkLCSo|ih%J;mfYzMaC|3~>KJ=7tx1p=k^F=jZ8A)+I4Wl)amy9G5q_v6vRGa+K7)7 zWS{~;lnXY~&y(*UyA(6#;7%6T$d+~;K%b0YGjPGQ3jxw`z5U0{ z^kUQ^!D1z)Y2i$GftjYqSpGyADiBlH8BaG=zi?IB z@|l(nCF*!1lCpm%T~$kBZ|dhJg&MXf4Kjf<|J!OVm_Qnf67wJGmld>j4UoWvmyzl6 zI8Ng~@3>_0P^3pTcCRh+ffec54e^%}DVxgIl1VXVdg} z*oF$;K9VRd0Trepg>MnvI8PKW)H7_+T0f~wH2A8#B{Nh|$pqBqmI3LSaTpmK79BB3 z!j6Z_K!)jI0+p8|i{z6d87?y|6g2@vK-XU+?O63de2oeUMF$k`1v5l8Y43+~qT>E% z31!yqnSvwbzxW$eFwfB6DU)0%R+>dk6BX%9j^99A3R(st!}@j9KpL{;d}t;L$eJGk^dIy~Nxn=Ym$H`7rg>)y+> z);jF67bzeIy2#Rv)0vDD-&T8^oQ~HzB9@iLC2-5R@wt{-#TuIGz7u6@Lk66(sky7> zV9?Xc7x?D0fi~{^o>xEO^u3}j9~3d?d8_Ouxg3NHN5!+aOS=rX zO!8q8-}D$ks%16bNQtMDVMN8?^%O(a_~~+2o&gicDT0psI{FJ#P2crYeP=RkvFyig z4bZ+bC>~+Mr+)Y&dgocl)26i+brfvCP!WgehDjfnLTwJ~=^&O~lLjDKlF&5x<3xjY zm_SBUrC%=-%iA85#-I-`pB9!_j&L{`!q?21TzSg1a0!EQv4!Mw?I)5x!>M2ydg)YD z0{12x+U5HJGu&KdzEGhB19+j#=JCM?p@aIXp_S>AVsw6fD#CBDDCe+(9bTzp<%V=} z5*d8q08O5tLnw0@l1Fhxys5<72Q;89^hQ`CHEBS5oo8810k*M3Mz>uw)fNizOqn>r zLMmP7>D5vqoj(R65udg)i)!8I5hQ%;m_@90o*K5#41=<}(Fe12E+XSKOF`8ua1VlEs(>}75K))YRLXcFp;}; zYtS#pCin8+k5{yLg~L54e%^J=EI_A|PI;VR1hd`V=f`VPrVDJ$mTIA?3M_3RMWk0p#xhe= zV53CC-l$i7lbcn=K`TA~QPWfm17O?jErf7I`|m{QiGgLzfy~BtG@p(iMBUFzvq2Hz zpU_Qu&UQ3b@A;!N4gyn`0*2c{&e zXdwyr;XcOxB|EjSHJ7}2euZJYTmW9@B$|@&v@`pg^ij$NkS>bF@To^5PbhT{2y(4r z>AGAl&02jPlWm>ux&DJupvmHCm8e>xDUVMKD7VT8bbJXu`@%|Aic?k;|A-gwCsvrT zmC&@g8SQOVTSTJ11Alkf<>jFOo3DgllYJj%=@eF+UML*_D5#OA6j$?9w^c1!-~v2f~fJ)zhbB0*O~(O0w83J;1l zRqs+i>8<^-2aC3ll45myy(cJMkOC#3%bX5I)37tlM>Ej6Nqxkb{>hZ&a~x1OnSyFc zFkItgYF>sb(1Y3Yy?BW-u^!7Pl{->6&mPON!J&X`JmhDYJv=Uy6)3==mw7E6LLd*u%rxmq<*h#mxBYi%4j^H-8cgs=g zBGHwq{ShK3YLqv6D5&NcHC%ZDFDQeGIRGmp0yb2+R0i;s8(w;}8M)o4SMU98;gF2i zXeOUCPHVcSJba(e{a~frxKpC_KM2RV-jDCl#|zT>HZ*9!`Ea&yfCGte14)C`Top{G z%Nb!mY;?OYShaBFb_NhRfVA~))=Yct`)UwNVZzlthiBj zx_M%}(dJbR6>m82JksN?)}y=I>B%uE!@H)pp5!04fewwMpfAdWlmmtZl7|E6vmV4) zMsQ;2N48Vf3jO$Ge~jX|C=xK_a$Kb236i`+tkr0NQ^1=cH(*6kb}HM@yE8Cg^@GA3 zCs<5V>jgz-XiBjM76JTqHeAcUr#p{A?F@$E8U5n>D<G2?ZY$-!(}+3gHYQ>==!q4v@MR(k9PmKHDiZ+?Z|9Dp29G_fwM*Tfk{{Kpg|EVQuzEVwtHU^{c z?yd#lg}2UBZDte)aEdv}stiSaKXTz_D@82jmsvR?j&UA-p3la1syMu}7dVo6;Fr&* zoH9kzO9jM@Q}lfwHT;!|VqYEGuUXKlgxMbjg0>{R>4QMalC8rXU3FI|fLwv*40n z^FPnExslwf)8wc!Xoabk5^q~U>Wot(XW3O*SH};=%^x zkyG$)ZV@6SYt{K)PYl9tj$&)YEizS~ISoK5=krMLT)z^?M$UxiQnT7cHt@>l^_O*5 z&LwB9)sCrbk;1Kt*kUd|6PI8YI?3&G`*i`b!BQD^tGjhCdfv$-c^qBSr~nsk3jKV7 zfvmZiXkR`R&*QpnkGx$w=n7d4GrPc6pa<}KM@b}ES2jby*^!1rBgoH zN)*f5G6UXD7b}?RO5tCMs3(Ujci}s#&(a|kiRG~WJJ*unp)Hn62feJ%wUOJ))MGA; z@HDUWDiN`ME?yU)$MOmLJ)WQ(O-2~%YeeRHHU0grbtN1`{3zHNI3Y))FO@B$!YzjY zuh()ydSz5^kET(sp$d8^)NJ@Q53{XG5BbOci(%7BSKE-Yn2%;ym3A3RK_Is#0U1~7 zLkdM#5!lCSOLKDw*vv?7VI}3|*>KtHPGnWOe?;jZ+6O7E@Dn2K0OJXEa^>HOnC95Y zjg2Ny6n#HsqghAUHISq%io`+##Ggj2oVqbDzd5L=GOd7u3o5^#Z0p+`wD@VVgo{$3 z(b1&p|9MWG!SS-$XnCp;vW!gZ48(nqRtKo5T8)mXivgt$kQpzi0twXyCxW)b-)8U| zVp>u`7{k0Bt2w!V?~5#9_PiBslCCN%aEZ7RTG@XKfD@Z^0-6k+#&?VAp612#KXY{! z)a5s*7Km6a@C>>hRO~CvoMkPJ-R9>HoL>$hX>^OhP){Vx#ZU*$iP+6b42)$%!?wNT zYk`g1Afz?q8jrmU1N{QOgt7T3s-{WVxDy^aL1QeH5#u6h;w72B=~zh0USC%a?oTMf zZ^RH#ykXR$7z)i&BBw;U&;D~C{JA?rZxsEbBgCxeC@9qxA1fi}h27;8q8&N+kJ3M3 zeSrYD{SmZJqReZu91xq5KPQb-phf;C>Z5}z;t+}BDq2Gc^nC;aWpK)j>Y*r`4QMM2 z1*0L*-dRK8icb5bl#}w#Bv5BQB)0;(mzC9&lIev;=D$&Zb`l`Zs<+j&CPr+h*>!|a z#@3A7L-Oc%gYZ2Or`0P|TMkH+f9(V6Et~0Dx2Z8IhC`eaCk3nPXFC)h=&%l6M_aNv zsu1D`<`eHsvm#^R-a>l(q+)*oDmNml7_^F2LL(-U>0tx8?PMO|5L~JLFV_J3UxA(v zh+gA#%uZgeQs>|uKTkkQsab)3pq7|WGaEJ4v1a-+$WA?LKOzCH<0k5NIE`*bIBoi z;-b(AoqK7ACeq8h>dHPM?)CoXVrXW=0B4|{y2?bgG;`=?44nK_F8t8-u3a4T^Bi!& zajBhFiW)Dyf1Nvyze})0PHG`k2pJ1{M)>q!N~qE8 z+6Ooy{o3^IYZBrH)DT9ri63Hy5kmJ-`IzmgP%B@B+~GX-f(ntrVoxNKM~rg2abX$Y zDOg3HLXXEdqg>!96m7xrl75HymzM9G9&~J9?m$9MV`*Jh>3&b4XWr@#`_szDhPkrM zaU4(gD}YYJks>(#iqNGG3cf|bhD^PM;d+C_Y5VDFCoY0NV>u%jZ}aay+u7H-A-n;W zCXTRf**P6R_A;up6gy2`EwiLeG;567vD`o0j;^iPqIEAs-?HtumaT1JT2@C}Az4<( z%K^l0NF?c~+06Uom(Uf9llNagfxlI}JtX75{H6>K$A9@;ZG3&?B~NynUa@CDt)8oE z$ix=KIZ?xqyt{QOFeJHOU&&D`<&GBf2b@yaE;O_yp=f`H{1KkXkTojC5F4_yP@Gw- zRs++Q|HpSi@AdwUwLz}b%&tdke4DrWyXj8?IC}jSL}(;JkslF=Qyf~E;4mBKnFaf& zS@mbnTgaikT#*x;z)=P0(8R}C;$9I54B2Q-5!}=F1_$bi3_)!zZe9qeH`_t;+bd$4 z!2;;M{8+=0{>*0RYbO31yA_32tl3lhcMF1mn*|7m7FT4Ga&dj(tPbb$;YMsY$UTSA z*p<*?WS4E-IwJB9^6yqhRahnSX6b5%Xvr_}xRYBnvG< zOG-=C0`mT(OkvzNdp&VsXcb8!Ri@k$z%`mH1yAq+ZxMSBHINw9(Z4^@Sh~nb8B;+k zhI5K6zm#RqSJd8gEgUb5YHT(_8OF9r`T=73`75<(Br8k3j*xiqgc~SO!yUnyy5{n~ zZ73=g5$#A#YmH&X2n2+^M=)X(xziuYI4#{3@>teg3HTe$_gKkbSb#nr9$4=x5?4sx zF|2)!snVnS;VzQcIxAy813f82CO6E>gR#ua5=L3z#kVH!oF0h5sQ8z>5|QQ1yYw>c zX$e&%rVrbN>%zV9SFuu@~L0Cz9*NPvOEV(|`fE{Sw&(p>G2bNn|rm$+vo=`+NoSQa$( zNHa9jFXmHU*E4j z4D^*mmZk5Q=V~xIH^(6ADuJBTwtri||Ei7O;JsRZQucB-Yl3Yu#XEM3U!DYCo1yv9H@VECsc98He^;@||yagfPK=OrRaqwe-j7Uh3g6 z=G+5N2O*n=oBR96IQrfRxw$&j&<}ll##yI%=Tffm$1x=%1}o($q3Ej;NZ^X@Xm~@g zgQx3yIc%G)=or)-SA+d4?ar=BcHY)eSd5TjV;}yJ4|jUu=(i=?eWqfnTp549t8K3E6for7dZsex5cNNv0+u z44KBxC-(|FfX->Fp@%uzEIgoRSYD}X?&Uqh*K*g@u2hgw52)_du%xh4ooB>3Z^ZhjRY=*TZxeO}~^ZDw-S(DQiIJnM6 zWSj*~^prZ$Rr*OP-zMTSZ)R)%ECkRR=dy`PDNF7&5R3;L>THQRVb$xr@Vo2ktL>5z z*k+64DrrOoVf{6os9-Goc8*q7%eDG4Vk9_ri)Be6oAb2_8V)QT?ovD>fz4S9(LGT| z0-~_H&P;!Zi=D7BK2N?A)wL+WPpju?(r?E%!D@fhmxwW4DAaPsgv<-l3~vvrPUcg* zUTi77$G!D#`fVxsZ?D1Q(X2AW;tqb2mU` zD$OCSF3DE@w7Y?_T1oT0g)p8pKNw5XzF5twwn)jZm%HSpZ?CSq+n4R}&ubxfdS+IH zCou*u2gZ~6n3n)fMlyqdhE5|l5nTL#A#dq-*mIi!u<$YSw&gnAgdP|3x%gZxm)6=K zN&eeG>;EfBH~hVC{MbL!a1)7mIvXrD9x0P*UR-=oWdc9b>v625fzQ#(a+RA9L$P74 zn7F1^nmef15+dJ13G9{(_oIHV6CpO(iFUg7!PEoIuc}!85M@hKxaPN{eB5{(vl#X5 zTX92G1>u4t%fih7CbSabvv;U73Vil^)8I1k=v_wurwp&nI!!l8DgRjA-?zKN>L$+* zsboJZB-FHo1Q8Eob|&1ttnEYRg=nY5aaES3ZBUr1O$sKy1!9wRB8v;{3i&5!5nCNE zApH2|QePmNTM15^89~ma5UPM&;?!eYFo|umrNtPEprehGu3+K!c!A>rSQxKIzF1T1 zUpmeH_cL@&td%(>WCFvvt1@t_sLD7GWkBbUQHMd(X6y1o4pGS5R(CkSFG%Kx(CP2v zBPv!d3Jn+Nc3S(ekq-TC>IPrtLg6}DAv{hc_c(8Uu;B&MiJa9=3s^?|ZaNG&l=o%AEMb*IYjB*^`j)p<#%&k_Gaf@J~?&^(Vs$ z^{%R<9#=PtvrjRw`$K3imD@y~k$k;1>HO7UqpNAys|8NlbOmN}%Ohgc15kYOw`%g? z?1e-TKlc8^#Y|eu)r;c4X||!&c4EI6v7Xo5zMnav?NNUhOhl}NF|gA$bpE_(tD+nc z>9Z$bnGg?)@$QN;Jv$11)CKY@Def<%SEwJgTxD4#%SwJXX~d~66qi|fUAoA92fQ6S!LI7L4hxd+-kE7h=Tm-N1`vwYQ8ZEZ8%_Zf7 zS&sJvpFT!OY_@{M{S{$WLU}@T7b>N3`VP^m4cZA6^WwQ6axb=?iWa-^2zuw+$AWam zVox0a@<>YM9!)2@ZijO_kwpN4dT?VW9pg&VNB@CSmRFxSE!9#>M_E$DtpcGhcR0om zPfDWbNDUEojlW)EEM1$LtSc7OX-1Xve-2xHFJSbZ<}6jAUF7Y$tzUn^=CujeysczW zK@-@EX;M&N)%*cRfyGw*3Z=%_II)$4vSR8?#c?XAYnXXT!~He&)}ZzSWL zB8fqp7~fAyw<|{3_rAgj;_R>BvB<14ek}&;CZmD@-F&rCZR9@>u;J8ygrwak`bf_lE9awoN^oHnt4q)7BU?nA#N;XR{FZ?;?8nJXygolHzvnNt zlpF)X;mM6m;#&v{gIPtkV(PhzQ1fVI8M6-#qjA4*uf0_lKbw0@;b}_wltSJ{2L0Ft zBU0?qIo!}6XCxk-(?QcONji~2%wOhD9{N#GE_=>KpAe1`7&@hD8gZLE6XMz$`Dc zR=oQ`^b-u&-g+dbNQV7ZLY5LMH#%*u?y1tFxv5ZDM&rbmeqy?ez5 zFH5UY62k9vJmNckOn$oRuxXy41lDl=(h*$(INMZIDw(~k$^6SJzcxZIC{XEam@#}Q z*hQDt{A^TmE7T|KSspYBQ!Upk&&{;@Xl z6m5+M)oHR$-+%vm8geG(1_-VbCGjlw?2f}b?-JLp8Bp`7*|Vhtqgwj|1DEXK+&Ppz zzWuG0#tHw1;UdxLO2Z=$I#CM}XeNcE-mW0iNuDuiG3tHDcUdxr%T;2Q zYqdNxHE1sS5+ZvID1f?6!Jp(295h@n~-P`Apph$y+b^sMJgWOLz+i2(kHg1cMW@Ux%qm| zFhIS5BR&VA(K1fXQD*5&REDG z>KU0yQX`$D4@<@UH2UY8>bk(5wdrZh1&MXdm_7A@y9D{mipY?|6De%CG<(TMKU;X zs$lvmgs*^#nubrtmf(!2X*lV5`lJlZub=!aiCCzQUWAoGRR7;4<+@lupA_eIp#|bv z(`lF%W67Ha#p?SAE5dhL(1kbVDo!d_RfI0@baMWV$g7uu&yzK?`}w4OR$1mx!~Ch{ zoaEj1fwuL9Xc50dY(Y&rIpb>?dXiXaO_$V|=fH^i?Ja|xowPUY5ijK>g)nN(0mZU* zmSOM1_6^zOat(%T(~C@qEQT%Vc$(dsFGHe`5hmp-OvXZ-Xqg@s5tRCGmWYl-Fj7n~ zM|Vrlp9CGn>wPr{XgG4w)gsGDL@pe0dp|_MxZ*Di!aM1C*$9~9(%5BM4pi4!TFu`* zOgUE^x``d2+4i@;-M)+16 znMW69QX9Z2sMm6nuLTeP69wO+C*Hm2FXtxQ-N{vKV7e6MVaN4jqCA` z#9zOB4}}~1HmI+7mD1-!zvT?NuY{!(pR47$oMvC3VxAT}`T3my{l7+d-M#CWF3)CE zm}5E;f{*-y3{Uq~8-D!EqqnrTbs8g!-rzno#gzK#2LbOg;#_kWEk7Jmn};LNwZ5}= z7M!q6+SNCC7nz5bmrRh6fOo}5r^TD7 zudgr0!OKSL@bIwkg2;=Ei)pfH&5-C)A_DnB^$)13^CN&n=*<-8@%&|?$;i^v|CtG& z%i5$q)`><18{z~H?|8i#Wq&2*q&|Y=FFA@=NKamEAoG~;`i(FHs8*&Yousi;Q7qO~egzzbMaq>hhLf*5mD*h6^<`&ZYbh|UqHpkw1~!G4O&+ZSSX zPgH-3qLtzhOP&jefbMEz?p{tW#;GM-1^dHs%jMu&vV@(N^n*W7ICNcL?2EbiqlBtV zeM50=Ot6j%+MA!88s*e)-QdBn4kIvosjo>_^$ECD&f%WzW8kz@Zvkd>VJJOCU1{c? z>xrp)GZ2Kr{A83H9G#(*BT%3`$HO*TI;XjRbkt2N?R+X$>UcFNtEfUhJW+U&RQ2vP z3(Sd|m>uIcIEwH&_2Dk14~UQbkgk12;D4gPcVd0+#>aK`Dm&?7O-}ZM->@PY3Z6R| zEEKD~Rj4M!56;H_yvx~o=p&P$-WMi+!#2>jCb@&&B9iOeK0gy!)mfS#-d_K*+z{8r#AgSzhD>C8%rr)t|(n+|&mA+XRJl9-xW5yET*1r^@6 zL5cbHbR~H|;8u2MfRxFLXT4gC1tZLU>#E4~@Jhu06#*n4O!4kXH^TjSY1onC?dK>H zJo~L`s}6 zN9?N@O;-C{Qe70ycok%RZr2aQQ~%TkZdsY2T5df>R2PBHDCh;0Dv8GXI4Ns>03<=n zBUtJNrS7J5=Bt=2%PyR-g*?Og$}L>NVEycOjL?xjjG0W_j#m!k-1>J2Be7qfbe*R@ zRvs^U4bv&PsS#R5pDc{rApo;rC|T~G&;6J*)g%k3OAAjR=jvIryECuuk;62}RpE`J z@*+xhqwnUT7jt~g(}>wvunOEU{+*gMAxzuX0ex2%jQWjWZU`frRDefVV&&G5(6SRF ztVto&_d{@`dE!JHN12&7s_2OA8#GXI1J)(T-Z!vrwOo_5^s&l;5FLGVVhg*v|4&G- z0X^1hoIeZV#975v7`=4^=P*l_Zem`Z5;F&LR6_d3+~-Q*A>@T{#F3Ezajz@GiQ$=PY)Z|dvm;N;a(&6utq z9)cr&Q@hS@2~kf;lQA6@e(MuR+`o*|c-ZPZAD4KL>>)5%H*g+9^4h7YVB!B*!ZWwD zsz6bO3IFM<8s-#y;F7ugaIoZU@rsxu;8QWYC(UL5J&`=0y zu4{biv(Jr9VBTv`%Dxr(93`OTD~QQmABDcqh{_Ibcy> zRK{=cOaAFfM8AfSl~Egukf*o5`r1nxM}tzyRf_mDqWxsMQUb>nnn3ogqC-_{6U)s4jcrbA3|= zldcw+E9b{J_z039EF&~3q@LLdmKE)GF?)YQQhY;#$fCDhm;EPi|JKXAEz<-CI@5|s zTb4aOp^tNMd+#@o1wkN;!9q~6KSbxw;c3k9aLe$-x4*`3fxUGRP9k#uuf4B+i?Zw5 zR-{otI;5loq$NZ`K)NIbkVZnKYv_c%hoL)%5{3~8;k&%+`QG=r z@B1%!=f^qbxc1&_uXV2TTzjs)UOwbu`ve{5=M5>29b#ptY@*)zGN7ovzzMy6{J3PG z+=wN=ztOfhQL&K;>iGEE#0bp!+p>8EM7Q7N<^7=GAYytGf;;z-Yg4)nd`=H2z36Kn1V%-v z`l7#jh=R|f$}!_RO01)wqp^&rW@{a=G{_&i=Kk99L@WXLA(ho;ktx^Ovp`NZMpOC5 zIfREGNHrz-SGs)*xU7wz1|9j!_nhM#jI;JCP)$UtgQ|`vt`j zKQ*CO1BR?PpO+kMV6b~cpJ9;92iv4c_0eD)X0#krqx)Q zqe|sCdZ(f+XQWKwEAF?P5Fb4>NygGs;vbL+l^$T8sIIvipAu4AOBQnO)xCtEWw)3h z4mEf^|Hud&?0GjiL-0dpB39u;qDEcUzB2oR9&Y>DWJJMH;~)NpKVAIxa*jz34EgdN z1EkiW0FHcJ7MTTg&upRpeQ`Ii_O#!cuFq}xnU@UcbxbjKzowIt3hRNRZFW)G9MUQC zxeKsii_a&1!0OJUTPe8b5T)Phd5y$rx8TdZV4B*Xc2nGOP@VEglc1=xnMm^`m;Nac z=S^KZEt;3B+D-=1L=-;!^h*83oR~1oo#8PM*k^lfCx+2fL+2C~2x%xpx{NU}6bCYO z)6_jxe8&ad=;4pxdv08Z6=Mj%Yi;MUpmOC1AZwuYTDESw|s zcR@mM-|T`R?Lye2l3HO$ufr!95YUqR#s*aKvgShq6{JWzoOp*We6FJ84w1*J{7*_$ zNkOs!S)D6u0ZdFB)X9?-Zm<&Khb*H+EAU%)m)Abt;^!suXe>rn+54=mkWP^?3CY4c zR^H$qH-&_KxZ^A+Td52~i1YtG%?^4@eR69ek3jneDmQh56ARcNa({STM_1lXqEQ6W+zP|-~B>pyA71MR6bU!W!@N`^KKYu z1h2QiiUCtMk`X%O`+*ahptska-Bh6b z_B_$d0eU}*^!KF!zbaC_>Honr^<3P;3U8Xml4^f*t1q^(*~H$@pHl)CMwJ*dW8pFP z)6-mlXZp(yx2D9<1W#7wLOWewjE29QiwjM)z=ZSnAC8U1!lSwVmB^`4yr!mP;_Q^D z_`;Euy)y#NdxJp@g*ecXh|1BN8=l^c#f(E(JPr<`l-Yr|@T42pH*p*p7{t%NWH#*POGt zA$IM*%{lStFRXIE8`94m&u6zY=(Argpvu{at=hPFAj6016W@G!zwHN7&-d&s`HOOd zOpyY%uQ4x^LNBrQS}<#2ewWfdqeX~UF_iCYtx$$fDj;Cp6O*}7Q>E5n4qwOyGo2v` z^(W#y&xw5-Ma`CIJ_Ch4QzxtRxCtk1gkrb`A^8IT;~JH;H`gLBo59Ggnbe=cb6=y) zWe3z4MMNkAGOtt^+MO-))wWi)`q(7H=bIj8F~IP;)(I6w-j`VK)ui)xTdGz{T9ntN z9}ue?C(w(#-BTc98k39hL8zpVCWQ2m*6;AB5`Pu^HsTHoj6!@UXZV^b$9 zLSo?I;l0y%7ak6K0(1khnAiXu@~>gA&0R#?55*uJy7Xn=%1H{idcrS+Wd^?s(H(y@ z%j5WkivMen->~w6ypfnRIHc#9r_TlBBbFY2+JPj^oG45lqsF(BwK{Z{v*$x7l(xLc z=RiVjU^xrGI1Db;sBdHEQdO>~_b!JH3eB2L7ge}!dy6-C%Hj96`OUQdaX5v$ib`sq zn~ENY7W1-n+lF?-;c(5gVRx;ZNsO798Bw2u(sTc75}VM_&b~R=WFOyBU^atmG*rq| z7ceD`d9S@{)L>6Jk@{LX-K$AYy_w!s0Wb8CtK8i6l>CJ{c$s0{gspE~`p;1L4XOUe z()CHd^!Imqftccxl0M1siI9iE$3Ldj**8UD#5`nNLCm;r#b#z=@$&Lc-o6tGw2Dx0NI1J9Xjfj(`UD^V2OC2PIHANMeh@Glz) z{sfx;y~9pc7{?n9%F6h;xq0ZDKxeDF_sHC=aMn!7DlG!1r}bG_*>@7cq8;1uIV$NhT zQdCK>{Qkl7sHY|-^sB3@u^Dlt4fy!DZ?m%*=I7@lW=hseew=YMB{Dm_pdW$A;+V&H zlFnHFy^G;LUq({ILX)DRZiBevqn?q!>tA2p`_*;a)6>&vLA1p?oFaDXTt@Y_i>vDi z_(#c&p%H|h6heT<?ps@ap z=H}+E?gd#KoUE)YCwKSqF8r293Y4*1`dtKT8t&@#J8}6WLvwS6QWNztcdW&>mjo{_ z$;h0CPRY@ie7LT$Tg@dv8h4=kanAT%(>wMon%t4I-qpuNZ2@G@W{0VP^7cKhF4B?w!`%&&uYc z49S$FwRi5@4M`68X5ri=;2WQJm1}t3YvcQEOg%D>f;^<`_i96FLt^+=GX-M#rQJRC z?8ha^z$h=rG7vi3qz=w4)&AX#rKNHe2W$Meu;xRlivJDkf6)b z7_oTkSjIraJy@kWH7AH zeR=sKb2C^2z5kvqn$~>Ml^1zB6;w&?Sl+i;cDRdnEHjB%&UqTiW!SJ{UkVDatS<0r zA`|i~Oi0K6K`EiG4X7`jLad^r%m~`0q1-WK^xoRxR>?&icVl_c=`n-&j7D#qze!U{a^XDk;CM;zF3WFVLF_X-MA562uj>{Gt5c{__Wy ze~VE-ZbqzYP=!Bh5>&apO$A&x)s2ll>g(*Ldi)*B&)rsfIv9eM@saSl5dJAC6PEHhXZ?s%a9$#cT5g^t)VEzv9)prU&kC@!Rn}N-aF6K-!FnYq@u)g~p96Y!xN=l!%oq1R6bQ18J#Vb7*ZE-cX zl9gubpG9}pUqgaFxxV|n;IZ(2QKFfQmN?D*xghPLKc%DnY;K<>t(3KBQn`MxW81}; z4w@b0w=n5#Vbw#AJ6ENWXe^8~oGka;MLCRy|E7{%}S z+_8a46=JMj6gL%c@e|T`)=Rs*vQlpN+=!Sh_?5eNZQ-H=P!E&~WB-{={jrb0cA}Zw z$5MIeW&9q zo%X5rJg|+u0Z$1PgCT6J|bSj69O$-o{tJc8S`u0Q^H>075p9{j5al32M5 zYQ=@vo=`-Ox1?TUs*GovpGs=%g0=1nISlbVdP7!>5r^42qPOH*frzF$espl=fg`~y z#quaa+&;;l7p|Naen%!#Y-PIP`o`k*H;c<=k8G1y^j-P{UHOJxOw48BW-f0J{BTxt z@$J{sKDCIdhugk^${eg+`w{M>X|bVPx3T0d`GWW?z;kmBa*m(^%G~mc(Um+;@TM;d z3mX!S72Mm&oZUTU5r70+C=hn4iI^0Y?6+MXy)u5m=BG&6(x)|cIu@gGB1uxZuvlMr z5OmbAbZW6WiEs-|2?+(xQpV?ePrFBAFCN6}z|ec&sh}l1gph2}_e$EYmSu+I=*avl ztul*C1}oZs-sIKDE<0_KTW~DCQF50iNJ=B4t2WhDEzujeP+Fm^GR^zR8Nb)8Dwrr> z{BYweE=P5^?hqn7V4fu>L=((MO8e?xb~FbQ<93(wTT7yJGRhF86ejo+0dCVrh90c1 z%D!s7VI|iSXhVFe8!WSbS*0q&Ra_hQW_>hJjF^9EIkKV+E*<(X{@~}qYmamjd-{;C zI-LV`oM!ylQAqA$nc1rY>EFde6wg`;`wULrd7SG zxzGCqk*F>pKb0mzk=C0OcgIEN!K6Z{7sGGkZZ6mZa*b%qtZMwChhiKu2+h*@ z1om6ypmS0Z36I=V7ooGQLtbfOd`Wj`q~LaJ?yNPk{sg=#xRX|yv!AnK0d9!Fg0Nm( z<~K9Xw{D3@@Fb5}Z9;`;E1d^n)iewa#*XHkox3;;ex(R-z~x!w0isg3Ny}w<4qzG=%O|N(j6>p{0!w`@LAI!7axujZXo&k^;jOYhF{!uyt+4dN z+%48hFLM|Fj{DMC85+&--H$;esq#b&ApstZvLor&u}5RWS&>1o^z=7I0w_ki16y8; zB>YR3gbz2Apt)&6_ICcb61>tWm;zd5!e^hih&3x5KH4iccZlN}qI&NeKL$COqWF+& zry?)Vyp1Cou+s;5mp1LEA{9d5va@*tZ8xh7qotm$Y>-9#!t=c&;dYdyZs}FwKpE=R z>CV=t<+G?$Ee`g;L{&KuE6n|KdJTAFkmVSZbM-r}NOHR_=Wz4~_E8%t7A zKiBP@M;gu~|IN5J@!#DD=ELzKj3DUxe(g-0Hz{f&&?*^#eIJRa@dlB6ztjMEk&{0s zpWoSG%5z?wH07&U=4gzrJC!G9Tk~oa+X$6OzbEN(TUG&r7-S{>VD^l&LF~%dnRQ_k zUZM>f^*_RUFY2~lWFol>?|<#Arkw(rLvJ337QJAu9rd50NWn4BqNo3KRG;5E?qEBS zTfn8ms&l0es%}%?cdE7V%A*|1gBTtRh^F zvd{M!SOOs+B+ry_6B9CWVZ`DLe$ws9`$NHeJHpPn$nnvXOJBdE3PVF^y=l0iV-xi_ zAxf#acn=;BTTG&YQ44&fG-Fhl9S*QF)K~BqHuH4V)vc8Shbogr#fAv2RQCA0drBgy zhD#U3n;?JhTQv-u_OFPovAbXVll}p6abxL?;L1UgnLg~#Smq@DC;l##4zHc1heMPm zzM**AbC;)$If zGmE3vUXvgzz&(V1OS#!Qfrr70b2`*i^J2gS2yWjeJ2pj0HA< zzn1IITLKj|cY!cO7eX(kmtJs5ulFWx(Lt3LBOBB9(BnwAPAEv&t*G`e*z1>wx;>`3<3LJ=fGNum3Qd}w@Ln9;N zr1<#Y7$T1eHUH)SNAbzxJou){C`+I=O!&Ghq>8!B!J=(+Dxz{6(;SeNjTNr`9`8t6 zln{QO)uL(TkUZprx%X9NO2h7=kJd)ox3vcv^;(-Hbk}zZy!RVgFDkbhme4;8#tU-! zC1wiQ>Akl7*X%!3$P?=tu_n~n!kn0}HEvVcKqupnB~#F9m1f%$^wAhdFEY7oe2beZ zggW}M`(+5>Gmq1umJ-M4Cz=ZOclEdf3kwS+voOm9`bAB# z`aA@OnJU!P)tiIL4eD(8nk5qO>lzRhd`m-*cuzMzbDUY^^WzFuIfea~0QnChDl-Bm z!c_cTspJeCKUUZt-UOtMf@Lu7!?bh;nv{l%p_vCKw4$oKaYqf7_sR#=da2CE!7GL( zrVR!=2`LGsTm>v-&aSTT@Rqm;zL}$yzU?!S*O(w!eXZ*m)!{?U`8j{x} zf?GV}gAw>$LmsgXyh^HroOMPua4D7o`EVQLmb2`6f{Hp~mO z$`zl5SdcT=)9<0(vC(SINO*&q6s3c}6_%|_MP80tS5DI=eb%`Mo0&G*&p*7%SKbO+@ zLiM!?-nPl`#E6O;0Rd}d=iqvp0Q*9k0JYgR`$6wW@YEuJpyS*tiW{#al{`=NA^y$W z0u(c}kz3nv;OIXJP1~@2re>RLSSwo&?wO`^`ZjvEbrIMm@hULw($wH=Z5#R5v`6Ep zUPwjT89j;jK&|%-MhLt#&|~ph5vN3p!()ri9xb+}psdU(<}rB4>AEebk-H{wJ!M{m znfemZs44p}CDD}5dXKpx8yb7ivBHdtkNXr-4nczYuEpQK3X>|?Dg$?N^pWD^(JEq_ zr$tEp8xafnMZ|DHGwH^FU{g`)V_vvGI_z3z6rORuD*_rc;*bGpFR*}XaWdIS0XE0y zKlF{nI40^nyyluw5gx0`93~$9#L+Pi!m)rcoYv6uNOx-L4m582a2cr#q=T20*MiI^ zO_oDN??D3yo(^Y09rU6N}S`;pBPS5A;h2r2yH!ICwT==VI zoTm}mI$R*QJ>U3VHJY3=0(6?F%Q7AiB+?@e5ahv~YcW6U_`h~aIy&-xp?b5*2@2@# zVH}EG=K7bwN_h5GT3;z)&n$fq%Y3}Y*fby#;J&E_TnpsZmey&#ZgEwW6wtR1`S?0& zziwE6XAli>=2hnht?SQSHH~$7tIeaDu12RI2S`?{WLzW}w0T9?dD#AwP;w80}s zYns!+UwDR>yUAl9M^3`1{G2mh$3}@Yv&pY>w{>fY&P^2R@mz|xuui`JqT_L^NjU^{lm-YP8+s zM-Oy8mjo!AUqjGoVj@x&%ZX&blFUHY#ik2xXGC|<^*%^ zBxwaz#;KAh%FD?mBPA6_y}uhJ2tS~TOG|2IPMz>KGZamXkbMOMUk(^gs^D>JR| z<6kAdzcG!G5CF{OX@*}3>evC>e0LL>ruY}`TLcAu4n<~efM@Ceg#l}mu)Fs!u%UAo zcqV9F{#f9i3ZpQO2?VxL)_V%oYlyKB$|@`Pw~2}VreK;h?b!b1`M;m8>;Ofu#NkLo w?Z3A9A6D>x&-_1o{)c@39bI|4gL%bZK-{?SqD(pB2JlgmQ-4-2V;1!P07bi$SpWb4 literal 0 HcmV?d00001 diff --git a/lib/spack/docs/images/projects.png b/lib/spack/docs/images/projects.png new file mode 100644 index 0000000000000000000000000000000000000000..bd2971ff625ddbe947bf78ec5a6b320c894b029b GIT binary patch literal 69075 zcmeEucQ~Be7Pp8JL`ekEB_a}{_vjJ5MvdM(qZ?fik)sp6i{5)LqeKY?(HV^1`;2bJ zH#z5?d++nzob&zj{dqi(dB*$hy7t;@uk~BM?Kc%AX?$D?Tr@N^d|8>ds%U6fB4}uL z7Vlx9o-j*0bD*K!m$sIWP?438pi^;nu&}l>M?;hOEnW-zz1nxu3|&=OtAKklIBmZ@ zl}UW~CX9|wqw+zl*qh%to_wB(F(=V$`TU{zYsu5la?I#D6SgoDAPXC*y5>|*AbvdG z%d8Tp_n|i@OT}h~2 zZy+)%DnQw2390PqqHm8^-dNPwet279LPs=kiAHx!WQn_W zf^A~OUBns>z8ifYlGotZ4MKgW1(i(j%HmLc2BL}OAA3~Wp}Fd2WoYz|d=hHrd*YsW z@7qH(cs~*Lv82$QZ|{f*2S+lCyG9B4&HZ}5AP9$t#Fc2+yoqd`-{A=;yh_|Swz$b$ zzktSO7Cb&$Mx#`G7AB{%et*}U3use|J5G0yVAk6!Zg=lkuu9CHkVB5-<=0rAvqAyG z;Q*ey3ZEA+TPv+TgP%l3ul4j=ohECq+++Rb_$f-5v)fI;x*QumE#H(Wcrr-%MsqMw8VJ3Al z!L~CC#n8BMC%VRCh{>k#vvW>(^;F!JZ7`8=EsW*SZ%tJ?dir#7p<^d|OR$OKRI&M| zag|@NJwBcsbKGsZ_tAJcWxh)Ojchfqp~6d+dy1oxzAwRH({rop#s;}^4tJ}XTG`(T zk`gj~AXe>;>XXA;`NHkAk}S~5ah&3D^pxl>Ki&Px59sv@>?CVwPToKlKA$o8TQr*J z06RJifDX9hv$|Uph5@lS#|7TgC((qFcpB%p;!h_0DJE>n0d(>Ux`i|`cr+4egkQyJ zd^8KCWwF}wK1i$3BZmcPdsDDeix0i2DQ!$@DSFV@*4rc zuqTAHgb1P)AAYt-_UcjhrzP5GVr#}!M?+^oAQ0G~t*@eJl_L~r#V29I$DDcuOFI4* z0)|hRC$=0XgV74b2;1M~cRZXyXH1I1KEk>~hw(9pgO1=?05?0irZ&cA&3y&znhqZo zET#_5N(%KLd?Vr+EcZa+EOIK0zK)lUGOC~Q9JWD#uLn;>>B{>b@;!5Gh2borT2>T4W_&u^c8 z*^+?=IG9p!gz$f9Olpj54D*Pa5%-bVV~CN-f2O5M_cHPuJxTO{jIFGojI>OmY`MBWQJB&E;xV$)UoaTU}9AjRTjhI_5 zmg<*6fr-lrCL8+GXQu?G@sW{{5s{h0{M1#$Lg`HD3$HC*4|ZD%$j9`osOH|L1lE77 zk9UuA4?7E0Di9o%*xH7pUp@2^M(`tO5b3NEz(!Urtt>&U2B`+w^XdZ^;n0jW8eNBK zgDQi(MT535uZ62ezSzEzBFg@eei6t!2+FHAtouPRSWZ}%SYi0}lxaL3HZq*9?DzQ| zJx-tia0&q~q60YW$f>Y0t3FgEJH`I6e#`C5y+X16SmW_Nw+-J82QN2`d76oynVzXn z|NHOXk_Z%7xuTllnnFC&FO5I<5SrwFJe8Wxy-Q=m&299;-|BKySmKsl8mvD=JY<>TzzH&1v^BPV zVEv@-y{*&yS4gZixk<8V)4)lkc_K+SQ@@;D-N4T0$;?-#q^a?J#U|-Sr|(mBrL~z$ z`E(j|&u97PoJU zT9w+*)ymyt$7-eD?UlQoW9#Z$Ag+7LhWe)KWb)SDZrX0^@MSFC&dT~z=OU-3trcYJM+4NTko;5M+U zwf$8V7yy27QU&{dRCL<3Y`aEz*fMh-PTR>g;ZP102c07qk(fyDn_B`$yng%{nj_cR zRjcJKa1Jfj9L5Pc9~M*4dvS7cQS6sNWkH^uZk>d0>?AOr=)TFQOrI6lqu$%hKFF>f zMPxe&Ak${ka*W@%fV z2O!*F89tIUYpV2i{3~%zNe=C|#&7*5I(=VF`@;1F&Xh`hOP|#X5PWl5)$Cn}0ETCh z-a`0S8ZVr9R%sZ+6_Vl|U&qAoGdOv#q~?z1=E*jENslG@ZvWEjC9&F$+G75vymA?h zNLmiRvkREDh4o5pf~%^R+*Ja65oeiLQ+X?Gi>JzN|^LpWKR;%=^KqfS&phVS&fE|)!(aK0K5j^ZIW1$v0w4H^ekSb9Ov?X zy+};HP(TjVYfsf|j5Ld;3VW|onJI0g)i>3<$Zxt2hov>xi@5n6+(6~$L$Lr8f+sSh9TICv#^KTL?MOdsB)r{Y)M)%LY|Wz__^;vyPx zQ?yfnWYCtMOY~yX2Zc8(RPSA#EUiN{AD6x`ICfm0iB~LnUoxQ8W*}^SIy>+#o^ncM z`o+|X5|d(`skt)!`ZLqI!Yds`D{#3EY)-PyVH#&j-+;Ed-6^Q&Qz$;IAL*@+i|JZ# z{_BwD0mW~M!KpM3O0zy!WKhGMh9vu)^D)hGA75N>r|wP#8Q$*)}y5kX!| z60a)NW`>J+Zm54NS}m9@h)Tl|aycr!oxQv1Gs2U3E&_G!-0ea_+x(!=gM~%cADbqF z3?TV3>Ks7=LxOgnJ-L~9HLWJC5yP;yDJS8}D=;Oo!wUyofJj?BaJPpx*dM--0Ss|0 zxG6_240vyx?;zK2D)i+X*0ZmT&)I}zd>pTz+%DHhpGeaR%F~Y1YKc^NsoqYkZg-Y{ zE|>RLx~PFA!?g{8vxZpylOjN`_QS(y5F0%FaNFmJ_m5lWW9D%!UBf7^g(*su7p;g) zZEsjVRDjxhA6_HjArpkkSNZa1uKQnG121bIj9=#!vt;zqqe_4v>Az1PBpG}_Wql~r-8X76X&)++;s?Uzl(9kih)!)0mS5$ay>R``mZ02BM z&gxAT3JMFjD z_T~T=)X+o(1bBsh@8*Br{AZy5RrCFSYI5)ju>W_}|9bUbReuiUwX(CdIZ8@DWg)^L z#P&bW{#9Ox?WdsrOK^Xz%I{B6%OZj+#P;tc7Qr1L%-u#q6GM}IE3WQwXKw+!Rr!>* z@7O_x>FK*_SzTH03V#W5YaILmnTOe9v2o9=t;m18m1WAymh@J(SDlqCDh%(vy%zBq zL1e%v&w*qh@59||kDG(T@IwKROU5SfPyKkm>y2XrRn7X;;O4&xR#ZK3%rOgy0^K4ZuMq2e zH5Op#OFlEqzi8z5)+?W2@Gdr{6=~L0ztk$%>*`~~5b;CU2WubqWg72BDh?zzP$u9T znC}xjdiUhXUk(WMVpl>;SQTMPX?KG-7wxp2+?nj`D<+ZY0rPQbFlmKTNj*ENGTY{? zah{yRf3!D>Md{G$WOmnrNDS=`#$S8{;4@TOfK#&WgrGl>BjJ7NP^<;v6iQ=1%1)pe z)Vg_4I^#NyD?Um;)PwPNbBvZm-)Y;a0BK@Ls~4?o7!O8eL75`9v+v7c2%}^9{k51s zh>_wIPBZmz$30qADV2D6&&P_+MX=wKJu-wd_Akc#`(y&_$W#<0B!Dk^v)_lPCdV^t zCG*%$Nr~U{GP`D2yZD=`9b}GG_&u*5!Ct`nGHtIxbGbgASe)m1Nm73!rc$yQkJX3> z6Dqk-&p7QiFGcp8e7a|UCDorJ%xc7Gd>mpzV~)H$hb~<#bgj5^QnCGw5aR%M$W~Q` za>B80RG4(j^|m#a_a6N9(q+BJ{iFSP@;DY^rDn-i`oGg1ZMLO8{?G1ai1ih;ziE|D z?G8F^vRn+|Uuw)9jB0}q9nw>VPYH3ehJOb1S91JE zLjUN{|6`ZENVM+#I^5uM>C6S_lCT)~q6Y2?#tXYz4Ma?rYLBOl76%I)&X@15!!C&a z#$3J72`I(!38%b`Cg-qm{gGjBcZgdV{@7X+CTcpoD|JNQ+x_aVZC8&Hoo#b-%E`n8 z{wF@)-f;Z0Ss(VlE`IM(hS*f?#ZgOx*XrbUzG|LaFfifeS*`bYTM&<-FG4Yt>eb&F zIe>W|1bnWq#oJJSq^&!Y&vRK1YB*J-pAUT3>k$(hoNqKX% zTd@HVa2eX0g{DlFOeZzF*`$7g@Nn1dE$y2Rn3>xRiu&Z&yfvCEp4>nk`dpOuW<$?Y z?H&pgqyFkcox{)=^CoZ{i*9}gbbozNE9uZL$=0v3B4RIKa=!l4>{PprU5y)i=FVdp zFSBaT^*X+wNj?G^E8S=fh4{K}EQYlg(p*Q)*`1zsHj6`4(7mmPz{oVB|CJrei_k2+ z=pIT1b-Y3zOV_|R4He=C;=%Pi^&D=yQ@pyRAvEE<-vr2}M_!Qz5aNr8pwuB>V~{i- z+T%+1;yN)$Pes8(!4^qAuWlsuH%Yo8^)5`q$;C;F;lf67@HE|6R8EKFqCU! z$M1i5cNGjdY^NQzcDaR(toh}k2Yz|`zsEAJtk|8XzD%FFA&=A3 zIB%hw(ID_|WhtqlBz(%rAtbxXS?{^AA9L8$YPb6|d2)V7+fvI&v*DHsL8m(eWxi)m z1wgvYG!-vT{U;*v7C)HUVHGSp-)viLDa}gDRfa5ZJYAu zjVqZ^)BR;>(8!ObA*Caz&yCWJY0#r{;frW;o{jc6aYElKW%-08nU3)Eu zA~9}5W)&SX*L}%+P_Jn!x3%Sb{nRhG2(h|DZ`w4Yi52<=*N%4YRQqDBL6+2aeDa6B zNAIF5-jueK>haZ+11S6oF0WE&ji)~0?YG?3lC`yKc@P&ah*~%oNM~ zw#RGlX7};=7A&yv8-0QZ#4F*OnL%zg3L*P{x)C&#YZ zfo?W+oL2``#_gZ*DL#%TE6m?6HGa(Mdv_~1=DI)s-OjS_bd(L+B^fpZ-{uMgRNnX+ z_;*Ka{E(*MG#}h>HD0T*eC>^)H!2|wUm4`W6+Uv>?C03%juORJ_Ba$iXLo78?X0KM zA!UUzy4$vf{a|izg{0?nzha3Le4aLJwlY}J{u_ocTzPG6iiJMa<|gGX;mouUY#z_z zgjgAKH^Ubx>1`*NN)4P5iA^N`r7GY)Wxs|97<(oU=#z{VYTB1LCdN0+bVWAk4eo)U zi}hOZPsEQTNZc)FtCC)p;3o6-V+2IKF_|_Rb=#egZE2V+(Mo-(T+UMJMhzz?XQRGK!mx1rg zBI=Oa)hJP%&E1*6^&R&c3s+n+a$yM*gvN*G<_GWLho8^QpOVg%S*aIyfGk3}; zCn_AyW^!cLe1gImwnAv(qt-<|(#DKr@E2t-L6pG0Wd_N0Jxe3s6H2lVY)hG~mNOTXpWBA|T`%0QJG8&s zeT?bGr2d(JDHC8CVSEyVK#X}jhw#}XvD2Z-FbYqv2 zmC&3fI5n8WO*Hw^bFR9$H9@*a@A43IOTbiHLZu_C-|H{9=`DD6dXi-)Bc4>Z+J>}* zl~cns%|ZUi(sXitBu2WyuJ?j)c z(M5Q3Wz^*!?3mp8Z$u{1!Okk- zB7QG>^4SgEGACcvW`-izZTdcUo!t{RS^49v5FNfpl6+duYINIOGz)vQ8}lud1K&JX z))>3&?3D#Le(n&p>yZuw;Kk$d)>)1wz*O`4vGLL>f>4xKe~;GLKGpha2)WwaM=)2u z6qH#T)n+%EznZ+ShV?Xo<$6-cWJD{dvQG`10-;F1EpOR-WJoe(E0k4`>AR><$Hs@& zGFbRLcGG>w>Xw7oIqc!$WW^daeQ#0|uh9yl{s`Ax1_g%E&AP&`qM|iru}-W+CP0SY z=n1`@QLe#49m#5m)`&I9O8vCA9}3@YGc_Ak8z7BmO18Bx`O+d4RaYjr@lk&UD6sje zW;_y-+K#xorX^D_9NipqoXsQCe~cm9g~{L%*wN?J+=#*(6s*dedbjss@NL@J1VX79mGTr2Nz$l!%4=8R;1E}vAurS8v8QKK^rd?VfR?BH-CE(97IbbqFKl4ve zp;y__+GX#gBHIPG-2uyP(@-J|X+YC<@5g<8nl?fZg5b-mt!y`&;IR^*A*{c9b^JiW zGfYj66uvdF9R5@wm{{4$I8yYi@C__g&_VntL>If{9&lWEs($7>d}$J#Am2yj_IBVy z&|uCvOMRgk)){D`-s3$v#@NY2_~YB7XRwp->6?Y%@z9U9X%F4nCJVIAk7yGHm#{uY zVYAG8)%i4C*0(4$uv(`2p4se>Vjud?nzpUiKR7$zZRvOB%b^<@O?BXE7Wv+cdwrFv zy^#QsevY9~+lDSpLBC!rgq1#T35)#2)*>RAsqf`o4kRl8nM9&a_qcVZhgd zs?jGerUNC+<);bAEfQD}0z#~O$57C1)AzW;;%Hr+hXGNiu6c~2XC9AzMy1_%=X%tO z(mWISnZi$l9#DL{>9~6~a=OJlW7xPFDcl?GzqQPMD5R?S@M8l#><zko7lo6CS>1a$P( z+9HZsqxrnOt}okkrdWrEYur5>9#*z}Fowd3Fau&%Q>b@INp{aq$>Bum)o)G%(Ug4P zRgN&;f?9$CuJreI*pfi&>GUrRagMu)^SMi_)10hNwD1`y!F)M~5?o&^(N-=$9Flu z*fBpKgR6j|?Uexb{$#s9o!!Uws6}zWhKPum+px7D?pC$>>~F{vZpY21WHe6CKj|(!NYVS;yQ6?+%skOM5_3wDrJM!rl>(mvKJN4OH zY`S5NGGVmug(Af}y6u4wYGBGOwddO-`TVRQB0V z%BTC(7Loinm9?u6!`r;$W-Slf0(}cLL6PEj$Pz`6Ys6{~QKndMYxxFu7jaFyky6o~ zL9)kcwg1DcLFiCt)vR%ikZ3)DWU3_)d-eGm#`45hsfFK~CahYpQ0HVDwGe!RE;^gF zEFW~zdkG06%o`T{jDP29B0bE^cNEBJ7GOjenfw;a}& zSeqE)Q%)#v&56!*AYWK{#zCUIwK~>Q?j({&Y(G%O{qRDg+FXiNY$c%wmYl`MtO`!B`)EEuH8%GQe_HySDmEpwrDPS0`(9Yf1zlu z5i438uNP4|NolsaO^vxzlr(j>1ti}vPSUb6c<1?EZI#O7C8xMOD1tVQbFvG81zHp+uz3m!+# za8tap0jH$-(da*qNab{2v+o?l6s|o8PBd`RRtVvmlM18(^gIZme&|Y)?^$*I>W5?;AH5v=G4Mt|(7IQs}bT19r<5t2fwn8M#F zbUvh(Zvoz;+`Br5`tt#!s3|WqY8?_Arf52YnQGpd(Ryx2v1Bw1Nfohqw|TjJanG(p zO*q-TAe~g;lVlhfHVn2Qjjde{Xvx3YDXAbfm6GCJ#%iS9EWw=d{!T@m;!Qsom$KtU8Za=S*53jMpKmq^Y-gm#Ke&m}L=ROi=byH{9p3tQDNBKPXJB zl#VA>^jVEB5d+N|DPuBD~5v$!)2^~2M(PM~Fs%TcG3mC~)%%RI z5f3Z!GczL! zwZFwr-_sc#%r_Z}Tdm!V9U3wuvX6P!;?Dhf#X&W1U{2=%$;sCySqg152O%j+b(+nJ z24f4(p^3K{oFHhP%7B7)?Ml|&GrTCNAO)z)?S-R=$UD_Q8j9VOmcvb~f(H8t`#=%= z)yLHa+4qrTK*FZafnW)K!^~4lp9nL-lWSSmGM2cCZJL(UFt2m=V}Es<#fy0u zTk@T00vw&di!z?tg_Ct=IO#J?KGilonzojW7z&|5hUt}W;65nIjiWOBCiE-mJ;9A* z)|#qsoe|kWx4lrDh5*12$>uJvz26GDl$pa%3LPzXJ)brt(9Tl8iPTUrypz|pI|`js zPUcc}0A;Y*cZwV!vHK+5M-i#u7pVMZ=EM`} zY1hCnpkI^~PZJ)iH7M9K*@I#Bwo-jW0w8a`91dY;`O{rS zUc5p3R6BiWIaqdM1cbcbEIh`+bdmkY;qs>xUpIu%e7D~Jk&jj;T+4>3q<00c8Budz zUprYl_bn;b=vE|AC~P+0IevTNFINs>Za5yU4{PhZTX7#tOiMH()Bjk5eXGf~ESs)> zGU!u^@wA~Sx5ejJbW$5}6j>p$Cg^yQS8T~oA$s_B@tbTn-) zUUy4Obu6L0gTDTIS{D3O(*}y&9U;6Z1hZCPZ&X5|dFsIz8ei_QNlgviBTCx6`P++R zE>W%$%?jSsIJQGJf_zZ~_nc@tR-9I`eu?JMf!{=l?lhGP{2icvq7}H~DCJmA0TX{o zbMr!0oR9=w;%N91b?|#68odUI-iUV?W*nzjPu}q7K$Bf%6|pPGeN0E=R6utn?1;On z%?I-#-zExU#uX>NN{Y^*>F+G1HYcm9j{a~!Ec<^L)~_%{0^g3J?}8hkJjBnHcuO?P za19*VU>WadqvarW`oi~ptn9v`Agyy?yt~e-*A~C)a9GQRf`%R&1Fm`L9&d z0-Y%&`D%z87Uf%E(-$bb7acSPXw({iZoJfe*p^c{m@`K6_CZ-VwrI8R){{>rlam?` z^c$YemZ1W2Y}Y+U&30Yy#=CnyO0@|WiKsXP&~Dy%xtZy&m(YJr>CkSyvT6@Ma0`eK z0Z@J49Jw*+(@Nr8m-T# zQX#1CZ5v4Ywyi)<$A%G5M(jzccL zVZHdmu&xEv{Z(EsAP}eU>prT-`+>A5zw2>$X9^&y{9)P21&INk4o&<4my2#e^;3;e zmhiRaHYNgb!gPls9G}vWV{z1xX2xCEBwyULcu>m=;DsJe?td6*^E&%%S8-6wx-|*$ zxmcDK2Lmz1QK?vasRiNQG@##z%wjrl@q4Y^525N;vqM>(5<}g@v>eQurImM2Z>aZL zx&_kdwFyPG#MDYO!A9Epkgiqsia{3Y!OBzz9G%F<2vQaUyWwr;@}{r1Xyg7J9ZT`A z_*YKIHqXsE38!)2Zsv7-wxw338i9=`XQl?@kzs}yjFWEgExK*K5s2X0%UWh_<3?!Y z_`fJ>r$21J%_c`hgoz73fy8CkW*q7gN_vUA^1`=c@Q-^GGB=CZj2{P6X@Rc%h(&DL zltnVb2d(8T%NsIAUFKJ|>vDY7x8K*p<=1FeP1W+T7R-Xlrxmx7uHY?WdQ-P^OL=r* z@_jUJxvAWQN*>?7wY0`gzNL&-HTwAR7xAGA`yEUX_gU*cN5*bI+jyy7ve4(Obzmd~ z<;Fta+5D>N%iTCaaXaDSkWf(SWVPO!%pc7SgF+Znl*8?Z{92Ci@TpXmBR@S6l(HP7IwoE7AmwqNhi}WQG9dB^pwUx7^Qn zopr5GceSA@mKokpUX8!I9RKN3`#GYPu#0-#_-ijOB#CVrQ>b^5Z`kU7tQ0sp4v!7HMFa0MW2PVLy7UXWvE3V&@kke9s0Wa;)oQji+0$mh&(iNK_y=?(Bu0KDyvc_nqJJdwF%GHPgMua5nlf{cvxO6@1S; zP3c);gi?xh3+lH$EKqn0;>+ITsvf0X6W6^sD>^sKH#fOL3oRL@2ag4M4TrdYbykRA zO!W9i0n)pxN#py3Y+FEMC+YL7hiof<;fcMsGwgo=xb^vv^Ud`>s_?DEEF1C54AkHDv=25MD zf@hD%bH5*0Y(?-TH$XiZ?|*1iINhTSjkHX+*5MXiw5yiou72O{<2oP1X&y_cx*w&i zIz@V7;jMa<1K6MIG^Rm-x@)c+b4<EenWx@!2^8N|o16vw=LX_rg%YP&qWD^70Tl<7=Z-V>iI9=}RDjJH6zDKM zg~fVY3HUSE8&^r>><<+&W*X^oPXbdv9)=bgx*A7ig_T)mdUHHxex_&5 z$OLHj91WGY`<3z9ZXb4Kd!72u^nk0zVg#pUPPHS)ukE$ebZ$Ohr0i_4zadZ;?dHZVoSTd z+%y~-%S@bmGwFrX8Op8}ixa_jgi0;U9{6vh%DJZnQSj7PnKG+KPGl%olZO#~zK3FD z&AHpwbqpC+cHF>5K;pGNl#tM`UUg--`z^VL#aNkRhd+3AwfJyfS){o7h~8GedVEjc zG(^2Z6O8pL7JEN-UrpZzY*@*@6{r+cs8t-t^<1X<2FXd?p!3a2j}|{IV_Q_jpZ1q9 zuo-LC@q02h2MqFGi+q>+fTR zfoelVr21ncjTo7k%^+3V`)#;__H`N>Ia&r^Yz~-bvdM4)Zg8#iqNE@%qo?UWE&XnS zzFH07&2#m>0()3Xn~sRR<+aw3@|e@~e7%$(uQ}x}5<>w#_w0|Q1+AH9w|LEZQm51`DXZ=F^XU^NSkJ`Nw5#dX`b)~OTMhNib{gvzeXKFPR z^fMvPU!gmVpYOT$AjF|^WO0;MuilRPEH5Bk_J4Ko&qMik&~)n;QH2>ELQm`WGs{L+Rt$;FH1jWn8H*rJR7lRfMrRrKGpz#aI{;Qr`GpbCiU$B7a-<0{Moqy!>=LY$|aPNQg z=b!!c3)Azvmi+&-KVkyFa`^=0%5zWYztF?qI}FW3V-X2mH($;AJ7Q&sYCxIT@GeqF+7K=RZ&W=NoER7^nd~{AWOaCC7gx^p6hxv&;U<)BMK{{l6`> z3hQoE^j!t!BNW=3a*MoX>sQNHAg|fZPt6C9$YE5AFJ<~8IZ#=V`-FLRv(7*7!*qE* z|I;-J7<+!yJ>O&jq2N)tJXx2A6uGqjml=Q5EH;HLqF#6lV*@2&;*q9Y!pM>g6Ii%@ zvO#wyitKHs%gyTx)r&^og$@#&I=Z^nB*b(hmeTnYP<#OT!D?TNo>0*tGDAP>pD3x# zRH?Q5g1KeQ>C|M+S*8E=J|FCo%rND!{d&=^X+5D6SXGV?(Ja?%l8L-5$V|Y~&V=1~r!Rip35+l&fA5KbEE{>Vo((2^20UzI@(7X@gl<(z2l!JTt z_H0gz^-QJsfDnUQ59sX4%M2uf%}HBGxqe95bH|#?2L2e8)fK=AQP1h+-T0UQ1_uj! zC!um1&r3%}0-=d)d_f`eRt6|ubN`0vA&qemj-X^hkLARh<#H5@iMYPQZ?X0Ac(U_G zmNCO<_;8Bn-p6O)=#b#6R$Ygd?tU4x#HWq<^7Oko7tJf|w};J|ay`rM1*HB6 z%;Zu#vZZNEr%Dafvc^UBDkX-ZcgtUnipUN29=6?z6TwF>k;i?s7G2#@afKayQKCpQ zsX1@tF`=S@r>wHw!hqgro32U~i}`cSQocKNLz?Rnd9;Z)wTmJ^3EyZxZ0!3~aquSf zKG%1d2KlSnmSz(a@^>(We^Ng~a0+U4SM?Pu@S0O42nG0!^{X+9F9f!(D2E2e4Q1=+ z(wtRo#|wZX;pk+82?(3=_KnxDom~eEf6E){VpVGhZ$T1k`tTVUSH$l}wpbNe|3F8G z4R;y@5tz$|=X8uhJQuen>tF(%__992uvx||o#()Lp0ReRJRyFPv#9248rUgc%@9jB z;DsX#`+~<=)5Tb>_(v4$vp|TTOr;}tL^6>Ab7d^Ak0#RuPT_^18^8K!C76tFV z918YjlfCxDCDorlbmp3_zuGpYeaJUwm2&||`nN-Q!Vq0LCTReK4>rFUZv|+LohYZ= zc&G&FZRQ0^lCbxxo$maYo8qaTeV&mwGpy_d=WyxKxa%T}?922R+v3T(UEhGa7p$j< zQgRl4jm@yutiXGCR);yd{1qJmiU7b39@1oGIvK_!lQC;cHo)KY?bBs^RroiW^P_E(^{EM+d!I+iESd!2@=K3evTomR1=_v zKw5>5G%Wf}qt>jYllMw@0oD~ZG{MN2T2`zXu_w)iXLs&gP-{(Fzx0E%PDo&FDQJlE zTJYiq#iQBnjqrbQ0rBr%vW<`UBbW1YBcN6%MQr!EK*q$LD&KdFVs%~$m=Ov!PbtV3 zA^z@;!0%QV7fwkMPT8Z;9#%NJ*LuBpjS`2j9#Cl4b-Z?)#$q__FmMCWT;(dOpDt{c zdIPM{7hGrX6|{_O+KL^dCsgyCHSi39`e}L8?AA|uJOZQWetWIs1mc-xY;8jHPgH=N z!MK0KKf|j4 zA3PuUV(QC={l(R;BZIbElEf5LT0fDKjhT~-zs*-SM@v?gq9ONILqI=$+t0A9kx&r6 z^f6(;p$!qa?I(VCgsg{L3WKi?TQe$-@#I2jH{Ze0DJqVyvb(zoRe`ozvmooM^5%)v zRu^z|Hec{UZQI#Z>PAsPrs5Xh{c0>hmH7i!YuYF!D$7R`C;^1jSpzL*>`zchLi^~v z8jyy7x&~v(fTC$nL|t<{l5^$&=#?&I%A*Zo<#cmW@``R zY{5{EFB^9Vq&<*if`4P{HaYc^fkSV2Ggqt@7n@>cOl3IcEIs>1#`Qx2i@mKDJHvv_ zR0;bs;?wl2(Z=hCHr+)KX8g}d)?@gqPAp2OMR>MrKsPBexu&JBbtzlt{(NRtuwhU@ z99o(_d_ctQskzjtTm7oQ1`uLx>5k6fF+VTVwdcDZeF`XB*FuNf4GDx#%DGDvn zuCbJEw$yBr-k+;mnGGzDhormPG~Vn3p?C!gADfB%jpi}u2=)C@TCB@D+)1OaS~;ioC& z{wLcCId^*X#zb8wQ&h^rfqUQp8~fj{2FYHY=QNLPocG*hB7pxg5_XF#OIMpeYXR$>!HndQ{xUQ}{EHf(J$fqVUo1 z$i96xWVy>E-K<|Crq|Y}k=6RXXMz0dz9>89yNR_6)&&_<^K?z-$d*7%n~hyY-$($( zq_f2D%V%>|%OZS}oBBqWs!l|pz~7Mi`pd2k?}ewDV##2wNAp!N^N=|9fkPx9VfKRZ zd}fZrZ|t;j_e?i7#k!+~%zktjAH8sY(F4ZvCDGz43Zf&3lde;18 z;NdfTj{+yri5r3OTxf$dqo@V4Ui@jE^I87+gql({h_Y9~f1LzYZ~vxk)URPM5jx}E zG&;Q3Hk}cp&)f*l-p>$&&Q|R0qArN>)!Ee?Q8z#r?LfZtHHRYJ40WM<&$`JGN?Snf z%)G;&PL`=Vs>!P~lwq>inN&pbJ#F`{BlUKlgNZAaT;h>pEWWltEFMgGBxZdFR%1K+ zi#n$s@04t~Tm#obnqWg;CBuRMXEsywQ+Cr?;wmmBCOv5>CdhhZEzMhztBX}5s?>_T z!`@g1dBq$lNHX=F!1nx22%*1V{vXEY1pvL-QU!X}Trqm_B-Oq>xyb(ZcB({|F}pg< zA8-X~`+09h5`X`829+Si$p_sUm;W&Owv%rT^*vL%5>;F1+`26>u$?O9;AvRkZR9J` zYjUn6T&S@gwP#qsRxeiPNK!hJ&@ULiJP>TD(6*Rm8ys?n@Z38PuP=K?ukG%w2f{js z>0E|^566DGr;2A1c;3t|J^%nhaRK-6by-z+UbL0}eA-QGX{7XT`aYqckkhq^TLM0te1`4A{e zGV8pHt~p{HLgiz0WS74WPfIuud0jF6jXF%{V}(xL+&6@14RpkzG>GZxh_kzsHC1wua z43*(R`xHH1q={S=(i3MmEDWHWd<@f>!c;)sH7!*pJMWq_t^ZCnHpxB(uN~2FA0xL? zzXUNOX4okeGPUiw-}$Jr2oKNvTTlq~u#j-tIV0S6`v+p)=;i^7);dW3>Wo*T1h8#s zO7Sz>k@Xno29=lF=nQ$Dd~WYqlTRpof#zb-q6W4|Eo&oFbZ6SNO*PBZS08jfC=A;n zKB5Sj|-$hAk+X;x@1@wA@VOYF&>9i9eS$wf|<@yd}jEpA2A!R_p7MJS$Sx5Z(4z zkAB4?c(x_8B;h&nN}DBzQ;`|@-uTLpdLLA$F}NYFbr*N;LYC+FrlT(q6HgK9ml*7; zxw+;mnikiBbpTl;-Pq)NX;qMVS+buMbi78$3*GF(3vce0Kdrn#9X=^f_!iSf11z(8>$(+-WQ;e9*8$MgRBBT!g2u5% z^c3}L6M;XHUb9SDANnvL`b7slYWPWhY5O9z%7=KdnkJ9kVP(c-MK*UzeD72ENUYr! z9PA@*AxuPC=MBf#{Fb@pYToBN#=XiO{H>PMysnkjlV6(#AGR~2nBU6!Ps|%l7C!21 zEV>U?W~s)504urDU~t3Y0UK_9Md$+1R{)m7o-}&eN>l&vJE3@c0Zry3oX~I7kA!}@ zQL&3rg@Mzkkn1-)T2UgBtP|j{y)A-O6gDdA$t;8bKG`HC;H!bO zMAV(qL-DRV9(eWh&V!YL1q(piy)xOfQnS0-tcWUBvF(l1bhm}K*4lue1U|uy!Xt;! zb|CKOs}cEP*Nx`n0T!djY}fDWoZ~rk8|ifg#hO#qv<&>jCRu=oSHm{`CAM5Ag81FZ z1C@y);9Mh^cSwCLs<~&dl)2GTpmKEDBA7bEdowSy86>M)kIk7BqOgUPDuW@YNJ&=6 zcI;AuK;VV(C38i4Lgf&P2SBH`=>SDscs!MHX?&oU$l@Wo)p7Ts4%Y>_`n|&fGs0)c zE3k~m=Tn=> zaDWm5jv%z9O+c7?rnet&EL;2Y)r!{5S^v0-dnO*WRj}<1X`PhaNVY7H)H35QCd3fdfe;1 zO6BpHp!7E_Oc*M99!UG~WHVdP`gzMyGU}2lIHiGr=9B8W@qf12H5AY56raiF8=eKi zR8xLvim?G7Yw0wxuOPGj|M2zR@oc~Q|9_WiDf(`ymKq&KsnMFXRZFefd$m^+j= zUD_&&qNr7y5;Gw|=&)B2DEZ*z#!J>C&xu4kbFngSNo;N2W#m7Nj)z9JBB((TRbw*!{Pq z4f^EJ9*Agn-63RGyHtF&xP|W*#jo$Ofqt`nRiJ@eGMK#g^Pr*O+5v_#w8ImhYjNR z!rrK6OSa;w;g3W#D;{R%nYs=0WQ0MVWSD058XzkG%R^j^vA)_TGXk_Zj!k!Z1#=mj%gJ zy8JcdB0o|V_6vF9IdnF{@zdi0KQj%LseuajEVt}~@1GJKh?M!f?iy1y}qT=3zy1pkF zovi6xdQ?la|#s#(~4tzAqp1`}bsiH!a- z_gtSXe5c6K4W@OOut^VvF>W9VJq^*&h{@7|t&`h{=OgF_sKcpftTJilyXj2Jm%}YG z{+2o?MY-8|_!(g?((y9n`N_Y(d+z36$(CqSQdW9|*5!H8C2A6X203kEp;;Y&g@SM0 z+Z7$9A_#b+u?lOkCK?&;x(^lz*Fht_!cr< z=VX3CC&TncFSV|)4Az=N8!uC{5;GXPS;Vi6<~zh5=eEXF2aH84fJuK& z8>oZdg6?`*r#Z8K9HkWJ1_w|~vmH8aa4f-#TxvQ;gU-X9aN~`s4|>LP9o+D@DCSD; zcT6C9Q_rMAkKD%AYLizP(d0%?U`sg!Y3__2Db`eGYYKPO$61a&R5kM>6;BVH7qdBY zx}%bOhZOz=zmmzL7>7}AoEZ;p(n;%eCT=`PW>Vlf{iTXW^x;r`Ps&!UT^}EXN~NcU zJmsFr^e3rOUfM^vg&l-{Ap=+-n-~o^g@bqqCyY@|D9S#0cEiDx*@L0mwRZ7E4 zH~GryWV_&?`EQed!jNWAh&X@C%bpa=#C{jbqVa@}(*}kkV=OS2%w6oXk3;%b8n=-b zQ_3ozU;4cW)Xrai;(!-A?5PF=Qb1u*8O~;N8ZQ1pUG>q^lGIFWiJFYV$GzdAY!(jr zbxi}g_(Sb=4f87A0ROs(pG<@nv3`q_Re7e1)@bBffwtR#M^|*t<*)Vd>pNv<~+pN%mokm*AZS-w20|i!YHo(3wupyKHUJy#qFQ5|~-f^l} zG!Dd%3ZOrArMmAHyB}?>B3X*V5B4%#6k3PR`W_c;^|DX8quMl*Ub4_}? z;!pKO+cs0YDwVzJPEo{flad+nS?Ej`_*ZJs_Y39~s5f+L|4^Az4;X@yn6N{=F$&i5 z%HPi~J4rfL`6OdFcc@JM^Kh@V)nf_0QU~O8+V1hF7k+gKfAgW;b6cqzPzVK?wA1bZ zX6^+0D)M?|WAY*v&d={q>HLuMCpCF0VJiM?0K?>UJ!tEEMF2yHIk z$)r?|m03a>?C3TACGa)|2YFQtY;9aj685R!Dgln1UI7GM=OpEqi!+Z+fMIJs+6>YX zZF_YO)Wyx>csM3X-C7Jk(L1L>FBGV`tPiN)%P-fjC3 ze*VJH1jjNiRHMi0g?CEx1#gqdmWQ8bx1^oeQs3{*6o*eo-{v@W@S%n#p9*RWL+W;< z7gB@&oElOQl6EyzElj$zCZkQf0TYKYa)(X;)I~36XbBD^d0YX?H69Np7siPHkgmEX z{n3YgV3sW^N9zCjdsyZf2|AQ=NWtGHb7*5P^bzk)U^15yD4GZo0`SFtE@ zYIS=zN6;Jq%ExfRv`1f=Nw^u0p5hs5Sd`i8c>r+)1nbFyML1zaOpocN5wUm#)Em`l z>pLZ&>1a>4B<{;iZoRa7twNbCi_WXA)qNaD#Zq~jhQ!|oD?1!uZYseGH!Kyy}?4mVw9iD(mVa zkJiedM6Y#Z^ewQqK4|f@CxWOc-CYpbrnH#WU2Py=@YuER{%pZ} zd}Yn*qFfklYU`q@Xg~Ny#)g!ceD#$-VDm$|)-Cd@u~PtxVn1<}+V*4>6w5m-F*z@o zV+|LjC#GYXZP=m7pvE2mTb*UR3BN8s_wLEChUmUzS=16G08e2P+>GrVS~MWP7O<{9 zv78`h%SpG1>YaWgYFQQt%zDY_8LZvW-6!5Ge4Jyp{Wyw??vqww2?|?YrpyS=!}-em zDf;ja*Ac zD^NckS$FEJNQmm(+^y&<>r}PToguMak4tP}O+(|sCM19H^2*W>Xsef<7rx@eQcA8r z$3?%PB(G3+UvYheIR16QpmsvJQK-2=$mF z%?|YpV0Uq!t(n3YrIqe5f*eKgKt*oDihO;KP1#rTP?*y+0`vVU7jN33R>!vx0j0(W zUu_WQeQn^Ympe&sIp+LOaUv~l5u6$97XnW{fO__%d~T1UdaWs@+w7j^BXABQ&AjZt z{w`?MS*baO3V*20QhEy_Z4<#VFg&}@b zEDL?;h~jr|f%JN07A`;9i~JJLb$bSB_#SLQVx+$+wCbYN(n_5Oi_zmcK+*G7#nVuP zgFeXJ#^SKtCgZ8L_jurGOvkv_u8m=&ht2KgqBtp}U!NHEhQsP22=NkYoYp%l92Hbx zOX({+9334dJSJ*&L@!t0jNeyWwvKsZK6!0(!rN(of1-ZD>hFa{{z^KzK3jXF zHLB8cdo<`&jBLJyg@eqZ z4No@XyfjG%jW1sm>oIc>7o8#Up`0Pc!3P}iI8gtohrdoyah#$c37Eoi zLD+I>i_NV0t34X#71)V)e~VAC4ikQocDFn_OQgLi9l<3bVP>oz%z)aou4^C+D#nf< zDeIZdpjTt>Hqli+s;i_Bg_2#mV4<<%dnYEb-3{E&Gn_oJE=43Nc=)sW1W9-N~RjQt4 zt5eDr_|kojZ_xu2ITjHX759)o$L$HH4N7yu>aN}26D*|q+KsSa56-hO+7&lDVP~Q5 z8)pse4@;O?s}39=e-nq+RAn%wjP>3!%kp3*Q;L8Il&l!4fn7#&n#bl%JIxQv$wEuhNZlk?r?Cn;>> zk-L83L&tHE6OsAWXK*SCsST|xABuF2RIyB@X+qGbcSyU+-1B?K7Y*o7AcwHXvk&5j z9A+zn*%{&<1z$ae^MTV8*M6Cd+mc+wGL^J1V9-0$^=)^$`kC zr+p|noPlavDQYeS4D(MfOkpzk)(jt4nYzVW{>(K!Y=}TalJud|XDh#8I0LY}tmoE+-0k6;fdv9B+17z3+@q!iL}xRe)& zHPOYiDXK4JSNDa$BUNy=xs!f|X`SD0mLf=fbwE_azeZmlpo8MNwLa4wU)>1>9-9j; zI^#?~9P&0geY2~Wf#Ot`qO9@L&z0P4KUEXqR}u4K7S*4dm%hxdASWb=MkBq@pcq&Bv@=p4GrW4g>A8Aa-3aj zS;Q=s0!~Pe7R9ZER0=D%2tO%&Wfy_T+^|4DFRzRb;X_QDH!9ib8w~ITF8vYos@vpd zB)3PX5`W>ePnc8I*o)Y9trF`cjo^YokZ)u)NI#Aq zIZOA6_g%6wXMdgRj;)x$ZlcaIEO2E!b_`b9U2{yv$6717>SJII~W zQ6s^6ux6TVDdH#7L##rvE-;?-a_Bo2;`Dc-!Iba^7)wYx4`82u+C23${%G(1kSd`l zleqV>2(3{LLWh8kspYqEyxk7?iD|z+JN0t+igJm8!PVS6e106Ud1hRil$v#k!_2s2 zeKTlo<=Yb>)U((;`_TQyXXfHVDvARRPKn+@dN1vzfP8~lLsi<17$u9tv}5kRM%{NS zrKdD^*x6PNaAx)EOP6iP@%=6i5r5F}G^raceuTHdNy}{ZnOpU{a4)M^nb*dfG&WSU zK+LK$Le}Jlu zq_S9u?H^6CaIQRG7*eJ6YIxP%{F{!t<~al1bEDxuRx1`Al|-=F;UAT<1i+CyCSI=_ zdb2C$q(`H5X@r@*`(Tf2(7QIX7GP^0UY$^HpLL(-o(~yTn$d(GvOS|;nVuoVGOUAJ zc6X&mJ0bbR(KUEiY(0H9xnFK*JmtZ$Q@?pu3|!7nYJ_?3;{^yuQ?Jt;hUPPGt6HwW zKq6kNVEpt{&Jc^u2W;>hwYD(E{;Kgc&&|V^3Wm+JoND{lunN1lzI{)BUxcWqM>+JH z6BHAc%5rgwhhE@XAX8*w#)YW_r|0H_@ArNenbiU#h4jj*Yoo8m|=i(ZR^$S~0!#PWnnaALP|; ziA}7~l0P$-bQ#~Qo|{$O(Ae%bo%KXI?1$LU6`~du6iSEOeaiM~6`P53cXfLOwSx5V z(pL0ip3BiA&HhzEQ%U@h&v=~yfH^lno3hqvQlXNtc*vySQ0YAIr(KbUNOgZBfLTDb zyff9yI5k0NadkAHE@}qRu*&BxyX7rMsCRuPFl*g2WOH?Nr~O@4M4nUEM7Q*&7lJdh zh)dfY<96{064HA+t#R>8^Rylvg4zgRkQII|rTl}=BcN@ZD3{rgziTtuRtJ@&^JmN+ zs(_-HPDrb{h$`|X!Dh3(Y{FUq9yNp6a+skjPk(FoMkjOqzWdis%uhaJ8oGSSMrsP7Iwl_$K3#nyP_-bv-MzSix)g_2nh}0t z{DB=@^JQqL%23g4GZIl_Ad@Sx75=<44ib2l;nOwz*AG%hBwrxZqFhDOE}5g~+mi~4 zpiQ;!Iq)?fr(x^%1cTk577lS%@#|T4Ylk9xMEG9wc?un${Nf*eWgF^0x(=B%fX+&f zeSFIzy#*$f_D%U-kvhL{h+_Y__stgO8E;?~ZZ-{x3uSp2& zU!~~MN*3#HsIqoGKqnlAq8l(-LS9R|O~GdOTbzgYSEk&C;E$c(YzE;b9TS;WQ}usz z^_lj`gADgyq7FcuQjtU*2w(bN*!2%$rxN6-UXOV$w?C*A7>**Z993#o@Cq8HBpKFB$Gh1`MHZMLV}pnF1?Q#kXtGK`gh}LL7>( zH4S3C1^-q!VXcjs%$ce+xlQLnnTTf2czwOe{nL4Uy!`UDV>`Bbrl$v|$K6s>t)cG# z%|YYdBGm#F6i&QmKSpx4HQD+-yQV*YCS|NI6kcOhbWbp=Wcu6WJ>f5oaADyL?O~1Z zu}?R4s(+NI5IlRMn)lW4ycf`aEW6Y^h5`if`|FR%m&^g`45yeB%T=8yv&|*D)1Xu| zw@?62TF*)1^08R&(I zT!{FsTX=cQ&(Qnsn*^|}|1Z2=O&f!Kh+Ek0HDAo6(VZAdb0GR-Pc2zyAk6{YTf)7% zNGHF(3*cM?#bR3f@`73(B>c3vl%iS^2V>apTGtH%?znt;89E|1+CD5&V>TTL?VKl= zRsaGd=xH*s?_?Veevfc8nG-2vbmB>x=}0l(%1S__In*mBz$&#G<&1OvnPV4>elS0E z4;yRMU`Sf3+^`IRF+NS(Q(R{3wH2sa@T1ao%lFX|YfdV(g}!ZeJi;Yl5^dci+4Cp? z@MYqFUJ|_*#~1V@<+BH8`OSRhYFF(D@?_)UkQVSky=Up`xn^;|hP0o?)N+M`qGc)6g&+Gho(&{O~@&Zb6+5`D&MM ze1U8r2fp(Bw?;8@d#<%45+$4bl^SdrWvi-RuYQeYNeRp{e>I+yQSx{1DLZGB6-1^+ z7Y0(?enmlhehWXQD%{YBWgc6YEQWW@;sjIMl0dF6MwYGDpzjR@_|U0W%ymd0M2*TV zByfS_gP_X&2WI2X4($rJp2AhoIvmkZ<<=OtV9l<%WmuO!G+|r}8Z%4oF$)o?@Yr2j z>Y^m+ezHFz3~3Izi63^&ryt^J6cSjKTMw5zir*sH*;tjxmxR1-IC!8$wtebxrph0E zmm`iafiKQY#e|Y5+YP+DAkf7cX3nC_GV4HHo1N`;$vDjYTefTZO0;kB^Pi)`6!8rv z@_czs^u$$v*{=uaHamI>u>_E9vM^;l2qoqs=p4gG(|%_dL@DNB)hQOeIrXRh=3tF_ z!T-T5Dk+jQCG@Z)`pJGO_|(`-ET`g1yUc_gpH;D7c|tH+pzf}UR7iKiij<8jP6+v; z`6vr_iAnXh7Lh+2zC(l>N#4#4sF(b~+MOZJ^8)_!ols63@1^6SheM)_wu=&VjT6KR z){Kv?2xemGm5@zAH%vDdy1yJ%8C_JEq;S8k8AjXXvkV-~sNl0imc3&*m{hPs-d%PcLz6x^CVD%C?YGJM)pJeB^GU(9@!`*hy3@g}RA<9V z)wbdHe?oI;6Yc?kQ0J^&OvpWz!A)? z3|0lnY2;`3u!L3;5UQ}NG7I5#Yw1#%4|P*OVmi8G`~UKtd|)^Q{3#Hqo+(m(KgD4< zUBp4KPw{gj#6x@8ta8DWp)oI#`nuWw(K`7#8h4=nkvkUsd3SLiVRhO!SQ)IfJtFUb zO~C++VG)mOpW4MAroHik`#<{DT1lSK0-SVfajLb+=poY?1YDu4bj*?7@VDD&NZ3}U zYo4g>t__90LH=ruY-y|}N3>#sY4V_PX~3mcsDz_U;engmyL)PhN(+kd*ZsBaOrm`$WYUbG{xTm`NcxZ0J*%{hsJGC&D3aDjyL!OFV7MHlx_N zF%^*XvNX$Y>e?piHI5gwpk2tzpCUkM9VOK3uFFnB{rdK)lZz((AGp1lIQKWvqMq8k z;{8qwFHwrIxyyk}b=pO(Y9?@9fiA7B{d%5Hgz-R9sY4?GI&UI(c{RbOliSEg~XSCI$C zVoXS#u!SC13v-c%fW~c(gEyShmD~PJt>;bE)L+lSi~zsZmu&gwf+nAb`-j0tZ+;6? z^BARmoeLR@Ug*sBk`a3<|KR!YE7PhwHx=upM7DW?zR#U8U2P(dtel-f4v!Vs!`HlPup_kcnJrs+4m{8xr$U{uW7uv*)Jl}^)~!dFanXc$iS&Yf8Q+1 zY_EpQO?rHIx-d(dM=^){fo9-hBTgK9I)$2OmfC|KSHtZoD$uo8`2xdo5M6~xi!o40 z#0(E6G9xFL7|iWiSgRB;Gabhy{Pe-*o-N;2_C{N{kIGTodNHGaLU7@|M|=7C{u3Jg zEOMI6TC9po`P+nGx)-Og`tZ02I6$_WRXsqJM6Tgq@%o&d21Zbd5S(5!mp~8x4zqY! z_)0{#si>DZFY-#2Pm%ch+|VFv!;YS1(Y0{GVq*N*SA3)qf?s%tE~cbrl(o`c}|;njM64P5zrA%Yqj{Zj&!A5E6k7+zOi|kG7KhHJ7dlAc5e$+~B?b{8d$%*NZ|FG8puo z@7lfl2P7L>tkAfn8TBY|V&apTnmR+UthoZ|bNx3vTZnkAqp@rcoo%lc+9>^Kv1f~-&4iy!VWqZ?-Og+b_G~T z(4k{s-c@w?o?e~tjjs9)$_hf2EOY-Du+H-n4>F|irEKQ0bSNAja74SEuh>aN|| zr_hC#Lqh5nPnzUt1me49;GdKcQLrZO8?(Yru-PI68@sD#7T+x<(OqyV{uW?ZQ=&$^ zIm1dW$2|nekx?u*@KFSDglr~Oh{jy#{umSO`u0l=PQD=sEL7 zy+OlxEz|Y#Ws=T~qJip+*j*#|*aPQp=Cn@nHlInrv!7K1_*cJeT zbuHwo833qqnt3vkm<086l?1TO)_A42JaU{%GQM44m%DZv3{IwfE;csu`i&uN4UO+9 zY=^zU?;9> z?gy@q-Sb}^WSPAj;X!E)Sf5nsM%2<4k7i9S`XWxF&fxu+de@X!=wiEfEknGaAzei) z(TibJn7K&JvJk`BI&FCbx-`6&5u zZ8qJ4_sVO2OEWc{ao$FV&&GIrm+VxSX3Q0r099nmJz~|iLe5C5);2949gIePZRq&4 zgKyyug_`J|dMl>2)Zmc*R|s^`BFYkZa4|)Jr)_l*<+oX!AE&@&aQAI$(+%Y(nCBi3 zmp%^S(W2!d*z=Ht7l=LM3cy-N$X+2%m$A6FFjQf%H1DdDZijcCxbDlgqwFSfqD@T3 z&+h2!f_u?Zm8(Z1cD>b%5&L;xM(EBqtb)gAj9sw~E}N*`2ne)2Xpbbt%D5RX@2p}q zi2equx%Z!>R*d%k06sVdEIZkfLCZf~ViLRRtsEvCNEus>s@P?7bvacxYXYUn`CC9+ zra~@(P^p=sWFqr(WmUAy*ABtR*Cc^;k{%`ExqS>eS*ascm1Ivfn&S6Me%RgS!!R|A zJ7Ne}(^i}ZxNXEqTe0P^L`AzX{J6iOxEQc1$kGZj9Kk@V@w!8*9CwoGaxR!wZlqtp zZTa*&s(pW%M&HD!#T@OY=0cGj)$T1K7w2_|xLY|6%r_8S)mbnJ71GO*I13OwtnF$5 z9_=gz_DMy|Bw&0!5Kpw-B5NY1iRX8^x0BUR@~W;CTtZ@V<=9UQ6AJR!4UNQR8$D?I zF5Vw}BiWHs`V03C6(<<2kUrf8BXQ4KM+H605AFboEG`t(7m4YsW|DG?W^9eXD*V*Li7spQ2ZmpXu&bZvKuIoS)y75LvAo z>I%az1X0Vgejx+9SD^05^&*1ld^4RYv78Pcs;eq~FjuddWn# zt4K)~L{|1i<_k`zLWVBU>`ZBF#$x_R&t2w*^0%U`-`8@I{_e8!z4&Gs;d=CnIuG|2 zl8OJwWXo1~H2jt8Lb;Arv9%VP(@}ob`sp^_LB1yMSHI#d7gP_9nv~{p74;F^;3Oq^ zSH7@NL&HaGor;aFxech1VjZCY6K!4w)jhug0zC@pj+caoT8d0bIu+p}z9^_?w7Qvl>KctzcPgb2I1NU&tqe>!$f6Ar#!u`L)~<569b8+BJjY@N`#wSPFWh~5=S9ORy^P*8ePFd;-=0ztYxHH+ z2#;p!X4_7z$EMbzJ<-aQ;;(nj+xD`J@jHEkm4EvJ+eA}ohV+6(Yc zDwl9pwhSr8GS62a1>c_D;^oaUUAwb$%>kcWaq^3c8d|P=i$R73H8iW6l)#l+C+Pqo zb(G9fQnC1w_axS(B;3sLqJ$HnyvN0^k9BiekOy8}<$ej9(-KXR!@ZZD`LK$|%Z)bS zKi+YuaB?zki4%2*BgQdA{ro}h0ceoYm~5TgAtF0?OjY)PB-*$9Vn&xmgYh)Xyo(_ijo5TgE zP6>W9O=(My4860#zPI{}%zo&*@FO2R&V{UG?3!-!y=7ADw|qSq?C~||;(o=*; zrn^{#LT;G8;^z*A@=<6n$2X=rFrkiQKP>3FPiWn>ifezqj=#b{YVS=GjiE7)O}UGj z)UT{)pB()RDIIxcviU#^3IJA4F&<*udhs*^ziElSzuZcbhNq55!7E>_IuL*aZn@s| zYh^V_n^#fC>7v-L#?wd7GVfq9R5#)^Lz)-vFhZA%50oA9qss2vLg{<~T#a~HDr%ns z;2<^)`cEj^#KMi#ih?%9zF}t)%SxJaJI20_ezmF}NGaCU-xPz?3^fGCwB22wEJ+<< za39$em6&*mp|CP#xjDj{3DdzZ8 z4uEP{?`W&fM+uS))n74cmN&wZjt{oTJs}L)vw$=C;JDvT?=R+T}uB6 z9Xk3KlOlhOFGCw;EBtpqq_d0#Y!g@o7W1=_b6$b%H|9^OI%cQonK>%<8|rC}eI2`C zWBJ$(Y8QMje6v|=S}HvJSaIdEzr?u=+V&=Avk3o{>Z|q1dQnNActql2{)vnEpmmb- zz|sM#l*Ii)=KsN-J#%C#Gw(rD7-QpVmeXyfS;I&dO3`n0mK-9cIK1w=wwX63=swJn z-*G8qZAvrsAog_e>Q5zoa-V=b&7wERNM9~7ZyEnr%6&~Oy|ts~hG;wWAD-FYX)At* zQ*;i3#r8c+Ab*4oiC5i$3BC!dp8~=GG0vfa2AMBnRTUIQZV(Pv_j>~`>mDi$Cp7IQ zYXw|5&F8o76XH@&16K7vRjl$@cYX`VTCMbMV^MfXWFs_OpkyB&Uj3)3o&Hr%>A0YU z02%o!|9Yj}jjxWbaPJHojyBqmYS`lFzR=0F4DmoH-yZz4k1g!yPp`J=9X|SDqlCo3 z$+%hqR2n-@17b&BQG>I7_i;kMSoxQJG8b*4MmX&vuq+C&3Nw+PM1F$*v%Yi*sbxT1 zAN@U`zm0Mvq5BgBiWI_uGnSlx%iR5yzWZ|9ur;hPKXq5%6F-lMAlprAOpx2r!L#m( zsu2HarJsT7qb2%!9yWa%`au26`!btuyutmyR@$N{177fr&$0$aw)un0P&Y`U+ph>M z|GAS@F@rhr3!y&!|F@{H4C!LDTb7m^igE@9?U(*_B7_r9iJBijFL|2nJXSQi%h9Lb zT(_*3qhOO67KqED_kuCIZt!4YwZUiprj-Bq-TG%859{6c-RT>SlL^?~&IIbkViBoWRn*n<7Z2Y2 z`Z;I#55ma*P2fL&;|J02^X_Wb^uG+_-w`kuZ_#_2-h*Ae&h$Uwh25$ulo*(^*!UoG}{e|NqbaF~+E4`l!3}_&ok)o%}oSO6~oba}ht*Uib+Ak5PY6 zrH}fM;0XBF`}S|M`sO#H@T%PfR)+sE>RloFs6oK5e^Ds@xgGpJgSvN#fBTQZ_>O{q zpSyqgD>dqw-X-sS76h@vta6~Je6&CKvS5~gE>H>~ZpU>Y@V1P*sZ_QFnD;`kdt0m9 zcu{S+VZm{%>J#GsLVs~TewLb9ze=lAo&ei~7hYF`D4Km(Y?SNDG*G1}pv4rGbc-(enkCDc4KY4Dv4bQIm`+>>Gx|8XasI5U=U(vK37!?(J^DJ12IhCw-lFKVqK; z?H?A*#YO+mj>2@fLoI8B@T4zgAoy`KuTb9bR2d?%<@P@F{q>&JZ)P0FYyL=qvEy@( zum1P-neWQ{``K&CiS?N6MedauwzV`bEZB##hOHg5OPaU*au^x*8B_TztJs)e=@NwJvX|Vvh2SZP<90j~b^Q!o*68(H;eOq(_UeDTYxEam zEmK69|8DRsO2&DUA9IWXU*> ze{QA|X+y0d+jHrStv=9_(nO^I5Ved}a);1LbRSqQ(i;v{gTf2sWWA};b4mf?eHq~H z(JhN=YmNh47KJdR8al11UbWYY^UkjHZb2X8k8I?QYT3sg)bjk72adn`_fUo3%%>>a zA1X0mV~`jNK$bd0Y?=?qkI6OyGL9o*q2;lurGt`Cj6b4zGq=MT>y0Swy_8uR(M$U! zGp~VUW&X}#Z6`B9!bBcSA66IKQh59^+ z-cg9EDBCqtj=oXy+p)5`qWI~E{zQx|hHaE{Mtg_|{mnV@A9fVO>kPd=mWu@SGq3RK zpcQPmWOU6ewNc|LEB!fq8xP5|<%h)AjfxQX$up*+%hcz$2Ee-MXTweM)hX^jZfwH* z{R{d2E3P(wo8g7Y;v)R~5u*%`i8%YQ~HpS)#qVaZ?~_ zv!H9WuD&+M%Ms$PpWb@cB0ge#_$p)S6rN-Fth9tMvag+CK3Ve9oOb8} z``Mf;@jU@8@mA4QCJ%BqiSo4xaPYllCj78@0u5t`1d~^P$p7d0{-Mh+E29FmgH;!` zg)r4a;ua@VIzR1n6d}B!Ej6(*u}UxKFI~69jQ~r-zNJh~dl^-OtQULgmgR%yjrtRd ziTCM!mvlqVRZK~)zg_L`pYo4Uk)#WQowB68o+(>wJ6^ z{HwJMRM|RkgUE||nW~>M{`~BJUJvYSQIls>((fLMv7=kU_I+AvG(}8>`MkpRE22fK z_`IYC-ncWaEfS6ym=hG7E#fACBVDtKj2G^e1}Tqk)Y|NwhN-w#J`h6e!8(NuGQGC0 z9pt;!E(TFczWHu0j>ETfrwSSs+(98rsVkN?6`06l>S+3IFkd%Xb7qgP@=KTE?pv3b zq;2s$ZV@#p*KQwjGAzL@y!)hAkmQ(3VB%IG%%-fQOH+yX-VN<1At#C}P;vG~Y>tqg6d{?)id6hkYH}d$JN$rc! z`b8otw$B`OxI5ZNN<~e4aRA8#vs}+wDo`_~kz+G;2NnCI-7QsZ_u06A=rk&4Jg4{i z9k-*)LoeIO1+&pq> zOi&y7`Ipe`pNHz4L~n*l7rg4`bO2>YJCM-v;6xb= zkXHBrF>$RUP_OsLh5x+C3-6xVIUjM?j_;rw@YXMwW3M)#l&2n7snK}KHcL4;mmB@; zJDUnsY0{!J2+%(pzUAKgQ5+z6d{7@clfE*+IGYSH*COyhq?Y?Kn0MV~w~Y+q=#qz# z$;gQuy*oC36dWFSPGO(AjyiuQ2{Z%ed##?N!R8JiqQlwhr<^%FSzc+Y53oiKTMVR{ zLu56sk&PT0#fjd{&`|t$gZ@6p+52>hs*IdncxcV$h?7nn`Ji*lLWb?5sm4PYC3jP> z^Gbg<-*p_l>21t@FuM75xs&b+d~bsp{F?8OG#$yweRT?B+SqufL@(!$hz1~LT&D*x z-Tafa*-pR_7&>a)rH z$L(63JX5ckg34vTzwNqSTfLG{^*(=7nY`f9QDLA$s%u{OV*dajxah|qNBZV7=sSigEs>3aY`NL6iL%kq|MIqCSB;w7+cCP>AaVmpKUy)!+&SjD%}~4f zZL;$%vGA*kc;)$Goite~@}%*`>i!1rhE7zXTvsdSmN{RT-R1``AznvTmHf1F_w1kw z+h*h8h@q*{yz49a*QdV8))pPR$70_k0%G_d{bb_k=au#O;v8d}<>FBwjJ?%zN*uU( zULRNb>{ZIq(~w@^2Mc#ggxBy7(}4kxGq`cEO_yzu`j8|zYrs!iM%`BbJkk|AzI?UN zxwbb$)Fp-i^~s~UiNBI<-7Ea{gAHG6i^5m$zOuhmsP-@Q2|g;DMH6p*S)tdVcvuxD zrKw=^PI|@gd&E>?fMRXETO&Rf0(tWK8Hf=wEB9&qi0S>392Qmu2jZfyGx;=oRN$(L z66aNq0_@ZZ&;^Xs?P}a6ZuRffCG{c~K6}In>8#_I7KhrHI{l9fyzt5Zy33og4 ze0NUuKOdnDml$4LJ}}fjnc;W2!4*T~hgwUH!N3VToM+W;GPj;bq{pee@Lp@M`uVP8 zc@{227y1b%=(WOd?uBJ|whSQE2_53Z&9A+o@h~(CUjw+P=5t7ypAFyO+FLB3vRoSV zf=jcxl;6qs9L4vg#|^0QOzqSZA@_`0msP^g5=sX?bBO18dIUBFJc`>_=ad7#qcowX z$7QD`wWCgvl4p2ynQcyYF`N%V6~E5rVdc1PmU%#3NPwq_M`ja#{hQ)ykZF1c|WrPp$#6|0ryZe-9ijm|N@FtDE zwmvnffENRHqN+oG@Jydgy`S^IBN6e&_rGjjf~RWT)^!GK#16sDqJgrx0DlXfXhtuJ25!Fm=^^i~=$m!DQTU)TIy2uAjOC-|#3J0;qEj89n(b8+WDLGTwCD-a0 zcf^W8uKsD9s)?OI(QO??TpZYuk8V=YNv*y0FMjIO`|XPqs_^WlTnTC9nhhcINKq+C zDYAwBhQ@z^HTo)_~vlksPq7B zo;EnSZ`qfWUXm@X*ILcDWLx8Ebk)`m_3Xa{n~xp%Wuw>vT~(&^*dCcJz^z6*t#Bew zzMOai#7wE2U_W65;$z%Gcuxa_^K_fH^e7Hc=h-;-SrNMmdjR^rMVQ?okPNW;&^it3 zGp@?^%0A*hZr3P$uh1u6*6`zOsjYF`=mP6DdP#bN&^gY}>A61fX)V_oWw+*dFB0T5m*Nu=kc zdfH-57GyvD&E)fMkv~0)a==tXU4Z?OXc2iX;^^l@M=m07+vMVp?!M=)ibu;IZT%H` zGxVwNIC|r}Y74CtX7MV9-6PnF;DS@%?y=&|DtbOymT5w}e$KCHAowH1;eqD=E5=Ke~uF06{&fi;sdgXE&tRKn8B(vDBb$nz4yCdGIH21HI+|#F47$z(xws*wPLK^mrRLWUV*H0sD%8EcA6D}X z9`4$F-zX|ZAJzHN%%s$?Y4^MtzW<>8K7mKQ28m@$+ha)IaNez{P49lSbt1^mM>DS$7u&%p&88v3})NS_owYF83bOqlaH<<{ZZ{jv;pQoRn87B7nzzF~P zQC312ezVOZ{#mvH)WRO5=tc%34imLG_R8%eDawcI+&wrq4R9E$(gEx>0?GU*nD_t9 zP5kv}8&xE+W|&UfLy6l*vTz=709}(Y*!%v&p&xyk-m%xL0%7<6vG?Zj zP`2&=cqtU25{j%PTai86;6}3V`ySc%HDe1!5)!hECHqeHokS$YHW&ArWDvNXCCcIYeoTGJ`6?LBPq#`<8cbFjt3xSrQJMpo@K7oopj)e-g5qHc^ zK7HcoTEcM>dQ7&`;x#0lKnDk2=%d{|g6vpnP101oQG#WgpY%a@D+Xm)<2hdP7VR~T zS@Y|CGA#6|JLL6Q`ms{#0hp9%AVx=a;~G>`^IPXa+%v{c9Od?QocG@59h+ZyjD~!i z{yfK1F(pb&H%EUG+!#3Wg}t-hhj}%vU_JTf{xO8Ze~ zZ)fk}LT(l%ZSk_)!@i?(h=>3w^YG{LG@&vRJC)qHn%pcf=z!gJHBkQOfuJVYTW_&V zPQe)xm5HEj^9Hw&wpm|?c-`o{z(Y@2HF^Lm5jWc~Bm9ZeKHG(}Y0({aj7<}AytvGG zGN*XI!v!KN+%^Qd^J&5{OA64H4st3`gBoEeHf799fxK{$mZpJtgeHG<)>P&WTXvvQ#c1AtowIpH&8hlSE2a_0LC$&#hN94hy*& zN()#pHZli2mhh54lIuFm{|4H9JtO8Ys|siJKs@@KNNKxNt6s7szM@;KyXJ#XHGKnX z$8Q`S!5TNu5X13#gD9$+x~JkyzVD^#4UW5}~5we^nLd)Bf z`pWg(05(J-JfQMEV31d$5MWbq~G&BfGrpPT`pvZ#S z)>H>&*GvTr?FBt~N?v_c3#}ilMiq2%!)uS-Xm2Cl0gWoO&fKt*%}_EZHJ)Q#A2hi8juHBFIN;iq`VopmzHk?{e?#9gHH1@1Z>N5MW zcy5Cdn-b&wnVaP;J#&hXsrS0gPIWeGZn7L0GWk5za}a{Cv@)ksM>U?PE$Go4SJ|@r zLDwkEztrI5+Sto@wcuFk4NAkmR2BZ3J*>KvB5Y@7K(!tn)Vn;ay1jFPH!p;o4rite zXC^Z(YPuz?F<$1dSQZNqCdZuLMDPM5*u{>)(tSOj9(AT8xMJvqu77oEp=}xc*pQiG zzoU8SroM@7&EefRJt&@MJz9Bxa1 z7tGgI1gE|xV!|znE-lYN93j*6`1$9S$*7uK;CP|v+u;o8uP+&_iyOG5bRlEX5ZW8O z|K(trcsMRJoPMdauR;E%IO`0t%x42my5Ix71jAAT!ZmMf zd25uK&Dxoww71;P0m-mP0LMej_tvs!I%I+*=%eH@hTL}fn^=KEZiMYdhZ9s3Nw7TP zOTB{CN+?lk43lQ7|8JqM5=(t36)U$)w#>(aeQ7cYNq8W!(B*LYv@EXTf={yb8dPCS zsfmUW?|bMpbsSL=%YbV-$!SWTo=tHZKgB}&n;h4@o;oBBYrHfWy!fAEH027J+eZfv ze8hlM7qnHx*K~MBuViU$d84hjqCgH2t`0hF}s`Cd83t9NaN!iu^RZ zS26y4V565#?}}p&3P=nC>Ez^TmJg_RT(^ZE<~^0%AGWCCUK zuc@&#|9K1jy~@bq`n{6vt8kC$KcD)3KNx(f0SbYVuqw9yoQ3?o3EgTyg>$CjT<@Qd zfS+ysvr+!EEZgyR;`;LcM}@QTdtDYmv+($5&GSDD36`Pnby?Nk7k}RRU#~8T0u@e= z7PjkD|3|C88Ud}&Tr<4%AHL*g8^7GryyZ%o_*il)Ce@++#Jeh0>QR$X{a3yk-;Ita zBj5lPYD$J-th3{Vvq=2-uAPgVdL@ZmIt8^{CcZj4?WR+YuU}F8M}T>eCv=hobY=T0 zdQu3D_##|Iv}pO~GmB)t2a@DKdKgD|1o%w2aO>aJIAybFMu~m-x6#wB&GIHRPV3CA z6sq2VX!fh5&wl;;BGqYPS^Y9YhvVZTW+1sjwsQ}t%>VsKEpy4cE8>6|%0S4RKlStL zL)qBhf%md(KQfoT0HCt({?WP5I4+g~3hNCy1&Rx1&h@_U?%#`Cw@rRqYYl5DbN*F2;!GuS+p}Y%H#Am8eSA$QT)r0H3{8a>eoWts5gi_^Sda) zugrus_K;Kn0eq)5qx#XWkAxbMb53d%s5e=87jp;_no*!lN0oI&GvGy-Y- zQ=E^JTWhZ6(4QUr?^iOQv$jy9i)D=c1r@s<=4CH_jj?|(tn7xsI(EMOAYJ^|&-|~e zKYm}KJz8?o|BnUnfA{%c|NLVW`Ss`j#?Svt^Xu(PiG3q4+D5I2f3F;WPJNm9D{p%g z<6E7t|0jd)pV#GGKIarTR%s$J?z#N;73&}OuA+0lW1_Wq1DpKf%>Na`IRk;G4UYoo z*V_2^HTnC_@w^R)DJL!1DE~{y|NAylO#{S>+*AJbiUkXVf)7KY?#cWgU-n5K zSo-RwG!aN)04v6uic<&<(f)xV$T*Igfex1_`-KmT6` z{R|NP+JnG*|LdUtji6t%v-eR5+(K8%B$f>|i)UC>b6Jo9jhb^pH;o$5l03qKC`fbW<0N`IhY3m$Q zaeM2j;5}3tcM?zUc9G}+D>Ow6c71wt`_o`M9wVpIO=vd9ZMjN0fF zsx#IsQX(J#=A34~Yx$u1;xO`Cr;CKVC+)`oAx|RJKcX9%D(c5T4sGC!9J2s*2yO}w zxc+q>n)&uUTOJT>CS3%yCq%+YsLuBs&AFG0EgV=!XUNubU;wSG6u_zOv*ZyzdO4Dr zBcfD_AN+L61#b3XEk|JYsQS?|z~#96-NF&!)=)m>3$ay_t<3S{Jrq;FzMI?I{Kx)! zQ8Cnz6oeu2?48|D16(lK%grKvU7&|;0jamt=nJ7brgUWlJD1Voa)PM8xpqOyz~h}I z1HiniYv3!FPC~4G{~agD4XQ1BUdfJzJ5u`M4*ur0w@un-W&+n4mjN-WxU%En@O=nl zJ(5>oNX;~8gTi*^z;D)OqU#bBl`vv5xuCV6^}3V!zFx{YVGnMh1mRQOw;$~kJoEcb z7kZg(`$^D!hMm>bmv${cD~8|62EmH7ZooW|ZBVPodj677)3H&xxR-YuWXV)dsACoPX9&c8*fhJb{^y6UAd^(F)*1-bKfuVIy z@ag1UQZ~L^T4diTSiCxTrfu=2&_l|92*+^?)(D4uN9-?Xm6OBq~`!_@E%Bxp!ck4L^83GnN}5R1sDvr@W-4jpff z(st{c0EnxLk&WRfam&p4){{=f6z|g5GeK^kH@vlL*Akyvtj< z4k8WNxk_g0KVEmAJ-S+nTg~@NUty}&4JHA-Qr$k=qz6pI!X(oy{TC75vgV^RP3YZf zcM9mmR^N%L zT=pj9P51iEdZ=jH7i#B22M$*<7x{R#7PF>Ul2u~pg@yQ}_G`H;+S4I=HzUq$1-!q| zx^=v5=;PKPb|3?LXC?RDlQcyGM7V8OAd@^NcV8Oko*Cv3utQt5Hg;wTK1PQ?H@N+q zNfj@c_kobzH?jxSy2b)Rv)qPuVyF5z|_V1zBwY!>K7OFIzu{Pg+u44jK_z@W8H^p zz)#WD*HQ(1N}4dcrED%#b~Tw<990pYKml7zeCiVB`O2HPOs?nFY5{j||Jn(6S%)|B zc$cS3D^;h%(w6ZfBoa8P)}g??anVlCpxf;$bFu|Pd+?h}af>h41Z^WC>v}g^*omcP zKD;^Fw1%Lkd)3}dE?hY(+Z?@=A-=p8-eMABePNGj4Iue8yd`3w0Vp|J?t>zL_*;zF zPM%J<1MvZl>Z(n|oHXZp7Xd)hLw!VNY{qPoRKQ3jn%my}gayE}sH?Ba+FT@tez~Km z+&%mx#`#=icaXrZ44Je2_rWw5=w#Y0Llp(cBg&7Su|UXCoyR>{^}sg8<4c0o=5PFV zxird(ib_K~GctmbQsTFnkPiLjZFR?qYC#xnv9m@TU^@bl}+xNB{#IUAp0}e10+X#rR!^44eBN{9#m%9-2#53YM^>%=R}t73~!3|hQ`I>tr^p#fL^Yb z+enwN#e00wxX<`*s0zvo&5#hCR3w1+!d^cFdnm)Ld>`LEiCI0Y#96}O-z1>nh=xhaH%UP~s_N7B0XTBlFcCffxw*Ze6G!4pYDOo8Y2IO6Y z#=4}rxL`(2+Q6MccG=jdj^kyBrL^=^5U+9Vq;s1O%u*ULg-xoVa4fk3QJz{0PM5M% zcRv{`H-WEi)hM7DRh<|tVQuMLYbT0Zt^1jWoyRBEJp)FzfSa(a7uW|tqXW=zXYpD$ zfbXoJUi@~DtB~;S`j4G3hW#DjSe=$>hrMf;0h73Qc6`RH4(yZn{srjz$xd%GOV@-N z#3qnryrxbW$|GDebb30tIq&_m%xjn65r@l{V+bfy| z%><%#TL$iF3|Rw)x0JgFL%lG&fxE$X?4(NbQ8VW7M`>*wx2C*C17b~m%ov1=JSre`1NW&tbj_o#ob_^g&;T5~;5>d9}0-=|yUNt^1y zic#);pAZ2D{MQ8a+I%-uBwA0dTf-U|h>$!OzOhh-4%in^g9!0|k3<3wMtTX7XW?7eU=VrDhBwmLJ#m7uV#WGH(^6<7z771xJ=dpCs7?@N0%cu{OQtnk8 zB57;^ZO;d$iQ~0t438~W-#wTE#XM zxw~1iweGeVi@;6Q$5SbPPJmotvPS;VGv&{Cs?A|!B4VP$`^Jwtj zJfx$hn_Am*(QdGBw;r}pY(6qPt(MUca>DMqP1}MmW15AE*=40Ra;Eb>_aYPRIrk%& z;HNFpE4BT)s+|0SmaTdFOMjPLyj>P}fL4Bz|1~me71m%e8H&AY!e%kF9HqqUHa<|E z)~A*Y^!i;caMdTk6e8y#4f_e8k)_qNet!8UbuSl5% zZYWAK-EKafE*(%Zo1huiS{aUed38;nzp@=;x~(OhzJq-3NR;l2Gs+Hi{Csob=0wf3 zLbCZKhuv}Hpb=J%K)kZ2%y3TIs*t}jPS|gc`Bi;{S2A_1U|YbRP!zl$sqv-J(fMd) z^^Jv}oP{X;1tjxHL9tmtkSr^)ua*P zMr&QQy$=rqPoCf)s6=T$zu0G2ltB34%hTHFH7pUSjm+qI3k}3 z^WpAm8wT`wwxH4_`D5q_Pe*#;-b(Bd>L~ET0}0fpf&9b0*WOh@*$*y&4-jz0p}}4s zrNekU#I1u|ya_GcgImWfR<>io7cECXI{6Tn?Yv&2whxgAU4J2s&^NAy8S%OaY-YhB z$DBuDZ?0nQje@!@f|izo>uVRwO&XMqv6}%~98fPo^N>X~pqt_(mRH|xSR`T4fD`ml zn(BDNUiAXUNmrY+G_2A5ViussauM?>k#AhUpk(Mysga=ZZ|eEO-s<4^JI@odtf3pn z77cZ*m&2K&5W`K34ov72{;uP1d^*E&CNO`VqSXfKjjeo^!9FC@;*T>{ zw~@?HDQ_`LB$>_?dE*u=G7nmGUmj3JE`&J%UKp}N9ip>=5T&}{Q4%!2T$CRTPu#Jksw0DT68-@AuBOCw&h zN`;xO_%sGrBUwtl$68wtM7~747k50l+-^i zu~rgwle?FP5Jmryv9#DOu%;sK5CV~f5vPI$0; z&j>Jf;0o_;&1Aaj-_>>h=$6xOQFQq?fJ5_OI!?K(WA}rgL+QsO#BgJp=xG1bEK13@ zbxrxm7(m%7pL>tYT$1n&y|x zjJp_@{!dH14@J?kwjeyN#Pq7Z?emSF%c7bUfCbH0>Fa z&PslrKjVVF+*F#1Su(HyKtLodvk`K8#o7)v%JmLU*Dg5`VrC!1pn$qg{vgSpDX{orQ4BB)`Vkd|Qj$H+7F z7HP5Zw+_ir>3G5)+AK1r#F+S&N(zC-G4z1ojD7Znqsf(1G!NaCP9~Ur?HOQ`BGeMS zBGO0go>6V7k8F0fO*Zo->xIP>>3nN( z?OF{;jnq3xvzUGM7iX@w9w9OI}CSGwv z#JHU!ZQ%P^6}fmL^y{v?81qboF~`b{KAl)YVvskkXcLFF|N30?|qpu6-v?i@CA)+86hQP&nJk@NUzxxI=T8tdF|*tHJe_k@Yd^S z-n&xj(!%yx`s4lMijkmn9DDPe|9%@_2fHy-lIHsmWv3F%=;BniD%a?EN%9a=vmC*2 z^lS=~jRnjjhfr2HYm;Xd?CtoxlKK5PFS~a^A;Id4;HjN6%z#!>@0%25=VU`d>46fT z%dz5icigD3=VPs6{qmBICQDOxeD(RjqLT>cBSWR>z7WC75c8wy_D`sMklwrsUlWdN z(i?FnC>&%w>LTh93>=xhh}2|!_XK|FcxuhK!n|%eamsu4@o+$-xXNqC|lzIY{cpMI68_X%&z3aud5GYE(Z-fUf=L2fU=U3 z`i~|4_K-!3nQyGy=ouMJm?YT%MYSv$JTJqx#EsER11_JrxzN3S^f`LyzBy`K{c(%B zqQY*FrSv-?$4Qn+4cQExcl^gca6>W|&eHN4Ct@y?ec(hLE#$^YM@e#^ralN$>0OPi zI6gAHD1$Jt@N@(#6Z)FGm#@vnq`hq>4BETDzXKO(}N%;Ph4w3OCYC(M9i>ed$MY^oK6tz+EkA(0|3h8;&$1nFxv@Q5# z9l!Kw;O4<-wRIvkvg*~&+5D36lB@8LXUl5~hO(FIPQcUG>{^^Vcer0=UzSm>fGyn( zXVfYdJW){bZ^?Yzdf4N8`#5Z443Y0$cW1_vVw`KSxSqmFx>#9_lr^^1JB1}4*Pvh!y1PGF zAC0KDK(?l*F&_YCEztI(ZyR=M5*4Gt!LKy0ks>|Rk7Aluu6;CvKa{oCb=IqN|E{}nbLdxi5R!#k96sF(^Ihpd#a{}Ysaiq z5s-;Ue0xwu!;oqI2Y>pJV?730VIP8Bm)(0jPqAU3hUS5CxU}+$Wr;GfL9Jy7d687Z$cTI8OKhdRLFj7s!hIgbD30X z1~1s0MelvPg6M{FKG}kJ@%tARMG8Y{C2g-$FcrD`C0p$f%l3oaQp=qUzggIPupRkg1hqM-!ivA~P}{ za!nLl_YUosEIs?Laf<4f3-VRPuh9W41a4UKIA}SsqSwyU9|(7MSjZk*eIsH9KM1j3 zoqxN=AbcrFN85pefccU;I*WUsrPI8PpW~8NE^U5C#5J9%@;z%GLoyE4k!p;*cFa(0 z!Pj)7nWkR1iKi)PQaY3gIH<7cH3M>uF(n@BT@~8?2uz|mr*_+b{o!py`dF$|fRm6a z_!6V7npa60W5uhxIds%*wFep9>x-LFz03^Dy412I?DK`OfHHA{N-{4+@9YDhCNg9H z*(zTd!VdN0V^Sg~v+7|pY3Ao&d#0PeiutYhvZb_oy8R}zz-?`uMQD?vB8WE8S;bVE z7v|{7Vm2%X7pU?bOtnjYvpY=l7C1I^#=lMm&f){&+x$C)S!{@L{zF-+5UYlS7I~04 z9*@p*uPQkxy=kSc6rvK`C$(hJjA?KOiYuj07wNUUZ1*XzJJ-6Eue?_FMJ037jEUt> zi=cm0*q)a@Ife#4KFF0tzh2AaC;KwlLBJll3$A1ZsA~`3Ftt|%?@99Pew*jxS@n>L zE-JVm*%e1AQoizVuaN&eNU_ly0S!_sPa9F6@4$*@=vuPDNDns))31|&#>xt^@a>oN z$n_b6TM7zIL2c64C+cG$w-d7+?T&`l?GVRU0rv4k58@sSg^^ zv+Z`_#vySX-mWKoqJMptcw$HcygwY2TTou2UrvA9xatd)iPuWzJ7& z^IA`Im|U~99q5mYwhf17)k9*hokOXbe!N8mMV)#DC3jY;H30iMT>U7k_8{Xi-eZ{t zA=_Bu%TYg+^?1&>g7P%-VORF_sZ$_=lDw=gcroeiO`R{EqUEQQ3U0lMm2B0yxt$%? zxb~W9pm1{Z3)-b_ji%oqg{HpmwlE~$H&8IYSf@~dw)Bn_F`YKMPqQD8?07F@e%#8HMw-tO>zPzuw-m>qCRN6U6gAraNpHOW>_N& z#|kXH%T}-~*@)lpahYwV+6xsuF$_(8iEpPm!opPq{WrlD924db=o6GQaWO^L@5Wpk0x!~3$1hM4}u=e++$U=+Z3o(fMU*0J#-jAwb zgZWU4SHZ{?9!5^1p14hR-FRKXtSFLb#a7i5>2xC6#cjklx`R{7*mZG$Ecdx-tEF|* z^#XMb$%Ct9E*CYqJ_;Qecy-Mgp)Ra3=<&!uzTO+ILtuS|9|g=;fv&q=rk!7lMuD!bz9 z(xxXV5u-1IF?NWJAo%lnWO<7ykFg0h8b1#_4V_bdI$wQlOz8sWlyGG7>= zc?cVu>sT9YT1lrF!?_Q&qMQUE?-jM&ANUOp{6gG%-ni&;QB>5)b-op-XbItlAFq9+ zOR1`CvjMa|KPE!uf`Htj(gx-z(zr=`c{$0nm@9;F|8BAN*JRVUWxp(Bn+$n+l}ESmQj9l#h24_En98O&icI8&b{DZZ7(lhJaAqD>1k-K&w{F{HH>2Qlwh zWJYjm7?U_dzZE&30DK)Qu{a~wnac& z@{ylFd|XMyTPshLu~$UD21>B(yKZpew5@er9t)TAg<1a1+Kq@^T$!e01{;-Zl2 z4Clbgeck2(JwABrmNP}Bs!~QR$1Qlh%NKl%RQd80W^`HN_B*}3=!YdW<8PEA%VlKh z`$AGbJ7h$}(8~`1n&x)Kn=KmZrO)~s=D=oLjak9RQwLC`#tUFp-I~kdh1^M{llAeX zXVu&rmx?1wioIv}6(KjAJ0!M34&tx5Ie`JT>56O!bMbBm5Xaq@tQ60er9^;ul4xKsnHC3*`UxwX`@97QS;tw$|B&01KgJ3R0TX)U<9ml!x z^vr9q?6Y{1Jvh8Xsq9jcYsQz=SDU7PjKxz#>?SPwp;W>dLL*0$v%|jWWxjiY`PLH5 zH2S4}hXP5426jsTjDY`9{~MpF8*+M=unA1qu7r*$)uN3#&y@bJvWZY6D3rAUZs}Q_%}#ab```hDB{M7?H~<0!>kQT zvW?wBo(FQW@A;~P?2!<+{*r5Dp7lz^;{q@ZB{jxCS81k~fT_+WWaXPSApdSPpZj)D z3BmpY#i^Niw*JAv-LlbLfD$e?KA^gPTGYeD5hS7`&0MNqPKINgdKE!+A?Oo+d$Bvu z%-qo_M*3uc`u-4IFpx5{ni?QA8Zepl@T*K~l!AG7n=?}CMOe7sihpX z!TKhx!r{$A+kA|yn2vEuPVx05lzKA8vi$ON@#~U6st|8)8?D?3itx3%dO=yeOZz%Q zfn^nkv-{Y1^N^ zv0C_kC>P!Sb(hB_LGt9F#!D)A>{6uS#E424;yfR*i;Kn8;?WVs`*6L?hB>BW?ozGt zjPB%~Fjo%orPvdQQG1}6peJT=VJrU9jjmV;o$`Gk{l)=xop4^y^H;Fy(VtVvmN18x zr9!Zgj>}4X<(tWC#~3)QF$@w6?jpG>Fq=ze+)S{a$?u+)jYLe-<0OEj{;J%I6VHu_ zA={!f3&v??TPB9X=WF0EJMnt>fI6T|S$*c#k8q!phzM4o5qCWw`P3OWrF1<))8$p3 ze;a}%(0^D^K8Y!^tx}-^VV*OniRr3EQ>0D^^9O`9_OE0HOJ2aQrjyJ{-!xsm52%8D zy`Mlv{fvB9EXPvC4gs75bMMR7W1`_54{T&XxA57+LdYR=oal3Un&v?rC zq@Epm+8?U%@P70VCP5(Ak~UoCK!%pzuXGXX0nBBHOkqT zf9VG7wXA^ZF{^+Hd$wz1mBpyy$Qdk>?^7~LR&<=yTxuQ(Mr6dhaHtoBf9lRdYZePh zubtTvh9g&ps`ICP1sx^s6^?z+(trXg*RKvO5diGY%e1!78sgv2WaH!bWaf*GZ5Apf z6s@*5;~<(|GPtW7g%H>F*_*!D3J}|1$AN&f$@Xi{mm9Ss8h}Wvs2o$^WbKCg)28{H z{+EN5Z?%EM*y}WvmI?FdrGA5(8^6KvI0m;D0|rs@aQQUaE6Y{)eN9hMJKpLX_jHG} z^i8~eFiu;&%osezZ@V&!r3~p(eCb)bbkBL*6Zs%>4Q7`T$rRO|*m5D)MJ;-{<=eGQ z#l_7N3UOQMd>leoW+|dw^l0jJkDiWlr^0>sVy+Tpd{Q}1AyJoeJ2SqN7((D_0~!w6oRH({``&`tlrwFQ7GjLi6j z9A^g1)>mIcHJLrDH*Nl22lIOkaYHTIrn1(Hd=fquSydDlAkqO^5K z*E*JjlgxtyY7M*F7csBfEHK}`X+I2kv8z|kwBPz|m!>ux!TU!h2Ed!T5{ZS#BA+O> zq6hD=<-6Ce!_AqUzE?@E@q5-D0?yM=0A3YlYrDz3`&R7hyV&?hsU?FJ{90Pos3$wI zt~fJt9JAq9s-<+d?P>bs(cj+;NOaj8HR7iI}( z#NNAA+?VSUV0L0rHyfb+p{vGxCUy&~>@Ha%>j4y#)CzCJDWMEl%v@gVnOKMxP<8sv z`Fg!B6c^WUPUH5NRfU10_8`n?2|Ns}czuowhWZXtRD82;obG8HH{ZHvS&ys%h}l$M|y2M%d2t!A|6JWm1%N*dSp{ za8Q{$X{y2ut0wfVu?u@2I)13ctX9#8nx5Y>6Ar;NWDnjunz=&ZiE?|O_KIuc9RYiM zE9~e2-|^zNNE$O9ANk;K=Q-HxJQ$7o)W5aD)H_d@y)97tc@*D@Eg0IyxZQIWwcc&j zOKirLfo0b97rcR-aii@0KXMyYPe2FjNL0mavm$7k*#!dHlYS@)SdvJROEs*ma0GS3 zBSXgVgNfqxZf3x2li#Danv3V<%bb z^Z2)C_C=2c^TTckcsZO*94V0TaJ|cp+l*Q>F{!rbDdFPXBBSBKceEWnNyuqExp%yH zFIGagL|IJp#S7xw&xyEwt9Y>8-G<=bh<8xmE?T*EdY~!G^-GVd1X70;&8^b{f;=#LTyiC8?b;-^P&a! z=FO=*^n?<%^p}_{Z#`vQZ5h%54-ML#W+j#U0G>WMLmlM6UUi$ckSsT}7 z3c96+xD#Da94X1%qrwb-^?{sVI&;SxbJz79hF+#5Q3r~lo_EcjSvnj2?Fj)Gp%UqZ zH@BNRVHb_sR|9p&U6+gwySCJ^rIA^DtwKWSSn3jk^VKjd^`ovWwZ(6-I7@HC3?eDG zX@J>*)X3Apgv*BaRa}^zye-yJCfuFrsd4cg(oFh==)8vWrQ9p{otG@}kJn4|i{E`4 zjpnOOHV+oIJ?5#T6eQ^CUrCgdm`vvTt_1Z=KBsvHKGb}LSUuNeqMqy}s<33Y_dU1q z=tzNmkm?^NX;xxys3fXucbzrlw({}ywl{m|y;Il^=%GD}Sv#cVCs+Up=wd}B6S;;@ zKu`UwEdvh)I6Cl>sGbD0Qve3dXIpXHHM&O9BT~`D#ui?dx z+Zo8c%evkt4fu_S6uPS8-NMoVsz8Ll z&4NBIEr_pqp5w9kMUMU?6Z#Uh!)WsQO-CNACn zpiI8+cCMSa!n)F<<}&yIl;2H5&may=JbQiS+kK=vAP*c=HqL0k-S3l7c*?9=q0OJS z5V^51v6N9 z>}7R`aRao!hdQ7K9>b$#PbJ~A?rbe7J`tc=kqxb`Lxlt;>WGygGL z0a|YAtydnQRHxTY1OB~)mJjb9L~UQ$)?|^Bx{6s=7Fb%nLDdktKVuceG`}u;Bu90j zmK>L%!REYw3zYytRFtFXi9&4M}HA9E(}+ zz~JYrWb}oG*yhv4D8ssMZ%&Jz6)lfz7M;rRu?GiTcfx~mkqjh#)4A-@yd3wvQ?n-g zN4Ex5WM9di?)&`W*nBS_@Z(al?zw|2LN8}4Q4cT@%`Pj0SmpV$2D;o8p=J%}iPOcI z$43^GCf-u)4uX`f;I-Q!viq|e5#ygr>5f7I{5v7JBRN&|$YZ$l21Z9C zYA`l+;!t1415@NjeSGpE&wu$XW#P5}aGljQai=v5|F7ijMWj;PL)z$!2K>?5~jN zj{{XV$%$2R#QMN{->fRB7#tnLQBi!&*kN+68xd5|#l4jVnwsXCkjv)e4pL3) z?Mm?a@wVH`>oF&{xo=b1>#gY-+QSKZ^nMokN2Lcj*j3!OL%U4ReX}SO_e)d7`_RR8 zWB3;Ml1eC>SqtjkWtv$X&i9F&tJ!jikLHXpa| zG&}J~fyRASJA-C~OCxlm`I`B5yS%t6`_K1&#NLPF*4&>X`H(+ZkfExVi$sH#O_OOV z%{&gzd{q^fX;Tn(nHGWw2gE|jnicqrn!DRZv`uGvf?TTX6rN8s~r>(=U@!j5t}bN>-mcT4r`te zaTmvJ!Pz$9LJ0A!x8Le8=)jplFi$pzP(Ea>R(p~*2-_K=Jf;MM{no+cb*{6c#;$Xt z7){n$1-EH6%41quK6B@o@Q%=lauXx8E%fy<1MI|Y0N@u9qYh=fI5@FbzxyA_u&nc8wgT4?fet) zZ%m&%=F!G8UMnu+*jq*hT|hBtx@121xBOstm!ebhj}+iEJmJhq;Lekh<_P0=mR9a3 zf)a-PWskOZBbln#rv;~SoLJ3jxcnO`EM6dLD|T7I)q4fanc%dcbYU1Rujv)j1~*z$ zjXGsqGw*oNt(puX>tUDF2=LV1!uqY&1g(?XHSP)691&uT1t@*qzDgf@GqWW7WOIT z-PVHPrv4_lFcJ6Ubzt1Jqj-c->6<%hO>*2kU|ENuAj)%e>vwSSQZ-#PDZeNWK=>Xi z&NqLCxwwtQYz3lm=0`mL+qhCp#Co{c!2ZCNFc!Q0Y!2Y^YjlfA!IQ_zzE_Z6sf4fj9a5ZvMsFqC{wFc|dp22&7vS^uhMczlS#JFPrjLS**nB4V+a-y^ zMA$|lG5L&D$UX4OwZdvoTybH_Ybl+-J_?K9*=o@CNPa)I;OTO^H?j_r^_BY1MxH*4 zN|A}A+;CZq9-7vXt&HW!1UHZ7!hKFo%zQnD8EjSnX#eS-^queG4>pA|6C9#LgRuLh zfBhcIzSsF8{-3YFh7F>VZ`VfDNFC!Ku<3qE9m>hf%mVs z{*^%geK=2X0>6&`)a1SCU)-L*U-0`?O_oM*hYQSN{IlzuxNq*UtG==~T|m z#Z`Acp>Pt=9JD53V-S$nCcO)yqVdrSy|OImm9KycsNY7e2FRq45j*KZC-Lnq!R)S0hKS9dN+|#C zs3JikL0hO-Z`w{M)!z11(8Ii#>%z_V8zc9okl2mcXeJh6Z5!+V{(A}Nyj4F7x`MfS zFuy3`g-yTu@ry|L0L7#6V!3;@N&4Gz7HTQFB3CBLro61{oe%|eX5Mqx&PqSjJqY`+ zk0&!r_vzq$WEdkEnDbzvUq53S0(Ny~JS+K{i|k3O*cUU%J%|6Vy(}&RYNks@_>|;%KW1lf&EZ?KAmpAXF z|G(?{{PoOS&hy-J?sM+vKEL~%-|ulrnH_?Y7!Nu2Ck>oDSxDj`HcF?J>Zz9Sxcd1! z5?$|d*h3O3AkTd&n61-?>+zmd(Xnjt$M&J@+a7xzu!8_Ed{cobaU{$A4iZ=`mrv&* zxPa4JP>^!}No^Se?nPk325BD}+n>{9xR2ZT)|)X@V`Uwj<+D}hXuJ8;(z?uI(y~93-p3k=h%1ExF3y{M|;}32Tv4dSY59L zcTP1e{Kal?-C?UTy%ji9*7HU;A2yyTUS#?$GF{8D$+R_MqRX(%O1E$(+4AKo^o%8g zVegQ21%A*$vs7j}LdZGR(x)%aWig1_?!@frormw4qjA=h#u~%2GA9h*HC&5`W~IDu zKADdE;xR6owWRKtZf%%AURgfnp%Q%!P^==$l;h`QifqxXzFNK!DfoiT$q%EC#=FNE zKxSGw_hGlfk}vk$y;s(cuZmc$Ll(OB&`saR&*WsYJZ{RV1@G@#FJqA4g@wP^D#S8d zH@_CuW=+^XJD;ysU=334GQk>8w}v`?K?n|7S6T)RAm(Lz+t2syA^F;kDuH7ZXK9Jy zmo1cT8uTZJSm>npai{B%7dXmnq>y*^ANnU#;oA*~fW*f2N|tgf29@rv8xCw}kM6F` z^bF_4pd`gHnngTkYeNFcQ#S>+UId8I*w#5(aHcuXcZM|za3Qx3h_t(MJ~Xh?gm)*I zzsljLbvnJ@6TQkV2BNrp)-fMnj>LDE+JLKRaYiNn4u*+jLX+jp@}>_e_p5p`7OlW+ zMOg)K$TATIUMP;#kwmie`o3OVDda6Sk6JkS&c3^maQa+hOd0ht=OFm zEB=tLLWY%OU-;s`)jxQ`E^A$EE5#Pk^i4FMHbA^z!e)RgnjwbMpsGI>KB7qm4%O8a zWiYgOk>^YRl^}Y9D``_-)l;w=V9AFd5J)6$D}=D#_K<+zsuBW0HC|Iv;Zp0!J@+e} zZs`mKLHHX3A4JVpp^Q0_lB{EnkVsus9#@^AA~5u|{<+wro7TVx@76N~d!~d#4Sxu@))O=2z!b$p@j;Hqd=uCSLk~ zHH5RW0r8sho1U;G{kD^V0IlO_@pZ|z3^;23)WFN9bQxhw66(O7?_+-m=o2~B*Z3G* zKDVh;wSh<&aH!u9aa>boSZTAv=Y@+|qz`xuC5qU0MH6rLuO>Bx_I`67v|%4&V>u$U z{#vPHlZcVk&#i0KV?D2kJfa|MIE2qHI4|;K4buuPOo{d2x&W*r=;BJZMlQlWRS#jh z!xKCPU1lmpHkWfA^+7EO`r6&$NT|QAR0Kbdb|?$#8U5qd9%MZrNCC?sQCd~tRX&eK z(7W7s#>4=nm@1m*tbOvhn9EOIU+rqGUPqahCLHh&^;py-U8}ZQ_pEkka!{#8iS@QR zq12OGY;m1MdIh`zx?g@R>3+)seg+M%m1D-rNF<1==@8quDAC(#j)v|Vx7%&d#W0LS ze|>YW@1Y|jl!ccUYs2s8XDKk-#o>Y1Ra1`PP!$mHudTLQ@`W!tv}GhV5wQ0jK9ntv zrC`28gAh33k{b3UyL{H%6+hi;R(pudVCXsk>{VcyE}!>zl2x_nl_BGc?n{-JHx_xbfF|^Ua)_z;5EH-Jb{HE4iyu%$8fsn*mp>bRKw?6O^Y zUHUx-obiX%z{v4$k$sus_5&X_7e?KSH~6kP7Jd`qofi;T=@i9<8Pb>IoQ53DX6$PQ zyWT4rMG3n`O5&USM7SqIf*!vOex^vC?ZnU=>-&I~_t#&zj^`#Wj=yq-4GmW6M-_mn z&k}m1V!?+l*Ry)0I#LCQN|{d-58W;>^RD<#akdX3-S%Aepb);pb*m29Z~L%GNhwoJ z?d?^4knlEBG3(ky?UPC7wI$pOU+X-JHm!~Qh4R|@0|g|Z?dSppluOszQJXn1*xTSW z0ividP^eaK6Cl+`1GQyaJ?TE`FPaxy?wn86Dmj2t0xt|9RyS;m*#cP1rc2}P8f^md zH&%Nwk-~$YM0$;lu<%w^r zV|e}AyY+63T%9~AVSWw0aEF`nOvS>I)WAw8?lrC=UqyiWXc7!dSNws84=Sp!U1v&4 zh=rhXa9rq0tcp{k4N{2OPqQaC9+x{HLI}&?b8;l&)kzwc$B0!vQQnK(=4~~ds7OCkvDFqu}C3uM48bb`hgJ8P~B6eTWeS+cej3Q`uo&8eBeVsM+JOUS;R} zA&3AKyJ14*HDL$z8lPKkl>*X$XI2Z`iKP$2%d5?S4d219n*>9ox6jg$dPmH{a97I@ zTo+>(L?@E@_>evn=NFT(En}sU?gt=WZ$G;UVJ^|K0W2-}yMr_Za=oCx8ATLwe?Yw{ zCf2+PtaL4Wxu#sXO$Nax^@*^dwN+26AE{`%^hI$6;mi=X zSE-eZn@VzDzjU&*tM!`B(8#pB74W6!xMG88$i0U+g#V~&a~e<7p*wueJ%ULm)xoOz zB}#KdeF6{^3x;j3FFpOLVo>ZH8#&(;W_gHh8XaE~=}m!IFroZJjPvOlC{sULeH^uS zOzbR6Ea)4;YkW>c-YH1ScBQ>=TQ|k0jxvbzKmyyCv+98xBq(8^TsuksUTc`6N^;c~ zn}{_tO>x%9E4)ox!#+jr_vv}pKI1Z{`b>NY`noZcBG*=WhAEFX(00C^tpLf`Hik{s zc}nqbs(U5N`@jBJ^UixRJyRH_pTEw~7#3tjB2DD!vonfh=C!|9>=mSTPKsrkUX1T& z;RiF#Dc=g?7cIPVkQL-`ueh(@iH3rm(%oE#9|Uzr#;C9qIbgMm`2RVh@ZX%gLwS4H zyWQGMe1a)zt)$>$&WF0Qw0}@>N0icFrLxWawqfX#kP?AnQUh5QZ&YT3oKuyb72~n0i}s<6<`R9-*KM{07Pd1u^_l{v#B3~Z$|Ny zkdQCG(#<))Q~3(^=0uV&G{oFM?%;C{8JZI?Cd2f{M(br)HnN?XBgnGNsv3)qDlt&Z zx4TOObG2+5>J$Pj(DO5Rqfk8zH^9vZyF-ZR0QD;ht#SZS@}Y}f{ct8DgM3uI(g%A`0&gkijl^mq3z*jMq$8V z<&P1yFTCX#w}$u=^ZN^y9ubdjHS&)51;u7?zFNeK4wX(#N>PRau-sLNrrZ2$N!N1G z0%uIQs@{+$F+|-FXVi0J(h{9DXNs-N<@j~x#;EwEwFT#XvvnypBsnMlRcuoLOQXHT z`b^B$C!0ro-3_bI%*)k9rY_p}@1&t(lS;t^^4-53#->ykXV%85oPCPOh)25FNLcaI z4~D3vr>PAJrE(pzHx6F<4S3p_p1{17#vM0S2E;2h0%#0ZLM!YX-98l!9~E%PUu?fnXIdNRZ37!SX;PO)H{M6WCqD||VBy?YTa`TZoXUFF$W z7q^=w`Z&*-nAO>-37@{BM$iu^hOjYoTNw;nP}HL5++iG8O%fu%xC+q;Yj9nFu6kDkYPn@dI)D0Z1 zCrOp!u{P+g(~#xQU`x$GY@*efOV!c)u7A8%sEnIcwI4?=nKJj8Ni9nrJ_2^_eeI`L z>N7TFUPeKij$y!Mr0cUFB)8H=q6xhj+6y&^H*m47A42?Pa?_-^SW0xBW(uKb3ksJv z`>bqv<~;R>m1e4(5>)uhT0qcCLfG^SCrA|mzitQ@JQg|`UoqtDP;PzIIjha@eQs|2 zjAG(Cmz%Wba?ENJ>-P*AI#1?JctKSFuJ~9t3u)6Fb7vy!YApZI%h?LX?+xXaX3e2aNE{lzXv(FOXY<8wLNM@5Y-%ubGvOgF6}3Awvr~;T_dU{K2?(V@qn*k_VQphEGjqUTYx3pg*f&(ORw}n$ksqxo6i30w?4Xt zR93df(}>DdTkxny{!u8gB<-T~ZNF!%NGQol$DfsGX*hE)U>+V0Uzmp4XpJrW`&P8oL>X?(mUcc zp9TvdqECYUNRKnWZXvk5ey%L*Q9P%KEKbcZHTCXRj9F7`;t2rH}UDWGV4NdkH&et z$N~zij}%zkRK=wDdlUqd5E~62wDWJfU+p}Uw1wik0&@HA7l3cP)tWEqHp^Ju;4zeT z%e5t7vcOP05+f_a{)Y+s3**8i0QHT)n}y{~)0X@IgtmETt{|wr-F9pU<&cT*$+~v* zW(maiIJFHOZc0r9sLUAJyWTC8Oi#ZLOy6cQ`rXk4i{RUtj!mImnYzK;hgggI@lS8L zWW_yogQl9NW|YdzBfp8j-mVC6^$2>_QeX>QmoHDMc7AvqLBT4aMF))Hnm2k}OUNRF zvdmA6pi-TVTYsymeOw|fGlWx|VZ6W-v8Fi>mTGY(@t-#DZ8HJ5!L!ZYKuz8s*k7O- zvJ5h9=DvjweCq{XObe^8kwMlUmMWU-sHJ|H)N1_N&DFf;lE+#?8~_)!+{7;ERt*|U z(So2s1EKhRUt|E9`{60r-B=?4IT_D=yvWU@pFC`o?eij(>#4vkX1okxB{U|*^-_R4E{au&gl8&)WfJ--&aaDIcfxCKj zvdWL8%gobqu)-o_CM)Nq{qtxD2M31?UtqF;VqJIlX73-kkpV2+rz~B_3+#F79Z|nd z$3iRvfL2dDJC-z}s>9f*Bq?!E*wPfidCASiMSQIo76cu=C6Q1!Gd?UY4-(Ln0EG7{x`vtPTm$4FA(~(pg<#ltlv#G z+Sxp}2ejM%*dPo*;t@{re-sqBxlOy@=wP*vq{L72A}#<$1x(AI1qHYO($&eRq|xPy0;T@@7I~;(BnVG#&i(~4<1hQ2QR6q@-iKT_xKCK zLUERfs9H0clw+6+;*d&8jOo~g5(7aL!1Tv}QrM$ZLf};FWI`_1o`-vEjWKB+~jW7%RFInJrr^hh@N&re>IjN?+ z^n0Z0e>{_x2SMLqp8pG(m*%EuB+2aXdHovWKNrF{nZNB3=XU*jmrk_>?B?-4z250J zTcim995g(N(H+fG2npQ{FIFeL0F>G~a3fFscf`}H89>}>>fgx)3n{#0-+gv!Fa^*> z_bwu%p6@AV-9$-$ISi!_;ZruuNZnBZkcM0Y3HQ_O0g)la+sN@-Y>HRcp5MP~8jvkY z90vXiU689Q(I?BY`+LMM1%`zQgcXas)0_X!=$`u!BskuZD~kzW(t1|8d+QEYul4mc z$0};!J##Y7bQ?YHDJ+41yZ5o{UytBdRc(VzP#^fc6kunt-Rm9_Y{uXG?)_LJ#ck|1 z;i5DT&-myK;`Wq*&}BJZUur-UZ5(FY57tV_=!pL^`OaL1rs Date: Sun, 5 Jul 2020 22:35:01 -0700 Subject: [PATCH 055/149] bugfix: no infinite recursion in setup-env.sh on Cray On Cray platforms, we rely heavily on the module system to figure out what targets, compilers, etc. are available. This unfortunately means that we shell out to the `module` command as part of platform initialization. Because we run subcommands in a shell, we can get infinite recursion if `setup-env.sh` and friends are in some init script like `.bashrc`. This fixes the infinite loop by adding guards around `setup-env.sh`, `setup-env.csh`, and `setup-env.fish`, to prevent recursive initializations of Spack. This is safe because Spack never shells out to itself, so we do not need it to be initialized in subshells. - [x] add recursion guard around `setup-env.sh` - [x] add recursion guard around `setup-env.csh` - [x] add recursion guard around `setup-env.fish` --- share/spack/setup-env.csh | 10 ++++++++++ share/spack/setup-env.fish | 9 +++++++++ share/spack/setup-env.sh | 10 ++++++++++ 3 files changed, 29 insertions(+) diff --git a/share/spack/setup-env.csh b/share/spack/setup-env.csh index edbf51e8e28..1985e023ded 100755 --- a/share/spack/setup-env.csh +++ b/share/spack/setup-env.csh @@ -12,6 +12,13 @@ # setenv SPACK_ROOT /path/to/spack # source $SPACK_ROOT/share/spack/setup-env.csh # + +# prevent infinite recursion when spack shells out (e.g., on cray for modules) +if ($?_sp_initializing) then + exit 0 +endif +setenv _sp_initializing true + if ($?SPACK_ROOT) then set _spack_source_file = $SPACK_ROOT/share/spack/setup-env.csh set _spack_share_dir = $SPACK_ROOT/share/spack @@ -38,3 +45,6 @@ else echo "ERROR: Sourcing spack setup-env.csh requires setting SPACK_ROOT to " echo " the root of your spack installation." endif + +# done: unset sentinel variable as we're no longer initializing +unsetenv _sp_initializing diff --git a/share/spack/setup-env.fish b/share/spack/setup-env.fish index a534f09ee9a..dd2a17f74f5 100755 --- a/share/spack/setup-env.fish +++ b/share/spack/setup-env.fish @@ -36,6 +36,12 @@ # to come up with a user-friendly naming scheme for spack dotfiles. ################################################################################# +# prevent infinite recursion when spack shells out (e.g., on cray for modules) +if test -n "$_sp_initializing" + exit 0 +end +set -x _sp_initializing true + # # Test for STDERR-NOCARET feature: if this is off, fish will redirect stderr to @@ -721,3 +727,6 @@ sp_multi_pathadd MODULEPATH $_sp_tcl_roots # [3]: When the test in the if statement fails, the `status` flag is set to 1. # `true` here manuallt resets the value of `status` to 0. Since `set` # passes `status` along, we thus avoid the function returning 1 by mistake. + +# done: unset sentinel variable as we're no longer initializing +set -e _sp_initializing diff --git a/share/spack/setup-env.sh b/share/spack/setup-env.sh index 032247cd8f3..9d984ae1999 100755 --- a/share/spack/setup-env.sh +++ b/share/spack/setup-env.sh @@ -39,6 +39,12 @@ # spack module files. ######################################################################## +# prevent infinite recursion when spack shells out (e.g., on cray for modules) +if [ -n "${_sp_initializing:-}" ]; then + exit 0 +fi +export _sp_initializing=true + spack() { # Store LD_LIBRARY_PATH variables from spack shell function # This is necessary because MacOS System Integrity Protection clears @@ -357,3 +363,7 @@ _sp_multi_pathadd MODULEPATH "$_sp_tcl_roots" if [ "$_sp_shell" = bash ]; then source $_sp_share_dir/spack-completion.bash fi + +# done: unset sentinel variable as we're no longer initializing +unset _sp_initializing +export _sp_initializing From 6e38fc56f606daf80fc0fb6af514a96673026e53 Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Mon, 6 Jul 2020 16:55:32 -0700 Subject: [PATCH 056/149] mpifileutils: add v0.10.1 --- var/spack/repos/builtin/packages/mpifileutils/package.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/var/spack/repos/builtin/packages/mpifileutils/package.py b/var/spack/repos/builtin/packages/mpifileutils/package.py index 30fc9825054..c0130e554d7 100644 --- a/var/spack/repos/builtin/packages/mpifileutils/package.py +++ b/var/spack/repos/builtin/packages/mpifileutils/package.py @@ -21,9 +21,10 @@ class Mpifileutils(Package): git = "https://github.com/hpc/mpifileutils.git" version('develop', branch='master') - version('0.10', sha256='5a71a9acd9841c3c258fc0eaea942f18abcb40098714cc90462b57696c07e3c5') - version('0.9.1', sha256='15a22450f86b15e7dc4730950b880fda3ef6f59ac82af0b268674d272aa61c69') - version('0.9', sha256='1b8250af01aae91c985ca5d61521bfaa4564e46efa15cee65cd0f82cf5a2bcfb') + version('0.10.1', sha256='4c8409ef4140f6f557d0e93f0c1267baf5d893c203b29fb7a33d9bc3c5a5d25c') + version('0.10', sha256='5a71a9acd9841c3c258fc0eaea942f18abcb40098714cc90462b57696c07e3c5') + version('0.9.1', sha256='15a22450f86b15e7dc4730950b880fda3ef6f59ac82af0b268674d272aa61c69') + version('0.9', sha256='1b8250af01aae91c985ca5d61521bfaa4564e46efa15cee65cd0f82cf5a2bcfb') conflicts('platform=darwin') From 5fb6a06c3706173bed5d535200634462094391c0 Mon Sep 17 00:00:00 2001 From: Sinan Date: Tue, 7 Jul 2020 01:02:37 -0700 Subject: [PATCH 057/149] gunrock: improved package recipe (added variants for applications and others) (#17340) Co-authored-by: Massimiliano Culpo Co-authored-by: Sinan81 --- .../repos/builtin/packages/gunrock/package.py | 100 +++++++++++++++++- 1 file changed, 97 insertions(+), 3 deletions(-) diff --git a/var/spack/repos/builtin/packages/gunrock/package.py b/var/spack/repos/builtin/packages/gunrock/package.py index f47c1bf6353..391b31b723e 100644 --- a/var/spack/repos/builtin/packages/gunrock/package.py +++ b/var/spack/repos/builtin/packages/gunrock/package.py @@ -12,7 +12,10 @@ class Gunrock(CMakePackage, CudaPackage): homepage = "https://gunrock.github.io/docs/" git = "https://github.com/gunrock/gunrock.git" - version('master', submodules=True) + # tagged versions are broken. See + # https://github.com/gunrock/gunrock/issues/777 + # Hence, prefer master version. + version('master', submodules=True, preferred=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') @@ -23,9 +26,100 @@ class Gunrock(CMakePackage, CudaPackage): version('0.2', submodules=True, tag='v0.2') version('0.1', submodules=True, tag='v0.1') - depends_on('cuda') + variant('cuda', default=True, description="Build with Cuda support") + + variant('lib', default=True, description='Build main gunrock library') + variant('shared_libs', default=True, description='Turn off to build for static libraries') + variant('tests', default=True, description='Build functional tests / examples') + variant('mgpu_tests', default=False, description='Builds Gunrock applications and enables the ctest framework for single GPU implementations') + variant('cuda_verbose_ptxas', default=False, description='Enable verbose output from the PTXAS assembler') + variant('google_tests', default=False, description='Build unit tests using googletest') + variant('code_coverage', default=False, description="run code coverage on Gunrock's source code") + # apps + msg = 'select either all or individual applications' + variant( + "applications", + values=disjoint_sets( + ('all',), ('bc', 'bfs', 'cc', 'pr', 'sssp', 'dobfs', 'hits', + 'salsa', 'mst', 'wtf', 'topk') + ).allow_empty_set().with_default('all').with_error(msg), + description="Application to be built" + ) + + variant('boost', default=True, description='Build with Boost') + variant('metis', default=False, description='Build with Metis support') + + depends_on('googletest', when='+google_tests') + depends_on('lcov', when='+code_coverage') + depends_on('boost@1.58.0:', when='+boost') + depends_on('metis', when='+metis') + + conflicts('cuda_arch=none', when='+cuda', + msg='Must specify CUDA compute capabilities of your GPU. \ +See "spack info gunrock"') + + def cmake_args(self): + spec = self.spec + args = [] + args.extend([ + '-DGUNROCK_BUILD_LIB={0}'.format( + 'ON' if '+lib' in spec else 'OFF'), + '-DGUNROCK_BUILD_SHARED_LIBS={0}'.format( + 'ON' if '+shared_libs' in spec else 'OFF'), + '-DGUNROCK_BUILD_TESTS={0}'.format( + 'ON' if '+tests' in spec else 'OFF'), + '-DGUNROCK_MGPU_TESTS={0}'.format( + 'ON' if '+mgpu_tests' in spec else 'OFF'), + '-DCUDA_VERBOSE_PTXAS={0}'.format( + 'ON' if '+cuda_verbose_ptxas' in spec else 'OFF'), + '-DGUNROCK_GOOGLE_TESTS={0}'.format( + 'ON' if '+google_tests' in spec else 'OFF'), + '-DGUNROCK_CODE_COVERAGE={0}'.format( + 'ON' if '+code_coverage' in spec else 'OFF'), + ]) + + # turn off auto detect, which undoes custom cuda arch options + args.append('-DCUDA_AUTODETECT_GENCODE=OFF') + + cuda_arch_list = self.spec.variants['cuda_arch'].value + if cuda_arch_list[0] != 'none': + for carch in cuda_arch_list: + args.append('-DGUNROCK_GENCODE_SM' + carch + '=ON') + + app_list = self.spec.variants['applications'].value + if app_list[0] != 'none': + args.extend([ + '-DGUNROCK_BUILD_APPLICATIONS={0}'.format( + 'ON' if spec.satisfies('applications=all') else 'OFF'), + '-DGUNROCK_APP_BC={0}'.format( + 'ON' if spec.satisfies('applications=bc') else 'OFF'), + '-DGUNROCK_APP_BFS={0}'.format( + 'ON' if spec.satisfies('applications=bfs') else 'OFF'), + '-DGUNROCK_APP_CC={0}'.format( + 'ON' if spec.satisfies('applications=cc') else 'OFF'), + '-DGUNROCK_APP_PR={0}'.format( + 'ON' if spec.satisfies('applications=pr') else 'OFF'), + '-DGUNROCK_APP_SSSP={0}'.format( + 'ON' if spec.satisfies('applications=sssp') else 'OFF'), + '-DGUNROCK_APP_DOBFS={0}'.format( + 'ON' if spec.satisfies('applications=dobfs') else 'OFF'), + '-DGUNROCK_APP_HITS={0}'.format( + 'ON' if spec.satisfies('applications=hits') else 'OFF'), + '-DGUNROCK_APP_SALSA={0}'.format( + 'ON' if spec.satisfies('applications=salsa') else 'OFF'), + '-DGUNROCK_APP_MST={0}'.format( + 'ON' if spec.satisfies('applications=mst') else 'OFF'), + '-DGUNROCK_APP_WTF={0}'.format( + 'ON' if spec.satisfies('applications=wtf') else 'OFF'), + '-DGUNROCK_APP_TOPK={0}'.format( + 'ON' if spec.satisfies('applications=topk') else 'OFF'), + ]) + + return args def install(self, spec, prefix): with working_dir(self.build_directory): - install_tree('bin', prefix.bin) install_tree('lib', prefix.lib) + # bin dir is created only if tests/examples are built + if '+tests' in spec: + install_tree('bin', prefix.bin) From cbaa1bca1c829fbe5c02faa63ab9e37f471c95b5 Mon Sep 17 00:00:00 2001 From: TZ Date: Tue, 7 Jul 2020 10:09:27 +0200 Subject: [PATCH 058/149] ncview: added v2.1.8 (#17388) --- var/spack/repos/builtin/packages/ncview/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/ncview/package.py b/var/spack/repos/builtin/packages/ncview/package.py index f142a435f25..3eb944ce9c7 100644 --- a/var/spack/repos/builtin/packages/ncview/package.py +++ b/var/spack/repos/builtin/packages/ncview/package.py @@ -11,6 +11,7 @@ class Ncview(AutotoolsPackage): homepage = "http://meteora.ucsd.edu/~pierce/ncview_home_page.html" url = "ftp://cirrus.ucsd.edu/pub/ncview/ncview-2.1.7.tar.gz" + version('2.1.8', sha256='e8badc507b9b774801288d1c2d59eb79ab31b004df4858d0674ed0d87dfc91be') version('2.1.7', sha256='a14c2dddac0fc78dad9e4e7e35e2119562589738f4ded55ff6e0eca04d682c82') depends_on('netcdf-c') From 1f87b076899dc796b2df49563d8cc575810a27c0 Mon Sep 17 00:00:00 2001 From: TZ Date: Tue, 7 Jul 2020 10:18:27 +0200 Subject: [PATCH 059/149] nco: added v4.8.[0,1] and v4.9.[0-3] (#17389) --- var/spack/repos/builtin/packages/nco/package.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/var/spack/repos/builtin/packages/nco/package.py b/var/spack/repos/builtin/packages/nco/package.py index 859dac6ab74..cd30f8742a0 100644 --- a/var/spack/repos/builtin/packages/nco/package.py +++ b/var/spack/repos/builtin/packages/nco/package.py @@ -13,6 +13,12 @@ class Nco(AutotoolsPackage): homepage = "http://nco.sourceforge.net/" url = "https://github.com/nco/nco/archive/4.6.7.tar.gz" + version('4.9.3', sha256='eade5b79f3814b11ae3f52c34159567e76a73f05f0ab141eccaac68f0ca94aee') + version('4.9.2', sha256='1a98c37c946c00232fa7319d00d1d80f77603adda7c9239d10d68a8a3545a4d5') + version('4.9.1', sha256='9592efaf0dfd6ccdefd0b417d990cfccae7e89c20d90fb44ead6263009778834') + version('4.9.0', sha256='21dd53f427793cbc52d1c007e9b7339c83f6944a937a1acfbbe733e49b65378b') + version('4.8.1', sha256='ddae3fed46c266798ed1176d6a70b36376d2d320fa933c716a623172d1e13c68') + version('4.8.0', sha256='91f95ebfc9baa888adaec3016ca18a6297e2881b1429d74543a27fdfbe15fcab') version('4.7.9', sha256='048f6298bceb40913c3ae433f875dea1e9129b1c86019128e7271d08f274a879') version('4.6.7', sha256='2fe2dabf14a60bface694307cbe719df57103682b715348e9d77bfe8d31487f3') version('4.6.6', sha256='079d83f800b73d9b12b8de1634a88c2cbe40a639aaf7bc056cd2e836c6047697') From 845139740f75c42ad7b55047d179cd1eb3b5299e Mon Sep 17 00:00:00 2001 From: Glenn Johnson Date: Tue, 7 Jul 2020 04:01:59 -0500 Subject: [PATCH 060/149] mumax: new package at v3.10beta (#17398) This PR creates a new spack package for mumax: GPU accelerated micromagnetic simulator. This uses the current beta version because - it is somewhat dated, ~2018 - it is the only one that supports recent GPU kernels --- .../repos/builtin/packages/mumax/package.py | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 var/spack/repos/builtin/packages/mumax/package.py diff --git a/var/spack/repos/builtin/packages/mumax/package.py b/var/spack/repos/builtin/packages/mumax/package.py new file mode 100644 index 00000000000..ac9183c45ea --- /dev/null +++ b/var/spack/repos/builtin/packages/mumax/package.py @@ -0,0 +1,62 @@ +# 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 os +import shutil + + +class Mumax(MakefilePackage, CudaPackage): + """GPU accelerated micromagnetic simulator.""" + + homepage = "http://mumax.github.io" + url = "https://github.com/mumax/3/archive/3.10beta.tar.gz" + + version('3.10beta', sha256='f20fbd90a4b531fe5a0d8acc3d4505a092a5e426f5f53218a22a87d445daf0e9') + + variant('cuda', default=True, + description='Use CUDA; must be true') + variant('cuda_arch', 'N/A', + description='Mumax will build GPU kernels that it supports') + variant('gnuplot', default=False, + description='Use gnuplot for graphs') + + depends_on('cuda') + depends_on('go', type='build') + depends_on('gnuplot', type='run', when='+gnuplot') + + conflicts('~cuda', msg='mumax requires cuda') + + patch('https://github.com/mumax/3/commit/2cf5c9a6985c9eb16a124c6bd96aed75b4a30c24.patch', + sha256='a43b2ca6c9f9edfb1fd6d916a599f85a57c8bb3f9ee38148b1988fd82feec8ad') + + @property + def gopath(self): + return self.stage.path + + @property + def mumax_gopath_dir(self): + return join_path(self.gopath, 'src/github.com/mumax/3') + + def do_stage(self, mirror_only=False): + super(Mumax, self).do_stage(mirror_only) + if not os.path.exists(self.mumax_gopath_dir): + # Need to move source to $GOPATH and then symlink the original + # stage directory + shutil.move(self.stage.source_path, self.mumax_gopath_dir) + force_symlink(self.mumax_gopath_dir, self.stage.source_path) + + # filter out targets that do not exist + def edit(self, spec, prefix): + filter_file(r'(^ln -sf .*)', r'#\1', 'make.bash') + filter_file(r'(^\(cd test)', r'#\1', 'make.bash') + + def setup_build_environment(self, env): + env.prepend_path('GOPATH', self.gopath) + + def install(self, spec, prefix): + make() + with working_dir(self.gopath): + install_tree('bin', prefix.bin) From d65a076c0d8dc16fd84feffb837e7f145f3df157 Mon Sep 17 00:00:00 2001 From: ketsubouchi <67359246+ketsubouchi@users.noreply.github.com> Date: Tue, 7 Jul 2020 18:28:55 +0900 Subject: [PATCH 061/149] bliss: add spaces to __DATE__ (#17385) C++11 requires a space between literal and string macro. --- var/spack/repos/builtin/packages/bliss/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/bliss/package.py b/var/spack/repos/builtin/packages/bliss/package.py index 7878f16cb08..b42e9cac9c1 100644 --- a/var/spack/repos/builtin/packages/bliss/package.py +++ b/var/spack/repos/builtin/packages/bliss/package.py @@ -24,6 +24,7 @@ class Bliss(Package): patch("Makefile.spack.patch") def install(self, spec, prefix): + filter_file('__DATE__', ' __DATE__ ', 'bliss.cc') # The Makefile isn't portable; use our own instead makeargs = ["-f", "Makefile.spack", "PREFIX=%s" % prefix, "GMP_PREFIX=%s" % spec["gmp"].prefix] From 1113357e3573236689b2ef363a75f6f5962f8ea1 Mon Sep 17 00:00:00 2001 From: Harmen Stoppels Date: Tue, 7 Jul 2020 12:56:57 +0200 Subject: [PATCH 062/149] libtree: fixed checksums (#17393) The hash was wrongly computed for the `tar.gz` that Github provides, not the custom tarball which includes submodules as well. --- var/spack/repos/builtin/packages/libtree/package.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/var/spack/repos/builtin/packages/libtree/package.py b/var/spack/repos/builtin/packages/libtree/package.py index 10ca8db31db..e44a4a86619 100644 --- a/var/spack/repos/builtin/packages/libtree/package.py +++ b/var/spack/repos/builtin/packages/libtree/package.py @@ -15,9 +15,9 @@ class Libtree(CMakePackage): maintainers = ['haampie'] - version('1.2.0', sha256='4316a52aed7c8d2f7d2736c935bbda952204be92e56948110a143283764c427c') - version('1.1.4', sha256='cfafb24c8f5e0d356c82777c338d58730ca6f3cb76dfe8a6857ee3ad65bf8be7') - version('1.1.3', sha256='7baf5aaecd3a076bf1e7a1aa86979e7b841ab3f678ca8ac0e2a22bbbccf0dd06') + version('1.2.0', sha256='3e74655f22b1dcc19e8a1b9e7796b8ad44bc37f29e9a99134119e8521e28be97') + version('1.1.4', sha256='38648f67c8fa72c3a4a3af2bb254b5fd6989c0f1362387ab298176db5cbbcc4e') + version('1.1.3', sha256='4c681d7b67ef3d62f95450fb7eb84e33ff10a3b9db1f7e195b965b2c3c58226b') version('1.1.2', sha256='31641c6bf6c2980ffa7b4c57392460434f97ba66fe51fe6346867430b33a0374') version('1.1.1', sha256='3e8543145a40a94e9e2ce9fed003d2bf68294e1fce9607028a286bc132e17dc4') version('1.1.0', sha256='6cf36fb9a4c8c3af01855527d4931110732bb2d1c19be9334c689f1fd1c78536') From 51f65152a58090d411ccfb9e62a25e652a0dcb90 Mon Sep 17 00:00:00 2001 From: figroc Date: Tue, 7 Jul 2020 20:02:21 +0800 Subject: [PATCH 063/149] abseil-cpp: added v20200225.2 (#17383) --- var/spack/repos/builtin/packages/abseil-cpp/package.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/abseil-cpp/package.py b/var/spack/repos/builtin/packages/abseil-cpp/package.py index c40b2353bf8..24ac21fd631 100644 --- a/var/spack/repos/builtin/packages/abseil-cpp/package.py +++ b/var/spack/repos/builtin/packages/abseil-cpp/package.py @@ -10,10 +10,11 @@ class AbseilCpp(CMakePackage): """Abseil Common Libraries (C++) """ homepage = "https://abseil.io/" - url = "https://github.com/abseil/abseil-cpp/archive/20180600.tar.gz" + url = "https://github.com/abseil/abseil-cpp/archive/20200225.2.tar.gz" maintainers = ['jcftang'] + version('20200225.2', sha256='f41868f7a938605c92936230081175d1eae87f6ea2c248f41077c8f88316f111') version('20200225.1', sha256='0db0d26f43ba6806a8a3338da3e646bb581f0ca5359b3a201d8fb8e4752fd5f8') version('20190808', sha256='8100085dada279bf3ee00cd064d43b5f55e5d913be0dfe2906f06f8f28d5b37e') version('20181200', sha256='e2b53bfb685f5d4130b84c4f3050c81bf48c497614dc85d91dbd3ed9129bce6d') From 05d8ba170bc8646909a91db9a116595ad68a8cfb Mon Sep 17 00:00:00 2001 From: g-mathias <40861554+g-mathias@users.noreply.github.com> Date: Tue, 7 Jul 2020 16:11:53 +0200 Subject: [PATCH 064/149] jube: added v2.4.0 (#17404) Co-authored-by: lu64bag3 --- var/spack/repos/builtin/packages/jube/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/jube/package.py b/var/spack/repos/builtin/packages/jube/package.py index f108d991723..aff47bc55e8 100644 --- a/var/spack/repos/builtin/packages/jube/package.py +++ b/var/spack/repos/builtin/packages/jube/package.py @@ -14,6 +14,7 @@ class Jube(PythonPackage): homepage = "https://www.fz-juelich.de/jsc/jube/" url = "https://apps.fz-juelich.de/jsc/jube/jube2/download.php?version=2.2.2" + version('2.4.0', sha256='87c02555f3d1a8ecaff139cf8e7a7167cabd1049c8cc77f1bd8f4484e210d524', extension='tar.gz') version('2.3.0', sha256='6051d45af2ff35031ccc460185fbfa61f7f36ea14f17a0d51a9e62cd7af3709a', extension="tar.gz") version('2.2.2', sha256='135bc03cf07c4624ef2cf581ba5ec52eb44ca1dac15cffb83637e86170980477', extension="tar.gz") version('2.2.1', sha256='68751bf2e17766650ccddb7a5321dd1ac8b34ffa3585db392befbe9ff180ddd9', extension="tar.gz") From 6c300ab717d7bea6bf05cf8090b37a3d092a8b27 Mon Sep 17 00:00:00 2001 From: Frank Willmore Date: Tue, 7 Jul 2020 10:25:26 -0500 Subject: [PATCH 065/149] snappy: added v1.1.8 (#17397) --- var/spack/repos/builtin/packages/snappy/package.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/snappy/package.py b/var/spack/repos/builtin/packages/snappy/package.py index d5ade343f3c..2e0154aa6f1 100644 --- a/var/spack/repos/builtin/packages/snappy/package.py +++ b/var/spack/repos/builtin/packages/snappy/package.py @@ -10,8 +10,9 @@ class Snappy(CMakePackage): """A fast compressor/decompressor: https://code.google.com/p/snappy""" homepage = "https://github.com/google/snappy" - url = "https://github.com/google/snappy/archive/1.1.7.tar.gz" + url = "https://github.com/google/snappy/archive/1.1.8.tar.gz" + version('1.1.8', sha256='16b677f07832a612b0836178db7f374e414f94657c138e6993cbfc5dcc58651f') version('1.1.7', sha256='3dfa02e873ff51a11ee02b9ca391807f0c8ea0529a4924afa645fbf97163f9d4') variant('shared', default=True, description='Build shared libraries') From 90285c7d6105d6ec1d77d207338ba4eea54cc212 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Tue, 7 Jul 2020 12:27:10 -0600 Subject: [PATCH 066/149] votca-tools: fix build with mkl (#17414) --- var/spack/repos/builtin/packages/votca-tools/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/votca-tools/package.py b/var/spack/repos/builtin/packages/votca-tools/package.py index f676fb633b6..8bedb0477ae 100644 --- a/var/spack/repos/builtin/packages/votca-tools/package.py +++ b/var/spack/repos/builtin/packages/votca-tools/package.py @@ -30,7 +30,7 @@ class VotcaTools(CMakePackage): version('1.4', sha256='41638122e7e59852af61d391b4ab8c308fd2e16652f768077e13a99d206ec5d3') # https://github.com/votca/tools/pull/229, fix mkl in exported target - patch("https://github.com/votca/tools/pull/229.patch", sha256="250d0b679e5d3104e3c8d6adf99751b71386c7ed4cbdae1c75408717ef3f401f", when="@1.6+mkl") + patch("https://github.com/votca/tools/pull/229.patch", sha256="250d0b679e5d3104e3c8d6adf99751b71386c7ed4cbdae1c75408717ef3f401f", when="@1.6:1.6.0+mkl") variant('mkl', default=False, description='Build with MKL support') conflicts('+mkl', when='@1.4:1.5.9999') From 650ab563f42d68ea7e9bf0fe296e2b9b1e78755c Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Tue, 7 Jul 2020 11:37:36 -0700 Subject: [PATCH 067/149] Uninstall: tolerate hook failures when force=true (#16513) Fixes #16478 This allows an uninstall to proceed even when encountering pre-uninstall hook failures if the user chooses the --force option for the uninstall. This also prevents post-uninstall hook failures from raising an exception, which would terminate a sequence of uninstalls. This isn't likely essential for #16478, but I think overall it will improve the user experience: if the post-uninstall hook fails, there isn't much point in terminating a sequence of spec uninstalls because at the point where the post-uninstall hook is run, the spec has already been removed from the database (so it will never have another chance to run). Notes: * When doing spack uninstall -a, certain pre/post-uninstall hooks aren't important to run, but this isn't easy to track with the current model. For example: if you are uninstalling a package and its extension, you do not have to do the activation check for the extension. * This doesn't handle the uninstallation of specs that are not in the DB, so it may leave "dangling" specs in the installation prefix --- lib/spack/spack/package.py | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py index 5c4ff23d406..cedcfffed28 100644 --- a/lib/spack/spack/package.py +++ b/lib/spack/spack/package.py @@ -22,6 +22,7 @@ import sys import textwrap import time +import traceback from six import StringIO from six import string_types from six import with_metaclass @@ -1744,7 +1745,23 @@ def uninstall_by_spec(spec, force=False, deprecator=None): with spack.store.db.prefix_write_lock(spec): if pkg is not None: - spack.hooks.pre_uninstall(spec) + try: + spack.hooks.pre_uninstall(spec) + except Exception as error: + if force: + error_msg = ( + "One or more pre_uninstall hooks have failed" + " for {0}, but Spack is continuing with the" + " uninstall".format(str(spec))) + if isinstance(error, spack.error.SpackError): + error_msg += ( + "\n\nError message: {0}".format(str(error))) + tty.warn(error_msg) + # Note that if the uninstall succeeds then we won't be + # seeing this error again and won't have another chance + # to run the hook. + else: + raise # Uninstalling in Spack only requires removing the prefix. if not spec.external: @@ -1765,7 +1782,20 @@ def uninstall_by_spec(spec, force=False, deprecator=None): spack.store.db.remove(spec) if pkg is not None: - spack.hooks.post_uninstall(spec) + try: + spack.hooks.post_uninstall(spec) + except Exception: + # If there is a failure here, this is our only chance to do + # something about it: at this point the Spec has been removed + # from the DB and prefix, so the post-uninstallation hooks + # will not have another chance to run. + error_msg = ( + "One or more post-uninstallation hooks failed for" + " {0}, but the prefix has been removed (if it is not" + " external).".format(str(spec))) + tb_msg = traceback.format_exc() + error_msg += "\n\nThe error:\n\n{0}".format(tb_msg) + tty.warn(error_msg) tty.msg("Successfully uninstalled %s" % spec.short_spec) From b0506a722efbc9d94fb8673235af3a18984b2217 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Tue, 7 Jul 2020 11:44:15 -0700 Subject: [PATCH 068/149] releases: document `releases/latest` tag (#17402) We got rid of `master` after #17377, but users still want a way to get the latest stable release without knowing its number. We've added a `releases/latest` tag to replace what was once `master`. Co-authored-by: Massimiliano Culpo --- README.md | 2 + lib/spack/docs/developer_guide.rst | 91 +++++++++++++++++++----------- 2 files changed, 61 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 2ab9d2dfdf9..1cafb5c963a 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,8 @@ change the way Spack concretizes dependencies within a release branch. So, you can base your Spack deployment on a release branch and `git pull` to get fixes, without the package churn that comes with `develop`. +The latest release is always available with the `releases/latest` tag. + See the [docs on releases](https://spack.readthedocs.io/en/latest/developer_guide.html#releases) for more details. diff --git a/lib/spack/docs/developer_guide.rst b/lib/spack/docs/developer_guide.rst index 5c57f28226f..5e905c3d1bf 100644 --- a/lib/spack/docs/developer_guide.rst +++ b/lib/spack/docs/developer_guide.rst @@ -557,8 +557,10 @@ packages. They should generally only contain fixes to the Spack core. Both major and minor releases are tagged. After each release, we merge the release branch back into ``develop`` so that the version bump and any -other release-specific changes are visible in the mainline (see -:ref:`merging-releases-to-develop`). +other release-specific changes are visible in the mainline. As a +convenience, we also tag the latest release as ``releases/latest``, +so that users can easily check it out to get the latest +stable version. See :ref:`merging-releases` for more details. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -641,7 +643,7 @@ for a major release, the steps to make the release are as follows: #. Follow the steps in :ref:`publishing-releases`. -#. Follow the steps in :ref:`merging-releases-to-develop`. +#. Follow the steps in :ref:`merging-releases`. #. Follow the steps in :ref:`announcing-releases`. @@ -744,7 +746,7 @@ release: #. Follow the steps in :ref:`publishing-releases`. -#. Follow the steps in :ref:`merging-releases-to-develop`. +#. Follow the steps in :ref:`merging-releases`. #. Follow the steps in :ref:`announcing-releases`. @@ -794,45 +796,70 @@ Publishing a release on GitHub for ``download_count`` to see this. -.. _merging-releases-to-develop: +.. _merging-releases: -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Merging back into ``develop`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Updating `develop` and `releases/latest` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Once each release is complete, make sure that it is merged back into -``develop`` with a merge commit: +We merge each release into ``develop``, we tag the latest release as +``releases/latest``. -.. code-block:: console +#. Once each release is complete, make sure that it is merged back into + ``develop`` with a merge commit: - $ git checkout develop - $ git merge --no-ff releases/v0.15 - $ git push + .. code-block:: console -We merge back to ``develop`` because it: + $ git checkout develop + $ git merge --no-ff releases/vX.Y # vX.Y is the new release's branch + $ git push - * updates the version and ``CHANGELOG.md`` on ``develop``. - * ensures that your release tag is reachable from the head of - ``develop`` + We merge back to ``develop`` because it: -We *must* use a real merge commit (via the ``--no-ff`` option) because it -ensures that the release tag is reachable from the tip of ``develop``. -This is necessary for ``spack -V`` to work properly -- it uses ``git -describe --tags`` to find the last reachable tag in the repository and -reports how far we are from it. For example: + * updates the version and ``CHANGELOG.md`` on ``develop``. + * ensures that your release tag is reachable from the head of + ``develop`` -.. code-block:: console + We *must* use a real merge commit (via the ``--no-ff`` option) because it + ensures that the release tag is reachable from the tip of ``develop``. + This is necessary for ``spack -V`` to work properly -- it uses ``git + describe --tags`` to find the last reachable tag in the repository and + reports how far we are from it. For example: - $ spack -V - 0.14.2-1486-b80d5e74e5 + .. code-block:: console -This says that we are at commit ``b80d5e74e5``, which is 1,486 commits -ahead of the ``0.14.2`` release. + $ spack -V + 0.14.2-1486-b80d5e74e5 -We put this step last in the process because it's best to do it only once -the release is complete and tagged. If you do it before you've tagged the -release and later decide you want to tag some later commit, you'll need -to merge again. + This says that we are at commit ``b80d5e74e5``, which is 1,486 commits + ahead of the ``0.14.2`` release. + + We put this step last in the process because it's best to do it only once + the release is complete and tagged. If you do it before you've tagged the + release and later decide you want to tag some later commit, you'll need + to merge again. + +#. If the new release is the **highest** Spack release yet, you should + also tag it as ``releases/latest``. For example, suppose the highest + release is currently ``0.15.3``: + + * If you are releasing ``0.15.4`` or ``0.16.0``, then you should tag + it with ``releases/latest``, as these are higher than ``0.15.3``. + + * If you are making a new release of an **older** major version of + Spack, e.g. ``0.14.4``, then you should not tag it as + ``releases/latest`` (as there are newer major versions). + + To tag ``releases/latest``, do this: + + .. code-block:: console + + $ git checkout releases/vX.Y # vX.Y is the new release's branch + $ git tag --force releases/latest + $ git push --tags + + The ``--force`` argument makes ``git`` overwrite the existing + ``releases/latest`` tag with the new one. .. _announcing-releases: From f4ac3770b49d88facff077b5d3d05234c638017d Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Tue, 7 Jul 2020 20:45:41 +0200 Subject: [PATCH 069/149] CudaPackage: maintainers are listed in the docstring (#17409) fixes #17396 This prevents the class attribute to be inherited and saves current maintainers from becoming the default maintainers of every Cuda package. --- lib/spack/spack/build_systems/cuda.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/spack/spack/build_systems/cuda.py b/lib/spack/spack/build_systems/cuda.py index cbee7100496..0c903f0b1f5 100644 --- a/lib/spack/spack/build_systems/cuda.py +++ b/lib/spack/spack/build_systems/cuda.py @@ -12,8 +12,9 @@ class CudaPackage(PackageBase): """Auxiliary class which contains CUDA variant, dependencies and conflicts and is meant to unify and facilitate its usage. + + Maintainers: ax3l, svenevs """ - maintainers = ['ax3l', 'svenevs'] # https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#gpu-feature-list # https://developer.nvidia.com/cuda-gpus From 3ce16c89b7491a783de1c30011e87852da7213ff Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Tue, 7 Jul 2020 15:45:25 -0500 Subject: [PATCH 070/149] GDAL: add v3.1.2 (#17416) --- var/spack/repos/builtin/packages/gdal/package.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/gdal/package.py b/var/spack/repos/builtin/packages/gdal/package.py index b3678bed327..e5a727b66d0 100644 --- a/var/spack/repos/builtin/packages/gdal/package.py +++ b/var/spack/repos/builtin/packages/gdal/package.py @@ -18,7 +18,7 @@ class Gdal(AutotoolsPackage): """ homepage = "https://www.gdal.org/" - url = "https://download.osgeo.org/gdal/3.1.1/gdal-3.1.1.tar.xz" + url = "https://download.osgeo.org/gdal/3.1.2/gdal-3.1.2.tar.xz" list_url = "https://download.osgeo.org/gdal/" list_depth = 1 @@ -29,6 +29,7 @@ class Gdal(AutotoolsPackage): 'osgeo.gdal_array', 'osgeo.gdalconst' ] + version('3.1.2', sha256='767c8d0dfa20ba3283de05d23a1d1c03a7e805d0ce2936beaff0bb7d11450641') version('3.1.1', sha256='97154a606339a6c1d87c80fb354d7456fe49828b2ef9a3bc9ed91771a03d2a04') version('3.1.0', sha256='e754a22242ccbec731aacdb2333b567d4c95b9b02d3ba1ea12f70508d244fcda') version('3.0.4', sha256='5569a4daa1abcbba47a9d535172fc335194d9214fdb96cd0f139bb57329ae277') From a63761f87542c29e9e026ac8b78894908780c003 Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Tue, 7 Jul 2020 16:38:47 -0500 Subject: [PATCH 071/149] oneDNN: add v1.5.1 (#17419) --- var/spack/repos/builtin/packages/onednn/package.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/onednn/package.py b/var/spack/repos/builtin/packages/onednn/package.py index 82d22296f9d..eb98cfe2edc 100644 --- a/var/spack/repos/builtin/packages/onednn/package.py +++ b/var/spack/repos/builtin/packages/onednn/package.py @@ -12,10 +12,11 @@ class Onednn(CMakePackage): Formerly known as Intel MKL-DNN and DNNL.""" homepage = "https://01.org/dnnl" - url = "https://github.com/oneapi-src/oneDNN/archive/v1.5.tar.gz" + url = "https://github.com/oneapi-src/oneDNN/archive/v1.5.1.tar.gz" maintainers = ['adamjstewart'] + version('1.5.1', sha256='aef4d2a726f76f5b98902491a1a4ac69954039aa8e5a1d67ef6ce58ed00e23a6') version('1.5', sha256='2aacc00129418185e0bc1269d3ef82f93f08de2c336932989c0c360279129edb') version('1.4', sha256='54737bcb4dc1961d32ee75da3ecc529fa48198f8b2ca863a079e19a9c4adb70f') version('1.3', sha256='b87c23b40a93ef5e479c81028db71c4847225b1a170f82af5e79f1cda826d3bf') From 7f8e827db808c32389a62171abc3baf2ce9e84f9 Mon Sep 17 00:00:00 2001 From: Patrick Gartung Date: Tue, 7 Jul 2020 16:46:39 -0500 Subject: [PATCH 072/149] Relocate rpaths for all binaries, then do text bin replacement if the rpaths still exist after running patchelf/otool (#17418) --- lib/spack/spack/binary_distribution.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/spack/spack/binary_distribution.py b/lib/spack/spack/binary_distribution.py index 05a79048151..1659b392838 100644 --- a/lib/spack/spack/binary_distribution.py +++ b/lib/spack/spack/binary_distribution.py @@ -604,13 +604,9 @@ def is_backup_file(file): # 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']))) + files_to_relocate = [os.path.join(workdir, filename) + for filename in buildinfo.get('relocate_binaries') + ] # If the buildcache was not created with relativized rpaths # do the relocation of path in binaries if (spec.architecture.platform == 'darwin' or @@ -646,6 +642,13 @@ def is_backup_file(file): new_spack_prefix, prefix_to_prefix) + paths_to_relocate = [old_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']))) # relocate the install prefixes in binary files including dependencies relocate.relocate_text_bin(files_to_relocate, old_prefix, new_prefix, From f1f31e3dfe593abe09389ea2bcc249f165b55092 Mon Sep 17 00:00:00 2001 From: iarspider Date: Wed, 8 Jul 2020 05:24:48 +0200 Subject: [PATCH 073/149] Fix YODA and Rivet recipes (#17412) * Fix Rivet recipe; restrict Yoda versions for a give Rivet version * Fix YODA recipe * More tweaks to YODA version requirements * Flake-8 --- .../repos/builtin/packages/rivet/package.py | 57 +++++++++++++++++-- .../repos/builtin/packages/yoda/package.py | 2 +- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/var/spack/repos/builtin/packages/rivet/package.py b/var/spack/repos/builtin/packages/rivet/package.py index 8baf2c42ec4..3d28b816325 100644 --- a/var/spack/repos/builtin/packages/rivet/package.py +++ b/var/spack/repos/builtin/packages/rivet/package.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) from spack import * +import os class Rivet(AutotoolsPackage): @@ -58,17 +59,56 @@ class Rivet(AutotoolsPackage): version('1.1.2', sha256='a15b5d3339481446dec1b719d7d531a87a2e9d11c9fe8044e270ea69611b07c8') version('1.1.1', sha256='bd87fefee6bb8368216755342dc80ab3f8f3c813732dd03c6f94135d45f7036b') - depends_on('yoda', type=('build', 'run'), when='@2.0.0:') - depends_on('yoda@1.8.0:', type=('build', 'run'), when='@3.1.0:') + # According to A. Buckley (main Rivet developer): + # "typically a given Rivet version will work with + # all YODA releases of that middle-digit version, + # and maybe older. Generally it's always a good idea + # to be using the latest versions of both.". The versions below + # are taken from LCG stack which, in most cases, is the definition + # of "latest" at the moment of release. + depends_on('yoda@1.0.4', when='@2.0.0') + depends_on('yoda@1.0.5', when='@2.1.0') + depends_on('yoda@1.0.6', when='@2.1.1') + depends_on('yoda@1.1.0', when='@2.1.2') + depends_on('yoda@1.3.0', when='@2.2.0') + depends_on('yoda@1.3.1', when='@2.2.1') + depends_on('yoda@1.4.0', when='@2.3.0') + depends_on('yoda@1.5.5', when='@2.4.0') + depends_on('yoda@1.5.9', when='@2.4.2') + depends_on('yoda@1.6.1', when='@2.4.3') + depends_on('yoda@1.6.2', when='@2.5.0') + depends_on('yoda@1.6.3', when='@2.5.1') + depends_on('yoda@1.6.5', when='@2.5.2') + depends_on('yoda@1.6.6', when='@2.5.3') + depends_on('yoda@1.6.7', when='@2.5.4') + depends_on('yoda@1.7.1', when='@2.6.1') + depends_on('yoda@1.7.4', when='@2.6.2') + depends_on('yoda@1.7.5', when='@2.7.2') + depends_on('yoda@1.7.5', when='@2.7.2b') + depends_on('yoda@1.7.7', when='@3.0.1') + depends_on('yoda@1.8.0', when='@3.1.0') + depends_on('yoda@1.8.2', when='@3.1.1') + depends_on('yoda@1.8.3', when='@3.1.2') + + # The following versions were not a part of LCG stack + # and thus the exact version of YODA is unknown + depends_on('yoda@1.7.0:1.7.999', when='@2.6.0,2.7.0,2.7.1,3.0.0,3.0.2,3.1.0') + depends_on('yoda@1.5.0:1.5.999', when='@2.4.1') depends_on('hepmc', type=('build', 'run')) depends_on('boost', when='@:2.5.0,3:', type=('build', 'run')) depends_on('fastjet', type=('build', 'run')) + depends_on('fjcontrib', type=('build', 'run'), when='@3.0.0:') depends_on('gsl', type=('build', 'run'), when='@:2.6.0,2.6.2:') depends_on('python', type=('build', 'run')) depends_on('swig', type=('build', 'run')) depends_on('yaml-cpp', when='@2.0.0:2.1.2', type=('build', 'run')) + depends_on('autoconf', type='build') + depends_on('automake', type='build') + depends_on('libtool', type='build') + depends_on('m4', type='build') + patch('rivet-1.8.2.patch', when='@1.8.2', level=0) patch('rivet-1.9.0.patch', when='@1.9.0', level=0) patch('rivet-2.2.0.patch', when='@2.2.0', level=0) @@ -92,12 +132,16 @@ class Rivet(AutotoolsPackage): @run_before('configure') def copy_gsl_m4(self): if self.spec.satisfies('@2.6.2:'): - copy('rivet/gsl.m4', 'm4/gsl.m4') + copy(join_path(os.path.dirname(__file__), 'gsl.m4'), 'm4/gsl.m4') @property def force_autoreconf(self): return self.version >= Version('2.6.2') + def setup_build_environment(self, env): + # this avoids an "import site" error in the build + env.unset('PYTHONHOME') + def configure_args(self): args = [] args += ['--with-hepmc=' + self.spec['hepmc'].prefix] @@ -105,7 +149,7 @@ def configure_args(self): if self.spec.satisfies('@:1.999.999'): args += ['--with-boost-incpath=' + self.spec['boost'].includes] else: - if spec.satisfies('@:2.5.0,3:'): + if self.spec.satisfies('@:2.5.0,3:'): args += ['--with-boost=' + self.spec['boost'].prefix] args += ['--with-fastjet=' + self.spec['fastjet'].prefix] @@ -113,7 +157,10 @@ def configure_args(self): args += ['--with-yoda=' + self.spec['yoda'].prefix] if self.spec.satisfies('@:2.6.0,2.6.2:'): - args += ['--with-gsl=' + self.spc['gsl'].prefix] + args += ['--with-gsl=' + self.spec['gsl'].prefix] + + if self.spec.satisfies('@3.0.0:'): + args += ['--with-fjcontrib=' + self.spec['fjcontrib'].prefix] args += ['--disable-pdfmanual', '--enable-unvalidated'] diff --git a/var/spack/repos/builtin/packages/yoda/package.py b/var/spack/repos/builtin/packages/yoda/package.py index 21ebb020d08..4da424c2a87 100644 --- a/var/spack/repos/builtin/packages/yoda/package.py +++ b/var/spack/repos/builtin/packages/yoda/package.py @@ -78,7 +78,7 @@ def configure_args(self): if self.spec.satisfies('@:1.6.0'): args += '--with-boost=' + self.spec['boost'].prefix - if '+root' in spec: + if '+root' in self.spec: args += '--enable-root' return args From f85da868ac1db5f75fd0eb9d31e49a4c32bcdf82 Mon Sep 17 00:00:00 2001 From: Simon Byrne Date: Tue, 7 Jul 2020 22:25:37 -0700 Subject: [PATCH 074/149] Improve Travis sample in the docs (#17420) - printf is better than echo for multiline strings - ** should be && - use line continuation - Use multiline block --- lib/spack/docs/workflows.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/spack/docs/workflows.rst b/lib/spack/docs/workflows.rst index 17ca6950823..2f215f8209f 100644 --- a/lib/spack/docs/workflows.rst +++ b/lib/spack/docs/workflows.rst @@ -1405,11 +1405,12 @@ The main points that are implemented below: - export CXXFLAGS="-std=c++11" install: - - if ! which spack >/dev/null; then + - | + if ! which spack >/dev/null; then mkdir -p $SPACK_ROOT && git clone --depth 50 https://github.com/spack/spack.git $SPACK_ROOT && - echo -e "config:""\n build_jobs:"" 2" > $SPACK_ROOT/etc/spack/config.yaml ** - echo -e "packages:""\n all:""\n target:"" ['x86_64']" + printf "config:\n build_jobs: 2\n" > $SPACK_ROOT/etc/spack/config.yaml && + printf "packages:\n all:\n target: ['x86_64']\n" \ > $SPACK_ROOT/etc/spack/packages.yaml; fi - travis_wait spack install cmake@3.7.2~openssl~ncurses From 084994db9c858b79ffe37dd1fc7205150d0a2447 Mon Sep 17 00:00:00 2001 From: TZ Date: Wed, 8 Jul 2020 08:42:49 +0200 Subject: [PATCH 075/149] ncl: fix compilation errors with Intel compilers (#17391) The Intel compilers are more strict and require special command line options (like -std=c99) to properly compile NCL. --- var/spack/repos/builtin/packages/ncl/package.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/ncl/package.py b/var/spack/repos/builtin/packages/ncl/package.py index 4d9980ecc55..046dd9b3a80 100644 --- a/var/spack/repos/builtin/packages/ncl/package.py +++ b/var/spack/repos/builtin/packages/ncl/package.py @@ -144,7 +144,9 @@ def prepare_site_config(self): c2f_flags.extend(['-lgfortran', '-lm']) elif self.compiler.name == 'intel': fc_flags.append('-fp-model precise') - cc_flags.append('-fp-model precise') + cc_flags.append('-fp-model precise' + ' -std=c99' + ' -D_POSIX_C_SOURCE=2 -D_GNU_SOURCE') c2f_flags.extend(['-lifcore', '-lifport']) if self.spec.satisfies('%gcc@10:'): From f0391db096552c7dd3750b0e244d5b3930fb480d Mon Sep 17 00:00:00 2001 From: ketsubouchi <67359246+ketsubouchi@users.noreply.github.com> Date: Wed, 8 Jul 2020 16:28:41 +0900 Subject: [PATCH 076/149] typhon: fix build with Fujitsu compilers (#17424) --- var/spack/repos/builtin/packages/typhon/package.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/var/spack/repos/builtin/packages/typhon/package.py b/var/spack/repos/builtin/packages/typhon/package.py index 350bd6ded2f..621b2479e47 100644 --- a/var/spack/repos/builtin/packages/typhon/package.py +++ b/var/spack/repos/builtin/packages/typhon/package.py @@ -23,3 +23,7 @@ class Typhon(CMakePackage): version('3.0', sha256='b9736269ebe9c0fd7efabc4716b0543144780ed26ddaf595083354113aa2efd7') depends_on('mpi') + + def setup_build_environment(self, env): + if self.spec.satisfies('%fj'): + env.set('LDFLAGS', '--linkfortran') From 207e496162f9bcef5f88ecdede3224cd9b588858 Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Wed, 8 Jul 2020 02:38:42 -0500 Subject: [PATCH 077/149] spack create: ask how many to download (#17373) --- lib/spack/spack/cmd/checksum.py | 2 +- lib/spack/spack/cmd/create.py | 8 ++++++-- share/spack/spack-completion.bash | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/spack/spack/cmd/checksum.py b/lib/spack/spack/cmd/checksum.py index 97e7833af0d..188deb11497 100644 --- a/lib/spack/spack/cmd/checksum.py +++ b/lib/spack/spack/cmd/checksum.py @@ -65,7 +65,7 @@ def checksum(parser, args): version_lines = spack.stage.get_checksums_for_versions( url_dict, pkg.name, keep_stage=args.keep_stage, - batch=(args.batch or len(args.versions) > 0), + batch=(args.batch or len(args.versions) > 0 or len(url_dict) == 1), fetch_options=pkg.fetch_options) print() diff --git a/lib/spack/spack/cmd/create.py b/lib/spack/spack/cmd/create.py index 7d12dc98a7d..48326868aec 100644 --- a/lib/spack/spack/cmd/create.py +++ b/lib/spack/spack/cmd/create.py @@ -445,6 +445,9 @@ def setup_parser(subparser): subparser.add_argument( '--skip-editor', action='store_true', help="skip the edit session for the package (e.g., automation)") + subparser.add_argument( + '-b', '--batch', action='store_true', + help="don't ask which versions to checksum") class BuildSystemGuesser: @@ -511,7 +514,7 @@ def __call__(self, stage, url): # Determine the build system based on the files contained # in the archive. for pattern, bs in clues: - if any(re.search(pattern, l) for l in lines): + if any(re.search(pattern, line) for line in lines): self.build_system = bs break @@ -629,7 +632,8 @@ def get_versions(args, name): versions = spack.stage.get_checksums_for_versions( url_dict, name, first_stage_function=guesser, - keep_stage=args.keep_stage, batch=True) + keep_stage=args.keep_stage, + batch=(args.batch or len(url_dict) == 1)) else: versions = unhashed_versions diff --git a/share/spack/spack-completion.bash b/share/spack/spack-completion.bash index 11bd906ad06..fc1b4e2a275 100755 --- a/share/spack/spack-completion.bash +++ b/share/spack/spack-completion.bash @@ -639,7 +639,7 @@ _spack_containerize() { _spack_create() { if $list_options then - SPACK_COMPREPLY="-h --help --keep-stage -n --name -t --template -r --repo -N --namespace -f --force --skip-editor" + SPACK_COMPREPLY="-h --help --keep-stage -n --name -t --template -r --repo -N --namespace -f --force --skip-editor -b --batch" else SPACK_COMPREPLY="" fi From ae2a867a7ffc25c9d2143e489a2de995ba663bec Mon Sep 17 00:00:00 2001 From: tcojean Date: Wed, 8 Jul 2020 15:42:56 +0200 Subject: [PATCH 078/149] Ginkgo: new versions (#17413) * Add new Ginkgo versions with HIP support. * Drop HIP support until more ROCm packages are integrated. --- .../builtin/packages/ginkgo/CAS-HIP-NVCC-1.2.0.patch | 10 ++++++++++ var/spack/repos/builtin/packages/ginkgo/package.py | 4 ++++ 2 files changed, 14 insertions(+) create mode 100644 var/spack/repos/builtin/packages/ginkgo/CAS-HIP-NVCC-1.2.0.patch diff --git a/var/spack/repos/builtin/packages/ginkgo/CAS-HIP-NVCC-1.2.0.patch b/var/spack/repos/builtin/packages/ginkgo/CAS-HIP-NVCC-1.2.0.patch new file mode 100644 index 00000000000..d562b0315bb --- /dev/null +++ b/var/spack/repos/builtin/packages/ginkgo/CAS-HIP-NVCC-1.2.0.patch @@ -0,0 +1,10 @@ +diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt +index 884e50bf6..40618311a 100644 +--- a/third_party/CMakeLists.txt ++++ b/third_party/CMakeLists.txt +@@ -1,4 +1,4 @@ +-if(GINKGO_BUILD_CUDA) ++if(GINKGO_BUILD_CUDA OR (GINKGO_BUILD_HIP AND GINKGO_HIP_PLATFORM STREQUAL "nvcc")) + enable_language(CUDA) + if (GINKGO_USE_EXTERNAL_CAS) + include(CudaArchitectureSelector RESULT_VARIABLE GINKGO_CAS_FILE) diff --git a/var/spack/repos/builtin/packages/ginkgo/package.py b/var/spack/repos/builtin/packages/ginkgo/package.py index 8440be25167..d0ee354256a 100644 --- a/var/spack/repos/builtin/packages/ginkgo/package.py +++ b/var/spack/repos/builtin/packages/ginkgo/package.py @@ -18,6 +18,8 @@ class Ginkgo(CMakePackage, CudaPackage): version('develop', branch='develop') version('master', branch='master') + version('1.2.0', commit='b4be2be961fd5db45c3d02b5e004d73550722e31') # v1.2.0 + version('1.1.1', commit='08d2c5200d3c78015ac8a4fd488bafe1e4240cf5') # v1.1.1 version('1.1.0', commit='b9bec8225442b3eb2a85a870efa112ab767a17fb') # v1.1.0 version('1.0.0', commit='45244641e0c2b19ba33aecd25153c0bddbcbe1a0') # v1.0.0 @@ -44,6 +46,8 @@ def cmake_args(self): 'ON' if '+full_optimizations' in spec else 'OFF'), '-DGINKGO_DEVEL_TOOLS=%s' % ( 'ON' if '+develtools' in spec else 'OFF'), + # Drop HIP support for now + '-DGINKGO_BUILD_HIP=OFF', # As we are not exposing benchmarks, examples, tests nor doc # as part of the installation, disable building them altogether. '-DGINKGO_BUILD_BENCHMARKS=OFF', From 1d2754c3f6d6b85785afd317d1aa7a8458267d07 Mon Sep 17 00:00:00 2001 From: Amjad Kotobi Date: Wed, 8 Jul 2020 15:44:47 +0200 Subject: [PATCH 079/149] r-usethis: new version and dependencies (#17411) * r-usethis: new version and dependencies * r-usethis: fix in dependency --- var/spack/repos/builtin/packages/r-usethis/package.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/r-usethis/package.py b/var/spack/repos/builtin/packages/r-usethis/package.py index e82085b5413..43567532f47 100644 --- a/var/spack/repos/builtin/packages/r-usethis/package.py +++ b/var/spack/repos/builtin/packages/r-usethis/package.py @@ -16,20 +16,25 @@ class RUsethis(RPackage): url = "https://cloud.r-project.org/src/contrib/usethis_1.5.1.tar.gz" list_url = "https://cloud.r-project.org/src/contrib/Archive/usethis" + version('1.6.1', sha256='60339059a97ed07dea7f8908b828b5bb42e0fd0b471165c061bc9660b0d59d6f') version('1.5.1', sha256='9e3920a04b0df82adf59eef2c1b2b4d835c4a757a51b3c163b8fc619172f561d') depends_on('r@3.2:', type=('build', 'run')) depends_on('r-clipr@0.3.0:', type=('build', 'run')) - depends_on('r-clisymbols', type=('build', 'run')) + depends_on('r-clisymbols', when='@:1.5', type=('build', 'run')) + depends_on('r-cli', when='@1.6.1:', type=('build', 'run')) depends_on('r-crayon', type=('build', 'run')) depends_on('r-curl@2.7:', type=('build', 'run')) depends_on('r-desc', type=('build', 'run')) depends_on('r-fs@1.3.0:', type=('build', 'run')) depends_on('r-gh', type=('build', 'run')) + depends_on('r-gh@1.1.0', when='@1.6.1:', type=('build', 'run')) depends_on('r-git2r@0.23:', type=('build', 'run')) depends_on('r-glue@1.3.0:', type=('build', 'run')) depends_on('r-purrr', type=('build', 'run')) + depends_on('r-rematch2', when='@1.6.1:', type=('build', 'run')) depends_on('r-rlang', type=('build', 'run')) + depends_on('r-rlang@0.4.3', when='@1.6.1:', type=('build', 'run')) depends_on('r-rprojroot@1.2:', type=('build', 'run')) depends_on('r-rstudioapi', type=('build', 'run')) depends_on('r-whisker', type=('build', 'run')) From 0bed621d0c373107dca3ff97ce3b81f29bb35a64 Mon Sep 17 00:00:00 2001 From: iarspider Date: Wed, 8 Jul 2020 17:50:47 +0200 Subject: [PATCH 080/149] Add missing file (#17426) Co-authored-by: Ivan Razumov --- var/spack/repos/builtin/packages/rivet/gsl.m4 | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 var/spack/repos/builtin/packages/rivet/gsl.m4 diff --git a/var/spack/repos/builtin/packages/rivet/gsl.m4 b/var/spack/repos/builtin/packages/rivet/gsl.m4 new file mode 100644 index 00000000000..61c89c957ca --- /dev/null +++ b/var/spack/repos/builtin/packages/rivet/gsl.m4 @@ -0,0 +1,60 @@ +# AC_SEARCH_GSL(actionIfFound, actionIfNotFound) +AC_DEFUN([AC_SEARCH_GSL],[ + AC_ARG_WITH([gsl], AC_HELP_STRING(--with-gsl, [path to GSL library and header files])) + + ## Use a specified --with-gsl arg to set basic paths, if provided + GSLCONFIG_PATH=$PATH + if test -e "$with_gsl"; then + GSLCONFIG_PATH="$with_gsl/bin:$GSLCONFIG_PATH" + GSLPATH="$with_gsl" + GSLINCPATH="$GSLPATH/include" + GSLLIBPATH="$GSLPATH/lib" + GSL_CPPFLAGS="-I$GSLINCPATH" + GSL_CXXFLAGS="" + GSL_LDFLAGS="-L$GSLPATH/lib -lgsl -lgslcblas -lm" + fi + + ## Try to do better, using the gsl-config script + AC_PATH_PROG(GSLCONFIG, gsl-config, [], [$GSLCONFIG_PATH]) + if test -x "$GSLCONFIG"; then + AC_MSG_NOTICE(Using $GSLCONFIG to find GSL flags) + GSLPATH=`$GSLCONFIG --prefix` + GSLINCPATH="$GSLPATH/include" + GSLLIBPATH="$GSLPATH/lib" + GSL_CPPFLAGS=`$GSLCONFIG --cflags` + GSL_CXXFLAGS=`$GSLCONFIG --cflags` + GSL_LDFLAGS=`$GSLCONFIG --libs` + fi + + ## If it's worked, propagate the conditionals and execute success arg + if test -e "$GSLPATH"; then + AM_CONDITIONAL([WITH_GSL], true) + AM_CONDITIONAL([WITH_GSLLIB], true) + AM_CONDITIONAL([WITH_GSLINC], true) + AM_CONDITIONAL([WITHOUT_GSL], false) + AM_CONDITIONAL([WITHOUT_GSLLIB], false) + AM_CONDITIONAL([WITHOUT_GSLINC], false) + $1 + else + ## Otherwise execute the fail arg + AM_CONDITIONAL([WITH_GSL], false) + AM_CONDITIONAL([WITH_GSLLIB], false) + AM_CONDITIONAL([WITH_GSLINC], false) + AM_CONDITIONAL([WITHOUT_GSL], true) + AM_CONDITIONAL([WITHOUT_GSLLIB], true) + AM_CONDITIONAL([WITHOUT_GSLINC], true) + $2 + fi + + ## Propagate path and flag variables + AC_SUBST([GSLPATH]) + AC_SUBST([GSLINCPATH]) + AC_SUBST([GSLLIBPATH]) + AC_SUBST([GSL_CPPFLAGS]) + AC_SUBST([GSL_CXXFLAGS]) + AC_SUBST([GSL_LDFLAGS]) + AC_MSG_NOTICE([GSL include path is $GSLINCPATH]) + AC_MSG_NOTICE([GSL CPPFLAGS is $GSL_CPPFLAGS]) + AC_MSG_NOTICE([GSL CXXFLAGS is $GSL_CXXFLAGS]) + AC_MSG_NOTICE([GSL LDFLAGS is $GSL_LDFLAGS]) +]) From 8c4117367803fac989582550fc546323e3586862 Mon Sep 17 00:00:00 2001 From: Patrick Gartung Date: Wed, 8 Jul 2020 15:05:58 -0500 Subject: [PATCH 081/149] Buildcache: bindist test without invoking spack compiler wrappers. (#15687) * Buildcache: * Try mocking an install of quux, corge and garply using prebuilt binaries * Put patchelf install after ccache restore * Add script to install patchelf from source so it can be used on Ubuntu:Trusty which does not have a patchelf pat package. The script will skip building on macOS * Remove mirror at end of bindist test * Add patchelf to Ubuntu build env * Revert mock patchelf package to allow other tests to run. * Remove depends_on('patchelf', type='build') relying instead on * Test fixture to ensure patchelf is available. * Call g++ command to build libraries directly during test build * Flake8 * Install patchelf in before_install stage using apt unless on Trusty where a build is done. * Add some symbolic links between packages * Flake8 * Flake8: * Update mock packages to write their own source files * Create the stage because spec search does not create it any longer * updates after change of list command arguments * cleanup after merge * flake8 --- .travis.yml | 8 + lib/spack/spack/binary_distribution.py | 1 + lib/spack/spack/test/bindist.py | 471 ++++++++++++++++++ share/spack/qa/install_patchelf.sh | 22 + .../builtin.mock/packages/corge/package.py | 155 ++++++ .../builtin.mock/packages/garply/package.py | 112 +++++ .../builtin.mock/packages/patchelf/package.py | 19 +- .../builtin.mock/packages/quux/package.py | 132 +++++ 8 files changed, 911 insertions(+), 9 deletions(-) create mode 100644 lib/spack/spack/test/bindist.py create mode 100755 share/spack/qa/install_patchelf.sh create mode 100644 var/spack/repos/builtin.mock/packages/corge/package.py create mode 100644 var/spack/repos/builtin.mock/packages/garply/package.py create mode 100644 var/spack/repos/builtin.mock/packages/quux/package.py diff --git a/.travis.yml b/.travis.yml index e4e6383dbdc..808e79bbfff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,14 @@ addons: - zsh - fish +before_install: + - if [[ "$TRAVIS_DIST" == "trusty" ]]; then + share/spack/qa/install_patchelf.sh; + else + sudo apt-get update; + sudo apt-get -y install patchelf; + fi + # Install various dependencies install: - pip install --upgrade pip diff --git a/lib/spack/spack/binary_distribution.py b/lib/spack/spack/binary_distribution.py index 1659b392838..c084d6e0fd3 100644 --- a/lib/spack/spack/binary_distribution.py +++ b/lib/spack/spack/binary_distribution.py @@ -498,6 +498,7 @@ def download_tarball(spec): # stage the tarball into standard place stage = Stage(url, name="build_cache", keep=True) + stage.create() try: stage.fetch() return stage.save_filename diff --git a/lib/spack/spack/test/bindist.py b/lib/spack/spack/test/bindist.py new file mode 100644 index 00000000000..f561077edd4 --- /dev/null +++ b/lib/spack/spack/test/bindist.py @@ -0,0 +1,471 @@ +# 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) + +""" +This test checks creating and install buildcaches +""" +import os +import py +import pytest +import argparse +import platform +import spack.repo +import spack.store +import spack.binary_distribution as bindist +import spack.cmd.buildcache as buildcache +import spack.cmd.install as install +import spack.cmd.uninstall as uninstall +import spack.cmd.mirror as mirror +from spack.spec import Spec +from spack.directory_layout import YamlDirectoryLayout + + +def_install_path_scheme = '${ARCHITECTURE}/${COMPILERNAME}-${COMPILERVER}/${PACKAGE}-${VERSION}-${HASH}' # noqa: E501 +ndef_install_path_scheme = '${PACKAGE}/${VERSION}/${ARCHITECTURE}-${COMPILERNAME}-${COMPILERVER}-${HASH}' # noqa: E501 + +mirror_path_def = None +mirror_path_rel = None + + +@pytest.fixture(scope='function') +def cache_directory(tmpdir): + old_cache_path = spack.caches.fetch_cache + tmpdir.ensure('fetch_cache', dir=True) + fsc = spack.fetch_strategy.FsCache(str(tmpdir.join('fetch_cache'))) + spack.config.caches = fsc + yield spack.config.caches + tmpdir.join('fetch_cache').remove() + spack.config.caches = old_cache_path + + +@pytest.fixture(scope='session') +def session_mirror_def(tmpdir_factory): + dir = tmpdir_factory.mktemp('mirror') + global mirror_path_rel + mirror_path_rel = dir + dir.ensure('build_cache', dir=True) + yield dir + dir.join('build_cache').remove() + + +@pytest.fixture(scope='function') +def mirror_directory_def(session_mirror_def): + yield str(session_mirror_def) + + +@pytest.fixture(scope='session') +def session_mirror_rel(tmpdir_factory): + dir = tmpdir_factory.mktemp('mirror') + global mirror_path_rel + mirror_path_rel = dir + dir.ensure('build_cache', dir=True) + yield dir + dir.join('build_cache').remove() + + +@pytest.fixture(scope='function') +def mirror_directory_rel(session_mirror_rel): + yield(session_mirror_rel) + + +@pytest.fixture(scope='session') +def config_directory(tmpdir_factory): + tmpdir = tmpdir_factory.mktemp('test_configs') + # restore some sane defaults for packages and config + config_path = py.path.local(spack.paths.etc_path) + modules_yaml = config_path.join('spack', 'defaults', 'modules.yaml') + os_modules_yaml = config_path.join('spack', 'defaults', '%s' % + platform.system().lower(), + 'modules.yaml') + packages_yaml = config_path.join('spack', 'defaults', 'packages.yaml') + config_yaml = config_path.join('spack', 'defaults', 'config.yaml') + repos_yaml = config_path.join('spack', 'defaults', 'repos.yaml') + tmpdir.ensure('site', dir=True) + tmpdir.ensure('user', dir=True) + tmpdir.ensure('site/%s' % platform.system().lower(), dir=True) + modules_yaml.copy(tmpdir.join('site', 'modules.yaml')) + os_modules_yaml.copy(tmpdir.join('site/%s' % platform.system().lower(), + 'modules.yaml')) + packages_yaml.copy(tmpdir.join('site', 'packages.yaml')) + config_yaml.copy(tmpdir.join('site', 'config.yaml')) + repos_yaml.copy(tmpdir.join('site', 'repos.yaml')) + yield tmpdir + tmpdir.remove() + + +@pytest.fixture(scope='function') +def default_config(tmpdir_factory, config_directory, monkeypatch): + + mutable_dir = tmpdir_factory.mktemp('mutable_config').join('tmp') + config_directory.copy(mutable_dir) + + cfg = spack.config.Configuration( + *[spack.config.ConfigScope(name, str(mutable_dir)) + for name in ['site/%s' % platform.system().lower(), + 'site', 'user']]) + + monkeypatch.setattr(spack.config, 'config', cfg) + + # This is essential, otherwise the cache will create weird side effects + # that will compromise subsequent tests if compilers.yaml is modified + monkeypatch.setattr(spack.compilers, '_cache_config_file', []) + njobs = spack.config.get('config:build_jobs') + if not njobs: + spack.config.set('config:build_jobs', 4, scope='user') + extensions = spack.config.get('config:template_dirs') + if not extensions: + spack.config.set('config:template_dirs', + [os.path.join(spack.paths.share_path, 'templates')], + scope='user') + + mutable_dir.ensure('build_stage', dir=True) + build_stage = spack.config.get('config:build_stage') + if not build_stage: + spack.config.set('config:build_stage', + [str(mutable_dir.join('build_stage'))], scope='user') + timeout = spack.config.get('config:connect_timeout') + if not timeout: + spack.config.set('config:connect_timeout', 10, scope='user') + yield spack.config.config + mutable_dir.remove() + + +@pytest.fixture(scope='function') +def install_dir_default_layout(tmpdir): + """Hooks a fake install directory with a default layout""" + real_store = spack.store.store + real_layout = spack.store.layout + spack.store.store = spack.store.Store(str(tmpdir.join('opt'))) + spack.store.layout = YamlDirectoryLayout(str(tmpdir.join('opt')), + path_scheme=def_install_path_scheme) # noqa: E501 + yield spack.store + spack.store.store = real_store + spack.store.layout = real_layout + + +@pytest.fixture(scope='function') +def install_dir_non_default_layout(tmpdir): + """Hooks a fake install directory with a non-default layout""" + real_store = spack.store.store + real_layout = spack.store.layout + spack.store.store = spack.store.Store(str(tmpdir.join('opt'))) + spack.store.layout = YamlDirectoryLayout(str(tmpdir.join('opt')), + path_scheme=ndef_install_path_scheme) # noqa: E501 + yield spack.store + spack.store.store = real_store + spack.store.layout = real_layout + + +@pytest.mark.requires_executables( + '/usr/bin/gcc', 'patchelf', 'strings', 'file') +@pytest.mark.disable_clean_stage_check +@pytest.mark.maybeslow +@pytest.mark.usefixtures('default_config', 'cache_directory', + 'install_dir_default_layout') +def test_default_rpaths_create_install_default_layout(tmpdir, + mirror_directory_def, + install_mockery): + """ + Test the creation and installation of buildcaches with default rpaths + into the default directory layout scheme. + """ + + gspec = Spec('garply') + gspec.concretize() + cspec = Spec('corge') + cspec.concretize() + + # Install patchelf needed for relocate in linux test environment + iparser = argparse.ArgumentParser() + install.setup_parser(iparser) + # Install some packages with dependent packages + iargs = iparser.parse_args(['--no-cache', cspec.name]) + install.install(iparser, iargs) + + global mirror_path_def + mirror_path_def = mirror_directory_def + mparser = argparse.ArgumentParser() + mirror.setup_parser(mparser) + margs = mparser.parse_args( + ['add', '--scope', 'site', 'test-mirror-def', 'file://%s' % mirror_path_def]) + mirror.mirror(mparser, margs) + margs = mparser.parse_args(['list']) + mirror.mirror(mparser, margs) + + # setup argument parser + parser = argparse.ArgumentParser() + buildcache.setup_parser(parser) + + # Set default buildcache args + create_args = ['create', '-a', '-u', '-d', str(mirror_path_def), + cspec.name] + install_args = ['install', '-a', '-u', cspec.name] + + # Create a buildache + args = parser.parse_args(create_args) + buildcache.buildcache(parser, args) + # Test force overwrite create buildcache + create_args.insert(create_args.index('-a'), '-f') + args = parser.parse_args(create_args) + buildcache.buildcache(parser, args) + # create mirror index + args = parser.parse_args(['update-index', '-d', 'file://%s' % str(mirror_path_def)]) + buildcache.buildcache(parser, args) + # list the buildcaches in the mirror + args = parser.parse_args(['list', '-a', '-l', '-v']) + buildcache.buildcache(parser, args) + + # Uninstall the package and deps + uparser = argparse.ArgumentParser() + uninstall.setup_parser(uparser) + uargs = uparser.parse_args(['-y', '--dependents', gspec.name]) + uninstall.uninstall(uparser, uargs) + + # test install + args = parser.parse_args(install_args) + buildcache.buildcache(parser, args) + + # This gives warning that spec is already installed + 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) + + args = parser.parse_args(['keys', '-f']) + buildcache.buildcache(parser, args) + + args = parser.parse_args(['list']) + buildcache.buildcache(parser, args) + + args = parser.parse_args(['list', '-a']) + buildcache.buildcache(parser, args) + + args = parser.parse_args(['list', '-l', '-v']) + buildcache.buildcache(parser, args) + bindist._cached_specs = set() + spack.stage.purge() + margs = mparser.parse_args( + ['rm', '--scope', 'site', 'test-mirror-def']) + mirror.mirror(mparser, margs) + + +@pytest.mark.requires_executables( + '/usr/bin/gcc', 'patchelf', 'strings', 'file') +@pytest.mark.disable_clean_stage_check +@pytest.mark.maybeslow +@pytest.mark.nomockstage +@pytest.mark.usefixtures('default_config', 'cache_directory', + 'install_dir_non_default_layout') +def test_default_rpaths_install_nondefault_layout(tmpdir, + install_mockery): + """ + Test the creation and installation of buildcaches with default rpaths + into the non-default directory layout scheme. + """ + + gspec = Spec('garply') + gspec.concretize() + cspec = Spec('corge') + cspec.concretize() + + global mirror_path_def + mparser = argparse.ArgumentParser() + mirror.setup_parser(mparser) + margs = mparser.parse_args( + ['add', '--scope', 'site', 'test-mirror-def', 'file://%s' % mirror_path_def]) + mirror.mirror(mparser, margs) + + # setup argument parser + parser = argparse.ArgumentParser() + buildcache.setup_parser(parser) + + # Set default buildcache args + install_args = ['install', '-a', '-u', '%s' % cspec.name] + + # Install some packages with dependent packages + # test install in non-default install path scheme + args = parser.parse_args(install_args) + buildcache.buildcache(parser, args) + # test force install in non-default install path scheme + install_args.insert(install_args.index('-a'), '-f') + args = parser.parse_args(install_args) + buildcache.buildcache(parser, args) + + bindist._cached_specs = set() + spack.stage.purge() + margs = mparser.parse_args( + ['rm', '--scope', 'site', 'test-mirror-def']) + mirror.mirror(mparser, margs) + + +@pytest.mark.requires_executables( + '/usr/bin/gcc', 'patchelf', 'strings', 'file') +@pytest.mark.disable_clean_stage_check +@pytest.mark.maybeslow +@pytest.mark.nomockstage +@pytest.mark.usefixtures('default_config', 'cache_directory', + 'install_dir_default_layout') +def test_relative_rpaths_create_default_layout(tmpdir, + mirror_directory_rel, + install_mockery): + """ + Test the creation and installation of buildcaches with relative + rpaths into the default directory layout scheme. + """ + + gspec = Spec('garply') + gspec.concretize() + cspec = Spec('corge') + cspec.concretize() + + global mirror_path_rel + mirror_path_rel = mirror_directory_rel + # Install patchelf needed for relocate in linux test environment + iparser = argparse.ArgumentParser() + install.setup_parser(iparser) + # Install some packages with dependent packages + iargs = iparser.parse_args(['--no-cache', cspec.name]) + install.install(iparser, iargs) + + # setup argument parser + parser = argparse.ArgumentParser() + buildcache.setup_parser(parser) + + # set default buildcache args + create_args = ['create', '-a', '-u', '-r', '-d', + str(mirror_path_rel), + cspec.name] + + # create build cache with relatived rpaths + args = parser.parse_args(create_args) + buildcache.buildcache(parser, args) + # create mirror index + args = parser.parse_args(['update-index', '-d', 'file://%s' % str(mirror_path_rel)]) + buildcache.buildcache(parser, args) + # Uninstall the package and deps + uparser = argparse.ArgumentParser() + uninstall.setup_parser(uparser) + uargs = uparser.parse_args(['-y', '--dependents', gspec.name]) + uninstall.uninstall(uparser, uargs) + + bindist._cached_specs = set() + spack.stage.purge() + + +@pytest.mark.requires_executables( + '/usr/bin/gcc', 'patchelf', 'strings', 'file') +@pytest.mark.disable_clean_stage_check +@pytest.mark.maybeslow +@pytest.mark.nomockstage +@pytest.mark.usefixtures('default_config', 'cache_directory', + 'install_dir_default_layout') +def test_relative_rpaths_install_default_layout(tmpdir, + install_mockery): + """ + Test the creation and installation of buildcaches with relative + rpaths into the default directory layout scheme. + """ + + gspec = Spec('garply') + gspec.concretize() + cspec = Spec('corge') + cspec.concretize() + + global mirror_path_rel + mparser = argparse.ArgumentParser() + mirror.setup_parser(mparser) + margs = mparser.parse_args( + ['add', '--scope', 'site', 'test-mirror-rel', 'file://%s' % mirror_path_rel]) + mirror.mirror(mparser, margs) + + # Install patchelf needed for relocate in linux test environment + iparser = argparse.ArgumentParser() + install.setup_parser(iparser) + + # setup argument parser + parser = argparse.ArgumentParser() + buildcache.setup_parser(parser) + + # set default buildcache args + install_args = ['install', '-a', '-u', + cspec.name] + + # install buildcache created with relativized rpaths + args = parser.parse_args(install_args) + buildcache.buildcache(parser, args) + + # This gives warning that spec is already installed + buildcache.buildcache(parser, args) + + # Uninstall the package and deps + uparser = argparse.ArgumentParser() + uninstall.setup_parser(uparser) + uargs = uparser.parse_args(['-y', '--dependents', gspec.name]) + uninstall.uninstall(uparser, uargs) + + # install build cache + 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) + + bindist._cached_specs = set() + spack.stage.purge() + margs = mparser.parse_args( + ['rm', '--scope', 'site', 'test-mirror-rel']) + mirror.mirror(mparser, margs) + + +@pytest.mark.requires_executables( + '/usr/bin/gcc', 'patchelf', 'strings', 'file') +@pytest.mark.disable_clean_stage_check +@pytest.mark.maybeslow +@pytest.mark.nomockstage +@pytest.mark.usefixtures('default_config', 'cache_directory', + 'install_dir_non_default_layout') +def test_relative_rpaths_install_nondefault(tmpdir, + install_mockery): + """ + Test the installation of buildcaches with relativized rpaths + into the non-default directory layout scheme. + """ + + gspec = Spec('garply') + gspec.concretize() + cspec = Spec('corge') + cspec.concretize() + + global mirror_path_rel + + mparser = argparse.ArgumentParser() + mirror.setup_parser(mparser) + margs = mparser.parse_args( + ['add', '--scope', 'site', 'test-mirror-rel', 'file://%s' % mirror_path_rel]) + mirror.mirror(mparser, margs) + + # Install patchelf needed for relocate in linux test environment + iparser = argparse.ArgumentParser() + install.setup_parser(iparser) + + # setup argument parser + parser = argparse.ArgumentParser() + buildcache.setup_parser(parser) + + # Set default buildcache args + install_args = ['install', '-a', '-u', '%s' % cspec.name] + + # test install in non-default install path scheme and relative path + args = parser.parse_args(install_args) + buildcache.buildcache(parser, args) + + bindist._cached_specs = set() + spack.stage.purge() + margs = mparser.parse_args( + ['rm', '--scope', 'site', 'test-mirror-rel']) + mirror.mirror(mparser, margs) diff --git a/share/spack/qa/install_patchelf.sh b/share/spack/qa/install_patchelf.sh new file mode 100755 index 00000000000..7660ba8eef9 --- /dev/null +++ b/share/spack/qa/install_patchelf.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# +# 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) + +# +# Description: +# Install patchelf for use in buildcache unit tests +# +# Usage: +# install-patchelf.sh +# +set -ex +if [ "$TRAVIS_OS_NAME" = "linux" ]; then + olddir=$PWD + cd /tmp + wget https://github.com/NixOS/patchelf/archive/0.10.tar.gz + tar -xvf 0.10.tar.gz + cd patchelf-0.10 && ./bootstrap.sh && ./configure --prefix=/usr && make && sudo make install && cd $olddir +fi diff --git a/var/spack/repos/builtin.mock/packages/corge/package.py b/var/spack/repos/builtin.mock/packages/corge/package.py new file mode 100644 index 00000000000..48f9ac8e6ea --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/corge/package.py @@ -0,0 +1,155 @@ +# 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 os + + +class Corge(Package): + """A toy package to test dependencies""" + + homepage = "https://www.example.com" + url = "https://github.com/gartung/corge/archive/v3.0.0.tar.gz" + + version('3.0.0', + sha256='5058861c3b887511387c725971984cec665a8307d660158915a04d7786fed6bc') + + depends_on('quux') + + def install(self, spec, prefix): + corge_cc = '''#include +#include +#include "corge.h" +#include "corge_version.h" +#include "quux/quux.h" + +const int Corge::version_major = corge_version_major; +const int Corge::version_minor = corge_version_minor; + +Corge::Corge() +{ +} + +int +Corge::get_version() const +{ + return 10 * version_major + version_minor; +} + +int +Corge::corgegate() const +{ + int corge_version = get_version(); + std::cout << "Corge::corgegate version " << corge_version + << " invoked" << std::endl; + std::cout << "Corge config directory = %s" < +#include "corge.h" + +int +main(int argc, char* argv[]) +{ + std::cout << "corgerator called with "; + if (argc == 0) { + std::cout << "no command-line arguments" << std::endl; + } else { + std::cout << "command-line arguments:"; + for (int i = 0; i < argc; ++i) { + std::cout << " \"" << argv[i] << "\""; + } + std::cout << std::endl; + } + std::cout << "corgegating.."< + +const int Garply::version_major = garply_version_major; +const int Garply::version_minor = garply_version_minor; + +Garply::Garply() {} + +int +Garply::get_version() const +{ + return 10 * version_major + version_minor; +} + +int +Garply::garplinate() const +{ + std::cout << "Garply::garplinate version " << get_version() + << " invoked" << std::endl; + std::cout << "Garply config dir = %s" << std::endl; + return get_version(); +} +''' + garplinator_cc = '''#include "garply.h" +#include + +int +main() +{ + Garply garply; + garply.garplinate(); + + return 0; +} +''' + garply_version_h = '''const int garply_version_major = %s; +const int garply_version_minor = %s; +''' + mkdirp(prefix.lib64) + mkdirp('%s/garply' % prefix.include) + mkdirp('%s/garply' % self.stage.source_path) + with open('%s/garply_version.h' % self.stage.source_path, 'w') as f: + f.write(garply_version_h % (self.version[0], self.version[1:])) + with open('%s/garply/garply.h' % self.stage.source_path, 'w') as f: + f.write(garply_h) + with open('%s/garply/garply.cc' % self.stage.source_path, 'w') as f: + f.write(garply_cc % prefix.config) + with open('%s/garply/garplinator.cc' % + self.stage.source_path, 'w') as f: + f.write(garplinator_cc) + gpp = which('/usr/bin/g++') + gpp('-Dgarply_EXPORTS', + '-I%s' % self.stage.source_path, + '-O2', '-g', '-DNDEBUG', '-fPIC', + '-o', 'garply.cc.o', + '-c', '%s/garply/garply.cc' % self.stage.source_path) + gpp('-Dgarply_EXPORTS', + '-I%s' % self.stage.source_path, + '-O2', '-g', '-DNDEBUG', '-fPIC', + '-o', 'garplinator.cc.o', + '-c', '%s/garply/garplinator.cc' % self.stage.source_path) + gpp('-fPIC', '-O2', '-g', '-DNDEBUG', '-shared', + '-Wl,-soname,libgarply.so', '-o', 'libgarply.so', 'garply.cc.o') + gpp('-O2', '-g', '-DNDEBUG', '-rdynamic', + 'garplinator.cc.o', '-o', 'garplinator', + '-Wl,-rpath,%s' % prefix.lib64, + 'libgarply.so') + copy('libgarply.so', '%s/libgarply.so' % prefix.lib64) + copy('garplinator', '%s/garplinator' % prefix.lib64) + copy('%s/garply/garply.h' % self.stage.source_path, + '%s/garply/garply.h' % prefix.include) + mkdirp(prefix.bin) + copy('garply_version.h', '%s/garply_version.h' % prefix.bin) + os.symlink('%s/garplinator' % prefix.lib64, + '%s/garplinator' % prefix.bin) diff --git a/var/spack/repos/builtin.mock/packages/patchelf/package.py b/var/spack/repos/builtin.mock/packages/patchelf/package.py index 0f72271921d..80221e10e89 100644 --- a/var/spack/repos/builtin.mock/packages/patchelf/package.py +++ b/var/spack/repos/builtin.mock/packages/patchelf/package.py @@ -7,16 +7,17 @@ class Patchelf(AutotoolsPackage): - """ - PatchELF is a small utility to modify the - dynamic linker and RPATH of ELF executables. - """ + """PatchELF is a small utility to modify the dynamic linker and RPATH of + ELF executables.""" homepage = "https://nixos.org/patchelf.html" - url = "http://nixos.org/releases/patchelf/patchelf-0.8/patchelf-0.8.tar.gz" - - list_url = "http://nixos.org/releases/patchelf/" + url = "https://nixos.org/releases/patchelf/patchelf-0.10/patchelf-0.10.tar.gz" + list_url = "https://nixos.org/releases/patchelf/" list_depth = 1 - version('0.9', '3c265508526760f233620f35d79c79fc') - version('0.8', '407b229e6a681ffb0e2cdd5915cb2d01') + version('0.10', sha256='b2deabce05c34ce98558c0efb965f209de592197b2c88e930298d740ead09019') + version('0.9', sha256='f2aa40a6148cb3b0ca807a1bf836b081793e55ec9e5540a5356d800132be7e0a') + version('0.8', sha256='14af06a2da688d577d64ff8dac065bb8903bbffbe01d30c62df7af9bf4ce72fe') + + def install(self, spec, prefix): + install_tree(self.stage.source_path, prefix) diff --git a/var/spack/repos/builtin.mock/packages/quux/package.py b/var/spack/repos/builtin.mock/packages/quux/package.py new file mode 100644 index 00000000000..6db243f1545 --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/quux/package.py @@ -0,0 +1,132 @@ +# 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 os + + +class Quux(Package): + """Toy package for testing dependencies""" + + homepage = "https://www.example.com" + url = "https://github.com/gartung/quux/archive/v3.0.0.tar.gz" + + version('3.0.0', + sha256='b91bc96fb746495786bddac2c527039177499f2f76d3fa9dcf0b393859e68484') + + depends_on('garply') + + def install(self, spec, prefix): + quux_cc = '''#include "quux.h" +#include "garply/garply.h" +#include "quux_version.h" +#include +#include + +const int Quux::version_major = quux_version_major; +const int Quux::version_minor = quux_version_minor; + +Quux::Quux() {} + +int +Quux::get_version() const +{ + return 10 * version_major + version_minor; +} + +int +Quux::quuxify() const +{ + int quux_version = get_version(); + std::cout << "Quux::quuxify version " << quux_version + << " invoked" < + +int +main() +{ + Quux quux; + quux.quuxify(); + + return 0; +} +''' + quux_version_h = '''const int quux_version_major = %s; +const int quux_version_minor = %s; +''' + mkdirp(prefix.lib64) + mkdirp('%s/quux' % prefix.include) + with open('%s/quux_version.h' % self.stage.source_path, 'w') as f: + f.write(quux_version_h % (self.version[0], self.version[1:])) + with open('%s/quux/quux.cc' % self.stage.source_path, 'w') as f: + f.write(quux_cc % (prefix.config)) + with open('%s/quux/quux.h' % self.stage.source_path, 'w') as f: + f.write(quux_h) + with open('%s/quux/quuxifier.cc' % self.stage.source_path, 'w') as f: + f.write(quuxifier_cc) + gpp = which('/usr/bin/g++') + gpp('-Dquux_EXPORTS', + '-I%s' % self.stage.source_path, + '-I%s' % spec['garply'].prefix.include, + '-O2', '-g', '-DNDEBUG', '-fPIC', + '-o', 'quux.cc.o', + '-c', 'quux/quux.cc') + gpp('-Dquux_EXPORTS', + '-I%s' % self.stage.source_path, + '-I%s' % spec['garply'].prefix.include, + '-O2', '-g', '-DNDEBUG', '-fPIC', + '-o', 'quuxifier.cc.o', + '-c', 'quux/quuxifier.cc') + gpp('-fPIC', '-O2', '-g', '-DNDEBUG', '-shared', + '-Wl,-soname,libquux.so', '-o', 'libquux.so', 'quux.cc.o', + '-Wl,-rpath,%s:%s::::' % (prefix.lib64, + spec['garply'].prefix.lib64), + '%s/libgarply.so' % spec['garply'].prefix.lib64) + gpp('-O2', '-g', '-DNDEBUG', '-rdynamic', + 'quuxifier.cc.o', '-o', 'quuxifier', + '-Wl,-rpath,%s:%s::::' % (prefix.lib64, + spec['garply'].prefix.lib64), + 'libquux.so', + '%s/libgarply.so' % spec['garply'].prefix.lib64) + copy('libquux.so', '%s/libquux.so' % prefix.lib64) + copy('quuxifier', '%s/quuxifier' % prefix.lib64) + copy('%s/quux/quux.h' % self.stage.source_path, + '%s/quux/quux.h' % prefix.include) + mkdirp(prefix.bin) + copy('quux_version.h', '%s/quux_version.h' % prefix.bin) + os.symlink('%s/quuxifier' % prefix.lib64, '%s/quuxifier' % prefix.bin) + os.symlink('%s/garplinator' % spec['garply'].prefix.lib64, + '%s/garplinator' % prefix.bin) From b3fff20d1f57edcba75b4ddbc5d190443e431fd5 Mon Sep 17 00:00:00 2001 From: Frank Willmore Date: Wed, 8 Jul 2020 15:57:09 -0500 Subject: [PATCH 082/149] enable flatcc to be built with gcc@9.X.X (#17430) `gcc` 9 and above have more warnings that break the `flatcc` build by default, because `-Werror` is enabled. This loosens the build up so that we can build with more compilers in Spack. - [x] Add `-DFLATCC_ALLOW_WERROR=OFF` to `flatcc` CMake arguments Co-authored-by: Frank Willmore --- var/spack/repos/builtin/packages/flatcc/package.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/var/spack/repos/builtin/packages/flatcc/package.py b/var/spack/repos/builtin/packages/flatcc/package.py index ce3fc222fcf..a9d3617c9b8 100644 --- a/var/spack/repos/builtin/packages/flatcc/package.py +++ b/var/spack/repos/builtin/packages/flatcc/package.py @@ -37,6 +37,9 @@ def cmake_args(self): spec = self.spec args = [] + # allow flatcc to be built with more compilers + args.append('-DFLATCC_ALLOW_WERROR=OFF') + if '+shared' in spec: args.append('-DBUILD_SHARED_LIBS=ON') args.append('-DFLATCC_INSTALL=ON') From e02d955aed699dae1fca4561b581d1dc605b811c Mon Sep 17 00:00:00 2001 From: Sinan Date: Wed, 8 Jul 2020 14:30:53 -0700 Subject: [PATCH 083/149] new package: ligra (#17425) * new package: ligra * setup run environment * tidy up * Update var/spack/repos/builtin/packages/ligra/package.py Co-authored-by: Adam J. Stewart * Update var/spack/repos/builtin/packages/ligra/package.py Co-authored-by: Adam J. Stewart * Update var/spack/repos/builtin/packages/ligra/package.py Co-authored-by: Adam J. Stewart * flake8 Co-authored-by: Sinan81 Co-authored-by: Adam J. Stewart --- .../repos/builtin/packages/ligra/package.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 var/spack/repos/builtin/packages/ligra/package.py diff --git a/var/spack/repos/builtin/packages/ligra/package.py b/var/spack/repos/builtin/packages/ligra/package.py new file mode 100644 index 00000000000..8df4bbabae4 --- /dev/null +++ b/var/spack/repos/builtin/packages/ligra/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 Ligra(MakefilePackage): + """A Lightweight Graph Processing Framework for Shared Memory""" + + homepage = "http://jshun.github.io/ligra/" + url = "https://github.com/jshun/ligra/archive/v.1.5.tar.gz" + + version('1.5', sha256='74113a5a3c19a0e319a5b9ebefc8a67c5d18d4d2a9670363092a966f4163f6b7') + version('1.4', sha256='bb70a1428c71cf2f7e1512cdedcd8330c754f5a2c8309ab9d9666591cff6a4e1') + version('1.3', sha256='df848038734bb9724d6c9bd95595c91eb6b07027642be93bff161f020ff257e4') + version('1.2', sha256='ec8778b0762772fc78437243ccaee72066d67a310bc352d6665dd2de520c04cc') + version('1.1', sha256='a7311b96fabc286a8f1250d8a6e2d1b1e4545c720fa6bb4acf7ed31211fcc99a') + version('1.0', sha256='fb39ae0a3eddb26f37b8cc0a543648575a50bcc488cecd4a5f1beaaf2458736c') + + variant('openmp', default=True, description="Build with OpenMP") + variant('mkl', default=False, description="Build with Intel MKL") + # TODO: Add cilk variant when spack has a cilk plus package created. + + depends_on('mkl', when='+mkl') + + def setup_build_environment(self, env): + if '+openmp' in self.spec: + env.set('OPENMP', '1') + # when +mkl, MKLROOT will be defined by intel-mkl package, + # triggering a build with mkl support + + def setup_run_environment(self, env): + env.prepend_path('PATH', self.prefix.apps) + env.prepend_path('PATH', self.prefix.utils) + + def build(self, spec, prefix): + make('-C', 'apps') + make('-C', 'utils') + + def install(self, spec, prefix): + install_tree('.', prefix) + install_tree('ligra', prefix.include) From ce9d30f80fb8c0a323895bdcee9270420fde8f81 Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Wed, 8 Jul 2020 15:59:24 -0700 Subject: [PATCH 084/149] add public spack mirror (#17077) --- etc/spack/defaults/mirrors.yaml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 etc/spack/defaults/mirrors.yaml diff --git a/etc/spack/defaults/mirrors.yaml b/etc/spack/defaults/mirrors.yaml new file mode 100644 index 00000000000..6afc897e61b --- /dev/null +++ b/etc/spack/defaults/mirrors.yaml @@ -0,0 +1,2 @@ +mirrors: + spack-public: https://spack-llnl-mirror.s3-us-west-2.amazonaws.com/ From d0f5b69a19236ea3c17dd306708d6ece43283501 Mon Sep 17 00:00:00 2001 From: Greg Becker Date: Thu, 9 Jul 2020 13:08:51 -0500 Subject: [PATCH 085/149] installation: skip repository metadata for externals (#16954) When Spack installs a package, it stores repository package.py files for it and all of its dependencies - any package with a Spack metadata directory in its installation prefix. It turns out this was too broad: this ends up including external packages installed by Spack (e.g. installed by another Spack instance). Currently Spack doesn't store the namespace properly for such packages, so even though the package file could be fetched from the external, Spack is unable to locate it. This commit avoids the issue by skipping any attempt to locate and copy from the package repository of externals, regardless of whether they have a Spack repo directory. --- lib/spack/spack/installer.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/spack/spack/installer.py b/lib/spack/spack/installer.py index a2b0220a8ba..978296e0512 100644 --- a/lib/spack/spack/installer.py +++ b/lib/spack/spack/installer.py @@ -405,9 +405,14 @@ def dump_packages(spec, path): source = spack.store.layout.build_packages_path(node) source_repo_root = os.path.join(source, node.namespace) - # There's no provenance installed for the source package. Skip it. - # User can always get something current from the builtin repo. - if not os.path.isdir(source_repo_root): + # If there's no provenance installed for the package, skip it. + # If it's external, skip it because it either: + # 1) it wasn't built with Spack, so it has no Spack metadata + # 2) it was built by another Spack instance, and we do not + # (currently) use Spack metadata to associate repos with externals + # built by other Spack instances. + # Spack can always get something current from the builtin repo. + if node.external or not os.path.isdir(source_repo_root): continue # Create a source repo and get the pkg directory out of it. From 12099ed55e468e946c7669cfbf3029c72f0e15d4 Mon Sep 17 00:00:00 2001 From: Sajid Ali <30510036+s-sajid-ali@users.noreply.github.com> Date: Thu, 9 Jul 2020 16:14:49 -0500 Subject: [PATCH 086/149] clear mpicc and friends before each build (#17450) * clear mpi env vars --- lib/spack/spack/build_environment.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/spack/spack/build_environment.py b/lib/spack/spack/build_environment.py index 1b8aae31dcb..7ef21267662 100644 --- a/lib/spack/spack/build_environment.py +++ b/lib/spack/spack/build_environment.py @@ -174,6 +174,14 @@ def clean_environment(): for v in build_system_vars: env.unset(v) + # Unset mpi environment vars. These flags should only be set by + # mpi providers for packages with mpi dependencies + mpi_vars = [ + 'MPICC', 'MPICXX', 'MPIFC', 'MPIF77', 'MPIF90' + ] + for v in mpi_vars: + env.unset(v) + build_lang = spack.config.get('config:build_language') if build_lang: # Override language-related variables. This can be used to force From 84eae97f911293a86c40b4290231651ea86f4559 Mon Sep 17 00:00:00 2001 From: Harmen Stoppels Date: Fri, 10 Jul 2020 05:00:38 +0200 Subject: [PATCH 087/149] aspirin for buildaches (#17437) --- lib/spack/spack/binary_distribution.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/spack/spack/binary_distribution.py b/lib/spack/spack/binary_distribution.py index c084d6e0fd3..63af7465846 100644 --- a/lib/spack/spack/binary_distribution.py +++ b/lib/spack/spack/binary_distribution.py @@ -466,7 +466,7 @@ 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' % + tty.msg('Buildcache for "%s" written to \n %s' % (spec, remote_spackfile_path)) try: From 8c6fa66b2ae83575bf0b6ba0ddcf40a42ef33f5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Lacroix?= Date: Fri, 10 Jul 2020 05:26:37 +0200 Subject: [PATCH 088/149] openslide: Add missing dependencies. (#17445) --- var/spack/repos/builtin/packages/openslide/package.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/var/spack/repos/builtin/packages/openslide/package.py b/var/spack/repos/builtin/packages/openslide/package.py index d86af5a1aac..c41da2461be 100644 --- a/var/spack/repos/builtin/packages/openslide/package.py +++ b/var/spack/repos/builtin/packages/openslide/package.py @@ -19,3 +19,6 @@ class Openslide(AutotoolsPackage): depends_on('libtiff') depends_on('libxml2') depends_on('sqlite@3.6:') + depends_on('glib') + depends_on('cairo+pdf') + depends_on('gdk-pixbuf') From d9923a05e03233e8ce25990aa4c23c23d83673df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Lacroix?= Date: Fri, 10 Jul 2020 05:27:30 +0200 Subject: [PATCH 089/149] ltrace: Disable "-Werror". (#17444) Some functions used by ltrace have been deprecated in recent versions of glibc. --- var/spack/repos/builtin/packages/ltrace/package.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/var/spack/repos/builtin/packages/ltrace/package.py b/var/spack/repos/builtin/packages/ltrace/package.py index 01f0e4fd865..9e0b72804f0 100644 --- a/var/spack/repos/builtin/packages/ltrace/package.py +++ b/var/spack/repos/builtin/packages/ltrace/package.py @@ -17,3 +17,8 @@ class Ltrace(AutotoolsPackage): version('0.7.3', sha256='0e6f8c077471b544c06def7192d983861ad2f8688dd5504beae62f0c5f5b9503') conflicts('platform=darwin', msg='ltrace runs only on Linux.') + + def configure_args(self): + # Disable -Werror since some functions used by ltrace + # have been deprecated in recent version of glibc + return ['--disable-werror'] From e72e2568dd5233220808c46a96810fdc05ef1b12 Mon Sep 17 00:00:00 2001 From: Patrick Gartung Date: Thu, 9 Jul 2020 22:28:51 -0500 Subject: [PATCH 090/149] Relocation of sbang needs to be done when the spack prefix changes even if the install tree has not changed. (#17455) --- lib/spack/spack/binary_distribution.py | 13 ++++++++++++- lib/spack/spack/relocate.py | 8 +++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/spack/spack/binary_distribution.py b/lib/spack/spack/binary_distribution.py index 63af7465846..481c540bd97 100644 --- a/lib/spack/spack/binary_distribution.py +++ b/lib/spack/spack/binary_distribution.py @@ -603,7 +603,7 @@ def is_backup_file(file): 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 we are not installing back to the same install tree do the relocation if old_layout_root != new_layout_root: files_to_relocate = [os.path.join(workdir, filename) for filename in buildinfo.get('relocate_binaries') @@ -657,6 +657,17 @@ def is_backup_file(file): new_spack_prefix, prefix_to_prefix) +# If we are installing back to the same location +# relocate the sbang location if the spack directory changed + else: + if old_spack_prefix != new_spack_prefix: + relocate.relocate_text(text_names, + 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, force=False): diff --git a/lib/spack/spack/relocate.py b/lib/spack/spack/relocate.py index 56e7c6632cd..e299f1c5c18 100644 --- a/lib/spack/spack/relocate.py +++ b/lib/spack/spack/relocate.py @@ -804,15 +804,17 @@ def relocate_text( where they should be relocated """ # TODO: reduce the number of arguments (8 seems too much) - sbang_regex = r'#!/bin/bash {0}/bin/sbang'.format(orig_spack) - new_sbang = r'#!/bin/bash {0}/bin/sbang'.format(new_spack) + orig_sbang = '#!/bin/bash {0}/bin/sbang'.format(orig_spack) + new_sbang = '#!/bin/bash {0}/bin/sbang'.format(new_spack) for file in files: _replace_prefix_text(file, orig_install_prefix, new_install_prefix) for orig_dep_prefix, new_dep_prefix in new_prefixes.items(): _replace_prefix_text(file, orig_dep_prefix, new_dep_prefix) _replace_prefix_text(file, orig_layout_root, new_layout_root) - _replace_prefix_text(file, sbang_regex, new_sbang) + # relocate the sbang location only if the spack directory changed + if orig_spack != new_spack: + _replace_prefix_text(file, orig_sbang, new_sbang) def relocate_text_bin( From 02dd90ebf9f42b5f9e100f3efd621efcf7e3e723 Mon Sep 17 00:00:00 2001 From: Julius-Plehn Date: Fri, 10 Jul 2020 15:22:20 +0200 Subject: [PATCH 091/149] New Package: ChaNGa (#17442) * WIP: changa package * changa cleanup * flake8 format * adds master branch to ChaNGa * positional arguments * use install instead of copy --- .../packages/changa/fix_configure_path.patch | 13 ++++++ .../repos/builtin/packages/changa/package.py | 46 +++++++++++++++++++ .../repos/builtin/packages/charmpp/package.py | 4 +- 3 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 var/spack/repos/builtin/packages/changa/fix_configure_path.patch create mode 100644 var/spack/repos/builtin/packages/changa/package.py diff --git a/var/spack/repos/builtin/packages/changa/fix_configure_path.patch b/var/spack/repos/builtin/packages/changa/fix_configure_path.patch new file mode 100644 index 00000000000..f9869272099 --- /dev/null +++ b/var/spack/repos/builtin/packages/changa/fix_configure_path.patch @@ -0,0 +1,13 @@ +diff --git a/configure b/configure +index 04f1a59..602c6cc 100755 +--- a/configure ++++ b/configure +@@ -2434,7 +2434,7 @@ if test $($CHARMC -V | awk '{print $3}') -lt $MINIMUM_CHARM_VERSION; then + fi + + CHARM_PATH=${CHARMC%/bin/charmc} +-CONV_CONFIG=${CHARM_PATH}/tmp/conv-config.sh ++CONV_CONFIG=${CHARM_PATH}/include/conv-config.sh + CHARMINC=${CHARM_PATH}/include + + . ${CONV_CONFIG} diff --git a/var/spack/repos/builtin/packages/changa/package.py b/var/spack/repos/builtin/packages/changa/package.py new file mode 100644 index 00000000000..a6adb48c380 --- /dev/null +++ b/var/spack/repos/builtin/packages/changa/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 Changa(AutotoolsPackage): + """ChaNGa (Charm N-body GrAvity solver) is a code to perform collisionless + N-body simulations. It can perform cosmological simulations with periodic + boundary conditions in comoving coordinates or simulations of isolated + stellar systems. It also can include hydrodynamics using the Smooth + Particle Hydrodynamics (SPH) technique. It uses a Barnes-Hut tree to + calculate gravity, with hexadecapole expansion of nodes and + Ewald summation for periodic forces. Timestepping is done with a leapfrog + integrator with individual timesteps for each particle.""" + + homepage = "http://faculty.washington.edu/trq/hpcc/tools/changa.html" + url = "https://github.com/N-BodyShop/changa/archive/v3.4.tar.gz" + git = "https://github.com/N-BodyShop/changa.git" + + version('master', branch='master') + version('3.4', sha256='c2bceb6ac00025dfd704bb6960bc17c6df7c746872185845d1e75f47e6ce2a94') + patch("fix_configure_path.patch") + + resource( + name="utility", + url="https://github.com/N-BodyShop/utility/archive/v3.4.tar.gz", + sha256="19f9f09023ce9d642e848a36948788fb29cd7deb8e9346cdaac4c945f1416667", + placement="utility" + ) + + depends_on("charmpp build-target=ChaNGa") + + def configure_args(self): + args = [] + args.append("STRUCT_DIR={0}/utility/structures" + .format(self.stage.source_path)) + return args + + def install(self, spec, prefix): + with working_dir(self.build_directory): + mkdirp(prefix.bin) + install('ChaNGa', prefix.bin) + install('charmrun', prefix.bin) diff --git a/var/spack/repos/builtin/packages/charmpp/package.py b/var/spack/repos/builtin/packages/charmpp/package.py index a6c60ef11d3..67fe0343683 100644 --- a/var/spack/repos/builtin/packages/charmpp/package.py +++ b/var/spack/repos/builtin/packages/charmpp/package.py @@ -52,7 +52,7 @@ class Charmpp(Package): "build-target", default="LIBS", # AMPI also builds charm++, LIBS also builds AMPI and charm++ - values=("charm++", "AMPI", "LIBS"), + values=("charm++", "AMPI", "LIBS", "ChaNGa"), description="Specify the target to build" ) @@ -217,7 +217,7 @@ def install(self, spec, prefix): present on the system") target = spec.variants["build-target"].value - builddir = prefix + "/" + str(self.charmarch) + builddir = prefix # We assume that Spack's compiler wrappers make this work. If # not, then we need to query the compiler vendor from Spack From 38d387c9a5831e6e2931b12cba80ec9cf6e50dcc Mon Sep 17 00:00:00 2001 From: iarspider Date: Fri, 10 Jul 2020 15:24:14 +0200 Subject: [PATCH 092/149] New packages: looptools + vbfnlo (#17446) * New package: vbfnlo * Add new package: vbfnlo * Add recipe for looptools * Add patch for looptools * LoopTools: patch not needed (fixed by developers without changing version) * Remove patch file as well * Update package.py * Update package.py * Fix vbfnlo recipe for old version Co-authored-by: iarspider --- .../builtin/packages/looptools/package.py | 25 +++++++++++ .../repos/builtin/packages/vbfnlo/package.py | 43 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 var/spack/repos/builtin/packages/looptools/package.py create mode 100644 var/spack/repos/builtin/packages/vbfnlo/package.py diff --git a/var/spack/repos/builtin/packages/looptools/package.py b/var/spack/repos/builtin/packages/looptools/package.py new file mode 100644 index 00000000000..7d31173dcfc --- /dev/null +++ b/var/spack/repos/builtin/packages/looptools/package.py @@ -0,0 +1,25 @@ +# 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 Looptools(AutotoolsPackage): + """LoopTools is a package for evaluation of scalar and tensor one-loop + integrals based on the FF package by G.J. van Oldenborgh. It + features an easy Fortran, C++, and Mathematica interface to the + scalar one-loop functions of FF and in addition provides + the 2-, 3-, and 4-point tensor coefficient functions. """ + + homepage = "http://www.feynarts.de/looptools/" + url = "http://www.feynarts.de/looptools/LoopTools-2.15.tar.gz" + + version('2.15', sha256='a065ffdc4fe6882aa3bb926134ba8ec875d6c0a633c3d4aa5f70db26542713f2') + version('2.8', sha256='2395518d0eac9b0883a2c249b9a5ba80df443929c520c45e60f5a4284166eb42') + + def configure_args(self): + args = ["FFLAGS=" + self.compiler.f77_pic_flag, + "CFLAGS=" + self.compiler.cc_pic_flag] + return args diff --git a/var/spack/repos/builtin/packages/vbfnlo/package.py b/var/spack/repos/builtin/packages/vbfnlo/package.py new file mode 100644 index 00000000000..99a9b53f3b4 --- /dev/null +++ b/var/spack/repos/builtin/packages/vbfnlo/package.py @@ -0,0 +1,43 @@ +# 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 Vbfnlo(AutotoolsPackage): + """VBFNLO is a fully flexible parton level Monte Carlo program + for the simulation of vector boson fusion, double and triple + vector boson production in hadronic collisions at + next to leading order in the strong coupling constant. """ + + homepage = "https://www.itp.kit.edu/vbfnlo/wiki/doku.php?id=overview" + url = "https://github.com/vbfnlo/vbfnlo/archive/v3.0.0beta5.tar.gz" + + # The commented out versions exist, but are not tested + version('3.0.0beta5', sha256='777a3dedb365ea9abc38848a60f30d325da3799cbad69fa308664b94a8c31a90') + version('3.0.0beta4', sha256='511e84765e9634a75766a160eae1925812dacbb3943e7e3b4dc90e2eacac8a2c') + # version('3.0.0beta3', sha256='ab4cc3289051ab09ed94fa41d0eb1c5c4adcd9f39fa04e3c95a3867f256541bc') + version('3.0.0beta2', sha256='33dd0781e645a5baa664fc5aa81d43c12586bf095ef25895e86cb4192c22473b') + version('3.0.0beta1', sha256='19f0bf7e4c93b0f287d2531d6802c114a78eb46cde28ea820b2a074a5819c7ca') + version('2.7.1', sha256='13e33d73d8a8ef64094621f87e6f94e01712e76cc19a86298d0b52cfcb9decca', preferred=True) + # version('2.7.0', sha256='0e96c0912599e3000fffec5305700b947b604a7b06c7975851503f445311e4ef') + + depends_on('hepmc') + depends_on('gsl') + depends_on('lhapdf') + depends_on('looptools') + + @when('@2.7.1') + def setup_build_environment(self, env): + env.unset('F77') + + def configure_args(self): + args = ["--with-hepmc=" + self.spec['hepmc'].prefix, + "--with-gsl=" + self.spec['gsl'].prefix, + "--with-LHAPDF=" + self.spec['lhapdf'].prefix, + "--with-LOOPTOOLS=" + self.spec['looptools'].prefix, + "FCFLAGS=-std=legacy"] + + return args From ed7d485b58a5242416e863de7f08fdc978d15e23 Mon Sep 17 00:00:00 2001 From: iarspider Date: Fri, 10 Jul 2020 15:25:21 +0200 Subject: [PATCH 093/149] New packages: thepeg, herwig++ (2.x) (#17443) * New packages: Rivet, Herwig++ 2 * Add patches for thepeg * Flake-8 * Update package.py * Delete thepeg-2.1.6.patch * Delete thepeg-2.1.5.patch * Delete thepeg-2.1.3.patch * Delete thepeg-2.2.0.patch --- .../packages/herwigpp/herwig++-2.7.1.patch | 66 +++++++++++ .../builtin/packages/herwigpp/package.py | 52 +++++++++ .../repos/builtin/packages/thepeg/package.py | 103 ++++++++++++++++++ .../packages/thepeg/thepeg-1.8.3.patch | 24 ++++ .../packages/thepeg/thepeg-1.9.0.patch | 34 ++++++ .../packages/thepeg/thepeg-1.9.2.patch | 83 ++++++++++++++ .../packages/thepeg/thepeg-2.1.1.patch | 14 +++ 7 files changed, 376 insertions(+) create mode 100644 var/spack/repos/builtin/packages/herwigpp/herwig++-2.7.1.patch create mode 100644 var/spack/repos/builtin/packages/herwigpp/package.py create mode 100644 var/spack/repos/builtin/packages/thepeg/package.py create mode 100644 var/spack/repos/builtin/packages/thepeg/thepeg-1.8.3.patch create mode 100644 var/spack/repos/builtin/packages/thepeg/thepeg-1.9.0.patch create mode 100644 var/spack/repos/builtin/packages/thepeg/thepeg-1.9.2.patch create mode 100644 var/spack/repos/builtin/packages/thepeg/thepeg-2.1.1.patch diff --git a/var/spack/repos/builtin/packages/herwigpp/herwig++-2.7.1.patch b/var/spack/repos/builtin/packages/herwigpp/herwig++-2.7.1.patch new file mode 100644 index 00000000000..1690f362ad5 --- /dev/null +++ b/var/spack/repos/builtin/packages/herwigpp/herwig++-2.7.1.patch @@ -0,0 +1,66 @@ +--- Utilities/Histogram.h.orig 2018-11-07 14:46:18.967689784 +0100 ++++ Utilities/Histogram.h 2018-11-07 14:46:32.755601195 +0100 +@@ -111,7 +111,7 @@ + * Function to add a weighted point to the histogram + */ + void addWeighted(double input, double weight) { +- if(isnan(input)) return; ++ if(std::isnan(input)) return; + unsigned int ibin; + for(ibin=1; ibin<_bins.size(); ++ibin) { + if(input<_bins[ibin].limit) +--- Contrib/AlpGen/BasicLesHouchesFileReader.cc.orig 2018-11-07 15:38:46.819306762 +0100 ++++ Contrib/AlpGen/BasicLesHouchesFileReader.cc 2018-11-07 15:39:04.927190111 +0100 +@@ -383,9 +383,9 @@ + >> hepeup.PUP[i][3] >> hepeup.PUP[i][4] + >> hepeup.VTIMUP[i] >> hepeup.SPINUP[i] ) ) + return false; +- if(isnan(hepeup.PUP[i][0])||isnan(hepeup.PUP[i][1])|| +- isnan(hepeup.PUP[i][2])||isnan(hepeup.PUP[i][3])|| +- isnan(hepeup.PUP[i][4])) ++ if(std::isnan(hepeup.PUP[i][0])||std::isnan(hepeup.PUP[i][1])|| ++ std::isnan(hepeup.PUP[i][2])||std::isnan(hepeup.PUP[i][3])|| ++ std::isnan(hepeup.PUP[i][4])) + throw Exception() + << "nan's as momenta in Les Houches file " + << Exception::eventerror; +--- DipoleShower/Base/DipoleChain.cc.orig 2018-12-14 16:51:47.597597788 +0100 ++++ DipoleShower/Base/DipoleChain.cc 2018-12-14 16:52:09.450796951 +0100 +@@ -15,6 +15,7 @@ + #include "Herwig++/DipoleShower/Utility/DipolePartonSplitter.h" + + #include ++#include + + using namespace Herwig; + +--- Exsample2/exsample/config.h.orig 2018-12-14 16:56:31.729186139 +0100 ++++ Exsample2/exsample/config.h 2018-12-14 16:56:55.969406851 +0100 +@@ -25,6 +25,7 @@ + #include + + #include ++#include + #include + #include + +--- DipoleShower/Base/DipoleEventRecord.cc.orig 2018-12-14 16:58:33.878298134 +0100 ++++ DipoleShower/Base/DipoleEventRecord.cc 2018-12-14 16:58:47.983426512 +0100 +@@ -19,6 +19,7 @@ + #include "ThePEG/PDF/PartonExtractor.h" + + #include ++#include + + #include + +--- ./Exsample2/BinnedStatistics.h.orig 2018-12-14 17:11:37.396421246 +0100 ++++ ./Exsample2/BinnedStatistics.h 2018-12-14 17:12:00.762633435 +0100 +@@ -16,6 +16,7 @@ + #include "ThePEG/Repository/UseRandom.h" + + #include ++#include + + namespace Herwig { + diff --git a/var/spack/repos/builtin/packages/herwigpp/package.py b/var/spack/repos/builtin/packages/herwigpp/package.py new file mode 100644 index 00000000000..c3cdf7791d4 --- /dev/null +++ b/var/spack/repos/builtin/packages/herwigpp/package.py @@ -0,0 +1,52 @@ +# 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 Herwigpp(AutotoolsPackage): + """Herwig is a multi-purpose particle physics event generator. + This package provides old Herwig++ 2 generator""" + + homepage = "https://herwig.hepforge.org/" + url = "http://lcgpackages.web.cern.ch/lcgpackages/tarFiles/sources/MCGeneratorsTarFiles/Herwig++-2.7.1.tar.bz2" + + version('2.7.1', '80a189376bb65f5ec4e64f42e76c00ea9102d8224010563a424fc11e619a6ad6') + patch('herwig++-2.7.1.patch', when='@2.7.1', level=0) + + depends_on('gsl') + depends_on('boost') + depends_on('fastjet') + depends_on('thepeg@1.9.2', when='@2.7.1') + + def configure_args(self): + args = ['--with-gsl=' + self.spec['gsl'].prefix, + '--with-thepeg=' + self.spec['thepeg'].prefix, + '--with-fastjet=' + self.spec['fastjet'].prefix, + '--with-boost=' + self.spec['boost'].prefix] + return args + + def build(self, spec, prefix): + make() + with working_dir('Contrib'): + make() + + with working_dir('Contrib/AlpGen'): + make('BasicLesHouchesFileReader.so', + "HERWIGINCLUDE=-I{0}/include".format(self.stage.source_path)) + make('AlpGenHandler.so', + "HERWIGINCLUDE=-I{0}/include".format(self.stage.source_path)) + + def install(self, spec, prefix): + make('install') + install( + join_path(self.stage.source_path, + 'Contrib', 'AlpGen', 'AlpGenHandler.so'), + join_path(prefix.lib, 'Herwig++', 'AlpGenHandler.so')) + + install( + join_path(self.stage.source_path, + 'Contrib', 'AlpGen', 'BasicLesHouchesFileReader.so'), + join_path(prefix.lib, 'Herwig++', 'BasicLesHouchesFileReader.so')) diff --git a/var/spack/repos/builtin/packages/thepeg/package.py b/var/spack/repos/builtin/packages/thepeg/package.py new file mode 100644 index 00000000000..bc7580cf9a1 --- /dev/null +++ b/var/spack/repos/builtin/packages/thepeg/package.py @@ -0,0 +1,103 @@ +# 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 Thepeg(AutotoolsPackage): + """Toolkit for High Energy Physics Event Generation""" + + homepage = "http://home.thep.lu.se/~leif/ThePEG/" + url = "https://thepeg.hepforge.org/downloads/?f=ThePEG-2.2.1.tar.bz2" + + # The commented out versions exist, but may need patches + # and/or recipe changes + version('2.2.1', sha256='63abc7215e6ad45c11cf9dac013738e194cc38556a8368b850b70ab1b57ea58f') + version('2.2.0', sha256='d3e1474811b7d9f61a4a98db1e9d60d8ef8f913a50de4cae4dc2cc4f98e6fbf8') + # version('2.1.7', sha256='2e15727afc1fbfb158fa42ded31c4b1e5b51c25ed6bb66a38233e1fc594329c8') + version('2.1.6', sha256='c1e51f83716bfca815b55100fbab3805ef5f9b9215e4373b22762693f5353f4f') + version('2.1.5', sha256='c61a00fb6cf406f0f98e8c934683d8d5efcb655747842113abc92e9526e4b5e6') + # version('2.1.4', sha256='400c37319aa967ed993fdbec84fc65b24f6cb3779fb1b173d7f5d7a56b772df5') + version('2.1.3', sha256='16e8f6507530c2b80ed873ad22946efefed7355d15c7026f3465f18acebc1c0c') + # version('2.1.2', sha256='6a0f675a27e10863d495de069f25b892e532beb32e9cbfe5a58317d015387f49') + version('2.1.1', sha256='e1b0bdc116fbc9a6e598b601f2aa670530cf2e1cd46b4572814a9b0130b10281') + # version('2.1.0', sha256='fe6e7740ce3cd4a3ce3d7a0079a16c9214ad18f432e29d034ae763bfc40f3d39') + # version('2.0.4', sha256='f3b625b411667e2708995f1d1379b5b8691406853c8c2cca2f4e4e6e062da0e4') + # version('2.0.3', sha256='c57ba68fbfda06a0ba256e06f276f91434bf2529a13f6287c051a4cd6da44634') + # version('2.0.2', sha256='d4249e019543d5c7520733292d2edfb0bdd9733177200a63837781ed6194789b') + # version('2.0.1', sha256='ec284abdc82ceaf10a8736f908e7955f49f872b79aaa62d22aa33bc5c7679bdb') + # version('2.0.0', sha256='571730cc956027dc82780dc04ef6e7382ab5ea853fcfebe259e488c6df302a04') + version('1.9.2', sha256='ff7bbb256866f994dae04ade1f57c92d2670edaac3df11c9a300419a5343faf4') + # version('1.9.1', sha256='8ec6d0669eba51e308be4e33aeb219999418170eae3aad93ec1491c942c2a4e9') + version('1.9.0', sha256='3ee58e5e3a26184567df1b9a10ca70df228e86f322e72f018dd7d8d5a4700a5d') + version('1.8.3', sha256='55ede3a3dd0bd07b90d0d49cf7ae28c18cd965780fdf53528508b97d57152fc7') + # version('1.8.2', sha256='44ccd0d70e42bb6ecd801a51bade6c25b3953c56f33017402d4f52ee6492dffa') + # version('1.8.1', sha256='84c2a212a681545cddd541dca191eb65d96f41df86c87480b6f4f7d4f9683562') + # version('1.8.0', sha256='4b22fda1078f410b999a23a17f611c9ae3a7f0f4cee4e83dc82c9336b7adf037') + # version('1.7.3', sha256='066d5df74118d6e984bb60e1c0bea08a8edcbcf917d83d8bc32ec6fea0726187') + # version('1.7.2', sha256='3b885c6c5a39b7399ccd45d1f5a866b7a65c96174a56a7ff4ae423347843d013') + # version('1.7.1', sha256='13434dc7a8623cacb94c0b5c8d7e15b4c5d5187fe9322d1afc1c91b2c940102e') + # version('1.7.0', sha256='40eb7196139a8bf4c35f5bb69818135943d534457df64aeb1cf60b6621435312') + # version('1.6.1', sha256='5bc074b78f8b663a6a33df9c94dcaa3100269f8da59f9553a565298e55af270f') + # version('1.6.0', sha256='c0ac06b70f3e8046fce4e49ba5916c9b49450f528d0e25f8f7f1427c62fec680') + # version('1.5.0', sha256='ccbf102cf1d350a21487518d12e7e03e6e50010e5604f0201f256fa46a7a50c2') + # version('1.4.2', sha256='40444304e40e07fd417a8ebf8e5c1cf07e895ceac52ef4f7c1eecc911f6f775c') + # version('1.4.1', sha256='156d06fd1ce68466d1f2adb9cc13f412b8b87073ec6a1d02102b173c34c29b8a') + # version('1.4.0', sha256='b1f55e9a3bec713e9abf2fe71c5bd8cf8df936ea00b09f96df9123d0d5ab233f') + # version('1.3.0', sha256='f731ebf3ce5a52b6d750d6e3c282fdc74d8ffd78bccb47b68f10a4daf44c7045') + + patch('thepeg-1.8.3.patch', when='@1.8.3', level=0) + patch('thepeg-1.9.0.patch', when='@1.9.0', level=0) + patch('thepeg-1.9.2.patch', when='@1.9.2', level=0) + patch('thepeg-2.1.1.patch', when='@2.1.1:2.2.1', level=0) + + depends_on('gsl') + depends_on('lhapdf') + depends_on('lhapdf@:6.2.999', when='@:1.9.999') + depends_on('hepmc', when='hepmc=2') + depends_on('hepmc3', when='hepmc=3') + conflicts('hepmc=3', when='@:2.1.999', msg='HepMC3 support was added in 2.2.0') + depends_on('fastjet', when='@2.0.0:') + depends_on('rivet', when='@2.0.3:') + depends_on('boost', when='@2.1.1:') + + depends_on('autoconf', type='build') + depends_on('automake', type='build') + depends_on('libtool', type='build') + depends_on('m4', type='build') + + variant('hepmc', default='2', values=('2', '3'), description='HepMC interface to build ') + + install_targets = ['install-strip'] + + def configure_args(self): + args = ['--with-gsl=' + self.spec['gsl'].prefix, '--without-javagui'] + + if self.spec.satisfies('@:1.8.999'): + args += ['--with-LHAPDF=' + self.spec['lhapdf'].prefix] + else: + args += ['--with-lhapdf=' + self.spec['lhapdf'].prefix] + + if self.spec.satisfies('hepmc=2'): + args += ['--with-hepmc=' + self.spec['hepmc'].prefix] + else: + args += ['--with-hepmc=' + self.spec['hepmc3'].prefix] + + if self.spec.satisfies('@2.2.0:'): + args += ['--with-hepmcversion=' + + self.spec.variants['hepmc'].value] + + if self.spec.satisfies('@2.0.0:'): + args += ['--with-fastjet=' + self.spec['fastjet'].prefix] + + if self.spec.satisfies('@2.0.3:'): + args += ['--with-rivet=' + self.spec['rivet'].prefix] + + if self.spec.satisfies('@:2.1.999'): + args += ['--with-boost=' + self.spec['boost'].prefix] + + args += ['CFLAGS=-O2', 'CXXFLAGS=-O2', 'FFLAGS=-O2'] + + return args diff --git a/var/spack/repos/builtin/packages/thepeg/thepeg-1.8.3.patch b/var/spack/repos/builtin/packages/thepeg/thepeg-1.8.3.patch new file mode 100644 index 00000000000..c396634779c --- /dev/null +++ b/var/spack/repos/builtin/packages/thepeg/thepeg-1.8.3.patch @@ -0,0 +1,24 @@ +--- PDF/LHAPDF.cc 2013-10-26 01:48:12.000000000 +0200 ++++ PDF/LHAPDF.cc 2013-12-05 17:23:13.000000000 +0100 +@@ -33,6 +33,7 @@ + #include "config.h" + #include "ThePEG/Persistency/PersistentOStream.h" + #include "ThePEG/Persistency/PersistentIStream.h" ++#include "stdlib.h" + + #ifdef ThePEG_HAS_FPU_CONTROL + #include +@@ -228,7 +229,12 @@ + + std::string LHAPDF::getIndexPath() { + // macro is passed in from -D compile flag +- return std::string(LHAPDF_PKGDATADIR) + "/PDFsets.index"; ++ char const* tmp = getenv( "LHAPATH" ); ++ if ( tmp != NULL ) { ++ return std::string(getenv("LHAPATH")) + "/../PDFsets.index"; ++ } else { ++ return std::string(LHAPDF_PKGDATADIR) + "/PDFsets.index"; ++ }; + } + + bool LHAPDF::openLHAIndex(ifstream & is) { diff --git a/var/spack/repos/builtin/packages/thepeg/thepeg-1.9.0.patch b/var/spack/repos/builtin/packages/thepeg/thepeg-1.9.0.patch new file mode 100644 index 00000000000..76bc91211b5 --- /dev/null +++ b/var/spack/repos/builtin/packages/thepeg/thepeg-1.9.0.patch @@ -0,0 +1,34 @@ +--- PDF/LHAPDF.cc 2013-10-26 01:48:12.000000000 +0200 ++++ PDF/LHAPDF.cc 2013-12-05 17:23:13.000000000 +0100 +@@ -33,6 +33,7 @@ + #include "config.h" + #include "ThePEG/Persistency/PersistentOStream.h" + #include "ThePEG/Persistency/PersistentIStream.h" ++#include "stdlib.h" + + #ifdef ThePEG_HAS_FPU_CONTROL + #include +@@ -228,7 +229,12 @@ + + std::string LHAPDF::getIndexPath() { + // macro is passed in from -D compile flag +- return std::string(LHAPDF_PKGDATADIR) + "/PDFsets.index"; ++ char const* tmp = getenv( "LHAPATH" ); ++ if ( tmp != NULL ) { ++ return std::string(getenv("LHAPATH")) + "/../PDFsets.index"; ++ } else { ++ return std::string(LHAPDF_PKGDATADIR) + "/PDFsets.index"; ++ }; + } + + bool LHAPDF::openLHAIndex(ifstream & is) { +--- ACDC/ACDCGen.h.orig 2014-04-02 16:20:59.000000000 +0200 ++++ ACDC/ACDCGen.h 2014-04-02 16:22:40.000000000 +0200 +@@ -13,6 +13,7 @@ + #include "ACDCTraits.h" + #include "ACDCGenCell.h" + #include "ThePEG/Utilities/Exception.h" ++#include + + namespace ACDCGenerator { + diff --git a/var/spack/repos/builtin/packages/thepeg/thepeg-1.9.2.patch b/var/spack/repos/builtin/packages/thepeg/thepeg-1.9.2.patch new file mode 100644 index 00000000000..556b6835608 --- /dev/null +++ b/var/spack/repos/builtin/packages/thepeg/thepeg-1.9.2.patch @@ -0,0 +1,83 @@ +diff -r 2d8e0f74b65e PDF/LHAPDF6.cc +--- PDF/LHAPDF6.cc.orig Mon Jul 07 09:16:48 2014 +0100 ++++ PDF/LHAPDF6.cc Fri Sep 26 14:41:55 2014 +0100 +@@ -54,8 +54,8 @@ + return new_ptr(*this); + } + +-void ThePEG::LHAPDF::doinit() { +- PDFBase::doinit(); ++void ThePEG::LHAPDF::initPDFptr() { ++ if ( thePDF ) return; + thePDF = ::LHAPDF::mkPDF(thePDFName, theMember); + xMin = thePDF->xMin(); + xMax = thePDF->xMax(); +@@ -63,6 +63,11 @@ + Q2Max = thePDF->q2Max() * GeV2; + } + ++void ThePEG::LHAPDF::doinit() { ++ PDFBase::doinit(); ++ initPDFptr(); ++} ++ + void ThePEG::LHAPDF::dofinish() { + PDFBase::dofinish(); + delete thePDF; +@@ -71,11 +76,7 @@ + + void ThePEG::LHAPDF::doinitrun() { + PDFBase::doinitrun(); +- thePDF = ::LHAPDF::mkPDF(thePDFName, theMember); +- xMin = thePDF->xMin(); +- xMax = thePDF->xMax(); +- Q2Min = thePDF->q2Min() * GeV2; +- Q2Max = thePDF->q2Max() * GeV2; ++ initPDFptr(); + } + + void ThePEG::LHAPDF::setPDFName(string name) { +@@ -387,6 +388,7 @@ + lastQ2 = -1.0*GeV2; + lastX = -1.0; + lastP2 = -1.0*GeV2; ++ initPDFptr(); + } + + ThePEG::ClassDescription ThePEG::LHAPDF::initLHAPDF; +diff -r 2d8e0f74b65e PDF/LHAPDF6.h +--- PDF/LHAPDF6.h.orig Mon Jul 07 09:16:48 2014 +0100 ++++ PDF/LHAPDF6.h Fri Sep 26 14:41:55 2014 +0100 +@@ -147,6 +147,12 @@ + void checkUpdate(double x, Energy2 Q2, Energy2 P2) const; + + /** ++ * Initialize the LHAPDF library for the chosen PDF set if it has ++ * not been done before. ++ */ ++ void initPDFptr(); ++ ++ /** + * Used by the interface to select a set according to a file name. + */ + void setPDFName(string name); +--- Persistency/PersistentOStream.h.orig 2018-11-07 14:46:59.055432275 +0100 ++++ Persistency/PersistentOStream.h 2018-11-07 14:47:20.639293703 +0100 +@@ -219,7 +219,7 @@ + * Write a double. + */ + PersistentOStream & operator<<(double d) { +- if ( isnan(d) || isinf(d) ) ++ if ( std::isnan(d) || std::isinf(d) ) + throw WriteError() + << "Tried to write a NaN or Inf double to a persistent stream." + << Exception::runerror; +@@ -232,7 +232,7 @@ + * Write a float. + */ + PersistentOStream & operator<<(float f) { +- if ( isnan(f) || isinf(f) ) ++ if ( std::isnan(f) || std::isinf(f) ) + throw WriteError() + << "Tried to write a NaN or Inf float to a persistent stream." + << Exception::runerror; diff --git a/var/spack/repos/builtin/packages/thepeg/thepeg-2.1.1.patch b/var/spack/repos/builtin/packages/thepeg/thepeg-2.1.1.patch new file mode 100644 index 00000000000..90c61fc9919 --- /dev/null +++ b/var/spack/repos/builtin/packages/thepeg/thepeg-2.1.1.patch @@ -0,0 +1,14 @@ +--- m4/rivet.m4.orig 2013-10-16 10:50:05.000000000 +0200 ++++ m4/rivet.m4 2017-08-02 12:26:22.897894696 +0200 +@@ -33,10 +33,7 @@ + else + AC_MSG_RESULT([$with_rivet]) + RIVETINCLUDE="$( $with_rivet/bin/rivet-config --cppflags )" +- RIVETLIBS="-L$with_rivet/lib -R$with_rivet/lib -lRivet" +- if test "${host_cpu}" == "x86_64" -a -e $with_rivet/lib64/libRivet.so ; then +- RIVETLIBS="-L$with_rivet/lib64 -R$with_rivet/lib64 -lRivet" +- fi ++ RIVETLIBS="$( $with_rivet/bin/rivet-config --libs ) -lYODA" + fi + + if test "x$with_rivet" != "xno"; then From 00d7e817c676e9a55214f004a8c7e1817f522653 Mon Sep 17 00:00:00 2001 From: figroc Date: Fri, 10 Jul 2020 21:25:47 +0800 Subject: [PATCH 094/149] grpc: add versions 1.28/1.29/1.30 (#17433) --- var/spack/repos/builtin/packages/grpc/package.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/var/spack/repos/builtin/packages/grpc/package.py b/var/spack/repos/builtin/packages/grpc/package.py index a7eff3e07f4..010cffb6f31 100644 --- a/var/spack/repos/builtin/packages/grpc/package.py +++ b/var/spack/repos/builtin/packages/grpc/package.py @@ -11,8 +11,14 @@ class Grpc(CMakePackage): maintainers = ['nazavode'] homepage = "https://grpc.io" - url = "https://github.com/grpc/grpc/archive/v1.27.0.tar.gz" + url = "https://github.com/grpc/grpc/archive/v1.30.0.tar.gz" + version('1.30.0', sha256='419dba362eaf8f1d36849ceee17c3e2ff8ff12ac666b42d3ff02a164ebe090e9') + version('1.29.1', sha256='0343e6dbde66e9a31c691f2f61e98d79f3584e03a11511fad3f10e3667832a45') + version('1.29.0', sha256='c0a6b40a222e51bea5c53090e9e65de46aee2d84c7fa7638f09cb68c3331b983') + version('1.28.2', sha256='4bec3edf82556b539f7e9f3d3801cba540e272af87293a3f4178504239bd111e') + version('1.28.1', sha256='4cbce7f708917b6e58b631c24c59fe720acc8fef5f959df9a58cdf9558d0a79b') + version('1.28.0', sha256='d6277f77e0bb922d3f6f56c0f93292bb4cfabfc3c92b31ee5ccea0e100303612') version('1.27.0', sha256='3ccc4e5ae8c1ce844456e39cc11f1c991a7da74396faabe83d779836ef449bce') version('1.26.0', sha256='2fcb7f1ab160d6fd3aaade64520be3e5446fc4c6fa7ba6581afdc4e26094bd81') version('1.25.0', sha256='ffbe61269160ea745e487f79b0fd06b6edd3d50c6d9123f053b5634737cf2f69') @@ -29,7 +35,7 @@ class Grpc(CMakePackage): depends_on('openssl') depends_on('zlib') depends_on('c-ares') - depends_on('abseil-cpp', when='@1.27.0:') + depends_on('abseil-cpp', when='@1.27:') def cmake_args(self): args = [ From 7269a5bf5112ef1f160d1bf31691f7243c99c119 Mon Sep 17 00:00:00 2001 From: ketsubouchi <67359246+ketsubouchi@users.noreply.github.com> Date: Fri, 10 Jul 2020 22:26:21 +0900 Subject: [PATCH 095/149] py-pysam: add LDFLAGS to curl (#17434) * py-pysam: add LDFLAGS to curl * Update var/spack/repos/builtin/packages/py-pysam/package.py Co-authored-by: Adam J. Stewart Co-authored-by: Adam J. Stewart --- var/spack/repos/builtin/packages/py-pysam/package.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/var/spack/repos/builtin/packages/py-pysam/package.py b/var/spack/repos/builtin/packages/py-pysam/package.py index 38a2a26b408..5459ef0a16a 100644 --- a/var/spack/repos/builtin/packages/py-pysam/package.py +++ b/var/spack/repos/builtin/packages/py-pysam/package.py @@ -25,3 +25,6 @@ class PyPysam(PythonPackage): depends_on('samtools') depends_on('htslib@:1.6', when='@:0.13') + + def setup_build_environment(self, env): + env.set('LDFLAGS', self.spec['curl'].libs.search_flags) From ea546425e8e04999683adae315c61181d7def5b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Lacroix?= Date: Fri, 10 Jul 2020 15:27:07 +0200 Subject: [PATCH 096/149] Update the bbcp package (#17436) * bbcp: Update the URLs to use HTTPS. The HTTP URLs do not work anymore. * bbcp: Add missing libnsl dependency. * bbcp: Rename the git-based version to match the branch name. Co-authored-by: Adam J. Stewart Co-authored-by: Adam J. Stewart --- var/spack/repos/builtin/packages/bbcp/package.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/var/spack/repos/builtin/packages/bbcp/package.py b/var/spack/repos/builtin/packages/bbcp/package.py index 70c453825fc..0ea5d88a891 100644 --- a/var/spack/repos/builtin/packages/bbcp/package.py +++ b/var/spack/repos/builtin/packages/bbcp/package.py @@ -9,13 +9,14 @@ class Bbcp(Package): """Securely and quickly copy data from source to target""" - homepage = "http://www.slac.stanford.edu/~abh/bbcp/" - git = "http://www.slac.stanford.edu/~abh/bbcp/bbcp.git" + homepage = "https://www.slac.stanford.edu/~abh/bbcp/" + git = "https://www.slac.stanford.edu/~abh/bbcp/bbcp.git" - version('git', branch='master') + version('master', branch='master') depends_on('zlib') depends_on('openssl') + depends_on('libnsl') def install(self, spec, prefix): cd("src") From f2889e698a7726f1b632a9eb950b0500dbc6b657 Mon Sep 17 00:00:00 2001 From: Greg Becker Date: Fri, 10 Jul 2020 12:45:11 -0500 Subject: [PATCH 097/149] spack install: improve error message with no args (#17454) The error message was not updated when the behavior of Spack environments was changed to not automatically activate the local environment in #17258. The previous error message no longer makes sense. --- lib/spack/spack/cmd/install.py | 15 +++++++++++++-- lib/spack/spack/test/cmd/install.py | 24 ++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/lib/spack/spack/cmd/install.py b/lib/spack/spack/cmd/install.py index 10eb3c327f8..39bcc96ce52 100644 --- a/lib/spack/spack/cmd/install.py +++ b/lib/spack/spack/cmd/install.py @@ -268,7 +268,7 @@ def install(parser, args, **kwargs): return if not args.spec and not args.specfiles: - # if there are no args but an active environment or spack.yaml file + # if there are no args but an active environment # then install the packages from it. env = ev.get_env(args, 'install') if env: @@ -289,7 +289,18 @@ def install(parser, args, **kwargs): env.regenerate_views() return else: - tty.die("install requires a package argument or a spack.yaml file") + msg = "install requires a package argument or active environment" + if 'spack.yaml' in os.listdir(os.getcwd()): + # There's a spack.yaml file in the working dir, the user may + # have intended to use that + msg += "\n\n" + msg += "Did you mean to install using the `spack.yaml`" + msg += " in this directory? Try: \n" + msg += " spack env activate .\n" + msg += " spack install\n" + msg += " OR\n" + msg += " spack --env . install" + tty.die(msg) if args.no_checksum: spack.config.set('config:checksum', False, scope='command_line') diff --git a/lib/spack/spack/test/cmd/install.py b/lib/spack/spack/test/cmd/install.py index e4df22a6a56..9ffd166e377 100644 --- a/lib/spack/spack/test/cmd/install.py +++ b/lib/spack/spack/test/cmd/install.py @@ -746,3 +746,27 @@ def test_compiler_bootstrap_already_installed( # Test succeeds if it does not raise an error install('gcc@2.0') install('a%gcc@2.0') + + +def test_install_fails_no_args(tmpdir): + # ensure no spack.yaml in directory + with tmpdir.as_cwd(): + output = install(fail_on_error=False) + + # check we got the short version of the error message with no spack.yaml + assert 'requires a package argument or active environment' in output + assert 'spack env activate .' not in output + assert 'using the `spack.yaml` in this directory' not in output + + +def test_install_fails_no_args_suggests_env_activation(tmpdir): + # ensure spack.yaml in directory + tmpdir.ensure('spack.yaml') + + with tmpdir.as_cwd(): + output = install(fail_on_error=False) + + # check we got the long version of the error message with spack.yaml + assert 'requires a package argument or active environment' in output + assert 'spack env activate .' in output + assert 'using the `spack.yaml` in this directory' in output From 0612a9e8e982abcc5863b087ca1950492c53fc38 Mon Sep 17 00:00:00 2001 From: figroc Date: Sat, 11 Jul 2020 08:10:04 +0800 Subject: [PATCH 098/149] tensorflow-serving-client: add new version 2.2.0 (#17462) --- .../builtin/packages/tensorflow-serving-client/package.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/tensorflow-serving-client/package.py b/var/spack/repos/builtin/packages/tensorflow-serving-client/package.py index 6b2b74649f8..58976df975b 100644 --- a/var/spack/repos/builtin/packages/tensorflow-serving-client/package.py +++ b/var/spack/repos/builtin/packages/tensorflow-serving-client/package.py @@ -11,8 +11,9 @@ class TensorflowServingClient(CMakePackage): proto files""" homepage = "https://github.com/figroc/tensorflow-serving-client" - url = "https://github.com/figroc/tensorflow-serving-client/archive/v2.1.0.tar.gz" + url = "https://github.com/figroc/tensorflow-serving-client/archive/v2.2.0.tar.gz" + version('2.2.0', sha256='010b464b3b09c3c33c5dc2aebbc85447c4d5f775b9cd45d90a9035ca015c1c08') version('2.1.0', sha256='7a31d8cfa1d861f73953d4728665dd6d74e205d1fa01062a6c2b1aeee4674f73') version('2.0.0', sha256='55310ad484f257173ad5194df7f7116b2049260c3d29049ef8d789d1d8bd9948') From 1a8a147fe5c16fff10dc6aaebd4a8704f8e0ae46 Mon Sep 17 00:00:00 2001 From: Justin S <3630356+codeandkey@users.noreply.github.com> Date: Fri, 10 Jul 2020 19:23:04 -0500 Subject: [PATCH 099/149] energyplus: add 9.3.0 (#17452) * energyplus: add 9.3.0 * energyplus: fix version order * energyplus: more concise links * energyplus: avoid join_path --- .../builtin/packages/energyplus/package.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/var/spack/repos/builtin/packages/energyplus/package.py b/var/spack/repos/builtin/packages/energyplus/package.py index ca534999f97..d781f24452a 100644 --- a/var/spack/repos/builtin/packages/energyplus/package.py +++ b/var/spack/repos/builtin/packages/energyplus/package.py @@ -17,6 +17,8 @@ class Energyplus(Package): homepage = "https://energyplus.net" # versions require explicit URLs as they contain hashes + version('9.3.0', sha256='c939dc4f867224e110485a8e0712ce4cfb1e06f8462bc630b54f83a18c93876c', + url="https://github.com/NREL/EnergyPlus/releases/download/v9.3.0/EnergyPlus-9.3.0-baff08990c-Linux-x86_64.tar.gz") version('8.9.0', sha256='13a5192b25815eb37b3ffd019ce3b99fd9f854935f8cc4362814f41c56e9ca98', url="https://github.com/NREL/EnergyPlus/releases/download/v8.9.0-WithIDDFixes/EnergyPlus-8.9.0-eba93e8e1b-Linux-x86_64.tar.gz") @@ -25,13 +27,14 @@ def install(self, spec, prefix): # and then symlink the appropriate targets # there is only one folder with a semi-predictable name so we glob it - install_tree(glob.glob('EnergyPlus*')[0], - join_path(prefix.lib, 'energyplus')) + source_dir = '.' + + if spec.satisfies('@:8.9.9'): + source_dir = glob.glob('EnergyPlus*')[0] + + install_tree(source_dir, prefix.lib.enregyplus) mkdirp(prefix.bin) - os.symlink(join_path(prefix.lib, 'energyplus/energyplus'), - join_path(prefix.bin, 'energyplus')) - os.symlink(join_path(prefix.lib, 'energyplus/EPMacro'), - join_path(prefix.bin, 'EPMacro')) - os.symlink(join_path(prefix.lib, 'energyplus/ExpandObjects'), - join_path(prefix.bin, 'ExpandObjects')) + for b in ['energyplus', 'EPMacro', 'ExpandObjects']: + os.symlink(join_path(prefix.lib.energyplus, b), + join_path(prefix.bin, b)) From 59bfc22d40259250d5834672cc36faa4a889eb5a Mon Sep 17 00:00:00 2001 From: Jen Herting Date: Fri, 10 Jul 2020 20:32:26 -0400 Subject: [PATCH 100/149] [glew] depends on libsm and libice (#17428) * [glew] depends on libsm * [glew] depends on libice --- var/spack/repos/builtin/packages/glew/package.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/var/spack/repos/builtin/packages/glew/package.py b/var/spack/repos/builtin/packages/glew/package.py index a5ca6f65daa..1b701a21c06 100644 --- a/var/spack/repos/builtin/packages/glew/package.py +++ b/var/spack/repos/builtin/packages/glew/package.py @@ -16,6 +16,8 @@ class Glew(Package): depends_on("cmake", type='build') depends_on("gl") + depends_on('libsm') + depends_on('libice') def install(self, spec, prefix): options = [] From 9629f571bcec423133d4951be2ed474049116704 Mon Sep 17 00:00:00 2001 From: Dr Owain Kenway Date: Sat, 11 Jul 2020 15:02:53 +0100 Subject: [PATCH 101/149] llvm-flang: Only build offload code if cuda enabled (#17466) * llvm-flang Only build offload code if cuda enabled The current version executes `cmake(*args)` always as part of the post install. If device offload is not part of the build, this results in referencing `args` without it being set and the error: ``` ==> Error: UnboundLocalError: local variable 'args' referenced before assignment ``` Looking at prevoous version of `llvm-package.py` this whole routine appears to be only required for offload, some indent `cmake/make/install` to be under the `if`. * Update package.py Add comment --- var/spack/repos/builtin/packages/llvm-flang/package.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/var/spack/repos/builtin/packages/llvm-flang/package.py b/var/spack/repos/builtin/packages/llvm-flang/package.py index 10001e23402..99948fd76f4 100644 --- a/var/spack/repos/builtin/packages/llvm-flang/package.py +++ b/var/spack/repos/builtin/packages/llvm-flang/package.py @@ -238,6 +238,7 @@ def post_install(self): spec['libelf'].prefix.include, spec['hwloc'].prefix.include)) - cmake(*args) - make() - make('install') + # Only build if offload target. + cmake(*args) + make() + make('install') From 73f02b10de07b5d14f2674f12b517be35f714168 Mon Sep 17 00:00:00 2001 From: darmac Date: Sun, 12 Jul 2020 01:53:53 +0800 Subject: [PATCH 102/149] lmbench: fix scripts path for aarch64 (#17456) --- .../lmbench/fix_results_path_for_aarch64.patch | 13 +++++++++++++ var/spack/repos/builtin/packages/lmbench/package.py | 2 ++ 2 files changed, 15 insertions(+) create mode 100644 var/spack/repos/builtin/packages/lmbench/fix_results_path_for_aarch64.patch diff --git a/var/spack/repos/builtin/packages/lmbench/fix_results_path_for_aarch64.patch b/var/spack/repos/builtin/packages/lmbench/fix_results_path_for_aarch64.patch new file mode 100644 index 00000000000..dc0f7026a09 --- /dev/null +++ b/var/spack/repos/builtin/packages/lmbench/fix_results_path_for_aarch64.patch @@ -0,0 +1,13 @@ +diff --git a/scripts/results b/scripts/results +index cd07c15..282ed19 100755 +--- a/scripts/results ++++ b/scripts/results +@@ -27,7 +27,7 @@ cd ../bin/$OS + PATH=.:${PATH}; export PATH + export SYNC_MAX + export OUTPUT +-lmbench $CONFIG 2>../${RESULTS} ++lmbench $CONFIG 2>${RESULTS} + + if [ X$MAIL = Xyes ] + then echo Mailing results diff --git a/var/spack/repos/builtin/packages/lmbench/package.py b/var/spack/repos/builtin/packages/lmbench/package.py index e38ca29e242..e0b5fe36207 100644 --- a/var/spack/repos/builtin/packages/lmbench/package.py +++ b/var/spack/repos/builtin/packages/lmbench/package.py @@ -19,6 +19,8 @@ class Lmbench(MakefilePackage): depends_on('libtirpc') + patch('fix_results_path_for_aarch64.patch', sha256='2af57abc9058c56b6dd0697bb01a98902230bef92b117017e318faba148eef60', when='target=aarch64:') + def setup_build_environment(self, env): env.prepend_path('CPATH', self.spec['libtirpc'].prefix.include.tirpc) env.append_flags('LDFLAGS', '-ltirpc') From 406596af7028c715035f78a89fada70612d79e07 Mon Sep 17 00:00:00 2001 From: Greg Becker Date: Sat, 11 Jul 2020 16:35:25 -0500 Subject: [PATCH 103/149] update docs on point releases (#17463) --- lib/spack/docs/developer_guide.rst | 78 ++++++++++++++---------------- 1 file changed, 37 insertions(+), 41 deletions(-) diff --git a/lib/spack/docs/developer_guide.rst b/lib/spack/docs/developer_guide.rst index 5e905c3d1bf..284690bd6f9 100644 --- a/lib/spack/docs/developer_guide.rst +++ b/lib/spack/docs/developer_guide.rst @@ -799,49 +799,12 @@ Publishing a release on GitHub .. _merging-releases: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Updating `develop` and `releases/latest` +Updating `releases/latest` and `develop` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -We merge each release into ``develop``, we tag the latest release as -``releases/latest``. - -#. Once each release is complete, make sure that it is merged back into - ``develop`` with a merge commit: - - .. code-block:: console - - $ git checkout develop - $ git merge --no-ff releases/vX.Y # vX.Y is the new release's branch - $ git push - - We merge back to ``develop`` because it: - - * updates the version and ``CHANGELOG.md`` on ``develop``. - * ensures that your release tag is reachable from the head of - ``develop`` - - We *must* use a real merge commit (via the ``--no-ff`` option) because it - ensures that the release tag is reachable from the tip of ``develop``. - This is necessary for ``spack -V`` to work properly -- it uses ``git - describe --tags`` to find the last reachable tag in the repository and - reports how far we are from it. For example: - - .. code-block:: console - - $ spack -V - 0.14.2-1486-b80d5e74e5 - - This says that we are at commit ``b80d5e74e5``, which is 1,486 commits - ahead of the ``0.14.2`` release. - - We put this step last in the process because it's best to do it only once - the release is complete and tagged. If you do it before you've tagged the - release and later decide you want to tag some later commit, you'll need - to merge again. - -#. If the new release is the **highest** Spack release yet, you should - also tag it as ``releases/latest``. For example, suppose the highest - release is currently ``0.15.3``: +If the new release is the **highest** Spack release yet, you should +also tag it as ``releases/latest``. For example, suppose the highest +release is currently ``0.15.3``: * If you are releasing ``0.15.4`` or ``0.16.0``, then you should tag it with ``releases/latest``, as these are higher than ``0.15.3``. @@ -861,6 +824,39 @@ We merge each release into ``develop``, we tag the latest release as The ``--force`` argument makes ``git`` overwrite the existing ``releases/latest`` tag with the new one. +We also merge each release that we tag as ``releases/latest`` into ``develop``. +Make sure to do this with a merge commit: + +.. code-block:: console + + $ git checkout develop + $ git merge --no-ff vX.Y.Z # vX.Y.Z is the new release's tag + $ git push + +We merge back to ``develop`` because it: + + * updates the version and ``CHANGELOG.md`` on ``develop``. + * ensures that your release tag is reachable from the head of + ``develop`` + +We *must* use a real merge commit (via the ``--no-ff`` option) because it +ensures that the release tag is reachable from the tip of ``develop``. +This is necessary for ``spack -V`` to work properly -- it uses ``git +describe --tags`` to find the last reachable tag in the repository and +reports how far we are from it. For example: + +.. code-block:: console + + $ spack -V + 0.14.2-1486-b80d5e74e5 + +This says that we are at commit ``b80d5e74e5``, which is 1,486 commits +ahead of the ``0.14.2`` release. + +We put this step last in the process because it's best to do it only once +the release is complete and tagged. If you do it before you've tagged the +release and later decide you want to tag some later commit, you'll need +to merge again. .. _announcing-releases: From dbdd2cb92f94fe3b26aa22ca86a24d7f04881844 Mon Sep 17 00:00:00 2001 From: Jannek Squar Date: Mon, 13 Jul 2020 04:20:12 +0200 Subject: [PATCH 104/149] Magics fix and update (#17477) * Added new versions to magics and began to set not-so-optional netcdf dependency * Added enforced netcdf dependency * Fix also works for version 4.1.0 --- .../repos/builtin/packages/magics/package.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/var/spack/repos/builtin/packages/magics/package.py b/var/spack/repos/builtin/packages/magics/package.py index c9c331eeb5e..902ac0db135 100644 --- a/var/spack/repos/builtin/packages/magics/package.py +++ b/var/spack/repos/builtin/packages/magics/package.py @@ -19,7 +19,12 @@ class Magics(CMakePackage): # The policy on which minor releases remain available and which get deleted # after a newer version becomes available is unclear. - version('4.2.4', sha256='920c7dbb1aaabe65a31c6c18010829210f8b2f8d614b6c405dc5a4530e346f07') + version('4.4.0', sha256='544058cd334f3e28a16d00ea7811e13cdf282f9c1ebec2ad7868171d925abd24') + version('4.3.3', sha256='27d3de71cf41f3d557fd85dabaea2baaab34c4c6422a5b5b15071a6a53387601') + version('4.3.1', sha256='b1995e2f5bf24943715446d1302cc5d7de4cacfe4cee7c3cfd1037ac183cd181') + version('4.3.0', sha256='f6c0d32c243913e53320dd94ce8e1e6a64bd9a44af77d5ac32c062bc18355b8a') + version('4.2.6', sha256='9b34a375d9125ab6e8a715b970da2e479f96370bac6a5bb8a015a079ed9e027c') + version('4.2.4', sha256='920c7dbb1aaabe65a31c6c18010829210f8b2f8d614b6c405dc5a4530e346f07') version('4.1.0', sha256='da626c31f53716990754dd72ab7b2f3902a8ad924b23ef3309bd14900d170541') version('2.34.3', sha256='38487562e83c0470f94d9c7fb9418cbadf92f1e643033237baba2abdc77e6238') version('2.34.1', sha256='8df27f8f262ebc32a61f8696df15a7b4a6e4203b2a8e53fe7aa13caa1c4e3fa4') @@ -59,7 +64,10 @@ class Magics(CMakePackage): depends_on('perl-xml-parser', type='build') # Non-optional dependencies - depends_on('proj@:5') + # change of proj4 api starting from version 4.3.0 + # https://github.com/OSGeo/PROJ/wiki/proj.h-adoption-status + depends_on('proj@:5', when='@:4.2.6') + depends_on('proj@6:', when='@4.3:') depends_on('boost') depends_on('expat') @@ -79,6 +87,10 @@ class Magics(CMakePackage): depends_on('eccodes', when='grib=eccodes') depends_on('grib-api', when='grib=grib-api') + # Even if netcdf is disabled and -DENABLE_NETCDF=OFF is set, building + # magics still requires legacy netcdf-cxx + depends_on('netcdf-cxx', when='@4.1.0:4.3.1') + # Optional dependencies depends_on('netcdf-cxx', when='+netcdf') depends_on('pango', when='+cairo') @@ -129,7 +141,8 @@ def cmake_args(self): if self.spec.satisfies('@2.29.1:'): args.append('-DENABLE_ECCODES=OFF') - if '+netcdf' in self.spec: + # magics@4.2.4:4.3.1 cannot be built without netcdf + if '+netcdf' in self.spec or self.spec.satisfies('@4.1.0:4.3.1'): args.append('-DENABLE_NETCDF=ON') else: args.append('-DENABLE_NETCDF=OFF') From 9c42f246ed7ea9a3b901a1c1dbaa88487bb10b0d Mon Sep 17 00:00:00 2001 From: darmac Date: Mon, 13 Jul 2020 10:32:02 +0800 Subject: [PATCH 105/149] Add new package: atf (#17472) --- .../repos/builtin/packages/atf/package.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 var/spack/repos/builtin/packages/atf/package.py diff --git a/var/spack/repos/builtin/packages/atf/package.py b/var/spack/repos/builtin/packages/atf/package.py new file mode 100644 index 00000000000..25fc399fbfa --- /dev/null +++ b/var/spack/repos/builtin/packages/atf/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 Atf(AutotoolsPackage): + """ATF, or Automated Testing Framework, is a collection of libraries + to write test programs in C, C++ and POSIX shell.""" + + homepage = "https://github.com/jmmv/atf" + url = "https://github.com/jmmv/atf/archive/atf-0.21.tar.gz" + + version('0.21', sha256='da6b02d6e7242f768a7aaa7b7e52378680456e4bd9a913b6636187079c98f3cd') + version('0.20', sha256='3677cf957d7f574835b8bdd385984ba928d5695b3ff28f958e4227f810483ab7') + version('0.19', sha256='f9b1d76dad7c34ae61a75638edc517fc05b10fa4c8f97b1d13d739bffee79b16') + + depends_on('m4', type='build') + depends_on('autoconf', type='build') + depends_on('automake', type='build') + depends_on('libtool', type='build') From 573489db710c6fd315170a45d6c609db2e30e5e4 Mon Sep 17 00:00:00 2001 From: Omar Padron Date: Mon, 13 Jul 2020 11:32:36 -0400 Subject: [PATCH 106/149] Add libglvnd packages/Add EGL support (#14572) * add new package: "libglvnd-frontend" * add +glvnd variant to opengl package * add +glvnd variant to mesa package * add +egl variant to paraview package * add libglvnd-frontend entries to default packages config * fix style * add default providers for glvnd virtuals add default providers for glvnd-gl, glvnd-glx, and glvnd-egl * WIP: rough start to external OpenGL documentation * rename libglvnd-frontend package and backend virtual dependencies * update documentation * fix ligvnd-be-* typos * fix libglvnd-fe package class name * fix doc parse error --- etc/spack/defaults/packages.yaml | 8 +- lib/spack/docs/getting_started.rst | 94 +++++++++++++++++++ .../builtin/packages/libglvnd-fe/package.py | 56 +++++++++++ .../repos/builtin/packages/mesa/package.py | 46 +++++++-- .../repos/builtin/packages/opengl/package.py | 42 ++++++++- .../builtin/packages/paraview/package.py | 13 ++- 6 files changed, 242 insertions(+), 17 deletions(-) create mode 100644 var/spack/repos/builtin/packages/libglvnd-fe/package.py diff --git a/etc/spack/defaults/packages.yaml b/etc/spack/defaults/packages.yaml index dcfbf76b51b..4e8f0027875 100644 --- a/etc/spack/defaults/packages.yaml +++ b/etc/spack/defaults/packages.yaml @@ -23,8 +23,12 @@ packages: daal: [intel-daal] elf: [elfutils] fftw-api: [fftw] - gl: [mesa+opengl, opengl] - glx: [mesa+glx, opengl] + gl: [libglvnd-fe, mesa+opengl~glvnd, opengl~glvnd] + glx: [libglvnd-fe+glx, mesa+glx~glvnd, opengl+glx~glvnd] + egl: [libglvnd-fe+egl, opengl+egl~glvnd] + libglvnd-be-gl: [mesa+glvnd, opengl+glvnd] + libglvnd-be-glx: [mesa+glx+glvnd, opengl+glx+glvnd] + libglvnd-be-egl: [opengl+egl+glvnd] glu: [mesa-glu, openglu] golang: [gcc] iconv: [libiconv] diff --git a/lib/spack/docs/getting_started.rst b/lib/spack/docs/getting_started.rst index 7b908465f56..04594d7e6ec 100644 --- a/lib/spack/docs/getting_started.rst +++ b/lib/spack/docs/getting_started.rst @@ -811,6 +811,100 @@ to add the following to ``packages.yaml``: present in PATH, however it will have lower precedence compared to paths from other dependencies. This ensures that binaries in Spack dependencies are preferred over system binaries. + +^^^^^^ +OpenGL +^^^^^^ + +To use hardware-accelerated rendering from a system-supplied OpenGL driver, +add something like the following to your ``packages`` configuration: + +.. code-block:: yaml + + packages: + opengl: + paths: + opengl+glx@4.5: /usr + buildable: False + all: + providers: + gl: [opengl] + glx: [opengl] + +For `EGL ` support, or for certain modern drivers, +OpenGL calls are dispatched dynamically at run time to the hardware graphics +implementation. This dynamic dispatch is performed using `libglvnd +`. In this mode, the graphics library +(e.g.: opengl) must be built to work with libglvnd. Applications then link +against libglvnd instead of the underlying implementation. Environment +variables set at run time govern the process by which libglvnd loads the +underlying implementation and dispatches calls to it. See `this +` comment +for details on loading a specific GLX implementation and `this +` +page for information about EGL ICD enumeration. + +This codependency between libglvnd and the underlying implementation is modeled +in Spack with two packages for libglvnd: libglvnd, which provides libglvnd +proper; and libglvnd-fe, a bundle package that depends on libglvnd and an +implementation. Implementations that work through libglvnd are no longer +providers for graphics virtual dependencies, like "gl" or "glx", but instead +provide libglvnd versions of these dependencies ("libglvnd-be-gl", +"libglvnd-be-glx", etc.). The libglvnd-fe package depends on these +"libglvnd-be-..." virtual packages, which provide the actual implementation. +It also depends on libglvnd, itself, and exposes its libraries to downstream +applications. For correct operation, the Spack package for the underlying +implementation has to set the runtime environment to ensure that it is loaded +when an application linked against libglvnd runs. This last detail is +important for users who want to set up an external OpenGL implementation that +requires libglvnd to work. This setup requires modifying the ``modules`` +configuration so that modules generated for the external OpenGL implementation +set the necessary environment variables. + +.. code-block:: yaml + + packages: + opengl: + paths: + opengl@4.5+glx+egl+glvnd: /does/not/exist + buildable: False + variants:+glx+egl+glvnd + libglvnd-fe: + variants:+gl+glx+egl + all: + providers: + glvnd-be-gl: [opengl] + glvnd-be-glx: [opengl] + glvnd-be-egl: [opengl] + gl: [libglvnd-fe] + glx: [libglvnd-fe] + egl: [libglvnd-fe] + +.. code-block:: yaml + + modules: + tcl: + opengl@4.5+glx+glvnd: + environment: + set: + __GLX_VENDOR_LIBRARY_NAME: nvidia + opengl@4.5+egl+glvnd: + environment: + set: + __EGL_VENDOR_LIBRARY_FILENAMES: /usr/share/glvnd/egl_vendor.d/10_nvidia.json + +One final detail about the above example is that it avoids setting the true +root of the external OpenGL implementation, instead opting to set it to a path +that is not expected to exist on the system. This is done for two reasons. +First, Spack would add directories under this root to environment variables +that would affect the process of building and installing other packages, such +as ``PATH`` and ``PKG_CONFIG_PATH``. These additions may potentially prevent +those packages from installing successfully, and this risk is especially great +for paths that house many libraries and applications, like ``/usr``. Second, +providing the true root of the external implementation in the ``packages`` +configuration is not necessary because libglvnd need only the environment +variables set above in the ``modules`` configuration to determine what OpenGL +implementation to dispatch calls to at run time. ^^^ Git diff --git a/var/spack/repos/builtin/packages/libglvnd-fe/package.py b/var/spack/repos/builtin/packages/libglvnd-fe/package.py new file mode 100644 index 00000000000..6f737a90173 --- /dev/null +++ b/var/spack/repos/builtin/packages/libglvnd-fe/package.py @@ -0,0 +1,56 @@ +# 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 LibglvndFe(BundlePackage): + """The GL Vendor-Neutral Dispatch library (Frontend Dummy Package) + + libglvnd is a vendor-neutral dispatch layer for arbitrating OpenGL API + calls between multiple vendors. It allows multiple drivers from different + vendors to coexist on the same filesystem, and determines which vendor to + dispatch each API call to at runtime. + + Both GLX and EGL are supported, in any combination with OpenGL and OpenGL + ES.""" + + homepage = "https://github.com/NVIDIA/libglvnd" + + version('1.1.1', sha256='71918ed1261e4eece18c0b74b50dc62c0237b8d526e83277ef078554544720b9') + + variant('glx', default=False, description='Provide GLX API') + variant('egl', default=False, description='Provide EGL API') + + depends_on('libglvnd') + + depends_on('libglvnd-be-gl') + depends_on('libglvnd-be-glx', when='+glx') + depends_on('libglvnd-be-egl', when='+egl') + + provides('gl') + provides('glx', when='+glx') + provides('egl', when='+egl') + + @property + def gl_libs(self): + return find_libraries('libOpenGL', + root=self.spec['libglvnd'].prefix, + shared=True, + recursive=True) + + @property + def glx_libs(self): + return find_libraries('libGLX', + root=self.spec['libglvnd'].prefix, + shared=True, + recursive=True) + + @property + def egl_libs(self): + return find_libraries('libEGL', + root=self.spec['libglvnd'].prefix, + shared=True, + recursive=True) diff --git a/var/spack/repos/builtin/packages/mesa/package.py b/var/spack/repos/builtin/packages/mesa/package.py index b277a03d194..94b352d8e2e 100644 --- a/var/spack/repos/builtin/packages/mesa/package.py +++ b/var/spack/repos/builtin/packages/mesa/package.py @@ -65,9 +65,13 @@ class Mesa(AutotoolsPackage): variant('opengles', default=False, description="Enable OpenGL ES support.") # Provides - provides('gl@4.5', when='+opengl') - provides('glx@1.4', when='+glx') - # provides('egl@1.5', when='+egl') + provides('gl@4.5', when='+opengl ~glvnd') + provides('glx@1.4', when='+glx ~glvnd') + # provides('egl@1.5', when='+egl ~glvnd') + + provides('libglvnd-be-gl', when='+glvnd') + provides('libglvnd-be-glx', when='+glvnd +glx') + # provides('libglvnd-be-egl', when='+glvnd +egl') # Variant dependencies depends_on('llvm@6:', when='+llvm') @@ -179,10 +183,32 @@ def configure_args(self): return args @property - def libs(self): - for dir in ['lib64', 'lib']: - libs = find_libraries(['libGL', 'libOSMesa'], - join_path(self.prefix, dir), - shared=True, recursive=False) - if libs: - return libs + def gl_libs(self): + result = LibraryList(()) + + if '~glvnd' in self.spec: + result.extend(find_libraries('libGL', + root=self.spec.prefix, + shared='+shared' in self.spec, + recursive=True)) + return result + + @property + def glx_libs(self): + result = LibraryList(()) + + if '~glvnd' in self.spec: + result.extend(find_libraries('libGLX', + root=self.spec.prefix, + shared='+shared' in self.spec, + recursive=True)) + return result + + def setup_run_environment(self, env): + if '+glx +glvnd' in self.spec: + env.set('__GLX_VENDOR_LIBRARY_NAME', 'mesa') + + if '+egl +glvnd' in self.spec: + env.set('__EGL_VENDOR_LIBRARY_FILENAMES', ':'.join(( + os.path.join(self.spec.prefix, 'share', 'glvnd', + 'egl_vendor.d', '50_mesa.json')))) diff --git a/var/spack/repos/builtin/packages/opengl/package.py b/var/spack/repos/builtin/packages/opengl/package.py index 413b8e0f453..572fc04845a 100644 --- a/var/spack/repos/builtin/packages/opengl/package.py +++ b/var/spack/repos/builtin/packages/opengl/package.py @@ -13,7 +13,14 @@ class Opengl(Package): homepage = "https://www.opengl.org/" - provides('gl') + variant('glvnd', + default=False, + description="Expose Graphics APIs through libglvnd") + + variant('glx', default=True, description="Enable GLX API.") + variant('egl', default=False, description="Enable EGL API.") + + provides('gl', when='~glvnd') provides('gl@:4.5', when='@4.5:') provides('gl@:4.4', when='@4.4:') provides('gl@:4.3', when='@4.3:') @@ -33,7 +40,19 @@ class Opengl(Package): provides('gl@:1.0', when='@1.0:') if sys.platform != 'darwin': - provides('glx@1.4') + provides('glx@1.4', when='~glvnd +glx') + + # NOTE: This package should have a dependency on libglvnd, but because it + # is exclusively provided externally the dependency is never traversed. + # depends_on('libglvnd', when='+glvnd') # don't uncomment this + + provides('libglvnd-be-gl', when='+glvnd') + provides('libglvnd-be-glx', when='+glvnd +glx') + provides('libglvnd-be-egl', when='+glvnd +egl') + + provides('egl@1.5', when='~glvnd +egl') + + depends_on('libglvnd', when='+glvnd') # Override the fetcher method to throw a useful error message; # fixes GitHub issue (#7061) in which this package threw a @@ -80,8 +99,25 @@ def fetcher(self): @property def libs(self): + result = LibraryList(()) + + # "libs" provided by glvnd; this package sets the environment variables + # so that glvnd, in turn, loads this package's libraries at run-time. + if '+glvnd' in self.spec: + return result + for dir in ['lib64', 'lib']: libs = find_libraries('libGL', join_path(self.prefix, dir), shared=True, recursive=False) if libs: - return libs + result.extend(libs) + break + + if '+egl' in self.spec: + for dir in ['lib64', 'lib']: + libs = find_libraries('libEGL', join_path(self.prefix, dir), + shared=True, recursive=False) + if libs: + result.extend(libs) + break + return result diff --git a/var/spack/repos/builtin/packages/paraview/package.py b/var/spack/repos/builtin/packages/paraview/package.py index bb8b140b748..f5195dc2bb4 100644 --- a/var/spack/repos/builtin/packages/paraview/package.py +++ b/var/spack/repos/builtin/packages/paraview/package.py @@ -49,6 +49,7 @@ class Paraview(CMakePackage, CudaPackage): description='Builds a shared version of the library') variant('kits', default=True, description='Use module kits') + variant('egl', default=False, description="Enable EGL") conflicts('+python', when='+python3') conflicts('+python', when='@5.6:') @@ -58,6 +59,9 @@ class Paraview(CMakePackage, CudaPackage): # See commit: https://gitlab.kitware.com/paraview/paraview/-/commit/798d328c conflicts('~opengl2', when='@5.5:') + conflicts('+egl', when='+osmesa') + conflicts('+egl', when='+qt') + # Workaround for # adding the following to your packages.yaml # packages: @@ -89,6 +93,10 @@ class Paraview(CMakePackage, CudaPackage): depends_on('mesa+osmesa', when='+osmesa') depends_on('gl@3.2:', when='+opengl2') depends_on('gl@1.2:', when='~opengl2') + + depends_on('glx', when='~osmesa platform=linux') + depends_on('egl', when='+egl') + depends_on('libxt', when='~osmesa platform=linux') conflicts('+qt', when='+osmesa') @@ -208,7 +216,9 @@ def nvariant_bool(feature): cmake_args = [ '-DPARAVIEW_BUILD_QT_GUI:BOOL=%s' % variant_bool('+qt'), '-DVTK_OPENGL_HAS_OSMESA:BOOL=%s' % variant_bool('+osmesa'), - '-DVTK_USE_X:BOOL=%s' % nvariant_bool('+osmesa'), + '-DVTK_OPENGL_HAS_EGL:BOOL=%s' % variant_bool('+egl'), + ('-DVTK_USE_X:BOOL=%s' % + variant_bool('~osmesa ~egl platform=linux')), '-DVTK_RENDERING_BACKEND:STRING=%s' % rendering, '-DPARAVIEW_INSTALL_DEVELOPMENT_FILES:BOOL=%s' % includes, '-DBUILD_TESTING:BOOL=OFF', @@ -272,7 +282,6 @@ def nvariant_bool(feature): if 'darwin' in spec.architecture: cmake_args.extend([ - '-DVTK_USE_X:BOOL=OFF', '-DPARAVIEW_DO_UNIX_STYLE_INSTALLS:BOOL=ON', ]) From b3b5ea4064cf274b45295193a2eccc8451f3a336 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Mon, 13 Jul 2020 17:47:06 +0200 Subject: [PATCH 107/149] updated sha256 for openfoam-1806 patch (#17483) - perhaps related to gitlab migration and/or upgrade (Dec 2019) Co-authored-by: Mark Olesen --- var/spack/repos/builtin/packages/openfoam/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/openfoam/package.py b/var/spack/repos/builtin/packages/openfoam/package.py index 275af6045f6..d347c61cfa9 100644 --- a/var/spack/repos/builtin/packages/openfoam/package.py +++ b/var/spack/repos/builtin/packages/openfoam/package.py @@ -349,7 +349,7 @@ class Openfoam(Package): # kahip patch (wmake) patch('https://develop.openfoam.com/Development/openfoam/commit/8831dfc58b0295d0d301a78341dd6f4599073d45.patch', when='@1806', - sha256='21f1ab68c82dfa41ed1a4439427c94c43ddda02c84175c30da623d905d3e5d61' + sha256='531146be868dd0cda70c1cf12a22110a38a30fd93b5ada6234be3d6c9256c6cf' ) # Some user config settings From 815f62ce0cc202cbf2c32e6aaf447a171f1a0a46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Lacroix?= Date: Mon, 13 Jul 2020 17:49:17 +0200 Subject: [PATCH 108/149] Update gdk-pixbuf package. (#17458) * gdk-pixbuf: Add new stable versions. * gdk-pixbuf: Add a missing dependency with libx11. Also add a variant disabled by default to make it optional since it is considered deprecated (cf. https://github.com/GNOME/gdk-pixbuf/commit/3362e94c2595440f322798dc4d15f1ed24a4c52c). --- .../repos/builtin/packages/gdk-pixbuf/package.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/var/spack/repos/builtin/packages/gdk-pixbuf/package.py b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py index 04fd4d60309..585bd2de815 100644 --- a/var/spack/repos/builtin/packages/gdk-pixbuf/package.py +++ b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py @@ -14,13 +14,17 @@ class GdkPixbuf(Package): preparation for the change to GTK+ 3.""" homepage = "https://developer.gnome.org/gdk-pixbuf/" - url = "https://ftp.acc.umu.se/pub/gnome/sources/gdk-pixbuf/2.38/gdk-pixbuf-2.38.0.tar.xz" + url = "https://ftp.acc.umu.se/pub/gnome/sources/gdk-pixbuf/2.40/gdk-pixbuf-2.40.0.tar.xz" list_url = "https://ftp.acc.umu.se/pub/gnome/sources/gdk-pixbuf/" list_depth = 1 + version('2.40.0', sha256='1582595099537ca8ff3b99c6804350b4c058bb8ad67411bbaae024ee7cead4e6') + version('2.38.2', sha256='73fa651ec0d89d73dd3070b129ce2203a66171dfc0bd2caa3570a9c93d2d0781') version('2.38.0', sha256='dd50973c7757bcde15de6bcd3a6d462a445efd552604ae6435a0532fbbadae47') version('2.31.2', sha256='9e467ed09894c802499fb2399cd9a89ed21c81700ce8f27f970a833efb1e47aa') + variant('x11', default=False, description="Enable X11 support") + depends_on('meson@0.46.0:', type='build', when='@2.37.92:') depends_on('meson@0.45.0:', type='build', when='@2.37.0:') depends_on('ninja', type='build', when='@2.37.0:') @@ -37,6 +41,7 @@ class GdkPixbuf(Package): depends_on('zlib') depends_on('libtiff') depends_on('gobject-introspection') + depends_on('libx11', when='+x11') # Replace the docbook stylesheet URL with the one that our # docbook-xsl package uses/recognizes. @@ -54,7 +59,9 @@ def setup_dependent_run_environment(self, env, dependent_spec): def install(self, spec, prefix): with working_dir('spack-build', create=True): - meson('..', *std_meson_args) + meson_args = std_meson_args + meson_args += ['-Dx11={0}'.format('+x11' in spec)] + meson('..', *meson_args) ninja('-v') if self.run_tests: ninja('test') From 4fa519134f006501d6fa19bc1a3520865ee21f85 Mon Sep 17 00:00:00 2001 From: darmac Date: Mon, 13 Jul 2020 23:52:23 +0800 Subject: [PATCH 109/149] bwa: support for aarch64 (#17473) * bwa: support for aarch64 * bwa: fix build error for non-aarch64 machine --- .../builtin/packages/bwa/bwa_for_aarch64.patch | 13 +++++++++++++ var/spack/repos/builtin/packages/bwa/package.py | 15 +++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 var/spack/repos/builtin/packages/bwa/bwa_for_aarch64.patch diff --git a/var/spack/repos/builtin/packages/bwa/bwa_for_aarch64.patch b/var/spack/repos/builtin/packages/bwa/bwa_for_aarch64.patch new file mode 100644 index 00000000000..2bebcb5023b --- /dev/null +++ b/var/spack/repos/builtin/packages/bwa/bwa_for_aarch64.patch @@ -0,0 +1,13 @@ +diff --git a/ksw.c b/ksw.c +index 9793e5e..2eecef4 100644 +--- a/ksw.c ++++ b/ksw.c +@@ -26,7 +26,7 @@ + #include + #include + #include +-#include ++#include + #include "ksw.h" + + #ifdef USE_MALLOC_WRAPPERS diff --git a/var/spack/repos/builtin/packages/bwa/package.py b/var/spack/repos/builtin/packages/bwa/package.py index 8447f7848f2..5f2d3ff1789 100644 --- a/var/spack/repos/builtin/packages/bwa/package.py +++ b/var/spack/repos/builtin/packages/bwa/package.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) from spack import * +import platform class Bwa(Package): @@ -19,10 +20,20 @@ class Bwa(Package): url='https://github.com/lh3/bwa/archive/0.7.12.tar.gz') depends_on('zlib') + depends_on('sse2neon', when='target=aarch64:') + + patch('bwa_for_aarch64.patch', sha256='b77213b16cf8760f01e32f9a0b2cd8988cf7bac48a11267100f703cbd55c4bfd', when='target=aarch64:') def install(self, spec, prefix): - filter_file(r'^INCLUDES=', - "INCLUDES=-I%s" % spec['zlib'].prefix.include, 'Makefile') + zlib_inc_path = spec['zlib'].prefix.include + if platform.machine() == 'aarch64': + sse2neon_inc_path = spec['sse2neon'].prefix.include + filter_file(r'^INCLUDES=', "INCLUDES=-I%s -I%s" % + (zlib_inc_path, sse2neon_inc_path), + 'Makefile') + else: + filter_file(r'^INCLUDES=', "INCLUDES=-I%s" % + zlib_inc_path, 'Makefile') filter_file(r'^LIBS=', "LIBS=-L%s " % spec['zlib'].prefix.lib, 'Makefile') make() From 45eaa442c3efd4da55bfe9f9b98947646395f815 Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Mon, 13 Jul 2020 14:26:39 -0600 Subject: [PATCH 110/149] Global (package): add version 6.6.4 (#17508) --- var/spack/repos/builtin/packages/global/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/global/package.py b/var/spack/repos/builtin/packages/global/package.py index 7a252e7add7..5ad3d725201 100644 --- a/var/spack/repos/builtin/packages/global/package.py +++ b/var/spack/repos/builtin/packages/global/package.py @@ -13,6 +13,7 @@ class Global(Package): homepage = "http://www.gnu.org/software/global" url = "http://tamacom.com/global/global-6.5.tar.gz" + version('6.6.4', sha256='987e8cb956c53f8ebe4453b778a8fde2037b982613aba7f3e8e74bcd05312594') version('6.5', sha256='4afd12db1aa600277b39113cc2d61dc59bd6c6b4ee8033da8bb6dd0c39a4c6a9') depends_on('exuberant-ctags', type=('build', 'run')) From 44503777940d81a2ba9d16fdff97e00dab28d0e7 Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Mon, 13 Jul 2020 14:27:28 -0600 Subject: [PATCH 111/149] gnutls: add version 3.6.14 (#17507) --- var/spack/repos/builtin/packages/gnutls/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/gnutls/package.py b/var/spack/repos/builtin/packages/gnutls/package.py index aa9c863499e..4d56fab7fe4 100644 --- a/var/spack/repos/builtin/packages/gnutls/package.py +++ b/var/spack/repos/builtin/packages/gnutls/package.py @@ -17,6 +17,7 @@ class Gnutls(AutotoolsPackage): homepage = "http://www.gnutls.org" url = "https://www.gnupg.org/ftp/gcrypt/gnutls/v3.5/gnutls-3.5.19.tar.xz" + version('3.6.14', sha256='5630751adec7025b8ef955af4d141d00d252a985769f51b4059e5affa3d39d63') version('3.6.8', sha256='aa81944e5635de981171772857e72be231a7e0f559ae0292d2737de475383e83') version('3.6.7.1', sha256='881b26409ecd8ea4c514fd3fbdb6fae5fab422ca7b71116260e263940a4bbbad') version('3.5.19', sha256='1936eb64f03aaefd6eb16cef0567457777618573826b94d03376bb6a4afadc44') From ab5f28aceba9a287f99c971a3f46890b17a41a5a Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Mon, 13 Jul 2020 14:28:18 -0600 Subject: [PATCH 112/149] stow (package): add version 2.3.1 (#17506) --- var/spack/repos/builtin/packages/stow/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/stow/package.py b/var/spack/repos/builtin/packages/stow/package.py index bc3515407d8..2ce4c91b3e9 100644 --- a/var/spack/repos/builtin/packages/stow/package.py +++ b/var/spack/repos/builtin/packages/stow/package.py @@ -17,6 +17,7 @@ class Stow(AutotoolsPackage, GNUMirrorPackage): homepage = "https://www.gnu.org/software/stow/" gnu_mirror_path = "stow/stow-2.2.2.tar.bz2" + version('2.3.1', sha256='26a6cfdfdaca0eea742db5487798c15fcd01889dc86bc5aa62614ec9415a422f') version('2.2.2', sha256='a0022034960e47a8d23dffb822689f061f7a2d9101c9835cf11bf251597aa6fd') version('2.2.0', sha256='86bc30fe1d322a5c80ff3bd7580c2758149aad7c3bbfa18b48a9d95c25d66b05') version('2.1.3', sha256='2dff605c801fee9fb7d0fef6988bbb8a0511fad469129b20cae60e0544ba1443') From 7d1f2abd565c3a7d228f2e5446510e6ee0d21b0f Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Mon, 13 Jul 2020 14:28:58 -0600 Subject: [PATCH 113/149] screen (package): add version 4.8.0 (#17505) --- var/spack/repos/builtin/packages/screen/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/screen/package.py b/var/spack/repos/builtin/packages/screen/package.py index d68164b4d44..e2ac6fc7d9a 100644 --- a/var/spack/repos/builtin/packages/screen/package.py +++ b/var/spack/repos/builtin/packages/screen/package.py @@ -14,6 +14,7 @@ class Screen(AutotoolsPackage, GNUMirrorPackage): homepage = "https://www.gnu.org/software/screen/" gnu_mirror_path = "screen/screen-4.3.1.tar.gz" + version('4.8.0', sha256='6e11b13d8489925fde25dfb0935bf6ed71f9eb47eff233a181e078fde5655aa1') version('4.6.2', sha256='1b6922520e6a0ce5e28768d620b0f640a6631397f95ccb043b70b91bb503fa3a') version('4.3.1', sha256='fa4049f8aee283de62e283d427f2cfd35d6c369b40f7f45f947dbfd915699d63') version('4.3.0', sha256='5164e89bcc60d7193177e6e02885cc42411d1d815c839e174fb9abafb9658c46') From 929cb9e62e7cfccf66197625c53956529ab3666b Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Mon, 13 Jul 2020 14:31:37 -0600 Subject: [PATCH 114/149] vim (package): add version 8.2.1201 (#17503) --- var/spack/repos/builtin/packages/vim/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/vim/package.py b/var/spack/repos/builtin/packages/vim/package.py index 5539adfc025..d1533cfe523 100644 --- a/var/spack/repos/builtin/packages/vim/package.py +++ b/var/spack/repos/builtin/packages/vim/package.py @@ -18,6 +18,7 @@ class Vim(AutotoolsPackage): homepage = "http://www.vim.org" url = "https://github.com/vim/vim/archive/v8.1.0338.tar.gz" + version('8.2.1201', sha256='39032fe866f44724b104468038dc9ac4ff2c00a4b18c9a1e2c27064ab1f1143d') version('8.1.2141', sha256='7be3c3d88a6c871121230ffb9b7371b1d2ab462118dedb967c7265473af1144b') version('8.1.0338', sha256='3febcc4e49eaca458be1a1e8055a3a52887aa2054b03e24d5f38d192c3de51a0') version('8.1.0001', sha256='c342acaa26589f371fa34a5ca213b95811f26185c12443f8f48ad2868dee2935') From 05e89180769f83165c6ccfe47d1b0743ef84a9d0 Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Mon, 13 Jul 2020 14:42:42 -0600 Subject: [PATCH 115/149] curl (package): add version 7.71.0 (#17493) --- var/spack/repos/builtin/packages/curl/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/curl/package.py b/var/spack/repos/builtin/packages/curl/package.py index e0e964893f9..6d30d23b42f 100644 --- a/var/spack/repos/builtin/packages/curl/package.py +++ b/var/spack/repos/builtin/packages/curl/package.py @@ -15,6 +15,7 @@ class Curl(AutotoolsPackage): # URL must remain http:// so Spack can bootstrap curl url = "http://curl.haxx.se/download/curl-7.60.0.tar.bz2" + version('7.71.0', sha256='600f00ac2481a89548a4141ddf983fd9386165e1960bac91d0a1c81dca5dd341') version('7.68.0', sha256='207f54917dd6a2dc733065ccf18d61bb5bebeaceb5df49cd9445483e8623eeb9') version('7.63.0', sha256='9bab7ed4ecff77020a312d84cc5fb7eb02d58419d218f267477a724a17fd8dd8') version('7.60.0', sha256='897dfb2204bd99be328279f88f55b7c61592216b0542fcbe995c60aa92871e9b') From c84a05b8092216994ad4939604e08dafe9d26a91 Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Mon, 13 Jul 2020 14:44:37 -0600 Subject: [PATCH 116/149] bison (package): add versions including 3.6.4 and 3.5.3 (#17492) --- var/spack/repos/builtin/packages/bison/package.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/bison/package.py b/var/spack/repos/builtin/packages/bison/package.py index 0a51dd583e0..6fe36efed90 100644 --- a/var/spack/repos/builtin/packages/bison/package.py +++ b/var/spack/repos/builtin/packages/bison/package.py @@ -14,8 +14,17 @@ class Bison(AutotoolsPackage, GNUMirrorPackage): generalized LR (GLR) parser employing LALR(1) parser tables.""" homepage = "https://www.gnu.org/software/bison/" - gnu_mirror_path = "bison/bison-3.4.2.tar.gz" + gnu_mirror_path = "bison/bison-3.6.4.tar.gz" + version('3.6.4', sha256='8183de64b5383f3634942c7b151bf2577f74273b2731574cdda8a8f3a0ab13e9') + version('3.6.3', sha256='4b4c4943931e811f1073006ce3d8ee022a02b11b501e9cbf4def3613b24a3e63') + version('3.6.2', sha256='e28ed3aad934de2d1df68be209ac0b454f7b6d3c3d6d01126e5cd2cbadba089a') + version('3.6.1', sha256='1120f8bfe2cc13e5e1e3f671dc41b1a535ca5a75a70d5b349c19da9d4389f74d') + version('3.6', sha256='f630645e330bde5847266cc5c8194f0135ced75cced150358d9abe572b95f81c') + version('3.5.3', sha256='34e201d963156618a0ea5bc87220f660a1e08403dd3c7c7903d4f38db3f40039') + version('3.5.2', sha256='b4dbb6dd080f4db7f344f16506502973ca2b15f15c7dbbd1c1c278a456d094fa') + version('3.5.1', sha256='4cef2322d96751be1c0d04f3e57adbb30e7fea83af9c00f98efa6e7509296f25') + version('3.5', sha256='0b36200b9868ee289b78cefd1199496b02b76899bbb7e84ff1c0733a991313d1') version('3.4.2', sha256='ff3922af377d514eca302a6662d470e857bd1a591e96a2050500df5a9d59facf') version('3.4.1', sha256='7007fc89c216fbfaff5525359b02a7e5b612694df5168c74673f67055f015095') version('3.3.2', sha256='0fda1d034185397430eb7b0c9e140fb37e02fbfc53b90252fa5575e382b6dbd1') From fae57d14222fbf7c2d4c1b9dd769b7143d0ac49a Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Mon, 13 Jul 2020 14:45:37 -0600 Subject: [PATCH 117/149] cppcheck (package): add version 2.1 (#17491) --- var/spack/repos/builtin/packages/cppcheck/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/cppcheck/package.py b/var/spack/repos/builtin/packages/cppcheck/package.py index fc943e9517d..7d00ca49698 100644 --- a/var/spack/repos/builtin/packages/cppcheck/package.py +++ b/var/spack/repos/builtin/packages/cppcheck/package.py @@ -11,6 +11,7 @@ class Cppcheck(MakefilePackage): homepage = "http://cppcheck.sourceforge.net/" url = "https://downloads.sourceforge.net/project/cppcheck/cppcheck/1.78/cppcheck-1.78.tar.bz2" + version('2.1', sha256='ab26eeef039e5b58aac01efb8cb664f2cc16bf9879c61bc93cd00c95be89a5f7') version('1.87', sha256='e3b0a46747822471df275417d4b74b56ecac88367433e7428f39288a32c581ca') version('1.81', sha256='bb694f37ae0b5fed48c6cdc2fb5e528daf32cefc64e16b1a520c5411323cf27e') version('1.78', sha256='e42696f7d6321b98cb479ad9728d051effe543b26aca8102428f60b9850786b1') From d2ac26f8448ed05d742c40fab2395c4df4771b93 Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Mon, 13 Jul 2020 14:46:27 -0600 Subject: [PATCH 118/149] gdb (package): add version 9.2 (#17490) --- var/spack/repos/builtin/packages/gdb/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/gdb/package.py b/var/spack/repos/builtin/packages/gdb/package.py index e6aef7d6719..bef6540a309 100644 --- a/var/spack/repos/builtin/packages/gdb/package.py +++ b/var/spack/repos/builtin/packages/gdb/package.py @@ -15,6 +15,7 @@ class Gdb(AutotoolsPackage, GNUMirrorPackage): homepage = "https://www.gnu.org/software/gdb" gnu_mirror_path = "gdb/gdb-7.10.tar.gz" + version('9.2', sha256='38ef247d41ba7cc3f6f93a612a78bab9484de9accecbe3b0150a3c0391a3faf0') version('9.1', sha256='fcda54d4f35bc53fb24b50009a71ca98410d71ff2620942e3c829a7f5d614252') version('8.3.1', sha256='26ce655216cd03f4611518a7a1c31d80ec8e884c16715e9ba8b436822e51434b') version('8.3', sha256='b2266ec592440d0eec18ee1790f8558b3b8a2845b76cc83a872e39b501ce8a28') From e0f13b298df11659d2be058cdb641d6cc670a87b Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Mon, 13 Jul 2020 14:56:33 -0600 Subject: [PATCH 119/149] tmux (package): add version 3.1b (#17486) --- var/spack/repos/builtin/packages/tmux/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/tmux/package.py b/var/spack/repos/builtin/packages/tmux/package.py index e6677668fd4..8a50e2ebe91 100644 --- a/var/spack/repos/builtin/packages/tmux/package.py +++ b/var/spack/repos/builtin/packages/tmux/package.py @@ -17,6 +17,7 @@ class Tmux(AutotoolsPackage): homepage = "http://tmux.github.io" url = "https://github.com/tmux/tmux/releases/download/2.6/tmux-2.6.tar.gz" + version('3.1b', sha256='d93f351d50af05a75fe6681085670c786d9504a5da2608e481c47cf5e1486db9') version('3.0a', sha256='4ad1df28b4afa969e59c08061b45082fdc49ff512f30fc8e43217d7b0e5f8db9') version('2.9', sha256='34901232f486fd99f3a39e864575e658b5d49f43289ccc6ee57c365f2e2c2980') version('2.8', sha256='7f6bf335634fafecff878d78de389562ea7f73a7367f268b66d37ea13617a2ba') From 299dcdd3ebee5e47cc649f879bca7a75558febc9 Mon Sep 17 00:00:00 2001 From: Cyrus Harrison Date: Mon, 13 Jul 2020 14:55:38 -0700 Subject: [PATCH 120/149] update vtk-h package with new version and options (#17499) --- .../repos/builtin/packages/vtk-h/package.py | 44 ++++++++++++++----- .../vtk-h/vtkm_lagrange_cuda_fix.patch | 16 ------- 2 files changed, 34 insertions(+), 26 deletions(-) delete mode 100644 var/spack/repos/builtin/packages/vtk-h/vtkm_lagrange_cuda_fix.patch diff --git a/var/spack/repos/builtin/packages/vtk-h/package.py b/var/spack/repos/builtin/packages/vtk-h/package.py index 2a934a442af..9ed842b508d 100644 --- a/var/spack/repos/builtin/packages/vtk-h/package.py +++ b/var/spack/repos/builtin/packages/vtk-h/package.py @@ -34,13 +34,20 @@ class VtkH(Package, CudaPackage): and DIY2 to provide a toolkit with hybrid parallel capabilities.""" homepage = "https://github.com/Alpine-DAV/vtk-h" - url = "https://github.com/Alpine-DAV/vtk-h/releases/download/v0.5.0/vtkh-v0.5.0.tar.gz" + url = "https://github.com/Alpine-DAV/vtk-h/releases/download/v0.5.8/vtkh-v0.5.8.tar.gz" git = "https://github.com/Alpine-DAV/vtk-h.git" maintainers = ['cyrush'] version('develop', branch='develop', submodules=True) - version('0.5.0', sha256="9014a8a61a8d7ff636866c6e3b1ebb918ff23fa67cf8d4de801c4a2981de8c96") + version('0.6.1', sha256="ca30b5ff1a48fa247cd20b3f19452f7744eb744465e0b64205135aece42d274f") + version('0.6.0', sha256="2fc054f88ae253fb1bfcae22a156bcced08eca963ba90384dcd5b5791e6dfbf4") + version('0.5.8', sha256="203b337f4280a24a2b75722384f77e0e2f5965058b541efc153db76b7ab98133") + version('0.5.7', sha256="e8c1925dc34ee6be17cec734121e43002e3c02b54ef8dac341b51a455b95e402") + version('0.5.6', sha256="c78c0fa71a9687c2951a06d2112b52aa81fdcdcfbc9464d1578326d03fbb205e") + version('0.5.4', sha256="92bf3741df7a15e36ff41a9a783f3b88eecc86e55cad1defba76f141baa2610b") + version('0.5.3', sha256="0c4aae3bd2a5906738a6806de2b62ea2049ac8b40ebe7fc2ba25505272c2d359") + version('0.5.2', sha256="db2e6250c0ece6381fc90540317ad7b5869dbcce0231ce9be125916a77bfdb25") variant("shared", default=True, description="Build vtk-h as shared libs") variant("mpi", default=True, description="build mpi support") @@ -48,6 +55,8 @@ class VtkH(Package, CudaPackage): variant("cuda", default=False, description="build cuda support") variant("openmp", default=(sys.platform != 'darwin'), description="build openmp support") + variant("logging", default=False, description="Build vtk-h with logging enabled") + variant("contourtree", default=False, description="Enable contour tree support") # use cmake 3.14, newest that provides proper cuda support # and we have seen errors with cuda in 3.15 @@ -56,17 +65,17 @@ class VtkH(Package, CudaPackage): depends_on("mpi", when="+mpi") depends_on("cuda", when="+cuda") - depends_on("vtk-m@1.5.0~tbb+openmp", when="+openmp") - depends_on("vtk-m@1.5.0~tbb~openmp", when="~openmp") + depends_on("vtk-m@ascent_ver~tbb+openmp", when="+openmp") + depends_on("vtk-m@ascent_ver~tbb~openmp", when="~openmp") - depends_on("vtk-m@1.5.0+cuda~tbb+openmp", when="+cuda+openmp") - depends_on("vtk-m@1.5.0+cuda~tbb~openmp", when="+cuda~openmp") + depends_on("vtk-m@ascent_ver+cuda~tbb+openmp", when="+cuda+openmp") + depends_on("vtk-m@ascent_ver+cuda~tbb~openmp", when="+cuda~openmp") - depends_on("vtk-m@1.5.0~tbb+openmp~shared", when="+openmp~shared") - depends_on("vtk-m@1.5.0~tbb~openmp~shared", when="~openmp~shared") + depends_on("vtk-m@ascent_ver~tbb+openmp~shared", when="+openmp~shared") + depends_on("vtk-m@ascent_ver~tbb~openmp~shared", when="~openmp~shared") - depends_on("vtk-m@1.5.0+cuda~tbb+openmp~shared", when="+cuda+openmp~shared") - depends_on("vtk-m@1.5.0+cuda~tbb~openmp~shared", when="+cuda~openmp~shared") + depends_on("vtk-m@ascent_ver+cuda~tbb+openmp~shared", when="+cuda+openmp~shared") + depends_on("vtk-m@ascent_ver+cuda~tbb~openmp~shared", when="+cuda~openmp~shared") def install(self, spec, prefix): with working_dir('spack-build', create=True): @@ -99,6 +108,13 @@ def install(self, spec, prefix): if "+openmp" in spec: cmake_args.append("-DENABLE_OPENMP=ON") + # build with logging + if "+logging" in spec: + cmake_args.append("-DENABLE_LOGGING=ON") + + if "+contourtree" in spec: + cmake_args.append("-DENABLE_FILTER_CONTOUR_TREE=ON") + # cuda support if "+cuda" in spec: cmake_args.append("-DVTKm_ENABLE_CUDA:BOOL=ON") @@ -215,6 +231,14 @@ def create_host_config(self, spec, prefix, py_site_pkgs_dir=None): else: cfg.write(cmake_cache_entry("ENABLE_SERIAL", "OFF")) + ####################### + # Logging + ####################### + if "+logging" in spec: + cfg.write(cmake_cache_entry("ENABLE_LOGGING", "ON")) + else: + cfg.write(cmake_cache_entry("ENABLE_LOGGING", "OFF")) + ####################### # MPI ####################### diff --git a/var/spack/repos/builtin/packages/vtk-h/vtkm_lagrange_cuda_fix.patch b/var/spack/repos/builtin/packages/vtk-h/vtkm_lagrange_cuda_fix.patch deleted file mode 100644 index 2f90477e763..00000000000 --- a/var/spack/repos/builtin/packages/vtk-h/vtkm_lagrange_cuda_fix.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/src/vtkh/filters/CMakeLists.txt b/src/vtkh/filters/CMakeLists.txt -index 4a42d61..f586155 100644 ---- a/src/vtkh/filters/CMakeLists.txt -+++ b/src/vtkh/filters/CMakeLists.txt -@@ -41,6 +41,11 @@ set(vtkh_filters_deps vtkh_core vtkh_utils ) - if(CUDA_FOUND) - # triggers cuda compile - list(APPEND vtkh_filters_deps cuda) -+ -+ if(CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 10.0.0) -+ set(particle_cuda_src "${CMAKE_CURRENT_SOURCE_DIR}/Lagrangian.cpp") -+ set_source_files_properties(${particle_cuda_src} PROPERTIES COMPILE_FLAGS "-Xptxas --opt-level=0") -+ endif() - endif() - - From c2d8d8acbd22792e40cb734bb6d04ce333548dd1 Mon Sep 17 00:00:00 2001 From: Cyrus Harrison Date: Mon, 13 Jul 2020 14:56:45 -0700 Subject: [PATCH 121/149] update vtk-m with pinned version for ascent and related packages (#17498) * add ascent_ver to vtk-m pkg * vtk-m:: add patches used by ascent --- .../packages/vtk-m/disable_flying_edges.patch | 14 ++++++++++++++ var/spack/repos/builtin/packages/vtk-m/package.py | 6 +++++- .../builtin/packages/vtk-m/vtkmdiy_fpic.patch | 12 ++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 var/spack/repos/builtin/packages/vtk-m/disable_flying_edges.patch create mode 100644 var/spack/repos/builtin/packages/vtk-m/vtkmdiy_fpic.patch diff --git a/var/spack/repos/builtin/packages/vtk-m/disable_flying_edges.patch b/var/spack/repos/builtin/packages/vtk-m/disable_flying_edges.patch new file mode 100644 index 00000000000..9b875ce5e07 --- /dev/null +++ b/var/spack/repos/builtin/packages/vtk-m/disable_flying_edges.patch @@ -0,0 +1,14 @@ +diff --git a/vtkm/worklet/Contour.h b/vtkm/worklet/Contour.h +index c28c5ec09..70737777f 100644 +--- a/vtkm/worklet/Contour.h ++++ b/vtkm/worklet/Contour.h +@@ -46,7 +46,8 @@ struct DeduceCoordType + vtkm::cont::CellSetSingleType<>& result, + Args&&... args) const + { +- result = flying_edges::execute(cells, coords, std::forward(args)...); ++ result = marching_cells::execute(cells, coords, std::forward(args)...); ++ //result = flying_edges::execute(cells, coords, std::forward(args)...); + } + }; + diff --git a/var/spack/repos/builtin/packages/vtk-m/package.py b/var/spack/repos/builtin/packages/vtk-m/package.py index 5fd77da94dd..68ee6ff6983 100644 --- a/var/spack/repos/builtin/packages/vtk-m/package.py +++ b/var/spack/repos/builtin/packages/vtk-m/package.py @@ -30,7 +30,11 @@ class VtkM(CMakePackage, CudaPackage): version('1.3.0', sha256="f88c1b0a1980f695240eeed9bcccfa420cc089e631dc2917c9728a2eb906df2e") version('1.2.0', sha256="607272992e05f8398d196f0acdcb4af025a4a96cd4f66614c6341f31d4561763") version('1.1.0', sha256="78618c81ca741b1fbba0853cb5d7af12c51973b514c268fc96dfb36b853cdb18") - + # version used by ascent + version('ascent_ver', commit="a3b8525ef97d94996ae843db0dd4f675c38e8b1e") + # patches, required for ascent + patch('vtkmdiy_fpic.patch', when='@ascent_ver') + patch('disable_flying_edges.patch', when='@ascent_ver') # use release, instead of release with debug symbols b/c vtkm libs # can overwhelm compilers with too many symbols variant('build_type', default='Release', description='CMake build type', diff --git a/var/spack/repos/builtin/packages/vtk-m/vtkmdiy_fpic.patch b/var/spack/repos/builtin/packages/vtk-m/vtkmdiy_fpic.patch new file mode 100644 index 00000000000..765efe1c58b --- /dev/null +++ b/var/spack/repos/builtin/packages/vtk-m/vtkmdiy_fpic.patch @@ -0,0 +1,12 @@ +diff --git a/vtkm/thirdparty/diy/vtkmdiy/CMakeLists.txt b/vtkm/thirdparty/diy/vtkmdiy/CMakeLists.txt +index 5211330..3e991f3 100644 +--- a/vtkm/thirdparty/diy/vtkmdiy/CMakeLists.txt ++++ b/vtkm/thirdparty/diy/vtkmdiy/CMakeLists.txt +@@ -139,6 +139,7 @@ function(add_diy_mpi_library use_mpi) + endif() + + add_library(${lib_name} ${sources}) ++ set_property(TARGET ${lib_name} PROPERTY POSITION_INDEPENDENT_CODE ON) + target_compile_features(${lib_name} PRIVATE cxx_std_11) + target_compile_definitions(${lib_name} + PRIVATE -DVTKMDIY_HAS_MPI=${has_mpi_val} From 6aa6e19d34ee8bb2163d6b23211cd0cb5be47b3f Mon Sep 17 00:00:00 2001 From: Cyrus Harrison Date: Mon, 13 Jul 2020 14:57:04 -0700 Subject: [PATCH 122/149] add shared libs variant to umpire (#17497) --- var/spack/repos/builtin/packages/umpire/package.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/var/spack/repos/builtin/packages/umpire/package.py b/var/spack/repos/builtin/packages/umpire/package.py index 928d8aa80cb..cc9ccbebd55 100644 --- a/var/spack/repos/builtin/packages/umpire/package.py +++ b/var/spack/repos/builtin/packages/umpire/package.py @@ -38,6 +38,7 @@ class Umpire(CMakePackage, CudaPackage): variant('fortran', default=False, description='Build C/Fortran API') variant('c', default=True, description='Build C API') variant('numa', default=False, description='Enable NUMA support') + variant('shared', default=True, description='Enable Shared libs') variant('openmp', default=False, description='Build with OpenMP support') variant('deviceconst', default=False, description='Enables support for constant device memory') @@ -80,6 +81,9 @@ def cmake_args(self): options.append('-DENABLE_OPENMP={0}'.format( 'On' if '+openmp' in spec else 'Off')) + options.append('-DBUILD_SHARED_LIBS={0}'.format( + 'On' if '+shared' in spec else 'Off')) + options.append('-DENABLE_TESTS={0}'.format( 'On' if self.run_tests else 'Off')) From 3e13137f6eabc66b0c3d60acfbe3e5e834742849 Mon Sep 17 00:00:00 2001 From: Cyrus Harrison Date: Mon, 13 Jul 2020 14:57:25 -0700 Subject: [PATCH 123/149] add share libs variant to raja (#17496) --- var/spack/repos/builtin/packages/raja/package.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/var/spack/repos/builtin/packages/raja/package.py b/var/spack/repos/builtin/packages/raja/package.py index b7a62180568..5f984c8e084 100644 --- a/var/spack/repos/builtin/packages/raja/package.py +++ b/var/spack/repos/builtin/packages/raja/package.py @@ -29,6 +29,7 @@ class Raja(CMakePackage, CudaPackage): version('0.4.0', tag='v0.4.0', submodules="True") variant('openmp', default=True, description='Build OpenMP backend') + variant('shared', default=True, description='Build Shared Libs') depends_on('cmake@3.8:', type='build') depends_on('cmake@3.9:', when='+cuda', type='build') @@ -44,11 +45,14 @@ def cmake_args(self): options.extend([ '-DENABLE_CUDA=On', '-DCUDA_TOOLKIT_ROOT_DIR=%s' % (spec['cuda'].prefix)]) - if not spec.satisfies('cuda_arch=none'): cuda_arch = spec.variants['cuda_arch'].value options.append('-DCUDA_ARCH=sm_{0}'.format(cuda_arch[0])) - + # shared vs static libs + if "+shared" in spec: + options.append('-DBUILD_SHARED_LIBS=ON') + else: + options.append('-DBUILD_SHARED_LIBS=OFF') # Work around spack adding -march=ppc64le to SPACK_TARGET_ARGS which # is used by the spack compiler wrapper. This can go away when BLT # removes -Werror from GTest flags From 2b809a537469b39e44080d33899e6b0756956309 Mon Sep 17 00:00:00 2001 From: Harmen Stoppels Date: Tue, 14 Jul 2020 00:19:04 +0200 Subject: [PATCH 124/149] Add `-o` flag to tar decompressor (#17427) For normal users, `-o` or `--no-same-owner` (GNU extension) is the default behavior, but for the root user, `tar` attempts to preserve the ownership from the tarball. This makes `tar` use `-o` all the time. This should improve untarring files owned by users not available in rootless Docker builds. --- lib/spack/spack/util/compression.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/spack/spack/util/compression.py b/lib/spack/spack/util/compression.py index 1688b49f1b1..ebbe0519d04 100644 --- a/lib/spack/spack/util/compression.py +++ b/lib/spack/spack/util/compression.py @@ -14,7 +14,7 @@ NOTAR_EXTS = ["zip", "tgz", "tbz2", "txz"] # Add PRE_EXTS and EXTS last so that .tar.gz is matched *before* .tar or .gz -ALLOWED_ARCHIVE_TYPES = [".".join(l) for l in product( +ALLOWED_ARCHIVE_TYPES = [".".join(ext) for ext in product( PRE_EXTS, EXTS)] + PRE_EXTS + EXTS + NOTAR_EXTS @@ -36,7 +36,7 @@ def decompressor_for(path, extension=None): bunzip2 = which('bunzip2', required=True) return bunzip2 tar = which('tar', required=True) - tar.add_default_arg('-xf') + tar.add_default_arg('-oxf') return tar From a6abd530bdbd426cf866cc5689b3a0162d8f7e78 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Mon, 13 Jul 2020 16:32:28 -0700 Subject: [PATCH 125/149] CUDA 11.0.2 (#17423) - [x] wait for general release candidate - [x] compute capability support - [x] compiler conflicts - [x] ppc64le - [x] new download links --- lib/spack/spack/build_systems/cuda.py | 27 ++++++++++++++----- .../repos/builtin/packages/cuda/package.py | 3 +++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/lib/spack/spack/build_systems/cuda.py b/lib/spack/spack/build_systems/cuda.py index 0c903f0b1f5..ef1b0266f81 100644 --- a/lib/spack/spack/build_systems/cuda.py +++ b/lib/spack/spack/build_systems/cuda.py @@ -26,6 +26,7 @@ class CudaPackage(PackageBase): '50', '52', '53', '60', '61', '62', '70', '72', '75', + '80', ] # FIXME: keep cuda and cuda_arch separate to make usage easier until @@ -49,6 +50,7 @@ def cuda_flags(arch_list): # CUDA version vs Architecture # https://en.wikipedia.org/wiki/CUDA#GPUs_supported + # https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#deprecated-features depends_on('cuda@:6.0', when='cuda_arch=10') depends_on('cuda@:6.5', when='cuda_arch=11') depends_on('cuda@2.1:6.5', when='cuda_arch=12') @@ -59,8 +61,8 @@ def cuda_flags(arch_list): 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@5.0:', when='cuda_arch=35') + depends_on('cuda@6.5:', when='cuda_arch=37') depends_on('cuda@6.0:', when='cuda_arch=50') depends_on('cuda@6.5:', when='cuda_arch=52') @@ -74,6 +76,8 @@ def cuda_flags(arch_list): depends_on('cuda@9.0:', when='cuda_arch=72') depends_on('cuda@10.0:', when='cuda_arch=75') + depends_on('cuda@11.0:', when='cuda_arch=80') + # There are at least three cases to be aware of for compiler conflicts # 1. Linux x86_64 # 2. Linux ppc64le @@ -89,12 +93,15 @@ def cuda_flags(arch_list): conflicts('%gcc@7:', when='+cuda ^cuda@:9.1' + arch_platform) conflicts('%gcc@8:', when='+cuda ^cuda@:10.0.130' + arch_platform) conflicts('%gcc@9:', when='+cuda ^cuda@:10.2.89' + arch_platform) + conflicts('%gcc@:4,10:', when='+cuda ^cuda@:11.0.2' + arch_platform) conflicts('%pgi@:14.8', when='+cuda ^cuda@:7.0.27' + arch_platform) conflicts('%pgi@:15.3,15.5:', when='+cuda ^cuda@7.5' + arch_platform) conflicts('%pgi@:16.2,16.0:16.3', when='+cuda ^cuda@8' + arch_platform) conflicts('%pgi@:15,18:', when='+cuda ^cuda@9.0:9.1' + arch_platform) - conflicts('%pgi@:16', when='+cuda ^cuda@9.2.88:10' + arch_platform) - conflicts('%pgi@:17', when='+cuda ^cuda@10.2.89' + arch_platform) + conflicts('%pgi@:16,19:', when='+cuda ^cuda@9.2.88:10' + arch_platform) + conflicts('%pgi@:17,20:', + when='+cuda ^cuda@10.1.105:10.2.89' + arch_platform) + conflicts('%pgi@:17,20.2:', when='+cuda ^cuda@11.0.2' + arch_platform) conflicts('%clang@:3.4', when='+cuda ^cuda@:7.5' + arch_platform) conflicts('%clang@:3.7,4:', when='+cuda ^cuda@8.0:9.0' + arch_platform) @@ -105,7 +112,8 @@ def cuda_flags(arch_list): conflicts('%clang@:3.7,7.1:', when='+cuda ^cuda@10.1.105' + arch_platform) conflicts('%clang@:3.7,8.1:', when='+cuda ^cuda@10.1.105:10.1.243' + arch_platform) - conflicts('%clang@:3.2,9.0:', when='+cuda ^cuda@10.2.89' + arch_platform) + conflicts('%clang@:3.2,9:', when='+cuda ^cuda@10.2.89' + arch_platform) + conflicts('%clang@:5,10:', when='+cuda ^cuda@11.0.2' + arch_platform) # x86_64 vs. ppc64le differ according to NVidia docs # Linux ppc64le compiler conflicts from Table from the docs below: @@ -120,6 +128,8 @@ def cuda_flags(arch_list): conflicts('%gcc@6:', when='+cuda ^cuda@:9' + arch_platform) conflicts('%gcc@8:', when='+cuda ^cuda@:10.0.130' + arch_platform) conflicts('%gcc@9:', when='+cuda ^cuda@:10.1.243' + arch_platform) + # officially, CUDA 11.0.2 only supports the system GCC 8.3 on ppc64le + conflicts('%gcc@:4,10:', when='+cuda ^cuda@:11.0.2' + arch_platform) conflicts('%pgi', when='+cuda ^cuda@:8' + arch_platform) conflicts('%pgi@:16', when='+cuda ^cuda@:9.1.185' + arch_platform) conflicts('%pgi@:17', when='+cuda ^cuda@:10' + arch_platform) @@ -129,6 +139,7 @@ def cuda_flags(arch_list): conflicts('%clang@7:', when='+cuda ^cuda@10.0.130' + arch_platform) conflicts('%clang@7.1:', when='+cuda ^cuda@:10.1.105' + arch_platform) conflicts('%clang@8.1:', when='+cuda ^cuda@:10.2.89' + arch_platform) + conflicts('%clang@:5,10.0:', when='+cuda ^cuda@11.0.2' + arch_platform) # Intel is mostly relevant for x86_64 Linux, even though it also # exists for Mac OS X. No information prior to CUDA 3.2 or Intel 11.1 @@ -142,11 +153,13 @@ def cuda_flags(arch_list): conflicts('%intel@17.0:', when='+cuda ^cuda@:8.0.60') conflicts('%intel@18.0:', when='+cuda ^cuda@:9.9') conflicts('%intel@19.0:', when='+cuda ^cuda@:10.0') + conflicts('%intel@19.1:', when='+cuda ^cuda@:10.1') + conflicts('%intel@19.2:', when='+cuda ^cuda@:11.0.2') # XL is mostly relevant for ppc64le Linux conflicts('%xl@:12,14:', when='+cuda ^cuda@:9.1') conflicts('%xl@:12,14:15,17:', when='+cuda ^cuda@9.2') - conflicts('%xl@17:', when='+cuda ^cuda@:10.2.89') + conflicts('%xl@:12,17:', when='+cuda ^cuda@:11.0.2') # Mac OS X # platform = ' platform=darwin' @@ -157,7 +170,7 @@ def cuda_flags(arch_list): # `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:') + conflicts('platform=darwin', when='+cuda ^cuda@11.0.2:') # Make sure cuda_arch can not be used without +cuda for value in cuda_arch_values: diff --git a/var/spack/repos/builtin/packages/cuda/package.py b/var/spack/repos/builtin/packages/cuda/package.py index 5fd89cbaa1f..4018e82d06c 100644 --- a/var/spack/repos/builtin/packages/cuda/package.py +++ b/var/spack/repos/builtin/packages/cuda/package.py @@ -22,6 +22,9 @@ # format returned by platform.system() and 'arch' by platform.machine() _versions = { + '11.0.2': { + 'Linux-x86_64': ('48247ada0e3f106051029ae8f70fbd0c238040f58b0880e55026374a959a69c1', 'http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux.run'), + 'Linux-ppc64le': ('db06d0f3fbf6f7aa1f106fc921ad1c86162210a26e8cb65b171c5240a3bf75da', 'http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux_ppc64le.run')}, '10.2.89': { 'Linux-x86_64': ('560d07fdcf4a46717f2242948cd4f92c5f9b6fc7eae10dd996614da913d5ca11', 'http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run'), 'Linux-ppc64le': ('5227774fcb8b10bd2d8714f0a716a75d7a2df240a9f2a49beb76710b1c0fc619', 'http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux_ppc64le.run')}, From fa614404e6522273ec54ac5f7d7b88bd8a093152 Mon Sep 17 00:00:00 2001 From: darmac Date: Tue, 14 Jul 2020 19:02:31 +0800 Subject: [PATCH 126/149] smartdenovo: added patch to fix compile error (debian) (#17435) --- .../packages/smartdenovo/inline-limit.patch | 24 +++++++++++++++++++ .../builtin/packages/smartdenovo/package.py | 4 ++-- 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 var/spack/repos/builtin/packages/smartdenovo/inline-limit.patch diff --git a/var/spack/repos/builtin/packages/smartdenovo/inline-limit.patch b/var/spack/repos/builtin/packages/smartdenovo/inline-limit.patch new file mode 100644 index 00000000000..9a42bd29cd0 --- /dev/null +++ b/var/spack/repos/builtin/packages/smartdenovo/inline-limit.patch @@ -0,0 +1,24 @@ +diff -Nur smartdenovo/wtlay.h smartdenovo-new/wtlay.h +--- smartdenovo/wtlay.h 2020-07-09 02:47:13.503412360 +0800 ++++ smartdenovo-new/wtlay.h 2020-07-09 02:49:02.775412360 +0800 +@@ -503,17 +503,17 @@ + return e2; + } + +-inline int cut_biedge_strgraph_core(StringGraph *g, uint32_t node_id, int dir, uint32_t eidx, int closed){ ++static inline int cut_biedge_strgraph_core(StringGraph *g, uint32_t node_id, int dir, uint32_t eidx, int closed){ + edge_strgraph(g, node_id, dir, eidx)->closed = closed; + edge_partner_strgraph(g, node_id, dir, eidx)->closed = closed; + return 1; + } + +-inline int cut_biedge_strgraph(StringGraph *g, uint32_t node_id, int dir, uint32_t eidx){ ++static inline int cut_biedge_strgraph(StringGraph *g, uint32_t node_id, int dir, uint32_t eidx){ + return cut_biedge_strgraph_core(g, node_id, dir, eidx, 1); + } + +-inline int cut_biedge_strgraph2(StringGraph *g, uint32_t node_id, int dir, uint32_t eidx){ ++static inline int cut_biedge_strgraph2(StringGraph *g, uint32_t node_id, int dir, uint32_t eidx){ + return cut_biedge_strgraph_core(g, node_id, dir, eidx, 2); + } + diff --git a/var/spack/repos/builtin/packages/smartdenovo/package.py b/var/spack/repos/builtin/packages/smartdenovo/package.py index f18b8583d9d..48109ea9e49 100644 --- a/var/spack/repos/builtin/packages/smartdenovo/package.py +++ b/var/spack/repos/builtin/packages/smartdenovo/package.py @@ -17,8 +17,8 @@ class Smartdenovo(MakefilePackage): depends_on('sse2neon', when='target=aarch64:') - patch('aarch64.patch', when='target=aarch64:', - sha256='7dd4bca28aafb0680cc1823aa58ac9000819993538e92628554666c4b3acc470') + patch('aarch64.patch', sha256='7dd4bca28aafb0680cc1823aa58ac9000819993538e92628554666c4b3acc470', when='target=aarch64:') + patch('inline-limit.patch', sha256='9f514ed72c37cf52ee2ffbe06f9ca1ed5a3e0819dab5876ecd83107c5e5bed81') def install(self, spec, prefix): install_files = [ From ab68410c4ce2014bfb247828a491dca623602203 Mon Sep 17 00:00:00 2001 From: Andrey Prokopenko Date: Tue, 14 Jul 2020 19:23:19 -0400 Subject: [PATCH 127/149] Trilinos (package): remove maintainer (#17534) --- var/spack/repos/builtin/packages/trilinos/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py index 7896d809f2f..d5d595142f5 100644 --- a/var/spack/repos/builtin/packages/trilinos/package.py +++ b/var/spack/repos/builtin/packages/trilinos/package.py @@ -28,7 +28,7 @@ class Trilinos(CMakePackage): url = "https://github.com/trilinos/Trilinos/archive/trilinos-release-12-12-1.tar.gz" git = "https://github.com/trilinos/Trilinos.git" - maintainers = ['aprokop', 'keitat'] + maintainers = ['keitat'] # ###################### Versions ########################## From 11d8aed6cd84244b5a9907b23a94fc7bad857426 Mon Sep 17 00:00:00 2001 From: vvolkl Date: Wed, 15 Jul 2020 01:24:33 +0200 Subject: [PATCH 128/149] dd4hep (package): add version 1.13.0 (#17528) --- var/spack/repos/builtin/packages/dd4hep/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/dd4hep/package.py b/var/spack/repos/builtin/packages/dd4hep/package.py index 76de6090c5c..c8a28647c00 100644 --- a/var/spack/repos/builtin/packages/dd4hep/package.py +++ b/var/spack/repos/builtin/packages/dd4hep/package.py @@ -22,6 +22,7 @@ class Dd4hep(CMakePackage): maintainers = ['vvolkl', 'drbenmorgan'] version('master', branch='master') + version('1.13.0', sha256='0b1f9d902ebe21a9178c1e41204c066b29f68c8836fd1d03a9ce979811ddb295') version('1.12.1', sha256='85e8c775ec03c499ce10911e228342e757c81ce9ef2a9195cb253b85175a2e93') version('1.12.0', sha256='133a1fb8ce0466d2482f3ebb03e60b3bebb9b2d3e33d14ba15c8fbb91706b398') version('1.11.2', sha256='96a53dd26cb8df11c6dae54669fbc9cc3c90dd47c67e07b24be9a1341c95abc4') From 683881f912f0b80cafef44f980de982b244efb78 Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Tue, 14 Jul 2020 17:31:15 -0600 Subject: [PATCH 129/149] py-protobuf (package): add version 3.12.2 (#17532) This matches the current latest version of protobuf in Spack. Generally the version of py-protobuf and protobuf should match, but this constraint is not currently recorded in py-protobuf. --- var/spack/repos/builtin/packages/py-protobuf/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/py-protobuf/package.py b/var/spack/repos/builtin/packages/py-protobuf/package.py index c2f1efd2f98..4876832dcf6 100644 --- a/var/spack/repos/builtin/packages/py-protobuf/package.py +++ b/var/spack/repos/builtin/packages/py-protobuf/package.py @@ -20,6 +20,7 @@ class PyProtobuf(PythonPackage): variant('cpp', default=False, description='Enable the cpp implementation') + version('3.12.2', sha256='49ef8ab4c27812a89a76fa894fe7a08f42f2147078392c0dee51d4a444ef6df5') version('3.11.2', sha256='3d7a7d8d20b4e7a8f63f62de2d192cfd8b7a53c56caba7ece95367ca2b80c574') version('3.11.1', sha256='aecdf12ef6dc7fd91713a6da93a86c2f2a8fe54840a3b1670853a2b7402e77c9') version('3.11.0', sha256='97b08853b9bb71512ed52381f05cf2d4179f4234825b505d8f8d2bb9d9429939') From 710ff8d7ce30f4bc7aa337120adac377f4588805 Mon Sep 17 00:00:00 2001 From: Frank Willmore Date: Tue, 14 Jul 2020 18:36:18 -0500 Subject: [PATCH 130/149] libyogrt (package): add variant to enable static builds (#17535) --- var/spack/repos/builtin/packages/libyogrt/package.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/var/spack/repos/builtin/packages/libyogrt/package.py b/var/spack/repos/builtin/packages/libyogrt/package.py index 35901935166..a1ed17b3f1e 100644 --- a/var/spack/repos/builtin/packages/libyogrt/package.py +++ b/var/spack/repos/builtin/packages/libyogrt/package.py @@ -38,6 +38,9 @@ class Libyogrt(AutotoolsPackage): conflicts('scheduler=lsf', when='@:1.22') + variant('static', default='False', + description="build static library") + def url_for_version(self, version): if version < Version(1.21): return "https://github.com/LLNL/libyogrt/archive/%s.tar.gz" % version @@ -51,4 +54,7 @@ def configure_args(self): if sched != "system": args.append('--with-%s=%s' % (sched, self.spec[sched].prefix)) + if '+static' in self.spec: + args.append('--enable-static=yes') + return args From d32bbae431e1fb2c43a0d726a42d37773c707b87 Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Tue, 14 Jul 2020 17:41:11 -0600 Subject: [PATCH 131/149] rsync (package): add version 3.2.2 (#17504) --- var/spack/repos/builtin/packages/rsync/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/rsync/package.py b/var/spack/repos/builtin/packages/rsync/package.py index 078f11e630c..e95a3b1eeb0 100644 --- a/var/spack/repos/builtin/packages/rsync/package.py +++ b/var/spack/repos/builtin/packages/rsync/package.py @@ -11,6 +11,7 @@ class Rsync(AutotoolsPackage): homepage = "https://rsync.samba.org" url = "https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz" + version('3.2.2', sha256='644bd3841779507665211fd7db8359c8a10670c57e305b4aab61b4e40037afa8') version('3.1.3', sha256='55cc554efec5fdaad70de921cd5a5eeb6c29a95524c715f3bbf849235b0800c0') version('3.1.2', sha256='ecfa62a7fa3c4c18b9eccd8c16eaddee4bd308a76ea50b5c02a5840f09c0a1c2') version('3.1.1', sha256='7de4364fcf5fe42f3bdb514417f1c40d10bbca896abe7e7f2c581c6ea08a2621') From 14f3f230c19771b2f337b260319267edc0f16f34 Mon Sep 17 00:00:00 2001 From: ketsubouchi <67359246+ketsubouchi@users.noreply.github.com> Date: Wed, 15 Jul 2020 11:24:18 +0900 Subject: [PATCH 132/149] scons: support Fujitsu Fortran moddir option (#17538) --- var/spack/repos/builtin/packages/scons/package.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/var/spack/repos/builtin/packages/scons/package.py b/var/spack/repos/builtin/packages/scons/package.py index 328fa558abf..82b9bcd7d10 100644 --- a/var/spack/repos/builtin/packages/scons/package.py +++ b/var/spack/repos/builtin/packages/scons/package.py @@ -25,6 +25,15 @@ class Scons(PythonPackage): depends_on('python@:2', when='@:2', type=('build', 'run')) depends_on('py-setuptools', when='@3.0.2:', type='build') + def patch(self): + if self.spec.satisfies('%fj'): + filter_file( + 'env[\'FORTRANMODDIRPREFIX\'] = "-J"', + 'env[\'FORTRANMODDIRPREFIX\'] = "-M"', + 'engine/SCons/Tool/gfortran.py', + string=True + ) + # Prevent passing --single-version-externally-managed to # setup.py, which it does not support. @when('@3.0.2:') From 28a25080ca35577cf22745b0f250e5def8b7e66b Mon Sep 17 00:00:00 2001 From: darmac Date: Wed, 15 Jul 2020 10:34:59 +0800 Subject: [PATCH 133/149] py-lockfile: depends on py-pbr by setup.py (#17524) --- var/spack/repos/builtin/packages/py-lockfile/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/py-lockfile/package.py b/var/spack/repos/builtin/packages/py-lockfile/package.py index 95b5289b890..9731208b513 100644 --- a/var/spack/repos/builtin/packages/py-lockfile/package.py +++ b/var/spack/repos/builtin/packages/py-lockfile/package.py @@ -23,3 +23,4 @@ class PyLockfile(PythonPackage): version('0.10.2', sha256='9e42252f17d1dd89ee31745e0c4fbe58862c25147eb0ef5295c9cd9bcb4ea2c1') depends_on("py-setuptools", type='build') + depends_on("py-pbr", type='build') From 6f6e896795f5daa3785361ca0bf1413b9f27a029 Mon Sep 17 00:00:00 2001 From: Cyrus Harrison Date: Tue, 14 Jul 2020 19:42:38 -0700 Subject: [PATCH 134/149] New package: babelflow (#17500) --- .../builtin/packages/babelflow/package.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 var/spack/repos/builtin/packages/babelflow/package.py diff --git a/var/spack/repos/builtin/packages/babelflow/package.py b/var/spack/repos/builtin/packages/babelflow/package.py new file mode 100644 index 00000000000..568f8bf7c85 --- /dev/null +++ b/var/spack/repos/builtin/packages/babelflow/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 Babelflow(CMakePackage): + """BabelFlow is an Embedded Domain Specific Language to describe + algorithms using a task graph abstraction which allows them to be + executed on top of one of several available runtime systems.""" + + homepage = "https://github.com/sci-visus/BabelFlow" + git = 'https://github.com/sci-visus/BabelFlow.git' + + maintainers = ['spetruzza'] + + version('develop', + branch='ascent', + submodules=True) + + depends_on('mpi') + + variant("shared", default=True, description="Build Babelflow as shared libs") + + def cmake_args(self): + args = [ + '-DBUILD_SHARED_LIBS:BOOL={0}'.format( + 'ON' if '+shared' in spec else 'OFF')] + return args From bcd41cec71c927bbcc62a403427b2ba4e4df02ea Mon Sep 17 00:00:00 2001 From: darmac Date: Wed, 15 Jul 2020 10:45:47 +0800 Subject: [PATCH 135/149] Add new package: minio (#17522) --- .../repos/builtin/packages/minio/package.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 var/spack/repos/builtin/packages/minio/package.py diff --git a/var/spack/repos/builtin/packages/minio/package.py b/var/spack/repos/builtin/packages/minio/package.py new file mode 100644 index 00000000000..4485f650e70 --- /dev/null +++ b/var/spack/repos/builtin/packages/minio/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 Minio(MakefilePackage): + """MinIO is a High Performance Object Storage released under Apache + License v2.0. It is API compatible with Amazon S3 cloud storage + service. Use MinIO to build high performance infrastructure for + machine learning, analytics and application data workloads.""" + + homepage = "https://min.io/" + url = "https://github.com/minio/minio/archive/RELEASE.2020-07-13T18-09-56Z.tar.gz" + + version('2020-07-13T18-09-56Z', sha256='147fca3930389162cc7306a0fa5cf478ee2deba4b31a9317f3d35e82aa58d41e') + version('2020-07-12T19-14-17Z', sha256='bb8ba5d93215ab37788171d8b9ce68e78d64e7b7c74aea508c15958158d85b03') + version('2020-07-02T00-15-09Z', sha256='4255c4d95a3e010f16a3f1e974768dc68509075403a97a9b9882f7d9e89fedc5') + + depends_on('go', type='build') + + def url_for_version(self, version): + return ("https://github.com/minio/minio/archive/RELEASE.{0}.tar.gz".format(version)) + + def install(self, spec, prefix): + mkdirp(prefix.bin) + install('minio', prefix.bin) From a2729fcd7f09f2b4403b9e07154f61edaafabdc7 Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Tue, 14 Jul 2020 20:47:03 -0600 Subject: [PATCH 136/149] zsh (package): add versions; switch to .xz archives (#17489) * Add new versions including 5.8 * Download .xz archives for existing versions (this requires updating the associated checksums) --- var/spack/repos/builtin/packages/zsh/package.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/var/spack/repos/builtin/packages/zsh/package.py b/var/spack/repos/builtin/packages/zsh/package.py index 60bb3cd3e7a..1288eddbad9 100644 --- a/var/spack/repos/builtin/packages/zsh/package.py +++ b/var/spack/repos/builtin/packages/zsh/package.py @@ -13,11 +13,14 @@ class Zsh(AutotoolsPackage): """ homepage = "http://www.zsh.org" - url = "http://downloads.sourceforge.net/project/zsh/zsh/5.4.2/zsh-5.4.2.tar.gz" + url = "http://downloads.sourceforge.net/project/zsh/zsh/5.4.2/zsh-5.4.2.tar.xz" - version('5.4.2', sha256='957bcdb2c57f64c02f673693ea5a7518ef24b6557aeb3a4ce222cefa6d74acc9') - version('5.3.1', sha256='3d94a590ff3c562ecf387da78ac356d6bea79b050a9ef81e3ecb9f8ee513040e') - version('5.1.1', sha256='94ed5b412023761bc8d2f03c173f13d625e06e5d6f0dff2c7a6e140c3fa55087') + version('5.8', sha256='dcc4b54cc5565670a65581760261c163d720991f0d06486da61f8d839b52de27') + version('5.7.1', sha256='7260292c2c1d483b2d50febfa5055176bd512b32a8833b116177bf5f01e77ee8') + version('5.6.2', sha256='a50bd66c0557e8eca3b8fa24e85d0de533e775d7a22df042da90488623752e9e') + version('5.4.2', sha256='a80b187b6b770f092ea1f53e89021d06c03d8bbe6a5e996bcca3267de14c5e52') + version('5.3.1', sha256='fc886cb2ade032d006da8322c09a7e92b2309177811428b121192d44832920da') + version('5.1.1', sha256='74e9453b5470b3c0970f9f93cfd603d241c3d7b1968adc0e4b3951073e8d3dec') # Testing for terminal related things causes failures in e.g. Jenkins. # See e.g. https://www.zsh.org/mla/users/2003/msg00845.html, From 88537d02e4f637d6ef8e6a450aed974a12d45278 Mon Sep 17 00:00:00 2001 From: darmac Date: Wed, 15 Jul 2020 10:47:29 +0800 Subject: [PATCH 137/149] gpdb: fix runtime issue (#17521) --- var/spack/repos/builtin/packages/gpdb/package.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/gpdb/package.py b/var/spack/repos/builtin/packages/gpdb/package.py index 07ced439bd3..98683b271c4 100644 --- a/var/spack/repos/builtin/packages/gpdb/package.py +++ b/var/spack/repos/builtin/packages/gpdb/package.py @@ -27,6 +27,7 @@ class Gpdb(AutotoolsPackage): version('5.23.0', sha256='b06a797eb941362d5473b84d5def349b5ce12ce87ab116bea7c74ad193738ae9') depends_on('zstd') + depends_on('py-setuptools@:44.99.99') depends_on('apr') depends_on('libevent') depends_on('curl') @@ -35,7 +36,17 @@ class Gpdb(AutotoolsPackage): depends_on('libxml2') depends_on('flex') depends_on('readline') + depends_on('py-subprocess32', type=('build', 'run')) + depends_on('python@:2.8.0', type=('build', 'run')) + depends_on('py-lockfile', type=('build', 'run')) + depends_on('py-psutil', type=('build', 'run')) + depends_on('py-utils@:1.0.0', type=('build', 'run')) def configure_args(self): - args = ['--disable-orca'] + args = ['--with-python', '--disable-orca', '--enable-depend', + '--with-libxml'] return args + + def setup_run_environment(self, env): + env.append_path('GPHOME', self.prefix) + env.append_path('PYTHONPATH', self.prefix.lib.python) From 2110b98829e1925d49184a5c69885648230b5d72 Mon Sep 17 00:00:00 2001 From: Amjad Kotobi Date: Wed, 15 Jul 2020 04:56:05 +0200 Subject: [PATCH 138/149] r-glue: new version (#17517) --- var/spack/repos/builtin/packages/r-glue/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/r-glue/package.py b/var/spack/repos/builtin/packages/r-glue/package.py index 1472728e93d..20371a97400 100644 --- a/var/spack/repos/builtin/packages/r-glue/package.py +++ b/var/spack/repos/builtin/packages/r-glue/package.py @@ -17,6 +17,7 @@ class RGlue(RPackage): url = "https://cloud.r-project.org/src/contrib/glue_1.2.0.tar.gz" list_url = "https://cloud.r-project.org/src/contrib/Archive/glue" + version('1.4.1', sha256='f8b687d35cacb5ee7fcada6e9c26ea20c04d0bdc9d37e919a03abd1137513bc8') version('1.4.0', sha256='ea6c409f7141754baa090deba96cff270a11b185452cf9e6fb69cb148a9069c1') version('1.3.1', sha256='4fc1f2899d71a634e1f0adb7942772feb5ac73223891abe30ea9bd91d3633ea8') version('1.3.0', sha256='789e5a44c3635c3d3db26666e635e88adcf61cd02b75465125d95d7a12291cee') From c281eaf69f6cbe368e06b50065a3b1f043128375 Mon Sep 17 00:00:00 2001 From: vvolkl Date: Wed, 15 Jul 2020 05:07:39 +0200 Subject: [PATCH 139/149] [acts] remove false dependency (#17511) --- var/spack/repos/builtin/packages/acts/package.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/var/spack/repos/builtin/packages/acts/package.py b/var/spack/repos/builtin/packages/acts/package.py index 849c326b18a..63b011791ff 100644 --- a/var/spack/repos/builtin/packages/acts/package.py +++ b/var/spack/repos/builtin/packages/acts/package.py @@ -92,8 +92,8 @@ class Acts(CMakePackage): depends_on('boost @1.62:1.69.99 +program_options +test', when='@:0.10.3') depends_on('boost @1.69: +filesystem +program_options +test', when='@0.10.4:') depends_on('cmake @3.11:', type='build') - depends_on('dd4hep @1.10: +xercesc', when='+dd4hep') - depends_on('dd4hep @1.10: +geant4 +xercesc', when='+dd4hep +geant4') + depends_on('dd4hep @1.10:', when='+dd4hep') + depends_on('dd4hep @1.10: +geant4', when='+dd4hep +geant4') depends_on('eigen @3.2.9:', type='build') depends_on('geant4', when='+geant4') depends_on('hepmc3@3.1:', when='+hepmc3') From 7340be98f68750777d9fb17b5ac86eb538e97dd5 Mon Sep 17 00:00:00 2001 From: Hadrien G Date: Wed, 15 Jul 2020 05:23:07 +0200 Subject: [PATCH 140/149] [acts] Add 0.25.x series (#17485) * Add Acts v0.25 support * Add Acts v0.25.1 * Add acts v0.25.2 --- var/spack/repos/builtin/packages/acts/package.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/acts/package.py b/var/spack/repos/builtin/packages/acts/package.py index 63b011791ff..baf45c12bad 100644 --- a/var/spack/repos/builtin/packages/acts/package.py +++ b/var/spack/repos/builtin/packages/acts/package.py @@ -6,7 +6,7 @@ from spack import * -class Acts(CMakePackage): +class Acts(CMakePackage, CudaPackage): """ A Common Tracking Software (Acts) @@ -35,6 +35,9 @@ class Acts(CMakePackage): # Supported Acts versions version('master', branch='master') + version('0.25.2', commit='76bf1f3e4be51d4d27126b473a2caa8d8a72b320') + version('0.25.1', commit='6e8a1ea6d2c7385a78e3e190efb2a8a0c1fa957f') + version('0.25.0', commit='0aca171951a214299e8ff573682b1c5ecec63d42') version('0.24.0', commit='ef4699c8500bfea59a5fe88bed67fde2f00f0adf') version('0.23.0', commit='dc443dd7e663bc4d7fb3c1e3f1f75aaf57ffd4e4') version('0.22.1', commit='ca1b8b1645db6b552f44c48d2ff34c8c29618f3a') @@ -141,6 +144,7 @@ def example_cmake_variant(cmake_label, spack_variant): args = [ cmake_variant("BENCHMARKS", "benchmarks"), + cmake_variant("CUDA_PLUGIN", "cuda"), cmake_variant("DD4HEP_PLUGIN", "dd4hep"), cmake_variant("DIGITIZATION_PLUGIN", "digitization"), cmake_variant("EXAMPLES", "examples"), @@ -157,6 +161,10 @@ def example_cmake_variant(cmake_label, spack_variant): cmake_variant("TGEO_PLUGIN", "tgeo") ] + cuda_arch = spec.variants['cuda_arch'].value + if cuda_arch != 'none': + args.append('-DCUDA_FLAGS=-arch=sm_{0}'.format(cuda_arch[0])) + if 'root' in spec: cxxstd = spec['root'].variants['cxxstd'].value args.append("-DCMAKE_CXX_STANDARD={0}".format(cxxstd)) From 7efb0e541e99c5d3fba0621611cb5dd56a715182 Mon Sep 17 00:00:00 2001 From: Julius-Plehn Date: Wed, 15 Jul 2020 05:30:39 +0200 Subject: [PATCH 141/149] New Package: GrADS (#17476) * grads minimal package * udpt template * grads minima * grads & shapelib package * hdf4 * cleanup * hdf5, netcdf variants * updates environment function * updating paths and pkgconfig * cleanup --- .../repos/builtin/packages/grads/package.py | 65 +++++++++++++++++++ var/spack/repos/builtin/packages/grads/udpt | 2 + .../builtin/packages/shapelib/package.py | 18 +++++ 3 files changed, 85 insertions(+) create mode 100644 var/spack/repos/builtin/packages/grads/package.py create mode 100644 var/spack/repos/builtin/packages/grads/udpt create mode 100644 var/spack/repos/builtin/packages/shapelib/package.py diff --git a/var/spack/repos/builtin/packages/grads/package.py b/var/spack/repos/builtin/packages/grads/package.py new file mode 100644 index 00000000000..889ad5c7e39 --- /dev/null +++ b/var/spack/repos/builtin/packages/grads/package.py @@ -0,0 +1,65 @@ +# 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 Grads(AutotoolsPackage): + """The Grid Analysis and Display System (GrADS) is an interactive + desktop tool that is used for easy access, manipulation, and visualization + of earth science data. GrADS has two data models for handling gridded and + station data. GrADS supports many data file formats, including + binary (stream or sequential), GRIB (version 1 and 2), NetCDF, + HDF (version 4 and 5), and BUFR (for station data).""" + + homepage = "http://cola.gmu.edu/grads/grads.php" + url = "ftp://cola.gmu.edu/grads/2.2/grads-2.2.1-src.tar.gz" + + version('2.2.1', sha256='695e2066d7d131720d598bac0beb61ac3ae5578240a5437401dc0ffbbe516206') + + variant('geotiff', default=True, description="Enable GeoTIFF support") + variant('shapefile', default=True, description="Enable Shapefile support") + + """ + # FIXME: Fails with undeclared functions (tdefi, tdef, ...) in gauser.c + variant('hdf5', default=False, description="Enable HDF5 support") + variant('hdf4', default=False, description="Enable HDF4 support") + variant('netcdf', default=False, description="Enable NetCDF support") + depends_on('hdf5', when='+hdf5') + depends_on('hdf', when='+hdf4') + depends_on('netcdf-c', when='+netcdf') + """ + + depends_on('libgeotiff', when='+geotiff') + depends_on('shapelib', when='+shapefile') + depends_on('udunits') + depends_on('libgd') + depends_on('libxmu') + depends_on('cairo +X +pdf +fc +ft') + depends_on('readline') + depends_on('pkgconfig', type='build') + + def setup_build_environment(self, env): + env.set('SUPPLIBS', '/') + + def setup_run_environment(self, env): + env.set('GADDIR', self.prefix.data) + + @run_after('install') + def copy_data(self): + with working_dir(self.build_directory): + install_tree('data', self.prefix.data) + with working_dir(self.package_dir): + install('udpt', self.prefix.data) + filter_file( + r'({lib})', + self.prefix.lib, + self.prefix.data.udpt + ) + + def configure_args(self): + args = [] + args.extend(self.with_or_without('geotiff')) + return args diff --git a/var/spack/repos/builtin/packages/grads/udpt b/var/spack/repos/builtin/packages/grads/udpt new file mode 100644 index 00000000000..5bfc99ba335 --- /dev/null +++ b/var/spack/repos/builtin/packages/grads/udpt @@ -0,0 +1,2 @@ +gxdisplay Cairo {lib}/libgxdCairo.so +gxprint Cairo {lib}/libgxpCairo.so diff --git a/var/spack/repos/builtin/packages/shapelib/package.py b/var/spack/repos/builtin/packages/shapelib/package.py new file mode 100644 index 00000000000..47be5cdaa1c --- /dev/null +++ b/var/spack/repos/builtin/packages/shapelib/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 Shapelib(CMakePackage): + """The Shapefile C Library provides the ability to write simple C programs + for reading, writing and updating (to a limited extent) ESRI Shapefiles, + and the associated attribute file (.dbf). + """ + + homepage = "http://shapelib.maptools.org/" + url = "https://github.com/OSGeo/shapelib/archive/v1.5.0.tar.gz" + + version('1.5.0', sha256='48de3a6a8691b0b111b909c0b908af4627635c75322b3a501c0c0885f3558cad') From 99a47e407efcb7ee323fe482b5b5b1b503252fd7 Mon Sep 17 00:00:00 2001 From: ketsubouchi <67359246+ketsubouchi@users.noreply.github.com> Date: Wed, 15 Jul 2020 14:53:36 +0900 Subject: [PATCH 142/149] cantera: better specify dependency on sundials (#17540) --- var/spack/repos/builtin/packages/cantera/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/cantera/package.py b/var/spack/repos/builtin/packages/cantera/package.py index 4b38ccc7b36..773cc6d8cf5 100644 --- a/var/spack/repos/builtin/packages/cantera/package.py +++ b/var/spack/repos/builtin/packages/cantera/package.py @@ -30,7 +30,7 @@ class Cantera(SConsPackage): depends_on('googletest+gmock', when='@2.3.0:') depends_on('eigen', when='@2.3.0:') depends_on('boost') - depends_on('sundials@:3.1.2', when='+sundials') # must be compiled with -fPIC + depends_on('sundials@:3.1.2+lapack', when='+sundials') # must be compiled with -fPIC depends_on('blas') depends_on('lapack') From d56711f7998a02e9d3a42cb63f3d7fcf3619b6aa Mon Sep 17 00:00:00 2001 From: yellowhat Date: Wed, 15 Jul 2020 07:04:39 +0100 Subject: [PATCH 143/149] namd: added v2.14b2 (#17395) Co-authored-by: Adam J. Stewart --- var/spack/repos/builtin/packages/namd/package.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/namd/package.py b/var/spack/repos/builtin/packages/namd/package.py index a85dd7fd42a..e14e92347e5 100644 --- a/var/spack/repos/builtin/packages/namd/package.py +++ b/var/spack/repos/builtin/packages/namd/package.py @@ -19,8 +19,9 @@ class Namd(MakefilePackage): manual_download = True version("develop", branch="master") + version('2.14b2', sha256='cb4bd918d2d545bb618e4b4a20023a53916f0aa362d9e57f3de1562c36240b00') version('2.14b1', sha256='9407e54f5271b3d3039a5a9d2eae63c7e108ce31b7481e2197c19e1125b43919') - version('2.13', '9e3323ed856e36e34d5c17a7b0341e38') + version('2.13', '9e3323ed856e36e34d5c17a7b0341e38', preferred=True) version('2.12', '2a1191909b1ab03bf0205971ad4d8ee9') variant('fftw', default='3', values=('none', '2', '3', 'mkl'), From 0d4740d1b1ec679fab4e61ca4f8b62e835728634 Mon Sep 17 00:00:00 2001 From: "Dr. Christian Tacke" <58549698+ChristianTackeGSI@users.noreply.github.com> Date: Wed, 15 Jul 2020 08:43:38 +0200 Subject: [PATCH 144/149] curl: add dependency on libidn2 (#17526) If the system has libidn2 installed, then curl will use it. spack has a libidn2 package, so let's use that! Related: #16514 --- var/spack/repos/builtin/packages/curl/package.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/var/spack/repos/builtin/packages/curl/package.py b/var/spack/repos/builtin/packages/curl/package.py index 6d30d23b42f..abb09d78e18 100644 --- a/var/spack/repos/builtin/packages/curl/package.py +++ b/var/spack/repos/builtin/packages/curl/package.py @@ -52,6 +52,7 @@ class Curl(AutotoolsPackage): conflicts('platform=linux', when='+darwinssl') depends_on('openssl', when='~darwinssl') + depends_on('libidn2') depends_on('zlib') depends_on('nghttp2', when='+nghttp2') depends_on('libssh2', when='+libssh2') @@ -62,6 +63,8 @@ def configure_args(self): spec = self.spec args = ['--with-zlib={0}'.format(spec['zlib'].prefix)] + args.append('--with-libidn2={0}'.format(spec['libidn2'].prefix)) + if spec.satisfies('+darwinssl'): args.append('--with-darwinssl') else: From d55541919d2a78cd7435d4db870f5e63fbf0dcc3 Mon Sep 17 00:00:00 2001 From: Cyrus Harrison Date: Wed, 15 Jul 2020 00:01:05 -0700 Subject: [PATCH 145/149] visit package update, add glu as a linux dep (#17537) * visit: add glu as a dep for linux * add note to suggested install command about mesa --- var/spack/repos/builtin/packages/visit/package.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/var/spack/repos/builtin/packages/visit/package.py b/var/spack/repos/builtin/packages/visit/package.py index cd72bcda2c4..d2f3987895e 100644 --- a/var/spack/repos/builtin/packages/visit/package.py +++ b/var/spack/repos/builtin/packages/visit/package.py @@ -25,6 +25,11 @@ class Visit(CMakePackage): # linux: # spack install visit ^python+shared ^glib@2.56.3 ^py-setuptools@44.1.0 # + # linux w/o opengl: (add mesa as opengl if system lacks system opengl ) + # + # spack install visit ^python+shared ^glib@2.56.3 ^py-setuptools@44.1.0 \ + # ^mesa+opengl + # # macOS: # spack install visit ^python+shared ^glib@2.56.3 ^py-setuptools@44.1.0 \ # ^qt~framework @@ -159,6 +164,7 @@ class Visit(CMakePackage): # https://github.com/visit-dav/visit/issues/3498 depends_on('vtk@8.1.0:8.1.999+opengl2~python', when='~python @3.0:3.999,develop') depends_on('vtk@8.1.0:8.1.999+opengl2+python', when='+python @3.0:3.999,develop') + depends_on('glu', when='platform=linux') depends_on('vtk@6.1.0~opengl2', when='@:2.999') depends_on('vtk+python', when='+python @3.0:,develop') depends_on('vtk~mpi', when='~mpi') From 48a9ad36527e666eab0a417696d6b84ac32cf10a Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 15 Jul 2020 01:31:49 -0600 Subject: [PATCH 146/149] Go: added v1.14.5 and v1.13.13. (#17539) --- var/spack/repos/builtin/packages/go/package.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/var/spack/repos/builtin/packages/go/package.py b/var/spack/repos/builtin/packages/go/package.py index d0f515e94c7..32494a6444b 100644 --- a/var/spack/repos/builtin/packages/go/package.py +++ b/var/spack/repos/builtin/packages/go/package.py @@ -36,11 +36,13 @@ class Go(Package): extendable = True + version('1.14.5', sha256='ca4c080c90735e56152ac52cd77ae57fe573d1debb1a58e03da9cc362440315c') version('1.14.4', sha256='7011af3bbc2ac108d1b82ea8abb87b2e63f78844f0259be20cde4d42c5c40584') version('1.14.3', sha256='93023778d4d1797b7bc6a53e86c3a9b150c923953225f8a48a2d5fabc971af56') version('1.14.2', sha256='98de84e69726a66da7b4e58eac41b99cbe274d7e8906eeb8a5b7eb0aadee7f7c') version('1.14.1', sha256='2ad2572115b0d1b4cb4c138e6b3a31cee6294cb48af75ee86bec3dca04507676') version('1.14', sha256='6d643e46ad565058c7a39dac01144172ef9bd476521f42148be59249e4b74389') + version('1.13.13', sha256='ab7e44461e734ce1fd5f4f82c74c6d236e947194d868514d48a2b1ea73d25137') version('1.13.12', sha256='17ba2c4de4d78793a21cc659d9907f4356cd9c8de8b7d0899cdedcef712eba34') version('1.13.11', sha256='89ed1abce25ad003521c125d6583c93c1280de200ad221f961085200a6c00679') version('1.13.10', sha256='eb9ccc8bf59ed068e7eff73e154e4f5ee7eec0a47a610fb864e3332a2fdc8b8c') From d25c7ddd6f1686f115f6dc2615a3bd3b6b3d29c4 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 15 Jul 2020 03:13:04 -0600 Subject: [PATCH 147/149] spack containerize: added --fail-fast argument to containerize install. (#17533) --- share/spack/templates/container/Dockerfile | 2 +- share/spack/templates/container/singularity.def | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/share/spack/templates/container/Dockerfile b/share/spack/templates/container/Dockerfile index 2f1370fdb38..c65fce56273 100644 --- a/share/spack/templates/container/Dockerfile +++ b/share/spack/templates/container/Dockerfile @@ -7,7 +7,7 @@ RUN mkdir {{ paths.environment }} \ {{ manifest }} > {{ paths.environment }}/spack.yaml # Install the software, remove unecessary deps -RUN cd {{ paths.environment }} && spack env activate . && spack install && spack gc -y +RUN cd {{ paths.environment }} && spack env activate . && spack install --fail-fast && spack gc -y {% if strip %} # Strip all the binaries diff --git a/share/spack/templates/container/singularity.def b/share/spack/templates/container/singularity.def index 7ba0a3ff1b0..44b22aeae63 100644 --- a/share/spack/templates/container/singularity.def +++ b/share/spack/templates/container/singularity.def @@ -12,7 +12,7 @@ EOF # Install all the required software . /opt/spack/share/spack/setup-env.sh spack env activate . - spack install + spack install --fail-fast spack gc -y spack env deactivate spack env activate --sh -d . >> {{ paths.environment }}/environment_modifications.sh From f42dc4fa4dde1bb91358f27b78b1f8ef5b2cbfbc Mon Sep 17 00:00:00 2001 From: vvolkl Date: Wed, 15 Jul 2020 19:04:05 +0200 Subject: [PATCH 148/149] [root] fix cmake args for r variant (#17487) * [root] fix cmake args for r variant * [root] add readline dependency to +r --- var/spack/repos/builtin/packages/root/package.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/root/package.py b/var/spack/repos/builtin/packages/root/package.py index 0e590e30ae5..8c86971ea53 100644 --- a/var/spack/repos/builtin/packages/root/package.py +++ b/var/spack/repos/builtin/packages/root/package.py @@ -235,6 +235,7 @@ class Root(CMakePackage): 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')) + depends_on('readline', when='+r') depends_on('shadow', when='+shadow') depends_on('sqlite', when='+sqlite') depends_on('tbb', when='+tbb') @@ -381,7 +382,7 @@ def cmake_args(self): ['pythia8'], ['qt', 'qt4'], # See conflicts ['qtgsi', 'qt4'], # See conflicts - ['r', 'R'], + ['r', 'r'], ['rfio', False], ['roofit'], ['root7'], # See conflicts From 4ac1a532f384641c2a9b6ad4493a87b34cc0824a Mon Sep 17 00:00:00 2001 From: Julius-Plehn Date: Wed, 15 Jul 2020 19:05:39 +0200 Subject: [PATCH 149/149] Adds new R package: GSODR (#17529) * R GSODR package * use cloud mirror --- .../builtin/packages/r-countrycode/package.py | 19 +++++++++++++++ .../builtin/packages/r-data-table/package.py | 1 + .../repos/builtin/packages/r-gsodr/package.py | 24 +++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 var/spack/repos/builtin/packages/r-countrycode/package.py create mode 100644 var/spack/repos/builtin/packages/r-gsodr/package.py diff --git a/var/spack/repos/builtin/packages/r-countrycode/package.py b/var/spack/repos/builtin/packages/r-countrycode/package.py new file mode 100644 index 00000000000..b2b07ff2e44 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-countrycode/package.py @@ -0,0 +1,19 @@ +# 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 RCountrycode(RPackage): + """Countrycode standardizes country names, converts them into + ~40 different coding schemes, and assigns region descriptors.""" + + homepage = "https://vincentarelbundock.github.io/countrycode/" + url = "https://cloud.r-project.org/src/contrib/countrycode_1.2.0.tar.gz" + list_url = "https://cloud.r-project.org/src/contrib/Archive/countrycode" + + version('1.2.0', sha256='32c65702dcc33d512ff99f14c12f4e0c48fe7ed7c8aa2f0a64194576d129dd40') + + depends_on('r@2.10:', type=('build', 'run')) diff --git a/var/spack/repos/builtin/packages/r-data-table/package.py b/var/spack/repos/builtin/packages/r-data-table/package.py index b9a008eff08..87d57355417 100644 --- a/var/spack/repos/builtin/packages/r-data-table/package.py +++ b/var/spack/repos/builtin/packages/r-data-table/package.py @@ -16,6 +16,7 @@ class RDataTable(RPackage): url = "https://cloud.r-project.org/src/contrib/data.table_1.10.0.tar.gz" list_url = "https://cloud.r-project.org/src/contrib/Archive/data.table" + version('1.12.8', sha256='d3a75f3a355ff144cc20a476041617e21fcf2a9f79265fd9bbd4693f3671f9dc') version('1.12.2', sha256='db55c18f0d703a8bc1c806dd1f7551bb405cb867717f52ef9dd64405394d22f5') version('1.12.0', sha256='611b112123dbd4ebd5200770fcdfaaeaab622adeb2b290d36018d3092742e3f7') version('1.11.8', sha256='dc427465599cadd848b28a78e2fce3362867847b44148252054385999fe566d9') diff --git a/var/spack/repos/builtin/packages/r-gsodr/package.py b/var/spack/repos/builtin/packages/r-gsodr/package.py new file mode 100644 index 00000000000..8f1fa82e4d4 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-gsodr/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 RGsodr(RPackage): + """A Global Surface Summary of the Day (GSOD) Weather Data Client for R""" + + homepage = "https://docs.ropensci.org/GSODR/" + url = "https://cloud.r-project.org/src/contrib/GSODR_2.1.1.tar.gz" + list_url = "https://cloud.r-project.org/src/contrib/Archive/GSODR" + + version('2.1.1', sha256='dba732e5bd1e367b9d710e6b8924f0c02fa4546202f049124dba02bc2e3329f5') + + depends_on('r@3.5.0:', type=('build', 'run')) + depends_on('r-countrycode', type=('build', 'run')) + depends_on('r-curl', type=('build', 'run')) + depends_on('r-data-table@1.11.6:', type=('build', 'run')) + depends_on('r-future-apply', type=('build', 'run')) + depends_on('r-httr', type=('build', 'run')) + depends_on('r-r-utils', type=('build', 'run'))