ncl: enable building with recent versions of hdf5 (#32842)

This commit is contained in:
Sergey Kosukhin 2022-10-06 16:20:55 +02:00 committed by GitHub
parent f168a44fcb
commit 70a3868168
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 38 deletions

View File

@ -26,12 +26,19 @@ class Ncl(Package):
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)
patch("hdf5.patch", when="@6.4.0")
# ymake-filter's buffer may overflow (upstream as of 6.5.0)
patch("ymake-filter.patch", when="@6.4.0")
# 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:")
# ncl does not build with gcc@10:
# 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
# szip support. We introduce this restriction with the following dependency
# statement.
depends_on("hdf5@:1.10+szip")
depends_on("hdf5+szip")
depends_on("szip")
# ESMF is only required at runtime (for ESMF_regridding.ncl)
depends_on("esmf", type="run")
# In Spack, we also do not have an option to compile netcdf-c without DAP
# support, so we will tell the ncl configuration script that we have it.
# 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)
depends_on("esmf+netcdf", type="run")
# Some of the optional dependencies according to the manual:
depends_on("hdf", when="+hdf4")
@ -138,6 +144,7 @@ def install(self, spec, prefix):
def setup_run_environment(self, env):
env.set("NCARG_ROOT", self.spec.prefix)
env.set("ESMFBINDIR", self.spec["esmf"].prefix.bin)
def prepare_site_config(self):
fc_flags = []
@ -148,12 +155,17 @@ def prepare_site_config(self):
fc_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":
fc_flags.append("-fno-range-check")
c2f_flags.extend(["-lgfortran", "-lm"])
elif self.compiler.name == "intel":
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"])
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?
"y\n",
# 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?
"y\n" if "+gdal" in self.spec else "n\n",
# Build EEMD support (optional) into NCL?

View 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

View File

@ -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