dnl ---------------------------------------------------------------------- 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 ---------------------------------------------------------------------- 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 C++], [1.6.4-snap2], [hdfhelp@ncsa.uiuc.edu]) AC_CONFIG_SRCDIR([src/H5Library.cpp]) AC_CONFIG_AUX_DIR([../bin]) AC_CANONICAL_HOST AC_SUBST(CPPFLAGS) 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 aix*) host_os_novers=aix ;; 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 dnl Different compilers may need default libraries. They are specified in dnl the config/* files, so we put this statement here so that it'll be dnl set by the code which follows... dnl AC_SUBST(DEFAULT_LIBS) DEFAULT_LIBS="" 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 CXX_BASENAME="`echo $CXX |cut -f1 -d' ' |xargs basename 2>/dev/null`" . $host_config fi dnl ---------------------------------------------------------------------- dnl Check for programs. dnl AC_PROG_CXX AC_PROG_CXXCPP dnl this is checked for when AC_HEADER_STDC is done CXX_BASENAME="`echo $CXX |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 dnl ---------------------------------------------------------------------- dnl Check which archiving tool to use. This needs to be done before dnl the AM_PROG_LIBTOOL macro. dnl 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 </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 </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 </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-|X-yes) AC_MSG_RESULT("production") dnl Remove the "-g" flag from CFLAGS & CXXFLAGS if it's in there. dnl CXXFLAGS_temp="" if test -n "$CXXFLAGS"; then for d in $CXXFLAGS ; do if test "X$d" != "X-g"; then CXXFLAGS_temp="$CXXFLAGS_temp $d" fi done CXXFLAGS=$CXXFLAGS_temp fi 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 CXXFLAGS="$CXXFLAGS $PROD_CXXFLAGS" CPPFLAGS="$CPPFLAGS $PROD_CPPFLAGS" ;; X-no) AC_MSG_RESULT("development") CONFIG_MODE=development CXXFLAGS="$CXXFLAGS $DEBUG_CXXFLAGS" CPPFLAGS="$CPPFLAGS $DEBUG_CPPFLAGS" ;; X-pg|X-profile) AC_MSG_RESULT("profile") CONFIG_MODE=profile CXXFLAGS="$CXXFLAGS $PROFILE_CXXFLAGS" CPPFLAGS="$CPPFLAGS $PROFILE_CPPFLAGS" ;; *) AC_MSG_RESULT("user-defined") CONFIG_MODE="$X-enableval" ;; esac dnl ---------------------------------------------------------------------- dnl Check for system libraries. dnl AC_CHECK_LIB([m], [ceil]) if test "`uname`" = "SunOS" -o "`uname -sr`" = "HP-UX B.11.00"; then dnl ...for Solaris AC_CHECK_LIB([socket], [socket]) AC_CHECK_LIB([nsl], [xdr_int]) fi 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], [AC_HELP_STRING([--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 defines dnl __USE_POSIX, which is required to get the prototype for fdopen dnl defined correctly in CPPFLAGS="-D_POSIX_SOURCE $CPPFLAGS" dnl Also add BSD support on Linux systems, so defines dnl __USE_BSD, which is required to get the prototype for strdup dnl defined correctly in and snprintf & vsnprintf defined dnl correctly in CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS" ;; esac dnl ---------------------------------------------------------------------- dnl Checks for compiler characteristics. dnl AC_LANG_CPLUSPLUS AC_MSG_CHECKING(if $CXX needs old style header files in includes) AC_TRY_RUN([ #include int main(void) { return 0; } ], [ echo no ], [ echo yes CXXFLAGS="${CXXFLAGS} -DOLD_HEADER_FILENAME" ]) AC_MSG_CHECKING(if $CXX can handle namespaces) AC_TRY_RUN([ namespace H5 { int fnord; } int main(void) { using namespace H5; fnord = 37; return 0; } ], [ echo yes ], [ echo no CXXFLAGS="${CXXFLAGS} -DH5_NO_NAMESPACE" ]) AC_MSG_CHECKING(if $CXX supports std) AC_TRY_RUN([ #include using namespace std; int main(void) { string myString("testing namespace std"); return 0; } ], [ echo yes ], [ echo no CXXFLAGS="${CXXFLAGS} -DH5_NO_STD" ]) AC_MSG_CHECKING(if $CXX supports bool types) AC_TRY_RUN([ int main(void) { bool flag; return 0; } ], [ echo yes ], [ echo no CXXFLAGS="${CXXFLAGS} -DBOOL_NOTDEFINED" ]) AC_MSG_CHECKING(if $CXX can handle static cast) AC_TRY_RUN([ int main(void) { float test_float; int test_int; test_float = 37.0; test_int = static_cast (test_float); return 0; } ], [ echo yes ], [ echo no CXXFLAGS="${CXXFLAGS} -DNO_STATIC_CAST" ]) 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 Should the Stream Virtual File Driver be compiled in ? dnl AC_MSG_CHECKING([for Stream Virtual File Driver support]) AC_ARG_ENABLE([stream-vfd], [AC_HELP_STRING([--enable-stream-vfd], [Build the Stream Virtual File Driver [default=no]])], [STREAM_VFD=$enableval]) if test "$STREAM_VFD" = "yes"; then AC_MSG_RESULT([yes]) AC_CHECK_HEADERS([netinet/tcp.h sys/filio.h]) AC_DEFINE([HAVE_STREAM], [1], [Define if the stream virtual file driver should be compiled]) dnl Check if 'socklen_t' available AC_MSG_CHECKING([if socklen_t is defined]) AC_TRY_COMPILE([ #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif ], [socklen_t foo; return 0;], AC_DEFINE([HAVE_SOCKLEN_T], 1, [Define if \`socklen_t' is defined]) AC_MSG_RESULT([yes]), AC_MSG_RESULT([no]) ) else AC_MSG_RESULT([not configured]) fi dnl ---------------------------------------------------------------------- dnl Checks for header files. dnl dnl Checkpoint the cache AC_CACHE_SAVE 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 <' >maketest if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then AC_MSG_RESULT([.include ]) 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 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="" 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 AC_SUBST(DYNAMIC_DIRS) 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 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/Makefile src/h5c++ test/Makefile examples/Makefile]) AC_OUTPUT no_create=$saved_no_create dnl Finally the makefiles test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 chmod 755 src/h5c++ dnl ---------------------------------------------------------------------- dnl Print out a summary of what we are going to build. dnl if test -z "$ECHO_N" -o -z "$ECHO_C"; then if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ECHO_N='' ECHO_C=' ' else ECHO_N=-n ECHO_C='' fi else ECHO_N='' ECHO_C='\c' fi fi PRINT_PLAIN() { echo $ECHO_N "$1$ECHO_C" echo $ECHO_N "$1$ECHO_C" 1>>src/libhdf5.settings } PRINT_N() { echo $ECHO_N "$1: $ECHO_C" echo $ECHO_N "$1: $ECHO_C" 1>>src/libhdf5.settings } PRINT() { echo "$1" echo "$1" 1>>src/libhdf5.settings } dnl ---------------------------------------------------------------------- dnl Print "Yes" if all arguments are "yes", otherwise "No" dnl IF_YES_NO() { if test $# -lt 1; then PRINT "No" return else while test $# -gt 0; do if test "$1" != "yes"; then PRINT "No" return fi shift done fi PRINT "Yes" } IF_ENABLED_DISABLED() { if test "$1" = "yes"; then PRINT "Enabled" else PRINT "Disabled" fi } PRINT "C++ Configure Summary" PRINT "Compiling Options:" PRINT_N " C++ Compiler" PRINT "$CXX" PRINT_N " CXXFLAGS" PRINT "$CXXFLAGS" PRINT "Features:"