diff options
author | Bill Wendling <wendling@ncsa.uiuc.edu> | 2002-03-27 18:08:50 (GMT) |
---|---|---|
committer | Bill Wendling <wendling@ncsa.uiuc.edu> | 2002-03-27 18:08:50 (GMT) |
commit | 30aa868e1082ddd7cc59b4f0716434f4a02fcbdd (patch) | |
tree | 3ae925a610892fe54eaed8d2b2ce25dc918f767c /fortran/configure.in | |
parent | 0f7c2e3017ff80683d9d67f880cd6f7275350aa5 (diff) | |
download | hdf5-30aa868e1082ddd7cc59b4f0716434f4a02fcbdd.zip hdf5-30aa868e1082ddd7cc59b4f0716434f4a02fcbdd.tar.gz hdf5-30aa868e1082ddd7cc59b4f0716434f4a02fcbdd.tar.bz2 |
[svn-r5092] Purpose:
Bug Fix
Description:
I wasn't testing if the Fortran compiler could actually do the MPI
compilation tests.
Solution:
Changed the configure script so that it uses Fortran 90 to test the
MPI compilation stuff instead of the MPI C compiler...
Platforms tested:
AIX and Linux
Diffstat (limited to 'fortran/configure.in')
-rw-r--r-- | fortran/configure.in | 485 |
1 files changed, 251 insertions, 234 deletions
diff --git a/fortran/configure.in b/fortran/configure.in index 5bc529e..82098b5 100644 --- a/fortran/configure.in +++ b/fortran/configure.in @@ -1,8 +1,9 @@ dnl ---------------------------------------------------------------------- dnl Process this file with autoconf to produce configure. dnl -dnl Copyright (C) 2000 National Center for Supercomputing Applications. -dnl All rights reserved. +dnl Copyright (C) 2000, 2001, 2002 +dnl National Center for Supercomputing Applications. +dnl All rights reserved. dnl ---------------------------------------------------------------------- dnl ---------------------------------------------------------------------- @@ -10,10 +11,10 @@ dnl Initialize configure. dnl AC_REVISION($Id$) AC_INIT(src/HDF5.f90) -AC_CONFIG_HEADER(src/H5config.h) AC_CONFIG_AUX_DIR(../bin) AC_CANONICAL_HOST AC_SUBST(CPPFLAGS) +AC_SUBST(FFLAGS) dnl ---------------------------------------------------------------------- dnl HDF5 integer variables for the H5fortran_types.f90 file. @@ -147,7 +148,7 @@ if test "X$GCC" = "Xyes"; then fi if test -z "$AR"; then - AC_CHECK_PROGS(AR,ar xar,:,$PATH) + AC_CHECK_PROGS(AR,ar xar,:,$PATH) fi AC_SUBST(AR) @@ -157,72 +158,73 @@ dnl with an action should override the `all' default target. So we have dnl to decide what the proper syntax is. dnl if test -z "$SEARCH"; then - AC_MSG_CHECKING(how make searches directories) - while true; do #for break - dnl The most common method is `VPATH=DIR1 DIR2 ...' - cat >maketest <<EOF + AC_MSG_CHECKING(how make searches directories) + while true; do #for break + dnl The most common method is `VPATH=DIR1 DIR2 ...' + cat >maketest <<EOF VPATH=$srcdir/config $srcdir/src $srcdir/bin .c.o: - cp $< H5.o + cp $< H5_f.o -foo: H5.o - /bin/rm -f H5.o +foo: H5_f.o + /bin/rm -f H5_f.o @echo works EOF - if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then - SEARCH_RULE='VPATH=' - SEARCH_SEP=' ' - AC_MSG_RESULT([VPATH=DIR1 DIR2 ...]) - break - fi + if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then + SEARCH_RULE='VPATH=' + SEARCH_SEP=' ' + AC_MSG_RESULT([VPATH=DIR1 DIR2 ...]) + break + fi - dnl The second most common method is like above except with the - dnl directories separated by colons. - cat >maketest <<EOF + dnl The second most common method is like above except with the + dnl directories separated by colons. + cat >maketest <<EOF VPATH=$srcdir/config:$srcdir/src:$srcdir/bin .c.o: - cp $< H5.o + cp $< H5_f.o -foo: H5.o - /bin/rm -f H5.o +foo: H5_f.o + /bin/rm -f H5_f.o @echo works EOF - if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then - SEARCH_RULE='VPATH=' - SEARCH_SEP=':' - AC_MSG_RESULT([VPATH=DIR1:DIR2:...]) - break - fi + if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then + SEARCH_RULE='VPATH=' + SEARCH_SEP=':' + AC_MSG_RESULT([VPATH=DIR1:DIR2:...]) + break + fi - dnl pmake uses the construct `.PATH: DIR1 DIR2 - cat >maketest <<EOF + dnl pmake uses the construct `.PATH: DIR1 DIR2 + cat >maketest <<EOF .PATH: $srcdir/config $srcdir/src $srcdir/bin .c.o: - cp $< H5.o + cp $< H5_f.o -foo: H5.o - /bin/rm -f H5.o +foo: H5_f.o + /bin/rm -f H5_f.o @echo works EOF - if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then - SEARCH_RULE='.PATH: ' - SEARCH_SEP=' ' - AC_MSG_RESULT([.PATH: DIR1 DIR2 ...]) - break - fi - - dnl No way for make to search directories - SEARCH_RULE='## SEARCH DISABLED: ' + + if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then + SEARCH_RULE='.PATH: ' SEARCH_SEP=' ' - AC_MSG_RESULT([it doesn't]) - if test ! -f configure; then - AC_MSG_ERROR(${MAKE-make} requires the build and source directories to be the same) - fi + AC_MSG_RESULT([.PATH: DIR1 DIR2 ...]) break - done - rm maketest + fi + + dnl No way for make to search directories + SEARCH_RULE='## SEARCH DISABLED: ' + SEARCH_SEP=' ' + AC_MSG_RESULT([it doesn't]) + if test ! -f configure; then + AC_MSG_ERROR(${MAKE-make} requires the build and source directories to be the same) + fi + break + done + rm maketest fi dnl ---------------------------------------------------------------------- @@ -230,15 +232,15 @@ dnl If we should build only static executables dnl AC_MSG_CHECKING(if should build only statically linked executables) AC_ARG_ENABLE(static_exec, - [ --enable-static-exec Build only statically linked executables [default=no]], - STATIC_EXEC=$enableval) + [ --enable-static-exec Build only statically linked executables [default=no]], + STATIC_EXEC=$enableval) if test "X$STATIC_EXEC" = "Xyes"; then - echo "yes" - LT_STATIC_EXEC="-all-static" + echo "yes" + LT_STATIC_EXEC="-all-static" else - echo "no" - LT_STATIC_EXEC="" + echo "no" + LT_STATIC_EXEC="" fi AC_SUBST(LT_STATIC_EXEC) @@ -267,7 +269,6 @@ dnl then "uncache" it so that we will go through this logic in any case. dnl Some systems where you need to specify exactly where the zlib is need dnl this. ac_cv_lib_z_compress="" - AC_ARG_WITH(zlib, [ --with-zlib[=DIR] Use the GNU zlib compression],, withval=yes) @@ -275,7 +276,7 @@ AC_ARG_WITH(zlib, case "$withval" in yes) AC_CHECK_HEADERS(zlib.h) - AC_CHECK_LIB(z, compress) + AC_CHECK_LIB(z, compress2) ;; no) AC_MSG_CHECKING(for GNU zlib) @@ -319,6 +320,9 @@ dnl dnl Checkpoint the cache AC_CACHE_SAVE +dnl Change back to the Fortran 90 language +AC_LANG_FORTRAN9X + dnl ---------------------------------------------------------------------- dnl The following variables are used to distinguish between building a dnl serial and parallel library. @@ -328,7 +332,7 @@ dnl a parallel library even if configure wasn't dnl able to find some header file or library that dnl might be required. This is defined if the dnl compiler looks like a parallel compiler (e.g., -dnl mpicc or mpcc) or if the user explicitly states +dnl mpif90 or mpf90) or if the user explicitly states dnl that a parallel library is being built by supplying dnl the `--enable-parallel' configure switch. dnl @@ -365,49 +369,50 @@ dnl ---------------------------------------------------------------------- dnl If the compiler is obviously a parallel compiler then we're building dnl a parallel version of hdf5 and should define HAVE_PARALLEL. Furthermore, dnl the name of the compiler might tell us how to run the resulting -dnl executable. For `mpicc' the executable should be run with `mpirun' from -dnl the same directory as mpicc if it exists. +dnl executable. For `mpif90' the executable should be run with `mpirun' +dnl from the same directory as mpif90 if it exists. dnl -case "$CC_BASENAME" in - mpicc) - dnl The mpich compiler. Use mpirun from the same directory if it - dnl exists. - PARALLEL=mpicc - AC_MSG_CHECKING(for mpirun) - - dnl Find the path where mpicc is located. - cmd=`echo $CC |cut -f1 -d' '` - if (echo $cmd |grep / >/dev/null); then - path="`echo $cmd |sed 's/\(.*\)\/.*$/\1/'`" - else - for path in `echo $PATH |tr : ' '`; do - if test -x $path/$cmd; then - break; - fi - done - fi +case "$F9X" in + mpif90) + dnl The mpich compiler. Use mpirun from the same directory if it + dnl exists. + PARALLEL=mpif90 + AC_MSG_CHECKING(for mpirun) + + dnl Find the path where mpif90 is located. + cmd=`echo $F9X |cut -f1 -d' '` + if (echo $cmd |grep / >/dev/null); then + path="`echo $cmd |sed 's/\(.*\)\/.*$/\1/'`" + else + for path in `echo $PATH |tr : ' '`; do + if test -x $path/$cmd; then + break; + fi + done + fi - dnl Is there an mpirun at that path? - if test -x $path/mpirun; then - AC_MSG_RESULT($path/mpirun) - RUNSERIAL="${RUNSERIAL:-none}" - if test -z "$RUNPARALLEL"; then - RUNPARALLEL="$path/mpirun -np \$\${NPROCS:=2}" - fi - else - AC_MSG_RESULT(none) + dnl Is there an mpirun at that path? + if test -x $path/mpirun; then + AC_MSG_RESULT($path/mpirun) + RUNSERIAL="${RUNSERIAL:-none}" + + if test -z "$RUNPARALLEL"; then + RUNPARALLEL="$path/mpirun -np \$\${NPROCS:=2}" fi - ;; + else + AC_MSG_RESULT(none) + fi + ;; - mpcc|mpcc_r) - dnl The IBM compiler - PARALLEL="$CC_BASENAME" - ;; + mpxlf | mpxlf_r | mpxlf90 | mpxlf90_r | mpxlf95 | mpxlf95_r) + dnl The IBM compiler + PARALLEL="$F9X" + ;; - *) - dnl Probably not a parallel compiler, but if `--enable-parallel' - dnl is defined below then we're still building a parallel hdf5. - ;; + *) + dnl Probably not a parallel compiler, but if `--enable-parallel' + dnl is defined below then we're still building a parallel hdf5. + ;; esac dnl ---------------------------------------------------------------------- @@ -423,63 +428,77 @@ AC_ARG_ENABLE(parallel, AC_MSG_CHECKING(for parallel support files) case "X-$enable_parallel" in - X-|X-no|X-none) - dnl Either we are not compiling for parallel or the header and library - dnl files and locations are known to the compiler (this is the case - dnl for a correct installation of mpicc for instance). - AC_MSG_RESULT(skipped) - ;; - - X-yes) - dnl We want to compile a parallel library with a compiler that - dnl may already know how to link with MPI and MPI-IO. - AC_MSG_RESULT(provided by compiler) - PARALLEL=yes - - dnl Try link a simple MPI program. If fail, try again with -lmpi. - AC_TRY_LINK(,MPI_Init(),,AC_CHECK_LIB(mpi,MPI_Init,,PARALLEL=no)) + X-|X-no|X-none) + dnl Either we are not compiling for parallel or the header and library + dnl files and locations are known to the compiler (this is the case + dnl for a correct installation of mpicc for instance). + AC_MSG_RESULT(skipped) + ;; - dnl Then try link a simple MPI-IO program. If fail, try again with - dnl -lmpio. - if test "X$PARALLEL" = "Xyes"; then - AC_TRY_LINK(,MPI_File_open(),, - AC_CHECK_LIB(mpio,MPI_File_open,,PARALLEL=no)) - fi + X-yes) + dnl We want to compile a parallel library with a compiler that + dnl may already know how to link with MPI and MPI-IO. + AC_MSG_RESULT(provided by compiler) + PARALLEL=yes + + dnl Try link a simple MPI program. If fail, try again with -lmpi. + AC_TRY_FLINK(mpif.h, [ + integer ierr + call MPI_INIT( ierr )],, + AC_CHECK_FLIB(mpi, [ + include 'mpif.h' + integer ierr + call MPI_INIT( ierr )],, PARALLEL=no)) + + dnl Then try link a simple MPI-IO program. If fail, try again with + dnl -lmpio. + if test "X$PARALLEL" = "Xyes"; then + AC_TRY_FLINK(mpif.h, [ + integer ierr + call MPI_INIT( ierr )], + AC_CHECK_FLIB(mpio, [ + include 'mpif.h' + integer ierr + call MPI_INIT( ierr )],, PARALLEL=no)) + fi - dnl Set RUNPARALLEL to mpirun if not set yet. - if test "X$PARALLEL" = "Xyes" && test -z "$RUNPARALLEL"; then - RUNPARALLEL="mpirun -np \$\${NPROCS:=2}" - fi - ;; + dnl Set RUNPARALLEL to mpirun if not set yet. + if test "X$PARALLEL" = "Xyes" && test -z "$RUNPARALLEL"; then + RUNPARALLEL="mpirun -np \$\${NPROCS:=2}" + fi + ;; - X-mpich) - dnl For normal mpich installation the compiler, mpicc, should know - dnl where the MPI and MPI-IO header files are located and know which - dnl extra libraries need to be linked and will supply appropriate - dnl flags to the underlying compiler. - AC_MSG_RESULT(mpich) - AC_MSG_WARN(*** Why aren't you using an mpicc compiler? ***) - - dnl Apparently mpicc isn't installed correctly so configure must - dnl search for the header files and libraries. Actually we only - dnl have to search for the libraries in order to get the onto the - dnl link line, the user will have already told us about the - dnl locations. Fail if something is missing. - PARALLEL=mpich - AC_CHECK_LIB(mpich,MPI_Init,,AC_MSG_ERROR(no mpich library)) - ;; + X-mpich) + dnl For normal mpich installation the compiler, mpicc, should know + dnl where the MPI and MPI-IO header files are located and know which + dnl extra libraries need to be linked and will supply appropriate + dnl flags to the underlying compiler. + AC_MSG_RESULT(mpich) + AC_MSG_WARN(*** Why aren't you using an mpicc compiler? ***) + + dnl Apparently mpicc isn't installed correctly so configure must + dnl search for the header files and libraries. Actually we only + dnl have to search for the libraries in order to get the onto the + dnl link line, the user will have already told us about the + dnl locations. Fail if something is missing. + PARALLEL=mpich + AC_CHECK_FLIB(fmpich, [ + include 'mpif.h' + integer ierr + call MPI_INIT( ierr )],, AC_MSG_ERROR(no mpich library)) + ;; - *) - AC_MSG_RESULT(error) - AC_MSG_ERROR(\'$enable_parallel\' is not a valid parallel search type) - ;; + *) + AC_MSG_RESULT(error) + AC_MSG_ERROR(\'$enable_parallel\' is not a valid parallel search type) + ;; esac dnl ---------------------------------------------------------------------- dnl Should the `testpar' directory participate in the build? dnl if test -n "$PARALLEL"; then - TESTPARALLEL=testpar + TESTPARALLEL=testpar fi dnl ---------------------------------------------------------------------- @@ -487,90 +506,89 @@ dnl Print some other parallel information and do some sanity checks. dnl ADD_PARALLEL_FILES="no" if test -n "$PARALLEL"; then - dnl We are building a parallel library - AC_DEFINE(HAVE_PARALLEL) - - dnl Display what we found about running programs - AC_MSG_CHECKING(prefix for running on one processor) - AC_MSG_RESULT($RUNSERIAL) - AC_MSG_CHECKING(prefix for running in parallel) - AC_MSG_RESULT($RUNPARALLEL) - - dnl Check that we can link a simple MPI and MPI-IO application - AC_MSG_CHECKING(whether a simple MPI-IO program can be linked) - AC_TRY_LINK(,[MPI_Init();MPI_File_open();], - AC_MSG_RESULT(yes), - AC_MSG_RESULT(no) - AC_MSG_ERROR('unable to link a simple MPI-IO application')) - - dnl There *must* be some way to run in parallel even if it's just the - dnl word `none'. - if test -z "$RUNPARALLEL"; then - AC_MSG_ERROR(no way to run a parallel program) - fi - - dnl If RUNSERIAL or RUNPARALLEL is the word `none' then replace it with - dnl the empty string. - if test "X$RUNSERIAL" = "Xnone"; then - RUNSERIAL= - fi - if test "X$RUNPARALLEL" = "Xnone"; then - RUNPARALLEL= - fi - - ADD_PARALLEL_FILES="yes" + dnl Display what we found about running programs + AC_MSG_CHECKING(prefix for running on one processor) + AC_MSG_RESULT($RUNSERIAL) + AC_MSG_CHECKING(prefix for running in parallel) + AC_MSG_RESULT($RUNPARALLEL) + + dnl Check that we can link a simple MPI and MPI-IO application + AC_MSG_CHECKING(whether a simple MPI-IO program can be linked) + AC_TRY_FLINK(mpif.h,[ + integer ierr + call MPI_INIT( ierr )], + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no) + AC_MSG_ERROR('unable to link a simple MPI-IO application')) + + dnl There *must* be some way to run in parallel even if it's just the + dnl word `none'. + if test -z "$RUNPARALLEL"; then + AC_MSG_ERROR(no way to run a parallel program) + fi + + dnl If RUNSERIAL or RUNPARALLEL is the word `none' then replace it with + dnl the empty string. + if test "X$RUNSERIAL" = "Xnone"; then + RUNSERIAL= + fi + if test "X$RUNPARALLEL" = "Xnone"; then + RUNPARALLEL= + fi + + ADD_PARALLEL_FILES="yes" fi AC_SUBST(ADD_PARALLEL_FILES) AC_MSG_CHECKING(make) AC_SUBST_FILE(DEPEND) if test "`${MAKE-make} --version -f /dev/null 2>/dev/null |\ - sed -n 1p|cut -c1-8`" = "GNU Make"; then - AC_MSG_RESULT(GNU make) - GMAKE=yes - if test "X$GCC" = "Xyes"; then - DEPEND=config/depend1 - else - DEPEND=config/depend2 - fi + sed -n 1p|cut -c1-8`" = "GNU Make"; then + AC_MSG_RESULT(GNU make) + GMAKE=yes + if test "X$GCC" = "Xyes"; then + DEPEND=config/depend1 + else + DEPEND=config/depend2 + fi else - AC_MSG_RESULT(generic) + AC_MSG_RESULT(generic) fi dnl How do we include another file into a Makefile? if test -z "$DEPEND"; then - AC_MSG_CHECKING(how to include a makefile) + AC_MSG_CHECKING(how to include a makefile) - dnl The include file contains the target for `foo' - cat >makeinc <<EOF + dnl The include file contains the target for `foo' + cat >makeinc <<EOF foo: @: EOF - while true; do dnl for break - dnl pmake. We have to be careful because some pmake think that the - dnl contents of the MAKE environment variable is a target. - echo '.include <makeinc>' >maketest - if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then - AC_MSG_RESULT([.include <FILE>]) - DEPEND=config/depend3 - break - fi + while true; do dnl for break + dnl pmake. We have to be careful because some pmake think that the + dnl contents of the MAKE environment variable is a target. + echo '.include <makeinc>' >maketest + if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then + AC_MSG_RESULT([.include <FILE>]) + DEPEND=config/depend3 + break + fi - dnl Most make's use `include FILE' - echo 'include makeinc' >maketest - if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then - AC_MSG_RESULT(include FILE) - DEPEND=config/depend4 - break; - fi + dnl Most make's use `include FILE' + echo 'include makeinc' >maketest + if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then + AC_MSG_RESULT(include FILE) + DEPEND=config/depend4 + break; + fi - dnl default - AC_MSG_RESULT(you have a deficient make command) - DEPEND=config/dependN - break - done - rm makeinc maketest + dnl default + AC_MSG_RESULT(you have a deficient make command) + DEPEND=config/dependN + break + done + rm makeinc maketest fi dnl Some cleanup stuff @@ -581,25 +599,24 @@ dnl Determine the runtime libraries we may need to include in the dnl libtools command so that executables will find the correct dynamic dnl libraries. dnl -DYNAMIC_DIRS="" +AC_SUBST(DYNAMIC_DIRS) DYNAMIC_DIRS="" if test -n "$LDFLAGS"; then - for d in $LDFLAGS ; do - case "$d" in - -L*) - d=`echo $d | sed -e 's/-L//g'` - case "$d" in - .*) - dnl If the path isn't absolute, make it so by prepending the - dnl ROOT directory to it. - d=${ROOT}/$d - ;; - esac - DYNAMIC_DIRS="-R${d} $DYNAMIC_DIRS" - ;; - esac - done + for d in $LDFLAGS ; do + case "$d" in + -L*) + d=`echo $d | sed -e 's/-L//g'` + case "$d" in + .*) + dnl If the path isn't absolute, make it so by prepending the + dnl ROOT directory to it. + d=${ROOT}/$d + ;; + esac + DYNAMIC_DIRS="-R${d} $DYNAMIC_DIRS" + ;; + esac + done fi -AC_SUBST(DYNAMIC_DIRS) dnl ---------------------------------------------------------------------- dnl Build the Makefiles. Almost every Makefile.in will begin with the line @@ -611,17 +628,17 @@ AC_SUBST_FILE(CONCLUDE) CONCLUDE=config/conclude dnl The directory search list if test -z "$SEARCH"; then - AC_SUBST(SEARCH) SEARCH='$(srcdir) $(top_builddir)/src $(top_srcdir)/src' - cmd='echo $SEARCH |sed "s/ /'$SEARCH_SEP'/g"' - SEARCH="$SEARCH_RULE`eval $cmd`" + AC_SUBST(SEARCH) SEARCH='$(srcdir) $(top_builddir)/src $(top_srcdir)/src' + cmd='echo $SEARCH |sed "s/ /'$SEARCH_SEP'/g"' + SEARCH="$SEARCH_RULE`eval $cmd`" fi dnl We don't need to say when we're entering directories if we're using dnl GNU make becuase make does it for us. if test "X$GMAKE" = "Xyes"; then - AC_SUBST(SETX) SETX=":" + AC_SUBST(SETX) SETX=":" else - AC_SUBST(SETX) SETX="set -x" + AC_SUBST(SETX) SETX="set -x" fi dnl Some cleanup stuff @@ -639,7 +656,7 @@ touch ./config/stamp1 PARALLEL_MAKE= if test -n "$TESTPARALLEL"; then - PARALLEL_MAKE=$TESTPARALLEL/Makefile + PARALLEL_MAKE=$TESTPARALLEL/Makefile fi dnl Then the config.status file (but not makefiles) @@ -649,11 +666,11 @@ AC_OUTPUT(config/depend1 config/depend2 config/depend3 config/depend4 - config/dependN + config/dependN config/commence config/conclude Makefile - src/H5fortran_types.f90 + src/H5fortran_types.f90 src/Makefile test/Makefile $PARALLEL_MAKE |