quantum-espresso/install/m4/x_ac_qe_hdf5.m4

199 lines
6.2 KiB
Plaintext

# Copyright (C) 2001-2016 Quantum ESPRESSO Foundation
AC_DEFUN([X_AC_QE_HDF5], [
AC_ARG_WITH(hdf5,
[AS_HELP_STRING([--with-hdf5],
[(no|<path>) Use HDF5, a valid <path> must be specified (default: no)])],
[if test "$withval" = "no" ; then
with_hdf5=0
else
with_hdf5_path="$withval"
with_hdf5=1
fi],
[with_hdf5=0])
hdf5_libs=""
have_hdf5=0
if test "$use_parallel" -ne 0; then
if test "$with_hdf5" -ne 0 && test "$with_hdf5_path" != "yes"; then
# Checking compiler compatibility: GCC >= 4.9
if test "x$f90_in_mpif90" = xgfortran &&
test "$f90_major_version" -le "4" &&
test "$f90_minor_version" -lt "9" ; then
AC_MSG_RESULT(no)
AC_MSG_WARN([*** HDF5 support requires GNU GFORTRAN >= 4.9 ])
else
# Test if it is really installed where it has been specified
AC_LANG_POP(Fortran 77)
AC_LANG_PUSH(C)
if test -e $with_hdf5_path/bin/h5pcc; then
h5cc=$with_hdf5_path/bin/h5pcc;
elif test -e $with_hdf5_path/bin/h5cc ; then
h5cc=$with_hdf5_path/bin/h5cc;
else
h5cc=$CC;
fi
ac_compile='$h5cc -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$h5cc -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
try_libdirs="$with_hdf5_path/lib"
for dir in $try_libdirs
do
unset ac_cv_search_H5Fcreate
if test "$dir" = "none"
then
try_loption=
else
try_loption="-L$dir"
fi
FFLAGS="$test_fflags"
LDFLAGS="$test_ldflags $try_loption"
#LIBS="-lhdf5"
LIBS=""
AC_SEARCH_LIBS(H5Fcreate, hdf5 hdf5_fortran, [have_hdf5=1])
if test "$ac_cv_search_H5Fcreate" != "no"
then break ; fi
done
AC_LANG_POP(C)
AC_LANG_PUSH(Fortran 77)
if test "$have_hdf5" -eq 1 ; then
AC_CHECK_FILE($with_hdf5_path/include/hdf5.mod,,[
AC_MSG_WARN([***HDF5 Fortran extensions not found])
have_hdf5=0])
fi
if test "$have_hdf5" -eq 1; then
version_num=`grep "HDF5 Version" $with_hdf5_path/lib/libhdf5.settings | awk -F ':' '{print @S|@2}'`
version_ok=`echo $version_num | awk -F '.' '{print ((@S|@2 >= 10) || ( (@S|@2 == 8) && (@S|@3 >= 16)))}'`
if test $version_ok -gt 0; then
if test $version_third_ok -eq 0; then
AC_MSG_WARN([*** HDF5 library rejected; version must be >= 1.8.16]);
have_hdf5=0;
fi
else
AC_MSG_WARN([*** HDF5 version must be newer equal to 1.8.16]);
have_hdf5=0;
fi
fi
if test "$have_hdf5" -eq 1 ; then
if test -e $with_hdf5_path/bin/h5pfc; then
hdf5_libs=`$with_hdf5_path/bin/h5pfc -show | awk -F'-L' '{@S|@1="";@S|@2="-L"@S|@2; print @S|@0}'`
elif test -e $with_hdf5_path/bin/h5fc; then
hdf5_libs=`$with_hdf5_path/bin/h5fc -show | awk -F'-L' '{@S|@1="";@S|@2="-L"@S|@2; print @S|@0}'`
try_dflags="$try_dflags -D__HDF5_SERIAL"
else
hdf5_libs="-L$with_hdf5_path/lib -lhdf5_fortran -lhdf5 -lrt -lz -ldl -lm -Wl,-rpath -Wl,$with_hdf5_path/lib"
fi
try_iflags="$try_iflags -I$with_hdf5_path/include"
try_dflags="$try_dflags -D__HDF5"
fi
hdf5_line="HDF5_LIBS=$hdf5_libs"
fi
fi
else
if test "$with_hdf5" -ne 0 && test "$with_hdf5_path" != "yes"; then
# Checking compiler compatibility: GCC >= 4.9
if test "x$f90" = xgfortran &&
test "$f90_major_version" -le "4" &&
test "$f90_minor_version" -lt "9" ; then
AC_MSG_RESULT(no)
AC_MSG_WARN([*** HDF5 support requires GNU GFORTRAN >= 4.9 ])
else
# Test if it is really installed where it has been specified
AC_LANG_POP(Fortran 77)
AC_LANG_PUSH(C)
if test -e $with_hdf5_path/bin/h5cc ; then
h5cc=$with_hdf5_path/bin/h5cc;
else
h5cc=$CC;
fi
ac_compile='$h5cc -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$h5cc -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
try_libdirs="$with_hdf5_path/lib"
for dir in $try_libdirs
do
unset ac_cv_search_H5Fcreate
if test "$dir" = "none"
then
try_loption=
else
try_loption="-L$dir"
fi
FFLAGS="$test_fflags"
LDFLAGS="$test_ldflags $try_loption"
#LIBS="-lhdf5"
LIBS=""
AC_SEARCH_LIBS(H5Fcreate, hdf5 hdf5_fortran, [have_hdf5=1])
if test "$ac_cv_search_H5Fcreate" != "no"
then break ; fi
done
AC_LANG_POP(C)
AC_LANG_PUSH(Fortran 77)
if test "$have_hdf5" -eq 1 ; then
AC_CHECK_FILE($with_hdf5_path/include/hdf5.mod,,[
AC_MSG_WARN([***HDF5 Fortran extensions not found])
have_hdf5=0])
fi
if test "$have_hdf5" -eq 1; then
version_num=`grep "HDF5 Version" $with_hdf5_path/lib/libhdf5.settings | awk -F ':' '{print @S|@2}'`
version_ok=`echo $version_num | awk -F '.' '{print ((@S|@2 => 10) || ( (@S|@2 == 8) && (@S|@3 >= 16)))}'`
if test $version_sec_ok -gt 0; then
if test $version_third_ok -eq 0; then
AC_MSG_WARN([*** HDF5 library rejected; version must be >= 1.8.16]);
have_hdf5=0;
fi
else
AC_MSG_WARN([*** HDF5 version must be newer equal to 1.8.16]);
have_hdf5=0;
fi
fi
if test "$have_hdf5" -eq 1 ; then
if test -e $with_hdf5_path/bin/h5fc; then
hdf5_libs=`$with_hdf5_path/bin/h5fc -show | awk -F'-L' '{@S|@1="";@S|@2="-L"@S|@2; print @S|@0}'`
try_dflags="$try_dflags -D__HDF5_SERIAL"
else
hdf5_libs="-L$with_hdf5_path/lib -lhdf5_fortran -lhdf5 -lrt -lz -ldl -lm -Wl,-rpath -Wl,$with_hdf5_path/lib"
fi
try_iflags="$try_iflags -I$with_hdf5_path/include"
try_dflags="$try_dflags -D__HDF5"
fi
hdf5_line="HDF5_LIBS=$hdf5_libs"
fi
fi
# AC_MSG_WARN([HDF5 support is for parallel execution only])
fi
AC_SUBST(hdf5_libs)
AC_SUBST(hdf5_line)
]
)