Fix overconstrained HDF5 variants (#29132)

* hdf5: mark +fortran+shared conflict for older version

This version was only activated unintentionally by silo's conflict
statement, but `@1.8.15+shared+fortran+cxx` errors out in configure:

```
CMake Error at CMakeLists.txt:814 (message):
   **** Shared FORTRAN libraries are unsupported ****
```

* silo: refine hdf5 conflicts to avoid building old version

Before this, `silo+hdf5` concretized to 1.10.7 or sometimes 1.8.15. Now
I've verified it works for the following configurations:
```
silo@4.10.2 patches=7b5a1dc,952d3c9
^   hdf5@1.10.7 api=default

silo@4.10.2 patches=7b5a1dc,952d3c9,eb2a3a0
^   hdf5@1.10.8 api=v18

silo@4.10.2 patches=7b5a1dc,952d3c9,eb2a3a0
^   hdf5@1.12.1 api=v110

silo@4.11-bsd patches=eb2a3a0
^   hdf5@1.12.1 api=v110

silo@4.11-bsd patches=eb2a3a0
^   hdf5@1.10.8 api=default

silo@4.11-bsd patches=eb2a3a0
^   hdf5@1.12.1 api=default
```

and verified that the following fail:
```
silo@4.10.2 ^hdf5@1.12.1 api=default
silo@4.11 ^hdf5 api=v18
silo@4.11-bsd ^hdf5@1.13.0 api=v12
silo@4.11-bsd ^hdf5@1.13.0 api=default
```

and have updated the constraints to match. Hdf5 no longer has to be
downgraded to work with Silo.

* silo: fix dependency conflicts

* py-h5py: shorten and add comments to py-h5py hdf5 dependencies

* e4s: remove slightly outdated hdf5 requirement

* e4s: remove excessive hdf5 variant constraints

These I think are holdovers from the old concretizer.

- `hdf5_compat` can be expressed as `+hdf5 ^hdf5@1.8`
- The extra variants on hdf5 shouldn't break conduit
- axom unnecessarily restricts hdf5 version

* conduit: restore hdf5_compat flag
This commit is contained in:
Seth R. Johnson 2022-03-08 13:15:10 -05:00 committed by GitHub
parent 57b27023a4
commit 5bea24526f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 43 additions and 44 deletions

View File

@ -33,8 +33,6 @@ spack:
variants: +bzip2 ~nls +xz variants: +bzip2 ~nls +xz
hdf5: hdf5:
variants: +fortran +hl +shared variants: +fortran +hl +shared
version:
- 1.10.7
libfabric: libfabric:
variants: fabrics=sockets,tcp,udp,rxm variants: fabrics=sockets,tcp,udp,rxm
libunwind: libunwind:

View File

@ -98,9 +98,6 @@ class Axom(CachedCMakePackage, CudaPackage):
depends_on("conduit+hdf5", when="+hdf5") depends_on("conduit+hdf5", when="+hdf5")
depends_on("conduit~hdf5", when="~hdf5") depends_on("conduit~hdf5", when="~hdf5")
# HDF5 needs to be the same as Conduit's
depends_on("hdf5@1.8.19:1.8~cxx~fortran", when="+hdf5")
depends_on("lua", when="+lua") depends_on("lua", when="+lua")
depends_on("scr", when="+scr") depends_on("scr", when="+scr")

View File

@ -77,6 +77,8 @@ class Conduit(CMakePackage):
# set to false for systems that implicitly link mpi # set to false for systems that implicitly link mpi
variant('blt_find_mpi', default=True, description='Use BLT CMake Find MPI logic') variant('blt_find_mpi', default=True, description='Use BLT CMake Find MPI logic')
variant("hdf5", default=True, description="Build Conduit HDF5 support") variant("hdf5", default=True, description="Build Conduit HDF5 support")
# TODO: remove 'compat' variant when VisIt starts distributing HDF5
# binaries
variant("hdf5_compat", default=True, when='+hdf5', variant("hdf5_compat", default=True, when='+hdf5',
description="Build Conduit with HDF5 1.8.x (compatibility mode)") description="Build Conduit with HDF5 1.8.x (compatibility mode)")
variant("silo", default=False, description="Build Conduit Silo support") variant("silo", default=False, description="Build Conduit Silo support")
@ -117,26 +119,18 @@ class Conduit(CMakePackage):
############### ###############
# HDF5 # HDF5
############### ###############
# Note: cxx variant is disabled due to build issue Cyrus
# experienced on BGQ. When on, the static build tries
# to link against shared libs.
#
# Use HDF5 1.8, for wider output compatibly
# variants reflect we are not using hdf5's mpi or fortran features.
depends_on("hdf5~cxx", when="+hdf5")
depends_on("hdf5~shared", when="+hdf5~shared")
depends_on("hdf5@1.8.19:1.8", when="+hdf5+hdf5_compat")
# we need to hand this to conduit so it can properly depends_on("hdf5", when="+hdf5")
# handle downstream linking of zlib reqed by hdf5 depends_on("hdf5~shared", when="+hdf5~shared")
depends_on("zlib", when="+hdf5") # Require older HDF5 to ensure compatibility with VisIt: see #29132
depends_on("hdf5@1.8.0:1.8", when="+hdf5+hdf5_compat")
############### ###############
# Silo # Silo
############### ###############
# we are not using silo's fortran features # we are not using silo's fortran features
depends_on("silo~fortran", when="+silo+shared") depends_on("silo+shared", when="+silo+shared")
depends_on("silo~shared~fortran", when="+silo~shared") depends_on("silo~shared", when="+silo~shared")
############### ###############
# ADIOS # ADIOS
@ -528,7 +522,9 @@ def hostconfig(self, spec, prefix):
if "+hdf5" in spec: if "+hdf5" in spec:
cfg.write(cmake_cache_entry("HDF5_DIR", spec['hdf5'].prefix)) cfg.write(cmake_cache_entry("HDF5_DIR", spec['hdf5'].prefix))
cfg.write(cmake_cache_entry("ZLIB_DIR", spec['zlib'].prefix)) if 'zlib' in spec:
# HDF5 depends on zlib
cfg.write(cmake_cache_entry("ZLIB_DIR", spec['zlib'].prefix))
else: else:
cfg.write("# hdf5 not built by spack \n") cfg.write("# hdf5 not built by spack \n")

View File

@ -108,6 +108,8 @@ class Hdf5(CMakePackage):
conflicts('+java', when='@:1.9') conflicts('+java', when='@:1.9')
# The Java wrappers cannot be built without shared libs. # The Java wrappers cannot be built without shared libs.
conflicts('+java', when='~shared') conflicts('+java', when='~shared')
# Fortran cannot be built with shared
conflicts('+fortran', when='+shared@:1.8')
# There are several officially unsupported combinations of the features: # There are several officially unsupported combinations of the features:
# 1. Thread safety is not guaranteed via high-level C-API but in some cases # 1. Thread safety is not guaranteed via high-level C-API but in some cases

View File

@ -197,9 +197,12 @@ class Lbann(CMakePackage, CudaPackage, ROCmPackage):
depends_on('cnpy', when='+numpy') depends_on('cnpy', when='+numpy')
depends_on('nccl', when='@0.94:0.98.2 +cuda') depends_on('nccl', when='@0.94:0.98.2 +cuda')
depends_on('conduit@0.4.0: +hdf5~hdf5_compat ~python', when='@0.94:0 +conduit') # Note that conduit defaults to +fortran +parmetis +python, none of which are
depends_on('conduit@0.5.0:0.6 +hdf5~hdf5_compat ~python', when='@0.100:0.101 +conduit') # necessary by LBANN: you may want to disable those options in your
depends_on('conduit@0.6.0: +hdf5~hdf5_compat~fortran~parmetis ~python', when='@:0.90,0.99:') # packages.yaml
depends_on('conduit@0.4.0: +hdf5', when='@0.94:0 +conduit')
depends_on('conduit@0.5.0:0.6 +hdf5', when='@0.100:0.101 +conduit')
depends_on('conduit@0.6.0: +hdf5', when='@:0.90,0.99:')
# LBANN can use Python in two modes 1) as part of an extensible framework # LBANN can use Python in two modes 1) as part of an extensible framework
# and 2) to drive the front end model creation and launch # and 2) to drive the front end model creation and launch

View File

@ -36,38 +36,39 @@ class PyH5py(PythonPackage):
variant('mpi', default=True, description='Build with MPI support') variant('mpi', default=True, description='Build with MPI support')
# Python versions # Python versions
depends_on('python@3.6:', type=('build', 'run'), when='@3.0.0:3.1') depends_on('python@3.6:', type=('build', 'run'), when='@3:3.1')
depends_on('python@3.7:', type=('build', 'run'), when='@3.2.0:') depends_on('python@3.7:', type=('build', 'run'), when='@3.2:')
# Build dependencies # Build dependencies
depends_on('py-cython@0.23:', type='build', when='@:2') depends_on('py-cython@0.23:', type='build', when='@:2')
depends_on('py-cython@0.29:', type=('build'), when='@3.0.0:^python@:3.7') depends_on('py-cython@0.29:', type=('build'), when='@3: ^python@:3.7')
depends_on('py-cython@0.29.14:', type=('build'), when='@3.0.0:^python@3.8.0:3.8') depends_on('py-cython@0.29.14:', type=('build'), when='@3: ^python@3.8.0:3.8')
depends_on('py-cython@0.29.15:', type=('build'), when='@3.0.0:^python@3.9.0:') depends_on('py-cython@0.29.15:', type=('build'), when='@3: ^python@3.9.0:')
depends_on('py-pkgconfig', type='build') depends_on('py-pkgconfig', type='build')
depends_on('py-setuptools', type='build') depends_on('py-setuptools', type='build')
depends_on('py-wheel', type='build', when='@3.0.0:') depends_on('py-wheel', type='build', when='@3:')
# Build and runtime dependencies # Build and runtime dependencies
depends_on('py-cached-property@1.5:', type=('build', 'run'), when='^python@:3.7') depends_on('py-cached-property@1.5:', type=('build', 'run'), when='^python@:3.7')
depends_on('py-numpy@1.7:', type=('build', 'run'), when='@:2') depends_on('py-numpy@1.7:', type=('build', 'run'), when='@:2')
depends_on('py-numpy@1.12:', type=('build', 'run'), when='@3.0.0:^python@3.6.0:3.6') depends_on('py-numpy@1.12:', type=('build', 'run'), when='@3: ^python@3.6.0:3.6')
depends_on('py-numpy@1.14.5:', type=('build', 'run'), when='@3.0.0:^python@3.7.0:3.7') depends_on('py-numpy@1.14.5:', type=('build', 'run'), when='@3: ^python@3.7.0:3.7')
depends_on('py-numpy@1.17.5:', type=('build', 'run'), when='@3.0.0:^python@3.8.0:3.8') depends_on('py-numpy@1.17.5:', type=('build', 'run'), when='@3: ^python@3.8.0:3.8')
depends_on('py-numpy@1.19.3:', type=('build', 'run'), when='@3.0.0:^python@3.9.0:') depends_on('py-numpy@1.19.3:', type=('build', 'run'), when='@3: ^python@3.9.0:')
depends_on('py-six', type=('build', 'run'), when='@:2') depends_on('py-six', type=('build', 'run'), when='@:2')
# Link dependencies # Link dependencies (py-h5py v2 cannot build against HDF5 1.12 regardless
depends_on('hdf5@1.8.4:1.11+hl', when='@:2') # of API setting)
depends_on('hdf5@1.8.4:+hl', when='@3.0.0:') depends_on('hdf5@1.8.4:1.11 +hl', when='@:2')
depends_on('hdf5@1.8.4: +hl', when='@3:')
# MPI dependencies # MPI dependencies
depends_on('hdf5+mpi', when='+mpi') depends_on('hdf5+mpi', when='+mpi')
depends_on('mpi', when='+mpi') depends_on('mpi', when='+mpi')
depends_on('py-mpi4py', when='@:2 +mpi', type=('build', 'run')) depends_on('py-mpi4py', when='@:2 +mpi', type=('build', 'run'))
depends_on('py-mpi4py@3.0.0:', when='@3.0.0:3.2+mpi^python@3.0.0:3.7', type=('build', 'run')) depends_on('py-mpi4py@3:', when='@3:3.2+mpi^python@3:3.7', type=('build', 'run'))
depends_on('py-mpi4py@3.0.2:', when='@3.3.0:+mpi^python@3.0.0:3.7', type=('build', 'run')) depends_on('py-mpi4py@3.0.2:', when='@3.3.0:+mpi^python@3:3.7', type=('build', 'run'))
depends_on('py-mpi4py@3.0.3:', when='@3.0.0:+mpi^python@3.8.0:', type=('build', 'run')) depends_on('py-mpi4py@3.0.3:', when='@3:+mpi^python@3.8.0:', type=('build', 'run'))
def setup_build_environment(self, env): def setup_build_environment(self, env):
env.set('HDF5_DIR', self.spec['hdf5'].prefix) env.set('HDF5_DIR', self.spec['hdf5'].prefix)

View File

@ -33,7 +33,7 @@ class Silo(AutotoolsPackage):
variant('mpi', default=True, variant('mpi', default=True,
description='Compile with MPI Compatibility') description='Compile with MPI Compatibility')
variant('hdf5', default=True, variant('hdf5', default=True,
description='Use the HDF5 for database') description='Support HDF5 for database I/O')
variant('hzip', default=True, variant('hzip', default=True,
description='Enable hzip support') description='Enable hzip support')
variant('fpzip', default=True, variant('fpzip', default=True,
@ -45,6 +45,7 @@ class Silo(AutotoolsPackage):
depends_on('libtool', type='build', when='+shared') depends_on('libtool', type='build', when='+shared')
depends_on('mpi', when='+mpi') depends_on('mpi', when='+mpi')
depends_on('hdf5', when='+hdf5') depends_on('hdf5', when='+hdf5')
depends_on('hdf5 api=v110', when='@:4.10 +hdf5 ^hdf5@1.12:')
depends_on('qt+gui~framework@4.8:4.9', when='+silex') depends_on('qt+gui~framework@4.8:4.9', when='+silex')
depends_on('libx11', when='+silex') depends_on('libx11', when='+silex')
# Xmu dependency is required on Ubuntu 18-20 # Xmu dependency is required on Ubuntu 18-20
@ -55,11 +56,12 @@ class Silo(AutotoolsPackage):
patch('remove-mpiposix.patch', when='@4.8:4.10.2') patch('remove-mpiposix.patch', when='@4.8:4.10.2')
patch('H5FD_class_t-terminate.patch', when='@:4.10.2 ^hdf5@1.10.0:') patch('H5FD_class_t-terminate.patch', when='@:4.10.2 ^hdf5@1.10.0:')
# H5EPR_SEMI_COLON.patch should be applied only to silo@4.11 when building # H5EPR_SEMI_COLON.patch should be applied only to silo@4.11 when building
# with hdf5@1.10.8 or later 1.10 or with hdf5@1.12.1 or later 1.12 # with hdf5@1.10.8 or later 1.10 or with hdf5@1.12.1 or later
patch('H5EPR_SEMI_COLON.patch', when='@:4.11 ^hdf5@1.10.8:1.10,1.12.1:1.12') patch('H5EPR_SEMI_COLON.patch', when='@:4.11 ^hdf5@1.10.8:1.10,1.12.1:')
conflicts('hdf5@1.10.8:', when="@:4.10.2") conflicts('^hdf5 api=v18', when="@4.11: +hdf5")
conflicts('hdf5@1.13.0:', when="@:4.11") conflicts('^hdf5 api=v112', when="@:4.10 +hdf5")
conflicts('^hdf5@1.13:', when="+hdf5")
conflicts('+hzip', when="@4.11-bsd") conflicts('+hzip', when="@4.11-bsd")
conflicts('+fpzip', when="@4.11-bsd") conflicts('+fpzip', when="@4.11-bsd")
conflicts('+hzip', when="@4.10.2-bsd") conflicts('+hzip', when="@4.10.2-bsd")