summaryrefslogtreecommitdiffstats
path: root/fortran/acsite.m4
diff options
context:
space:
mode:
authorBill Wendling <wendling@ncsa.uiuc.edu>2000-09-19 20:06:49 (GMT)
committerBill Wendling <wendling@ncsa.uiuc.edu>2000-09-19 20:06:49 (GMT)
commit8055378bcecfc77af85b2bb07e7904edc9492789 (patch)
tree01c100c34cd727b9dc15ae21c89b6e0dfa361303 /fortran/acsite.m4
parent8272da0b67a9ef3a7299fd10cc5f3ccbf80cbeae (diff)
downloadhdf5-8055378bcecfc77af85b2bb07e7904edc9492789.zip
hdf5-8055378bcecfc77af85b2bb07e7904edc9492789.tar.gz
hdf5-8055378bcecfc77af85b2bb07e7904edc9492789.tar.bz2
[svn-r2576] Purpose:
Adding the Fortran interface to the HDF5 library Description: Fortran is now a subdirectory of the HDF5 library tree. Platforms tested: Solaris and IRIX (O2K)
Diffstat (limited to 'fortran/acsite.m4')
-rw-r--r--fortran/acsite.m4377
1 files changed, 377 insertions, 0 deletions
diff --git a/fortran/acsite.m4 b/fortran/acsite.m4
new file mode 100644
index 0000000..3ed83be
--- /dev/null
+++ b/fortran/acsite.m4
@@ -0,0 +1,377 @@
+dnl -------------------------------------------------------------------------
+dnl -------------------------------------------------------------------------
+dnl
+dnl Macros for HDF5 Fortran
+dnl
+dnl Copyright (C) 2000 National Center for Supercomputing Applications.
+dnl All rights reserved.
+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 f95 g95)
+test -z "$CC" && 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:" >&AC_FD_CC
+ cat conftest.$ac_ext >&AC_FD_CC
+ [$2]=no
+fi
+rm -fr conftest*
+])
+
+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_LANG_FORTRAN9X()
+dnl
+dnl Generic macro to setup the Fortran 9X specific env variables.
+dnl
+AC_DEFUN(AC_LANG_FORTRAN9X, [
+define([AC_LANG], [FORTRAN9X])
+ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&AC_FD_CC'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&AC_FD_CC'
+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>&AC_FD_CC'
+ 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=""
+
+for f in conftest.o module.mod MODULE.mod; do
+ test -f $f && modfiles="$f"
+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; 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 "-p" "-M" "-I"; 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>&AC_FD_CC'
+
+ if AC_TRY_EVAL(ac_compile); then
+ F9XMODFLAG=$flag
+ break
+ fi
+done
+
+if test -n "$F9XMODFLAG"; then
+ echo $F9XMODFLAG 1>&6
+else
+ echo unknown 1>&6
+fi
+AC_SUBST(F9XMODFLAG)
+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 -------------------------------------------------------------------------