From d469224970bbe8853b6dae7965441caf8959549c Mon Sep 17 00:00:00 2001 From: Janne Blomqvist <janne.blomqvist@aalto.fi> Date: Wed, 12 Jun 2013 12:34:08 -0700 Subject: [PATCH] Replace local hdf5.m4 script with gnu's --- auxdir/ax_lib_hdf5.m4 | 305 ++++++++++++++++++++++++++++++++++++++++++ auxdir/x_ac_hdf5.m4 | 69 ---------- configure.ac | 4 +- 3 files changed, 308 insertions(+), 70 deletions(-) create mode 100644 auxdir/ax_lib_hdf5.m4 delete mode 100644 auxdir/x_ac_hdf5.m4 diff --git a/auxdir/ax_lib_hdf5.m4 b/auxdir/ax_lib_hdf5.m4 new file mode 100644 index 00000000000..f4ab86614b1 --- /dev/null +++ b/auxdir/ax_lib_hdf5.m4 @@ -0,0 +1,305 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_lib_hdf5.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_LIB_HDF5([serial/parallel]) +# +# DESCRIPTION +# +# This macro provides tests of the availability of HDF5 library. +# +# The optional macro argument should be either 'serial' or 'parallel'. The +# former only looks for serial HDF5 installations via h5cc. The latter +# only looks for parallel HDF5 installations via h5pcc. If the optional +# argument is omitted, serial installations will be preferred over +# parallel ones. +# +# The macro adds a --with-hdf5 option accepting one of three values: +# +# no - do not check for the HDF5 library. +# yes - do check for HDF5 library in standard locations. +# path - complete path to the HDF5 helper script h5cc or h5pcc. +# +# If HDF5 is successfully found, this macro calls +# +# AC_SUBST(HDF5_VERSION) +# AC_SUBST(HDF5_CC) +# AC_SUBST(HDF5_CFLAGS) +# AC_SUBST(HDF5_CPPFLAGS) +# AC_SUBST(HDF5_LDFLAGS) +# AC_SUBST(HDF5_LIBS) +# AC_SUBST(HDF5_FC) +# AC_SUBST(HDF5_FFLAGS) +# AC_SUBST(HDF5_FLIBS) +# AC_DEFINE(HAVE_HDF5) +# +# and sets with_hdf5="yes". Additionally, the macro sets +# with_hdf5_fortran="yes" if a matching Fortran wrapper script is found. +# Note that Autconf's Fortran support is not used to perform this check. +# H5CC and H5FC will contain the appropriate serial or parallel HDF5 +# wrapper script locations. +# +# If HDF5 is disabled or not found, this macros sets with_hdf5="no" and +# with_hdf5_fortran="no". +# +# Your configuration script can test $with_hdf to take any further +# actions. HDF5_{C,CPP,LD}FLAGS may be used when building with C or C++. +# HDF5_F{FLAGS,LIBS} should be used when building Fortran applications. +# +# To use the macro, one would code one of the following in "configure.ac" +# before AC_OUTPUT: +# +# 1) dnl Check for HDF5 support +# AX_LIB_HDF5() +# +# 2) dnl Check for serial HDF5 support +# AX_LIB_HDF5([serial]) +# +# 3) dnl Check for parallel HDF5 support +# AX_LIB_HDF5([parallel]) +# +# One could test $with_hdf5 for the outcome or display it as follows +# +# echo "HDF5 support: $with_hdf5" +# +# You could also for example, override the default CC in "configure.ac" to +# enforce compilation with the compiler that HDF5 uses: +# +# AX_LIB_HDF5([parallel]) +# if test "$with_hdf5" = "yes"; then +# CC="$HDF5_CC" +# else +# AC_MSG_ERROR([Unable to find HDF5, we need parallel HDF5.]) +# fi +# +# LICENSE +# +# Copyright (c) 2009 Timothy Brown <tbrown@freeshell.org> +# Copyright (c) 2010 Rhys Ulerich <rhys.ulerich@gmail.com> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 8 + +AC_DEFUN([AX_LIB_HDF5], [ + +AC_REQUIRE([AC_PROG_SED]) +AC_REQUIRE([AC_PROG_AWK]) +AC_REQUIRE([AC_PROG_GREP]) + +dnl Check first argument is one of the recognized values. +dnl Fail eagerly if is incorrect as this simplifies case statements below. +if test "m4_normalize(m4_default([$1],[]))" = "" ; then + : # Recognized value +elif test "m4_normalize(m4_default([$1],[]))" = "serial" ; then + : # Recognized value +elif test "m4_normalize(m4_default([$1],[]))" = "parallel"; then + : # Recognized value +else + AC_MSG_ERROR([ +Unrecognized value for AX[]_LIB_HDF5 within configure.ac. +If supplied, argument 1 must be either 'serial' or 'parallel'. +]) +fi + +dnl Add a default --with-hdf5 configuration option. +AC_ARG_WITH([hdf5], + AS_HELP_STRING( + [--with-hdf5=[yes/no/PATH]], + m4_case(m4_normalize([$1]), + [serial], [location of h5cc for serial HDF5 configuration], + [parallel], [location of h5pcc for parallel HDF5 configuration], + [location of h5cc or h5pcc for HDF5 configuration]) + ), + [if test "$withval" = "no"; then + with_hdf5="no" + elif test "$withval" = "yes"; then + with_hdf5="yes" + else + with_hdf5="yes" + H5CC="$withval" + fi], + [with_hdf5="yes"] +) + +dnl Set defaults to blank +HDF5_CC="" +HDF5_VERSION="" +HDF5_CFLAGS="" +HDF5_CPPFLAGS="" +HDF5_LDFLAGS="" +HDF5_LIBS="" +HDF5_FC="" +HDF5_FFLAGS="" +HDF5_FLIBS="" + +dnl Try and find hdf5 compiler tools and options. +if test "$with_hdf5" = "yes"; then + if test -z "$H5CC"; then + dnl Check to see if H5CC is in the path. + AC_PATH_PROGS( + [H5CC], + m4_case(m4_normalize([$1]), + [serial], [h5cc], + [parallel], [h5pcc], + [h5cc h5pcc]), + []) + else + AC_MSG_CHECKING([Using provided HDF5 C wrapper]) + AC_MSG_RESULT([$H5CC]) + fi + AC_MSG_CHECKING([for HDF5 libraries]) + if test ! -f "$H5CC" || test ! -x "$H5CC"; then + AC_MSG_RESULT([no]) + AC_MSG_WARN(m4_case(m4_normalize([$1]), + [serial], [ +Unable to locate serial HDF5 compilation helper script 'h5cc'. +Please specify --with-hdf5=<LOCATION> as the full path to h5cc. +HDF5 support is being disabled (equivalent to --with-hdf5=no). +], [parallel],[ +Unable to locate parallel HDF5 compilation helper script 'h5pcc'. +Please specify --with-hdf5=<LOCATION> as the full path to h5pcc. +HDF5 support is being disabled (equivalent to --with-hdf5=no). +], [ +Unable to locate HDF5 compilation helper scripts 'h5cc' or 'h5pcc'. +Please specify --with-hdf5=<LOCATION> as the full path to h5cc or h5pcc. +HDF5 support is being disabled (equivalent to --with-hdf5=no). +])) + with_hdf5="no" + with_hdf5_fortran="no" + else + dnl Get the h5cc output + HDF5_SHOW=$(eval $H5CC -show) + + dnl Get the actual compiler used + HDF5_CC=$(eval $H5CC -show | $AWK '{print $[]1}') + + dnl h5cc provides both AM_ and non-AM_ options + dnl depending on how it was compiled either one of + dnl these are empty. Lets roll them both into one. + + dnl Look for "HDF5 Version: X.Y.Z" + HDF5_VERSION=$(eval $H5CC -showconfig | $GREP 'HDF5 Version:' \ + | $AWK '{print $[]3}') + + dnl A ideal situation would be where everything we needed was + dnl in the AM_* variables. However most systems are not like this + dnl and seem to have the values in the non-AM variables. + dnl + dnl We try the following to find the flags: + dnl (1) Look for "NAME:" tags + dnl (2) Look for "H5_NAME:" tags + dnl (3) Look for "AM_NAME:" tags + dnl + HDF5_tmp_flags=$(eval $H5CC -showconfig \ + | $GREP 'FLAGS\|Extra libraries:' \ + | $AWK -F: '{printf("%s "), $[]2}' ) + + dnl Find the installation directory and append include/ + HDF5_tmp_inst=$(eval $H5CC -showconfig \ + | $GREP 'Installation point:' \ + | $AWK -F: '{print $[]2}' ) + + dnl Add this to the CPPFLAGS + HDF5_CPPFLAGS="-I${HDF5_tmp_inst}/include" + + dnl Now sort the flags out based upon their prefixes + 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_LIBS="$HDF5_LIBS -lhdf5" + AC_MSG_RESULT([yes (version $[HDF5_VERSION])]) + + dnl See if we can compile + ax_lib_hdf5_save_CC=$CC + 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 + AC_CHECK_HEADER([hdf5.h], [ac_cv_hadf5_h=yes], [ac_cv_hadf5_h=no]) + AC_CHECK_LIB([hdf5], [H5Fcreate], [ac_cv_libhdf5=yes], + [ac_cv_libhdf5=no]) + if test "$ac_cv_hadf5_h" = "no" && test "$ac_cv_libhdf5" = "no" ; then + AC_MSG_WARN([Unable to compile HDF5 test program]) + fi + dnl Look for HDF5's high level library + AC_HAVE_LIBRARY([hdf5_hl], [HDF5_LIBS="$HDF5_LIBS -lhdf5_hl"], [], []) + + CC=$ax_lib_hdf5_save_CC + LIBS=$ax_lib_hdf5_save_LIBS + LDFLAGS=$ax_lib_hdf5_save_LDFLAGS + + AC_MSG_CHECKING([for matching HDF5 Fortran wrapper]) + dnl Presume HDF5 Fortran wrapper is just a name variant from H5CC + H5FC=$(eval echo -n $H5CC | $SED -n 's/cc$/fc/p') + if test -x "$H5FC"; then + AC_MSG_RESULT([$H5FC]) + with_hdf5_fortran="yes" + AC_SUBST([H5FC]) + + dnl Again, pry any remaining -Idir/-Ldir from compiler wrapper + 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" + dnl HDF5 installs .mod files in with libraries, + dnl but some compilers need to find them with -I + echo $HDF5_FFLAGS | $GREP -e "-I${arg#-L}" >/dev/null \ + || HDF5_FFLAGS="-I${arg#-L} $HDF5_FFLAGS" + ;; + esac + done + + dnl Make Fortran link line by inserting Fortran libraries + for arg in $HDF5_LIBS + do + case "$arg" in #( + -lhdf5_hl) HDF5_FLIBS="$HDF5_FLIBS -lhdf5hl_fortran $arg" + ;; #( + -lhdf5) HDF5_FLIBS="$HDF5_FLIBS -lhdf5_fortran $arg" + ;; #( + *) HDF5_FLIBS="$HDF5_FLIBS $arg" + ;; + esac + done + else + AC_MSG_RESULT([no]) + with_hdf5_fortran="no" + fi + + AC_SUBST([HDF5_VERSION]) + AC_SUBST([HDF5_CC]) + AC_SUBST([HDF5_CFLAGS]) + AC_SUBST([HDF5_CPPFLAGS]) + AC_SUBST([HDF5_LDFLAGS]) + AC_SUBST([HDF5_LIBS]) + AC_SUBST([HDF5_FC]) + AC_SUBST([HDF5_FFLAGS]) + AC_SUBST([HDF5_FLIBS]) + AC_DEFINE([HAVE_HDF5], [1], [Defined if you have HDF5 support]) + fi +fi +]) diff --git a/auxdir/x_ac_hdf5.m4 b/auxdir/x_ac_hdf5.m4 deleted file mode 100644 index ddcd3e902f2..00000000000 --- a/auxdir/x_ac_hdf5.m4 +++ /dev/null @@ -1,69 +0,0 @@ -##***************************************************************************** -# COPIER: -# Rod Schultz <rod.schultz@bull.com> -# from example writtey by -# Morris Jette <jette1@llnl.gov> -# -# SYNOPSIS: -# X_AC_HDF5 -# -# DESCRIPTION: -# Determine if the HDF5 libraries exists. -##***************************************************************************** - -AC_DEFUN([X_AC_HDF5], -[ - _x_ac_hdf5_dirs="/usr /usr/local" - _x_ac_hdf5_libs="lib64 lib" - - AC_ARG_WITH( - [hdf5], - AS_HELP_STRING(--with-hdf5=PATH,Specify path to hdf5 installation), - [_x_ac_hdf5_dirs="$withval $_x_ac_hdf5_dirs"]) - - AC_CACHE_CHECK( - [for hdf5 installation], - [x_ac_cv_hdf5_dir], - [ - for d in $_x_ac_hdf5_dirs; do - test -d "$d" || continue - test -d "$d/include" || continue - test -f "$d/include/hdf5.h" || continue - for bit in $_x_ac_hdf5_libs; do - test -d "$d/$bit" || continue - _x_ac_hdf5_cppflags_save="$CPPFLAGS" - CPPFLAGS="-I$d/include $CPPFLAGS" - _x_ac_hdf5_libs_save="$LIBS" - LIBS="-L$d/$bit -lhdf5 $LIBS" - AC_LINK_IFELSE( - [AC_LANG_CALL([], H5close)], - AS_VAR_SET(x_ac_cv_hdf5_dir, $d)) - CPPFLAGS="$_x_ac_hdf5_cppflags_save" - LIBS="$_x_ac_hdf5_libs_save" - test -n "$x_ac_cv_hdf5_dir" && break - done - test -n "$x_ac_cv_hdf5_dir" && break - done - ]) - if test -z "$x_ac_cv_hdf5_dir"; then - AC_MSG_WARN([unable to locate hdf5 installation]) - else - # This include of mpi is here just so we get a location of mpi.h - # There is currently (what we consider) a bug in the way ubuntu - # packages the libhdf5-dev libs. If you install one version it conflicts - # and thus over writes the other version (openmpi vs. mpich2 etc) - # This breaks the compile of our lib since we don't typically have the - # mpi in our path. Ubuntu is the only version of linux we have seen this - # problem, others install the libhdf5-dev headers in the mpi's include - # dir, if it ever gets resolved in some way remove this include. - HDF5_CPPFLAGS="-I$x_ac_cv_hdf5_dir/include -I/usr/include/mpi" - HDF5_LDFLAGS="-Wl,-rpath -Wl,$x_ac_cv_hdf5_dir/$bit -L$x_ac_cv_hdf5_dir/$bit" - HDF5_LIBS="-lhdf5" - fi - - AC_SUBST(HDF5_LIBS) - AC_SUBST(HDF5_CPPFLAGS) - AC_SUBST(HDF5_LDFLAGS) - AM_CONDITIONAL(BUILD_HDF5, test -n "$x_ac_cv_hdf5_dir") - -]) diff --git a/configure.ac b/configure.ac index e37b75434ff..76731e4ab12 100644 --- a/configure.ac +++ b/configure.ac @@ -222,7 +222,9 @@ X_AC_DIMENSIONS X_AC_CFLAGS X_AC_OFED -X_AC_HDF5 + +AX_LIB_HDF5() +AM_CONDITIONAL(BUILD_HDF5, test "$with_hdf5" = "yes") X_AC_HWLOC X_AC_FREEIPMI X_AC_XCPU -- GitLab