mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-03 02:32:04 +08:00
0c936cb876
Bug Fix Description: In parallel mode, the MPI libraries were being added to the LDFLAGS variable instead of the LIBS variable. This was playing havoc with the h5fc script (the order you specify libraries is important to some compilers). Solution: The AC_CHECK_FLIB macro was placing these libraries into the LDFLAGS instead of LIBS, which is where they should have gone. Replaced LDFLAGS with LIBS in that case. Platforms tested: Modi4 (Parallel & Fortran) Arabica (Fortran) Verbena (Fortran, no C++ since it's not affected) Ran "make check-install" after installation... Misc. update:
505 lines
12 KiB
Plaintext
505 lines
12 KiB
Plaintext
dnl -------------------------------------------------------------------------
|
|
dnl -------------------------------------------------------------------------
|
|
dnl
|
|
dnl Copyright by the Board of Trustees of the University of Illinois.
|
|
dnl All rights reserved.
|
|
dnl
|
|
dnl This file is part of HDF5. The full HDF5 copyright notice, including
|
|
dnl terms governing use, modification, and redistribution, is contained in
|
|
dnl the files COPYING and Copyright.html. COPYING can be found at the root
|
|
dnl of the source code distribution tree; Copyright.html can be found at the
|
|
dnl root level of an installed copy of the electronic HDF5 document set and
|
|
dnl is linked from the top-level documents page. It can also be found at
|
|
dnl http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have
|
|
dnl access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu.
|
|
dnl
|
|
dnl Macros for HDF5 Fortran
|
|
dnl
|
|
dnl -------------------------------------------------------------------------
|
|
dnl -------------------------------------------------------------------------
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl AC_PROG_F9X
|
|
dnl
|
|
dnl Check for a Fortran 9X compiler.
|
|
dnl
|
|
AC_DEFUN(AC_PROG_F9X,
|
|
[AC_CHECK_PROGS(F9X, f90 pgf90 xlf90 f95 g95 xlf95)
|
|
test -z "$F9X" && AC_MSG_ERROR([no acceptable f9X compiler found in \$PATH])
|
|
|
|
AC_PROG_F9X_WORKS
|
|
AC_PROG_F9X_GNU
|
|
|
|
if test $ac_cv_prog_g9x = yes; then
|
|
G9X=yes
|
|
dnl Check whether -g works, even if FFLAGS is set, in case the package
|
|
dnl plays around with FFLAGS (such as to build both debugging and
|
|
dnl normal versions of a library), tasteless as that idea is.
|
|
ac_test_FFLAGS="${FFLAGS+set}"
|
|
ac_save_FFLAGS="$FFLAGS"
|
|
FFLAGS=
|
|
AC_PROG_F9X_G
|
|
if test "$ac_test_FFLAGS" = set; then
|
|
FFLAGS="$ac_save_FFLAGS"
|
|
elif test $ac_cv_prog_f9x_g = yes; then
|
|
FFLAGS="-g -O2"
|
|
else
|
|
FFLAGS="-O2"
|
|
fi
|
|
else
|
|
G9X=
|
|
test "${FFLAGS+set}" = set || FFLAGS="-g"
|
|
fi
|
|
])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl AC_TRY_F9X_COMPILER()
|
|
dnl
|
|
dnl It would be nice if the compiler actually works.
|
|
dnl
|
|
AC_DEFUN(AC_TRY_F9X_COMPILER, [
|
|
cat > conftest.$ac_ext << EOF
|
|
[$1]
|
|
EOF
|
|
if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
|
|
[$2]=yes
|
|
# If we can't run a trivial program, we are probably using a cross compiler.
|
|
if (./conftest; exit) 2>/dev/null; then
|
|
[$3]=no
|
|
else
|
|
[$3]=yes
|
|
fi
|
|
else
|
|
echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
|
|
cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD
|
|
[$2]=no
|
|
fi
|
|
rm -fr conftest*
|
|
])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl AC_LANG_FORTRAN9X()
|
|
dnl
|
|
dnl Generic macro to setup the Fortran 9X specific env variables.
|
|
dnl
|
|
m4_define([AC_LANG(FORTRAN9X)],
|
|
[ac_ext=f90
|
|
ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&AS_MESSAGE_LOG_FD'
|
|
ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&AS_MESSAGE_LOG_FD'
|
|
cross_compiling=$ac_cv_prog_f9x_cross
|
|
])
|
|
|
|
AU_DEFUN([AC_LANG_FORTRAN9X], [AC_LANG(FORTRAN9X)])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl AC_LANG_F9X_WORKS()
|
|
dnl
|
|
dnl It would be nice if the compiler actually works.
|
|
dnl
|
|
AC_DEFUN(AC_PROG_F9X_WORKS, [
|
|
AC_MSG_CHECKING([whether the Fortran 9X compiler ($F9X $FFLAGS $LDFLAGS) works])
|
|
AC_LANG_SAVE
|
|
AC_LANG_FORTRAN9X
|
|
AC_TRY_F9X_COMPILER([
|
|
program conftest
|
|
end
|
|
], ac_cv_prog_f9x_works, ac_cv_prog_f9x_cross)
|
|
AC_LANG_RESTORE
|
|
AC_MSG_RESULT($ac_cv_prog_f9x_works)
|
|
if test $ac_cv_prog_f9x_works = no; then
|
|
AC_MSG_ERROR([installation or configuration problem: Fortran 9X compiler cannot create executables.])
|
|
fi
|
|
AC_MSG_CHECKING([whether the Fortran 9X compiler ($F9X $FFLAGS $LDFLAGS) is a cross-compiler])
|
|
AC_MSG_RESULT($ac_cv_prog_f9x_cross)
|
|
cross_compiling=$ac_cv_prog_f9x_cross
|
|
])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl AC_PROG_F9X_GNU
|
|
dnl
|
|
dnl Test whether for Fortran 9X compiler is `g95' (the GNU Fortran 95
|
|
dnl Compiler). This test depends on whether the Fortran 9X compiler
|
|
dnl can do CPP pre-processing.
|
|
dnl
|
|
AC_DEFUN(AC_PROG_F9X_GNU,
|
|
[AC_CACHE_CHECK(whether we are using GNU Fortran 95, ac_cv_prog_g9x,
|
|
[cat > conftest.fpp <<EOF
|
|
#ifdef __GNUC__
|
|
yes
|
|
#endif
|
|
EOF
|
|
if AC_TRY_COMMAND($F9X -E conftest.fpp) | egrep yes >/dev/null 2>&1; then
|
|
ac_cv_prog_g9x=yes
|
|
else
|
|
ac_cv_prog_g9x=no
|
|
fi])])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl AC_PROG_F9X_G
|
|
dnl
|
|
dnl Test whether the Fortran 9X compiler can accept the `-g' option
|
|
dnl to enable debugging.
|
|
dnl
|
|
AC_DEFUN(AC_PROG_F9X_G,
|
|
[AC_CACHE_CHECK(whether $F9X accepts -g, ac_cv_prog_f9x_g,
|
|
[cat > conftest.f << EOF
|
|
program conftest
|
|
end
|
|
EOF
|
|
if test -z "`$F9X -g -c conftest.f 2>&1`"; then
|
|
ac_cv_prog_f9x_g=yes
|
|
else
|
|
ac_cv_prog_f9x_g=no
|
|
fi
|
|
rm -f conftest*
|
|
])])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl AC_F9X_OPT_FLAGS()
|
|
dnl
|
|
dnl Check for optimizer flags the Fortran compiler can use.
|
|
dnl
|
|
AC_DEFUN(AC_F9X_OPT_FLAGS,
|
|
[AC_MSG_CHECKING([for $F9X optimizer flags])
|
|
AC_LANG_SAVE
|
|
AC_LANG_FORTRAN9X
|
|
|
|
for flags in "-fast" "-O3" "-O" "";do
|
|
cat > conftest.$ac_ext <<EOF
|
|
program main
|
|
end
|
|
EOF
|
|
ac_compile='${F9X-f90} -c $flag $FFLAGS conftest.$ac_ext 1>&AS_MESSAGE_LOG_FD'
|
|
if AC_TRY_EVAL(ac_compile); then
|
|
if grep 'passed to ld' conftest.out > /dev/null 2>&1; then :; else
|
|
FFLAGS="$FFLAGS $flags"
|
|
break
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if test -n "$flags"; then
|
|
echo "$flags" 1>&6
|
|
else
|
|
echo "none" 1>&6
|
|
fi
|
|
rm -f conftest*
|
|
])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl AC_F9X_MODS()
|
|
dnl
|
|
dnl Check how F9X handles modules. This macro also checks which
|
|
dnl command-line option to use to include the module once it's built.
|
|
dnl
|
|
AC_DEFUN(AC_F9X_MODS,
|
|
[AC_MSG_CHECKING(what $F9X does with modules)
|
|
AC_LANG_SAVE
|
|
AC_LANG_FORTRAN9X
|
|
|
|
test -d conftestdir || mkdir conftestdir
|
|
cd conftestdir
|
|
rm -rf *
|
|
|
|
cat >conftest.$ac_ext <<EOF
|
|
module module
|
|
integer foo
|
|
end module module
|
|
EOF
|
|
|
|
eval $ac_compile
|
|
modfiles=""
|
|
F9XMODEXT=""
|
|
|
|
for f in conftest.o module.mod MODULE.mod module.M MODULE.M; do
|
|
if test -f "$f" ; then
|
|
modfiles="$f"
|
|
|
|
case "$f" in
|
|
*.o) F9XMODEXT="o" ;;
|
|
*.mod) F9XMODEXT="mod" ;;
|
|
*.M) F9XMODEXT="M" ;;
|
|
esac
|
|
fi
|
|
done
|
|
|
|
echo $modfiles 6>&1
|
|
if test "$modfiles" = file.o; then
|
|
echo $ac_n "checking whether $F9X -em is saner""... $ac_c" 1>&6
|
|
OLD_FFLAGS=$FFLAGS
|
|
FFLAGS="$FFLAGS -em"
|
|
eval $ac_compile
|
|
modfiles=""
|
|
for f in file.o module.mod MODULE.mod module.M MODULE.M; do
|
|
test -f $f && modfiles="$f"
|
|
done
|
|
if test "$modfiles" = "file.o"; then
|
|
FFLAGS=$OLD_FFLAGS
|
|
echo no 6>&1
|
|
else
|
|
echo yes 6>&1
|
|
fi
|
|
fi
|
|
cd ..
|
|
|
|
AC_MSG_CHECKING(how $F9X finds modules)
|
|
|
|
for flag in "-I" "-M" "-p"; do
|
|
cat >conftest.$ac_ext <<EOF
|
|
program conftest
|
|
use module
|
|
end program conftest
|
|
EOF
|
|
|
|
ac_compile='${F9X-f90} $FFLAGS ${flag}conftestdir -c conftest.$ac_ext 1>&AS_MESSAGE_LOG_FD'
|
|
|
|
if AC_TRY_EVAL(ac_compile); then
|
|
F9XMODFLAG=$flag
|
|
break
|
|
fi
|
|
done
|
|
|
|
if test -n "$F9XMODFLAG"; then
|
|
echo $F9XMODFLAG 1>&6
|
|
FFLAGS="$F9XMODFLAG. $F9XMODFLAG../src $FFLAGS"
|
|
else
|
|
echo unknown 1>&6
|
|
fi
|
|
AC_SUBST(F9XMODFLAG)
|
|
AC_SUBST(F9XMODEXT)
|
|
rm -rf conftest*
|
|
])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl AC_TRY_FCOMPILE()
|
|
dnl
|
|
dnl Check if we can compile a simple Fortran 90 program.
|
|
dnl
|
|
dnl AC_TRY_FCOMPILE(FUNCTION-BODY,
|
|
dnl [ACTION-IF-SUCCESS], [ACTION-IF-NOT-SUCCESS])
|
|
dnl
|
|
AC_DEFUN([AC_TRY_FCOMPILE],
|
|
[AC_LANG_SAVE
|
|
AC_LANG_FORTRAN9X
|
|
|
|
test -d conftestdir || mkdir conftestdir
|
|
cd conftestdir
|
|
rm -rf *
|
|
|
|
cat >conftest.$ac_ext <<EOF
|
|
$1
|
|
EOF
|
|
|
|
if AC_TRY_EVAL(ac_compile); then
|
|
:
|
|
[$2]
|
|
else
|
|
:
|
|
[$3]
|
|
fi
|
|
cd ..
|
|
rm -rf conftest*
|
|
])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl AC_TRY_FLINK()
|
|
dnl
|
|
dnl Check if we can link a simple Fortran 90 program.
|
|
dnl
|
|
dnl AC_TRY_FLINK(INCLUDES, FUNCTION-BODY,
|
|
dnl [ACTION-IF-SUCCESS], [ACTION-IF-NOT-SUCCESS])
|
|
dnl
|
|
AC_DEFUN([AC_TRY_FLINK],
|
|
[AC_LANG_SAVE
|
|
AC_LANG_FORTRAN9X
|
|
|
|
test -d conftestdir || mkdir conftestdir
|
|
cd conftestdir
|
|
rm -rf *
|
|
|
|
cat >conftest.$ac_ext <<EOF
|
|
program conftest
|
|
include '$1'
|
|
$2
|
|
end
|
|
EOF
|
|
|
|
if AC_TRY_EVAL(ac_compile) && AC_TRY_EVAL(ac_link); then
|
|
:
|
|
[$3]
|
|
else
|
|
:
|
|
[$4]
|
|
fi
|
|
cd ..
|
|
rm -rf conftest*
|
|
])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl AC_CHECK_FLIB()
|
|
dnl
|
|
dnl Check if we can link a simple Fortran 90 program with the specified library.
|
|
dnl
|
|
dnl AC_CHECK_FLIB(LIBRARY, FUNCTION-BODY,
|
|
dnl [ACTION-IF-SUCCESS], [ACTION-IF-NOT-SUCCESS])
|
|
dnl
|
|
AC_DEFUN([AC_CHECK_FLIB],
|
|
[AC_LANG_SAVE
|
|
AC_LANG_FORTRAN9X
|
|
|
|
test -d conftestdir || mkdir conftestdir
|
|
cd conftestdir
|
|
rm -rf *
|
|
|
|
cat >conftest.$ac_ext <<EOF
|
|
program conftest
|
|
$2
|
|
end
|
|
EOF
|
|
|
|
if test -n "$1"; then
|
|
saved_LIBS="$LIBS"
|
|
LIBS="$LIBS -l$1"
|
|
fi
|
|
|
|
if AC_TRY_EVAL(ac_compile) && AC_TRY_EVAL(ac_link); then
|
|
:
|
|
[$3]
|
|
else
|
|
LIBS="$saved_LIBS"
|
|
[$4]
|
|
fi
|
|
cd ..
|
|
rm -rf conftest*
|
|
])
|
|
|
|
dnl -------------------------------------------------------------------------
|
|
dnl -------------------------------------------------------------------------
|
|
dnl
|
|
dnl Possible future tests for the Fortran stuff...
|
|
dnl
|
|
dnl -------------------------------------------------------------------------
|
|
dnl -------------------------------------------------------------------------
|
|
dnl
|
|
dnl echo $ac_n "checking whether f90 real type has 12 digits of precision""... $ac_c" 1>&6
|
|
dnl cat >conftest.f90 <<'EOF'
|
|
dnl program conftest
|
|
dnl if (selected_real_kind(12) .eq. kind(0.0)) then
|
|
dnl print '(a)','YES'
|
|
dnl else
|
|
dnl print '(a)','NO'
|
|
dnl end if
|
|
dnl end program conftest
|
|
dnl EOF
|
|
dnl $ac_cv_prog_F90 $FFLAGS -o conftest conftest.f90 > /dev/null 2>&1
|
|
dnl if test "`./conftest | head -1`" = YES; then
|
|
dnl echo "yes" 1>&6
|
|
dnl AC_DEFINE(HIPREC)
|
|
dnl else
|
|
dnl echo "no" 1>&6
|
|
dnl fi
|
|
|
|
dnl echo $ac_n "checking whether f90 precision of default real type""... $ac_c" 1>&6
|
|
dnl cat >conftest.f90 <<'EOF'
|
|
dnl program conftest
|
|
dnl if (kind(0.0) .eq. selected_real_kind(12) .or.&
|
|
dnl &kind(0.0) .eq. selected_real_kind(6) ) then
|
|
dnl print '(a)','YES'
|
|
dnl else
|
|
dnl print '(a)','NO'
|
|
dnl end if
|
|
dnl end program conftest
|
|
dnl EOF
|
|
dnl $ac_cv_prog_F90 $FFLAGS -o conftest conftest.f90 > /dev/null 2>&1
|
|
dnl if test "`./conftest | head -1`" = YES; then
|
|
dnl echo "OK" 1>&6
|
|
dnl AC_DEFINE(REALOK)
|
|
dnl else
|
|
dnl echo "no" 1>&6
|
|
dnl fi
|
|
|
|
dnl echo $ac_n "checking accuracy of arithmetic""... $ac_c" 1>&6
|
|
dnl cat >conftest.f90 <<'EOF'
|
|
dnl program conftest
|
|
dnl integer, parameter :: double=selected_real_kind(12)
|
|
dnl real(double), parameter :: ulp=2.0_double**(-47)
|
|
dnl real(double), parameter :: ans=0.92699498904359955986_double
|
|
dnl real(double) :: x,y,z
|
|
dnl integer i
|
|
dnl x=0.0_double
|
|
dnl y=ulp
|
|
dnl do i=2,100
|
|
dnl z=x+y
|
|
dnl x=y
|
|
dnl y=z-int(z)
|
|
dnl end do
|
|
dnl if (y-ans .lt. ulp/2.0_double) then
|
|
dnl print '(a)','YES'
|
|
dnl else
|
|
dnl print '(a)','NO'
|
|
dnl end if
|
|
dnl end program conftest
|
|
dnl EOF
|
|
dnl $ac_cv_prog_F90 $FFLAGS -o conftest conftest.f90 > /dev/null 2>&1
|
|
dnl if test "`./conftest | head -1`" = YES; then
|
|
dnl echo "OK" 1>&6
|
|
dnl AC_DEFINE(ARITHOK)
|
|
dnl else
|
|
dnl echo "no" 1>&6
|
|
dnl fi
|
|
|
|
dnl echo $ac_n "checking whether int is the fastest way to truncate""... $ac_c" 1>&6
|
|
dnl cat >conftest.f90 <<'EOF'
|
|
dnl program conftest
|
|
dnl integer, parameter :: double=selected_real_kind(12)
|
|
dnl real(double), parameter :: ulp=2.0_double**(-47)
|
|
dnl real(double) :: x,y,z,ya,yb
|
|
dnl integer :: t0,t1,i,timea,timeb
|
|
dnl
|
|
dnl x=0.0_double
|
|
dnl y=ulp
|
|
dnl call system_clock(t0)
|
|
dnl do i=2,1000000
|
|
dnl z=x+y
|
|
dnl x=y
|
|
dnl y=z-int(z)
|
|
dnl end do
|
|
dnl ya=y
|
|
dnl call system_clock(t1)
|
|
dnl timea=t1-t0
|
|
dnl
|
|
dnl x=0.0_double
|
|
dnl y=ulp
|
|
dnl call system_clock(t0)
|
|
dnl do i=2,1000000
|
|
dnl z=x+y
|
|
dnl x=y
|
|
dnl if (z.ge.1.0_double) then
|
|
dnl y=z-1.0_double
|
|
dnl else
|
|
dnl y=z
|
|
dnl end if
|
|
dnl end do
|
|
dnl yb=y
|
|
dnl call system_clock(t1)
|
|
dnl timeb=t1-t0
|
|
dnl
|
|
dnl if (timea.lt.timeb) then
|
|
dnl print '(a)','YES'
|
|
dnl else
|
|
dnl print '(a)','NO'
|
|
dnl end if
|
|
dnl print *,ya,yb
|
|
dnl end program conftest
|
|
dnl EOF
|
|
dnl $ac_cv_prog_F90 $FFLAGS -o conftest conftest.f90 > /dev/null 2>&1
|
|
dnl if test "`./conftest | head -1`" = YES; then
|
|
dnl echo "yes" 1>&6
|
|
dnl AC_DEFINE(USEINT)
|
|
dnl else
|
|
dnl echo "no" 1>&6
|
|
dnl fi
|
|
dnl
|
|
dnl -------------------------------------------------------------------------
|
|
dnl -------------------------------------------------------------------------
|