dnl Process this file with autoconf to produce configure. dnl dnl Copyright (C) 1997 National Center for Supercomputing Applications. dnl All rights reserved. dnl ---------------------------------------------------------------------- dnl Initialize configure. dnl AC_REVISION($Id$) AC_INIT(src/H5.c) AC_CONFIG_HEADER(src/H5config.h) 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 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 $hdf5_cv_host = "none"; 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 AC_MSG_CHECKING(for host config file) host_config="none" for f in $host \ $host_vendor-$host_os \ $host_cpu-$host_os \ $host_cpu-$host_vendor \ $host_os \ $host_vendor \ $host_cpu ; do if test -f config/$f; then host_config=config/$f break fi done AC_MSG_RESULT($host_config) if test $host_config != "none"; 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 CC_BASENAME="`echo $CC |cut -f1 -d' ' |xargs basename 2>/dev/null`" AC_PROG_MAKE_SET AC_PROG_INSTALL AC_PROG_RANLIB if test "X$AR" = "X"; then AC_CHECK_PROGS(AR,ar xar,:,$PATH) fi AC_SUBST(AR) AC_MSG_CHECKING(for GNU Make) if test "`${MAKE-make} --version -f /dev/null 2>/dev/null |\ sed -n 1p|cut -c1-8`" = "GNU Make"; then AC_MSG_RESULT(yes) GMAKE=yes else AC_MSG_RESULT(no) fi dnl ---------------------------------------------------------------------- dnl Turn on warning flags for gcc. dnl if test Xyes = "X$GCC"; then CFLAGS="$CFLAGS -Wall -W -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline" fi dnl ---------------------------------------------------------------------- dnl Production flags? dnl AC_MSG_CHECKING(for production mode) AC_ARG_ENABLE(production, [ --enable-production Determines how to run the compiler.]) case "X-$enableval" in X-yes) AC_MSG_RESULT("production") CFLAGS="$CFLAGS $PROD_CFLAGS" CPPFLAGS="$CPPFLAGS $PROD_CPPFLAGS" ;; X-|X-no) AC_MSG_RESULT("development") CFLAGS="$CFLAGS $DEBUG_CFLAGS" CPPFLAGS="$CPPFLAGS $DEBUG_CPPFLAGS" ;; X-pg|X-profile) AC_MSG_RESULT("profile") CFLAGS="$CFLAGS $PROFILE_CFLAGS" CPPFLAGS="$CPPFLAGS $PROFILE_CPPFLAGS" ;; *) AC_MSG_RESULT("user-defined") ;; esac dnl ---------------------------------------------------------------------- dnl Check for system libraries. dnl AC_CHECK_LIB(m,ceil) AC_CHECK_LIB(nsl,xdr_int) dnl ...for Solaris and hdf4 AC_CHECK_LIB(coug,main) dnl ...for ASCI/Red AC_CHECK_LIB(jpeg,main) dnl ...required for linking hdf4 apps dnl ---------------------------------------------------------------------- dnl Check for system header files. dnl AC_HEADER_STDC AC_HEADER_TIME dnl Unix AC_CHECK_HEADERS(sys/resource.h sys/time.h unistd.h sys/ioctl.h sys/stat.h) AC_CHECK_HEADERS(stddef.h) dnl Windows AC_CHECK_HEADERS(io.h winsock.h sys/timeb.h) dnl The and are needed on the DEC Alpha dnl to turn off UAC fixing. We do *not* attempt to locate these files on dnl other systems because there are too many problems with including them. if test "$host_vendor-$host_cpu" = "dec-alpha"; then AC_CHECK_HEADERS(sys/sysinfo.h sys/proc.h) fi dnl ---------------------------------------------------------------------- dnl Data types and their sizes. dnl AC_TYPE_OFF_T AC_CHECK_TYPE(size_t, unsigned long) AC_CHECK_TYPE(ssize_t, long) AC_C_BIGENDIAN AC_CHECK_SIZEOF(char, 1) AC_CHECK_SIZEOF(short, 2) AC_CHECK_SIZEOF(int, 4) AC_CHECK_SIZEOF(long, 4) AC_CHECK_SIZEOF(long long, 8) AC_CHECK_SIZEOF(__int64, 8) AC_CHECK_SIZEOF(float, 4) AC_CHECK_SIZEOF(double, 8) AC_CHECK_SIZEOF(long double, 8) dnl Posix.1g types cat >>confdefs.h <<\EOF #include EOF AC_CHECK_SIZEOF( int8_t, 1) AC_CHECK_SIZEOF( uint8_t, 1) AC_CHECK_SIZEOF( int16_t, 2) AC_CHECK_SIZEOF(uint16_t, 2) AC_CHECK_SIZEOF( int32_t, 4) AC_CHECK_SIZEOF(uint32_t, 4) AC_CHECK_SIZEOF( int64_t, 8) AC_CHECK_SIZEOF(uint64_t, 8) AC_CHECK_SIZEOF(size_t, 4) cat >>confdefs.h <<\EOF #include /*for off_t definition*/ EOF AC_CHECK_SIZEOF(off_t, 4) AC_ARG_ENABLE(hsizet, [ --disable-hsizet Datasets can normally be larger than memory and/or files but some compilers are unable to handle this (including versions of GCC before 2.8.0). Disabling the feature causes dataset sizes to be restricted to the size of core memory, or 'size_t'.], HSIZET=$enableval) AC_MSG_CHECKING(for sizeof hsize_t and hssize_t) case $HSIZET in no|small) AC_MSG_RESULT(small) ;; *) AC_MSG_RESULT(large) AC_DEFINE(HAVE_LARGE_HSIZET) ;; esac 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 `--enable-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,[ --with-zlib=INC,LIB Use the GNU zlib compression], ,withval=yes) case $withval in yes) AC_CHECK_HEADERS(zlib.h) AC_CHECK_LIB(z, compress) ;; no) AC_MSG_CHECKING(for GNU zlib) AC_MSG_RESULT(suppressed) ;; *) zlib_inc="`echo $withval |cut -f1 -d,`" if test "X" != "$zlib_inc"; then saved_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I$zlib_inc" AC_CHECK_HEADERS(zlib.h,,CPPFLAGS="$saved_CPPFLAGS") else AC_CHECK_HEADERS(zlib.h) fi zlib_lib="`echo $withval |cut -f2 -d, -s`" if test "X" != "$zlb_lib"; then saved_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -L$zlib_lib" AC_CHECK_LIB(z, compress,,LDFLAGS="$saved_LDFLAGS") else AC_CHECK_LIB(z, compress) fi ;; esac dnl ---------------------------------------------------------------------- dnl Is HDF4 present? If so then we can compile the h5toh4 converter. We dnl assume h5toh4 can be compiled and then prove otherwise when we don't find dnl a header file or library. dnl AC_SUBST(H5TOH4) H5TOH4=h5toh4 AC_SUBST(TESTH5TOH4) TESTH5TOH4=testh5toh4 AC_ARG_WITH(hdf4,[ --with-hdf4=INC,LIB Use the HDF4 library],,withval=yes) case $withval in yes) AC_CHECK_HEADERS(mfhdf.h,,unset H5TOH4 TESTH5TOH4) AC_CHECK_LIB(df,main,,unset H5TOH4 TESTH5TOH4) AC_CHECK_LIB(mfhdf,main,,unset H5TOH4 TESTH5TOH4) ;; no) AC_MSG_CHECKING(for HDF4) AC_MSG_RESULT(suppressed) unset H5TOH4 TESTH5TOH4 ;; *) hdf4_inc="`echo $withval |cut -f1 -d,`" if test "X" != "$hdf4_inc"; then saved_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I$hdf4_inc" AC_CHECK_HEADERS(mfhdf.h,, CPPFLAGS="$saved_CPPFLAGS" unset H5TOH4 TESTH5TOH4 ) else AC_CHECK_HEADERS(mfhdf.h) fi hdf4_lib="`echo $withval |cut -f2 -d, -s`" if test "X" != "$hdf4_lib"; then saved_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -L$hdf4_lib" AC_CHECK_LIB(df,main,,unset H5TOH4 TESTH5TOH4) AC_CHECK_LIB(mfhdf,main,,unset H5TOH4 TESTH5TOH4) else AC_CHECK_LIB(df,main) AC_CHECK_LIB(mfhdf,main) fi ;; esac dnl ---------------------------------------------------------------------- dnl How does one figure out the local time zone? Anyone know of a dnl Posix way to do this? dnl dnl First check if `struct tm' has a `tm_gmtoff' member. AC_MSG_CHECKING(for tm_gmtoff in struct tm) AC_TRY_COMPILE([ #include #include ],[struct tm tm; tm.tm_gmtoff=0;], AC_DEFINE(HAVE_TM_GMTOFF) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) dnl check if `struct tm' has a `__tm_gmtoff' member. AC_MSG_CHECKING(for __tm_gmtoff in struct tm) AC_TRY_COMPILE([ #include #include ],[struct tm tm; tm.__tm_gmtoff=0;], AC_DEFINE(HAVE___TM_GMTOFF) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) dnl Check whether the global variable `timezone' is defined. AC_MSG_CHECKING(for global timezone variable) AC_TRY_LINK([ #include #include ], [timezone=0;], AC_DEFINE(HAVE_TIMEZONE) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) dnl Check whether `struct timezone' is defined. AC_STRUCT_TIMEZONE AC_MSG_CHECKING(for struct timezone) AC_TRY_COMPILE([ #include #include #include ],[struct timezone tz; tz.tz_minuteswest=0;], AC_DEFINE(HAVE_STRUCT_TIMEZONE) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) dnl ---------------------------------------------------------------------- dnl Does the struct stat have the st_blocks field? This field is not Posix. dnl AC_MSG_CHECKING(for st_blocks in struct stat) AC_TRY_COMPILE([ #include ],[struct stat sb; sb.st_blocks=0;], AC_DEFINE(HAVE_STAT_ST_BLOCKS) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) dnl ---------------------------------------------------------------------- dnl How do we figure out the width of a tty in characters? dnl AC_CHECK_FUNCS(_getvideoconfig gettextinfo GetConsoleScreenBufferInfo) AC_CHECK_FUNCS(_scrsize ioctl compress2 setsysinfo) AC_MSG_CHECKING(for struct videoconfig) AC_TRY_COMPILE(,[struct videoconfig w; w.numtextcols=0;], AC_DEFINE(HAVE_STRUCT_VIDEOCONFIG) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) AC_MSG_CHECKING(for struct text_info) AC_TRY_COMPILE(,[struct text_info w; w.screenwidth=0;], AC_DEFINE(HAVE_STRUCT_TEXT_INFO) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) AC_MSG_CHECKING(for TIOCGWINSZ) AC_TRY_COMPILE([#include ],[int w=TIOCGWINSZ;], AC_DEFINE(HAVE_TIOCGWINSZ) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) AC_MSG_CHECKING(for TIOCGGETD) AC_TRY_COMPILE([#include ],[int w=TIOCGETD;], AC_DEFINE(HAVE_TIOCGETD) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) dnl ---------------------------------------------------------------------- dnl Check for functions. dnl AC_CHECK_FUNCS(getpwuid gethostname system getrusage fork waitpid) AC_CHECK_FUNCS(gettimeofday BSDgettimeofday difftime sigaction snprintf) AC_TRY_COMPILE([#include], [off64_t n = 0;], AC_CHECK_FUNCS(lseek64 fseek64), AC_MSG_RESULT([skipping test for lseek64() and fseek64()])) dnl ---------------------------------------------------------------------- dnl Check compiler characteristics dnl AC_C_CONST AC_C_INLINE AC_MSG_CHECKING(for __attribute__ extension) AC_TRY_COMPILE(,[int __attribute__((unused)) f(void){return 1;}], AC_DEFINE(HAVE_ATTRIBUTE) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) AC_MSG_CHECKING(for __FUNCTION__ extension) AC_TRY_COMPILE(,[int f(void){return __FUNCTION__;}], AC_DEFINE(HAVE_FUNCTION) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) dnl ---------------------------------------------------------------------- dnl Try to figure out how to print `long long'. Some machines use `%lld' dnl and others use `%qd'. There may be more! The final `l' is a dnl default in case none of the others work. dnl AC_MSG_CHECKING(how to print long long) AC_CACHE_VAL(hdf5_cv_printf_ll, for hdf5_cv_printf_ll in l L q ll unknown; do AC_TRY_RUN([ #include #include #include main() {char *s=malloc(128); long long x = (long long)1048576 * (long long)1048576; sprintf(s,"%${hdf5_cv_printf_ll}d",x); exit (strcmp(s,"1099511627776"));}], break) done) AC_MSG_RESULT(%${hdf5_cv_printf_ll}d and %${hdf5_cv_printf_ll}u) AC_DEFINE_UNQUOTED(PRINTF_LL_WIDTH,"$hdf5_cv_printf_ll") dnl ---------------------------------------------------------------------- dnl Turn on debugging by setting compiler flags dnl AC_MSG_CHECKING(for debug flags) AC_ARG_ENABLE(debug, [ --enable-debug[=all] Turn on debugging in all packages. One may also specify a comma-separated list of package names without the leading H5 or the word no. The default is most packages.], DEBUG_PKG=$enableval) all_packages="ac,b,d,e,f,g,hg,hl,i,mf,mm,o,p,s,t,v,z" if test X = "X$DEBUG_PKG" -o Xyes = "X$DEBUG_PKG"; then DEBUG_PKG=ac,b,d,e,f,g,hg,i,mm,p,s,t,v,z CPPFLAGS="$CPPFLAGS -UNDEBUG" AC_MSG_RESULT(default ($DEBUG_PKG)) elif test Xall = "X$DEBUG_PKG"; then DEBUG_PKG=$all_packages CPPFLAGS="$CPPFLAGS -UNDEBUG" AC_MSG_RESULT(all ($DEBUG_PKG)) elif test Xno = "X$DEBUG_PKG" -o Xnone = "X$DEBUG_PKG"; then AC_MSG_RESULT(none) DEBUG_PKG= CPPFLAGS="$CPPFLAGS -DNDEBUG" else AC_MSG_RESULT($DEBUG_PKG) fi if test "X" != "X$DEBUG_PKG"; then for pkg in `echo $DEBUG_PKG | tr 'a-z,' 'A-Z '`; do CPPFLAGS="$CPPFLAGS -DH5${pkg}_DEBUG" done fi dnl ---------------------------------------------------------------------- dnl Enable tracing of the API dnl AC_MSG_CHECKING(for API tracing); AC_ARG_ENABLE(trace, [ --disable-trace Disable API tracing capability], TRACE=$enableval) if test X = "X$TRACE" -o Xyes = "X$TRACE"; then AC_MSG_RESULT(yes) CPPFLAGS="$CPPFLAGS -DH5_DEBUG_API" else AC_MSG_RESULT(no) CPPFLAGS="$CPPFLAGS -UH5_DEBUG_API" fi dnl ---------------------------------------------------------------------- dnl Check for parallel support. If the base name of the compiler is `mpicc' dnl then assume parallel support is `mpio' unless specified otherwise by dnl the user. dnl AC_ARG_ENABLE(parallel, [ --enable-parallel=mpio Enable parallel support with MPIO], PARALLEL=$enableval) AC_MSG_CHECKING(for parallel support); AC_SUBST(RUNSERIAL) AC_SUBST(RUNPARALLEL) AC_SUBST(TESTPARALLEL) if test "mpicc" = "$CC_BASENAME" -a "X-" = "X-$PARALLEL"; then PARALLEL=mpio fi case "X-$PARALLEL" in X-|X-no) # Parallel support is not enabled AC_MSG_RESULT(disabled) ;; X-mpio|X-yes) # Use MPIO. Define HAVE_PARALLEL in src/H5config.h (comes from # ./acconfig.h) and augment the include and library search paths # (it doesn't hurt to have extra paths). Then check for header # files and libraries. Some extra source files are added to the # list also so we don't have to ifdef out the whole file. AC_MSG_RESULT(mpio) AC_DEFINE(HAVE_PARALLEL) AC_CHECK_LIB(mpi,MPI_Init) AC_CHECK_LIB(mpio,MPI_File_open) if test "X-" = "X-$RUNSERIAL" -o "X-none" = "X-$RUNSERIAL"; then RUNSERIAL= fi if test "X-" = "X-$RUNPARALLEL"; then RUNPARALLEL="mpirun -np 2" elif test "X-none" = "X-$RUNPARALLEL"; then RUNPARALLEL= fi if test "X-" = "X-$TESTPARALLEL"; then TESTPARALLEL="testpar" elif test "X-none" = "X-$TESTPARALLEL"; then TESTPARALLEL= fi ;; *) AC_MSG_ERROR(unknown parallel support: $PARALLEL) ;; esac 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 if test "X$GCC" = "Xyes" && test "X$GMAKE" = "Xyes"; then AC_SUBST_FILE(DEPEND1) DEPEND1=config/depend AC_SUBST_FILE(DEPEND2) DEPEND2=/dev/null else AC_SUBST_FILE(DEPEND1) DEPEND1=src/.distdep AC_SUBST_FILE(DEPEND2) DEPEND2=test/.distdep 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 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. if test -x /bin/pwd; then pwd=/bin/pwd else pwd=pwd fi AC_SUBST(ROOT) ROOT=`$pwd` dnl Touch the time-stamp files for src/H5config.h.in and src/H5config.h dnl before we generate them or the Makefiles. touch ./config/stamp1 ./config/stamp2 AC_OUTPUT(config/depend config/commence config/conclude \ Makefile src/Makefile pablo/Makefile test/Makefile \ testpar/Makefile tools/Makefile examples/Makefile)