ncl: enable building with recent versions of hdf5 (#32842)
This commit is contained in:
parent
f168a44fcb
commit
70a3868168
@ -26,12 +26,19 @@ class Ncl(Package):
|
|||||||
|
|
||||||
patch("for_aarch64.patch", when="target=aarch64:")
|
patch("for_aarch64.patch", when="target=aarch64:")
|
||||||
|
|
||||||
patch("spack_ncl.patch")
|
# Use Spack config file, which we generate during the installation:
|
||||||
|
patch("set_spack_config.patch")
|
||||||
# Make ncl compile with hdf5 1.10 (upstream as of 6.5.0)
|
# Make ncl compile with hdf5 1.10 (upstream as of 6.5.0)
|
||||||
patch("hdf5.patch", when="@6.4.0")
|
patch("hdf5.patch", when="@6.4.0")
|
||||||
# ymake-filter's buffer may overflow (upstream as of 6.5.0)
|
# ymake-filter's buffer may overflow (upstream as of 6.5.0)
|
||||||
patch("ymake-filter.patch", when="@6.4.0")
|
patch("ymake-filter.patch", when="@6.4.0")
|
||||||
# ymake additional local library and includes will be filtered improperly
|
# ymake additional local library and includes will be filtered improperly
|
||||||
|
# WARNING: it is tempting to replace '-Dlinux=linux -Dx86_64=x86_64' with '-Ulinux -Ux86_64'
|
||||||
|
# to get rid of 'error: detected recursion whilst expanding macro "linux"' but that breaks
|
||||||
|
# the building because the Makefile generation logic depends on whether those macros are
|
||||||
|
# defined. Also, the errors can be ignored since "GCC detects when it is expanding recursive
|
||||||
|
# macros, emits an error message, and *continues* after the offending macro invocation"
|
||||||
|
# (see https://gcc.gnu.org/onlinedocs/cpp/Traditional-macros.html#Traditional-macros).
|
||||||
patch("ymake.patch", when="@6.4.0:")
|
patch("ymake.patch", when="@6.4.0:")
|
||||||
# ncl does not build with gcc@10:
|
# ncl does not build with gcc@10:
|
||||||
# https://github.com/NCAR/ncl/issues/123
|
# https://github.com/NCAR/ncl/issues/123
|
||||||
@ -83,14 +90,13 @@ class Ncl(Package):
|
|||||||
# support for netcdf-4, but the script assumes that hdf5 is compiled with
|
# support for netcdf-4, but the script assumes that hdf5 is compiled with
|
||||||
# szip support. We introduce this restriction with the following dependency
|
# szip support. We introduce this restriction with the following dependency
|
||||||
# statement.
|
# statement.
|
||||||
depends_on("hdf5@:1.10+szip")
|
depends_on("hdf5+szip")
|
||||||
depends_on("szip")
|
depends_on("szip")
|
||||||
|
|
||||||
# ESMF is only required at runtime (for ESMF_regridding.ncl)
|
# ESMF is only required at runtime (for ESMF_regridding.ncl)
|
||||||
depends_on("esmf", type="run")
|
# There might be more requirements to ESMF but at least the NetCDF support is required to run
|
||||||
|
# the examples (see https://www.ncl.ucar.edu/Applications/ESMF.shtml)
|
||||||
# In Spack, we also do not have an option to compile netcdf-c without DAP
|
depends_on("esmf+netcdf", type="run")
|
||||||
# support, so we will tell the ncl configuration script that we have it.
|
|
||||||
|
|
||||||
# Some of the optional dependencies according to the manual:
|
# Some of the optional dependencies according to the manual:
|
||||||
depends_on("hdf", when="+hdf4")
|
depends_on("hdf", when="+hdf4")
|
||||||
@ -138,6 +144,7 @@ def install(self, spec, prefix):
|
|||||||
|
|
||||||
def setup_run_environment(self, env):
|
def setup_run_environment(self, env):
|
||||||
env.set("NCARG_ROOT", self.spec.prefix)
|
env.set("NCARG_ROOT", self.spec.prefix)
|
||||||
|
env.set("ESMFBINDIR", self.spec["esmf"].prefix.bin)
|
||||||
|
|
||||||
def prepare_site_config(self):
|
def prepare_site_config(self):
|
||||||
fc_flags = []
|
fc_flags = []
|
||||||
@ -148,12 +155,17 @@ def prepare_site_config(self):
|
|||||||
fc_flags.append(self.compiler.openmp_flag)
|
fc_flags.append(self.compiler.openmp_flag)
|
||||||
cc_flags.append(self.compiler.openmp_flag)
|
cc_flags.append(self.compiler.openmp_flag)
|
||||||
|
|
||||||
|
if self.spec.satisfies("^hdf5@1.11:"):
|
||||||
|
cc_flags.append("-DH5_USE_110_API")
|
||||||
|
|
||||||
if self.compiler.name == "gcc":
|
if self.compiler.name == "gcc":
|
||||||
fc_flags.append("-fno-range-check")
|
fc_flags.append("-fno-range-check")
|
||||||
c2f_flags.extend(["-lgfortran", "-lm"])
|
c2f_flags.extend(["-lgfortran", "-lm"])
|
||||||
elif self.compiler.name == "intel":
|
elif self.compiler.name == "intel":
|
||||||
fc_flags.append("-fp-model precise")
|
fc_flags.append("-fp-model precise")
|
||||||
cc_flags.append("-fp-model precise" " -std=c99" " -D_POSIX_C_SOURCE=2 -D_GNU_SOURCE")
|
cc_flags.extend(
|
||||||
|
["-fp-model precise", "-std=c99", "-D_POSIX_C_SOURCE=2", "-D_GNU_SOURCE"]
|
||||||
|
)
|
||||||
c2f_flags.extend(["-lifcore", "-lifport"])
|
c2f_flags.extend(["-lifcore", "-lifport"])
|
||||||
|
|
||||||
if self.spec.satisfies("%gcc@10:"):
|
if self.spec.satisfies("%gcc@10:"):
|
||||||
@ -238,7 +250,7 @@ def prepare_install_config(self):
|
|||||||
# If you are using NetCDF V4.x, did you enable NetCDF-4 support?
|
# If you are using NetCDF V4.x, did you enable NetCDF-4 support?
|
||||||
"y\n",
|
"y\n",
|
||||||
# Did you build NetCDF with OPeNDAP support?
|
# Did you build NetCDF with OPeNDAP support?
|
||||||
"y\n",
|
"y\n" if self.spec.satisfies("^netcdf-c+dap") else "n\n",
|
||||||
# Build GDAL support (optional) into NCL?
|
# Build GDAL support (optional) into NCL?
|
||||||
"y\n" if "+gdal" in self.spec else "n\n",
|
"y\n" if "+gdal" in self.spec else "n\n",
|
||||||
# Build EEMD support (optional) into NCL?
|
# Build EEMD support (optional) into NCL?
|
||||||
|
12
var/spack/repos/builtin/packages/ncl/set_spack_config.patch
Normal file
12
var/spack/repos/builtin/packages/ncl/set_spack_config.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
--- a/config/ymake
|
||||||
|
+++ b/config/ymake
|
||||||
|
@@ -535,6 +535,9 @@ default:
|
||||||
|
breaksw
|
||||||
|
endsw
|
||||||
|
|
||||||
|
+# We want to have our own definitions for spack
|
||||||
|
+set sysincs = Spack
|
||||||
|
+
|
||||||
|
if ($?sysincs == 0) then
|
||||||
|
echo "$0 : Unknown System Type - No Config file" > /dev/tty
|
||||||
|
exit 1
|
@ -1,30 +0,0 @@
|
|||||||
--- a/config/ymake 2015-03-16 22:21:42.000000000 +0100
|
|
||||||
+++ b/config/ymake 2016-10-14 13:44:49.530646098 +0200
|
|
||||||
@@ -537,0 +538,3 @@
|
|
||||||
+# We want to have our own definitions for spack
|
|
||||||
+set sysincs = Spack
|
|
||||||
+
|
|
||||||
--- a/Configure 2015-03-16 22:22:17.000000000 +0100
|
|
||||||
+++ b/Configure 2016-10-14 13:49:42.157631106 +0200
|
|
||||||
@@ -1137,5 +1137,13 @@
|
|
||||||
- if (! -d $incs[1]) then
|
|
||||||
- echo " *** Warning: <$incs[1]> does not exist"
|
|
||||||
- echo ""
|
|
||||||
- goto proc_locincdir
|
|
||||||
- else
|
|
||||||
+
|
|
||||||
+ # We don't want our path(s) to be preprocessed by cpp
|
|
||||||
+ # inside ymake script. That is why we pass them in quotes (')
|
|
||||||
+ # to this script. But if we do so, the following condition
|
|
||||||
+ # is always false. That is why we comment it out and promise
|
|
||||||
+ # to pass only correct path(s). You might want to do the same
|
|
||||||
+ # thing for the libraries search path(s).
|
|
||||||
+
|
|
||||||
+ # if (! -d $incs[1]) then
|
|
||||||
+ # echo " *** Warning: <$incs[1]> does not exist"
|
|
||||||
+ # echo ""
|
|
||||||
+ # goto proc_locincdir
|
|
||||||
+ # else
|
|
||||||
@@ -1143 +1151 @@
|
|
||||||
- endif
|
|
||||||
+ # endif
|
|
Loading…
Reference in New Issue
Block a user