mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
3935629cd6
Feature Add Description: Added a "libhdf5_fortran.settings" file to the Fortran library. Platforms tested: Arabica (Fortran) Modi4 (Parallel & Fortran) Vebena (Fortran & C++) Misc. update:
1064 lines
31 KiB
Plaintext
1064 lines
31 KiB
Plaintext
dnl Process this file with autoconf to produce configure.
|
|
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 Initialize configure.
|
|
dnl
|
|
AC_REVISION($Id$)
|
|
|
|
dnl AC_INIT takes the name of the package, the version number, and an
|
|
dnl email address to report bugs. AC_CONFIG_SRCDIR takes a unique file
|
|
dnl as its argument.
|
|
dnl
|
|
dnl NOTE: Don't forget to change the version number here when we do a
|
|
dnl release!!!
|
|
dnl
|
|
AC_INIT([HDF5 Fortran], [1.5.51], [hdfhelp@ncsa.uiuc.edu])
|
|
AC_CONFIG_SRCDIR([src/HDF5.f90])
|
|
AC_CONFIG_HEADER([src/H5config_fortran.h])
|
|
|
|
AC_CONFIG_AUX_DIR([../bin])
|
|
|
|
AC_OUTPUT_COMMANDS([
|
|
echo "creating src/H5pubconf_fortran.h"
|
|
sed 's/#define /#define H5_/' < src/H5config_fortran.h |\
|
|
sed 's/#undef /#undef H5_/' > pubconf_fortran
|
|
|
|
if test ! -f src/H5pubconf_fortran.h; then
|
|
/bin/mv -f pubconf_fortran src/H5pubconf_fortran.h
|
|
elif (diff pubconf_fortran src/H5pubconf_fortran.h >/dev/null); then
|
|
/bin/rm -f pubconf_fortran
|
|
echo "src/H5pubconf_fortran.h is unchanged"
|
|
else
|
|
/bin/mv -f pubconf_fortran src/H5pubconf_fortran.h
|
|
fi
|
|
])
|
|
|
|
AC_CANONICAL_HOST
|
|
AC_SUBST(CPPFLAGS)
|
|
AC_SUBST(FFLAGS)
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl HDF5 integer variables for the H5fortran_types.f90 file.
|
|
dnl
|
|
AC_SUBST(R_LARGE)
|
|
AC_SUBST(R_INTEGER)
|
|
AC_SUBST(HSIZE_T)
|
|
AC_SUBST(HSSIZE_T)
|
|
AC_SUBST(HID_T)
|
|
AC_SUBST(SIZE_T)
|
|
AC_SUBST(OBJECT_NAMELEN_DEFAULT_F)
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Dump all shell variables values.
|
|
dnl
|
|
AC_MSG_CHECKING(shell variables initial values)
|
|
set >&5
|
|
AC_MSG_RESULT(done)
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Where is the root of the source tree. Give an absolute address so
|
|
dnl we can find it no matter which directory of the distribution is our
|
|
dnl current directory. The built-in pwd fails on some systems, but the
|
|
dnl /bin/pwd version works OK.
|
|
dnl
|
|
if test -x "/bin/pwd"; then
|
|
pwd=/bin/pwd
|
|
else
|
|
pwd=pwd
|
|
fi
|
|
AC_SUBST(ROOT) ROOT=`$pwd`
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Check that the cache file was build on the same host as what we're
|
|
dnl running on now.
|
|
dnl
|
|
AC_CACHE_CHECK(for cached host,hdf5_cv_host,hdf5_cv_host="none");
|
|
if test "X$hdf5_cv_host" = "Xnone"; then
|
|
hdf5_cv_host=$host
|
|
elif test "$hdf5_cv_host" != "$host"; then
|
|
echo "The config.cache file was generated on $hdf5_cv_host but"
|
|
echo "this is $host. Please remove that file and try again."
|
|
AC_MSG_ERROR(config.cache file is invalid)
|
|
fi
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Source any special files that we need. These files normally aren't
|
|
dnl present but can be used by the maintainers to fine tune things like
|
|
dnl turning on debug or profiling flags for the compiler. The search order
|
|
dnl is:
|
|
dnl
|
|
dnl CPU-VENDOR-OS
|
|
dnl VENDOR-OS
|
|
dnl CPU-OS
|
|
dnl CPU-VENDOR
|
|
dnl OS
|
|
dnl VENDOR
|
|
dnl CPU
|
|
dnl
|
|
dnl If the `OS' ends with a version number then remove it. For instance,
|
|
dnl `freebsd3.1' would become `freebsd'
|
|
case "$host_os" in
|
|
aix4.*)
|
|
host_os_novers=aix4.x
|
|
;;
|
|
aix5.*)
|
|
host_os_novers=aix5.x
|
|
;;
|
|
freebsd*)
|
|
host_os_novers=freebsd
|
|
;;
|
|
irix5.*)
|
|
host_os_novers=irix5.x
|
|
;;
|
|
irix6.*)
|
|
host_os_novers=irix6.x
|
|
;;
|
|
osf4.*)
|
|
host_os_novers=osf4.x
|
|
;;
|
|
osf5.*)
|
|
host_os_novers=osf5.x
|
|
;;
|
|
solaris2.*)
|
|
host_os_novers=solaris2.x
|
|
;;
|
|
*)
|
|
host_os_novers=$host_os
|
|
;;
|
|
esac
|
|
|
|
host_config="none"
|
|
for f in $host_cpu-$host_vendor-$host_os \
|
|
$host_cpu-$host_vendor-$host_os_novers \
|
|
$host_vendor-$host_os \
|
|
$host_vendor-$host_os_novers \
|
|
$host_cpu-$host_os \
|
|
$host_cpu-$host_os_novers \
|
|
$host_cpu-$host_vendor \
|
|
$host_os \
|
|
$host_os_novers \
|
|
$host_vendor \
|
|
$host_cpu ; do
|
|
AC_MSG_CHECKING(for config $f)
|
|
if test -f $srcdir/config/$f; then
|
|
host_config=$srcdir/config/$f
|
|
AC_MSG_RESULT(found)
|
|
break
|
|
fi
|
|
AC_MSG_RESULT(no)
|
|
done
|
|
if test "X$host_config" != "Xnone"; then
|
|
CC_BASENAME="`echo $CC |cut -f1 -d' ' |xargs basename 2>/dev/null`"
|
|
. $host_config
|
|
fi
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Check for programs.
|
|
dnl
|
|
AC_PROG_CC
|
|
AC_PROG_CPP dnl this is checked for when AC_HEADER_STDC is done
|
|
CC_BASENAME="`echo $CC |cut -f1 -d' ' |xargs basename 2>/dev/null`"
|
|
AC_PROG_MAKE_SET
|
|
AC_PROG_INSTALL
|
|
AM_PROG_LIBTOOL
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Check if they have Perl installed on their system. We only need Perl
|
|
dnl if they're using a GNU compiler.
|
|
dnl
|
|
AC_SUBST(PERL) PERL=""
|
|
if test "X$GCC" = "Xyes"; then
|
|
AC_CHECK_PROGS(PERL, perl,, $PATH)
|
|
fi
|
|
|
|
if test -z "$AR"; then
|
|
AC_CHECK_PROGS(AR,ar xar,:,$PATH)
|
|
fi
|
|
AC_SUBST(AR)
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Sometimes makes think the `.PATH:' appearing before the first rule
|
|
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
|
|
VPATH=$srcdir/config $srcdir/src $srcdir/bin
|
|
.c.o:
|
|
cp $< H5_f.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
|
|
|
|
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_f.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
|
|
|
|
dnl pmake uses the construct `.PATH: DIR1 DIR2
|
|
cat >maketest <<EOF
|
|
.PATH: $srcdir/config $srcdir/src $srcdir/bin
|
|
.c.o:
|
|
cp $< H5_f.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: '
|
|
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 ----------------------------------------------------------------------
|
|
dnl Production flags? Save the value in $CONFIG_MODE so we have it for
|
|
dnl the record.
|
|
dnl
|
|
AC_MSG_CHECKING([for production mode])
|
|
AC_ARG_ENABLE([production],
|
|
[AC_HELP_STRING([--enable-production],
|
|
[Determines how to run the compiler.])])
|
|
|
|
case "X-$enable_production" in
|
|
X-yes)
|
|
AC_MSG_RESULT("production")
|
|
|
|
dnl Remove the "-g" flag from CFLAGS if it's in there.
|
|
dnl
|
|
CFLAGS_temp=""
|
|
if test -n "$CFLAGS"; then
|
|
for d in $CFLAGS ; do
|
|
if test "X$d" != "X-g"; then
|
|
CFLAGS_temp="$CFLAGS_temp $d"
|
|
fi
|
|
done
|
|
CFLAGS=$CFLAGS_temp
|
|
fi
|
|
|
|
CONFIG_MODE=production
|
|
CFLAGS="$CFLAGS $PROD_CFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $PROD_CPPFLAGS"
|
|
;;
|
|
X-|X-no)
|
|
AC_MSG_RESULT("development")
|
|
CONFIG_MODE=development
|
|
CFLAGS="$CFLAGS $DEBUG_CFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $DEBUG_CPPFLAGS"
|
|
;;
|
|
X-pg|X-profile)
|
|
AC_MSG_RESULT("profile")
|
|
CONFIG_MODE=profile
|
|
CFLAGS="$CXXFLAGS $PROFILE_CFLAGS"
|
|
CPPFLAGS="$CPPFLAGS $PROFILE_CPPFLAGS"
|
|
;;
|
|
*)
|
|
AC_MSG_RESULT("user-defined")
|
|
CONFIG_MODE="$X-enableval"
|
|
;;
|
|
esac
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
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)
|
|
|
|
if test "X$STATIC_EXEC" = "Xyes"; then
|
|
echo "yes"
|
|
LT_STATIC_EXEC="-all-static"
|
|
else
|
|
echo "no"
|
|
LT_STATIC_EXEC=""
|
|
fi
|
|
AC_SUBST(LT_STATIC_EXEC)
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Test for 64bit stuff before the data types and their sizes. The
|
|
dnl result could effect the outcome of the sizeof macros below.
|
|
dnl
|
|
case "$host_cpu-$host_vendor-$host_os" in
|
|
*linux*)
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Enable large file support on linux? Store the result in the LINUX_LFS
|
|
dnl variable for posterity
|
|
AC_ARG_ENABLE([linux-lfs],
|
|
[AC_HELP_STRING([--enable-linux-lfs],
|
|
[Enable support for large (64-bit)
|
|
files on Linux. [default=check]])])
|
|
|
|
LINUX_LFS="no"
|
|
case "X-$enable_linux_lfs" in
|
|
X-yes)
|
|
LINUX_LFS=yes
|
|
;;
|
|
X-no)
|
|
;;
|
|
X-|*)
|
|
MAJOR_VER="`uname -r | cut -d '.' -f1`"
|
|
MINOR_VER="`uname -r | cut -d '.' -f2`"
|
|
|
|
if test ${MAJOR_VER} -gt 2 -o ${MAJOR_VER} -eq 2 -a ${MINOR_VER} -ge 4; then
|
|
LINUX_LFS="yes"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
AC_MSG_CHECKING([for large file support mode on Linux])
|
|
if test "X$LINUX_LFS" = "Xyes"; then
|
|
AC_MSG_RESULT([enabled])
|
|
CPPFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE $CPPFLAGS"
|
|
else
|
|
AC_MSG_RESULT([disabled])
|
|
fi
|
|
|
|
dnl Add POSIX support on Linux systems, so <features.h> defines
|
|
dnl __USE_POSIX, which is required to get the prototype for fdopen
|
|
dnl defined correctly in <stdio.h>
|
|
CPPFLAGS="-D_POSIX_SOURCE $CPPFLAGS"
|
|
|
|
dnl Also add BSD support on Linux systems, so <features.h> defines
|
|
dnl __USE_BSD, which is required to get the prototype for strdup
|
|
dnl defined correctly in <string.h> and snprintf & vsnprintf defined
|
|
dnl correctly in <stdio.h>
|
|
CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS"
|
|
;;
|
|
esac
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Check for a Fortran 9X compiler, how to optimize it, and how to
|
|
dnl include modules.
|
|
dnl
|
|
AC_PROG_F9X
|
|
dnl AC_F9X_OPT_FLAGS
|
|
AC_F9X_MODS
|
|
|
|
dnl Change back to the C language
|
|
AC_LANG_C
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Checks for libraries.
|
|
dnl
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Is the GNU zlib present? It has a header file `zlib.h' and a library
|
|
dnl `-lz' and their locations might be specified with the `--with-zlib'
|
|
dnl command-line switch. The value is an include path and/or a library path.
|
|
dnl If the library path is specified then it must be preceded by a comma.
|
|
dnl
|
|
AC_ARG_WITH([zlib],
|
|
[AC_HELP_STRING([--with-zlib=DIR],
|
|
[Use zlib library for external deflate I/O
|
|
filter [default=yes]])],,
|
|
withval=yes)
|
|
|
|
case $withval in
|
|
yes)
|
|
HAVE_ZLIB="yes"
|
|
AC_CHECK_HEADERS([zlib.h], [HAVE_ZLIB_H="yes"])
|
|
AC_CHECK_LIB([z], [compress2],, [unset HAVE_ZLIB])
|
|
AC_CHECK_FUNC([compress2], [HAVE_COMPRESS2="yes"])
|
|
|
|
if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
|
|
AC_MSG_ERROR([couldn't find zlib library])
|
|
fi
|
|
;;
|
|
no)
|
|
HAVE_ZLIB="no"
|
|
AC_MSG_CHECKING([for GNU zlib])
|
|
AC_MSG_RESULT([suppressed])
|
|
;;
|
|
*)
|
|
HAVE_ZLIB="yes"
|
|
case "$withval" in
|
|
*,*)
|
|
zlib_inc="`echo $withval |cut -f1 -d,`"
|
|
zlib_lib="`echo $withval |cut -f2 -d, -s`"
|
|
;;
|
|
*)
|
|
if test -n "$withval"; then
|
|
zlib_inc="$withval/include"
|
|
zlib_lib="$withval/lib"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
|
|
dnl can mess some compilers up.
|
|
if test "X$zlib_inc" = "X/usr/include"; then
|
|
zlib_inc=""
|
|
fi
|
|
if test "X$zlib_lib" = "X/usr/lib"; then
|
|
zlib_lib=""
|
|
fi
|
|
|
|
saved_CPPFLAGS="$CPPFLAGS"
|
|
saved_LDFLAGS="$LDFLAGS"
|
|
|
|
if test -n "$zlib_inc"; then
|
|
CPPFLAGS="$CPPFLAGS -I$zlib_inc"
|
|
fi
|
|
|
|
AC_CHECK_HEADERS([zlib.h],
|
|
[HAVE_ZLIB_H="yes"],
|
|
[CPPFLAGS="$saved_CPPFLAGS"])
|
|
|
|
if test -n "$zlib_lib"; then
|
|
LDFLAGS="$LDFLAGS -L$zlib_lib"
|
|
fi
|
|
|
|
AC_CHECK_LIB([z], [compress2],,
|
|
[LDFLAGS="$saved_LDFLAGS"; unset HAVE_ZLIB])
|
|
AC_CHECK_FUNC([compress2], [HAVE_COMPRESS2="yes"])
|
|
|
|
if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
|
|
AC_MSG_ERROR([couldn't find zlib library])
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes" -a "x$HAVE_COMPRESS2" = "xyes"; then
|
|
AC_DEFINE(HAVE_FILTER_DEFLATE, 1,
|
|
[Define if support for deflate filter is enabled])
|
|
fi
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Is the szlib present? It has a header file `szlib.h' and a library
|
|
dnl `-lsz' and their locations might be specified with the `--with-szlib'
|
|
dnl command-line switch. The value is an include path and/or a library path.
|
|
dnl If the library path is specified then it must be preceded by a comma.
|
|
dnl
|
|
AC_ARG_WITH([szlib],
|
|
[AC_HELP_STRING([--with-szlib=DIR],
|
|
[Use szlib library for external szlib I/O
|
|
filter [default=yes]])],,
|
|
withval=yes)
|
|
|
|
case $withval in
|
|
yes)
|
|
HAVE_SZLIB="yes"
|
|
AC_CHECK_HEADERS([szlib.h], [HAVE_SZLIB_H="yes"])
|
|
AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],, [unset HAVE_SZLIB])
|
|
|
|
if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
|
|
AC_MSG_ERROR([couldn't find szlib library])
|
|
fi
|
|
;;
|
|
no)
|
|
HAVE_SZLIB="no"
|
|
AC_MSG_CHECKING([for szlib])
|
|
AC_MSG_RESULT([suppressed])
|
|
;;
|
|
*)
|
|
HAVE_SZLIB="yes"
|
|
case "$withval" in
|
|
*,*)
|
|
szlib_inc="`echo $withval |cut -f1 -d,`"
|
|
szlib_lib="`echo $withval |cut -f2 -d, -s`"
|
|
;;
|
|
*)
|
|
if test -n "$withval"; then
|
|
szlib_inc="$withval/include"
|
|
szlib_lib="$withval/lib"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
|
|
dnl can mess some compilers up.
|
|
if test "X$szlib_inc" = "X/usr/include"; then
|
|
szlib_inc=""
|
|
fi
|
|
if test "X$szlib_lib" = "X/usr/lib"; then
|
|
szlib_lib=""
|
|
fi
|
|
|
|
saved_CPPFLAGS="$CPPFLAGS"
|
|
saved_LDFLAGS="$LDFLAGS"
|
|
|
|
if test -n "$szlib_inc"; then
|
|
CPPFLAGS="$CPPFLAGS -I$szlib_inc"
|
|
fi
|
|
|
|
AC_CHECK_HEADERS([szlib.h],
|
|
[HAVE_SZLIB_H="yes"],
|
|
[CPPFLAGS="$saved_CPPFLAGS"])
|
|
|
|
if test -n "$szlib_lib"; then
|
|
LDFLAGS="$LDFLAGS -L$szlib_lib"
|
|
fi
|
|
|
|
AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],,
|
|
[LDFLAGS="$saved_LDFLAGS"; unset HAVE_SZLIB])
|
|
|
|
if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
|
|
AC_MSG_ERROR([couldn't find szlib library])
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
if test "x$HAVE_SZLIB" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then
|
|
AC_DEFINE(HAVE_FILTER_SZIP, 1,
|
|
[Define if support for szip filter is enabled])
|
|
fi
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Checks for header files.
|
|
dnl
|
|
|
|
dnl Checkpoint the cache
|
|
AC_CACHE_SAVE
|
|
|
|
dnl Change back to the Fortran 90 language
|
|
AC_LANG_FORTRAN9X
|
|
|
|
dnl See if the compiler will support the "-I." option
|
|
FFLAGS_saved=$FFLAGS
|
|
FFLAGS="$FFLAGS -I."
|
|
|
|
AC_MSG_CHECKING(if compiler supports -I. option)
|
|
AC_TRY_FCOMPILE([
|
|
program conftest
|
|
end
|
|
], AC_MSG_RESULT(yes),
|
|
AC_MSG_RESULT(no)
|
|
FFLAGS="$FFLAGS_saved")
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl The following variables are used to distinguish between building a
|
|
dnl serial and parallel library.
|
|
dnl
|
|
dnl HAVE_PARALLEL -- defined in H5config.h if we are building
|
|
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 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
|
|
dnl PARALLEL -- This variable is set to a non-null value if
|
|
dnl configure thinks we're compiling a parallel
|
|
dnl version of the library.
|
|
dnl
|
|
dnl RUNSERIAL -- This is a command which will be prepended to
|
|
dnl the executable name to run the executable using
|
|
dnl a single process. For serial versions of the
|
|
dnl library this will normally be empty. For parallel
|
|
dnl versions it might be something like `mpirun -np 1'.
|
|
dnl The value of this variable is substituted in *.in
|
|
dnl files.
|
|
dnl
|
|
dnl RUNPARALLEL -- This is a command which will be prepended to
|
|
dnl the executable name to run the executable on
|
|
dnl multiple processors. For the serial library the
|
|
dnl value will normally be the empty string. For
|
|
dnl parallel library it should be something like
|
|
dnl `mpi -np $$NPROCS' where NPROCS will eventually
|
|
dnl contain the number of processors on which to run
|
|
dnl the executable (the double dollarsigns are to
|
|
dnl protect the expansion until make executes the
|
|
dnl command). The value of this variable is
|
|
dnl substituted in *.in files.
|
|
dnl
|
|
AC_SUBST(PARALLEL)
|
|
AC_SUBST(RUNSERIAL)
|
|
AC_SUBST(RUNPARALLEL)
|
|
AC_SUBST(TESTPARALLEL)
|
|
|
|
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 `mpif90' the executable should be run with `mpirun'
|
|
dnl from the same directory as mpif90 if it exists.
|
|
dnl
|
|
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)
|
|
fi
|
|
;;
|
|
|
|
*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.
|
|
;;
|
|
esac
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Turn on internal I/O filters by setting macros in header files
|
|
dnl Internal I/O filters are contained entirely within the library and do
|
|
dnl not depend on external headers or libraries. The shuffle filter is
|
|
dnl an example of an internal filter, while the gzip filter is an example of
|
|
dnl an external filter. Each external filter is controlled with an
|
|
dnl "--with-foo=" configure flag.
|
|
dnl
|
|
AC_MSG_CHECKING(for I/O filters)
|
|
AC_ARG_ENABLE([filters],
|
|
[AC_HELP_STRING([--enable-filters=all],
|
|
[Turn on all internal I/O filters. One may
|
|
also specify a comma-separated list of filters
|
|
or the word no. The default is all internal
|
|
I/O filters.])],
|
|
[FILTERS=$enableval])
|
|
|
|
AC_SUBST([FILTERS])
|
|
dnl Eventually: all_filters="shuffle,foo,bar,baz"
|
|
all_filters="shuffle,fletcher32"
|
|
case "X-$FILTERS" in
|
|
X-|X-all)
|
|
FILTERS=$all_filters
|
|
AC_MSG_RESULT(all ($FILTERS))
|
|
;;
|
|
X-no|X-none)
|
|
AC_MSG_RESULT(none)
|
|
FILTERS="none"
|
|
;;
|
|
*)
|
|
AC_MSG_RESULT($FILTERS)
|
|
;;
|
|
esac
|
|
|
|
if test -n "$FILTERS"; then
|
|
for filter in `echo $FILTERS | tr 'a-z,' 'A-Z '`; do
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Have to use separate 'if' construct for each filter, so that autoheader
|
|
dnl can detect the AC_DEFINE for each one...
|
|
dnl
|
|
if test $filter = "SHUFFLE"; then
|
|
AC_DEFINE(HAVE_FILTER_SHUFFLE, 1,
|
|
[Define if support for shuffle filter is enabled])
|
|
fi
|
|
if test $filter = "FLETCHER32"; then
|
|
AC_DEFINE(HAVE_FILTER_FLETCHER32, 1,
|
|
[Define if support for Fletcher32 checksum is enabled])
|
|
fi
|
|
done
|
|
fi
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl What header files and libraries do we have to look for for parallel
|
|
dnl support? For the most part, search paths are already specified with
|
|
dnl CPPFLAGS and LDFLAGS or are known to the compiler. If the user says
|
|
dnl `--disable-parallel' but specifies a known parallel compiler (like mpicc
|
|
dnl or mpcc) then parallel support is enabled but configure doesn't search
|
|
dnl for any parallel header files or libraries.
|
|
dnl
|
|
AC_ARG_ENABLE([parallel],
|
|
[AC_HELP_STRING([--enable-parallel],
|
|
[Search for MPI-IO and MPI support files])])
|
|
|
|
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_FLINK(mpif.h, [
|
|
call mpi_file_open( ierr )],,
|
|
AC_CHECK_FLIB(mpi, [
|
|
include 'mpif.h'
|
|
call mpi_file_open( 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, [
|
|
call mpi_file_open( ierr )],,
|
|
AC_CHECK_FLIB(mpio, [
|
|
include 'mpif.h'
|
|
call mpi_file_open( 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
|
|
;;
|
|
|
|
*)
|
|
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
|
|
fi
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Print some other parallel information and do some sanity checks.
|
|
dnl
|
|
ADD_PARALLEL_FILES="no"
|
|
if test -n "$PARALLEL"; then
|
|
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,[
|
|
call mpi_file_open( 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"
|
|
|
|
AC_MSG_CHECKING([for MPI_Comm_c2f and MPI_Comm_f2c functions])
|
|
|
|
dnl Change to the C language
|
|
AC_LANG_C
|
|
|
|
AC_TRY_LINK([
|
|
#include <mpi.h>
|
|
],
|
|
[MPI_Comm c_comm; MPI_Comm_c2f(c_comm)],
|
|
AC_DEFINE(HAVE_MPI_MULTI_LANG_Comm, 1,
|
|
[Define if \`MPI_Comm_c2f' and \`MPI_Comm_f2c' exists])
|
|
AC_MSG_RESULT(yes),
|
|
AC_MSG_RESULT(no)
|
|
)
|
|
|
|
AC_MSG_CHECKING([for MPI_Info_c2f and MPI_Info_f2c functions])
|
|
AC_TRY_LINK([
|
|
#include <mpi.h>
|
|
],
|
|
[MPI_Info c_info; MPI_Info_c2f(c_info)],
|
|
AC_DEFINE(HAVE_MPI_MULTI_LANG_Info, 1,
|
|
[Define if \`MPI_Info_c2f' and \`MPI_Info_f2c' exists])
|
|
AC_MSG_RESULT(yes),
|
|
AC_MSG_RESULT(no)
|
|
)
|
|
|
|
dnl Change to the Fortran 90 language
|
|
AC_LANG_FORTRAN9X
|
|
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
|
|
else
|
|
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)
|
|
|
|
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
|
|
|
|
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
|
|
fi
|
|
|
|
dnl Some cleanup stuff
|
|
rm -f conftest core core.* *.core conftest.o conftest.c dummy.o $ac_clean_files
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Set some variables for general configuration information to be saved
|
|
dnl and installed with the libraries.
|
|
dnl
|
|
|
|
dnl HDF5 version from the first line of the README.txt file.
|
|
H5_VERSION="`cut -d' ' -f3 $srcdir/README.txt | head -1`"
|
|
AC_SUBST(H5_VERSION)
|
|
|
|
dnl Configuration date
|
|
AC_SUBST(CONFIG_DATE) CONFIG_DATE="`date`"
|
|
|
|
dnl User doing the configuration
|
|
AC_SUBST(CONFIG_USER) CONFIG_USER="`whoami`@`hostname`"
|
|
if test -n "$ORGANIZATION"; then
|
|
CONFIG_USER="$CONFIG_USER at $ORGANIZATION"
|
|
fi
|
|
|
|
dnl Configuration mode (production, development, profile, etc) saved above.
|
|
AC_SUBST(CONFIG_MODE)
|
|
|
|
dnl Byte sex from the AC_C_BIGENDIAN macro.
|
|
AC_SUBST(BYTESEX)
|
|
if test "X$ac_cv_c_bigendian" = "Xyes"; then
|
|
BYTESEX="big-endian"
|
|
else
|
|
BYTESEX="little-endian"
|
|
fi
|
|
|
|
dnl Parallel support? (set above except empty if none)
|
|
PARALLEL=${PARALLEL:-no}
|
|
|
|
dnl Compiler with version information. This consists of the full path
|
|
dnl name of the compiler and the reported version number.
|
|
AC_SUBST(CC_VERSION)
|
|
if `echo $CC | grep / 2>&1 /dev/null`; then
|
|
CC_VERSION="$CC"
|
|
else
|
|
CC_VERSION="$CC";
|
|
for x in `echo $PATH | sed -e 's/:/ /g'`; do
|
|
if test -x $x/$CC; then
|
|
CC_VERSION="$x/$CC"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
if test -n "$cc_vendor" && test -n "$cc_version"; then
|
|
CC_VERSION="$CC_VERSION ($cc_vendor-$cc_version)"
|
|
fi
|
|
|
|
AC_SUBST(FC_VERSION)
|
|
if `echo $F9X | grep / 2>&1 /dev/null`; then
|
|
FC_VERSION="$F9X"
|
|
else
|
|
FC_VERSION="$F9X";
|
|
for x in `echo $PATH | sed -e 's/:/ /g'`; do
|
|
if test -x $x/$F9X; then
|
|
FC_VERSION="$x/$F9X"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
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
|
|
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
|
|
fi
|
|
|
|
dnl ----------------------------------------------------------------------
|
|
dnl Build the Makefiles. Almost every Makefile.in will begin with the line
|
|
dnl `@COMMENCE@' and end with the line `@CONCLUDE@'. These lines insert
|
|
dnl various files from the config directory into the Makefile.
|
|
dnl
|
|
AC_SUBST_FILE(COMMENCE) COMMENCE=config/commence
|
|
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`"
|
|
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=":"
|
|
else
|
|
AC_SUBST(SETX) SETX="set -x"
|
|
fi
|
|
|
|
dnl Some cleanup stuff
|
|
rm -f conftest conftest.o conftest.c core core.* *.core dummy.o
|
|
|
|
dnl Build config.status, touch the stamp files, and build all the Makefiles.
|
|
dnl The order is such that the first `make' does not need to update any
|
|
dnl configuration information. See config/commence.in for the order in which
|
|
dnl things need to be done.
|
|
|
|
dnl First the stamp1 file for H5config.h.in
|
|
mkdir ./config >/dev/null 2>&1
|
|
touch ./config/stamp1
|
|
|
|
PARALLEL_MAKE=
|
|
|
|
if test -n "$TESTPARALLEL"; then
|
|
PARALLEL_MAKE=$TESTPARALLEL/Makefile
|
|
fi
|
|
|
|
dnl Then the config.status file (but not makefiles)
|
|
saved_no_create=$no_create
|
|
no_create=yes
|
|
AC_CONFIG_FILES([config/depend1
|
|
config/depend2
|
|
config/depend3
|
|
config/depend4
|
|
config/dependN
|
|
config/commence
|
|
config/conclude
|
|
Makefile
|
|
src/h5fc
|
|
src/H5fortran_types.f90
|
|
src/libhdf5_fortran.settings
|
|
src/Makefile
|
|
test/Makefile
|
|
$PARALLEL_MAKE
|
|
examples/Makefile])
|
|
AC_OUTPUT
|
|
no_create=$saved_no_create
|
|
|
|
dnl Then the stamp2 file for H5config_fortran.h
|
|
touch ./config/stamp2
|
|
|
|
dnl Finally the makefiles
|
|
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
|
|
|
|
chmod 755 src/h5fc
|