diff options
author | Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> | 2020-08-22 23:06:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-22 16:06:17 -0500 |
commit | 9fdb945383471eaaceb98652837ba1a314477d36 (patch) | |
tree | 20f5c03b884f16f7c8a661c560922dac6fe3d58c | |
parent | dc5176fbae424fbec701e4a30dd3f1d13fc27e3e (diff) | |
download | spack-9fdb945383471eaaceb98652837ba1a314477d36.tar.gz spack-9fdb945383471eaaceb98652837ba1a314477d36.tar.bz2 spack-9fdb945383471eaaceb98652837ba1a314477d36.tar.xz spack-9fdb945383471eaaceb98652837ba1a314477d36.zip |
NetCDF: fix constraints. (#16719)
-rw-r--r-- | var/spack/repos/builtin/packages/netcdf-c/package.py | 19 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/netcdf-fortran/package.py | 40 |
2 files changed, 19 insertions, 40 deletions
diff --git a/var/spack/repos/builtin/packages/netcdf-c/package.py b/var/spack/repos/builtin/packages/netcdf-c/package.py index 6d149926bc..610143491b 100644 --- a/var/spack/repos/builtin/packages/netcdf-c/package.py +++ b/var/spack/repos/builtin/packages/netcdf-c/package.py @@ -97,26 +97,15 @@ class NetcdfC(AutotoolsPackage): # High-level API of HDF5 1.8.9 or later is required for netCDF-4 support: # http://www.unidata.ucar.edu/software/netcdf/docs/getting_and_building_netcdf.html - depends_on('hdf5@1.8.9:+hl~mpi', when='~mpi') - depends_on('hdf5@1.8.9:+hl+mpi', when='+mpi') + depends_on('hdf5@1.8.9:+hl') # Starting version 4.4.0, it became possible to disable parallel I/O even # if HDF5 supports it. For previous versions of the library we need - # HDF5 without mpi support to disable parallel I/O. - # The following doesn't work if hdf5+mpi by default and netcdf-c~mpi is - # specified in packages.yaml - # depends_on('hdf5~mpi', when='@:4.3~mpi') - # Thus, we have to introduce a conflict - conflicts('~mpi', when='@:4.3^hdf5+mpi', - msg='netcdf-c@:4.3~mpi requires hdf5~mpi') + # HDF5 without mpi support to disable parallel I/O: + depends_on('hdf5~mpi', when='@:4.3~mpi') # We need HDF5 with mpi support to enable parallel I/O. - # The following doesn't work if hdf5~mpi by default and netcdf-c+mpi is - # specified in packages.yaml - # depends_on('hdf5+mpi', when='+mpi') - # Thus, we have to introduce a conflict - conflicts('+mpi', when='^hdf5~mpi', - msg='netcdf-c+mpi requires hdf5+mpi') + depends_on('hdf5+mpi', when='+mpi') # NetCDF 4.4.0 and prior have compatibility issues with HDF5 1.10 and later # https://github.com/Unidata/netcdf-c/issues/250 diff --git a/var/spack/repos/builtin/packages/netcdf-fortran/package.py b/var/spack/repos/builtin/packages/netcdf-fortran/package.py index 74347136dd..d04dd73ca0 100644 --- a/var/spack/repos/builtin/packages/netcdf-fortran/package.py +++ b/var/spack/repos/builtin/packages/netcdf-fortran/package.py @@ -22,19 +22,12 @@ class NetcdfFortran(AutotoolsPackage): version('4.4.4', sha256='b2d395175f8d283e68c8be516e231a96b191ade67ad0caafaf7fa01b1e6b5d75') version('4.4.3', sha256='330373aa163d5931e475b5e83da5c1ad041e855185f24e6a8b85d73b48d6cda9') - variant('mpi', default=True, - description='Enable parallel I/O for netcdf-4') variant('pic', default=True, description='Produce position-independent code (for shared libs)') variant('shared', default=True, description='Enable shared library') variant('doc', default=False, description='Enable building docs') - # We need to build with MPI wrappers if parallel I/O features is enabled: - # https://www.unidata.ucar.edu/software/netcdf/docs/building_netcdf_fortran.html - depends_on('mpi', when='+mpi') - - depends_on('netcdf-c~mpi~parallel-netcdf', when='~mpi') - depends_on('netcdf-c+mpi', when='+mpi') + depends_on('netcdf-c') depends_on('doxygen', when='+doc', type='build') # The default libtool.m4 is too old to handle NAG compiler properly: @@ -66,17 +59,15 @@ class NetcdfFortran(AutotoolsPackage): def flag_handler(self, name, flags): config_flags = None - if '+pic' in self.spec: - # Unlike NetCDF-C, we add PIC flag only when +pic. Adding the - # flags also when ~shared would make it impossible to build a - # static-only version of the library with NAG. - if name == 'cflags': - config_flags = [self.compiler.cc_pic_flag] - elif name == 'fflags': - config_flags = [self.compiler.f77_pic_flag] - - if name == 'cppflags': - config_flags = [self.spec['netcdf-c'].headers.cpp_flags] + if name == 'cflags': + if '+pic' in self.spec: + flags.append(self.compiler.cc_pic_flag) + elif name == 'fflags': + if '+pic' in self.spec: + flags.append(self.compiler.f77_pic_flag) + if self.spec.satisfies('%gcc@10:'): + # https://github.com/Unidata/netcdf-fortran/issues/212 + flags.append('-fallow-argument-mismatch') elif name == 'ldflags': # We need to specify LDFLAGS to get correct dependency_libs # in libnetcdff.la, so packages that use libtool for linking @@ -84,11 +75,6 @@ class NetcdfFortran(AutotoolsPackage): # building takes place outside of Spack environment, i.e. # without Spack's compiler wrappers. config_flags = [self.spec['netcdf-c'].libs.search_flags] - elif name == 'fflags' and self.spec.satisfies('%gcc@10:'): - # https://github.com/Unidata/netcdf-fortran/issues/212 - if config_flags is None: - config_flags = [] - config_flags.append('-fallow-argument-mismatch') return flags, None, config_flags @@ -122,7 +108,11 @@ class NetcdfFortran(AutotoolsPackage): config_args = self.enable_or_disable('shared') config_args.append('--enable-static') - if '+mpi' in self.spec: + # We need to build with MPI wrappers if either of the parallel I/O + # features is enabled in netcdf-c: + # https://www.unidata.ucar.edu/software/netcdf/docs/building_netcdf_fortran.html + netcdf_c_spec = self.spec['netcdf-c'] + if '+mpi' in netcdf_c_spec or '+parallel-netcdf' in netcdf_c_spec: config_args.append('CC=%s' % self.spec['mpi'].mpicc) config_args.append('FC=%s' % self.spec['mpi'].mpifc) config_args.append('F77=%s' % self.spec['mpi'].mpif77) |