dnl ---------------------------------------------------------------------- dnl Process this file with autoconf to produce configure. dnl dnl Copyright (C) 2000, 2001, 2002 dnl National Center for Supercomputing Applications. dnl All rights reserved. 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.5.44], [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 aix4.*) host_os_novers=aix4.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 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 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, [ --enable-production Determines how to run the compiler.]) case "X-$enable_production" in X-yes) AC_MSG_RESULT("production") CONFIG_MODE=production CXXFLAGS="$CXXFLAGS $PROD_CXXFLAGS" CPPFLAGS="$CPPFLAGS $PROD_CPPFLAGS" ;; X-|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 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) 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]])]) case "X-$enable_linux_lfs" in X-yes) LINUX_LFS=yes ;; X-no) LINUX_LFS=no ;; X-|*) LINUX_LFS=no AC_CHECK_FUNCS([getdents64], dnl Add the large file support flags to the CXXFLAGS macro if dnl we're on a Linux system which austensibly supports LFS. (We dnl think it does if it has the `getdents64' syscall). [LINUX_LFS=yes]) ;; esac AC_MSG_CHECKING([for large file support on linux mode]) if test "X$LINUX_LFS" = "Xyes"; then AC_MSG_RESULT([enabled]) CXXFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE ${CXXFLAGS}" 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 CXXFLAGS="-D_POSIX_SOURCE ${CXXFLAGS}" 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 CXXFLAGS="-D_BSD_SOURCE ${CXXFLAGS}" ;; 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([ #ifdef OLD_HEADER_FILENAME #include #else #include #endif using namespace std; 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 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 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 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