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 </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 < /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 <&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 <&6 # FFLAGS="$F9XMODFLAG. $F9XMODFLAG../src $FFLAGS" FFLAGS="$F9XMODFLAG. $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 <conftest.$ac_ext <conftest.$ac_ext <&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 -------------------------------------------------------------------------