mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-21 01:04:10 +08:00
4685 lines
165 KiB
Plaintext
4685 lines
165 KiB
Plaintext
## Process this file with autoconf to produce configure.
|
|
##
|
|
## Copyright by The HDF Group.
|
|
## All rights reserved.
|
|
##
|
|
## This file is part of HDF5. The full HDF5 copyright notice, including
|
|
## terms governing use, modification, and redistribution, is contained in
|
|
## the COPYING file, which can be found at the root of the source code
|
|
## distribution tree, or in https://www.hdfgroup.org/licenses.
|
|
## If you do not have access to either file, you may request a copy from
|
|
## help@hdfgroup.org.
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Initialize configure.
|
|
##
|
|
AC_PREREQ([2.71])
|
|
|
|
## AC_INIT takes the name of the package, the version number, and an
|
|
## email address to report bugs. AC_CONFIG_SRCDIR takes a unique file
|
|
## as its argument.
|
|
##
|
|
## NOTE: Do not forget to change the version number here when we do a
|
|
## release!!!
|
|
##
|
|
AC_INIT([HDF5], [1.16.0-1], [help@hdfgroup.org])
|
|
|
|
AC_CONFIG_SRCDIR([src/H5.c])
|
|
AC_CONFIG_HEADERS([src/H5config.h])
|
|
|
|
AC_CONFIG_AUX_DIR([bin])
|
|
AC_CONFIG_MACRO_DIR([m4])
|
|
|
|
## AM_INIT_AUTOMAKE takes a list of options that should be applied to
|
|
## every Makefile.am when automake is run.
|
|
AM_INIT_AUTOMAKE([foreign subdir-objects])
|
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) # use silent rules where available - automake 1.11
|
|
|
|
## AM_MAINTAINER_MODE determines the behavior of "rebuild rules" that contain
|
|
## dependencies for Makefile.in files, configure, src/H5config.h, etc. If
|
|
## AM_MAINTAINER_MODE is enabled, these files will be rebuilt if out of date.
|
|
## When disabled, the autotools build files can get out of sync and the build
|
|
## system will not complain or try to regenerate downstream files.
|
|
##
|
|
## The AM_MAINTAINER_MODE macro also determines whether the
|
|
## --(enable|disable)-maintainer-mode configure option is available. When the
|
|
## macro is present, with or without a parameter, the option will be added
|
|
## to the generated configure script.
|
|
##
|
|
## In summary:
|
|
##
|
|
## AM_MAINTAINER_MODE([enable])
|
|
## - Build dependencies ON by default
|
|
## - Configure option exists
|
|
##
|
|
## AM_MAINTAINER_MODE([disable])
|
|
## - Build dependencies OFF by default
|
|
## - Configure option exists
|
|
##
|
|
## AM_MAINTAINER_MODE
|
|
## - Build dependencies OFF by default
|
|
## - Configure option exists
|
|
##
|
|
## No AM_MAINTAINER_MODE macro
|
|
## - Build dependencies ON by default
|
|
## - No configure option to control build dependencies
|
|
##
|
|
## The biggest concern for us is that version control systems like git
|
|
## usually don't preserve dependencies between timestamps, so the build
|
|
## system will often think that upstream build files like Makefile.am are
|
|
## dirty and that rebuilding needs to occur when it doesn't. This is a problem
|
|
## in release branches where we provide the autotools-generated files. Users
|
|
## who don't have autoconf, automake, etc. will then have difficulty building
|
|
## release branches checked out from git.
|
|
##
|
|
## By default, maintainer mode is enabled in development branches and disabled
|
|
## in release branches.
|
|
AM_MAINTAINER_MODE([enable])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Set prefix default (install directory) to a directory in the build area.
|
|
## This allows multiple src-dir builds within one host.
|
|
AC_PREFIX_DEFAULT([`pwd`/hdf5])
|
|
|
|
## Run post processing on files created by configure
|
|
##
|
|
## src/H5pubconf.h:
|
|
## Generate src/H5pubconf.h from src/H5config.h by prepending H5_ to all
|
|
## macro names. This avoid name conflict between HDF5 macro names and those
|
|
## generated by another software package that uses the HDF5 library.
|
|
##
|
|
## src/libhdf5.settings:
|
|
## Remove all lines beginning with "#" which are generated by CONDITIONAL's
|
|
## of configure.
|
|
##
|
|
## src/H5build_settings.c
|
|
## Remove all lines beginning with "#" which are generated by CONDITIONAL's
|
|
## of configure. This uses a check for whitespace after the pound sign
|
|
## to avoid clobbering include statements.
|
|
AC_CONFIG_COMMANDS([pubconf], [
|
|
echo "creating src/H5pubconf.h"
|
|
sed 's/#define /#define H5_/' <src/H5config.h |\
|
|
sed 's/#undef /#undef H5_/' >pubconf
|
|
if test ! -f src/H5pubconf.h; then
|
|
mv -f pubconf src/H5pubconf.h
|
|
elif (diff pubconf src/H5pubconf.h >/dev/null); then
|
|
rm -f pubconf
|
|
echo "src/H5pubconf.h is unchanged"
|
|
else
|
|
mv -f pubconf src/H5pubconf.h
|
|
fi
|
|
echo "Post process src/libhdf5.settings"
|
|
sed '/^#/d' < src/libhdf5.settings > libhdf5.settings.TMP
|
|
cp libhdf5.settings.TMP src/libhdf5.settings
|
|
rm -f libhdf5.settings.TMP
|
|
echo "Post process src/H5build_settings.c"
|
|
sed '/^# /d' < src/H5build_settings.c > H5build_settings.TMP
|
|
cp H5build_settings.TMP src/H5build_settings.c
|
|
rm -f H5build_settings.TMP
|
|
])
|
|
|
|
## It's possible to configure for a host other than the one on which
|
|
## configure is currently running by using the --host=foo flag.
|
|
## For machines on which HDF5 is often configured, it can be convenient
|
|
## to specify the name of the machine rather than its canonical type.
|
|
##
|
|
## There are currently no hosts, but if there were they would be
|
|
## listed by hostname and the alias would point to a file in
|
|
## the config directory:
|
|
##
|
|
##case $host_alias in
|
|
## <some host>)
|
|
## host_alias=<config file in config directory>
|
|
## ;;
|
|
##esac
|
|
|
|
AC_CANONICAL_HOST
|
|
AC_SUBST([CPPFLAGS])
|
|
AC_SUBST([JNIFLAGS])
|
|
AC_SUBST([AR_FLAGS])
|
|
|
|
## H5_CFLAGS (and company) are for CFLAGS that should be used on HDF5, but
|
|
## not exported to h5cc (or h5fc, etc.)
|
|
##
|
|
AC_SUBST([H5_CFLAGS])
|
|
AC_SUBST([H5_CPPFLAGS])
|
|
AC_SUBST([H5_FCFLAGS])
|
|
AC_SUBST([H5_CXXFLAGS])
|
|
AC_SUBST([H5_JNIFLAGS])
|
|
AC_SUBST([H5_JAVACFLAGS])
|
|
AC_SUBST([H5_JAVAFLAGS])
|
|
AC_SUBST([H5_LDFLAGS])
|
|
|
|
## AM_CFLAGS (and company) are for CFLAGS that should be used on HDF5,
|
|
## and WILL be exported to h5cc (or h5fc, etc) if set by configure.
|
|
AC_SUBST([AM_CFLAGS])
|
|
AC_SUBST([AM_FCFLAGS])
|
|
AC_SUBST([AM_CXXFLAGS])
|
|
AC_SUBST([AM_CPPFLAGS])
|
|
AC_SUBST([AM_JNIFLAGS])
|
|
AC_SUBST([AM_JAVACFLAGS])
|
|
AC_SUBST([AM_JAVAFLAGS])
|
|
AC_SUBST([AM_LDFLAGS])
|
|
|
|
## Make sure flags are initialized.
|
|
AM_CFLAGS="${AM_CFLAGS}"
|
|
AM_CXXFLAGS="${AM_CXXFLAGS}"
|
|
AM_FCFLAGS="${AM_FCFLAGS}"
|
|
AM_CPPFLAGS="${AM_CPPFLAGS}"
|
|
AM_JNIFLAGS="${AM_JNIFLAGS}"
|
|
AM_JAVACFLAGS="${AM_JAVACFLAGS}"
|
|
AM_JAVAFLAGS="${AM_JAVAFLAGS}"
|
|
AM_LDFLAGS="${AM_LDFLAGS}"
|
|
|
|
## Flags passed in by the user
|
|
CFLAGS="${CFLAGS}"
|
|
CXXFLAGS="${CXXFLAGS}"
|
|
FCFLAGS="${FCFLAGS}"
|
|
CPPFLAGS="${CPPFLAGS}"
|
|
JNIFLAGS="${JNIFLAGS}"
|
|
JAVACFLAGS="${JAVACFLAGS}"
|
|
JAVAFLAGS="${JAVAFLAGS}"
|
|
LDFLAGS="${LDFLAGS}"
|
|
AR_FLAGS="${AR_FLAGS}"
|
|
|
|
## Configure may need to alter any of the *FLAGS variables in order for
|
|
## various checks to work correctly. Save the user's value here so it
|
|
## can be restored once all configure checks are complete.
|
|
saved_user_CFLAGS="$CFLAGS"
|
|
saved_user_CXXFLAGS="$CXXFLAGS"
|
|
saved_user_FCFLAGS="$FCFLAGS"
|
|
saved_user_JAVACFLAGS="$JAVACFLAGS"
|
|
saved_user_JAVAFLAGS="$JAVAFLAGS"
|
|
saved_user_LDFLAGS="$LDFLAGS"
|
|
saved_user_CPPFLAGS="$CPPFLAGS"
|
|
|
|
## Strip out -Werror from CFLAGS since that can cause checks to fail when
|
|
## compiling test programs fails due to warnings
|
|
##
|
|
## Regex:
|
|
##
|
|
## -Werror Literal -Werror
|
|
## \( Start optional capturing group
|
|
## = Literal equals sign
|
|
## [^[:space:]] Non-space characters
|
|
## \+ 1 or more of the above
|
|
## \) End optional capturing group
|
|
## \? 0 or 1 capturing group matches
|
|
##
|
|
## Note that the outer pair of '[]' ends up getting removed
|
|
WERROR_SED='s/-Werror\(=[[^[:space:]]]\+\)\?//g'
|
|
CFLAGS_SED="`echo $CFLAGS | sed -e $WERROR_SED`"
|
|
if test $? -eq 0; then
|
|
CFLAGS="$CFLAGS_SED"
|
|
fi
|
|
CXXFLAGS_SED="`echo $CXXFLAGS | sed -e $WERROR_SED`"
|
|
if test $? -eq 0; then
|
|
CXXFLAGS="$CXXFLAGS_SED"
|
|
fi
|
|
FCFLAGS_SED="`echo $FCFLAGS | sed -e $WERROR_SED`"
|
|
if test $? -eq 0; then
|
|
FCFLAGS="$FCFLAGS_SED"
|
|
fi
|
|
JAVACFLAGS_SED="`echo $JAVACFLAGS | sed -e $WERROR_SED`"
|
|
if test $? -eq 0; then
|
|
JAVACFLAGS="$JAVACFLAGS_SED"
|
|
fi
|
|
CPPFLAGS_SED="`echo $CPPFLAGS | sed -e $WERROR_SED`"
|
|
if test $? -eq 0; then
|
|
CPPFLAGS="$CPPFLAGS_SED"
|
|
fi
|
|
|
|
## Support F9X variable to define Fortran compiler if FC variable is
|
|
## not used. This should be deprecated in the future.
|
|
if test "x" = "x$FC"; then
|
|
FC=${F9X}
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Dump all shell variables values.
|
|
##
|
|
AC_MSG_CHECKING([shell variables initial values])
|
|
set >&AS_MESSAGE_LOG_FD
|
|
AC_MSG_RESULT([done])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Save system information for the library settings file.
|
|
##
|
|
AC_SUBST([UNAME_INFO])
|
|
UNAME_INFO=`uname -a`
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Some platforms have broken basename, and/or xargs programs. Check
|
|
## that it actually does what it's supposed to do. Catch this early
|
|
## since configure and scripts relies upon them heavily and there's
|
|
## no use continuing if it's broken.
|
|
##
|
|
AC_MSG_CHECKING([if basename works])
|
|
BASENAME_TEST="`basename /foo/bar/baz/qux/basename_works`"
|
|
if test $BASENAME_TEST != "basename_works"; then
|
|
AC_MSG_ERROR([basename program doesn't work])
|
|
else
|
|
AC_MSG_RESULT([yes])
|
|
fi
|
|
|
|
## xargs basename used in configure to get the CC_BASENAME value
|
|
AC_MSG_CHECKING([if xargs works])
|
|
XARGS_TEST="`echo /foo/bar/baz/qux/xargs_works | xargs basename`"
|
|
if test $XARGS_TEST != "xargs_works"; then
|
|
AC_MSG_ERROR([xargs program doesn't work])
|
|
else
|
|
AC_MSG_RESULT([yes])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check that the cache file was build on the same host as what we're
|
|
## running on now.
|
|
##
|
|
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
|
|
AC_MSG_ERROR([
|
|
The config.cache file was generated on $hdf5_cv_host but
|
|
this is $host. Please remove that file and try again.
|
|
config.cache file is invalid])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if we should consider certain compiler warnings as errors
|
|
##
|
|
## We have to set WARNINGS_AS_ERRORS before sourcing a $host_config
|
|
## file, below.
|
|
##
|
|
## These should NOT be on by default as the risk of breakage is high
|
|
## when compiling HDF5 on new (or new versions) of platforms and
|
|
## compilers. It can also cause failures when header files we have no
|
|
## control over (e.g. MPI, HDFS) raise warnings.
|
|
##
|
|
AC_MSG_CHECKING([enable warnings as errors])
|
|
AC_ARG_ENABLE([warnings-as-errors],
|
|
[AS_HELP_STRING([--enable-warnings-as-errors],
|
|
[Determines whether certain warnings will be
|
|
considered errors. This is mainly for use
|
|
by HDF5 library developers.
|
|
[default=no]
|
|
])],
|
|
[WARNINGS_AS_ERRORS=$enableval])
|
|
|
|
## Set default
|
|
if test "X-$WARNINGS_AS_ERRORS" = X- ; then
|
|
WARNINGS_AS_ERRORS=no
|
|
fi
|
|
|
|
case "X-$WARNINGS_AS_ERRORS" in
|
|
X-yes|X-no)
|
|
AC_MSG_RESULT([$WARNINGS_AS_ERRORS])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $WARNINGS_AS_ERRORS])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Source any special files that we need. These files normally aren't
|
|
## present but can be used by the maintainers to fine tune things like
|
|
## turning on debug or profiling flags for the compiler. The search order
|
|
## is:
|
|
##
|
|
## CPU-VENDOR-OS
|
|
## VENDOR-OS
|
|
## CPU-OS
|
|
## CPU-VENDOR
|
|
## OS
|
|
## VENDOR
|
|
## CPU
|
|
##
|
|
## If the `OS' ends with a version number then remove it. For instance,
|
|
## `freebsd3.1' would become `freebsd'
|
|
|
|
case $host_os in
|
|
aix*)
|
|
host_os_novers=aix
|
|
;;
|
|
freebsd*)
|
|
host_os_novers=freebsd
|
|
;;
|
|
netbsd*)
|
|
host_os_novers=netbsd
|
|
;;
|
|
solaris*)
|
|
host_os_novers=solaris
|
|
;;
|
|
*)
|
|
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
|
|
|
|
## Source any special site-specific file
|
|
hname="`hostname`"
|
|
while test -n "$hname"; do
|
|
file=$srcdir/config/site-specific/host-$hname
|
|
AC_MSG_CHECKING([for config $file])
|
|
if test -f "$file"; then
|
|
. $file
|
|
AC_MSG_RESULT([found])
|
|
break
|
|
fi
|
|
AC_MSG_RESULT([no])
|
|
hname_tmp=$hname
|
|
hname="`echo $hname | cut -d. -f2-99`"
|
|
test "$hname_tmp" = "$hname" && break
|
|
done
|
|
|
|
##
|
|
## Enable/disable sanitizer checks for clang compilers, initially address sanitizer
|
|
##
|
|
AC_MSG_CHECKING([for clang sanitizer checks])
|
|
AC_ARG_ENABLE([sanitize-checks],
|
|
[AS_HELP_STRING([--enable-sanitize-checks=address],
|
|
[(clang/clang++ compilers only) Enable sanitize checks.
|
|
Address is useful for detecting issues dealing with
|
|
memory. See AddressSanitizer in config/sanitizer/README.md
|
|
for more information.
|
|
[default=none]
|
|
])],
|
|
[CLANG_SANITIZE_CHECKS=$enableval])
|
|
|
|
# Set default
|
|
if test "X-$CLANG_SANITIZE_CHECKS" = X- ; then
|
|
CLANG_SANITIZE_CHECKS=none
|
|
fi
|
|
|
|
if test "X$CC_BASENAME" = "Xclang"; then
|
|
AC_SUBST([CLANG_SANITIZE_CHECKS])
|
|
|
|
# There are several sanitizer tools. At present we are testing
|
|
# and describing only -fsanitizer=address with autotools.
|
|
case "X-$CLANG_SANITIZE_CHECKS" in
|
|
X-no|X-none)
|
|
CLANG_SANITIZE_CHECKS=none
|
|
CLANG_SANITIZE_LIST=
|
|
;;
|
|
*)
|
|
CLANG_SANITIZE_LIST=$CLANG_SANITIZE_CHECKS
|
|
;;
|
|
esac
|
|
AC_MSG_RESULT([$CLANG_SANITIZE_CHECKS])
|
|
|
|
# Other tools can be added to the list of checks
|
|
# The clang compiler doesn't support some of them; they should be
|
|
# checked before adding them to the list in the help message.
|
|
# The sanitizers/sanitizers.cmake file lists these options:
|
|
# address, memory, memoryWithOrigins, undefined, thread, leak,
|
|
# 'address;undefined'. Which and which combinations of these are
|
|
# supported varies by compiler version, but unsupported options
|
|
# or combinations will result in configure errors reported in config.log.
|
|
# Comma separated lists of sanitize options will be entered intact in
|
|
# one -fsanitize=<list> flag. Space separated lists will be entered in
|
|
# separate -fsanitize=<item> flags.
|
|
# NOTE: No sanity checking done here!
|
|
if test -n "$CLANG_SANITIZE_LIST"; then
|
|
H5_CFLAGS="$H5_CFLAGS -fno-omit-frame-pointer"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS -fno-omit-frame-pointer"
|
|
for sanitizer in `echo $CLANG_SANITIZE_LIST`; do
|
|
H5_CFLAGS="$H5_CFLAGS -fsanitize=${sanitizer}"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS -fsanitize=${sanitizer}"
|
|
done
|
|
fi
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Determine build mode (debug, production, clean).
|
|
## This has to be done early since the build mode is referred to
|
|
## frequently.
|
|
##
|
|
AC_MSG_CHECKING([build mode])
|
|
AC_ARG_ENABLE([build-mode],
|
|
[AS_HELP_STRING([--enable-build-mode=(debug|production|clean)],
|
|
[Sets the build mode. Debug turns on symbols, API
|
|
tracing, asserts, and debug optimization,
|
|
as well as several other minor configure options
|
|
that aid in debugging.
|
|
Production turns high optimizations on.
|
|
Clean turns nothing on and disables optimization
|
|
(i.e.: a 'clean slate' configuration).
|
|
All these settings can be overridden by using
|
|
specific configure flags.
|
|
[default=debug]
|
|
])],
|
|
[BUILD_MODE=$enableval])
|
|
|
|
## Set the default
|
|
## Depends on branch, set via script at branch creation time
|
|
if test "X-$BUILD_MODE" = X- ; then
|
|
BUILD_MODE=debug
|
|
fi
|
|
|
|
## Allow this variable to be substituted in
|
|
## other files (src/libhdf5.settings.in, etc.)
|
|
AC_SUBST([BUILD_MODE])
|
|
|
|
case "X-$BUILD_MODE" in
|
|
X-clean)
|
|
AC_MSG_RESULT([clean])
|
|
;;
|
|
X-debug)
|
|
AC_DEFINE([DEBUG_BUILD], [1], [Define if this is a debug build.])
|
|
H5_CFLAGS="$H5_CFLAGS $DEBUG_CFLAGS"
|
|
H5_CPPFLAGS="$H5_CPPFLAGS $DEBUG_CPPFLAGS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $DEBUG_CXXFLAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $DEBUG_FCFLAGS"
|
|
AC_MSG_RESULT([debug])
|
|
;;
|
|
X-production)
|
|
H5_CFLAGS="$H5_CFLAGS $PROD_CFLAGS"
|
|
H5_CPPFLAGS="$H5_CPPFLAGS $PROD_CPPFLAGS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $PROD_CXXFLAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $PROD_FCFLAGS"
|
|
AC_MSG_RESULT([production])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized build mode: $BUILD_MODE. Use debug, production, or clean.])
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Some built-in configure checks can only see CFLAGS (not AM_CFLAGS), so
|
|
## we need to add this in so configure works as intended. We will need to
|
|
## reset this value at the end of configure, to preserve the user's settings.
|
|
CFLAGS="${AM_CFLAGS} ${CFLAGS}"
|
|
FCFLAGS="${AM_FCFLAGS} ${FCFLAGS}"
|
|
JAVACFLAGS="${AM_JAVACFLAGS} ${JAVACFLAGS}"
|
|
JAVAFLAGS="${AM_JAVAFLAGS} ${JAVAFLAGS}"
|
|
CXXFLAGS="${AM_CXXFLAGS} ${CXXFLAGS}"
|
|
CPPFLAGS="${AM_CPPFLAGS} ${CPPFLAGS}"
|
|
LDFLAGS="${AM_LDFLAGS} ${LDFLAGS}"
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Enable dependency tracking unless the configure options or a
|
|
## site-specific file told us not to. This prevents configure from
|
|
## silently disabling dependencies for some compilers.
|
|
##
|
|
if test -z "${enable_dependency_tracking}"; then
|
|
enable_dependency_tracking="yes"
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check for programs.
|
|
##
|
|
AC_PROG_CC
|
|
CC_BASENAME="`echo $CC | cut -f1 -d' ' | xargs basename 2>/dev/null`"
|
|
|
|
## ----------------------------------------------------------------------------
|
|
## Configure disallows unsupported combinations of options. However, users
|
|
## may want to override and build with unsupported combinations for their
|
|
## own use. They can use the --enable-unsupported configure flag, which
|
|
## ignores any errors from configure due to incompatible flags.
|
|
AC_MSG_CHECKING([if unsupported combinations of configure options are allowed])
|
|
AC_ARG_ENABLE([unsupported],
|
|
[AS_HELP_STRING([--enable-unsupported],
|
|
[Allow unsupported combinations of configure options])],
|
|
[ALLOW_UNSUPPORTED=$enableval])
|
|
|
|
case "X-$ALLOW_UNSUPPORTED" in
|
|
X-|X-no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
X-yes)
|
|
AC_MSG_RESULT([yes])
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Data types and their sizes.
|
|
##
|
|
AC_TYPE_OFF_T
|
|
AC_CHECK_TYPE([ssize_t], [],
|
|
[AC_DEFINE_UNQUOTED([ssize_t], [long],
|
|
[Define to `long' if <sys/types.h> does not define.])])
|
|
AC_C_BIGENDIAN
|
|
AC_CHECK_SIZEOF([char])
|
|
AC_CHECK_SIZEOF([short])
|
|
AC_CHECK_SIZEOF([int])
|
|
AC_CHECK_SIZEOF([unsigned])
|
|
AC_CHECK_SIZEOF([long])
|
|
AC_CHECK_SIZEOF([long long])
|
|
AC_CHECK_SIZEOF([float])
|
|
AC_CHECK_SIZEOF([double])
|
|
AC_CHECK_SIZEOF([long double])
|
|
|
|
#-----------------------------------------------------------------------------
|
|
# Option for enabling/disabling support for non-standard features, datatypes,
|
|
# etc. These features should still be checked for at configure time, but these
|
|
# options allow disabling of support for these features when compiler support
|
|
# is incomplete or broken. In this case, configure time checks may not be
|
|
# enough to properly enable/disable a feature and can cause library build
|
|
# problems.
|
|
#-----------------------------------------------------------------------------
|
|
AC_MSG_CHECKING([if non-standard feature support is enabled])
|
|
AC_ARG_ENABLE([nonstandard-features],
|
|
[AS_HELP_STRING([--enable-nonstandard-features],
|
|
[Enable support for non-standard programming language features [default=yes]])],
|
|
[NONSTANDARD_FEATURES=$enableval])
|
|
|
|
## Set default
|
|
if test "X-$NONSTANDARD_FEATURES" = X- ; then
|
|
NONSTANDARD_FEATURES=yes
|
|
fi
|
|
|
|
case "X-$NONSTANDARD_FEATURES" in
|
|
X-yes|X-no)
|
|
AC_MSG_RESULT([$NONSTANDARD_FEATURES])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $NONSTANDARD_FEATURES])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if _Float16 support is available
|
|
##
|
|
AC_MSG_CHECKING([if _Float16 support is enabled])
|
|
AC_ARG_ENABLE([nonstandard-feature-float16],
|
|
[AS_HELP_STRING([--enable-nonstandard-feature-float16],
|
|
[Enable support for _Float16 C datatype [default=yes]])],
|
|
[ENABLE_FLOAT16=$enableval])
|
|
|
|
## Set default
|
|
if test "X-$ENABLE_FLOAT16" = X- ; then
|
|
ENABLE_FLOAT16=$NONSTANDARD_FEATURES
|
|
fi
|
|
|
|
case "X-$ENABLE_FLOAT16" in
|
|
X-yes|X-no)
|
|
AC_MSG_RESULT([$ENABLE_FLOAT16])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $ENABLE_FLOAT16])
|
|
;;
|
|
esac
|
|
|
|
HAVE__FLOAT16="no"
|
|
if test "X$ENABLE_FLOAT16" = "Xyes"; then
|
|
AC_MSG_NOTICE([checking if _Float16 support is available])
|
|
AC_CHECK_SIZEOF([_Float16])
|
|
if test "$ac_cv_sizeof__Float16" != 0; then
|
|
# Some compilers expose the _Float16 datatype, but not the macros and
|
|
# functions used with the datatype. We need the macros for proper
|
|
# datatype conversion support. Check for these here.
|
|
AC_CHECK_DECL([FLT16_EPSILON], [], [], [[
|
|
#define __STDC_WANT_IEC_60559_TYPES_EXT__
|
|
#include <float.h>]])
|
|
AC_CHECK_DECL([FLT16_MIN], [], [], [[
|
|
#define __STDC_WANT_IEC_60559_TYPES_EXT__
|
|
#include <float.h>]])
|
|
AC_CHECK_DECL([FLT16_MAX], [], [], [[
|
|
#define __STDC_WANT_IEC_60559_TYPES_EXT__
|
|
#include <float.h>]])
|
|
AC_CHECK_DECL([FLT16_MIN_10_EXP], [], [], [[
|
|
#define __STDC_WANT_IEC_60559_TYPES_EXT__
|
|
#include <float.h>]])
|
|
AC_CHECK_DECL([FLT16_MAX_10_EXP], [], [], [[
|
|
#define __STDC_WANT_IEC_60559_TYPES_EXT__
|
|
#include <float.h>]])
|
|
AC_CHECK_DECL([FLT16_MANT_DIG], [], [], [[
|
|
#define __STDC_WANT_IEC_60559_TYPES_EXT__
|
|
#include <float.h>]])
|
|
|
|
if test "X$ac_cv_have_decl_FLT16_EPSILON" = "Xyes" &&
|
|
test "X$ac_cv_have_decl_FLT16_MIN" = "Xyes" &&
|
|
test "X$ac_cv_have_decl_FLT16_MAX" = "Xyes" &&
|
|
test "X$ac_cv_have_decl_FLT16_MIN_10_EXP" = "Xyes" &&
|
|
test "X$ac_cv_have_decl_FLT16_MAX_10_EXP" = "Xyes" &&
|
|
test "X$ac_cv_have_decl_FLT16_MANT_DIG" = "Xyes" ; then
|
|
# Some compilers like OneAPI on Windows appear to detect _Float16 support
|
|
# properly up to this point, and, in the absence of any architecture-specific
|
|
# tuning compiler flags, will generate code for H5Tconv.c that performs
|
|
# software conversions on _Float16 variables with compiler-internal functions
|
|
# such as __extendhfsf2, __truncsfhf2, or __truncdfhf2. However, these
|
|
# compilers will fail to link these functions into the build for currently
|
|
# unknown reasons and cause the build to fail. Since these are compiler-internal
|
|
# functions that we don't appear to have much control over, let's try to
|
|
# compile a program that will generate these functions to check for _Float16
|
|
# support. If we fail to compile this program, we will simply disable
|
|
# _Float16 support for the time being.
|
|
AC_MSG_CHECKING([if compiler can correctly compile and run a test program which converts _Float16 to other types with casts])
|
|
TEST_SRC="`(echo \"#define H5_FLOAT16_CONVERSION_FUNCS_LINK_TEST 1\"; cat $srcdir/config/cmake/ConversionTests.c)`"
|
|
AC_CACHE_VAL([hdf5_cv_float16_conversion_funcs_link],
|
|
[AC_RUN_IFELSE(
|
|
[AC_LANG_SOURCE([$TEST_SRC])],
|
|
[hdf5_cv_float16_conversion_funcs_link=yes],
|
|
[hdf5_cv_float16_conversion_funcs_link=no],
|
|
[hdf5_cv_float16_conversion_funcs_link=no])])
|
|
AC_MSG_RESULT(${hdf5_cv_float16_conversion_funcs_link})
|
|
|
|
# Some compilers, notably AppleClang on MacOS 12, will succeed in the
|
|
# configure check above when optimization flags like -O3 are manually
|
|
# passed in CFLAGS. However, the build will then fail when it reaches
|
|
# compilation of H5Tconv.c because of the issue mentioned above. MacOS
|
|
# 13 appears to have fixed this, but, just to be sure, make sure the
|
|
# check also passes without the passed in CFLAGS.
|
|
conftest_cflags_backup="$CFLAGS"
|
|
CFLAGS=""
|
|
|
|
AC_MSG_CHECKING([if compiler can correctly compile and run a test program which converts _Float16 to other types with casts (without CFLAGS)])
|
|
TEST_SRC="`(echo \"#define H5_FLOAT16_CONVERSION_FUNCS_LINK_NO_FLAGS_TEST 1\"; cat $srcdir/config/cmake/ConversionTests.c)`"
|
|
AC_CACHE_VAL([hdf5_cv_float16_conversion_funcs_link_no_flags],
|
|
[AC_RUN_IFELSE(
|
|
[AC_LANG_SOURCE([$TEST_SRC])],
|
|
[hdf5_cv_float16_conversion_funcs_link_no_flags=yes],
|
|
[hdf5_cv_float16_conversion_funcs_link_no_flags=no],
|
|
[hdf5_cv_float16_conversion_funcs_link_no_flags=no])])
|
|
AC_MSG_RESULT(${hdf5_cv_float16_conversion_funcs_link_no_flags})
|
|
|
|
CFLAGS="$conftest_cflags_backup"
|
|
|
|
if test ${hdf5_cv_float16_conversion_funcs_link} = "yes" &&
|
|
test ${hdf5_cv_float16_conversion_funcs_link_no_flags} = "yes"; then
|
|
# Finally, MacOS 13 appears to have a bug specifically when converting
|
|
# long double values to _Float16. Release builds of the dt_arith test
|
|
# would cause any assignments to a _Float16 variable to be elided,
|
|
# whereas Debug builds would perform incorrect hardware conversions by
|
|
# simply chopping off all the bytes of the value except for the first 2.
|
|
# These tests pass on MacOS 14, so let's perform a quick test to check
|
|
# if the hardware conversion is done correctly.
|
|
AC_MSG_CHECKING([if compiler can correctly convert long double values to _Float16])
|
|
TEST_SRC="`(echo \"#define H5_LDOUBLE_TO_FLOAT16_CORRECT_TEST 1\"; cat $srcdir/config/cmake/ConversionTests.c)`"
|
|
if test ${ac_cv_sizeof_long_double} = 0; then
|
|
hdf5_cv_ldouble_to_float16_correct=${hdf5_cv_ldouble_to_float16_correct=no}
|
|
else
|
|
AC_CACHE_VAL([hdf5_cv_ldouble_to_float16_correct],
|
|
[AC_RUN_IFELSE(
|
|
[AC_LANG_SOURCE([$TEST_SRC])],
|
|
[hdf5_cv_ldouble_to_float16_correct=yes],
|
|
[hdf5_cv_ldouble_to_float16_correct=no],
|
|
[hdf5_cv_ldouble_to_float16_correct=yes])])
|
|
fi
|
|
AC_MSG_RESULT(${hdf5_cv_ldouble_to_float16_correct})
|
|
|
|
# Backup and clear CFLAGS before performing configure check again
|
|
conftest_cflags_backup="$CFLAGS"
|
|
CFLAGS=""
|
|
|
|
AC_MSG_CHECKING([if compiler can correctly convert long double values to _Float16 (without CFLAGS)])
|
|
TEST_SRC="`(echo \"#define H5_LDOUBLE_TO_FLOAT16_CORRECT_NO_FLAGS_TEST 1\"; cat $srcdir/config/cmake/ConversionTests.c)`"
|
|
if test ${ac_cv_sizeof_long_double} = 0; then
|
|
hdf5_cv_ldouble_to_float16_correct_no_flags=${hdf5_cv_ldouble_to_float16_correct_no_flags=no}
|
|
else
|
|
AC_CACHE_VAL([hdf5_cv_ldouble_to_float16_correct_no_flags],
|
|
[AC_RUN_IFELSE(
|
|
[AC_LANG_SOURCE([$TEST_SRC])],
|
|
[hdf5_cv_ldouble_to_float16_correct_no_flags=yes],
|
|
[hdf5_cv_ldouble_to_float16_correct_no_flags=no],
|
|
[hdf5_cv_ldouble_to_float16_correct_no_flags=yes])])
|
|
fi
|
|
AC_MSG_RESULT(${hdf5_cv_ldouble_to_float16_correct_no_flags})
|
|
|
|
CFLAGS="$conftest_cflags_backup"
|
|
|
|
if test ${hdf5_cv_ldouble_to_float16_correct} = "yes" &&
|
|
test ${hdf5_cv_ldouble_to_float16_correct_no_flags} = "yes"; then
|
|
AC_DEFINE([LDOUBLE_TO_FLOAT16_CORRECT], [1],
|
|
[Define if your system can convert long double to _Float16 values correctly.])
|
|
else
|
|
AC_MSG_NOTICE([Conversions from long double to _Float16 appear to be incorrect. These will be emulated through a soft conversion function.])
|
|
fi
|
|
|
|
HAVE__FLOAT16="yes"
|
|
|
|
# Check if we can use fabsf16
|
|
AC_CHECK_FUNC([fabsf16], [AC_DEFINE([HAVE_FABSF16], [1],
|
|
[Define if has fabsf16 function])], [])
|
|
|
|
# Define HAVE__FLOAT16 macro for H5pubconf.h if _Float16 is available.
|
|
AC_DEFINE([HAVE__FLOAT16], [1], [Determine if _Float16 is available])
|
|
fi
|
|
fi
|
|
|
|
AC_MSG_CHECKING([if _Float16 support is enabled])
|
|
AC_MSG_RESULT([$HAVE__FLOAT16])
|
|
fi
|
|
else
|
|
AC_DEFINE([SIZEOF__FLOAT16], [0])
|
|
fi
|
|
|
|
# Define HAVE__FLOAT16 value to substitute into other files for conditional testing
|
|
AC_SUBST([HAVE__FLOAT16])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if the Fortran interface should be enabled
|
|
##
|
|
|
|
## This needs to be exposed for the library info file even if Fortran is disabled.
|
|
AC_SUBST([HDF_FORTRAN])
|
|
|
|
## Default is no Fortran
|
|
HDF_FORTRAN=no
|
|
|
|
AC_SUBST([HDF5_INTERFACES]) HDF5_INTERFACES=""
|
|
AC_MSG_CHECKING([if Fortran interface enabled])
|
|
AC_ARG_ENABLE([fortran],
|
|
[AS_HELP_STRING([--enable-fortran],
|
|
[Compile the Fortran interface [default=no]])],
|
|
[HDF_FORTRAN=$enableval])
|
|
|
|
AC_MSG_RESULT([$HDF_FORTRAN])
|
|
|
|
if test "X$HDF_FORTRAN" = "Xyes"; then
|
|
|
|
## ----------------------------------------------------------------------
|
|
## __float128 checks
|
|
##
|
|
## If __float128 exists and we can determine its precision, we will use
|
|
## it in the Fortran interface. The checks for this require that the
|
|
## precision be specified via a symbol named FLT128_DIG, which might be
|
|
## found in quadmath.h.
|
|
##
|
|
## The checks here are based on the GNU __float128 extension type from
|
|
## libquadmath, which is now part of gcc. Other compilers (clang, Intel)
|
|
## also expose __float128 and/or __float128 may be an alias for some
|
|
## other 128-bit floating point type.
|
|
##
|
|
## 128-bit floating-point math is usually handled in software and is thus
|
|
## orders of magnitude slower than hardware-supported floating-point math.
|
|
##
|
|
AC_MSG_CHECKING([if __float128 exists])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[__float128 x; return 0;]])],
|
|
[HAVE___FLOAT128=1; AC_MSG_RESULT([yes])],
|
|
[HAVE___FLOAT128=0; AC_MSG_RESULT([no])]
|
|
)
|
|
|
|
## gcc puts symbols like FLT128_DIG in quadmath.h instead of float.h,
|
|
## so check for that before running the precision macro. Note that
|
|
## using AC_CHECK_HEADER instead of AC_CHECK_HEADERS keeps the
|
|
## H5_HAVE_QUADMATH_H symbol out of the public config header.
|
|
##
|
|
AC_CHECK_HEADER([quadmath.h], [INCLUDE_QUADMATH_H=1], [INCLUDE_QUADMATH_H=0])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Get the max decimal precision in C, checking both long double and
|
|
## __float128 (if available)
|
|
##
|
|
AC_MSG_CHECKING([maximum decimal precision for C])
|
|
|
|
MY_FLT128_DIG=0
|
|
MY_LDBL_DIG=0
|
|
|
|
## Macro to compare long double and __float128 to see which has higher precision
|
|
PAC_FC_LDBL_DIG
|
|
|
|
## Set results
|
|
if test "$MY_FLT128_DIG" -gt "$MY_LDBL_DIG" ; then
|
|
PAC_C_MAX_REAL_PRECISION=$MY_FLT128_DIG
|
|
PRECISION_TYPE="(__float128)"
|
|
else
|
|
PAC_C_MAX_REAL_PRECISION=$MY_LDBL_DIG
|
|
PRECISION_TYPE="(long double)"
|
|
fi
|
|
AC_MSG_RESULT([$PAC_C_MAX_REAL_PRECISION $PRECISION_TYPE])
|
|
|
|
## Store results in config file
|
|
AC_SUBST([PAC_C_MAX_REAL_PRECISION])
|
|
AC_DEFINE_UNQUOTED([PAC_C_MAX_REAL_PRECISION], $PAC_C_MAX_REAL_PRECISION, [Determine the maximum decimal precision in C])
|
|
|
|
## Are we going to use __float128?
|
|
AC_MSG_CHECKING([if __float128 will be used in the Fortran wrappers])
|
|
|
|
if test "$MY_FLT128_DIG" -gt "$MY_LDBL_DIG" ; then
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE([HAVE_FLOAT128], [1], [Determine if __float128 will be used in the Fortran wrappers])
|
|
AC_CHECK_SIZEOF([__float128])
|
|
else
|
|
## Can't use __float128, but write an undef line anyway
|
|
AC_MSG_RESULT([no])
|
|
AH_TEMPLATE([HAVE_FLOAT128], [Determine if __float128 will be used in the Fortran wrappers])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Define interface version
|
|
##
|
|
VERS_MAJOR=`cat $srcdir/src/H5public.h | sed -n 's/^#define H5_VERS_MAJOR //p'`
|
|
VERS_MINOR=`cat $srcdir/src/H5public.h | sed -n 's/^#define H5_VERS_MINOR //p'`
|
|
VERS_RELEASE=`cat $srcdir/src/H5public.h | sed -n 's/^#define H5_VERS_RELEASE //p'`
|
|
AC_DEFINE_UNQUOTED([VERS_MAJOR_TMP], $VERS_MAJOR, [Define major library version])
|
|
AC_DEFINE_UNQUOTED([VERS_MINOR_TMP], $VERS_MINOR, [Define minor library version])
|
|
AC_DEFINE_UNQUOTED([VERS_RELEASE_TMP], $VERS_RELEASE, [Define release library version])
|
|
|
|
## We will output an include file for Fortran, H5config_f.inc which
|
|
## contains various configure definitions used by the Fortran Library.
|
|
## Prepend H5_ to all macro names. This avoids name conflict between HDF5 macro
|
|
## names and those generated by another software package that uses the HDF5 library.
|
|
AC_CONFIG_HEADERS([fortran/src/H5config_f.inc],
|
|
[cat fortran/src/H5config_f.inc | sed '1d;s%^/\* \(.*\) \*/%\1%;s/#define /#define H5_/;s/#undef /#undef H5_/' >fortran/src/H5config_f.inc.tmp; sed -i 's\_TMP\\g' fortran/src/H5config_f.inc.tmp; mv -f fortran/src/H5config_f.inc.tmp fortran/src/H5config_f.inc])
|
|
|
|
AC_SUBST([FC])
|
|
|
|
HDF5_INTERFACES="$HDF5_INTERFACES fortran"
|
|
|
|
## --------------------------------------------------------------------
|
|
## HDF5 integer variables for the H5fortran_types.f90 file.
|
|
##
|
|
AC_SUBST([R_LARGE])
|
|
AC_SUBST([R_INTEGER])
|
|
AC_SUBST([HADDR_T])
|
|
AC_SUBST([HSIZE_T])
|
|
AC_SUBST([HSSIZE_T])
|
|
AC_SUBST([HID_T])
|
|
AC_SUBST([SIZE_T])
|
|
AC_SUBST([OBJECT_NAMELEN_DEFAULT_F])
|
|
|
|
## --------------------------------------------------------------------
|
|
## Fortran source extension
|
|
##
|
|
AC_FC_SRCEXT([f90])
|
|
|
|
AC_SUBST([F9XSUFFIXFLAG])
|
|
AC_SUBST([FSEARCH_DIRS])
|
|
|
|
## --------------------------------------------------------------------
|
|
## Check for a Fortran compiler and how to include modules.
|
|
##
|
|
AC_PROG_FC([PAC_FC_SEARCH_LIST],)
|
|
AC_F9X_MODS
|
|
|
|
## Allow setting the fortran module install dir
|
|
AC_ARG_WITH([fmoddir],
|
|
[AS_HELP_STRING([--with-fmoddir=DIR], [Fortran module install directory])],
|
|
[fmoddir=$withval],
|
|
[fmoddir="\${includedir}"])
|
|
AC_SUBST([fmoddir], [$fmoddir])
|
|
|
|
## Change to the Fortran 90 language
|
|
AC_LANG_PUSH(Fortran)
|
|
|
|
## Checking if the compiler supports the required Fortran 2003 features and
|
|
## stopping if it does not.
|
|
PAC_PROG_FC_HAVE_F2003_REQUIREMENTS
|
|
|
|
if test "X$HAVE_F2003_REQUIREMENTS" = "Xno"; then
|
|
AC_MSG_ERROR([Fortran compiler lacks required Fortran 2003 features; unsupported Fortran 2003 compiler, remove --enable-fortran])
|
|
fi
|
|
## Checking if the compiler supports fortran character being allocatable
|
|
PAC_HAVE_CHAR_ALLOC
|
|
|
|
## --------------------------------------------------------------------
|
|
## Define wrappers for the C compiler to use Fortran function names
|
|
##
|
|
AC_FC_WRAPPERS
|
|
|
|
## --------------------------------------------------------------------
|
|
## See if the fortran compiler supports the intrinsic function "SIZEOF"
|
|
PAC_PROG_FC_SIZEOF
|
|
|
|
## See if the fortran compiler supports the intrinsic function "C_SIZEOF"
|
|
PAC_PROG_FC_C_SIZEOF
|
|
|
|
## See if the fortran compiler supports the intrinsic function "STORAGE_SIZE"
|
|
PAC_PROG_FC_STORAGE_SIZE
|
|
|
|
## --------------------------------------------------------------------
|
|
## Checking if the fortran compiler supports ISO_FORTRAN_ENV (Fortran 2008)
|
|
HAVE_ISO_FORTRAN_ENV="0"
|
|
PAC_PROG_FC_ISO_FORTRAN_ENV
|
|
if test "X$CHECK_ISO_FORTRAN_ENV" = "Xyes"; then
|
|
HAVE_ISO_FORTRAN_ENV="1"
|
|
AC_DEFINE([HAVE_ISO_FORTRAN_ENV], [1], [Define if Fortran supports ISO_FORTRAN_ENV (F08)])
|
|
fi
|
|
|
|
## Set the sizeof function for use later in the fortran tests
|
|
if test "X$HAVE_STORAGE_SIZE_FORTRAN" = "Xyes";then
|
|
FC_SIZEOF_A="STORAGE_SIZE(a, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
|
|
FC_SIZEOF_B="STORAGE_SIZE(b, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
|
|
FC_SIZEOF_C="STORAGE_SIZE(c, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
|
|
else
|
|
if test "X$HAVE_SIZEOF_FORTRAN" = "Xyes";then
|
|
FC_SIZEOF_A="SIZEOF(a)"
|
|
FC_SIZEOF_B="SIZEOF(b)"
|
|
FC_SIZEOF_C="SIZEOF(c)"
|
|
else
|
|
## If neither intrinsic functions SIZEOF or STORAGE_SIZE is available then stop configure with an error
|
|
AC_MSG_ERROR([Fortran compiler requires either intrinsic functions SIZEOF or STORAGE_SIZE])
|
|
fi
|
|
fi
|
|
|
|
## Check KIND and size of native integer
|
|
PAC_FC_NATIVE_INTEGER
|
|
|
|
## Find all available KINDs
|
|
if test "X$HAVE_ISO_FORTRAN_ENV" = "X1";then
|
|
PAC_FC_AVAIL_KINDS_F08
|
|
else
|
|
PAC_FC_AVAIL_KINDS
|
|
fi
|
|
|
|
## Find all SIZEOFs for available KINDs
|
|
PAC_FC_SIZEOF_INT_KINDS
|
|
PAC_FC_SIZEOF_REAL_KINDS
|
|
|
|
AC_SUBST([PAC_FC_ALL_REAL_KINDS])
|
|
AC_SUBST([PAC_FC_MAX_REAL_PRECISION])
|
|
AC_SUBST([PAC_FORTRAN_NUM_INTEGER_KINDS])
|
|
AC_SUBST([PAC_FC_ALL_INTEGER_KINDS])
|
|
AC_SUBST([PAC_FC_ALL_REAL_KINDS_SIZEOF])
|
|
AC_SUBST([PAC_FC_ALL_INTEGER_KINDS_SIZEOF])
|
|
AC_SUBST([PAC_FORTRAN_NATIVE_INTEGER_KIND])
|
|
AC_SUBST([PAC_FORTRAN_NATIVE_INTEGER_SIZEOF])
|
|
AC_SUBST([PAC_FORTRAN_NATIVE_REAL_KIND])
|
|
AC_SUBST([PAC_FORTRAN_NATIVE_REAL_SIZEOF])
|
|
AC_SUBST([PAC_FORTRAN_NATIVE_DOUBLE_KIND])
|
|
AC_SUBST([PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF])
|
|
AC_SUBST([HAVE_Fortran_INTEGER_SIZEOF_16])
|
|
AC_SUBST([FORTRAN_HAVE_C_LONG_DOUBLE])
|
|
AC_SUBST([FORTRAN_C_LONG_DOUBLE_IS_UNIQUE])
|
|
AC_SUBST([FORTRAN_C_BOOL_IS_UNIQUE])
|
|
AC_SUBST([HAVE_ISO_FORTRAN_ENV])
|
|
AC_SUBST([H5CONFIG_F_NUM_RKIND])
|
|
AC_SUBST([H5CONFIG_F_RKIND])
|
|
AC_SUBST([H5CONFIG_F_RKIND_SIZEOF])
|
|
AC_SUBST([H5CONFIG_F_NUM_IKIND])
|
|
AC_SUBST([H5CONFIG_F_IKIND])
|
|
AC_SUBST([Fortran_COMPILER_ID])
|
|
Fortran_COMPILER_ID=none
|
|
AC_DEFINE_UNQUOTED([Fortran_COMPILER_ID], $Fortran_COMPILER_ID, [Define Fortran compiler ID])
|
|
|
|
## Setting definition if there is a 16 byte fortran integer
|
|
if `echo $PAC_FC_ALL_INTEGER_KINDS_SIZEOF | grep '16' >/dev/null`; then
|
|
HAVE_Fortran_INTEGER_SIZEOF_16="1"
|
|
AC_DEFINE([HAVE_Fortran_INTEGER_SIZEOF_16], [1], [Determine if INTEGER*16 is available])
|
|
else
|
|
HAVE_Fortran_INTEGER_SIZEOF_16="0"
|
|
AC_DEFINE([HAVE_Fortran_INTEGER_SIZEOF_16], [0], [Determine if INTEGER*16 is available])
|
|
fi
|
|
|
|
if test "X$HAVE_STORAGE_SIZE_FORTRAN" = "Xyes"; then
|
|
AC_DEFINE([FORTRAN_HAVE_STORAGE_SIZE], [1], [Define if we have Fortran intrinsic STORAGE_SIZE])
|
|
fi
|
|
|
|
if test "X$HAVE_C_SIZEOF_FORTRAN" = "Xyes"; then
|
|
AC_DEFINE([FORTRAN_HAVE_C_SIZEOF], [1], [Define if we have Fortran intrinsic C_SIZEOF])
|
|
fi
|
|
|
|
if test "X$HAVE_SIZEOF_FORTRAN" = "Xyes"; then
|
|
AC_DEFINE([FORTRAN_HAVE_SIZEOF], [1], [Define if we have Fortran intrinsic SIZEOF])
|
|
fi
|
|
|
|
if test "X$HAVE_CHAR_ALLOC_FORTRAN" = "Xyes"; then
|
|
AC_DEFINE([FORTRAN_HAVE_CHAR_ALLOC], [1], [Define if Fortran supports allocatable character])
|
|
fi
|
|
|
|
## See if C_LONG_DOUBLE is available
|
|
PAC_PROG_FC_HAVE_C_LONG_DOUBLE
|
|
|
|
FORTRAN_HAVE_C_LONG_DOUBLE="0"
|
|
if test "X$HAVE_C_LONG_DOUBLE_FORTRAN" = "Xyes"; then
|
|
FORTRAN_HAVE_C_LONG_DOUBLE="1"
|
|
AC_DEFINE([FORTRAN_HAVE_C_LONG_DOUBLE], [1], [Define if we have Fortran C_LONG_DOUBLE])
|
|
fi
|
|
|
|
## Is C_LONG_DOUBLE different from C_DOUBLE
|
|
FORTRAN_C_LONG_DOUBLE_IS_UNIQUE="0"
|
|
if test "$FORTRAN_HAVE_C_LONG_DOUBLE" = "1"; then
|
|
PAC_PROG_FC_C_LONG_DOUBLE_EQ_C_DOUBLE
|
|
if test "X$C_LONG_DOUBLE_IS_UNIQUE_FORTRAN" = "Xyes"; then
|
|
FORTRAN_C_LONG_DOUBLE_IS_UNIQUE="1"
|
|
AC_DEFINE([FORTRAN_C_LONG_DOUBLE_IS_UNIQUE], [1], [Define if Fortran C_LONG_DOUBLE is different from C_DOUBLE])
|
|
else
|
|
FORTRAN_C_LONG_DOUBLE_IS_UNIQUE="0"
|
|
fi
|
|
fi
|
|
|
|
## Is C_BOOL different from default LOGICAL
|
|
FORTRAN_C_BOOL_IS_UNIQUE="0"
|
|
PAC_PROG_FC_C_BOOL_EQ_LOGICAL
|
|
if test "X$C_BOOL_IS_UNIQUE_FORTRAN" = "Xyes"; then
|
|
FORTRAN_C_BOOL_IS_UNIQUE="1"
|
|
AC_DEFINE([FORTRAN_C_BOOL_IS_UNIQUE], [1], [Define if Fortran C_BOOL is different from default LOGICAL])
|
|
else
|
|
FORTRAN_C_BOOL_IS_UNIQUE="0"
|
|
fi
|
|
|
|
FORTRAN_SIZEOF_LONG_DOUBLE=${ac_cv_sizeof_long_double}
|
|
AC_DEFINE_UNQUOTED([FORTRAN_SIZEOF_LONG_DOUBLE], ["${ac_cv_sizeof_long_double}"], [Determine the size of C long double])
|
|
|
|
dnl get the largest sizeof for REAL kinds
|
|
max_real_fortran_sizeof="`echo $PAC_FC_ALL_REAL_KINDS_SIZEOF | sed -ne 's/.*,\([[0-9]]*\)}/\1/p'`"
|
|
max_real_fortran_kind="`echo $PAC_FC_ALL_REAL_KINDS | sed -ne 's/.*,\([[0-9]]*\)}/\1/p'`"
|
|
|
|
dnl remove the invalid kind from the list
|
|
if test "$ac_cv_sizeof___float128" != 0;then
|
|
if test "$ac_cv_sizeof___float128" != "$max_real_fortran_sizeof" &&
|
|
test "${ac_cv_sizeof_long_double}" != "$max_real_fortran_sizeof" &&
|
|
dnl account for the fact that the C compiler can have 16-byte __float128 and the Fortran compiler only has 8-byte doubles,
|
|
dnl so we don't want to remove the 8-byte Fortran doubles. This is sometimes the case if different C and Fortran vendors
|
|
dnl are used (for example gnu and pgi).
|
|
test "${ac_cv_sizeof_double}" != "$max_real_fortran_sizeof" ; then
|
|
AC_MSG_WARN([
|
|
Fortran REAL(KIND=$max_real_fortran_kind) is $max_real_fortran_sizeof Bytes, but no corresponding C float type exists of that size
|
|
!!! Fortran interfaces will not be generated for REAL(KIND=$max_real_fortran_kind) !!!
|
|
])
|
|
PAC_FC_ALL_REAL_KINDS="`echo $PAC_FC_ALL_REAL_KINDS | sed -e 's/,[[0-9]]\+}/}/g'`"
|
|
PAC_FC_ALL_REAL_KINDS_SIZEOF="`echo $PAC_FC_ALL_REAL_KINDS_SIZEOF | sed -e 's/,[[0-9]]\+}/}/g'`"
|
|
|
|
fi
|
|
fi
|
|
AC_MSG_CHECKING([for Fortran interoperable KINDS with C])
|
|
AC_MSG_RESULT([$PAC_FC_ALL_REAL_KINDS])
|
|
|
|
dnl count the number of real kinds
|
|
H5CONFIG_F_NUM_RKIND="INTEGER, PARAMETER :: num_rkinds = `echo \"[$]PAC_FC_ALL_REAL_KINDS\" | tr -d -c ',\n' | awk '{ print length + 1; }'`"
|
|
H5CONFIG_F_RKIND="INTEGER, DIMENSION(1:num_rkinds) :: rkind = (/`echo $PAC_FC_ALL_REAL_KINDS | sed -e 's/{//g' | sed -e 's/}//g' | sed -e 's/ /,/g'`/)"
|
|
H5CONFIG_F_RKIND_SIZEOF="INTEGER, DIMENSION(1:num_rkinds) :: rkind_sizeof = (/`echo $PAC_FC_ALL_REAL_KINDS_SIZEOF | sed -e 's/{//g' | sed -e 's/}//g'| sed -e 's/ /,/g'`/)"
|
|
|
|
AC_DEFINE_UNQUOTED([H5CONFIG_F_NUM_RKIND], $H5CONFIG_F_NUM_RKIND, [Define number of valid Fortran REAL KINDs])
|
|
AC_DEFINE_UNQUOTED([H5CONFIG_F_RKIND], $H5CONFIG_F_RKIND, [Define valid Fortran REAL KINDs])
|
|
AC_DEFINE_UNQUOTED([H5CONFIG_F_RKIND_SIZEOF], $H5CONFIG_F_RKIND_SIZEOF, [Define valid Fortran REAL KINDs Sizeof])
|
|
|
|
## Change back to the C language
|
|
AC_LANG_POP(Fortran)
|
|
else
|
|
FC="no"
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if they would like the C++ interface compiled
|
|
##
|
|
## This needs to be exposed for the library info file even if C++ is disabled.
|
|
AC_SUBST([HDF_CXX])
|
|
|
|
## Default is no C++
|
|
HDF_CXX=no
|
|
|
|
## We need to check for a C++ compiler unconditionally, since
|
|
## AC_PROG_CXX defines some macros that Automake 1.9.x uses and will
|
|
## miss even if c++ is not enabled.
|
|
AC_PROG_CXX
|
|
AC_PROG_CXXCPP
|
|
|
|
AC_MSG_CHECKING([if c++ interface enabled])
|
|
|
|
AC_ARG_ENABLE([cxx],
|
|
[AS_HELP_STRING([--enable-cxx],
|
|
[Compile the C++ interface [default=no]])],
|
|
[HDF_CXX=$enableval])
|
|
AC_MSG_RESULT([$HDF_CXX])
|
|
|
|
if test "X$HDF_CXX" = "Xyes"; then
|
|
HDF5_INTERFACES="$HDF5_INTERFACES c++"
|
|
|
|
## Expose the compiler for *.in files
|
|
AC_SUBST([CXX])
|
|
|
|
## Change to the C++ language
|
|
AC_LANG_PUSH(C++)
|
|
|
|
else
|
|
CXX="no"
|
|
fi
|
|
|
|
## Change back to the C language
|
|
AC_LANG_POP(C++)
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if they would like the High Level library compiled
|
|
##
|
|
|
|
## This needs to be exposed for the library info file even if the HL
|
|
## library is disabled.
|
|
AC_SUBST([HDF5_HL])
|
|
AC_SUBST([HDF5_HL_TOOLS])
|
|
AC_SUBST([HDF5_HL_GIF_TOOLS])
|
|
|
|
## The high-level library and high-level tools are enabled unless the build mode
|
|
## is clean.
|
|
if test "X-$BUILD_MODE" = "X-clean" ; then
|
|
HDF5_HL=no
|
|
HDF5_HL_TOOLS=no
|
|
else
|
|
HDF5_HL=yes
|
|
HDF5_HL_TOOLS=yes
|
|
fi
|
|
|
|
## high-level library directories (set when needed, blank until then)
|
|
##
|
|
## main high-level library
|
|
AC_SUBST(HL)
|
|
HL=""
|
|
## Fortran high-level library
|
|
AC_SUBST(HL_FOR)
|
|
HL_FOR=""
|
|
## Tools high-level library
|
|
AC_SUBST(HL_TOOLS)
|
|
HL_TOOLS=""
|
|
|
|
AC_MSG_CHECKING([if the high-level library is enabled])
|
|
AC_ARG_ENABLE([hl],
|
|
[AS_HELP_STRING([--enable-hl],
|
|
[Enable the high-level library.
|
|
[default=yes (unless build mode = clean)]
|
|
])],
|
|
[HDF5_HL=$enableval])
|
|
|
|
if test "X-$HDF5_HL" = "X-yes"; then
|
|
AC_MSG_RESULT([yes])
|
|
HL="hl"
|
|
AC_DEFINE([INCLUDE_HL], [1],
|
|
[Define if the high-level library headers should be included in hdf5.h])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Enable new references for dimension scales
|
|
##
|
|
AC_SUBST([DIMENSION_SCALES_WITH_NEW_REF])
|
|
AC_MSG_CHECKING([whether to use new references with dimension scales]);
|
|
AC_ARG_ENABLE([dimension-scales-with-new-ref],
|
|
[AS_HELP_STRING([--enable-dimension-scales-with-new-ref],
|
|
[Use new references when creating dimension scales.
|
|
[default=no]
|
|
])],
|
|
[DIMENSION_SCALES_WITH_NEW_REF=$enableval])
|
|
|
|
## Set the default value to use old references.
|
|
if test "X-$DIMENSION_SCALES_WITH_NEW_REF" = X- ; then
|
|
DIMENSION_SCALES_WITH_NEW_REF=no
|
|
fi
|
|
|
|
case "X-$DIMENSION_SCALES_WITH_NEW_REF" in
|
|
X-yes)
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE([DIMENSION_SCALES_WITH_NEW_REF], [1],
|
|
[Define if new references for dimension scales were requested])
|
|
|
|
;;
|
|
X-no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $DIMENSION_SCALES_WITH_NEW_REF])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check which archiving tool to use. This needs to be done before
|
|
## the LT_INIT macro.
|
|
##
|
|
if test -z "$AR"; then
|
|
AC_CHECK_PROGS([AR], [ar xar], [:], [$PATH])
|
|
fi
|
|
AC_SUBST([AR])
|
|
|
|
# Set the default ar flags to cr
|
|
# The Automake default is to use cru and the 'u' causes ar
|
|
# to emit warnings on some platforms.
|
|
AR_FLAGS=cr
|
|
|
|
|
|
## Export the AR macro so that it will be placed in the libtool file
|
|
## correctly.
|
|
export AR
|
|
|
|
AC_PROG_MAKE_SET
|
|
AC_PROG_INSTALL
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Set up ${TR} which is used to process the package list for extra
|
|
## debugging output in the C library.
|
|
|
|
AC_PATH_PROG([TR], [tr])
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check that time can be used with srcdir. This is okay on most systems,
|
|
## but seems to cause problems on Cygwin.
|
|
## The solution on Cygwin is not to record execution time for tests.
|
|
##
|
|
## Note: This is still true as of Cygwin 1.7.32 (Aug 2014) on both 32-
|
|
## and 64-bit platforms. Given how long this has been true, it seems
|
|
## unlikely to change, but we should probably re-test this periodically.
|
|
|
|
AC_MSG_CHECKING([if srcdir= and time commands work together])
|
|
|
|
AC_SUBST([TIME])
|
|
TIME=time
|
|
TIME_TEST=`foo="bar" ${TIME} echo 'baz' 2> /dev/null | grep baz`
|
|
|
|
if test "X${TIME_TEST}" = "Xbaz"; then
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
TIME=
|
|
fi
|
|
|
|
|
|
## The following variables are used to distinguish between building a
|
|
## serial and parallel library.
|
|
##
|
|
## HAVE_PARALLEL -- defined in H5config.h if we are building
|
|
## a parallel library even if configure wasn't
|
|
## able to find some header file or library that
|
|
## might be required. This is defined if the
|
|
## user explicitly states
|
|
## that a parallel library is being built by supplying
|
|
## the `--enable-parallel' configure switch.
|
|
##
|
|
## PARALLEL -- This variable is set to a non-null value if
|
|
## we're building a parallel version of the library.
|
|
##
|
|
## RUNSERIAL -- This is a command which will be prepended to
|
|
## the executable name to run the executable using
|
|
## a single process. For serial versions of the
|
|
## library this will normally be empty. For parallel
|
|
## versions it might be something like `mpiexec -n 1'.
|
|
## The value of this variable is substituted in *.in
|
|
## files.
|
|
##
|
|
## RUNPARALLEL -- This is a command which will be prepended to
|
|
## the executable name to run the executable on
|
|
## multiple processors. For the serial library the
|
|
## value will normally be the empty string. For
|
|
## parallel library it should be something like
|
|
## "mpiexec -n \$\${NPROCS:=6}" where NPROCS will
|
|
## eventually contain the number of processors on which
|
|
## to run the executable (the double dollarsigns are to
|
|
## protect the expansion until make executes the
|
|
## command). The value of this variable is
|
|
## substituted in *.in files.
|
|
##
|
|
AC_SUBST([PARALLEL])
|
|
AC_SUBST([RUNSERIAL])
|
|
AC_SUBST([RUNPARALLEL])
|
|
AC_SUBST([TESTPARALLEL])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if they would like the Java native interface (JNI) compiled
|
|
##
|
|
|
|
## This needs to be exposed for the library info file even if Java is disabled.
|
|
AC_SUBST([HDF_JAVA])
|
|
|
|
## Default is no Java
|
|
HDF_JAVA=no
|
|
|
|
AC_SUBST([H5_CLASSPATH]) H5_CLASSPATH=""
|
|
AC_MSG_CHECKING([if Java JNI interface enabled])
|
|
|
|
AC_ARG_ENABLE([java],
|
|
[AS_HELP_STRING([--enable-java],
|
|
[Compile the Java JNI interface [default=no]])],
|
|
[HDF_JAVA=$enableval])
|
|
|
|
if test "X$HDF_JAVA" = "Xyes"; then
|
|
if test "X${enable_shared}" != "Xno"; then
|
|
AC_MSG_RESULT([yes])
|
|
if test "X$CLASSPATH" = "X"; then
|
|
H5_CLASSPATH=".:$srcdir/java/lib"
|
|
else
|
|
H5_CLASSPATH=".:$CLASSPATH:$srcdir/java/lib"
|
|
fi
|
|
## Checks for programs.
|
|
AX_JAVA_OPTIONS
|
|
H5_JAVACFLAGS=$JAVACFLAGS
|
|
H5_JAVAFLAGS=$JAVAFLAGS
|
|
AX_PROG_JAVAC
|
|
AX_PROG_JAVA
|
|
AX_PROG_JAR
|
|
AX_PROG_JAVADOC
|
|
## Find the include directories needed for building JNI code
|
|
AX_JNI_INCLUDE_DIR()
|
|
for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
|
|
do
|
|
JNIFLAGS="$JNIFLAGS -I$JNI_INCLUDE_DIR"
|
|
done
|
|
## Find junit for testing the JNI code
|
|
AX_CHECK_CLASSPATH()
|
|
CLASSPATH_ENV=$H5_CLASSPATH
|
|
AX_CHECK_JUNIT()
|
|
AX_CHECK_JAVA_HOME
|
|
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_ERROR([Java requires shared libraries to be built])
|
|
HDF_JAVA="no"
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Fortran libraries are not currently supported on Mac. Disable them.
|
|
## (this is overridable with --enable-unsupported).
|
|
##
|
|
AC_SUBST([H5_FORTRAN_SHARED])
|
|
H5_FORTRAN_SHARED="no"
|
|
if test "X${HDF_FORTRAN}" = "Xyes" && test "X${enable_shared}" != "Xno"; then
|
|
AC_MSG_CHECKING([if shared Fortran libraries are supported])
|
|
H5_FORTRAN_SHARED="yes"
|
|
|
|
## Report results of check(s)
|
|
|
|
if test "X${H5_FORTRAN_SHARED}" = "Xno"; then
|
|
AC_MSG_RESULT([no])
|
|
AC_MSG_WARN([$CHECK_WARN])
|
|
if test "X${ALLOW_UNSUPPORTED}" != "Xyes"; then
|
|
AC_MSG_WARN([Disabling shared Fortran libraries.])
|
|
AC_MSG_WARN([To override this behavior, please use --enable-unsupported configure option.])
|
|
if test "X${enable_static}" = "Xno"; then
|
|
AC_MSG_ERROR([both static and shared Fortran libraries are disabled])
|
|
fi
|
|
else
|
|
AC_MSG_WARN([Allowing unsupported Fortran shared libraries due to use of --enable-unsupported flag])
|
|
H5_FORTRAN_SHARED="yes"
|
|
fi
|
|
else
|
|
AC_MSG_RESULT([yes])
|
|
fi
|
|
fi
|
|
|
|
AM_CONDITIONAL([FORTRAN_SHARED_CONDITIONAL], [test "X$H5_FORTRAN_SHARED" = "Xyes"])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if they would like to disable building tests
|
|
##
|
|
|
|
## This needs to be exposed for the library info file.
|
|
AC_SUBST([HDF5_TESTS])
|
|
|
|
## Default is to build tests
|
|
HDF5_TESTS=yes
|
|
|
|
AC_MSG_CHECKING([if building tests is disabled])
|
|
|
|
AC_ARG_ENABLE([tests],
|
|
[AS_HELP_STRING([--enable-tests],
|
|
[Compile the HDF5 tests [default=yes]])],
|
|
[HDF5_TESTS=$enableval])
|
|
|
|
AC_MSG_RESULT([$HDF5_TESTS])
|
|
|
|
## These need to be exposed for some tests.
|
|
AC_SUBST([H5_UTILS_TEST_BUILDDIR])
|
|
H5_UTILS_TEST_BUILDDIR='utils/test'
|
|
AC_SUBST([H5_TEST_BUILDDIR])
|
|
H5_TEST_BUILDDIR='test'
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check what level of testing should be enabled
|
|
##
|
|
|
|
## Default is quickest testing
|
|
TEST_EXPRESS_LEVEL_DEFAULT=3
|
|
|
|
AC_MSG_CHECKING([if HDF5 testing intensity level is set])
|
|
|
|
AC_ARG_ENABLE([test-express],
|
|
[AS_HELP_STRING([--enable-test-express=(0-3)],
|
|
[Set HDF5 testing intensity level (0-3) [0 = exhaustive testing; 3 = quicker testing; default=3] Set environment variable HDF5TestExpress to override configured setting])],
|
|
[TEST_EXPRESS_LEVEL_DEFAULT=$enableval])
|
|
|
|
case "X-$TEST_EXPRESS_LEVEL_DEFAULT" in
|
|
X-0|X-1|X-2|X-3)
|
|
AC_MSG_RESULT([$TEST_EXPRESS_LEVEL_DEFAULT])
|
|
;;
|
|
*)
|
|
AC_MSG_RESULT([error])
|
|
AC_MSG_ERROR([$TEST_EXPRESS_LEVEL_DEFAULT is not a valid test express level])
|
|
;;
|
|
esac
|
|
|
|
AC_DEFINE_UNQUOTED([TEST_EXPRESS_LEVEL_DEFAULT], [$TEST_EXPRESS_LEVEL_DEFAULT], [HDF5 testing intensity level])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if they would like to disable building tools
|
|
##
|
|
|
|
## This needs to be exposed for the library info file.
|
|
AC_SUBST([HDF5_TOOLS])
|
|
|
|
## Default is to build tests and tools
|
|
HDF5_TOOLS=yes
|
|
|
|
AC_MSG_CHECKING([if building tools is enabled])
|
|
|
|
AC_ARG_ENABLE([tools],
|
|
[AS_HELP_STRING([--enable-tools],
|
|
[Compile the HDF5 tools [default=yes]])],
|
|
[HDF5_TOOLS=$enableval])
|
|
|
|
AC_MSG_RESULT([$HDF5_TOOLS])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if they would like to disable building the high-level GIF
|
|
## tools (they have unfixed CVE issues)
|
|
##
|
|
|
|
AC_MSG_CHECKING([if the high-level GIF tools are enabled])
|
|
AC_ARG_ENABLE([hlgiftools],
|
|
[AS_HELP_STRING([--enable-hlgiftools],
|
|
[Enable the high-level GIF tools. NOTE: These have unfixed CVE issues!
|
|
[default=no]
|
|
])],
|
|
[HDF5_HL_GIF_TOOLS=$enableval])
|
|
|
|
if test "X-$HDF5_TOOLS" = "X-yes" -a "X-$HDF5_HL" = "X-yes" -a "X-$HDF5_HL_GIF_TOOLS" = "X-yes"; then
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
HDF5_HL_GIF_TOOLS="no"
|
|
fi
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if they would like to enable building doxygen files
|
|
##
|
|
|
|
## This needs to be exposed for the library info file.
|
|
AC_SUBST([HDF5_DOXYGEN])
|
|
|
|
## Default is to not build DOXYGEN
|
|
HDF5_DOXYGEN=no
|
|
|
|
AC_MSG_CHECKING([if building doxygen is enabled])
|
|
|
|
AC_ARG_ENABLE([doxygen],
|
|
[AS_HELP_STRING([--enable-doxygen],
|
|
[Compile the HDF5 doxygen files [default=no]])],
|
|
[HDF5_DOXYGEN=$enableval])
|
|
|
|
AC_MSG_RESULT([$HDF5_DOXYGEN])
|
|
|
|
## Check if they would like to enable doxygen warnings as errors
|
|
##
|
|
|
|
## This needs to be exposed for the library info file.
|
|
AC_SUBST([HDF5_DOXY_WARNINGS])
|
|
|
|
## Default is not to consider doxygen warnings as errors
|
|
DOXY_ERR=yes
|
|
|
|
AC_MSG_CHECKING([if doxygen warnings as errors is enabled])
|
|
|
|
AC_ARG_ENABLE([doxygen-errors],
|
|
[AS_HELP_STRING([--enable-doxygen-errors],
|
|
[Error on HDF5 doxygen warnings [default=no]])],
|
|
[DOXY_ERR=$enableval])
|
|
|
|
if test "X$DOXY_ERR" = "Xyes"; then
|
|
HDF5_DOXY_WARNINGS="FAIL_ON_WARNINGS"
|
|
else
|
|
HDF5_DOXY_WARNINGS="NO"
|
|
|
|
fi
|
|
AC_MSG_RESULT([$HDF5_DOXY_WARNINGS])
|
|
|
|
if test "X$HDF5_DOXYGEN" = "Xyes"; then
|
|
DX_DOXYGEN_FEATURE(ON)
|
|
DX_DOT_FEATURE(OFF)
|
|
DX_HTML_FEATURE(ON)
|
|
DX_CHM_FEATURE(OFF)
|
|
DX_CHI_FEATURE(OFF)
|
|
DX_MAN_FEATURE(ON)
|
|
DX_RTF_FEATURE(OFF)
|
|
DX_XML_FEATURE(OFF)
|
|
DX_PDF_FEATURE(OFF)
|
|
DX_PS_FEATURE(OFF)
|
|
|
|
AC_SUBST([DOXYGEN_PACKAGE])
|
|
AC_SUBST([DOXYGEN_VERSION_STRING])
|
|
AC_SUBST([DOXYGEN_DIR])
|
|
AC_SUBST([DOXYGEN_INCLUDE_ALIASES])
|
|
AC_SUBST([DOXYGEN_PROJECT_LOGO])
|
|
AC_SUBST([DOXYGEN_PROJECT_BRIEF])
|
|
AC_SUBST([DOXYGEN_INPUT_DIRECTORY])
|
|
AC_SUBST([DOXYGEN_OPTIMIZE_OUTPUT_FOR_C])
|
|
AC_SUBST([DOXYGEN_MACRO_EXPANSION])
|
|
AC_SUBST([DOXYGEN_OUTPUT_DIRECTORY])
|
|
AC_SUBST([DOXYGEN_EXAMPLES_DIRECTORY])
|
|
AC_SUBST([DOXYGEN_LAYOUT_FILE])
|
|
AC_SUBST([DOXYGEN_HTML_HEADER])
|
|
AC_SUBST([DOXYGEN_HTML_FOOTER])
|
|
AC_SUBST([DOXYGEN_HTML_EXTRA_STYLESHEET])
|
|
AC_SUBST([DOXYGEN_HTML_EXTRA_FILES])
|
|
AC_SUBST([DOXYGEN_TAG_FILE])
|
|
AC_SUBST([DOXYGEN_SERVER_BASED_SEARCH])
|
|
AC_SUBST([DOXYGEN_EXTERNAL_SEARCH])
|
|
AC_SUBST([DOXYGEN_SEARCHENGINE_URL])
|
|
AC_SUBST([DOXYGEN_STRIP_FROM_PATH])
|
|
AC_SUBST([DOXYGEN_STRIP_FROM_INC_PATH])
|
|
AC_SUBST([DOXYGEN_PREDEFINED])
|
|
|
|
# SRCDIR Environment variables used inside doxygen macro for the source location:
|
|
DOXYGEN_PACKAGE=${PACKAGE_NAME}
|
|
DOXYGEN_VERSION_STRING=${PACKAGE_VERSION}
|
|
DOXYGEN_DIR='$(SRCDIR)/doxygen'
|
|
DOXYGEN_INCLUDE_ALIASES_PATH='$(SRCDIR)/doxygen'
|
|
DOXYGEN_INCLUDE_ALIASES='$(SRCDIR)/doxygen/aliases'
|
|
DOXYGEN_VERBATIM_VARS='DOXYGEN_INCLUDE_ALIASES'
|
|
DOXYGEN_PROJECT_LOGO='$(SRCDIR)/doxygen/img/HDFG-logo.png'
|
|
DOXYGEN_PROJECT_BRIEF='API Reference'
|
|
DOXYGEN_INPUT_DIRECTORY='$(SRCDIR) $(SRCDIR)/doxygen/dox'
|
|
DOXYGEN_OPTIMIZE_OUTPUT_FOR_C=YES
|
|
DOXYGEN_MACRO_EXPANSION=YES
|
|
DOXYGEN_OUTPUT_DIRECTORY=hdf5lib_docs
|
|
DOXYGEN_EXAMPLES_DIRECTORY='$(SRCDIR)/doxygen/dox/cookbook $(SRCDIR)/doxygen/examples $(SRCDIR)/src $(SRCDIR)/release_docs $(SRCDIR)/test'
|
|
DOXYGEN_LAYOUT_FILE='$(SRCDIR)/doxygen/hdf5doxy_layout.xml'
|
|
DOXYGEN_HTML_HEADER='$(SRCDIR)/doxygen/hdf5_header.html'
|
|
DOXYGEN_HTML_FOOTER='$(SRCDIR)/doxygen/hdf5_footer.html'
|
|
DOXYGEN_HTML_EXTRA_STYLESHEET='$(SRCDIR)/doxygen/hdf5doxy.css $(SRCDIR)/doxygen/doxygen-awesome.css'
|
|
DOXYGEN_HTML_EXTRA_FILES='$(SRCDIR)/doxygen/hdf5_navtree_hacks.js'
|
|
DOXYGEN_TAG_FILE=hdf5.tag
|
|
DOXYGEN_SERVER_BASED_SEARCH=NO
|
|
DOXYGEN_EXTERNAL_SEARCH=NO
|
|
DOXYGEN_SEARCHENGINE_URL=
|
|
DOXYGEN_STRIP_FROM_PATH='$(SRCDIR)'
|
|
DOXYGEN_STRIP_FROM_INC_PATH='$(SRCDIR)'
|
|
DOXYGEN_PREDEFINED='H5_HAVE_DIRECT H5_HAVE_LIBHDFS H5_HAVE_MAP_API H5_HAVE_PARALLEL H5_HAVE_ROS3_VFD H5_DOXYGEN H5_HAVE_SUBFILING_VFD H5_HAVE_IOC_VFD H5_HAVE_MIRROR_VFD'
|
|
DOXYGEN_WARN_AS_ERROR=${HDF5_DOXY_WARNINGS}
|
|
|
|
DX_INIT_DOXYGEN([HDF5], [./doxygen/Doxyfile], [hdf5lib_docs])
|
|
fi
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Create libtool. If shared/static libraries are going to be enabled
|
|
## or disabled, it should happen before these macros.
|
|
LT_PREREQ([2.2])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## dlopen - This will use an improved version of libtool
|
|
## win32-dll - This will build clean dlls on win32 platforms.
|
|
LT_INIT([dlopen,win32-dll])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if we should install only statically linked executables.
|
|
## This check needs to occur after libtool is initialized because
|
|
## we check a libtool cache value and may issue a warning based
|
|
## on its result.
|
|
AC_SUBST([STATIC_EXEC])
|
|
|
|
## Default is no
|
|
STATIC_EXEC=no
|
|
|
|
AC_MSG_CHECKING([if we should install only statically linked executables])
|
|
AC_ARG_ENABLE([static_exec],
|
|
[AS_HELP_STRING([--enable-static-exec],
|
|
[Install only statically linked executables
|
|
[default=no]])],
|
|
[STATIC_EXEC=$enableval])
|
|
AC_MSG_RESULT([$STATIC_EXEC])
|
|
|
|
if test "X$STATIC_EXEC" = "Xyes"; then
|
|
## Issue a warning if -static flag is not supported.
|
|
if test "X$lt_cv_prog_compiler_static_works" = "Xno"; then
|
|
AC_MSG_WARN([-static flag not supported on this system; executable won't statically link shared system libraries.])
|
|
LT_STATIC_EXEC=""
|
|
else
|
|
LT_STATIC_EXEC="-all-static"
|
|
fi
|
|
else
|
|
LT_STATIC_EXEC=""
|
|
fi
|
|
AM_CONDITIONAL([USE_PLUGINS_CONDITIONAL], [test "X$LT_STATIC_EXEC" = X])
|
|
|
|
AC_SUBST([LT_STATIC_EXEC])
|
|
|
|
## Fix up the INSTALL macro if it's a relative path. We want the
|
|
## full-path to the binary instead.
|
|
case "$INSTALL" in
|
|
*install-sh*)
|
|
INSTALL='\${top_srcdir}/bin/install-sh -c'
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Some users have reported problems with libtool's use of '-Wl,-rpath' to
|
|
## link shared libraries in nondefault directories. Allow users to
|
|
## disable embedding the rpath information in the executables and to
|
|
## instead solely rely on the information in LD_LIBRARY_PATH.
|
|
AC_MSG_CHECKING([if -Wl,-rpath should be used to link shared libs in nondefault directories])
|
|
AC_ARG_ENABLE([sharedlib-rpath],
|
|
[AS_HELP_STRING([--disable-sharedlib-rpath],
|
|
[Disable use of the '=Wl,-rpath' linker option])],
|
|
[RPATH=$enableval])
|
|
|
|
case "X-$RPATH" in
|
|
X-no)
|
|
AC_MSG_RESULT([no])
|
|
runpath_var=
|
|
hardcode_libdir_flag_spec=
|
|
hardcode_libdir_flag_spec_ld=
|
|
hardcode_into_libs=no
|
|
;;
|
|
X-|X-yes)
|
|
AC_MSG_RESULT([yes])
|
|
;;
|
|
*)
|
|
AC_MSG_RESULT([error])
|
|
AC_MSG_ERROR([\'$enableval\' is not a valid rpath type])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check for system libraries. "dl" stands for dynamically loaded library
|
|
##
|
|
AC_CHECK_LIB([m], [ceil])
|
|
AC_CHECK_LIB([dl], [dlopen])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check for system header files.
|
|
##
|
|
|
|
## Unix
|
|
AC_CHECK_HEADERS([dirent.h features.h pwd.h unistd.h])
|
|
AC_CHECK_HEADERS([sys/file.h sys/ioctl.h sys/resource.h])
|
|
AC_CHECK_HEADERS([sys/stat.h sys/time.h sys/types.h])
|
|
|
|
## Darwin
|
|
AC_SUBST([H5_IS_DARWIN])
|
|
H5_IS_DARWIN="no"
|
|
case $host_os in
|
|
darwin*)
|
|
AC_DEFINE([HAVE_DARWIN], [1], [Define if Darwin or Mac OS X])
|
|
H5_IS_DARWIN="yes"
|
|
;;
|
|
esac
|
|
|
|
## Windows
|
|
case "$host_os" in
|
|
*mingw*)
|
|
# The Winsock library
|
|
AC_CHECK_LIB([ws2_32], [htons])
|
|
;;
|
|
esac
|
|
|
|
# Mirror VFD networking
|
|
AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h sys/socket.h])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Some platforms require that all symbols are resolved when a library
|
|
## is linked. We can use the -no-undefined flag to tell libtool that
|
|
## it will be able to build shared libraries on these architectures,
|
|
## as it will not do so by default.
|
|
##
|
|
if test "X${enable_shared}" = "Xyes"; then
|
|
AC_MSG_CHECKING([if libtool needs -no-undefined flag to build shared libraries])
|
|
case "$host_os" in
|
|
*cygwin*|*mingw*|*aix*)
|
|
## Add in the -no-undefined flag to LDFLAGS for libtool
|
|
AC_MSG_RESULT([yes])
|
|
H5_LDFLAGS="$H5_LDFLAGS -no-undefined"
|
|
;;
|
|
*)
|
|
## Don't add in anything.
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Use the macro _AC_SYS_LARGEFILE_MACRO_VALUE to test defines
|
|
## that might need to be set for largefile support to behave
|
|
## correctly. This macro is defined in acsite.m4 and overrides
|
|
## the version provided by Autoconf (as of v2.65). The custom
|
|
## macro additionally adds the appropriate defines to AM_CPPFLAGS
|
|
## so that later configure checks have them visible.
|
|
##
|
|
## NOTE: AC_SYS_LARGEFILE is buggy on some platforms and will
|
|
## NOT set the defines, even though it correctly detects
|
|
## the necessary values. These macro hacks are annoying
|
|
## but unfortunately will be necessary until we decide
|
|
## to drop support for platforms that don't have 64-bit
|
|
## off_t defaults.
|
|
|
|
## Check for _FILE_OFFSET_BITS
|
|
_AC_SYS_LARGEFILE_MACRO_VALUE([_FILE_OFFSET_BITS], [64],
|
|
[ac_cv_sys_file_offset_bits],
|
|
[Number of bits in a file offset, on hosts where this is settable.],
|
|
[_AC_SYS_LARGEFILE_TEST_INCLUDES])
|
|
|
|
## Check for _LARGE_FILES
|
|
if test "$ac_cv_sys_file_offset_bits" = unknown; then
|
|
_AC_SYS_LARGEFILE_MACRO_VALUE([_LARGE_FILES], [1],
|
|
[ac_cv_sys_large_files],
|
|
[Define for large files, on AIX-style hosts.],
|
|
[_AC_SYS_LARGEFILE_TEST_INCLUDES])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Add necessary defines for Linux Systems.
|
|
##
|
|
case "$host_os" in
|
|
*linux*)
|
|
## Add POSIX support on Linux systems, so <features.h> defines
|
|
## __USE_POSIX, which is required to get the prototype for fdopen
|
|
## defined correctly in <stdio.h>.
|
|
##
|
|
## This flag was removed from h5cc as of 2009-10-17 when it was found
|
|
## that the flag broke compiling netCDF-4 code with h5cc, but kept in
|
|
## H5_CPPFLAGS because fdopen and HDfdopen fail without it. HDfdopen
|
|
## is used only by H5_debug_mask which is used only when debugging in
|
|
## H5_init_library (all in H5.c). When the flag was removed this was
|
|
## the only compile failure noted.
|
|
##
|
|
## This was originally defined as _POSIX_SOURCE which was updated to
|
|
## _POSIX_C_SOURCE=199506L to expose a greater amount of POSIX
|
|
## functionality so clock_gettime and CLOCK_MONOTONIC are defined
|
|
## correctly. This was later updated to 200112L so that
|
|
## posix_memalign() is visible for the direct VFD code on Linux
|
|
## systems. Even later, this was changed to 200809L to support
|
|
## pread/pwrite in VFDs.
|
|
##
|
|
## POSIX feature information can be found in the gcc manual at:
|
|
## http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html
|
|
H5_CPPFLAGS="-D_POSIX_C_SOURCE=200809L $H5_CPPFLAGS"
|
|
|
|
## Need to add this so that O_DIRECT is visible for the direct
|
|
## VFD on Linux systems.
|
|
H5_CPPFLAGS="-D_GNU_SOURCE $H5_CPPFLAGS"
|
|
;;
|
|
*mingw*)
|
|
HDF_MINGW="yes"
|
|
AC_DEFINE([HAVE_WINDOWS], [1], [Define if this is a Windows machine])
|
|
AC_DEFINE([HAVE_WIN32_API], [1], [Define if on the Windows platform using the Win32 API])
|
|
AC_DEFINE([HAVE_MINGW], [1], [Define if using MinGW])
|
|
H5_CPPFLAGS="-D_GNU_SOURCE -D__USE_MINGW_ANSI_STDIO $H5_CPPFLAGS"
|
|
;;
|
|
*cygwin*)
|
|
AC_DEFINE([HAVE_CYGWIN], [1], [Define if using Cygwin])
|
|
H5_CPPFLAGS="-D_GNU_SOURCE $H5_CPPFLAGS"
|
|
;;
|
|
esac
|
|
|
|
## Need to add the AM_ and H5_ into CFLAGS/CPPFLAGS to make them visible
|
|
## for configure checks.
|
|
## Note: Both will be restored by the end of configure.
|
|
CPPFLAGS="$H5_CPPFLAGS $AM_CPPFLAGS $CPPFLAGS"
|
|
CFLAGS="$H5_CFLAGS $AM_CFLAGS $CFLAGS"
|
|
|
|
## Checkpoint the cache
|
|
AC_CACHE_SAVE
|
|
|
|
AC_CHECK_SIZEOF( [int8_t])
|
|
AC_CHECK_SIZEOF( [uint8_t])
|
|
AC_CHECK_SIZEOF( [int_least8_t])
|
|
AC_CHECK_SIZEOF( [uint_least8_t])
|
|
AC_CHECK_SIZEOF( [int_fast8_t])
|
|
AC_CHECK_SIZEOF( [uint_fast8_t])
|
|
|
|
AC_CHECK_SIZEOF( [int16_t])
|
|
AC_CHECK_SIZEOF( [uint16_t])
|
|
AC_CHECK_SIZEOF( [int_least16_t])
|
|
AC_CHECK_SIZEOF([uint_least16_t])
|
|
AC_CHECK_SIZEOF( [int_fast16_t])
|
|
AC_CHECK_SIZEOF( [uint_fast16_t])
|
|
|
|
AC_CHECK_SIZEOF( [int32_t])
|
|
AC_CHECK_SIZEOF( [uint32_t])
|
|
AC_CHECK_SIZEOF( [int_least32_t])
|
|
AC_CHECK_SIZEOF([uint_least32_t])
|
|
AC_CHECK_SIZEOF( [int_fast32_t])
|
|
AC_CHECK_SIZEOF( [uint_fast32_t])
|
|
|
|
AC_CHECK_SIZEOF( [int64_t])
|
|
AC_CHECK_SIZEOF( [uint64_t])
|
|
AC_CHECK_SIZEOF( [int_least64_t])
|
|
AC_CHECK_SIZEOF([uint_least64_t])
|
|
AC_CHECK_SIZEOF( [int_fast64_t])
|
|
AC_CHECK_SIZEOF( [uint_fast64_t])
|
|
|
|
AC_CHECK_SIZEOF([bool], [], [#include <stdbool.h>])
|
|
AC_CHECK_SIZEOF([off_t])
|
|
AC_CHECK_SIZEOF([ptrdiff_t])
|
|
AC_CHECK_SIZEOF([size_t])
|
|
AC_CHECK_SIZEOF([ssize_t])
|
|
AC_CHECK_SIZEOF([time_t], [], [#include <time.h>])
|
|
|
|
## Checkpoint the cache
|
|
AC_CACHE_SAVE
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if the dev_t type is a scalar type (must come after the check for
|
|
## sys/types.h)
|
|
AC_MSG_CHECKING([if dev_t is scalar])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
#ifdef HAVE_SYS_TYPES_H
|
|
#include <sys/types.h>
|
|
#endif
|
|
]],
|
|
[[dev_t d1, d2; if(d1==d2) return 0;]])],
|
|
[AC_DEFINE([DEV_T_IS_SCALAR], [1],
|
|
[Define if dev_t is a scalar])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Fake --with-xxx option to allow us to create a help message for the
|
|
## following --with-xxx options which can take either a =DIR or =INC,LIB
|
|
## specifier.
|
|
##
|
|
AC_ARG_WITH([fnord],
|
|
[
|
|
For the following --with-xxx options, you can specify where the header
|
|
files and libraries are in two different ways:
|
|
|
|
--with-xxx=INC,LIB - Specify individually the include directory and
|
|
library directory separated by a comma
|
|
--with-xxx=DIR - Specify only the directory which contains the
|
|
include/ and lib/ subdirectories
|
|
])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Make the external filters list available to *.in files
|
|
## At this point it's unset (no external filters by default) but it
|
|
## will be filled in during the deflate/zlib and szip/libaec processing
|
|
## below.
|
|
##
|
|
AC_SUBST([EXTERNAL_FILTERS])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Is the GNU zlib present? It has a header file `zlib.h' and a library
|
|
## `-lz' and their locations might be specified with the `--with-zlib'
|
|
## command-line switch. The value is an include path and/or a library path.
|
|
## If the library path is specified then it must be preceded by a comma.
|
|
##
|
|
AC_SUBST([USE_FILTER_DEFLATE]) USE_FILTER_DEFLATE="no"
|
|
AC_ARG_WITH([zlib],
|
|
[AS_HELP_STRING([--with-zlib=DIR],
|
|
[Use zlib library for external deflate I/O
|
|
filter [default=yes]])],,
|
|
[withval=yes])
|
|
|
|
case "X-$withval" in
|
|
X-yes)
|
|
HAVE_ZLIB="yes"
|
|
AC_CHECK_HEADERS([zlib.h], [HAVE_ZLIB_H="yes"], [unset HAVE_ZLIB])
|
|
if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes"; then
|
|
AC_CHECK_LIB([z], [compress2],, [unset HAVE_ZLIB])
|
|
fi
|
|
if test -z "$HAVE_ZLIB"; then
|
|
if test -n "$HDF5_CONFIG_ABORT"; then
|
|
AC_MSG_ERROR([couldn't find zlib library])
|
|
fi
|
|
else
|
|
AC_CHECK_FUNC([compress2], [HAVE_COMPRESS2="yes"])
|
|
fi
|
|
;;
|
|
X-|X-no|X-none)
|
|
HAVE_ZLIB="no"
|
|
AC_MSG_CHECKING([for 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
|
|
|
|
saved_CPPFLAGS="$CPPFLAGS"
|
|
saved_AM_CPPFLAGS="$AM_CPPFLAGS"
|
|
saved_LDFLAGS="$LDFLAGS"
|
|
saved_AM_LDFLAGS="$AM_LDFLAGS"
|
|
|
|
if test -n "$zlib_inc"; then
|
|
CPPFLAGS="$CPPFLAGS -I$zlib_inc"
|
|
AM_CPPFLAGS="$AM_CPPFLAGS -I$zlib_inc"
|
|
fi
|
|
|
|
AC_CHECK_HEADERS([zlib.h],
|
|
[HAVE_ZLIB_H="yes"],
|
|
[CPPFLAGS="$saved_CPPFLAGS"; AM_CPPFLAGS="$saved_AM_CPPFLAGS"] [unset HAVE_ZLIB])
|
|
|
|
if test -n "$zlib_lib"; then
|
|
LDFLAGS="$LDFLAGS -L$zlib_lib"
|
|
AM_LDFLAGS="$AM_LDFLAGS -L$zlib_lib"
|
|
fi
|
|
|
|
if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes"; then
|
|
AC_CHECK_LIB([z], [compress2],,
|
|
[LDFLAGS="$saved_LDFLAGS"; AM_LDFLAGS="$saved_AM_LDFLAGS"; unset HAVE_ZLIB])
|
|
fi
|
|
|
|
if test -z "$HAVE_ZLIB"; then
|
|
if test -n "$HDF5_CONFIG_ABORT"; then
|
|
AC_MSG_ERROR([couldn't find zlib library])
|
|
fi
|
|
else
|
|
AC_CHECK_FUNC([compress2], [HAVE_COMPRESS2="yes"])
|
|
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 (zlib) filter is enabled])
|
|
USE_FILTER_DEFLATE="yes"
|
|
|
|
## Add "deflate" to external filter list
|
|
if test "X$EXTERNAL_FILTERS" != "X"; then
|
|
EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
|
|
fi
|
|
EXTERNAL_FILTERS="${EXTERNAL_FILTERS}deflate(zlib)"
|
|
fi
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Is the szlib present? It has a header file `szlib.h' and a library
|
|
## `-lsz' and their locations might be specified with the `--with-szlib'
|
|
## command-line switch. The value is an include path and/or a library path.
|
|
## If the library path is specified then it must be preceded by a comma.
|
|
##
|
|
## libaec also implements Space Data System Standard 121.0-B-2 and has
|
|
## an szip compatibility header. Since the AEC library is BSD licensed
|
|
## for both encoding and decoding, we now build with the filter enabled
|
|
## by default when the library is found.
|
|
##
|
|
AC_SUBST([LL_PATH])
|
|
AC_SUBST([USE_FILTER_SZIP]) USE_FILTER_SZIP="no"
|
|
AC_ARG_WITH([szlib],
|
|
[AS_HELP_STRING([--with-szlib=DIR],
|
|
[Use szlib library for external szlib I/O
|
|
filter [default=yes]])],,
|
|
[withval=yes])
|
|
|
|
case "X-$withval" in
|
|
X-yes)
|
|
HAVE_SZLIB="yes"
|
|
AC_CHECK_HEADERS([szlib.h], [HAVE_SZLIB_H="yes"], [unset HAVE_SZLIB])
|
|
if test "x$HAVE_SZLIB" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then
|
|
AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],, [unset HAVE_SZLIB])
|
|
fi
|
|
if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
|
|
AC_MSG_ERROR([couldn't find szlib library])
|
|
fi
|
|
;;
|
|
X-|X-no|X-none)
|
|
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
|
|
|
|
saved_CPPFLAGS="$CPPFLAGS"
|
|
saved_AM_CPPFLAGS="$AM_CPPFLAGS"
|
|
saved_LDFLAGS="$LDFLAGS"
|
|
saved_AM_LDFLAGS="$AM_LDFLAGS"
|
|
|
|
if test -n "$szlib_inc"; then
|
|
CPPFLAGS="$CPPFLAGS -I$szlib_inc"
|
|
AM_CPPFLAGS="$AM_CPPFLAGS -I$szlib_inc"
|
|
fi
|
|
|
|
if test -n "$szlib_lib"; then
|
|
LDFLAGS="$LDFLAGS -L$szlib_lib"
|
|
AM_LDFLAGS="$AM_LDFLAGS -L$szlib_lib"
|
|
fi
|
|
|
|
if test "x$HAVE_SZLIB" = "xyes"; then
|
|
AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],,
|
|
[CPPFLAGS="$saved_CPPFLAGS"; AM_CPPFLAGS="$saved_AM_CPPFLAGS"; LDFLAGS="$saved_LDFLAGS"; AM_LDFLAGS="$saved_AM_LDFLAGS"; unset HAVE_SZLIB])
|
|
if test -n "$HAVE_SZLIB"; then
|
|
AC_CHECK_HEADERS([szlib.h],
|
|
[HAVE_SZLIB_H="yes"],
|
|
[CPPFLAGS="$saved_CPPFLAGS"; AM_CPPFLAGS="$saved_AM_CPPFLAGS"] [unset HAVE_SZLIB])
|
|
else
|
|
AC_MSG_RESULT([Using SZ_BufftoBuffCompress from libsz in $szlib_lib failed. Szip not enabled.])
|
|
fi
|
|
fi
|
|
|
|
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
|
|
## SZLIB library is available. Check if it can encode
|
|
AC_MSG_CHECKING([for szlib encoder])
|
|
|
|
## Set LD_LIBRARY_PATH so encoder test can find the library and run.
|
|
## Also add LL_PATH substitution to Makefiles so they can use the
|
|
## path as well, for testing examples.
|
|
if test -z "$LD_LIBRARY_PATH"; then
|
|
export LD_LIBRARY_PATH="$szlib_lib"
|
|
else
|
|
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$szlib_lib"
|
|
fi
|
|
|
|
LL_PATH="$LD_LIBRARY_PATH"
|
|
|
|
# CROSS-COMPILING: Assume 'yes' now that libaec is so prevalent
|
|
AC_CACHE_VAL([hdf5_cv_szlib_can_encode],
|
|
[AC_RUN_IFELSE(
|
|
[AC_LANG_PROGRAM([
|
|
#include "szlib.h"
|
|
],[[
|
|
/* SZ_encoder_enabled returns 1 if encoder is present */
|
|
return SZ_encoder_enabled() != 1;
|
|
]])]
|
|
, [hdf5_cv_szlib_can_encode=yes], [hdf5_cv_szlib_can_encode=no], [hdf5_cv_szlib_can_encode=yes])]
|
|
)
|
|
|
|
AC_DEFINE([HAVE_FILTER_SZIP], [1],
|
|
[Define if support for szip filter is enabled])
|
|
USE_FILTER_SZIP="yes"
|
|
|
|
if test ${hdf5_cv_szlib_can_encode} = "yes"; then
|
|
AC_MSG_RESULT([yes])
|
|
fi
|
|
if test ${hdf5_cv_szlib_can_encode} = "no"; then
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
## Add "szip" to external filter list
|
|
if test ${hdf5_cv_szlib_can_encode} = "yes"; then
|
|
if test "X$EXTERNAL_FILTERS" != "X"; then
|
|
EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
|
|
fi
|
|
EXTERNAL_FILTERS="${EXTERNAL_FILTERS}szip(encoder)"
|
|
fi
|
|
if test ${hdf5_cv_szlib_can_encode} = "no"; then
|
|
if test "X$EXTERNAL_FILTERS" != "X"; then
|
|
EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
|
|
fi
|
|
EXTERNAL_FILTERS="${EXTERNAL_FILTERS}szip(no encoder)"
|
|
fi
|
|
fi
|
|
|
|
AM_CONDITIONAL([BUILD_SHARED_SZIP_CONDITIONAL], [test "X$USE_FILTER_SZIP" = "Xyes" && test "X$LL_PATH" != "X"])
|
|
|
|
## Checkpoint the cache
|
|
AC_CACHE_SAVE
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Enable library-internal concurrency capabilities (threads, atomic operations,
|
|
## mutual exclusion, condition variables, and thread-specific storage).
|
|
##
|
|
## Note, this is required for enabling the threadsafe API feature, but does
|
|
## _not_ enable it, or provide threadsafety to applications calling HDF5 API
|
|
## routines. *Both* --enable-threads _and_ --enable-threadsafe must be provided
|
|
## to enable threadsafety to applications.
|
|
##
|
|
## C11 threads (and atomics) are preferred and if available, will be chosen
|
|
## over pthreads or Windows threading.
|
|
##
|
|
## We usually pick up the system Pthreads library, so --with-pthread
|
|
## is only necessary if you are using a custom Pthreads library or if
|
|
## your OS hides its implementation in an unusual location.
|
|
##
|
|
## On Windows, we use Win32 threads and no special configuration should be
|
|
## required to use them.
|
|
##
|
|
AC_SUBST([THREADS])
|
|
|
|
## Default is to attempt to enable thread support
|
|
if test "X-$THREADS" = X- ; then
|
|
THREADS=yes
|
|
fi
|
|
|
|
|
|
AC_ARG_ENABLE([threads],
|
|
[AS_HELP_STRING([--enable-threads],
|
|
[Enable threads capability. A prerequisite for enabling threadsafe API calls.
|
|
[default=yes]
|
|
])],
|
|
[THREADS=$enableval])
|
|
|
|
if test "X$THREADS" = "Xyes"; then
|
|
## Allow other thread packages instead of Pthreads
|
|
allow_pthreads="yes"
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Is the Pthreads library present? It has a header file `pthread.h' and
|
|
## a library `-lpthread' and their locations might be specified with the
|
|
## `--with-pthread' command-line switch. The value is an include path
|
|
## and/or a library path. If the library path is specified then it must
|
|
## be preceded by a comma.
|
|
##
|
|
## The default is to use Pthreads when building with the Autotools, unless
|
|
## the compiler has C11 threads or we're building w/ MinGW.
|
|
##
|
|
## Currently C11 threads will take priority over Pthreads and Win32 threads
|
|
##
|
|
AC_SUBST([HAVE_PTHREAD]) HAVE_PTHREAD=yes
|
|
AC_ARG_WITH([pthread],
|
|
[AS_HELP_STRING([--with-pthread=DIR],
|
|
[Specify alternative path to Pthreads library when
|
|
thread-safe capability is built. Set this to
|
|
'yes' or the location of Pthreads when building
|
|
with a compiler that has C11 threads or
|
|
with MinGW and you would rather use Pthreads
|
|
than C11 or Win32 threads.])],,
|
|
[withval=default])
|
|
|
|
## Check for C11 threads, we want to use C11 threads unless the builder
|
|
## explicitly specifies --with-pthreads=(yes | path(s))
|
|
AC_SUBST([HAVE_C11_THREADS]) HAVE_C11_THREADS=no
|
|
# Comment out check for C11 threads for now, since it conflicts with the
|
|
# current --std=c99 compile flags at configuration time. When we switch to
|
|
# --std=c11, this can be uncommented.
|
|
#AC_CHECK_HEADERS([threads.h],[HAVE_THREADS_H="yes"],[HAVE_THREADS_H="no"])
|
|
if test "x$HAVE_THREADS_H" = "xyes"; then
|
|
# Default or no --> C11 threads
|
|
if test "$withval" = "default" -o "$withval" = "no" ; then
|
|
allow_pthreads="no"
|
|
unset HAVE_PTHREAD
|
|
AC_DEFINE([HAVE_C11_THREADS], [yes], [Define to yes if you have C11 threads])
|
|
fi
|
|
fi
|
|
|
|
## If we're on MinGW, we want to use Win32 threads unless the builder
|
|
## explicitly specifies --with-pthreads=(yes | path(s))
|
|
AC_SUBST([HAVE_WIN_THREADS]) HAVE_WIN_THREADS=no
|
|
if test -n "$HDF_MINGW" -a "$HDF_MINGW" = "yes" ; then
|
|
# Default or no --> Win32 threads
|
|
if test "$withval" = "default" -o "$withval" = "no" ; then
|
|
allow_pthreads="no"
|
|
unset HAVE_PTHREAD
|
|
AC_DEFINE([HAVE_WIN_THREADS], [yes], [Define to yes if you have win32 threads])
|
|
fi
|
|
fi
|
|
|
|
if test "$allow_pthreads" = "yes" ; then
|
|
case "$withval" in
|
|
default | yes)
|
|
AC_CHECK_HEADERS([pthread.h],, [unset HAVE_PTHREAD])
|
|
if test "x$HAVE_PTHREAD" = "xyes"; then
|
|
AC_CHECK_LIB([pthread], [pthread_self],, [unset HAVE_PTHREAD])
|
|
fi
|
|
;;
|
|
no)
|
|
AC_MSG_ERROR([Must use Pthreads with thread safety on non-Windows systems])
|
|
;;
|
|
*)
|
|
case "$withval" in
|
|
*,*)
|
|
pthread_inc="`echo $withval | cut -f1 -d,`"
|
|
pthread_lib="`echo $withval | cut -f2 -d, -s`"
|
|
;;
|
|
*)
|
|
if test -n "$withval"; then
|
|
pthread_inc="$withval/include"
|
|
pthread_lib="$withval/lib"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
if test -n "$pthread_inc"; then
|
|
saved_CPPFLAGS="$CPPFLAGS"
|
|
saved_AM_CPPFLAGS="$AM_CPPFLAGS"
|
|
CPPFLAGS="$CPPFLAGS -I$pthread_inc"
|
|
AM_CPPFLAGS="$AM_CPPFLAGS -I$pthread_inc"
|
|
AC_CHECK_HEADERS([pthread.h],, [CPPFLAGS="$saved_CPPFLAGS"; AM_CPPFLAGS="$saved_AM_CPPFLAGS"; unset HAVE_PTHREAD])
|
|
else
|
|
AC_CHECK_HEADERS([pthread.h],, [unset HAVE_PTHREAD])
|
|
fi
|
|
|
|
if test "x$HAVE_PTHREAD" = "xyes"; then
|
|
if test -n "$pthread_lib"; then
|
|
saved_LDFLAGS="$LDFLAGS"
|
|
saved_AM_LDFLAGS="$AM_LDFLAGS"
|
|
LDFLAGS="$LDFLAGS -L$pthread_lib"
|
|
AM_LDFLAGS="$AM_LDFLAGS -L$pthread_lib"
|
|
AC_CHECK_LIB([pthread], [pthread_self],,
|
|
[LDFLAGS="$saved_LDFLAGS"; AM_LDFLAGS="$saved_AM_LDFLAGS"; unset HAVE_PTHREAD])
|
|
else
|
|
AC_CHECK_LIB([pthread], [pthread_self],, [unset HAVE_PTHREAD])
|
|
fi
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
## If using Pthreads, check for barrier routines
|
|
if test "x$HAVE_PTHREAD" = "xyes"; then
|
|
AC_CHECK_DECL([pthread_barrier_init],
|
|
[AC_DEFINE([HAVE_PTHREAD_BARRIER], [1],
|
|
[Define if has pthread_barrier_*() routines])],
|
|
[],
|
|
[[#include <pthread.h>]])
|
|
fi
|
|
|
|
fi # end of Pthreads checks
|
|
|
|
## Check for C11 atomics
|
|
AC_CHECK_HEADERS([stdatomic.h],[HAVE_STDATOMIC_H="yes"],[HAVE_STDATOMIC_H="no"])
|
|
|
|
fi # end of threads processing
|
|
|
|
# Check to verify that a threading package was found
|
|
AC_MSG_CHECKING([for threads support])
|
|
if test "x$HAVE_PTHREAD" = "xno" -a "x$HAVE_WIN_THREADS" = "xno" -a "x$HAVE_C11_THREADS" = "xno"; then
|
|
THREADS=no
|
|
fi
|
|
|
|
case "X-$THREADS" in
|
|
X-no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
X-yes)
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE([HAVE_THREADS], [1], [Define if we have internal threads support])
|
|
;;
|
|
*)
|
|
AC_MSG_RESULT([error])
|
|
AC_MSG_ERROR([\'$enableval\' is not a valid threads setting])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Enable thread-safe version of library (requires threads support)
|
|
##
|
|
AC_SUBST([THREADSAFE])
|
|
|
|
## Default is no thread-safety
|
|
THREADSAFE=no
|
|
|
|
AC_MSG_CHECKING([for thread safe support])
|
|
AC_ARG_ENABLE([threadsafe],
|
|
[AS_HELP_STRING([--enable-threadsafe],
|
|
[Enable thread-safe capability. Not compatible with the high-level library, Fortran, or C++ wrappers.
|
|
[default=no]])],
|
|
[THREADSAFE=$enableval])
|
|
|
|
## The high-level, C++, Fortran and Java interfaces are not compatible
|
|
## with the thread-safety option because the lock is not hoisted
|
|
## into the higher-level API calls.
|
|
|
|
## --enable-threadsafe is incompatible with --enable-hl unless
|
|
## --enable-unsupported has been specified on the configure line.
|
|
##
|
|
## Note that the high-level library is enabled by default so most
|
|
## users will have to add --disable-hl to the configure options.
|
|
if test "X${ALLOW_UNSUPPORTED}" != "Xyes"; then
|
|
if test "X${HDF5_HL}" = "Xyes" -a "X${enable_threadsafe}" = "Xyes"; then
|
|
AC_MSG_ERROR([The thread-safe library is incompatible with the high-level library. --disable-hl can be used to prevent building the high-level library (recommended). Alternatively, --enable-unsupported will allow building the high-level library, though this configuration is not supported by The HDF Group.])
|
|
fi
|
|
fi
|
|
|
|
## The --enable-threadsafe flag is not compatible with --enable-cxx.
|
|
## If the user tried to specify both flags, throw an error, unless
|
|
## they also provided the --enable-unsupported flag.
|
|
if test "X${ALLOW_UNSUPPORTED}" != "Xyes"; then
|
|
if test "X${HDF_CXX}" = "Xyes" -a "X${enable_threadsafe}" = "Xyes"; then
|
|
AC_MSG_ERROR([--enable-cxx and --enable-threadsafe flags are incompatible. Use --enable-unsupported to override this error.])
|
|
fi
|
|
fi
|
|
|
|
## --enable-threadsafe is also incompatible with --enable-fortran unless
|
|
## --enable-unsupported has been specified on the configure line.
|
|
if test "X${ALLOW_UNSUPPORTED}" != "Xyes"; then
|
|
if test "X${HDF_FORTRAN}" = "Xyes" -a "X${enable_threadsafe}" = "Xyes"; then
|
|
AC_MSG_ERROR([--enable-fortran and --enable-threadsafe flags are incompatible. Use --enable-unsupported to override this error.])
|
|
fi
|
|
fi
|
|
|
|
## --enable-threadsafe is also incompatible with --enable-java unless
|
|
## --enable-unsupported has been specified on the configure line.
|
|
if test "X${ALLOW_UNSUPPORTED}" != "Xyes"; then
|
|
if test "X${HDF_JAVA}" = "Xyes" -a "X${enable_threadsafe}" = "Xyes"; then
|
|
AC_MSG_ERROR([--enable-java and --enable-threadsafe flags are incompatible. Use --enable-unsupported to override this error.])
|
|
fi
|
|
fi
|
|
|
|
if test "X${enable_threadsafe}" = "Xyes" -a "X$THREADS" = "Xno"; then
|
|
AC_MSG_ERROR([--enable-threadsafe given, but no threading package found.])
|
|
fi
|
|
|
|
case "X-$THREADSAFE" in
|
|
X-|X-no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
X-yes)
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE([HAVE_THREADSAFE], [1], [Define if we have thread safe support])
|
|
;;
|
|
*)
|
|
AC_MSG_RESULT([error])
|
|
AC_MSG_ERROR([\'$enableval\' is not a valid threadsafe type])
|
|
;;
|
|
esac
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check for MONOTONIC_TIMER support (used in clock_gettime). This has
|
|
## to be done after any POSIX defines to ensure that the test gets
|
|
## the correct POSIX level on linux.
|
|
AC_CHECK_DECL([CLOCK_MONOTONIC],[have_clock_monotonic="yes"],[have_clock_monotonic="no"],[[#include <time.h>]])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## How does one figure out the local time zone? Anyone know of a
|
|
## Posix way to do this?
|
|
##
|
|
|
|
## First check if `struct tm' has a `tm_gmtoff' member.
|
|
AC_MSG_CHECKING([for tm_gmtoff in struct tm])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
#include <sys/time.h>
|
|
#include <time.h>
|
|
]], [[struct tm tm; tm.tm_gmtoff=0;]])],
|
|
[AC_DEFINE([HAVE_TM_GMTOFF], [1],
|
|
[Define if tm_gmtoff is a member of struct tm])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])])
|
|
|
|
## Check whether the global variable `timezone' is defined.
|
|
AC_MSG_CHECKING([for global timezone variable])
|
|
|
|
case "$host_os" in
|
|
*cygwin*)
|
|
AC_MSG_RESULT([disabled in CYGWIN])
|
|
;;
|
|
*)
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
#include <sys/time.h>
|
|
#include <time.h>]], [[timezone=0;]])],
|
|
[AC_DEFINE([HAVE_TIMEZONE], [1],
|
|
[Define if timezone is a global variable])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])])
|
|
;;
|
|
esac
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Does the struct stat have the st_blocks field? This field is not POSIX.
|
|
##
|
|
AC_MSG_CHECKING([for st_blocks in struct stat])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
#include <sys/stat.h>]],[[struct stat sb; sb.st_blocks=0;]])],
|
|
[AC_DEFINE([HAVE_STAT_ST_BLOCKS], [1],
|
|
[Define if struct stat has the st_blocks field])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## How do we figure out the width of a tty in characters?
|
|
##
|
|
AC_CHECK_FUNCS([_getvideoconfig gettextinfo])
|
|
case "$host_os" in
|
|
*cygwin*)
|
|
;;
|
|
*)
|
|
AC_CHECK_FUNCS([GetConsoleScreenBufferInfo])
|
|
;;
|
|
esac
|
|
AC_CHECK_FUNCS([_scrsize ioctl])
|
|
|
|
AC_MSG_CHECKING([for struct videoconfig])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[struct videoconfig w; w.numtextcols=0;]])],
|
|
[AC_DEFINE([HAVE_STRUCT_VIDEOCONFIG], [1],
|
|
[Define if struct videoconfig is defined])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])])
|
|
|
|
AC_MSG_CHECKING([for struct text_info])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[struct text_info w; w.screenwidth=0;]])],
|
|
[AC_DEFINE([HAVE_STRUCT_TEXT_INFO], [1],
|
|
[Define if struct text_info is defined])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])])
|
|
|
|
AC_MSG_CHECKING([for TIOCGWINSZ])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
#include <sys/ioctl.h>
|
|
]],[[int w=TIOCGWINSZ;]])],
|
|
[AC_DEFINE([HAVE_TIOCGWINSZ], [1],
|
|
[Define if the ioctl TIOGWINSZ is defined])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])])
|
|
|
|
AC_MSG_CHECKING([for TIOCGETD])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
#include <sys/ioctl.h>
|
|
]],[[int w=TIOCGETD;]])],
|
|
[AC_DEFINE([HAVE_TIOCGETD], [1],
|
|
[Define if the ioctl TIOCGETD is defined])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])])
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check for functions.
|
|
##
|
|
## NOTE: clock_gettime may require linking to the rt or posix4 library
|
|
## so we'll search for it before calling AC_CHECK_FUNCS.
|
|
AC_SEARCH_LIBS([clock_gettime], [rt posix4])
|
|
AC_CHECK_FUNCS([asprintf clock_gettime fcntl flock fork])
|
|
AC_CHECK_FUNCS([gethostname getrusage gettimeofday])
|
|
AC_CHECK_FUNCS([strcasestr strdup symlink])
|
|
AC_CHECK_FUNCS([tmpfile vasprintf waitpid])
|
|
|
|
case "$host_os" in
|
|
*mingw*)
|
|
# alarm(2) support is spotty in MinGW, so assume it doesn't exist
|
|
#
|
|
# https://lists.gnu.org/archive/html/bug-gnulib/2013-03/msg00040.html
|
|
;;
|
|
*)
|
|
AC_CHECK_FUNCS([alarm])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check compiler characteristics
|
|
##
|
|
AC_MSG_CHECKING([for __attribute__ extension])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[int __attribute__((unused)) x]])],
|
|
[AC_DEFINE([HAVE_ATTRIBUTE], [1],
|
|
[Define if the __attribute__(()) extension is present])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])])
|
|
|
|
AC_MSG_CHECKING([if compiler supports the __builtin_expect() extension])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[void *ptr = (void*) 0;
|
|
if (__builtin_expect (ptr != (void*) 0, 1)) return 0;]])],
|
|
[AC_DEFINE([HAVE_BUILTIN_EXPECT], [1],
|
|
[Define if supports __builtin_expect() extension])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Remove old ways of determining debug/production build.
|
|
## These were used in 1.8.x and earlier. We should probably keep these checks
|
|
## around to help people migrate to 1.10.x and newer versions.
|
|
##
|
|
AC_ARG_ENABLE([debug],
|
|
[AS_HELP_STRING([--enable-debug], [OPTION CHANGE: use --enable-build-mode=debug])],
|
|
[AC_MSG_ERROR([--enable-debug is no longer supported, use --enable-build-mode=debug instead.])])
|
|
|
|
AC_ARG_ENABLE([production],
|
|
[AS_HELP_STRING([--enable-production], [OPTION CHANGE: use --enable-build-mode=production])],
|
|
[AC_MSG_ERROR([--enable-production is no longer supported, use --enable-build-mode=production instead.])])
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if the compiler should include build diagnostics
|
|
##
|
|
AC_MSG_CHECKING([enable build diagnostics])
|
|
AC_ARG_ENABLE([diags],
|
|
[AS_HELP_STRING([--enable-diags=(yes|no|<custom>)],
|
|
[Allow default enhanced diagnostics to the build.
|
|
This is independent of the build mode and optimization
|
|
level.
|
|
[default=no]
|
|
])],
|
|
[DIAGS=$enableval])
|
|
|
|
## Set default
|
|
if test "X-$DIAGS" = X- ; then
|
|
DIAGS=no
|
|
fi
|
|
|
|
## Allow this variable to be substituted in
|
|
## other files (src/libhdf5.settings.in, etc.)
|
|
AC_SUBST([DIAGS])
|
|
|
|
case "X-$DIAGS" in
|
|
X-yes)
|
|
H5_CFLAGS="$H5_CFLAGS $DIAGS_CFLAGS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $DIAGS_CXXFLAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $DIAGS_FCFLAGS"
|
|
AC_MSG_RESULT([yes])
|
|
;;
|
|
X-no)
|
|
H5_CFLAGS="$H5_CFLAGS $NO_DIAGS_CFLAGS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $NO_DIAGS_CXXFLAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $NO_DIAGS_FCFLAGS"
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
H5_CFLAGS="$H5_CFLAGS $DIAGS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $DIAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $DIAGS"
|
|
DIAGS="custom ($DIAGS)"
|
|
AC_MSG_RESULT([$DIAGS])
|
|
;;
|
|
esac
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if the compiler should include symbols
|
|
##
|
|
AC_MSG_CHECKING([enable debugging symbols])
|
|
AC_ARG_ENABLE([symbols],
|
|
[AS_HELP_STRING([--enable-symbols=(yes|no|<custom>)],
|
|
[Add debug symbols to the library (e.g.: build with -g).
|
|
This is independent of the build mode and optimization
|
|
level. The custom string allows special settings like
|
|
-ggdb, etc. to be used.
|
|
[default=yes if debug build, otherwise no]
|
|
])],
|
|
[SYMBOLS=$enableval])
|
|
|
|
## Set default
|
|
if test "X-$SYMBOLS" = X- ; then
|
|
if test "X-$BUILD_MODE" = "X-debug" ; then
|
|
SYMBOLS=yes
|
|
else
|
|
SYMBOLS=no
|
|
fi
|
|
fi
|
|
|
|
## Allow this variable to be substituted in
|
|
## other files (src/libhdf5.settings.in, etc.)
|
|
AC_SUBST([SYMBOLS])
|
|
|
|
case "X-$SYMBOLS" in
|
|
X-yes)
|
|
H5_CFLAGS="$H5_CFLAGS $SYMBOLS_CFLAGS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $SYMBOLS_CXXFLAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $SYMBOLS_FCFLAGS"
|
|
AC_MSG_RESULT([yes])
|
|
;;
|
|
X-no)
|
|
H5_CFLAGS="$H5_CFLAGS $NO_SYMBOLS_CFLAGS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $NO_SYMBOLS_CXXFLAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $NO_SYMBOLS_FCFLAGS"
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
H5_CFLAGS="$H5_CFLAGS $SYMBOLS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $SYMBOLS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $SYMBOLS"
|
|
SYMBOLS="custom ($SYMBOLS)"
|
|
AC_MSG_RESULT([$SYMBOLS])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if the assert macro should be enabled
|
|
##
|
|
AC_MSG_CHECKING([enable asserts])
|
|
AC_ARG_ENABLE([asserts],
|
|
[AS_HELP_STRING([--enable-asserts],
|
|
[Determines whether NDEBUG is defined or not, which
|
|
controls assertions.
|
|
This is independent of the build mode and presence
|
|
of debugging symbols.
|
|
[default=yes if debug build, otherwise no]
|
|
])],
|
|
[ASSERTS=$enableval])
|
|
|
|
## Set default
|
|
if test "X-$ASSERTS" = X- ; then
|
|
if test "X-$BUILD_MODE" = "X-debug" ; then
|
|
ASSERTS=yes
|
|
else
|
|
ASSERTS=no
|
|
fi
|
|
fi
|
|
|
|
## Allow this variable to be substituted in
|
|
## other files (src/libhdf5.settings.in, etc.)
|
|
AC_SUBST([ASSERTS])
|
|
|
|
case "X-$ASSERTS" in
|
|
X-yes)
|
|
H5_CPPFLAGS="$H5_CPPFLAGS -UNDEBUG"
|
|
AC_MSG_RESULT([yes])
|
|
;;
|
|
X-no)
|
|
H5_CPPFLAGS="$H5_CPPFLAGS -DNDEBUG"
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $ASSERTS])
|
|
;;
|
|
esac
|
|
|
|
## Incorporate the potentially warning-to-error promoting flags after
|
|
## feature tests. Some of the tests generate compilation errors with the
|
|
## flags we chose for the HDF5 library and tools.
|
|
##
|
|
H5_CFLAGS="$H5_CFLAGS $H5_ECFLAGS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $H5_ECXXFLAGS"
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if developer warnings should be turned on
|
|
## These are warnings that provide suggestions like gcc's -Wsuggest-attribute.
|
|
## They do not indicate code problems.
|
|
##
|
|
## Note that developers don't need to build with these regularly. They
|
|
## are just handy to check once in a while (before releases, etc.).
|
|
##
|
|
AC_MSG_CHECKING([enable developer warnings])
|
|
AC_ARG_ENABLE([developer-warnings],
|
|
[AS_HELP_STRING([--enable-developer-warnings],
|
|
[Determines whether developer warnings will be
|
|
emitted. These are usually performance suggestions
|
|
(e.g. -Wsuggest-attribute) and do not flag poor code
|
|
quality.
|
|
[default=no]
|
|
])],
|
|
[DEV_WARNINGS=$enableval])
|
|
|
|
## Set default
|
|
if test "X-$DEV_WARNINGS" = X- ; then
|
|
DEV_WARNINGS=no
|
|
fi
|
|
|
|
case "X-$DEV_WARNINGS" in
|
|
X-yes)
|
|
H5_CFLAGS="$H5_CFLAGS $DEVELOPER_WARNING_CFLAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $DEVELOPER_WARNING_FCFLAGS"
|
|
AC_MSG_RESULT([yes])
|
|
;;
|
|
X-no)
|
|
H5_CFLAGS="$H5_CFLAGS $NO_DEVELOPER_WARNING_CFLAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $NO_DEVELOPER_WARNING_FCFLAGS"
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $DEV_WARNINGS])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if they would like suppessed compiler diagnostics displayed
|
|
## (i.e. not suppressed)
|
|
##
|
|
## NOTE: Compiler diagnostics (i.e. warnings) are suppressed for some
|
|
## "noisy" warnings that are harmless (in the opinion of the primary
|
|
## HDF5 development team), but this option is provided to allow
|
|
## developers to see those warnings.
|
|
##
|
|
AC_MSG_CHECKING([whether showing all compiler warnings is enabled])
|
|
AC_ARG_ENABLE([show-all-warnings],
|
|
[AS_HELP_STRING([--enable-show-all-warnings],
|
|
[Enable showing all compiler warnings (for developer debugging).
|
|
[default=no]
|
|
])],
|
|
[SHOW_ALL_WARNINGS=$enableval])
|
|
|
|
## Set the default level.
|
|
if test "X-$SHOW_ALL_WARNINGS" = X- ; then
|
|
SHOW_ALL_WARNINGS=no
|
|
fi
|
|
|
|
## Allow this variable to be substituted in
|
|
## other files (src/libhdf5.settings.in, etc.)
|
|
AC_SUBST([SHOW_ALL_WARNINGS])
|
|
|
|
case "X-$SHOW_ALL_WARNINGS" in
|
|
X-yes)
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE([SHOW_ALL_WARNINGS], [1], [Define if showing all warnings is desired (i.e. not suppressed internally with H5_DIAG_OFF)])
|
|
;;
|
|
X-no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $SHOW_ALL_WARNINGS])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if the compiler should use profiling flags/settings
|
|
##
|
|
AC_MSG_CHECKING([profiling])
|
|
AC_ARG_ENABLE([profiling],
|
|
[AS_HELP_STRING([--enable-profiling=(yes|no|<custom>)],
|
|
[Enable profiling flags (e.g.: -pg).
|
|
This can be set independently from the build mode.
|
|
The custom setting can be used to pass alternative
|
|
profiling flags (e.g.: -P for using Prof with gcc).
|
|
[default=no]
|
|
])],
|
|
[PROFILING=$enableval])
|
|
|
|
## Default is no profiling
|
|
if test "X-$PROFILING" = X- ; then
|
|
PROFILING=no
|
|
fi
|
|
|
|
## Allow this variable to be substituted in
|
|
## other files (src/libhdf5.settings.in, etc.)
|
|
AC_SUBST([PROFILING])
|
|
|
|
case "X-$PROFILING" in
|
|
X-yes)
|
|
H5_CFLAGS="$H5_CFLAGS $PROFILE_CFLAGS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $PROFILE_CXXFLAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $PROFILE_FCFLAGS"
|
|
AC_MSG_RESULT([yes])
|
|
;;
|
|
X-no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
H5_CFLAGS="$H5_CFLAGS $PROFILING"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $PROFILING"
|
|
H5_FCFLAGS="$H5_FCFLAGS $PROFILING"
|
|
PROFILING="custom ($PROFILING)"
|
|
AC_MSG_RESULT([$PROFILING])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if the compiler should use a particular optimization setting
|
|
##
|
|
AC_MSG_CHECKING([optimization level])
|
|
AC_ARG_ENABLE([optimization],
|
|
[AS_HELP_STRING([--enable-optimization=(high|debug|none|<custom>)],
|
|
[Enable optimization flags/settings (e.g.: -O3).
|
|
This can be set independently from the build mode.
|
|
Optimizations for a given compiler can be specified
|
|
at several levels: High, with aggressive optimizations
|
|
turned on; debug, with optimizations that are
|
|
unlikely to interfere with debugging or profiling;
|
|
and none, with no optimizations at all.
|
|
See the compiler-specific config/*-flags file for more
|
|
details.
|
|
Alternatively, optimization options can
|
|
be specified directly by specifying them as a
|
|
string value. These custom optimization flags will
|
|
completely replace all other optimization flags.
|
|
[default depends on build mode: debug=debug,
|
|
production=high, clean=none]
|
|
])],
|
|
[OPTIMIZATION=$enableval])
|
|
|
|
## Set the default optimization level. This depends on the compiler mode.
|
|
if test "X-$OPTIMIZATION" = X- ; then
|
|
case "X-$BUILD_MODE" in
|
|
X-debug)
|
|
OPTIMIZATION=debug
|
|
;;
|
|
X-production)
|
|
OPTIMIZATION=high
|
|
;;
|
|
X-clean)
|
|
OPTIMIZATION=none
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
## Allow this variable to be substituted in
|
|
## other files (src/libhdf5.settings.in, etc.)
|
|
AC_SUBST([OPTIMIZATION])
|
|
|
|
case "X-$OPTIMIZATION" in
|
|
X-high)
|
|
H5_CFLAGS="$H5_CFLAGS $HIGH_OPT_CFLAGS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $HIGH_OPT_CXXFLAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $HIGH_OPT_FCFLAGS"
|
|
AC_MSG_RESULT([high])
|
|
;;
|
|
X-debug)
|
|
H5_CFLAGS="$H5_CFLAGS $DEBUG_OPT_CFLAGS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $DEBUG_OPT_CXXFLAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $DEBUG_OPT_FCFLAGS"
|
|
AC_MSG_RESULT([debug])
|
|
;;
|
|
X-none)
|
|
H5_CFLAGS="$H5_CFLAGS $NO_OPT_CFLAGS"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $NO_OPT_CXXFLAGS"
|
|
H5_FCFLAGS="$H5_FCFLAGS $NO_OPT_FCFLAGS"
|
|
AC_MSG_RESULT([none])
|
|
;;
|
|
*)
|
|
H5_CFLAGS="$H5_CFLAGS $OPTIMIZATION"
|
|
H5_CXXFLAGS="$H5_CXXFLAGS $OPTIMIZATION"
|
|
H5_FCFLAGS="$H5_FCFLAGS $OPTIMIZATION"
|
|
OPTIMIZATION="custom ($OPTIMIZATION)"
|
|
AC_MSG_RESULT([$OPTIMIZATION])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if file locking should be used
|
|
##
|
|
AC_MSG_CHECKING([enable file locking])
|
|
AC_ARG_ENABLE([file-locking],
|
|
[AS_HELP_STRING([--enable-file-locking=(yes|no|best-effort)],
|
|
[Sets the default for whether or not to use file
|
|
locking when opening files. Can be overridden
|
|
with the HDF5_USE_FILE_LOCKING environment variable
|
|
and the H5Pset_file_locking() API call.
|
|
best-effort attempts to use file locking but does
|
|
not fail when file locks have been disabled on
|
|
the file system (useful with Lustre).
|
|
[default=best-effort]
|
|
])],
|
|
[DESIRED_FILE_LOCKING=$enableval])
|
|
|
|
## Set defaults
|
|
if test "X-$DESIRED_FILE_LOCKING" = X- ; then
|
|
DESIRED_FILE_LOCKING=best-effort
|
|
fi
|
|
|
|
## Allow this variable to be substituted in
|
|
## other files (src/libhdf5.settings.in, etc.)
|
|
AC_SUBST([DESIRED_FILE_LOCKING])
|
|
AC_SUBST([USE_FILE_LOCKING])
|
|
AC_SUBST([IGNORE_DISABLED_FILE_LOCKS])
|
|
|
|
case "X-$DESIRED_FILE_LOCKING" in
|
|
X-best-effort)
|
|
AC_MSG_RESULT([best-effort])
|
|
AC_DEFINE([USE_FILE_LOCKING], [1],
|
|
[Define if the library will use file locking])
|
|
AC_DEFINE([IGNORE_DISABLED_FILE_LOCKS], [1],
|
|
[Define if the library will ignore file locks when disabled])
|
|
;;
|
|
X-yes)
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE([USE_FILE_LOCKING], [1],
|
|
[Define if the library will use file locking])
|
|
;;
|
|
X-no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $USE_FILE_LOCKING])
|
|
;;
|
|
esac
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Enable/disable internal package-level debugging output
|
|
##
|
|
AC_MSG_CHECKING([for internal debug output])
|
|
AC_ARG_ENABLE([internal-debug],
|
|
[AS_HELP_STRING([--enable-internal-debug=(yes|all|no|none|<pkg list>)],
|
|
[Enable extra debugging output on HDF5 library
|
|
errors. One may also specify a comma-separated
|
|
list of package names without the leading H5.
|
|
This is independent of the build mode
|
|
and is mainly of interest to HDF Group developers.
|
|
Yes/all and no/none are synonymous.
|
|
[default=all if debug build, otherwise none]
|
|
])],
|
|
[INTERNAL_DEBUG_OUTPUT=$enableval])
|
|
|
|
## Set default
|
|
if test "X-$INTERNAL_DEBUG_OUTPUT" = X- ; then
|
|
if test "X-$BUILD_MODE" = "X-debug" ; then
|
|
INTERNAL_DEBUG_OUTPUT=all
|
|
else
|
|
INTERNAL_DEBUG_OUTPUT=none
|
|
fi
|
|
fi
|
|
|
|
AC_SUBST([INTERNAL_DEBUG_OUTPUT])
|
|
|
|
## These are all the packages that use H5*_DEBUG.
|
|
## There is no harm in specifying a package not in this list;
|
|
## you'll just get an unused H5<pkg>_DEBUG symbol.
|
|
##
|
|
## Some packages that define debug checks or output are
|
|
## too specialized or have huge performance hits. These
|
|
## are not listed in the "all" packages list.
|
|
##
|
|
## all_packages="AC,B2,CX,D,F,FA,FL,FS,MM,O,T,TS,Z"
|
|
all_packages="AC,B2,CX,D,F,MM,O,T,TS,Z"
|
|
|
|
case "X-$INTERNAL_DEBUG_OUTPUT" in
|
|
X-yes|X-all)
|
|
INTERNAL_DEBUG_OUTPUT=$all_packages
|
|
DEBUG_PKG_LIST=$all_packages
|
|
;;
|
|
X-no|X-none)
|
|
INTERNAL_DEBUG_OUTPUT=none
|
|
DEBUG_PKG_LIST=
|
|
;;
|
|
*)
|
|
DEBUG_PKG_LIST=$INTERNAL_DEBUG_OUTPUT
|
|
;;
|
|
esac
|
|
AC_MSG_RESULT([$INTERNAL_DEBUG_OUTPUT])
|
|
|
|
## Define H5*_DEBUG symbols that control package output
|
|
## NOTE: No sanity checking done here!
|
|
if test -n "$DEBUG_PKG_LIST"; then
|
|
for pkg in `echo $DEBUG_PKG_LIST | ${TR} ${as_cr_letters}"," ${as_cr_LETTERS}" "`; do
|
|
H5_CPPFLAGS="$H5_CPPFLAGS -DH5${pkg}_DEBUG"
|
|
done
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Enable tracing of the API
|
|
##
|
|
AC_MSG_CHECKING([for API tracing]);
|
|
AC_ARG_ENABLE([trace],
|
|
[AS_HELP_STRING([--enable-trace],
|
|
[Enable HDF5 API tracing capability.
|
|
[default=yes if debug build, otherwise no]
|
|
])],
|
|
[TRACE_API=$enableval])
|
|
|
|
## Set the default level.
|
|
if test "X-$TRACE_API" = X- ; then
|
|
if test "X-$BUILD_MODE" = "X-debug" ; then
|
|
TRACE_API=yes
|
|
else
|
|
TRACE_API=no
|
|
fi
|
|
fi
|
|
|
|
## Allow this variable to be substituted in
|
|
## other files (src/libhdf5.settings.in, etc.)
|
|
AC_SUBST([TRACE_API])
|
|
|
|
case "X-$TRACE_API" in
|
|
X-yes)
|
|
AC_MSG_RESULT([yes])
|
|
H5_CPPFLAGS="$H5_CPPFLAGS -DH5_DEBUG_API"
|
|
;;
|
|
X-no)
|
|
AC_MSG_RESULT([no])
|
|
H5_CPPFLAGS="$H5_CPPFLAGS -UH5_DEBUG_API"
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $TRACE_API])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if they would like to use a memory checking tool (like valgrind's
|
|
## 'memcheck' tool, or Rational Purify, etc) and the library should be
|
|
## more scrupulous with it's memory operations. Enabling this also
|
|
## disables the library's free space manager code.
|
|
##
|
|
AC_MSG_CHECKING([whether a memory checking tool will be used])
|
|
AC_ARG_ENABLE([using-memchecker],
|
|
[AS_HELP_STRING([--enable-using-memchecker],
|
|
[Enable this option if a memory allocation and/or
|
|
bounds checking tool will be used on the HDF5
|
|
library. Enabling this causes the library to be
|
|
more picky about its memory operations and also
|
|
disables the library's free space manager code.
|
|
[default=no]
|
|
])],
|
|
[USINGMEMCHECKER=$enableval])
|
|
|
|
## Allow this variable to be substituted in
|
|
## other files (src/libhdf5.settings.in, etc.)
|
|
AC_SUBST([USINGMEMCHECKER])
|
|
|
|
## Set the default level.
|
|
if test "X-$USINGMEMCHECKER" = X- ; then
|
|
USINGMEMCHECKER=no
|
|
fi
|
|
|
|
case "X-$USINGMEMCHECKER" in
|
|
X-yes)
|
|
AC_DEFINE([USING_MEMCHECKER], [1],
|
|
[Define if a memory checking tool will be used on the library,
|
|
to cause library to be very picky about memory operations and
|
|
also disable the internal free list manager code.])
|
|
AC_MSG_RESULT([yes])
|
|
;;
|
|
X-no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $USINGMEMCHECKER])
|
|
;;
|
|
esac
|
|
|
|
## Checkpoint the cache
|
|
AC_CACHE_SAVE
|
|
|
|
## What header files and libraries do we have to look for for parallel
|
|
## support? For the most part, search paths are already specified with
|
|
## CPPFLAGS and LDFLAGS or are known to the compiler.
|
|
##
|
|
AC_ARG_ENABLE([parallel],
|
|
[AS_HELP_STRING([--enable-parallel],
|
|
[Search for MPI-IO and MPI support files])])
|
|
|
|
## The --enable-parallel flag is not compatible with --enable-cxx.
|
|
## If the user tried to specify both flags, throw an error, unless
|
|
## they also provided the --enable-unsupported flag.
|
|
if test "X${ALLOW_UNSUPPORTED}" != "Xyes"; then
|
|
if test "X${HDF_CXX}" = "Xyes" -a "X${enable_parallel}" = "Xyes"; then
|
|
AC_MSG_ERROR([--enable-cxx and --enable-parallel flags are incompatible. Use --enable-unsupported to override this error.])
|
|
fi
|
|
fi
|
|
|
|
## The --enable-parallel flag is not compatible with --enable-java.
|
|
## If the user tried to specify both flags, throw an error, unless
|
|
## they also provided the --enable-unsupported flag.
|
|
if test "X${ALLOW_UNSUPPORTED}" != "Xyes"; then
|
|
if test "X${HDF_JAVA}" = "Xyes" -a "X${enable_parallel}" = "Xyes"; then
|
|
AC_MSG_ERROR([--enable-java and --enable-parallel flags are incompatible. Use --enable-unsupported to override this error.])
|
|
fi
|
|
fi
|
|
|
|
# Requires MPI standard 3.0 and greater
|
|
if test "X${enable_parallel}" = "Xyes"; then
|
|
AC_MSG_CHECKING([whether MPI meets the minimum 3.0 standard])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
#include <mpi.h>
|
|
#if MPI_VERSION < 3
|
|
#error, found MPI_VERSION < 3
|
|
#endif]])],
|
|
[AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])
|
|
AC_MSG_ERROR([HDF5 requires MPI standard 3.0 or greater])]
|
|
)
|
|
fi
|
|
|
|
AC_MSG_CHECKING([for parallel support files])
|
|
case "X-$enable_parallel" in
|
|
X-|X-no|X-none)
|
|
## We are not compiling for parallel.
|
|
AC_MSG_RESULT([skipped])
|
|
;;
|
|
|
|
X-yes)
|
|
## We want to compile a parallel library with a compiler that
|
|
## may already know how to link with MPI and MPI-IO.
|
|
AC_MSG_RESULT([provided by compiler])
|
|
PARALLEL=yes
|
|
|
|
## Try link a simple MPI program.
|
|
AC_MSG_CHECKING([whether a simple MPI-IO C program can be linked])
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <mpi.h>]],
|
|
[[ MPI_Init(0, (void *)0);
|
|
MPI_File_open(0, (void *)0, 0, 0, (void *)0);]])],
|
|
[AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])
|
|
AC_MSG_ERROR([unable to link a simple MPI-IO C program])])
|
|
|
|
if test "X$HDF_FORTRAN" = "Xyes"; then
|
|
PAC_PROG_FC_MPI_CHECK
|
|
fi
|
|
|
|
## Set RUNPARALLEL to mpiexec if not set yet.
|
|
if test "X$PARALLEL" = "Xyes" -a -z "$RUNPARALLEL"; then
|
|
RUNPARALLEL="mpiexec -n \$\${NPROCS:=6}"
|
|
fi
|
|
;;
|
|
|
|
*)
|
|
AC_MSG_RESULT([error])
|
|
AC_MSG_ERROR([\'$enable_parallel\' is not a valid parallel search type])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Print some other parallel information and do some sanity checks.
|
|
## Needs to be done outside of the PARALLEL block since the serial
|
|
## build also needs to have values defined.
|
|
##
|
|
AC_SUBST([ADD_PARALLEL_FILES]) ADD_PARALLEL_FILES="no"
|
|
AC_SUBST([INSTRUMENT_LIBRARY]) INSTRUMENT_LIBRARY=no
|
|
AC_SUBST([PARALLEL_FILTERED_WRITES])
|
|
AC_SUBST([LARGE_PARALLEL_IO])
|
|
|
|
if test -n "$PARALLEL"; then
|
|
if test "X$HDF5_TESTS" = "Xyes"; then
|
|
## The 'testpar' directory should participate in the build
|
|
TESTPARALLEL=testpar
|
|
fi
|
|
|
|
## We are building a parallel library
|
|
AC_DEFINE([HAVE_PARALLEL], [1], [Define if we have parallel support])
|
|
|
|
## 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])
|
|
|
|
## There *must* be some way to run in parallel even if it's just the
|
|
## word `none'.
|
|
if test -z "$RUNPARALLEL"; then
|
|
AC_MSG_ERROR([no way to run a parallel program])
|
|
fi
|
|
|
|
## If RUNSERIAL or RUNPARALLEL is the word `none' then replace it with
|
|
## the empty string. This means that no launch commands were requested,
|
|
## so we will not use any launch commands.
|
|
if test "X$RUNSERIAL" = "Xnone"; then
|
|
RUNSERIAL=""
|
|
fi
|
|
if test "X$RUNPARALLEL" = "Xnone"; then
|
|
RUNPARALLEL=""
|
|
fi
|
|
|
|
if test "X$HDF_FORTRAN" = "Xyes"; then
|
|
ADD_PARALLEL_FILES="yes"
|
|
AC_MSG_CHECKING([for MPI_Comm_c2f and MPI_Comm_f2c functions])
|
|
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
#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 exist])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])]
|
|
)
|
|
|
|
AC_MSG_CHECKING([for MPI_Info_c2f and MPI_Info_f2c functions])
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#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 exist])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])]
|
|
)
|
|
|
|
AC_LANG_PUSH([Fortran])
|
|
AC_MSG_CHECKING([for MPI-3 module mpi_f08])
|
|
AC_LINK_IFELSE(
|
|
[AC_LANG_PROGRAM([],
|
|
[
|
|
USE mpi_f08
|
|
IMPLICIT NONE
|
|
TYPE(MPI_Comm) :: comm
|
|
TYPE(MPI_INFO) :: info
|
|
]
|
|
)
|
|
],
|
|
[AC_DEFINE([HAVE_MPI_F08], [1],
|
|
[Define if mpi_f08 module exist])
|
|
AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])]
|
|
)
|
|
AC_LANG_POP(Fortran)
|
|
|
|
if test "X$HDF5_TESTS" = "Xyes"; then
|
|
AC_SUBST([MPI_LOGICAL_KIND])
|
|
PAC_FIND_MPI_LOGICAL_KIND
|
|
if test "X$" = "Xyes"; then
|
|
HAVE_ISO_FORTRAN_ENV="1"
|
|
AC_DEFINE([HAVE_ISO_FORTRAN_ENV], [1], [Define if Fortran supports ISO_FORTRAN_ENV (F08)])
|
|
fi
|
|
fi
|
|
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Enable instrumenting of the library's internal operations
|
|
## in parallel builds.
|
|
##
|
|
|
|
## Set default
|
|
if test "X-$BUILD_MODE" = "X-debug" ; then
|
|
INSTRUMENT_LIBRARY=yes
|
|
else
|
|
INSTRUMENT_LIBRARY=no
|
|
fi
|
|
|
|
AC_MSG_CHECKING([for instrumented library]);
|
|
AC_ARG_ENABLE([instrument],
|
|
[AS_HELP_STRING([--enable-instrument],
|
|
[Enable library instrumentation of optimization
|
|
tracing (only used with parallel builds).
|
|
[default=yes if a parallel debug build, otherwise no]
|
|
])],
|
|
[INSTRUMENT_LIBRARY=$enableval])
|
|
|
|
## Allow this variable to be substituted in
|
|
## other files (src/libhdf5.settings.in, etc.)
|
|
AC_SUBST([INSTRUMENT_LIBRARY])
|
|
|
|
case "X-$INSTRUMENT_LIBRARY" in
|
|
X-yes)
|
|
AC_DEFINE([HAVE_INSTRUMENTED_LIBRARY], [1],
|
|
[Define if parallel library will contain instrumentation to detect correct optimization operation])
|
|
AC_MSG_RESULT([yes])
|
|
;;
|
|
X-no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $INSTRUMENT_LIBRARY])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check for the MPI functions necessary for the Parallel Compression
|
|
## feature. If these are not present, issue a warning that Parallel
|
|
## Compression will be disabled.
|
|
##
|
|
AC_MSG_CHECKING([for MPI_Ibarrier/MPI_Issend/MPI_Iprobe/MPI_Irecv functions])
|
|
|
|
AC_LINK_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#include <mpi.h>
|
|
]],
|
|
[[
|
|
int flag;
|
|
MPI_Init(0, (void *) 0);
|
|
MPI_Ibarrier(0, (void *) 0);
|
|
MPI_Issend((void *) 0, 0, 0, 0, 0, 0, (void *) 0);
|
|
MPI_Iprobe(0, 0, 0, &flag, (void *) 0);
|
|
MPI_Irecv((void *) 0, 0, 0, 0, 0, 0, (void *) 0);
|
|
]]
|
|
)],
|
|
[AC_MSG_RESULT([yes])
|
|
PARALLEL_FILTERED_WRITES=yes
|
|
AC_DEFINE([HAVE_PARALLEL_FILTERED_WRITES], [1], [Define if we have support for writing to filtered datasets in parallel])],
|
|
[AC_MSG_RESULT([no])
|
|
AC_MSG_WARN([A simple MPI program using the MPI_Ibarrier, MPI_Issend, MPI_Iprobe and MPI_Irecv functions could not be compiled and linked.
|
|
Parallel writes of filtered data will be disabled.])
|
|
PARALLEL_FILTERED_WRITES=no]
|
|
)
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check for the MPI-3 functions necessary for the big I/O feature.
|
|
## If these are not present, issue a warning that the big I/O feature
|
|
## will be disabled.
|
|
##
|
|
AC_MSG_CHECKING([for MPI_Get_elements_x and MPI_Type_size_x functions])
|
|
|
|
AC_LINK_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#include <mpi.h>
|
|
]],
|
|
[[
|
|
MPI_Count count;
|
|
MPI_Init(0, (void *) 0);
|
|
MPI_Get_elements_x(0, 0, &count);
|
|
MPI_Type_size_x(0, &count);
|
|
]]
|
|
)],
|
|
[AC_MSG_RESULT([yes])
|
|
LARGE_PARALLEL_IO=yes],
|
|
[AC_MSG_RESULT([no])
|
|
AC_MSG_WARN([A simple MPI program using the MPI_Get_elements_x and MPI_Type_size_x functions could not be compiled and linked.
|
|
Reading/Writing >2GB of data in a single parallel I/O operation will be disabled.])
|
|
LARGE_PARALLEL_IO=no]
|
|
)
|
|
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
|
|
## Build parallel tools if parallel tools, parallel, and build tools options
|
|
## are all enabled.
|
|
##
|
|
AC_SUBST([PARALLEL_TOOLS])
|
|
|
|
## Default is no parallel tools
|
|
PARALLEL_TOOLS=no
|
|
|
|
AC_MSG_CHECKING([parallel tools])
|
|
AC_ARG_ENABLE([parallel-tools],
|
|
[AS_HELP_STRING([--enable-parallel-tools],
|
|
[Enable building parallel tools.
|
|
[default=no]])],
|
|
[PARALLEL_TOOLS=$enableval])
|
|
|
|
if test "X${PARALLEL_TOOLS}" = "Xyes"; then
|
|
if test "X${HDF5_TOOLS}" != "Xyes"; then
|
|
AC_MSG_ERROR([--enable-tools is required for --enable-parallel-tools])
|
|
fi
|
|
if test "X${PARALLEL}" != "Xyes"; then
|
|
AC_MSG_ERROR([--enable-parallel is required for --enable-parallel-tools])
|
|
fi
|
|
fi
|
|
|
|
case "X-$PARALLEL_TOOLS" in
|
|
X-|X-no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
X-yes)
|
|
AC_MSG_RESULT([yes])
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
if test "X${PARALLEL_TOOLS}" = "Xyes"; then
|
|
## Is the mpiFileUtils library (libmfu) required and available?
|
|
##
|
|
AC_SUBST([H5DWALK_LDFLAGS])
|
|
AC_SUBST([H5DWALK_LIBS])
|
|
AC_SUBST([H5DWALK_CPPFLAGS])
|
|
|
|
H5DWALK_LDFLAGS="${H5DWALK_LDFLAGS}"
|
|
|
|
## Default is not present
|
|
HAVE_LIBMFU=no
|
|
|
|
AC_ARG_WITH([libmfu],
|
|
[AS_HELP_STRING([--with-libmfu=DIR],
|
|
[Use the libmfu library [default=no]])],,
|
|
[withval=no])
|
|
|
|
case "X-$withval" in
|
|
X-yes)
|
|
HAVE_LIBMFU="yes"
|
|
AC_CHECK_HEADERS([mfu.h],, [unset HAVE_LIBMFU])
|
|
if test "x$HAVE_LIBMFU" = "xyes"; then
|
|
AC_CHECK_LIB([mfu], [mfu_init], [H5DWALK_LIBS="-lmfu"], [unset HAVE_LIBMFU])
|
|
fi
|
|
if test -z "$HAVE_LIBMFU" -a -n "$HDF5_CONFIG_ABORT"; then
|
|
AC_MSG_ERROR([couldn't find libmfu library])
|
|
fi
|
|
;;
|
|
X-|X-no|X-none)
|
|
HAVE_LIBMFU="no"
|
|
AC_MSG_CHECKING([for libmfu library])
|
|
AC_MSG_RESULT([suppressed])
|
|
;;
|
|
*)
|
|
HAVE_LIBMFU="yes"
|
|
case "$withval" in
|
|
*,*)
|
|
libmfu_inc="`echo $withval |cut -f1 -d,`"
|
|
libmfu_lib="`echo $withval |cut -f2 -d, -s`"
|
|
;;
|
|
*)
|
|
if test -n "$withval"; then
|
|
libmfu_inc="$withval/include"
|
|
libmfu_lib="$withval/lib64"
|
|
libcircle_lib="$withval/lib"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
saved_CPPFLAGS="$CPPFLAGS"
|
|
saved_AM_CPPFLAGS="$AM_CPPFLAGS"
|
|
saved_LDFLAGS="$LDFLAGS"
|
|
saved_AM_LDFLAGS="$AM_LDFLAGS"
|
|
|
|
## For these checks we need the libmfu locations added to CPPFLAGS,
|
|
## AM_CPPFLAGS, LDFLAGS, and AM_LDFLAGS. The third param should set them
|
|
## back to these saved values. If the checks pass, then normally these four
|
|
## flag variables would be updated, but in this case we put the changes in
|
|
## variables specific to H5DWALK since they aren't used elsewhere.
|
|
if test -n "$libmfu_inc"; then
|
|
CPPFLAGS="$CPPFLAGS -I$libmfu_inc"
|
|
AM_CPPFLAGS="$AM_CPPFLAGS -I$libmfu_inc"
|
|
fi
|
|
|
|
if test -n "$libmfu_lib"; then
|
|
LDFLAGS="$LDFLAGS -L$libmfu_lib -L$libcircle_lib"
|
|
AM_LDFLAGS="$AM_LDFLAGS -L$libmfu_lib -L$libcircle_lib"
|
|
fi
|
|
|
|
if test "x$HAVE_LIBMFU" = "xyes"; then
|
|
AC_CHECK_LIB([mfu], [mfu_init],[H5DWALK_LIBS="-lmfu"], [CPPFLAGS="$saved_CPPFLAGS"; AM_CPPFLAGS="$saved_AM_CPPFLAGS"; LDFLAGS="$saved_LDFLAGS"; AM_LDFLAGS="$saved_AM_LDFLAGS"; unset HAVE_LIBMFU])
|
|
if test -n "$HAVE_LIBMFU"; then
|
|
AC_CHECK_HEADERS([mfu.h],[H5DWALK_CPPFLAGS="-I$libmfu_inc"],[CPPFLAGS="$saved_CPPFLAGS"; AM_CPPFLAGS="$saved_AM_CPPFLAGS"; LDFLAGS="$saved_LDFLAGS"; AM_LDFLAGS="$saved_AM_LDFLAGS"; unset HAVE_LIBMFU])
|
|
fi
|
|
fi
|
|
|
|
if test -z "$HAVE_LIBMFU" -a -n "$HDF5_CONFIG_ABORT"; then
|
|
AC_MSG_ERROR([couldn't find libmfu library])
|
|
else
|
|
H5DWALK_LDFLAGS="-L$libmfu_lib -L$libcircle_lib"
|
|
fi
|
|
|
|
if test -z "$LD_LIBRARY_PATH"; then
|
|
export LD_LIBRARY_PATH="$libmfu_lib:$libcircle_lib"
|
|
else
|
|
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$libmfu_lib:$libcircle_lib"
|
|
fi
|
|
|
|
LL_PATH="$LD_LIBRARY_PATH"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
##
|
|
AM_CONDITIONAL([PARALLEL_TOOLS_CONDITIONAL], [test "X$HAVE_LIBMFU" = "Xyes"])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if the map API is enabled by --enable-map-api
|
|
##
|
|
AC_SUBST([MAP_API])
|
|
|
|
## Default is no map API
|
|
MAP_API=no
|
|
|
|
AC_MSG_CHECKING([if the map API (H5M) is enabled])
|
|
|
|
AC_ARG_ENABLE([map-api],
|
|
[AS_HELP_STRING([--enable-map-api],
|
|
[Build the map API (H5M).
|
|
This is not yet supported in the native file format
|
|
and requires a VOL connector that supports it.
|
|
[default=no]])],
|
|
[MAP_API=$enableval], [MAP_API=no])
|
|
|
|
if test "X$MAP_API" = "Xyes"; then
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE([HAVE_MAP_API], [1],
|
|
[Define if the map API (H5M) should be compiled])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if Subfiling I/O driver is enabled by --enable-subfiling-vfd
|
|
##
|
|
AC_SUBST([SUBFILING_VFD])
|
|
|
|
## Default is no subfiling VFD
|
|
SUBFILING_VFD=no
|
|
|
|
## Always include subfiling directory so public header files are available
|
|
H5_CPPFLAGS="$H5_CPPFLAGS -I$ac_abs_confdir/src/H5FDsubfiling"
|
|
|
|
AC_MSG_CHECKING([if the subfiling I/O virtual file driver (VFD) is enabled])
|
|
|
|
AC_ARG_ENABLE([subfiling-vfd],
|
|
[AS_HELP_STRING([--enable-subfiling-vfd],
|
|
[Build the subfiling I/O virtual file driver (VFD). Requires --enable-parallel.
|
|
[default=no]])],
|
|
[SUBFILING_VFD=$enableval], [SUBFILING_VFD=no])
|
|
|
|
if test "X$SUBFILING_VFD" = "Xyes"; then
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE([HAVE_SUBFILING_VFD], [1],
|
|
[Define if the subfiling I/O virtual file driver (VFD) should be compiled])
|
|
AC_DEFINE([HAVE_IOC_VFD], [1],
|
|
[Define if the I/O Concentrator virtual file driver (VFD) should be compiled])
|
|
|
|
if test "X${PARALLEL}" != "Xyes"; then
|
|
AC_MSG_ERROR([--enable-parallel is required for --enable-subfiling-vfd])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check for MPI_Comm_split_type availability
|
|
##
|
|
AC_MSG_CHECKING([for MPI_Comm_split_type function])
|
|
|
|
AC_LINK_IFELSE(
|
|
[AC_LANG_PROGRAM(
|
|
[[
|
|
#include <mpi.h>
|
|
]],
|
|
[[
|
|
MPI_Comm intra_comm;
|
|
MPI_Init(0, (void *) 0);
|
|
MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, 0, MPI_INFO_NULL, &intra_comm);
|
|
]]
|
|
)],
|
|
[AC_MSG_RESULT([yes])],
|
|
[AC_MSG_RESULT([no])
|
|
AC_MSG_ERROR([unable to link MPI program that uses MPI_Comm_split_type])
|
|
]
|
|
)
|
|
|
|
# Check for threads availability
|
|
if test "x$THREADS" = "xno"; then
|
|
AC_MSG_ERROR([Subfiling VFD requires thread operations support.])
|
|
fi
|
|
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
## Subfiling and IOC VFD files are not built if not required.
|
|
AM_CONDITIONAL([SUBFILING_VFD_CONDITIONAL], [test "X$SUBFILING_VFD" = "Xyes"])
|
|
# IOC VFD is currently only built when subfiling is enabled
|
|
AM_CONDITIONAL([IOC_VFD_CONDITIONAL], [test "X$SUBFILING_VFD" = "Xyes"])
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if Direct I/O driver is enabled by --enable-direct-vfd
|
|
##
|
|
AC_SUBST([DIRECT_VFD])
|
|
|
|
## Default is no direct VFD
|
|
DIRECT_VFD=no
|
|
|
|
AC_CACHE_VAL([hdf5_cv_direct_io],
|
|
AC_CHECK_DECL([O_DIRECT], [hdf5_cv_direct_io=yes], [hdf5_cv_direct_io=no], [[#include <fcntl.h>]]))
|
|
AC_CACHE_VAL([hdf5_cv_posix_memalign],
|
|
AC_CHECK_FUNC([posix_memalign], [hdf5_cv_posix_memalign=yes], [hdf5_cv_posix_memalign=no]))
|
|
|
|
AC_MSG_CHECKING([if the direct I/O virtual file driver (VFD) is enabled])
|
|
|
|
AC_ARG_ENABLE([direct-vfd],
|
|
[AS_HELP_STRING([--enable-direct-vfd],
|
|
[Build the direct I/O virtual file driver (VFD).
|
|
This is based on the POSIX (sec2) VFD and
|
|
requires the open() call to take the O_DIRECT
|
|
flag. [default=no]])],
|
|
[DIRECT_VFD=$enableval], [DIRECT_VFD=no])
|
|
|
|
if test "X$DIRECT_VFD" = "Xyes"; then
|
|
if test ${hdf5_cv_direct_io} = "yes" && test ${hdf5_cv_posix_memalign} = "yes" ; then
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE([HAVE_DIRECT], [1],
|
|
[Define if the direct I/O virtual file driver (VFD) should be compiled])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
DIRECT_VFD=no
|
|
AC_MSG_ERROR([The direct VFD was requested but cannot be built. This is either
|
|
due to O_DIRECT not being found in fcntl.h or a lack of
|
|
posix_memalign() on your system. Please re-configure without
|
|
specifying --enable-direct-vfd.])
|
|
fi
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
## Direct VFD files are not built if not required.
|
|
AM_CONDITIONAL([DIRECT_VFD_CONDITIONAL], [test "X$DIRECT_VFD" = "Xyes"])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check whether the Mirror VFD can be built.
|
|
## Auto-enabled if the required libraries are present.
|
|
##
|
|
AC_SUBST([MIRROR_VFD])
|
|
|
|
## Default is no Mirror VFD
|
|
MIRROR_VFD=no
|
|
|
|
AC_ARG_ENABLE([mirror-vfd],
|
|
[AS_HELP_STRING([--enable-mirror-vfd],
|
|
[Build the socket-based Mirror virtual file driver (VFD).
|
|
[default=no]])],
|
|
[MIRROR_VFD=$enableval], [MIRROR_VFD=no])
|
|
|
|
if test "X$MIRROR_VFD" = "Xyes"; then
|
|
|
|
AC_CHECK_HEADERS([arpa/inet.h],, [unset MIRROR_VFD])
|
|
AC_CHECK_HEADERS([netinet/in.h],, [unset MIRROR_VFD])
|
|
AC_CHECK_HEADERS([netdb.h],, [unset MIRROR_VFD])
|
|
AC_CHECK_HEADERS([sys/socket.h],, [unset MIRROR_VFD])
|
|
AC_CHECK_FUNC([fork], [], [unset MIRROR_VFD])
|
|
|
|
AC_MSG_CHECKING([if the Mirror virtual file driver (VFD) can be built])
|
|
if test "X$MIRROR_VFD" = "Xyes"; then
|
|
AC_DEFINE([HAVE_MIRROR_VFD], [1],
|
|
[Define whether the Mirror virtual file driver (VFD) will be compiled])
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
MIRROR_VFD=no
|
|
AC_MSG_ERROR([The Mirror VFD cannot be built.
|
|
Missing one or more of: arpa/inet.h, netinet/in.h,
|
|
netdb.h, sys/socket.h, fork().])
|
|
fi
|
|
else
|
|
AC_MSG_CHECKING([if the Mirror virtual file driver (VFD) is enabled])
|
|
AC_MSG_RESULT([no])
|
|
MIRROR_VFD=no
|
|
fi
|
|
|
|
## Mirror VFD files built only if able.
|
|
AM_CONDITIONAL([MIRROR_VFD_CONDITIONAL], [test "X$MIRROR_VFD" = "Xyes"])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Check if Read-Only S3 virtual file driver is enabled by --enable-ros3-vfd
|
|
##
|
|
AC_SUBST([ROS3_VFD])
|
|
|
|
## Default is no Read-Only S3 VFD
|
|
ROS3_VFD=no
|
|
|
|
AC_ARG_ENABLE([ros3-vfd],
|
|
[AS_HELP_STRING([--enable-ros3-vfd],
|
|
[Build the Read-Only S3 virtual file driver (VFD).
|
|
[default=no]])],
|
|
[ROS3_VFD=$enableval], [ROS3_VFD=no])
|
|
|
|
if test "X$ROS3_VFD" = "Xyes"; then
|
|
AC_CHECK_HEADERS([curl/curl.h],, [unset ROS3_VFD])
|
|
AC_CHECK_HEADERS([openssl/evp.h],, [unset ROS3_VFD])
|
|
AC_CHECK_HEADERS([openssl/hmac.h],, [unset ROS3_VFD])
|
|
AC_CHECK_HEADERS([openssl/sha.h],, [unset ROS3_VFD])
|
|
if test "X$ROS3_VFD" = "Xyes"; then
|
|
AC_CHECK_LIB([curl], [curl_global_init],, [unset ROS3_VFD])
|
|
AC_CHECK_LIB([crypto], [EVP_sha256],, [unset ROS3_VFD])
|
|
fi
|
|
|
|
AC_MSG_CHECKING([if the Read-Only S3 virtual file driver (VFD) is enabled])
|
|
if test "X$ROS3_VFD" = "Xyes"; then
|
|
AC_DEFINE([HAVE_ROS3_VFD], [1],
|
|
[Define whether the Read-Only S3 virtual file driver (VFD) should be compiled])
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
ROS3_VFD=no
|
|
AC_MSG_ERROR([The Read-Only S3 VFD was requested but cannot be built.
|
|
Please check that openssl and cURL are available on your
|
|
system, and/or re-configure without option
|
|
--enable-ros3-vfd.])
|
|
fi
|
|
else
|
|
AC_MSG_CHECKING([if the Read-Only S3 virtual file driver (VFD) is enabled])
|
|
AC_MSG_RESULT([no])
|
|
ROS3_VFD=no
|
|
|
|
fi
|
|
|
|
## Read-only S3 files are not built if not required.
|
|
AM_CONDITIONAL([ROS3_VFD_CONDITIONAL], [test "X$ROS3_VFD" = "Xyes"])
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Is libhdfs (Hadoop Distributed File System) present?
|
|
## It might be specified with the `--with-libhdfs' command-line switch.
|
|
## If found, enables the HDFS VFD.
|
|
##
|
|
AC_SUBST([HAVE_LIBHDFS])
|
|
AC_ARG_WITH([libhdfs],
|
|
[AS_HELP_STRING([--with-libhdfs=DIR],
|
|
[Provide libhdfs library to enable HDFS virtual file driver (VFD) [default=no]])],,
|
|
[withval=no])
|
|
|
|
case $withval in
|
|
no)
|
|
HAVE_LIBHDFS="no"
|
|
AC_MSG_CHECKING([for libhdfs])
|
|
AC_MSG_RESULT([suppressed])
|
|
;;
|
|
*)
|
|
HAVE_LIBHDFS="yes"
|
|
case "$withval" in
|
|
*,*)
|
|
libhdfs_inc="`echo $withval |cut -f1 -d,`"
|
|
libhdfs_lib="`echo $withval |cut -f2 -d, -s`"
|
|
;;
|
|
yes)
|
|
libhdfs_inc="$HADOOP_HOME/include"
|
|
libhdfs_lib="$HADOOP_HOME/lib"
|
|
;;
|
|
*)
|
|
if test -n "$withval"; then
|
|
libhdfs_inc="$withval/include"
|
|
libhdfs_lib="$withval/lib"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
if test -n "$libhdfs_inc"; then
|
|
CPPFLAGS="$CPPFLAGS -I$libhdfs_inc"
|
|
AM_CPPFLAGS="$AM_CPPFLAGS -I$libhdfs_inc"
|
|
fi
|
|
AC_CHECK_HEADERS([hdfs.h],,
|
|
[unset HAVE_LIBHDFS])
|
|
|
|
if test "x$HAVE_LIBHDFS" = "xyes"; then
|
|
dnl Check for '-ljvm' needed by libhdfs
|
|
JNI_LDFLAGS=""
|
|
if test $JAVA_HOME != ""
|
|
then
|
|
JNI_LDFLAGS="-L$JAVA_HOME/jre/lib/$OS_ARCH -L$JAVA_HOME/jre/lib/$OS_ARCH/server"
|
|
fi
|
|
ldflags_bak=$LDFLAGS
|
|
LDFLAGS="$LDFLAGS $JNI_LDFLAGS"
|
|
AC_CHECK_LIB([jvm], [JNI_GetCreatedJavaVMs])
|
|
LDFLAGS=$ldflags_bak
|
|
AC_SUBST([JNI_LDFLAGS])
|
|
if test -n "$libhdfs_lib"; then
|
|
## Hadoop distribution hides libraries down one level in 'lib/native'
|
|
libhdfs_lib="$libhdfs_lib/native"
|
|
LDFLAGS="$LDFLAGS -L$libhdfs_lib $JNI_LDFLAGS"
|
|
AM_LDFLAGS="$AM_LDFLAGS -L$libhdfs_lib $JNI_LDFLAGS"
|
|
fi
|
|
AC_CHECK_LIB([hdfs], [hdfsConnect],,
|
|
[unset HAVE_LIBHDFS])
|
|
fi
|
|
|
|
if test -z "$HAVE_LIBHDFS"; then
|
|
AC_MSG_ERROR([Set to use libhdfs library, but could not find or use
|
|
libhdfs. Please verify that the path to HADOOP_HOME is
|
|
valid, and/or reconfigure without --with-libhdfs.])
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
if test "x$HAVE_LIBHDFS" = "xyes"; then
|
|
AC_DEFINE([HAVE_LIBHDFS], [1],
|
|
[Proceed to build with libhdfs])
|
|
fi
|
|
|
|
## Read-only HDFS files are not built if not required.
|
|
AM_CONDITIONAL([HDFS_VFD_CONDITIONAL], [test "X$HAVE_LIBHDFS" = "Xyes"])
|
|
|
|
## Checkpoint the cache
|
|
AC_CACHE_SAVE
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Use custom examples path.
|
|
##
|
|
AC_MSG_CHECKING([for custom examples path definition])
|
|
AC_ARG_WITH([examplesdir],
|
|
[AS_HELP_STRING([--with-examplesdir=location],
|
|
[Specify path for examples
|
|
[default="DATAROOTDIR/hdf5_examples"]])],,
|
|
withval="${datarootdir}/hdf5_examples")
|
|
|
|
if test "X$withval" = "X"; then
|
|
AC_MSG_RESULT([default])
|
|
examplesdir="${datarootdir}/hdf5_examples"
|
|
else
|
|
AC_MSG_RESULT([$withval])
|
|
examplesdir=$withval
|
|
fi
|
|
|
|
AC_SUBST([examplesdir])
|
|
AC_DEFINE_UNQUOTED([EXAMPLESDIR], ["$examplesdir"],
|
|
[Define the examples directory])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Enable custom plugin default path for library. It requires SHARED support.
|
|
##
|
|
AC_MSG_CHECKING([for custom plugin default path definition])
|
|
AC_ARG_WITH([default-plugindir],
|
|
[AS_HELP_STRING([--with-default-plugindir=location],
|
|
[Specify default location for plugins
|
|
[default="/usr/local/hdf5/lib/plugin"]])],,
|
|
withval="/usr/local/hdf5/lib/plugin")
|
|
|
|
if test "X$withval" = "X"; then
|
|
AC_MSG_RESULT([default])
|
|
default_plugindir="/usr/local/hdf5/lib/plugin"
|
|
else
|
|
AC_MSG_RESULT([$withval])
|
|
default_plugindir=$withval
|
|
fi
|
|
|
|
AC_DEFINE_UNQUOTED([DEFAULT_PLUGINDIR], ["$default_plugindir"],
|
|
[Define the default plugins path to compile])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Decide whether the presence of user's exception handling functions is
|
|
## checked and data conversion exceptions are returned. This is mainly
|
|
## for the speed optimization of hard conversions. Soft conversions can
|
|
## actually benefit little.
|
|
##
|
|
AC_MSG_CHECKING([whether exception handling functions are checked during data conversions])
|
|
AC_ARG_ENABLE([dconv-exception],
|
|
[AS_HELP_STRING([--enable-dconv-exception],
|
|
[Check exception handling functions during
|
|
data conversions [default=yes]])],
|
|
[DCONV_EXCEPTION=$enableval], [DCONV_EXCEPTION=yes])
|
|
|
|
if test "$DCONV_EXCEPTION" = "yes"; then
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE([WANT_DCONV_EXCEPTION], [1],
|
|
[Check exception handling functions during data conversions])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Decide whether the data accuracy has higher priority during data
|
|
## conversions. If not, some hard conversions will still be preferred even
|
|
## though the data may be wrong (for example, some compilers don't
|
|
## support denormalized floating values) to maximize speed.
|
|
##
|
|
AC_MSG_CHECKING([whether data accuracy is guaranteed during data conversions])
|
|
AC_ARG_ENABLE([dconv-accuracy],
|
|
[AS_HELP_STRING([--enable-dconv-accuracy],
|
|
[Guarantee data accuracy during
|
|
data conversions [default=yes]])],
|
|
[DATA_ACCURACY=$enableval], [DATA_ACCURACY=yes])
|
|
|
|
if test "$DATA_ACCURACY" = "yes"; then
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE([WANT_DATA_ACCURACY], [1],
|
|
[Data accuracy is preferred to speed during data conversions])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Set the flag to indicate that the machine has window style pathname,
|
|
## that is, "drive-letter:\" (e.g. "C:") or "drive-letter:/" (e.g. "C:/").
|
|
## (This flag should be _unset_ for all machines, except for Windows, where
|
|
## it's set in the custom Windows H5pubconf.h file)
|
|
##
|
|
AC_MSG_CHECKING([if the machine has window style path name])
|
|
|
|
case "$host_os" in
|
|
*mingw*)
|
|
AC_DEFINE([HAVE_WINDOW_PATH], [1],
|
|
[Define if your system has Windows-style path name.])
|
|
AC_MSG_RESULT([yes])
|
|
;;
|
|
*)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
esac
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Set the flag to indicate that the machine is using a special algorithm to convert
|
|
## 'long double' to '(unsigned) long' values. (This flag should only be set for
|
|
## the IBM Power Linux. When the bit sequence of long double is
|
|
## 0x4351ccf385ebc8a0bfcc2a3c3d855620, the converted value of (unsigned)long
|
|
## is 0x004733ce17af227f, not the same as the library's conversion to 0x004733ce17af2282.
|
|
## The machine's conversion gets the correct value. We define the macro and disable
|
|
## this kind of test until we figure out what algorithm they use.
|
|
##
|
|
## CROSS-COMPILING: Assume 'no'
|
|
AC_MSG_CHECKING([if using special algorithm to convert long double to (unsigned) long values])
|
|
|
|
## NOTE: Place all configure test programs into cmake's source file, then use a preprocessor directive
|
|
## to select the proper test program. This is done by echoing the #define and cat'ing the cmake
|
|
## source file. (HDFFV-9467)
|
|
|
|
TEST_SRC="`(echo \"#define H5_LDOUBLE_TO_LONG_SPECIAL_TEST 1\"; cat $srcdir/config/cmake/ConversionTests.c)`"
|
|
|
|
if test ${ac_cv_sizeof_long_double} = 0; then
|
|
hdf5_cv_ldouble_to_long_special=${hdf5_cv_ldouble_to_long_special=no}
|
|
else
|
|
AC_CACHE_VAL([hdf5_cv_ldouble_to_long_special],
|
|
[AC_RUN_IFELSE(
|
|
[AC_LANG_SOURCE([$TEST_SRC])]
|
|
, [hdf5_cv_ldouble_to_long_special=yes], [hdf5_cv_ldouble_to_long_special=no], [hdf5_cv_ldouble_to_long_special=no])])
|
|
fi
|
|
|
|
if test ${hdf5_cv_ldouble_to_long_special} = "yes"; then
|
|
AC_DEFINE([LDOUBLE_TO_LONG_SPECIAL], [1],
|
|
[Define if your system converts long double to (unsigned) long values with special algorithm.])
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Set the flag to indicate that the machine is using a special algorithm
|
|
## to convert some values of '(unsigned) long' to 'long double' values.
|
|
## (This flag should be off for all machines, except for IBM Power Linux,
|
|
## when the bit sequences are 003fff..., 007fff..., 00ffff..., 01ffff...,
|
|
## ..., 7fffff..., the compiler uses a unknown algorithm. We define a
|
|
## macro and skip the test for now until we know about the algorithm.
|
|
##
|
|
## CROSS-COMPILING: Assume 'no'
|
|
AC_MSG_CHECKING([if using special algorithm to convert (unsigned) long to long double values])
|
|
|
|
TEST_SRC="`(echo \"#define H5_LONG_TO_LDOUBLE_SPECIAL_TEST 1\"; cat $srcdir/config/cmake/ConversionTests.c)`"
|
|
|
|
if test ${ac_cv_sizeof_long_double} = 0; then
|
|
hdf5_cv_long_to_ldouble_special=${hdf5_cv_long_to_ldouble_special=no}
|
|
else
|
|
AC_CACHE_VAL([hdf5_cv_long_to_ldouble_special],
|
|
[AC_RUN_IFELSE(
|
|
[AC_LANG_SOURCE([$TEST_SRC])]
|
|
, [hdf5_cv_long_to_ldouble_special=yes], [hdf5_cv_long_to_ldouble_special=no], [hdf5_cv_long_to_ldouble_special=no])])
|
|
fi
|
|
|
|
if test ${hdf5_cv_long_to_ldouble_special} = "yes"; then
|
|
AC_DEFINE([LONG_TO_LDOUBLE_SPECIAL], [1],
|
|
[Define if your system can convert (unsigned) long to long double values with special algorithm.])
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Set the flag to indicate that the machine can accurately convert
|
|
## 'long double' to '(unsigned) long long' values. (This flag should
|
|
## be set for all machines, except for Mac OS 10.4, SGI IRIX64 6.5 and
|
|
## Powerpc Linux using XL compilers.
|
|
## When the bit sequence of long double is 0x4351ccf385ebc8a0bfcc2a3c...,
|
|
## the values of (unsigned)long long start to go wrong on these
|
|
## two machines. Adjusting it higher to 0x4351ccf385ebc8a0dfcc... or
|
|
## 0x4351ccf385ebc8a0ffcc... will make the converted values wildly wrong.
|
|
## This test detects this wrong behavior and disable the test.
|
|
##
|
|
## CROSS-COMPILING: Assume 'yes'
|
|
AC_MSG_CHECKING([if correctly converting long double to (unsigned) long long values])
|
|
|
|
TEST_SRC="`(echo \"#define H5_LDOUBLE_TO_LLONG_ACCURATE_TEST 1\"; cat $srcdir/config/cmake/ConversionTests.c)`"
|
|
|
|
if test ${ac_cv_sizeof_long_double} = 0; then
|
|
hdf5_cv_ldouble_to_llong_accurate=${hdf5_cv_ldouble_to_llong_accurate=no}
|
|
else
|
|
AC_CACHE_VAL([hdf5_cv_ldouble_to_llong_accurate],
|
|
[AC_RUN_IFELSE([AC_LANG_SOURCE([$TEST_SRC])],
|
|
[hdf5_cv_ldouble_to_llong_accurate=yes], [hdf5_cv_ldouble_to_llong_accurate=no], [hdf5_cv_ldouble_to_llong_accurate=yes])])
|
|
fi
|
|
|
|
if test ${hdf5_cv_ldouble_to_llong_accurate} = "yes"; then
|
|
AC_DEFINE([LDOUBLE_TO_LLONG_ACCURATE], [1],
|
|
[Define if your system can convert long double to (unsigned) long long values correctly.])
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Set the flag to indicate that the machine can accurately convert
|
|
## '(unsigned) long long' to 'long double' values. (This flag should be
|
|
## set for all machines, except for Mac OS 10.4 and Powerpc Linux using
|
|
## XL compilers.
|
|
## When the bit sequences are 003fff..., 007fff..., 00ffff..., 01ffff...,
|
|
## ..., 7fffff..., the converted values are twice as big as they should be.
|
|
##
|
|
## CROSS-COMPILING: Assume 'yes'
|
|
AC_MSG_CHECKING([if correctly converting (unsigned) long long to long double values])
|
|
|
|
TEST_SRC="`(echo \"#define H5_LLONG_TO_LDOUBLE_CORRECT_TEST 1\"; cat $srcdir/config/cmake/ConversionTests.c)`"
|
|
|
|
if test ${ac_cv_sizeof_long_double} = 0; then
|
|
hdf5_cv_llong_to_ldouble_correct=${hdf5_cv_llong_to_ldouble_correct=no}
|
|
else
|
|
AC_CACHE_VAL([hdf5_cv_llong_to_ldouble_correct],
|
|
[AC_RUN_IFELSE([AC_LANG_SOURCE([$TEST_SRC])],
|
|
[hdf5_cv_llong_to_ldouble_correct=yes], [hdf5_cv_llong_to_ldouble_correct=no], [hdf5_cv_llong_to_ldouble_correct=yes])])
|
|
fi
|
|
|
|
if test ${hdf5_cv_llong_to_ldouble_correct} = "yes"; then
|
|
AC_DEFINE([LLONG_TO_LDOUBLE_CORRECT], [1],
|
|
[Define if your system can convert (unsigned) long long to long double values correctly.])
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Set the flag to indicate that the machine is IBM ppc64le and cannot
|
|
## accurately convert some long double values.
|
|
##
|
|
## CROSS-COMPILING: Assume 'yes'
|
|
AC_MSG_CHECKING([if the system is IBM ppc64le and cannot correctly convert some long double values])
|
|
|
|
TEST_SRC="`(echo \"#define H5_DISABLE_SOME_LDOUBLE_CONV_TEST 1\"; cat $srcdir/config/cmake/ConversionTests.c)`"
|
|
|
|
if test ${ac_cv_sizeof_long_double} = 0; then
|
|
hdf5_cv_disable_some_ldouble_conv=${hdf5_cv_disable_some_ldouble_conv=no}
|
|
else
|
|
AC_CACHE_VAL([hdf5_cv_disable_some_ldouble_conv],
|
|
[AC_RUN_IFELSE([AC_LANG_SOURCE([$TEST_SRC])],
|
|
[hdf5_cv_disable_some_ldouble_conv=yes], [hdf5_cv_disable_some_ldouble_conv=no], [hdf5_cv_disable_some_ldouble_conv=yes])])
|
|
fi
|
|
|
|
if test ${hdf5_cv_disable_some_ldouble_conv} = "yes"; then
|
|
AC_DEFINE([DISABLE_SOME_LDOUBLE_CONV], [1],
|
|
[Define if your system is IBM ppc64le and cannot convert some long double values correctly.])
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Set some variables for general configuration information to be saved
|
|
## and installed with the libraries (used to generate libhdf5.settings).
|
|
##
|
|
|
|
## HDF5 version from the first line of the README.md file.
|
|
H5_VERSION="`cut -d' ' -f3 $srcdir/README.md | head -1`"
|
|
AC_SUBST([H5_VERSION])
|
|
|
|
## Configuration date
|
|
AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date`"
|
|
|
|
## User doing the configuration
|
|
AC_SUBST([CONFIG_USER]) CONFIG_USER="`whoami`@`hostname`"
|
|
if test -n "$ORGANIZATION"; then
|
|
CONFIG_USER="$CONFIG_USER at $ORGANIZATION"
|
|
fi
|
|
|
|
## Configuration mode (production, debug, etc.) saved above.
|
|
AC_SUBST([CONFIG_MODE])
|
|
|
|
## 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
|
|
|
|
|
|
if test "X$ac_cv_c_bigendian" = "Xyes"; then
|
|
WORDS_BIGENDIAN="yes"
|
|
else
|
|
WORDS_BIGENDIAN="no"
|
|
fi
|
|
AC_SUBST([WORDS_BIGENDIAN])
|
|
|
|
## Parallel support? (set above except empty if none)
|
|
PARALLEL=${PARALLEL:-no}
|
|
|
|
## Parallel writes to filtered datasets support?
|
|
PARALLEL_FILTERED_WRITES=${PARALLEL_FILTERED_WRITES:-no}
|
|
|
|
## >2GB writes in parallel support?
|
|
LARGE_PARALLEL_IO=${LARGE_PARALLEL_IO:-no}
|
|
|
|
## Compiler with version information. This consists of the full path
|
|
## name of the compiler and the reported version number.
|
|
AC_SUBST([CC_VERSION])
|
|
## Strip anything that looks like a flag off of $CC
|
|
CC_NOFLAGS=`echo $CC | sed 's/ -.*//'`
|
|
|
|
if `echo $CC_NOFLAGS | grep ^/ >/dev/null 2>&1`; then
|
|
CC_VERSION="$CC"
|
|
else
|
|
CC_VERSION="$CC";
|
|
for x in `echo $PATH | sed -e 's/:/ /g'`; do
|
|
if test -x $x/$CC_NOFLAGS; then
|
|
CC_VERSION="$x/$CC"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
if test -n "$cc_version_info"; then
|
|
CC_VERSION="$CC_VERSION ( $cc_version_info)"
|
|
fi
|
|
|
|
AC_SUBST([FC_VERSION])
|
|
## Strip anything that looks like a flag off of $FC
|
|
FC_NOFLAGS=`echo $FC | sed 's/ -.*//'`
|
|
|
|
if `echo $FC_NOFLAGS | grep ^/ >/dev/null 2>&1`; then
|
|
FC_VERSION="$FC"
|
|
else
|
|
FC_VERSION="$FC";
|
|
for x in `echo $PATH | sed -e 's/:/ /g'`; do
|
|
if test -x $x/$FC_NOFLAGS; then
|
|
FC_VERSION="$x/$FC"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
if test -n "$fc_version_info"; then
|
|
FC_VERSION="$FC_VERSION ( $fc_version_info)"
|
|
fi
|
|
|
|
AC_SUBST([CXX_VERSION])
|
|
## Strip anything that looks like a flag off of $CXX
|
|
CXX_NOFLAGS=`echo $CXX | sed 's/ -.*//'`
|
|
|
|
if `echo $CXX_NOFLAGS | grep ^/ >/dev/null 2>&1`; then
|
|
CXX_VERSION="$CXX"
|
|
else
|
|
CXX_VERSION="$CXX";
|
|
for x in `echo $PATH | sed -e 's/:/ /g'`; do
|
|
if test -x $x/$CXX_NOFLAGS; then
|
|
CXX_VERSION="$x/$CXX"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
if test -n "$cxx_version_info"; then
|
|
CXX_VERSION="$CXX_VERSION ( $cxx_version_info)"
|
|
fi
|
|
|
|
AC_SUBST([JAVA_VERSION])
|
|
## Strip anything that looks like a flag off of $JAVA
|
|
JAVA_NOFLAGS=`echo $JAVA | sed 's/ -.*//'`
|
|
|
|
if `echo $JAVA_NOFLAGS | grep ^/ >/dev/null 2>&1`; then
|
|
JAVA_VERSION="$JAVA"
|
|
else
|
|
JAVA_VERSION="$JAVA";
|
|
for x in `echo $PATH | sed -e 's/:/ /g'`; do
|
|
if test -x $x/$JAVA_NOFLAGS; then
|
|
JAVA_VERSION="$x/$JAVA"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
java_version_info=`$JAVA -version 2>&1 |\
|
|
grep 'version' | sed -e 's/version "//' | sed -e 's/"//'`
|
|
if test -n "$java_version_info"; then
|
|
JAVA_VERSION="$JAVA_VERSION ($java_version_info)"
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Where is the root of the source tree. Give an absolute address so
|
|
## we can find it no matter which directory of the distribution is our
|
|
## current directory. The built-in pwd fails on some systems, but the
|
|
## /bin/pwd version works OK.
|
|
##
|
|
if test -x /bin/pwd; then
|
|
pwd=/bin/pwd
|
|
else
|
|
pwd=pwd
|
|
fi
|
|
AC_SUBST([ROOT]) ROOT="`$pwd`"
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Some programs shouldn't be built by default (e.g., programs to generate
|
|
## data files used by tests, some optional tests).
|
|
## Check if they want such programs built anyway.
|
|
##
|
|
AC_MSG_CHECKING([additional programs should be built])
|
|
AC_ARG_ENABLE([build-all],
|
|
[AS_HELP_STRING([--enable-build-all],
|
|
[Build helper programs that only developers should need [default=no]])],
|
|
[BUILD_ALL=$enableval],
|
|
[BUILD_ALL=no])
|
|
AC_MSG_RESULT([$BUILD_ALL])
|
|
AM_CONDITIONAL([BUILD_ALL_CONDITIONAL], [test "X$BUILD_ALL" = "Xyes"])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Enable deprecated public API symbols
|
|
##
|
|
|
|
## Enabled unless the build mode is clean.
|
|
if test "X-$BUILD_MODE" = "X-clean" ; then
|
|
DEPREC_SYMBOLS=no
|
|
else
|
|
DEPREC_SYMBOLS=yes
|
|
fi
|
|
|
|
AC_SUBST([DEPRECATED_SYMBOLS])
|
|
AC_MSG_CHECKING([if deprecated public symbols are available]);
|
|
AC_ARG_ENABLE([deprecated-symbols],
|
|
[AS_HELP_STRING([--enable-deprecated-symbols],
|
|
[Enable deprecated public API symbols.
|
|
[default=yes (unless build mode = clean)]
|
|
])],
|
|
[DEPREC_SYMBOLS=$enableval])
|
|
|
|
case "X-$DEPREC_SYMBOLS" in
|
|
X-yes)
|
|
AC_MSG_RESULT([yes])
|
|
DEPRECATED_SYMBOLS=yes
|
|
;;
|
|
X-no|*)
|
|
AC_MSG_RESULT([no])
|
|
DEPRECATED_SYMBOLS=no
|
|
AC_DEFINE([NO_DEPRECATED_SYMBOLS], [1],
|
|
[Define if deprecated public API symbols are disabled])
|
|
;;
|
|
esac
|
|
|
|
## --------------------------------------------------------------------------
|
|
## Which version of the public APIs should the 'base' versioned symbols use?
|
|
##
|
|
|
|
AC_SUBST([DEFAULT_API_VERSION])
|
|
AC_MSG_CHECKING([which version of public symbols to use by default])
|
|
AC_ARG_WITH([default-api-version],
|
|
[AS_HELP_STRING([--with-default-api-version=(default|v16|v18|v110|v112|v114|v116)],
|
|
[Specify default release version of public symbols
|
|
[default=v116]])],,
|
|
[withval=v116])
|
|
|
|
## Allowing "default" allows the GitHub CI to check that we didn't forget
|
|
## to change the defaults when creating a new major version
|
|
if test "X$withval" = "Xv16"; then
|
|
AC_MSG_RESULT([v16])
|
|
DEFAULT_API_VERSION=v16
|
|
AC_DEFINE([USE_16_API_DEFAULT], [1],
|
|
[Define using v1.6 public API symbols by default])
|
|
elif test "X$withval" = "Xv18"; then
|
|
AC_MSG_RESULT([v18])
|
|
DEFAULT_API_VERSION=v18
|
|
AC_DEFINE([USE_18_API_DEFAULT], [1],
|
|
[Define using v1.8 public API symbols by default])
|
|
elif test "X$withval" = "Xv110"; then
|
|
AC_MSG_RESULT([v110])
|
|
DEFAULT_API_VERSION=v110
|
|
AC_DEFINE([USE_110_API_DEFAULT], [1],
|
|
[Define using v1.10 public API symbols by default])
|
|
elif test "X$withval" = "Xv112"; then
|
|
AC_MSG_RESULT([v112])
|
|
DEFAULT_API_VERSION=v112
|
|
AC_DEFINE([USE_112_API_DEFAULT], [1],
|
|
[Define using v1.12 public API symbols by default])
|
|
elif test "X$withval" = "Xv114"; then
|
|
AC_MSG_RESULT([v114])
|
|
DEFAULT_API_VERSION=v114
|
|
AC_DEFINE([USE_114_API_DEFAULT], [1],
|
|
[Define using v1.14 public API symbols by default])
|
|
elif test "X$withval" = "Xv116" -o "X$withval" = "Xdefault"; then
|
|
AC_MSG_RESULT([v116])
|
|
DEFAULT_API_VERSION=v116
|
|
AC_DEFINE([USE_116_API_DEFAULT], [1],
|
|
[Define using v1.16 public API symbols by default])
|
|
else
|
|
AC_MSG_ERROR([invalid version of public symbols given])
|
|
fi
|
|
|
|
## It's an error to try to disable deprecated public API symbols while
|
|
## choosing an older version of the public API as the default. However,
|
|
## if the user insists on doing this via the --enable-unsupported configure
|
|
## flag, we'll let them.
|
|
if test "X${ALLOW_UNSUPPORTED}" != "Xyes"; then
|
|
if test "X${DEFAULT_API_VERSION}" != "Xv116" -a "X${DEPRECATED_SYMBOLS}" = "Xno" ; then
|
|
AC_MSG_ERROR([Removing old public API symbols not allowed when using them as default public API symbols. Use --enable-unsupported to override this error.])
|
|
fi
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Enable strict file format checks
|
|
##
|
|
AC_SUBST([STRICT_FORMAT_CHECKS])
|
|
AC_MSG_CHECKING([whether to perform strict file format checks]);
|
|
AC_ARG_ENABLE([strict-format-checks],
|
|
[AS_HELP_STRING([--enable-strict-format-checks],
|
|
[Enable strict file format checks.
|
|
[default=yes if debug build, otherwise no]
|
|
])],
|
|
[STRICT_FORMAT_CHECKS=$enableval])
|
|
|
|
## Set the default level. This depends on the compiler mode.
|
|
if test "X-$STRICT_FORMAT_CHECKS" = X- ; then
|
|
if test "X-$BUILD_MODE" = "X-debug" ; then
|
|
STRICT_FORMAT_CHECKS=yes
|
|
else
|
|
STRICT_FORMAT_CHECKS=no
|
|
fi
|
|
fi
|
|
|
|
case "X-$STRICT_FORMAT_CHECKS" in
|
|
X-yes)
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE([STRICT_FORMAT_CHECKS], [1],
|
|
[Define if strict file format checks are enabled])
|
|
;;
|
|
X-no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $STRICT_FORMAT_CHECKS])
|
|
;;
|
|
esac
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Enable use of pread/pwrite instead of read/write in certain VFDs.
|
|
##
|
|
AC_SUBST([PREADWRITE])
|
|
|
|
## Check these first to avoid interspersed output in the AC_ARG_ENABLE line
|
|
## below. (Probably overkill to check for both, but we'll be extra careful)
|
|
PREADWRITE_HAVE_BOTH=yes
|
|
AC_CHECK_FUNC([pread], [], [PREADWRITE_HAVE_BOTH=no])
|
|
AC_CHECK_FUNC([pwrite], [], [PREADWRITE_HAVE_BOTH=no])
|
|
|
|
AC_MSG_CHECKING([whether to use pread/pwrite instead of read/write in certain VFDs])
|
|
AC_ARG_ENABLE([preadwrite],
|
|
[AS_HELP_STRING([--enable-preadwrite],
|
|
[Enable using pread/pwrite instead of read/write in sec2/log/core VFDs.
|
|
[default=yes if pread/pwrite are present]])],
|
|
[PREADWRITE=$enableval])
|
|
|
|
## Set the default level.
|
|
if test "X-$PREADWRITE" = X- ; then
|
|
PREADWRITE=yes
|
|
fi
|
|
|
|
case "X-$PREADWRITE" in
|
|
X-yes)
|
|
if test "X-$PREADWRITE_HAVE_BOTH" = "X-yes"; then
|
|
AC_DEFINE([HAVE_PREADWRITE], [1], [Define if both pread and pwrite exist.])
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
;;
|
|
X-no)
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
*)
|
|
AC_MSG_ERROR([Unrecognized value: $PREADWRITE])
|
|
;;
|
|
esac
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Enable embedded library information
|
|
##
|
|
AC_MSG_CHECKING([whether to have library information embedded in the executables])
|
|
AC_ARG_ENABLE([embedded-libinfo],
|
|
[AS_HELP_STRING([--enable-embedded-libinfo],
|
|
[Enable embedded library information [default=yes]])],
|
|
[enable_embedded_libinfo=$enableval],
|
|
[enable_embedded_libinfo=yes])
|
|
|
|
if test "${enable_embedded_libinfo}" = "yes"; then
|
|
AC_MSG_RESULT([yes])
|
|
BUILD_SETTINGS_FILE="src/H5build_settings.autotools.c.in"
|
|
AC_DEFINE([HAVE_EMBEDDED_LIBINFO], [1],
|
|
[Define if library information should be embedded in the executables])
|
|
else
|
|
BUILD_SETTINGS_FILE="src/H5build_settings.off.c.in"
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Restore user's CFLAGS.
|
|
CFLAGS="$saved_user_CFLAGS"
|
|
FCFLAGS="$saved_user_FCFLAGS"
|
|
CXXFLAGS="$saved_user_CXXFLAGS"
|
|
CPPFLAGS="$saved_user_CPPFLAGS"
|
|
JAVACFLAGS="$saved_user_JAVACFLAGS"
|
|
JAVAFLAGS="$saved_user_JAVAFLAGS"
|
|
LDFLAGS="$saved_user_LDFLAGS"
|
|
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Create automake conditionals to tell automake makefiles which directories
|
|
## need to be compiled
|
|
|
|
AM_CONDITIONAL([BUILD_CXX_CONDITIONAL], [test "X$HDF_CXX" = "Xyes"])
|
|
AM_CONDITIONAL([BUILD_PARALLEL_CONDITIONAL], [test "X$PARALLEL" = "Xyes"])
|
|
AM_CONDITIONAL([BUILD_FORTRAN_CONDITIONAL], [test "X$HDF_FORTRAN" = "Xyes"])
|
|
AM_CONDITIONAL([BUILD_JAVA_CONDITIONAL], [test "X$HDF_JAVA" = "Xyes"])
|
|
AM_CONDITIONAL([BUILD_HDF5_HL_CONDITIONAL], [test "X$HDF5_HL" = "Xyes"])
|
|
AM_CONDITIONAL([BUILD_TESTS_CONDITIONAL], [test "X$HDF5_TESTS" = "Xyes"])
|
|
AM_CONDITIONAL([BUILD_TESTS_PARALLEL_CONDITIONAL], [test -n "$TESTPARALLEL"])
|
|
AM_CONDITIONAL([BUILD_TOOLS_CONDITIONAL], [test "X$HDF5_TOOLS" = "Xyes"])
|
|
AM_CONDITIONAL([BUILD_TOOLS_HL_GIF_CONDITIONAL], [test "X$HDF5_HL_GIF_TOOLS" = "Xyes"])
|
|
AM_CONDITIONAL([BUILD_DOXYGEN_CONDITIONAL], [test "X$HDF5_DOXYGEN" = "Xyes"])
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Build the Makefiles.
|
|
##
|
|
|
|
## The directory search list
|
|
AC_SUBST([SEARCH]) SEARCH='$(srcdir) $(top_builddir)/src $(top_srcdir)/src'
|
|
export SEARCH
|
|
|
|
## Some cleanup stuff
|
|
rm -f conftest conftest.o conftest.c dummy.o *.mod
|
|
|
|
## Build config.status, touch the stamp files, and build all the Makefiles.
|
|
## The order is such that the first `make' does not need to update any
|
|
## configuration information. See config/commence.in for the order in which
|
|
## things need to be done.
|
|
|
|
## First the stamp1 file for H5config.h.in
|
|
mkdir ./config >/dev/null 2>&1
|
|
touch ./config/stamp1
|
|
|
|
## Then the config.status file (but not makefiles)
|
|
saved_no_create=$no_create
|
|
no_create=yes
|
|
|
|
PARALLEL_MAKE=""
|
|
FORTRAN_PARALLEL_MAKE=""
|
|
|
|
if test -n "$TESTPARALLEL"; then
|
|
PARALLEL_MAKE="$TESTPARALLEL/Makefile"
|
|
|
|
if test "X$HDF_FORTRAN" = "Xyes"; then
|
|
FORTRAN_PARALLEL_MAKE=fortran/$TESTPARALLEL/Makefile
|
|
fi
|
|
fi
|
|
LT_OUTPUT
|
|
no_create=$saved_no_create
|
|
|
|
## Then the stamp2 file for H5config.h
|
|
touch ./config/stamp2
|
|
|
|
## Finally the makefiles
|
|
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
|
|
|
|
## Are we compiling static libraries, shared libraries, or both? This
|
|
## is only used for the libhdf5.settings file. We can't just look at
|
|
## $enable_static and $enable_shared because if they're yes the ltconfig
|
|
## might have decided that one or the other is simply not possible.
|
|
## Therefore we have to ask the generated `libtool' shell script
|
|
## which 'features' it has enabled.
|
|
if (./libtool --features | grep '^enable shared libraries' > /dev/null); then
|
|
enable_shared=yes
|
|
else
|
|
enable_shared=no
|
|
fi
|
|
|
|
if (./libtool --features | grep '^enable static libraries' > /dev/null); then
|
|
enable_static=yes
|
|
else
|
|
enable_static=no
|
|
fi
|
|
|
|
## Expose things for *.in markup
|
|
AC_SUBST([STATIC_SHARED])
|
|
AC_SUBST([enable_shared])
|
|
AC_SUBST([enable_static])
|
|
|
|
if test "X$enable_static" = "Xyes" && test "X$enable_shared" = "Xyes"; then
|
|
STATIC_SHARED="static, shared"
|
|
elif test "X$enable_static" = "Xyes"; then
|
|
STATIC_SHARED="static"
|
|
elif test "X$enable_shared" = "Xyes"; then
|
|
STATIC_SHARED="shared"
|
|
else
|
|
STATIC_SHARED="none"
|
|
fi
|
|
|
|
if test "X$HDF_FORTRAN" = "Xyes"; then
|
|
|
|
### libtool does not pass the correct argument linking (-Wl,-Wl,,) for the NAG Fortran compiler
|
|
### on Linux (other OSs have not been tested).
|
|
### Therefore, detect if we are using the NAG Fortran compiler, and replace the wl="-Wl," for Fortran to
|
|
### wl="-Wl,-Wl,," in the libtool file. (HDFFV-10037)
|
|
case "`uname`" in
|
|
Linux*)
|
|
|
|
fortran_linux_linker_option="-Wl,"
|
|
if test "X$FC_BASENAME" = "Xnagfor"; then
|
|
fortran_linux_linker_option="-Wl,-Wl,,"
|
|
fi
|
|
|
|
## Set the correct linker option for use in h5fc.in markup
|
|
AC_SUBST([fortran_linux_linker_option])
|
|
;;
|
|
esac
|
|
|
|
fi
|
|
|
|
## ----------------------------------------------------------------------
|
|
## Set a macro if shared library is enabled.
|
|
##
|
|
AM_CONDITIONAL([HAVE_SHARED_CONDITIONAL], [test "X$enable_shared" = "Xyes"])
|
|
|
|
AC_CONFIG_FILES([Makefile
|
|
doxygen/Doxyfile
|
|
src/Makefile
|
|
src/libhdf5.settings:src/libhdf5.settings.autotools.in
|
|
src/H5build_settings.c:${BUILD_SETTINGS_FILE}
|
|
test/Makefile
|
|
test/H5srcdir_str.h
|
|
test/test_abort_fail.sh
|
|
test/test_check_version.sh
|
|
test/test_error.sh
|
|
test/test_external_env.sh
|
|
test/test_flush_refresh.sh
|
|
test/test_libinfo.sh
|
|
test/test_links_env.sh
|
|
test/test_mirror.sh
|
|
test/test_plugin.sh
|
|
test/test_swmr.sh
|
|
test/test_use_cases.sh
|
|
test/test_vds_env.sh
|
|
test/test_vds_swmr.sh
|
|
testpar/Makefile
|
|
testpar/testpflush.sh
|
|
utils/Makefile
|
|
utils/mirror_vfd/Makefile
|
|
utils/test/Makefile
|
|
utils/tools/Makefile
|
|
utils/tools/h5dwalk/Makefile
|
|
utils/tools/test/Makefile
|
|
utils/tools/test/h5dwalk/Makefile
|
|
utils/tools/test/h5dwalk/copy_demo_files.sh
|
|
utils/tools/test/h5dwalk/testh5dwalk.sh
|
|
tools/Makefile
|
|
tools/lib/Makefile
|
|
tools/libtest/Makefile
|
|
tools/src/Makefile
|
|
tools/src/h5dump/Makefile
|
|
tools/src/h5import/Makefile
|
|
tools/src/h5diff/Makefile
|
|
tools/src/h5jam/Makefile
|
|
tools/src/h5repack/Makefile
|
|
tools/src/h5ls/Makefile
|
|
tools/src/h5copy/Makefile
|
|
tools/src/misc/Makefile
|
|
tools/src/h5stat/Makefile
|
|
tools/test/Makefile
|
|
tools/test/h5dump/Makefile
|
|
tools/test/h5dump/h5dump_plugin.sh
|
|
tools/test/h5dump/testh5dump.sh
|
|
tools/test/h5dump/testh5dumppbits.sh
|
|
tools/test/h5dump/testh5dumpvds.sh
|
|
tools/test/h5dump/testh5dumpxml.sh
|
|
tools/test/h5ls/Makefile
|
|
tools/test/h5ls/h5ls_plugin.sh
|
|
tools/test/h5ls/testh5ls.sh
|
|
tools/test/h5ls/testh5lsvds.sh
|
|
tools/test/h5import/Makefile
|
|
tools/test/h5import/h5importtestutil.sh
|
|
tools/test/h5diff/Makefile
|
|
tools/test/h5diff/h5diff_plugin.sh
|
|
tools/test/h5diff/testh5diff.sh
|
|
tools/test/h5diff/testph5diff.sh
|
|
tools/src/h5format_convert/Makefile
|
|
tools/test/h5format_convert/Makefile
|
|
tools/test/h5format_convert/testh5fc.sh
|
|
tools/test/h5jam/Makefile
|
|
tools/test/h5jam/testh5jam.sh
|
|
tools/test/h5repack/Makefile
|
|
tools/test/h5repack/h5repack.sh
|
|
tools/test/h5repack/h5repack_plugin.sh
|
|
tools/test/h5copy/Makefile
|
|
tools/test/h5copy/testh5copy.sh
|
|
tools/test/misc/Makefile
|
|
tools/test/misc/testh5clear.sh
|
|
tools/test/misc/testh5mkgrp.sh
|
|
tools/test/misc/testh5repart.sh
|
|
tools/test/misc/vds/Makefile
|
|
tools/test/h5stat/Makefile
|
|
tools/test/h5stat/testh5stat.sh
|
|
tools/src/h5perf/Makefile
|
|
tools/test/perform/Makefile
|
|
bin/h5cc
|
|
bin/Makefile
|
|
c++/Makefile
|
|
c++/src/Makefile
|
|
c++/src/h5c++
|
|
c++/test/Makefile
|
|
c++/test/H5srcdir_str.h
|
|
fortran/Makefile
|
|
fortran/src/h5fc
|
|
fortran/src/Makefile
|
|
fortran/src/H5fort_type_defines.h
|
|
fortran/test/Makefile
|
|
fortran/testpar/Makefile
|
|
java/Makefile
|
|
java/src/Makefile
|
|
java/src/jni/Makefile
|
|
java/test/Makefile
|
|
java/test/junit.sh
|
|
hl/Makefile
|
|
hl/src/Makefile
|
|
hl/test/Makefile
|
|
hl/test/H5srcdir_str.h
|
|
hl/tools/Makefile
|
|
hl/tools/gif2h5/Makefile
|
|
hl/tools/gif2h5/h52giftest.sh
|
|
hl/tools/h5watch/Makefile
|
|
hl/tools/h5watch/testh5watch.sh
|
|
hl/examples/Makefile
|
|
hl/examples/run-hlc-ex.sh
|
|
hl/c++/Makefile
|
|
hl/c++/src/Makefile
|
|
hl/c++/test/Makefile
|
|
hl/c++/examples/Makefile
|
|
hl/c++/examples/run-hlc++-ex.sh
|
|
hl/fortran/Makefile
|
|
hl/fortran/src/Makefile
|
|
hl/fortran/test/Makefile
|
|
hl/fortran/examples/Makefile
|
|
hl/fortran/examples/run-hlfortran-ex.sh])
|
|
|
|
AC_CONFIG_FILES([utils/subfiling_vfd/h5fuse], [chmod +x utils/subfiling_vfd/h5fuse])
|
|
if test -n "$TESTPARALLEL"; then
|
|
if test "X$SUBFILING_VFD" = "Xyes"; then
|
|
AC_CONFIG_LINKS([testpar/h5fuse:utils/subfiling_vfd/h5fuse])
|
|
fi
|
|
fi
|
|
|
|
AC_OUTPUT
|
|
|
|
chmod 755 bin/h5cc
|
|
if test "X$HDF_CXX" = "Xyes"; then
|
|
chmod 755 c++/src/h5c++
|
|
fi
|
|
|
|
|
|
if test "X$HDF_FORTRAN" = "Xyes"; then
|
|
chmod 755 fortran/src/h5fc
|
|
## libtool does not pass the correct argument linker (wl=) for the Intel Fortran compiler
|
|
## on OS X, which is needed when building shared libraries on OS X. This script
|
|
## replaces the 3rd occurrence, which is for Fortran, of wl="" with wl="-Wl," (HDFFV-2772)
|
|
case "`uname`" in
|
|
Darwin*)
|
|
cat libtool | awk '/wl=\"/{c++;if(c==3){sub("wl=\"\"","wl=\"-Wl,\"");c=0}}1' > libtool.tmp && mv -f libtool.tmp libtool && chmod 755 libtool
|
|
;;
|
|
esac
|
|
|
|
### libtool does not pass the correct linker options for some Fortran compilers
|
|
### on Linux (other OSs have not been tested).
|
|
case "`uname`" in
|
|
Linux*)
|
|
### NAG Fortran needs to replace "-Wl," with "-Wl,-Wl,," (HDFFV-10037)
|
|
if test "X$FC_BASENAME" = "Xnagfor"; then
|
|
cat libtool | awk '/BEGIN LIBTOOL TAG CONFIG: FC/{flag=1}flag&&/wl=/{$NF="wl=\"-Wl,-Wl,,\"";flag=0}1' > libtool.tmp && mv -f libtool.tmp libtool && chmod 755 libtool
|
|
fi
|
|
### Flang needs to replace "", with "-Wl," (avoids unknown option: -soname issues)
|
|
if test "X$FC_BASENAME" = "Xflang"; then
|
|
cat libtool | awk '/BEGIN LIBTOOL TAG CONFIG: FC/{flag=1}flag&&/wl=/{$NF="wl=\"-Wl,\"";flag=0}1' > libtool.tmp && mv -f libtool.tmp libtool && chmod 755 libtool
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
## HDF5 configure code created by autotools with gcc 4.9.2 is adding problematic
|
|
## linker flags: -l with no library name; -l <libname>, specifically gfortran or m.
|
|
## This sed script corrects "-l <libname>" first and then "-l " with no library name.
|
|
## If the order is not preserved, all instances of "-l " will be removed.
|
|
sed -e '/^postdeps/ s/-l \([a-zA-Z]\)/-l\1/g' -e '/^postdeps/ s/-l //g' libtool > libtool.bak
|
|
mv -- libtool.bak libtool
|
|
|
|
## show the configure settings
|
|
cat src/libhdf5.settings
|