From d098f92c4a8bbcfffba69dacb711e936c732fe6f Mon Sep 17 00:00:00 2001 From: Glenn Johnson Date: Fri, 24 Dec 2021 07:43:13 -0600 Subject: r-hdf5r: use pkg-config to find hdf5 (#27847) * r-hdf5r: use pkg-config to find hdf5 Since hdf5 was switched from autotools to cmake, the hdf5 compiler wrappers can not be used to find and configure hdf5. This PR switches to using pkg-config for configuration. * Add comment about configure patch --- .../repos/builtin/packages/r-hdf5r/configure.patch | 98 ++++++++++++++++++++++ .../repos/builtin/packages/r-hdf5r/package.py | 24 +++--- 2 files changed, 110 insertions(+), 12 deletions(-) create mode 100644 var/spack/repos/builtin/packages/r-hdf5r/configure.patch (limited to 'var') diff --git a/var/spack/repos/builtin/packages/r-hdf5r/configure.patch b/var/spack/repos/builtin/packages/r-hdf5r/configure.patch new file mode 100644 index 0000000000..3997edd0b2 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-hdf5r/configure.patch @@ -0,0 +1,98 @@ +diff -ru a/configure b/configure +--- a/configure 2021-11-15 13:13:34.000000000 -0600 ++++ b/configure 2021-12-07 15:08:23.118115118 -0600 +@@ -3673,43 +3673,15 @@ + with_hdf5="no" + with_hdf5_fortran="no" + else +- HDF5_SHOW=$(eval $H5CC -show) + +- HDF5_CC=$(eval $H5CC -show | $AWK '{print $1}') +- if test "$HDF5_CC" = "ccache"; then +- HDF5_CC=$(eval $H5CC -show | $AWK '{print $2}') +- fi +- +- +- HDF5_VERSION=$(eval $H5CC -showconfig | $GREP 'HDF5 Version:' \ +- | $AWK '{print $3}') ++ HDF5_VERSION=$(eval pkg-config --modversion hdf5) + HDF5_MAJOR_VERSION=$(echo $HDF5_VERSION | $AWK -F \. '{print $1}') + HDF5_MINOR_VERSION=$(echo $HDF5_VERSION | $AWK -F \. {'print $2'}) + HDF5_REVISION_VERSION=$(echo $HDF5_VERSION | $AWK -F \. {'print $3'}) + +- HDF5_tmp_flags=$(eval $H5CC -showconfig \ +- | $GREP 'FLAGS\|Extra libraries:' \ +- | $AWK -F: '{printf("%s "), $2}' ) +- +- HDF5_tmp_inst=$(eval $H5CC -showconfig \ +- | $GREP 'Installation point:' \ +- | $AWK '{print $NF}' ) +- +- HDF5_CPPFLAGS="-I${HDF5_tmp_inst}/include" +- +- for arg in $HDF5_SHOW $HDF5_tmp_flags ; do +- case "$arg" in +- -I*) echo $HDF5_CPPFLAGS | $GREP -e "$arg" 2>&1 >/dev/null \ +- || HDF5_CPPFLAGS="$arg $HDF5_CPPFLAGS" +- ;; +- -L*) echo $HDF5_LDFLAGS | $GREP -e "$arg" 2>&1 >/dev/null \ +- || HDF5_LDFLAGS="$arg $HDF5_LDFLAGS" +- ;; +- -l*) echo $HDF5_LIBS | $GREP -e "$arg" 2>&1 >/dev/null \ +- || HDF5_LIBS="$arg $HDF5_LIBS" +- ;; +- esac +- done ++ ++ HDF5_CPPFLAGS=$(eval pkg-config --cflags hdf5) ++ HDF5_LDFLAGS=$(eval pkg-config --libs hdf5) + + HDF5_LIBS="$HDF5_LIBS -lhdf5" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (version $HDF5_VERSION)" >&5 +@@ -3725,7 +3697,6 @@ + ax_lib_hdf5_save_CPPFLAGS=$CPPFLAGS + ax_lib_hdf5_save_LIBS=$LIBS + ax_lib_hdf5_save_LDFLAGS=$LDFLAGS +- CC=$HDF5_CC + CPPFLAGS=$HDF5_CPPFLAGS + LIBS=$HDF5_LIBS + LDFLAGS=$HDF5_LDFLAGS +@@ -3893,20 +3864,6 @@ + with_hdf5_fortran="yes" + + +- for arg in `$H5FC -show` +- do +- case "$arg" in #( +- -I*) echo $HDF5_FFLAGS | $GREP -e "$arg" >/dev/null \ +- || HDF5_FFLAGS="$arg $HDF5_FFLAGS" +- ;;#( +- -L*) echo $HDF5_FFLAGS | $GREP -e "$arg" >/dev/null \ +- || HDF5_FFLAGS="$arg $HDF5_FFLAGS" +- echo $HDF5_FFLAGS | $GREP -e "-I${arg#-L}" >/dev/null \ +- || HDF5_FFLAGS="-I${arg#-L} $HDF5_FFLAGS" +- ;; +- esac +- done +- + for arg in $HDF5_LIBS + do + case "$arg" in #( +@@ -4384,8 +4341,6 @@ + as_fn_error $? "${GREP} does not support option -o" "$LINENO" 5 + fi + +- LIBS=`${H5CC} -show | ${GREP} -o " \-[lL][^[:space:]]\+" | tr "\n" " "` +- + + HDF5R_LIBS="${LIBS} -L. -lhdf5_hl -lhdf5 -lz -lm" + +@@ -4447,8 +4402,6 @@ + + + +- HDF5R_CPPFLAGS=`${H5CC} -show -c myconftest.c | ${GREP} -o "\-I[^[:space:]]\+" | tr "\n" " "` +- + rm -f myconftest.c + fi + diff --git a/var/spack/repos/builtin/packages/r-hdf5r/package.py b/var/spack/repos/builtin/packages/r-hdf5r/package.py index 860270bafe..d0bb6ff8d6 100644 --- a/var/spack/repos/builtin/packages/r-hdf5r/package.py +++ b/var/spack/repos/builtin/packages/r-hdf5r/package.py @@ -20,21 +20,21 @@ class RHdf5r(RPackage): url = "https://cloud.r-project.org/src/contrib/hdf5r_1.2.0.tar.gz" list_url = "https://cloud.r-project.org/src/contrib/Archive/hdf5r" + version('1.3.5', + sha256='87b75173ab226a9fbaa5b28289349f3c56b638629560a172994b8f9323c1622f') version('1.3.3', sha256='a0f83cbf21563e81dbd1a1bd8379623ed0c9c4df4e094c75013abfd7a5271545') version('1.2.0', sha256='58813e334fd3f9040038345a7186e5cb02090898883ac192477a76a5b8b4fe81') depends_on('r@3.2.2:', type=('build', 'run')) depends_on('r-r6', type=('build', 'run')) depends_on('r-bit64', type=('build', 'run')) - depends_on('hdf5@1.8.13:') - - def configure_args(self): - if 'mpi' in self.spec: - args = [ - '--with-hdf5={0}/h5pcc'.format(self.spec['hdf5'].prefix.bin), - ] - else: - args = [ - '--with-hdf5={0}/h5cc'.format(self.spec['hdf5'].prefix.bin), - ] - return args + depends_on('hdf5@1.8.13:+hl') + depends_on('pkgconfig', type='build') + + # The configure script in the package uses the hdf5 h5cc compiler wrapper + # in the PATH to configure hdf5. That works fine if hdf5 was built with + # autotools but the hdf5 package in Spack is built with cmake. The compiler + # wrapper built with cmake does not support the '-show' or '-showconfig' + # flags. The following patch replaces those commands in the configure + # script with pkg-config commands. + patch('configure.patch') -- cgit v1.2.3-70-g09d2