mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-12-15 08:30:11 +08:00
efdec07f3d
Replaces PR https://github.com/Unidata/netcdf-c/pull/3024 and PR https://github.com/Unidata/netcdf-c/pull/3033 re: https://github.com/Unidata/netcdf-c/issues/2753 As suggested by Ed Hartnett, This PR extends the netcdf.h API to support programmatic control over the search path used to locate plugins. I created several different APIs, but finally settled on the following API as being the simplest possible. It does have the disadvantage that it requires use of a global lock (not implemented) if used in a threaded environment. Specifically, note that modifying the plugin path must be done "atomically". That is, in a multi-threaded environment, it is important that the sequence of actions involved in setting up the plugin path must be done by a single processor or in some other way as to guarantee that two or more processors are not simultaneously accessing the plugin path get/set operations. As an example, assume there exists a mutex lock called PLUGINLOCK. Then any processor accessing the plugin paths should operate as follows: ```` lock(PLUGINLOCK); nc_plugin_path_get(...); <rebuild plugin path> nc_plugin_path_set(...); unlock(PLUGINLOCK); ```` ## Internal Architecture It is assumed here that there only needs to be a single set of plugin path directories that is shared by all filter code and is independent of any file descriptor; it is global in other words. This means, for example, that the path list for NCZarr and for HDF5 will always be the same. However internally, processing the set of plugin paths depends on the particular NC_FORMATX value (NC_FORMATX_NC_HDF5 and NC_FORMATX_NCZARR, currently). So the *nc_plugin_path_set* function, will take the paths it is given and propagate them to each of the NC_FORMATX dispatchers to store in a way that is appropriate to the given dispatcher. There is a complication with respect to the *nc_plugin_path_get* function. It is possible for users to bypass the netcdf API and modify the HDF5 plugin paths directly. This can result in an inconsistent plugin path between the value used by HDF5 and the global value used by netcdf-c. Since there is no obvious fix for this, we warn the user of this possibility and otherwise ignore it. ## Test Changes * New tests<br> a. unit_test/run_pluginpaths.sh -- was created to test this new capability.<br> b. A new test utility has been added as *unit_test/run_dfaltpluginpath.sh* to test the default plugin path list. * New test support utilities<br> a. unit_test/ncpluginpath.c -- report current state of the plugin path<br> b. unit_test/tst_pluginpaths.c -- test program to support run_pluginpaths.sh ## Documentation * A new file -- docs/pluginpath.md -- provides documentation of the new API. It includes some material taken fro filters.md. ## Other Major Changes 1. Cleanup the whole plugin path decision tree. This is described in the *docs/pluginpath.md* document and summarized in Addendum 2 below. 2. I noticed that the ncdump/testpathcvt.sh had been disabled, so fixed and re-enabled it. This necessitated some significant changes to dpathmgr.c. ## Misc. Changes 1. Add some path manipulation utilities to netcf_aux.h 2. Fix some minor bugs in netcdf_json.h 3. Convert netcdf_json.h and netcdf_proplist.h to BUILT_SOURCE. 4. Add NETCDF_ENABLE_HDF5 as synonym for USE_HDF5 5. Fix some size_t <-> int conversion warnings. 6. Encountered and fixed the Windows \r\n problem in tst_pluginpaths.c. 7. Cleanup some minor CMakeLists.txt problems. 8. Provide an implementation of echo -n since it appears to not be available on all platforms. 9. Add a property list mechanism to pass environmental information to filters. 10. Cleanup Doxyfile.in 11. Fixed a memory leak in libdap2; surprised that I did not find this earlier. ## Addendum 1: Proposed API The API makes use of a counted vector of strings representing the sequence of directories in the path. The relevant type definition is as follows. ```` typedef struct NCPluginList {size_t ndirs; char** dirs;} NCPluginList; ```` The API proposed in this PR looks like this (from netcdf-c/include/netcdf_filter.h). * ````int nc_plugin_path_ndirs(size_t* ndirsp);```` Arguments: *ndirsp* -- store the number of directories in this memory. This function returns the number of directories in the sequence if internal directories of the internal plugin path list. * ````int nc_plugin_path_get(NCPluginList* dirs);```` Arguments: *dirs* -- counted vector for storing the sequence of directies in the internal path list. This function returns the current sequence of directories from the internal plugin path list. Since this function does not modify the plugin path, it does not need to be locked; it is only when used to get the path to be modified that locking is required. If the value of *dirs.dirs* is NULL (the normal case), then memory is allocated to hold the vector of directories. Otherwise, use the memory of *dirs.dirs* to hold the vector of directories. * ````int nc_plugin_path_set(const NCPluginList* dirs);```` Arguments: *dirs* -- counted vector for providing the new sequence of directories in the internal path list. This function empties the current internal path sequence and replaces it with the sequence of directories argument. Using an *ndirs* argument of 0 will clear the set of plugin paths. ## Addendum 2: Build-Time and Run-Time Constants. ### Build-Time Constants <table style="border:2px solid black;border-collapse:collapse"> <tr style="outline: thin solid;" align="center"><td colspan="4">Table showing the build-time computation of NETCDF_PLUGIN_INSTALL_DIR and NETCDF_PLUGIN_SEARCH_PATH.</td> <tr style="outline: thin solid" ><th>--with-plugin-dir<th>--prefix<th>NETCDF_PLUGIN_INSTALL_DIR<th>NETCDF_PLUGIN_SEARCH_PATH <tr style="outline: thin solid" ><td>undefined<td>undefined<td>undefined<td>PLATFORMDEFALT <tr style="outline: thin solid" ><td>undefined<td><abspath-prefix><td><abspath-prefix>/hdf5/lib/plugin<td><abspath-prefix>/hdf5/lib/plugin<SEP>PLATFORMDEFALT <tr style="outline: thin solid" ><td><abspath-plugins><td>N.A.<td><abspath-plugins><td><abspath-plugins><SEP>PLATFORMDEFALT </table> <table style="border:2px solid black;border-collapse:collapse"> <tr style="outline: thin solid" align="center"><td colspan="2">Table showing the computation of the initial global plugin path</td> <tr style="outline: thin solid"><th>HDF5_PLUGIN_PATH<th>Initial global plugin path <tr style="outline: thin solid"><td>undefined<td>NETCDF_PLUGIN_SEARCH_PATH <tr style="outline: thin solid"><td><path1;...pathn><td><path1;...pathn> </table>
2385 lines
92 KiB
Plaintext
2385 lines
92 KiB
Plaintext
# -*- Autoconf -*-
|
|
## Process this file with autoconf to produce a configure script.
|
|
|
|
# This is part of Unidata's netCDF package. Copyright 2005-2018, see
|
|
# the COPYRIGHT file for more information.
|
|
# Ed Hartnett, Ward Fisher, Dennis Heimbigner
|
|
|
|
# Running autoconf on this file will trigger a warning if
|
|
# autoconf is not at least the specified version.
|
|
AC_PREREQ([2.59])
|
|
|
|
# Initialize with name, version, and support email address.
|
|
AC_INIT([netCDF],[4.9.4-development],[support-netcdf@unidata.ucar.edu],[netcdf-c])
|
|
|
|
##
|
|
# Prefer an empty CFLAGS variable instead of the default -g -O2.
|
|
# See:
|
|
# * http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/C-Compiler.html#C-Compiler
|
|
##
|
|
: ${CFLAGS=""}
|
|
|
|
AC_SUBST([netCDF_VERSION_MAJOR]) netCDF_VERSION_MAJOR=4
|
|
AC_SUBST([netCDF_VERSION_MINOR]) netCDF_VERSION_MINOR=9
|
|
AC_SUBST([netCDF_VERSION_PATCH]) netCDF_VERSION_PATCH=4
|
|
AC_SUBST([NC_VERSION_NOTE]) NC_VERSION_NOTE="-development"
|
|
|
|
##
|
|
# These linker flags specify libtool version info.
|
|
# See http://www.gnu.org/software/libtool/manual/libtool.html#Libtool-versioning
|
|
# for information regarding incrementing `-version-info`.
|
|
# These values should match those in CMakeLists.txt
|
|
AC_SUBST([netCDF_SO_VERSION]) netCDF_SO_VERSION=22:0:0
|
|
|
|
#####
|
|
# Set some variables used to generate a libnetcdf.settings file,
|
|
# pattered after the files generated by libhdf4, libhdf5.
|
|
#####
|
|
|
|
# Create the VERSION file, which contains the package version from AC_INIT.
|
|
# This file is apparently unused. But see the bottom of Makefile.am
|
|
# echo AC_PACKAGE_VERSION>VERSION
|
|
|
|
AC_SUBST(PACKAGE_VERSION)
|
|
|
|
AC_MSG_NOTICE([netCDF AC_PACKAGE_VERSION])
|
|
|
|
# Keep libtool macros in an m4 directory.
|
|
AC_CONFIG_MACRO_DIR([m4])
|
|
|
|
# Configuration Date
|
|
if test "x$SOURCE_DATE_EPOCH" != "x" ; then
|
|
AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date -u -d "${SOURCE_DATE_EPOCH}"`"
|
|
else
|
|
AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date`"
|
|
fi
|
|
|
|
# Find out about the host we're building on.
|
|
AC_CANONICAL_HOST
|
|
|
|
# Find out about the target we're building for.
|
|
AC_CANONICAL_TARGET
|
|
|
|
AC_CONFIG_HEADERS([config.h])
|
|
|
|
|
|
##
|
|
# Check to see if the compiler supports -fno-strict-aliasing and, if so,
|
|
# add that to the C compiler flags. This is in support of https://github.com/Unidata/netcdf-c/issues/1983.
|
|
##
|
|
SAVE_CFLAGS="${CFLAGS}"
|
|
AC_LANG_PUSH([C])
|
|
AC_LANG_COMPILER_REQUIRE
|
|
CFLAGS="${CFLAGS} -fno-strict-aliasing"
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
|
|
[int i = 0;]])],
|
|
[have_no_strict_aliasing=yes],
|
|
[have_no_strict_aliasing=no])
|
|
AC_MSG_CHECKING([whether compiler supports -fno-strict-aliasing])
|
|
AC_MSG_RESULT([$have_no_strict_aliasing])
|
|
AC_LANG_POP([C])
|
|
if test $have_no_strict_aliasing = no; then
|
|
CFLAGS=$SAVE_CFLAGS
|
|
fi
|
|
|
|
##
|
|
# Check to see if we have getfattr
|
|
##
|
|
AC_CHECK_PROGS([HAVE_GETFATTR], [getfattr])
|
|
if test -n "$HAVE_GETFATTR"; then
|
|
AC_DEFINE_UNQUOTED([HAVE_GETFATTR],[1],[getfattr is available])
|
|
fi
|
|
##
|
|
# Some files need to exist in build directories
|
|
# that do not correspond to their source directory, or
|
|
# the test program makes an assumption about where files
|
|
# live. AC_CONFIG_LINKS provides a mechanism to link/copy files
|
|
# if an out-of-source build is happening.
|
|
##
|
|
|
|
AC_CONFIG_LINKS([nc_test4/ref_hdf5_compat1.nc:nc_test4/ref_hdf5_compat1.nc])
|
|
AC_CONFIG_LINKS([nc_test4/ref_hdf5_compat2.nc:nc_test4/ref_hdf5_compat2.nc])
|
|
AC_CONFIG_LINKS([nc_test4/ref_hdf5_compat3.nc:nc_test4/ref_hdf5_compat3.nc])
|
|
|
|
AC_CONFIG_LINKS([hdf4_test/ref_chunked.hdf4:hdf4_test/ref_chunked.hdf4])
|
|
AC_CONFIG_LINKS([hdf4_test/ref_contiguous.hdf4:hdf4_test/ref_contiguous.hdf4])
|
|
AM_INIT_AUTOMAKE([foreign dist-zip subdir-objects])
|
|
#AM_MAINTAINER_MODE()
|
|
# Check for the existence of this file before proceeding.
|
|
AC_CONFIG_SRCDIR([include/netcdf.h])
|
|
|
|
# Figure out platforms of special interest
|
|
AC_CANONICAL_HOST
|
|
AS_CASE([$host],
|
|
[*-*-cygwin], [ISCYGWIN=yes],
|
|
[*-*-darwin*], [ISOSX=yes],
|
|
[*-*-mingw*], [ISMINGW=yes],
|
|
[*-*-msys], [ISMINGW=yes],
|
|
[*-*-win*], [ISMSVC=yes],
|
|
[]
|
|
)
|
|
|
|
if test "x$MSYSTEM" != x ; then
|
|
ISMINGW=yes
|
|
ISMSYS=yes
|
|
fi
|
|
|
|
# Get windows version info
|
|
if test "x$ISMSVC" = xyes ; then
|
|
WINVER=`systeminfo | sed -e '/^OS Version:/p' -ed | sed -e 's|[^0-9]*\([0-9.]*\).*|\1|'`
|
|
else
|
|
WINVER="0.0.0"
|
|
fi
|
|
WINVERMAJOR=`echo $WVER | sed -e 's|\([^.]*\)[.]\([^.]*\)[.]\(.*\)|\1|'`
|
|
WINVERBUILD=`echo $WVER | sed -e 's|\([^.]*\)[.]\([^.]*\)[.]\(.*\)|\3|'`
|
|
if test "x$WINVERMAJOR" = x ; then WINVERMAJOR=0; fi
|
|
if test "x$WINVERBUILD" = x ; then WINVERBUILD=0; fi
|
|
AC_DEFINE_UNQUOTED([WINVERMAJOR], [$WINVERMAJOR], [windows version major])
|
|
AC_DEFINE_UNQUOTED([WINVERBUILD], [$WINVERBUILD], [windows version build])
|
|
|
|
AC_MSG_NOTICE([checking supported formats])
|
|
|
|
# As a long term goal, and because it is now the case that --enable-nczarr
|
|
# => USE_NETCDF4, make the external options --enable-netcdf-4 and
|
|
# --enable-netcdf4 obsolete in favor of --enable-hdf5
|
|
# We will do the following for one more release cycle.
|
|
# 1. Make --enable-netcdf-4 be an alias for --enable-netcdf4.
|
|
# 2. Make --enable-netcdf4 an alias for --enable-hdf5.
|
|
# 3. Internally, convert most uses of USE_NETCDF_4 ad USE_NETCDF4 to USE_HDF5
|
|
|
|
# Collect the values of --enable-netcdf-4, --enable-netcdf4, and --enable-hdf5.
|
|
# Also determine which have been explicitly set on the command line.
|
|
|
|
AC_ARG_ENABLE([netcdf-4], [AS_HELP_STRING([--enable-netcdf-4],
|
|
[(Deprecated) Synonym for --enable-hdf5; default yes])])
|
|
AC_ARG_ENABLE([netcdf4], [AS_HELP_STRING([--enable-netcdf4],
|
|
[(Deprecated) Synonym for --enable-hdf5; default yes])])
|
|
AC_ARG_ENABLE([hdf5], [AS_HELP_STRING([--enable-hdf5],[default yes])])
|
|
|
|
# Complain about the use of --enable-netcdf-4/--enable-netcdf4
|
|
if test "x$enable_netcdf_4" != x ; then
|
|
AC_MSG_WARN([--enable-netcdf-4 is deprecated; please use --enable-hdf5])
|
|
fi
|
|
if test "x$enable_netcdf4" != x ; then
|
|
AC_MSG_WARN([--enable-netcdf4 is deprecated; please use --enable-hdf5])
|
|
fi
|
|
|
|
# --enable-netcdf-4 overrides --enable-netcdf4 if latter not defined
|
|
if test "x$enable_netcdf_4" != x && test "x$enable_netcdf4" == x ; then
|
|
enable_netcdf4="$enable_netcdf_4"
|
|
fi
|
|
# --enable-netcdf4 overrides --enable-hdf5 if latter not defined
|
|
if test "x$enable_netcdf4" != x && test "x$enable_hdf5" == x ; then
|
|
enable_hdf5="$enable_netcdf4"
|
|
fi
|
|
# Otherwise, use --enable-hdf5
|
|
AC_MSG_CHECKING([whether we should build with HDF5])
|
|
test "x$enable_hdf5" = xno || enable_hdf5=yes
|
|
AC_MSG_RESULT([$enable_hdf5])
|
|
|
|
# Turn off enable_netcdf4 because it will be used
|
|
# as a shorthand for enable_hdf5|enable_hdf4|enable_nczarr
|
|
enable_netcdf4=no
|
|
|
|
# Check whether we want to enable CDF5 support.
|
|
AC_MSG_CHECKING([whether CDF5 support should be disabled])
|
|
AC_ARG_ENABLE([cdf5],
|
|
[AS_HELP_STRING([--disable-cdf5],
|
|
[build without CDF5 support. @<:@default: auto@:>@])],
|
|
[enable_cdf5=${enableval}], [enable_cdf5=auto]
|
|
)
|
|
AC_MSG_RESULT($enable_cdf5)
|
|
|
|
# Does the user want to turn on HDF4 read ability?
|
|
AC_MSG_CHECKING([whether reading of HDF4 SD files is to be enabled])
|
|
AC_ARG_ENABLE([hdf4], [AS_HELP_STRING([--enable-hdf4],
|
|
[build netcdf with HDF4 read capability (HDF4, HDF5 and zlib required)])])
|
|
test "x$enable_hdf4" = xyes || enable_hdf4=no
|
|
AC_MSG_RESULT($enable_hdf4)
|
|
|
|
AC_MSG_CHECKING([whether parallel I/O for classic files is to be enabled])
|
|
AC_ARG_ENABLE([pnetcdf], [AS_HELP_STRING([--enable-pnetcdf],
|
|
[build with parallel I/O for classic files. @<:@default: disabled@:>@])])
|
|
test "x$enable_pnetcdf" = xyes || enable_pnetcdf=no
|
|
AC_MSG_RESULT($enable_pnetcdf)
|
|
|
|
AC_MSG_CHECKING([whether any network access should be allowed])
|
|
AC_ARG_ENABLE([remote-functionality], [AS_HELP_STRING([--enable-remote-functionality],
|
|
[enable|disable all forms of network access (default enabled)])])
|
|
test "x$enable_remote_functionality" = xno || enable_remote_functionality=yes
|
|
AC_MSG_RESULT($enable_remote_functionality)
|
|
|
|
# We need curl for remote operations
|
|
AC_MSG_CHECKING([whether we need to look for libcurl])
|
|
AC_ARG_ENABLE([curl],
|
|
[AS_HELP_STRING([--enable-curl],
|
|
[look for and link against libcurl])])
|
|
|
|
## Capture the state of the --enable-dap flag => enable dap2+dap4
|
|
AC_MSG_CHECKING([whether DAP client(s) are to be built])
|
|
AC_ARG_ENABLE([dap],
|
|
[AS_HELP_STRING([--disable-dap],
|
|
[build without DAP client support.])])
|
|
test "x$enable_dap" = xno || enable_dap=yes
|
|
AC_MSG_RESULT($enable_dap)
|
|
|
|
if test "x$enable_remote_functionality" = xno ; then
|
|
AC_MSG_WARN([All network access is disabled => DAP support disabled.])
|
|
enable_dap=no
|
|
fi
|
|
|
|
AC_MSG_CHECKING([whether netcdf zarr storage format should be disabled])
|
|
AC_ARG_ENABLE([nczarr],
|
|
[AS_HELP_STRING([--disable-nczarr],
|
|
[disable netcdf zarr storage support])])
|
|
test "x$enable_nczarr" = xno || enable_nczarr=yes
|
|
AC_MSG_RESULT($enable_nczarr)
|
|
|
|
# HDF5 | HDF4 | NCZarr => netcdf-4
|
|
if test "x$enable_hdf5" = xyes || test "x$enable_hdf4" = xyes || test "x$enable_nczarr" = xyes ; then
|
|
enable_netcdf4=yes
|
|
fi
|
|
|
|
AC_MSG_NOTICE([checking user options])
|
|
|
|
# Did the user specify a default minimum blocksize (NCIO_MINBLOCKSIZE) for posixio?
|
|
AC_MSG_CHECKING([whether a NCIO_MINBLOCKSIZE was specified])
|
|
AC_ARG_WITH([minblocksize],
|
|
[AS_HELP_STRING([--with-minblocksize=<integer>],
|
|
[Specify minimum I/O blocksize for netCDF classic and 64-bit offset format files.])],
|
|
[NCIO_MINBLOCKSIZE=$with_minblocksize], [NCIO_MINBLOCKSIZE=256])
|
|
AC_MSG_RESULT([$NCIO_MINBLOCKSIZE])
|
|
AC_DEFINE_UNQUOTED([NCIO_MINBLOCKSIZE], [$NCIO_MINBLOCKSIZE], [min blocksize for posixio.])
|
|
|
|
# Find valgrind, if available, and add targets for it.
|
|
AX_VALGRIND_DFLT([sgcheck], [off])
|
|
AX_VALGRIND_CHECK
|
|
AM_CONDITIONAL(ENABLE_VALGRIND, [test "x$VALGRIND_ENABLED" = xyes])
|
|
|
|
###
|
|
# Doxygen and doxygen-related options.
|
|
###
|
|
AC_ARG_ENABLE([doxygen],
|
|
[AS_HELP_STRING([--enable-doxygen],
|
|
[Enable generation of documentation.])])
|
|
test "x$enable_doxygen" = xyes || enable_doxygen=no
|
|
AM_CONDITIONAL([BUILD_DOCS], [test "x$enable_doxygen" = xyes])
|
|
|
|
AC_ARG_ENABLE([doxygen-tasks],
|
|
[AS_HELP_STRING([--enable-doxygen-tasks],
|
|
[Enable Doxygen-generated test, todo and bug list documentation. Developers only.])])
|
|
test "x$enable_doxygen_tasks" = xyes || enable_doxygen_tasks=no
|
|
AM_CONDITIONAL([SHOW_DOXYGEN_TAG_LIST], [test "x$enable_doxygen_tasks" = xyes])
|
|
AC_SUBST([SHOW_DOXYGEN_TAG_LIST], [$enable_doxygen_tasks])
|
|
|
|
###
|
|
# Determine if we should build documentation
|
|
# configured for releases on the Unidata web server.
|
|
###
|
|
AC_ARG_ENABLE([doxygen-build-release-docs],
|
|
[AS_HELP_STRING([--enable-doxygen-build-release-docs],
|
|
[Build release documentation. This is of interest only to developers.])])
|
|
test "x$enable_doxygen_build_release_docs" = xyes || enable_doxygen_build_release_docs=no
|
|
AM_CONDITIONAL([DOXYGEN_BUILD_RELEASE_DOCS], [test "x$enable_doxygen_build_release_docs" = xyes])
|
|
|
|
if test $enable_doxygen_build_release_docs = yes; then
|
|
AC_SUBST([DOXYGEN_CSS_FILE], ["release.css"])
|
|
AC_SUBST([DOXYGEN_HEADER_FILE], ["release_header.html"])
|
|
AC_SUBST([DOXYGEN_SEARCHENGINE], ["NO"])
|
|
else
|
|
AC_SUBST([DOXYGEN_CSS_FILE], [])
|
|
AC_SUBST([DOXYGEN_HEADER_FILE], [])
|
|
AC_SUBST([DOXYGEN_SEARCHENGINE], ["YES"])
|
|
fi
|
|
AC_SUBST([DOXYGEN_SERVER_BASED_SEARCH], ["NO"])
|
|
|
|
AC_ARG_ENABLE([doxygen-pdf-output],
|
|
[AS_HELP_STRING([--enable-doxygen-pdf-output],
|
|
[Build netCDF library documentation in PDF format. Experimental.])])
|
|
AC_SUBST([NC_NETCDF_ENABLE_DOXYGEN_PDF_OUTPUT], [$enable_doxygen_pdf_output])
|
|
AM_CONDITIONAL([NC_NETCDF_ENABLE_DOXYGEN_PDF_OUTPUT], [test "x$enable_doxygen_pdf_output" = xyes])
|
|
|
|
AC_ARG_ENABLE([dot],
|
|
[AS_HELP_STRING([--enable-dot],
|
|
[Use dot (provided by graphviz) to generate charts and graphs in the doxygen-based documentation.])])
|
|
test "x$enable_dot" = xyes || enable_dot=no
|
|
|
|
AC_ARG_ENABLE([internal-docs],
|
|
[AS_HELP_STRING([--enable-internal-docs],
|
|
[Include documentation of library internals. This is of interest only to those developing the netCDF library.])])
|
|
test "x$enable_internal_docs" = xyes || enable_internal_docs=no
|
|
AC_SUBST([BUILD_INTERNAL_DOCS], [$enable_internal_docs])
|
|
|
|
# Doxygen is apparently buggy when trying to combine a markdown
|
|
# file with @internal. The equivalent can be faked using
|
|
# the Doxygen ENABLED_SECTIONS mechanism. See docs/testserver.dox
|
|
# to see how this is done.
|
|
sections=
|
|
if test "x$enable_internal_docs" = xyes ; then
|
|
sections="$sections INTERNAL"
|
|
fi
|
|
AC_SUBST([ENABLED_DOC_SECTIONS], [$sections])
|
|
|
|
AC_MSG_CHECKING([if fsync support is enabled])
|
|
AC_ARG_ENABLE([fsync],
|
|
[AS_HELP_STRING([--enable-fsync],
|
|
[enable fsync support])],
|
|
[],
|
|
[enable_fsync=no])
|
|
test "x$enable_fsync" = xno || enable_fsync=yes
|
|
AC_MSG_RESULT($enable_fsync)
|
|
if test "x$enable_fsync" = xyes ; then
|
|
AC_DEFINE([USE_FSYNC], [1], [if true, include experimental fsync code])
|
|
fi
|
|
|
|
# Does the user want to turn off unit tests (useful for test coverage
|
|
# analysis).
|
|
AC_MSG_CHECKING([if unit tests should be enabled])
|
|
AC_ARG_ENABLE([unit-tests],
|
|
[AS_HELP_STRING([--enable-unit-tests],
|
|
[Disable tests in unit_test directory. Other tests still run.])])
|
|
test "x$enable_unit_tests" = xno || enable_unit_tests=yes
|
|
AC_MSG_RESULT($enable_unit_tests)
|
|
AM_CONDITIONAL(BUILD_UNIT_TESTS, [test "x$enable_unit_tests" = xyes])
|
|
|
|
# Does the user require dynamic loading?
|
|
# This is only for those hdf5 installs that support it.
|
|
AC_MSG_CHECKING([do we require hdf5 dynamic-loading support])
|
|
AC_ARG_ENABLE([dynamic-loading], [AS_HELP_STRING([--enable-dynamic-loading],
|
|
[enable dynamic loading for use with supported hdf5 installs (libdl, HDF5 required)])])
|
|
test "x$enable_dynamic_loading" = xno || enable_dynamic_loading=yes
|
|
AC_MSG_RESULT([$enable_dynamic_loading])
|
|
|
|
|
|
# Does the user want to turn on extra HDF4 file tests?
|
|
AC_MSG_CHECKING([whether to fetch some sample HDF4 files from Unidata resources site to test HDF4 reading (requires wget)])
|
|
AC_ARG_ENABLE([hdf4-file-tests], [AS_HELP_STRING([--enable-hdf4-file-tests],
|
|
[get some HDF4 files from Unidata resources site and test that they can be read])])
|
|
test "x$enable_hdf4" = xyes -a "x$enable_hdf4_file_tests" = xyes || enable_hdf4_file_tests=no
|
|
if test "x$enable_hdf4_file_tests" = xyes; then
|
|
AC_DEFINE([USE_HDF4_FILE_TESTS], 1, [If true, use use wget to fetch some sample HDF4 data, and then test against it.])
|
|
fi
|
|
AC_MSG_RESULT($enable_hdf4_file_tests)
|
|
|
|
# Does the user want to run extra parallel tests when parallel netCDF-4 is built?
|
|
AC_MSG_CHECKING([whether parallel IO tests should be run])
|
|
AC_ARG_ENABLE([parallel-tests],
|
|
[AS_HELP_STRING([--enable-parallel-tests],
|
|
[Run extra parallel IO tests. Requires netCDF-4
|
|
with parallel I/O support.])])
|
|
test "x$enable_parallel_tests" = xyes || enable_parallel_tests=no
|
|
AC_MSG_RESULT($enable_parallel_tests)
|
|
|
|
# Did the user specify an MPI launcher other than mpiexec?
|
|
AC_MSG_CHECKING([whether a user specified program to run mpi programs])
|
|
AC_ARG_WITH([mpiexec],
|
|
[AS_HELP_STRING([--with-mpiexec=<command>],
|
|
[Specify command to launch MPI parallel tests.])],
|
|
[MPIEXEC=$with_mpiexec], [MPIEXEC=mpiexec])
|
|
AC_MSG_RESULT([$MPIEXEC])
|
|
AC_SUBST([MPIEXEC], [$MPIEXEC])
|
|
|
|
# Did the user specify a default chunk size?
|
|
AC_MSG_CHECKING([whether a default chunk size in bytes was specified])
|
|
AC_ARG_WITH([default-chunk-size],
|
|
[AS_HELP_STRING([--with-default-chunk-size=<integer>],
|
|
[Specify default size of chunks in bytes.])],
|
|
[DEFAULT_CHUNK_SIZE=$with_default_chunk_size], [DEFAULT_CHUNK_SIZE=4194304])
|
|
AC_MSG_RESULT([$DEFAULT_CHUNK_SIZE])
|
|
AC_DEFINE_UNQUOTED([DEFAULT_CHUNK_SIZE], [$DEFAULT_CHUNK_SIZE], [default chunk size in bytes])
|
|
|
|
# Did the user specify a default cache size?
|
|
AC_MSG_CHECKING([whether a default cache size was specified])
|
|
AC_ARG_WITH([default-chunk-cache-size],
|
|
[AS_HELP_STRING([--with-default-chunk-cache-size=<integer>],
|
|
[Specify default size (in bytes) for chunk cache.])],
|
|
[DEFAULT_CHUNK_CACHE_SIZE=$with_default_chunk_cache_size], [DEFAULT_CHUNK_CACHE_SIZE=16777216U])
|
|
AC_MSG_RESULT([$DEFAULT_CHUNK_CACHE_SIZE])
|
|
AC_DEFINE_UNQUOTED([DEFAULT_CHUNK_CACHE_SIZE], [$DEFAULT_CHUNK_CACHE_SIZE], [default size of the chunk cache.])
|
|
|
|
# Did the user specify a max number of chunks in default per-var cache size?
|
|
AC_MSG_CHECKING([whether a default number of entries for the chunk cache was specified])
|
|
AC_ARG_WITH([default-chunks-in-cache],
|
|
[AS_HELP_STRING([--with-default-chunks-in-cache=<integer>],
|
|
[Specify the max number of chunks to store in cache.])],
|
|
[DEFAULT_CHUNKS_IN_CACHE=$with_default_chunks_in_cache], [DEFAULT_CHUNKS_IN_CACHE=1000])
|
|
AC_MSG_RESULT([$DEFAULT_CHUNKS_IN_CACHE])
|
|
AC_DEFINE_UNQUOTED([DEFAULT_CHUNKS_IN_CACHE], [$DEFAULT_CHUNKS_IN_CACHE], [default max num chunks in chunk cache.])
|
|
|
|
# Did the user specify a default cache preemption
|
|
AC_MSG_CHECKING([whether a default cache preemption was specified])
|
|
AC_ARG_WITH([default-chunk-cache-preemption],
|
|
[AS_HELP_STRING([--with-chunk-cache-preemption=<float between 0 and 1 inclusive>],
|
|
[Specify default file chunk cache preemption policy (a number between 0 and 1, inclusive).])],
|
|
[DEFAULT_CHUNK_CACHE_PREEMPTION=$with_chunk_cache_preemption], [DEFAULT_CHUNK_CACHE_PREEMPTION=0.75])
|
|
AC_MSG_RESULT([$DEFAULT_CHUNK_CACHE_PREEMPTION])
|
|
AC_DEFINE_UNQUOTED([DEFAULT_CHUNK_CACHE_PREEMPTION], [$DEFAULT_CHUNK_CACHE_PREEMPTION], [default file chunk cache preemption policy.])
|
|
|
|
# These three options are redundant over the --with-default... options above.
|
|
# Did the user specify a default cache size for HDF5?
|
|
AC_MSG_CHECKING([whether a default file cache size for HDF5 was specified])
|
|
AC_ARG_WITH([chunk-cache-size],
|
|
[AS_HELP_STRING([--with-chunk-cache-size=<integer>],
|
|
[Specify default file cache chunk size for HDF5 files in bytes.])],
|
|
[CHUNK_CACHE_SIZE=$with_chunk_cache_size], [CHUNK_CACHE_SIZE=DEFAULT_CHUNK_CACHE_SIZE])
|
|
AC_MSG_RESULT([$CHUNK_CACHE_SIZE])
|
|
AC_DEFINE_UNQUOTED([CHUNK_CACHE_SIZE], [$CHUNK_CACHE_SIZE], [default file chunk cache size in bytes.])
|
|
|
|
# Did the user specify a default max cache entries for HDF5
|
|
AC_MSG_CHECKING([whether a default file cache maximum number of elements for HDF5 was specified])
|
|
AC_ARG_WITH([chunk-cache-nelems],
|
|
[AS_HELP_STRING([--with-chunk-cache-nelems=<integer>],
|
|
[Specify default maximum number of elements in the file chunk cache chunk for HDF5 files (should be prime number).])],
|
|
[CHUNK_CACHE_NELEMS=$with_chunk_cache_nelems], [CHUNK_CACHE_NELEMS=DEFAULT_CHUNKS_IN_CACHE])
|
|
AC_MSG_RESULT([$CHUNK_CACHE_NELEMS])
|
|
AC_DEFINE_UNQUOTED([CHUNK_CACHE_NELEMS], [$CHUNK_CACHE_NELEMS], [default file chunk cache nelems.])
|
|
|
|
# Did the user specify a default cache preemption for HDF5?
|
|
AC_MSG_CHECKING([whether a default cache preemption for HDF5 was specified])
|
|
AC_ARG_WITH([chunk-cache-preemption],
|
|
[AS_HELP_STRING([--with-chunk-cache-preemption=<float between 0 and 1 inclusive>],
|
|
[Specify default file chunk cache preemption policy for HDF5 files (a number between 0 and 1, inclusive).])],
|
|
[CHUNK_CACHE_PREEMPTION=$with_chunk_cache_preemption], [CHUNK_CACHE_PREEMPTION=DEFAULT_CHUNK_CACHE_PREEMPTION])
|
|
AC_MSG_RESULT([$CHUNK_CACHE_PREEMPTION])
|
|
AC_DEFINE_UNQUOTED([CHUNK_CACHE_PREEMPTION], [$CHUNK_CACHE_PREEMPTION], [default file chunk cache preemption policy.])
|
|
|
|
# Does the user want to enable netcdf-4 logging?
|
|
AC_MSG_CHECKING([whether netCDF-4 logging is enabled])
|
|
AC_ARG_ENABLE([logging],
|
|
[AS_HELP_STRING([--enable-logging],
|
|
[enable logging capability (only applies when netCDF-4 is built). \
|
|
This debugging features is only of interest to netCDF developers. \
|
|
Ignored if netCDF-4 is not enabled.])])
|
|
test "x$enable_logging" = xyes || enable_logging=no
|
|
AC_MSG_RESULT([$enable_logging])
|
|
if test "x$enable_logging" = xyes; then
|
|
enable_set_log_level_func=yes
|
|
enable_set_log_level=yes
|
|
AC_DEFINE([NETCDF_ENABLE_SET_LOG_LEVEL], 1, [If true, enable nc_set_log_level function.])
|
|
else
|
|
enable_set_log_level_func=no
|
|
enable_set_log_level=no
|
|
fi
|
|
|
|
# Do we want to enable unsafe macros, e.g. _FillValue in addition to NC_FillValue.
|
|
# See https://github.com/Unidata/netcdf-c/issues/3029
|
|
AC_MSG_CHECKING([whether to allow legacy macros])
|
|
AC_ARG_ENABLE([legacy-macros],
|
|
[AS_HELP_STRING([--disable-legacy-macros],
|
|
[enable legacy macros for backwards compatibility purposes. Use with caution.\
|
|
This can lead to unexpected consequences/behavior.])])
|
|
test "x$enable_legacy_macros" = xno || enable_legacy_macros=yes
|
|
AC_MSG_RESULT($enable_legacy_macros)
|
|
if test "x$enable_legacy_macros" = xyes; then
|
|
AC_DEFINE([NETCDF_ENABLE_LEGACY_MACROS], 1, [If true, enable legacy macros in netcdf.h])
|
|
fi
|
|
|
|
# Does the user want to allow reading of remote data via range headers?
|
|
AC_MSG_CHECKING([whether byte range support is enabled])
|
|
AC_ARG_ENABLE([byterange],
|
|
[AS_HELP_STRING([--disable-byterange],
|
|
[allow byte-range I/O])])
|
|
test "x$enable_byterange" = xno || enable_byterange=yes
|
|
AC_MSG_RESULT($enable_byterange)
|
|
|
|
if test "x$enable_dap" = xno && test "x$enable_byterange" = xyes; then
|
|
AC_MSG_WARN([DAP required for byterange. Byterange support disabled.])
|
|
enable_byterange=no
|
|
fi
|
|
|
|
###
|
|
# Stanza to check for functionality which requires linking against
|
|
# libcurl.
|
|
###
|
|
|
|
if test "x$enable_dap" = xyes || test "x$enable_nczarr" = xyes; then
|
|
enable_curl=yes
|
|
fi
|
|
|
|
if test "x$enable_curl" = xyes; then
|
|
|
|
|
|
if test "x$enable_dap" = xyes && test "x$found_curl" = xno ; then
|
|
AC_MSG_WARN([curl required for dap access. DAP support disabled.])
|
|
enable_dap=no
|
|
fi
|
|
|
|
# Need curl for byte ranges
|
|
if test "x$found_curl" = xno && test "x$enable_byterange" = xyes ; then
|
|
AC_MSG_WARN([curl required for byte range support. Install curl or build without --enable-byterange.])
|
|
enable_byterange=no
|
|
fi
|
|
|
|
if test "x$enable_byterange" = xyes; then
|
|
AC_DEFINE([NETCDF_ENABLE_BYTERANGE], [1], [if true, support byte-range read of remote datasets.])
|
|
fi
|
|
|
|
AC_CHECK_LIB([curl],[curl_easy_setopt],[found_curl=yes],[found_curl=no])
|
|
if test "x$found_curl" = "xyes" ; then
|
|
AC_SEARCH_LIBS([curl_easy_setopt],[curl curl.dll cygcurl.dll], [],[])
|
|
fi
|
|
|
|
if test "x$enable_dap" = xyes & test "x$found_curl" = xno ; then
|
|
AC_MSG_WARN([curl required for dap access. DAP support disabled.])
|
|
enable_dap=no
|
|
fi
|
|
|
|
# Save/restore CFLAGS
|
|
SAVECFLAGS="$CFLAGS"
|
|
CFLAGS="${curl_cflags}"
|
|
|
|
# CURLOPT_USERNAME is not defined until curl version 7.19.1
|
|
# CURLOPT_PASSWORD is not defined until curl version 7.19.1
|
|
# CURLOPT_KEYPASSWD is not defined until curl version 7.16.4
|
|
# CURLINFO_RESPONSE_CODE is not defined until curl version 7.10.7
|
|
# CURLOPT_CHUNK_BGN_FUNCTION is not defined until curl version 7.21.0
|
|
# CURL_MAX_READ_SIZE is not defined until 7.59
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
|
[#include "curl/curl.h"],
|
|
[[int x = CURLOPT_USERNAME;]])],
|
|
[haveusername=yes],
|
|
[haveusername=no])
|
|
AC_MSG_CHECKING([whether CURLOPT_USERNAME is defined])
|
|
AC_MSG_RESULT([${haveusername}])
|
|
if test $haveusername = yes; then
|
|
AC_DEFINE([HAVE_CURLOPT_USERNAME],[1],[Is CURLOPT_USERNAME defined])
|
|
fi
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
|
[#include "curl/curl.h"],
|
|
[[int x = CURLOPT_PASSWORD;]])],
|
|
[havepassword=yes],
|
|
[havepassword=no])
|
|
AC_MSG_CHECKING([whether CURLOPT_PASSWORD is defined])
|
|
AC_MSG_RESULT([${havepassword}])
|
|
if test $havepassword = yes; then
|
|
AC_DEFINE([HAVE_CURLOPT_PASSWORD],[1],[Is CURLOPT_PASSWORD defined])
|
|
fi
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
|
[#include "curl/curl.h"],
|
|
[[int x = CURLOPT_KEYPASSWD;]])],
|
|
[havekeypassword=yes],
|
|
[havekeypassword=no])
|
|
AC_MSG_CHECKING([whether CURLOPT_KEYPASSWD is defined])
|
|
AC_MSG_RESULT([${havekeypassword}])
|
|
if test $havekeypassword = yes; then
|
|
AC_DEFINE([HAVE_CURLOPT_KEYPASSWD],[1],[Is CURLOPT_KEYPASSWD defined])
|
|
fi
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
|
[#include "curl/curl.h"],
|
|
[[int x = CURLINFO_RESPONSE_CODE;]])],
|
|
[haveresponsecode=yes],
|
|
[haveresponsecode=no])
|
|
AC_MSG_CHECKING([whether CURLINFO_RESPONSE_CODE is defined])
|
|
AC_MSG_RESULT([${haveresponsecode}])
|
|
if test $haveresponsecode = yes; then
|
|
AC_DEFINE([HAVE_CURLINFO_RESPONSE_CODE],[1],[Is CURLINFO_RESPONSE_CODE defined])
|
|
fi
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
|
[#include "curl/curl.h"],
|
|
[[int x = CURLOPT_BUFFERSIZE;]])],
|
|
[havecurloption=yes],
|
|
[havecurloption=no])
|
|
AC_MSG_CHECKING([whether CURLOPT_BUFFERSIZE is defined])
|
|
AC_MSG_RESULT([${havecurloption}])
|
|
if test $havecurloption = yes; then
|
|
AC_DEFINE([HAVE_CURLOPT_BUFFERSIZE],[1],[Is CURLOPT_BUFFERSIZE defined])
|
|
fi
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
|
[#include "curl/curl.h"],
|
|
[[int x = CURLOPT_TCP_KEEPALIVE;]])],
|
|
[havecurloption=yes],
|
|
[havecurloption=no])
|
|
AC_MSG_CHECKING([whether CURLOPT_TCP_KEEPALIVE is defined])
|
|
AC_MSG_RESULT([${havecurloption}])
|
|
if test $havecurloption = yes; then
|
|
AC_DEFINE([HAVE_CURLOPT_KEEPALIVE],[1],[Is CURLOPT_TCP_KEEPALIVE defined])
|
|
fi
|
|
|
|
# CURLOPT_VERIFYHOST semantics differ depending on version
|
|
AC_MSG_CHECKING([whether libcurl is version 7.66 or later?])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
|
[#include "curl/curl.h"],
|
|
[[
|
|
#if !CURL_AT_LEAST_VERSION(7,66,0)
|
|
error "<7.66";
|
|
#endif
|
|
]])], [libcurl766=yes], [libcurl766=no])
|
|
AC_MSG_RESULT([$libcurl766])
|
|
if test x$libcurl766 = xyes; then
|
|
AC_DEFINE([HAVE_LIBCURL_766],[1],[libcurl version is 7.66 or later])
|
|
fi
|
|
|
|
CFLAGS="$SAVECFLAGS"
|
|
fi
|
|
|
|
###
|
|
# End libcurl-related stanza
|
|
###
|
|
|
|
###
|
|
# Libxml2 control block.
|
|
###
|
|
|
|
AC_MSG_CHECKING([whether to search for and use external libxml2])
|
|
AC_ARG_ENABLE([libxml2],
|
|
[AS_HELP_STRING([--disable-libxml2],
|
|
[disable detection and use of libxml2 in favor of the bundled xml parser])])
|
|
test "x$enable_libxml2" = xno || enable_libxml2=yes
|
|
AC_MSG_RESULT([$enable_libxml2])
|
|
|
|
# We can optionally use libxml2 for DAP4 and nch5comms, if enabled
|
|
have_libxml2=no
|
|
if test "x$enable_libxml2" = xyes; then
|
|
AC_CHECK_PROGS([NC_XML2_CONFIG], [xml2-config])
|
|
if test -z "$NC_XML2_CONFIG"; then
|
|
AC_MSG_ERROR([Cannot find xml2-config utility. Either install the libxml2 development package, or re-run configure with --disable-libxml2 to use the bundled xml2 parser])
|
|
fi
|
|
AC_CHECK_LIB([xml2],[xmlReadMemory],[have_libxml2=yes],[have_libxml2=no])
|
|
if test "x$have_libxml2" = "xyes" ; then
|
|
AC_SEARCH_LIBS([xmlReadMemory],[xml2 xml2.dll cygxml2.dll], [],[])
|
|
fi
|
|
if test "x$have_libxml2" = xyes; then
|
|
XML2FLAGS=`xml2-config --cflags`
|
|
AC_SUBST([XML2FLAGS],${XML2FLAGS})
|
|
AC_DEFINE([HAVE_LIBXML2], [1], [if true, use libxml2])
|
|
fi
|
|
fi
|
|
|
|
if test "x$enable_libxml2" = xyes; then
|
|
XMLPARSER="libxml2"
|
|
else
|
|
XMLPARSER="tinyxml2 (bundled)"
|
|
fi
|
|
|
|
# Need a condition and subst for this
|
|
AM_CONDITIONAL(NETCDF_ENABLE_LIBXML2, [test "x$enable_libxml2" = xyes])
|
|
AC_SUBST([XMLPARSER],[${XMLPARSER}])
|
|
|
|
###
|
|
# End Libxml2 block
|
|
###
|
|
|
|
##
|
|
# Should quantize be enabled?
|
|
# On by default, but for testing purposes we may want to
|
|
# disable it.
|
|
##
|
|
AC_MSG_CHECKING([whether to enable quantize functionality])
|
|
AC_ARG_ENABLE([quantize],
|
|
[AS_HELP_STRING([--disable-quantize],
|
|
[disable quantize support. It is safe to leave this on unless you specifically need to disable it.])])
|
|
test "x$enable_quantize" = xno || enable_quantize=yes
|
|
|
|
AC_MSG_RESULT($enable_quantize)
|
|
if test "x${enable_quantize}" = xyes; then
|
|
AC_DEFINE([NETCDF_ENABLE_QUANTIZE], [1], [if true, enable quantize support])
|
|
fi
|
|
AM_CONDITIONAL(NETCDF_ENABLE_QUANTIZE, [test x$enable_quantize = xyes])
|
|
|
|
# --enable-dap => enable-dap4
|
|
enable_dap4=$enable_dap
|
|
AC_MSG_CHECKING([whether dap use of remotetest server should be enabled])
|
|
AC_ARG_ENABLE([dap-remote-tests],
|
|
[AS_HELP_STRING([--disable-dap-remote-tests],
|
|
[disable dap remote tests])])
|
|
# Default on
|
|
test "x$enable_dap_remote_tests" = xno || enable_dap_remote_tests=yes
|
|
if test "x$enable_dap" = "xno" ; then
|
|
enable_dap_remote_tests=no
|
|
fi
|
|
AC_MSG_RESULT($enable_dap_remote_tests)
|
|
|
|
# Provide a global control for remotetest.
|
|
if test "xREMOTETESTDOWN" = xyes ; then
|
|
AC_MSG_WARN("ENV(REMOTETESTDOWN) => netcdf_enable_dap_remote_tests == no")
|
|
enable_dap_remote_tests=no
|
|
fi
|
|
|
|
AC_MSG_CHECKING([whether use of external (non-unidata) servers should be enabled])
|
|
AC_ARG_ENABLE([external-server-tests],
|
|
[AS_HELP_STRING([--enable-external-server-tests (default off)],
|
|
[enable external server tests])])
|
|
test "x$enable_external_server_tests" = xyes || enable_external_server_tests=no
|
|
AC_MSG_RESULT($enable_external_server_tests)
|
|
|
|
if test "x$enable_dap_remote_tests" = "xno" ; then
|
|
AC_MSG_NOTICE([--disable-dap_remote_tests => --disable-external-server-tests])
|
|
enable_external_server_tests=no
|
|
fi
|
|
|
|
# Default is not to do the remote authorization tests.
|
|
AC_MSG_CHECKING([whether dap authorization testing should be enabled (default off)])
|
|
AC_ARG_ENABLE([dap-auth-tests],
|
|
[AS_HELP_STRING([--enable-dap-auth-tests],
|
|
[enable dap remote authorization tests])])
|
|
test "x$enable_dap_auth_tests" = xyes || enable_dap_auth_tests=no
|
|
AC_MSG_RESULT($enable_dap_auth_tests)
|
|
|
|
# dap must be enabled in order to use various other flags
|
|
|
|
if test "x$enable_dap" = "xno" ; then
|
|
AC_MSG_NOTICE([--disable-dap => --disable-dap-remote-tests --disable-auth-tests --disable-external-server-tests])
|
|
enable_dap_remote_tests=no
|
|
enable_dap_auth_tests=no
|
|
enable_external_server_tests=no
|
|
fi
|
|
|
|
# Did the user specify a list of test servers to try for remote tests?
|
|
AC_MSG_CHECKING([which remote test server(s) to use])
|
|
AC_ARG_WITH([testservers],
|
|
[AS_HELP_STRING([--with-testservers=<host:port>,<host:port>...],
|
|
[Specify the testserver(s) to try for remote tests.])],
|
|
[REMOTETESTSERVERS=$with_testservers], [REMOTETESTSERVERS=no])
|
|
if test "x$REMOTETESTSERVERS" = xno ; then
|
|
dfaltsvc="remotetest.unidata.ucar.edu"
|
|
REMOTETESTSERVERS="${dfaltsvc}"
|
|
fi
|
|
msg="${REMOTETESTSERVERS}"
|
|
if test "x$dfaltsvc" != x ; then
|
|
msg="${msg} (default)"
|
|
fi
|
|
AC_MSG_RESULT([${msg}])
|
|
AC_DEFINE_UNQUOTED([REMOTETESTSERVERS], ["$REMOTETESTSERVERS"], [the testservers for remote tests.])
|
|
|
|
# Set the config.h flags
|
|
if test "x$enable_dap" = xyes; then
|
|
AC_DEFINE([USE_DAP], [1], [if true, build DAP Client])
|
|
AC_DEFINE([NETCDF_ENABLE_DAP], [1], [if true, build DAP Client])
|
|
fi
|
|
|
|
if test "x$enable_dap_remote_tests" = xyes; then
|
|
AC_DEFINE([NETCDF_ENABLE_DAP_REMOTE_TESTS], [1], [if true, do remote tests])
|
|
fi
|
|
if test "x$enable_external_server_tests" = xyes; then
|
|
AC_DEFINE([NETCDF_ENABLE_EXTERNAL_SERVER_TESTS], [1], [if true, do remote external tests])
|
|
fi
|
|
|
|
AC_MSG_CHECKING([whether the time-consuming dap tests should be enabled (default off)])
|
|
AC_ARG_ENABLE([dap-long-tests],
|
|
[AS_HELP_STRING([--enable-dap-long-tests],
|
|
[enable dap long tests])])
|
|
test "x$enable_dap_long_tests" = xyes || enable_dap_long_tests=no
|
|
AC_MSG_RESULT([$enable_dap_long_tests])
|
|
if test "x$enable_dap_remote_tests" = "xno" || test "x$enable_external_server_tests" = "xno" ; then
|
|
AC_MSG_NOTICE([--disable-dap-remote|external-server-tests => --disable_dap_long_tests])
|
|
enable_dap_long_tests=no
|
|
fi
|
|
|
|
if test "x$enable_nczarr" = xyes; then
|
|
AC_DEFINE([NETCDF_ENABLE_NCZARR], [1], [if true, build NCZarr Client])
|
|
AC_SUBST(NETCDF_ENABLE_NCZARR)
|
|
fi
|
|
AM_CONDITIONAL(NETCDF_ENABLE_NCZARR, [test x$enable_nczarr = xyes])
|
|
|
|
##########
|
|
# Look for Standardized libraries
|
|
##########
|
|
|
|
##
|
|
# blosc checks
|
|
##
|
|
|
|
# See if we want to enable blosc, and if so, search for the library.
|
|
AC_MSG_CHECKING([whether to search for and enable blosc filter support])
|
|
AC_ARG_ENABLE([filter-blosc],
|
|
[AS_HELP_STRING([--disable-filter-blosc],
|
|
[disable blosc filter support.])])
|
|
test "x$enable_filter_blosc" = xno || enable_filter_blosc=yes
|
|
AC_MSG_RESULT($enable_filter_blosc)
|
|
|
|
if test "x$enable_filter_blosc" = "xyes" ; then
|
|
# See if we have libblosc
|
|
AC_CHECK_LIB([blosc],[blosc_init],[have_blosc=yes],[have_blosc=no])
|
|
if test "x$have_blosc" = "xyes" ; then
|
|
AC_SEARCH_LIBS([blosc_init],[blosc blosc.dll cygblosc.dll], [], [])
|
|
AC_DEFINE([HAVE_BLOSC], [1], [if true, blosc library is available])
|
|
fi
|
|
else
|
|
have_blosc=no
|
|
fi
|
|
##
|
|
# End blosc checks
|
|
##
|
|
|
|
##
|
|
# libzstd checks
|
|
##
|
|
|
|
# See if we want to enable libzstd, and if so, search for the library.
|
|
AC_MSG_CHECKING([whether to search for and enable libzstd filter support])
|
|
AC_ARG_ENABLE([filter-zstd],
|
|
[AS_HELP_STRING([--disable-filter-zstd],
|
|
[disable zstd filter support.])])
|
|
test "x$enable_filter_zstd" = xno || enable_filter_zstd=yes
|
|
AC_MSG_RESULT($enable_filter_zstd)
|
|
|
|
if test "x$enable_filter_zstd" = "xyes" ; then
|
|
# See if we have libzstd
|
|
AC_CHECK_LIB([zstd],[ZSTD_compress],[have_zstd=yes],[have_zstd=no])
|
|
if test "x$have_zstd" = "xyes" ; then
|
|
AC_SEARCH_LIBS([ZSTD_compress],[zstd zstd.dll cygzstd.dll], [], [])
|
|
AC_DEFINE([HAVE_ZSTD], [1], [if true, zstd library is available])
|
|
|
|
fi
|
|
AC_MSG_CHECKING([whether libzstd library is available])
|
|
AC_MSG_RESULT([${have_zstd}])
|
|
|
|
##
|
|
# Ensure that the zstd.h dev files are also available.
|
|
##
|
|
if test "x$have_zstd" = "xyes" ; then
|
|
AC_CHECK_HEADERS([zstd.h], [], [nc_zstd_h_missing=yes])
|
|
if test "x$nc_zstd_h_missing" = xyes; then
|
|
AC_MSG_WARN([zstd library detected, but zstd.h development file not found. Ensure that the zstd development files are installed in order to build zstd support.])
|
|
AC_DEFINE([HAVE_ZSTD], [0], [if true, zstd library is available])
|
|
have_zstd=no
|
|
fi
|
|
fi
|
|
|
|
else
|
|
have_zstd=no
|
|
fi
|
|
AC_MSG_CHECKING([whether we are going to build with zstd])
|
|
AC_SUBST([HAS_ZSTD], [$have_zstd])
|
|
AC_MSG_RESULT([$have_zstd])
|
|
|
|
##
|
|
# End zstd checks
|
|
##
|
|
|
|
##
|
|
# Begin bz2 checks
|
|
##
|
|
|
|
# See if we want to enable BZ2, and if so, search for the library.
|
|
AC_MSG_CHECKING([whether to search for and enable external bz2 filter support])
|
|
AC_ARG_ENABLE([filter-bz2],
|
|
[AS_HELP_STRING([--disable-filter-bz2],
|
|
[disable external bz2 filter support. bz2 support defaults to internal implementation if this is disabled or if the external library is not found.])])
|
|
test "x$enable_filter_bz2" = xno || enable_filter_bz2=yes
|
|
AC_MSG_RESULT([$enable_filter_bz2])
|
|
|
|
if test "x$enable_filter_bz2" = "xyes" ; then
|
|
|
|
AC_CHECK_LIB([bz2],[BZ2_bzCompress],[have_bz2=yes],[have_bz2=no])
|
|
if test "x$have_bz2" = "xyes" ; then
|
|
AC_SEARCH_LIBS([BZ2_bzCompress],[bz2 bz2.dll cygbz2.dll], [], [])
|
|
AC_DEFINE([HAVE_BZ2], [1], [if true, bz2 library is installed])
|
|
fi
|
|
AC_MSG_CHECKING([whether libbz2 library is available])
|
|
AC_MSG_RESULT([${have_bz2}])
|
|
|
|
fi
|
|
|
|
# How about bzip2
|
|
|
|
if test "x$have_bz2" = x ; then
|
|
|
|
AC_CHECK_LIB([bzip2],[BZ2_bzCompress],[have_bz2=yes],[have_bz2=no])
|
|
if test "x$have_bz2" = "xyes" ; then
|
|
AC_SEARCH_LIBS([BZ2_bzCompress],[bzip2 bzip2.dll cygbzip2.dll], [], [])
|
|
AC_DEFINE([HAVE_BZ2], [1], [if true, bzip2 library is installed])
|
|
fi
|
|
AC_MSG_CHECKING([whether libbzip2 library is available])
|
|
AC_MSG_RESULT([${have_bz2}])
|
|
|
|
fi
|
|
|
|
if test "x$have_bz2" = "xno" ; then
|
|
have_local_bz2=yes
|
|
AC_MSG_NOTICE([Defaulting to internal libbz2])
|
|
else
|
|
have_local_bz2=no
|
|
fi
|
|
|
|
AM_CONDITIONAL(HAVE_LOCAL_BZ2, [test "x$have_local_bz2" = xyes])
|
|
##
|
|
# End bz2 checks
|
|
##
|
|
|
|
# Note that szip management is tricky.
|
|
# This is because we have three things to consider:
|
|
# 1. is libsz available?
|
|
# 2. is szip enabled in HDF5?
|
|
# 3. is nczarr enabled?
|
|
# We need separate flags for cases 1 and 2
|
|
|
|
# See if we have libsz (usually via libaec)
|
|
AC_CHECK_LIB([sz],[SZ_BufftoBuffCompress],[have_sz=yes],[have_sz=no])
|
|
if test "x$have_sz" = "xyes" ; then
|
|
AC_SEARCH_LIBS([SZ_BufftoBuffCompress],[sz sz.dll cygsz.dll], [], [])
|
|
AC_DEFINE([HAVE_SZ], [1], [if true, libsz (==szip) is available])
|
|
fi
|
|
AC_MSG_CHECKING([whether libsz library is available])
|
|
AC_MSG_RESULT([${have_sz}])
|
|
|
|
##########
|
|
|
|
##
|
|
# Check to see if we're using NCZarr. If not, we don't need to check for dependencies and such.
|
|
##
|
|
|
|
if test "x$enable_nczarr" = xno ; then
|
|
enable_nczarr_zip=no
|
|
else
|
|
|
|
# See if we have libzip for NCZarr
|
|
AC_SEARCH_LIBS([zip_open],[zip zip.dll cygzip.dll],[have_zip=yes],[have_zip=no])
|
|
AC_MSG_CHECKING([whether libzip library is available])
|
|
AC_MSG_RESULT([${have_zip}])
|
|
enable_nczarr_zip=${have_zip} # alias
|
|
|
|
AC_MSG_CHECKING([whether nczarr zip support is enabled])
|
|
AC_MSG_RESULT([${enable_nczarr_zip}])
|
|
|
|
if test "x$enable_nczarr_zip" = xyes ; then
|
|
AC_DEFINE([NETCDF_ENABLE_NCZARR_ZIP], [1], [If true, then libzip found])
|
|
fi
|
|
|
|
# Check for enabling of S3 support
|
|
AC_MSG_CHECKING([whether netcdf S3 support should be enabled])
|
|
AC_ARG_ENABLE([s3],
|
|
[AS_HELP_STRING([--enable-s3],
|
|
[enable netcdf S3 support (default off)])])
|
|
test "x$enable_s3" = xyes || enable_s3=no
|
|
AC_MSG_RESULT($enable_s3)
|
|
|
|
# --enable-nczarr-s3 is synonym for --enable-s3 (but...)
|
|
AC_MSG_CHECKING([whether netcdf NCZarr S3 support should be enabled])
|
|
AC_ARG_ENABLE([nczarr-s3],
|
|
[AS_HELP_STRING([--enable-nczarr-s3],
|
|
[(Deprecated) enable netcdf NCZarr S3 support; Deprecated in favor of --enable-s3])])
|
|
AC_MSG_RESULT([$enable_nczarr_s3 (Deprecated) Please use --enable-s3)])
|
|
|
|
# Set enable_s3 instead of enable_nczarr_s3
|
|
if test "x$enable_s3" = xno && test "x$enable_nczarr_s3" = xyes ; then
|
|
enable_s3=yes # back compatibility
|
|
fi
|
|
unset enable_nczarr_s3
|
|
|
|
if test "x$enable_remote_functionality" = xno ; then
|
|
AC_MSG_WARN([--disable-remote-functionality => --disable-s3])
|
|
enable_s3=no
|
|
fi
|
|
|
|
# Note we check for the library after checking for enable_s3
|
|
# because for some reason this fails if we unconditionally test for sdk
|
|
# and it is not available. Fix someday
|
|
S3LIBS=""
|
|
if test "x$enable_s3" = xyes ; then
|
|
# See if we have the s3 aws library
|
|
# Check for the AWS S3 SDK library
|
|
AC_LANG_PUSH([C++])
|
|
AC_CHECK_LIB([aws-c-common], [aws_string_destroy], [enable_s3_aws=yes],[enable_s3_aws=no])
|
|
if test "x$enable_s3_aws" = "xyes" ; then
|
|
S3LIBS="-laws-cpp-sdk-core -laws-cpp-sdk-s3"
|
|
fi
|
|
AC_LANG_POP
|
|
else
|
|
enable_s3_aws=no
|
|
fi
|
|
|
|
AC_MSG_CHECKING([whether AWS S3 SDK library is available])
|
|
AC_MSG_RESULT([$enable_s3_aws])
|
|
|
|
# Check for enabling forced use of Internal S3 library
|
|
AC_MSG_CHECKING([whether internal S3 support should be used])
|
|
AC_ARG_ENABLE([s3-internal],
|
|
[AS_HELP_STRING([--enable-s3-internal],
|
|
[enable internal S3 support])])
|
|
test "x$enable_s3_internal" = xyes || enable_s3_internal=no
|
|
AC_MSG_RESULT($enable_s3_internal)
|
|
|
|
if test "x$enable_s3_aws" = xno && test "x$enable_s3_internal" = xno ; then
|
|
AC_MSG_WARN([No S3 library available => S3 support disabled])
|
|
enable_s3=no
|
|
fi
|
|
|
|
if test "x$enable_s3_aws" = xyes && test "x$enable_s3_internal" = xyes ; then
|
|
AC_MSG_WARN([Both aws-sdk-cpp and s3-internal enabled => use s3-internal.])
|
|
enable_s3_aws=no
|
|
fi
|
|
|
|
if test "x$enable_s3_internal" = xyes ; then
|
|
if test "x$ISOSX" != xyes && test "x$ISMINGW" != xyes && test "x$ISMSVC" != xyes ; then
|
|
# Find crypto libraries if using ssl
|
|
AC_CHECK_LIB([ssl],[ssl_create_cipher_list])
|
|
AC_CHECK_LIB([crypto],[SHA256])
|
|
fi
|
|
fi
|
|
|
|
# Check for enabling S3 testing
|
|
AC_MSG_CHECKING([what level of netcdf S3 testing should be enabled])
|
|
AC_ARG_WITH([s3-testing],
|
|
[AS_HELP_STRING([--with-s3-testing=yes|no|public],
|
|
[control netcdf S3 testing])],
|
|
[], [with_s3_testing=public])
|
|
AC_MSG_RESULT($with_s3_testing)
|
|
|
|
# Disable S3 tests if S3 support is disabled
|
|
if test "x$enable_s3" = xno ; then
|
|
if test "x$with_s3_testing" != xno ; then
|
|
AC_MSG_WARN([S3 support is disabled => no testing])
|
|
with_s3_testing=no
|
|
fi
|
|
fi
|
|
|
|
if test "x$enable_s3" = xyes ; then
|
|
AC_DEFINE([NETCDF_ENABLE_S3], [1], [if true, build netcdf-c with S3 support enabled])
|
|
fi
|
|
|
|
if test "x$enable_s3_aws" = xyes ; then
|
|
LIBS="$LIBS$S3LIBS"
|
|
AC_DEFINE([NETCDF_ENABLE_S3_AWS], [1], [If true, then use aws S3 library])
|
|
fi
|
|
|
|
if test "x$enable_s3_internal" = xyes ; then
|
|
AC_DEFINE([NETCDF_ENABLE_S3_INTERNAL], [1], [If true, then use internal S3 library])
|
|
fi
|
|
|
|
AC_DEFINE_UNQUOTED([WITH_S3_TESTING], [$with_s3_testing], [control S3 testing.])
|
|
|
|
if test "x$with_s3_testing" = xyes ; then
|
|
AC_MSG_WARN([*** DO NOT SPECIFY WITH_S3_TESTING=YES UNLESS YOU HAVE ACCESS TO THE UNIDATA S3 BUCKET! ***])
|
|
AC_DEFINE([NETCDF_ENABLE_S3_TESTALL], [yes], [control S3 testing.])
|
|
fi
|
|
fi
|
|
|
|
# Check whether we want to enable strict null byte header padding.
|
|
# See https://github.com/Unidata/netcdf-c/issues/657 for more information.
|
|
AC_MSG_CHECKING([whether to enable strict null-byte header padding when reading (default off)])
|
|
AC_ARG_ENABLE([strict-null-byte-header-padding],
|
|
[AS_HELP_STRING([--enable-strict-null-byte-header-padding],
|
|
[enable strict null-byte header padding when reading netCDF3 files.])])
|
|
test "x$enable_strict_null_byte_header_padding" = xyes || enable_strict_null_byte_header_padding=no
|
|
AC_MSG_RESULT($enable_strict_null_byte_header_padding)
|
|
|
|
if test "x$enable_strict_null_byte_header_padding" = xyes; then
|
|
AC_DEFINE([USE_STRICT_NULL_BYTE_HEADER_PADDING], [1], [if true, enable strict null byte header padding])
|
|
fi
|
|
|
|
AM_CONDITIONAL(USE_STRICT_NULL_BYTE_HEADER_PADDING, [test x$enable_strict_null_byte_header_padding = xyes ])
|
|
|
|
# Does the user want to use the ffio module?
|
|
AC_MSG_CHECKING([whether FFIO will be used])
|
|
AC_ARG_ENABLE([ffio],
|
|
[AS_HELP_STRING([--enable-ffio],
|
|
[use ffio instead of posixio (ex. on the Cray)])])
|
|
test "x$enable_ffio" = xyes || enable_ffio=no
|
|
AC_MSG_RESULT($enable_ffio)
|
|
if test "x$enable_ffio" = xyes; then
|
|
AC_DEFINE([USE_FFIO], [1], [if true, use ffio instead of posixio])
|
|
fi
|
|
AM_CONDITIONAL(USE_FFIO, [test x$enable_ffio = xyes])
|
|
|
|
# Does the user want to use the stdio module?
|
|
AC_MSG_CHECKING([whether STDIO will be used])
|
|
AC_ARG_ENABLE([stdio],
|
|
[AS_HELP_STRING([--enable-stdio],
|
|
[use stdio instead of posixio (ex. on the Cray)])])
|
|
test "x$enable_stdio" = xyes || enable_stdio=no
|
|
AC_MSG_RESULT($enable_stdio)
|
|
if test "x$enable_stdio" = xyes; then
|
|
AC_DEFINE([USE_STDIO], [1], [if true, use stdio instead of posixio])
|
|
fi
|
|
AM_CONDITIONAL(USE_STDIO, [test x$enable_stdio = xyes])
|
|
|
|
nc_build_c=yes
|
|
nc_build_v2=yes
|
|
nc_build_utilities=yes
|
|
nc_build_tests=yes
|
|
nc_build_examples=yes
|
|
|
|
# Does the user want to build examples?
|
|
AC_MSG_CHECKING([whether examples should be built])
|
|
AC_ARG_ENABLE([examples],
|
|
[AS_HELP_STRING([--disable-examples],
|
|
[don't build the netCDF examples during make check \
|
|
(examples are treated as extra tests by netCDF)])])
|
|
test "x$enable_examples" = xno && nc_build_examples=no
|
|
AC_MSG_RESULT($nc_build_examples)
|
|
AM_CONDITIONAL(BUILD_EXAMPLES, [test x$nc_build_examples = xyes])
|
|
|
|
# Does the user want to disable the V2 API?
|
|
AC_MSG_CHECKING([whether v2 netCDF API should be built])
|
|
AC_ARG_ENABLE([v2],
|
|
[AS_HELP_STRING([--disable-v2],
|
|
[turn off the netCDF version 2 API])])
|
|
test "x$enable_v2" = xno && nc_build_v2=no
|
|
AC_MSG_RESULT($nc_build_v2)
|
|
AM_CONDITIONAL(BUILD_V2, [test x$nc_build_v2 = xyes])
|
|
if test "x$nc_build_v2" = xno; then
|
|
AC_DEFINE_UNQUOTED(NO_NETCDF_2, 1, [do not build the netCDF version 2 API])
|
|
else
|
|
AC_DEFINE_UNQUOTED(USE_NETCDF_2, 1, [build the netCDF version 2 API])
|
|
fi
|
|
|
|
# Does the user want to disable ncgen/ncdump/nccopy/...?
|
|
AC_MSG_CHECKING([whether the ncgen/ncdump/nccopy should be built])
|
|
AC_ARG_ENABLE([utilities],
|
|
[AS_HELP_STRING([--disable-utilities],
|
|
[don't build netCDF utilities ncgen, ncdump, and nccopy])])
|
|
test "x$nc_build_c" = xno && enable_utilities=no
|
|
test "x$enable_utilities" = xno && nc_build_utilities=no
|
|
AC_MSG_RESULT($nc_build_utilities)
|
|
AM_CONDITIONAL(NETCDF_BUILD_UTILITIES, [test x$nc_build_utilities = xyes])
|
|
|
|
# Does the user want to disable all tests?
|
|
AC_MSG_CHECKING([whether test should be built and run])
|
|
AC_ARG_ENABLE([testsets],
|
|
[AS_HELP_STRING([--disable-testsets],
|
|
[don't build or run netCDF tests])])
|
|
test "x$enable_testsets" = xno || enable_testsets=yes
|
|
nc_build_tests=$enable_testsets
|
|
AC_MSG_RESULT($nc_build_tests)
|
|
AM_CONDITIONAL(BUILD_TESTSETS, [test x$nc_build_tests = xyes])
|
|
|
|
# Does the user want to run tests for large files (> 2GiB)?
|
|
AC_MSG_CHECKING([whether large file (> 2GB) tests should be run])
|
|
AC_ARG_ENABLE([large-file-tests],
|
|
[AS_HELP_STRING([--enable-large-file-tests],
|
|
[Run tests which create very large data files (~13 GB disk space
|
|
required, but it will be recovered when tests are complete). See
|
|
option --with-temp-large to specify temporary directory])])
|
|
test "x$enable_large_file_tests" = xyes || enable_large_file_tests=no
|
|
AC_MSG_RESULT($enable_large_file_tests)
|
|
AM_CONDITIONAL(LARGE_FILE_TESTS, [test x$enable_large_file_tests = xyes])
|
|
if test "x$enable_large_file_tests" = xyes; then
|
|
AC_DEFINE([LARGE_FILE_TESTS], [1], [do large file tests])
|
|
fi
|
|
|
|
# Does the user want to run benchmarks?
|
|
AC_MSG_CHECKING([whether benchmarks should be run])
|
|
AC_ARG_ENABLE([benchmarks],
|
|
[AS_HELP_STRING([--enable-benchmarks],
|
|
[Run benchmarks. This will cause sample data files from the Unidata resources
|
|
site to be fetched. The benchmarks are a bunch of extra tests, which
|
|
are timed. We use these tests to check netCDF performance.])])
|
|
test "x$enable_benchmarks" = xyes || enable_benchmarks=no
|
|
AC_MSG_RESULT($enable_benchmarks)
|
|
if test "x$enable_hdf5" = xno -a "x$enable_benchmarks" = xyes; then
|
|
AC_MSG_ERROR([Can't use benchmarks if HDF5 is disabled.])
|
|
fi
|
|
AM_CONDITIONAL(BUILD_BENCHMARKS, [test x$enable_benchmarks = xyes])
|
|
|
|
# Does the user want to use extreme numbers in testing.
|
|
AC_MSG_CHECKING([whether extreme numbers should be used in tests])
|
|
AC_ARG_ENABLE([extreme-numbers],
|
|
[AS_HELP_STRING([--disable-extreme-numbers],
|
|
[don't use extreme numbers during testing, such as MAX_INT - 1])])
|
|
case "$host_cpu $host_os" in
|
|
*386*solaris*)
|
|
test "x$enable_extreme_numbers" = xyes || enable_extreme_numbers=no
|
|
;;
|
|
*)
|
|
test "x$enable_extreme_numbers" = xno || enable_extreme_numbers=yes
|
|
;;
|
|
esac
|
|
AC_MSG_RESULT($enable_extreme_numbers)
|
|
|
|
if test "x$enable_extreme_numbers" = xyes; then
|
|
AC_DEFINE(USE_EXTREME_NUMBERS, 1, [set this to use extreme numbers in tests])
|
|
fi
|
|
|
|
# If the env. variable TEMP_LARGE is set, or if
|
|
# --with-temp-large=<directory>, use it as a place for the large
|
|
# (i.e. > 2 GiB) files created during the large file testing.
|
|
AC_MSG_CHECKING([where to put large temp files if large file tests are run])
|
|
AC_ARG_WITH([temp-large],
|
|
[AS_HELP_STRING([--with-temp-large=<directory>],
|
|
[specify directory where large files (i.e. >2 GB) \
|
|
will be written, if large files tests are run with
|
|
--enable-large-file-tests])],
|
|
[TEMP_LARGE=$with_temp_large])
|
|
TEMP_LARGE=${TEMP_LARGE-.}
|
|
AC_MSG_RESULT($TEMP_LARGE)
|
|
#AC_SUBST(TEMP_LARGE)
|
|
AC_DEFINE_UNQUOTED([TEMP_LARGE], ["$TEMP_LARGE"], [Place to put very large netCDF test files.])
|
|
|
|
# Specify extra values to add to _NCProperties attribute
|
|
# --with-ncproperties-extra="<name>=<value>|...".
|
|
# Note: need to figure out a way to do this programmatically also
|
|
AC_MSG_CHECKING([Extra values for _NCProperties])
|
|
AC_ARG_WITH([ncproperties-extra],
|
|
[AS_HELP_STRING([--with-ncproperties-extra="<name>=<value>,...],
|
|
[specify extra pairs for _NCProperties])],
|
|
[NCPROPERTIES_EXTRA=$with_ncproperties_extra],
|
|
[NCPROPERTIES_EXTRA=""])
|
|
AC_MSG_RESULT([$NCPROPERTIES_EXTRA])
|
|
AC_DEFINE_UNQUOTED([NCPROPERTIES_EXTRA], ["$NCPROPERTIES_EXTRA"], [Extra pairs for _NCProperties])
|
|
|
|
# Did the user specify a user-defined format 0?
|
|
AC_MSG_CHECKING([whether user-defined format 0 was specified])
|
|
AC_ARG_WITH([udf0],
|
|
[AS_HELP_STRING([--with-udf0=<dispatch_name>],
|
|
[Specify a dispatch table for user-defined format 0.])],
|
|
[UDF0_DISPATCH=$with_udf0])
|
|
AC_MSG_RESULT([$UDF0_DISPATCH])
|
|
if test -n "$UDF0_DISPATCH"; then
|
|
AC_DEFINE_UNQUOTED([UDF0_DISPATCH], [$UDF0_DISPATCH], [dispatch table for user-defined format 0.])
|
|
AC_DEFINE_UNQUOTED([UDF0_DISPATCH_FUNC], [get_$UDF0_DISPATCH()], [function to get dispatch table for user-defined format 0.])
|
|
AC_DEFINE([USE_UDF0], [1], [if true, use user-defined format 0 in utilities])
|
|
AC_CHECK_LIB([$UDF0_DISPATCH], [get_$UDF0_DISPATCH], [],
|
|
[AC_MSG_ERROR([Can't find or link to the user-defined format 0 library.])],
|
|
[])
|
|
fi
|
|
|
|
# Did the user specify a magic number for user-defined format 0?
|
|
AC_MSG_CHECKING([whether a magic number for user-defined format 0 was specified])
|
|
AC_ARG_WITH([udf0-magic-number],
|
|
[AS_HELP_STRING([--with-udf0-magic-number=<magic_number>],
|
|
[Specify a magic number for user-defined format 0 (ignored unless --with-udf0 is also used).])],
|
|
[UDF0_MAGIC_NUMBER=$with_udf0_magic_number])
|
|
AC_MSG_RESULT([$UDF0_MAGIC_NUMBER])
|
|
|
|
# Did the user specify a user-defined format 1?
|
|
AC_MSG_CHECKING([whether user-defined format 1 was specified])
|
|
AC_ARG_WITH([udf1],
|
|
[AS_HELP_STRING([--with-udf1=<dispatch_name>],
|
|
[Specify a dispatch table for user-defined format 1.])],
|
|
[UDF1_DISPATCH=$with_udf1])
|
|
AC_MSG_RESULT([$UDF1_DISPATCH])
|
|
if test -n "$UDF1_DISPATCH"; then
|
|
AC_DEFINE_UNQUOTED([UDF1_DISPATCH], [$UDF1_DISPATCH], [dispatch table for user-defined format 1.])
|
|
AC_DEFINE_UNQUOTED([UDF1_DISPATCH_FUNC], [get_$UDF1_DISPATCH()], [function to get dispatch table for user-defined format 1.])
|
|
AC_DEFINE([USE_UDF1], [1], [if true, use user-defined format 1 in utilities])
|
|
AC_CHECK_LIB([$UDF1_DISPATCH], [get_$UDF1_DISPATCH], [],
|
|
[AC_MSG_ERROR([Can't find or link to the user-defined format 1 library.])],
|
|
[])
|
|
fi
|
|
|
|
# Did the user specify a magic number for user-defined format 0?
|
|
AC_MSG_CHECKING([whether a magic number for user-defined format 1 was specified])
|
|
AC_ARG_WITH([udf1-magic-number],
|
|
[AS_HELP_STRING([--with-udf1-magic-number=<magic_number>],
|
|
[Specify a magic number for user-defined format 1 (ignored unless --with-udf1 is also used).])],
|
|
[UDF1_MAGIC_NUMBER=$with_udf1_magic_number])
|
|
AC_MSG_RESULT([$UDF1_MAGIC_NUMBER])
|
|
|
|
# According to the autoconf mailing list gurus, we must test for
|
|
# compilers unconditionally. That is, we can't skip looking for the
|
|
# fortran compilers, just because the user doesn't want fortran. This
|
|
# is due to a limitation in autoconf.
|
|
|
|
# Find the C compiler.
|
|
AC_MSG_NOTICE([finding C compiler])
|
|
|
|
## 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_PROG_CC
|
|
AC_PROG_CXX
|
|
AM_PROG_CC_C_O
|
|
AC_C_CONST
|
|
|
|
# Set up libtool.
|
|
AC_MSG_NOTICE([setting up libtool])
|
|
LT_PREREQ([2.2])
|
|
LT_INIT()
|
|
|
|
AC_MSG_NOTICE([finding other utilities])
|
|
|
|
# Is m4 installed? If not, bail.
|
|
AC_CHECK_PROGS([NC_M4], [m4])
|
|
if test -z "$NC_M4"; then
|
|
AC_MSG_ERROR([Cannot find m4 utility. Install m4 and try again.])
|
|
fi
|
|
|
|
if test "x$enable_doxygen" != xno; then
|
|
# Is doxygen installed? If so, have configure construct the Doxyfile.
|
|
AC_CHECK_PROGS([DOXYGEN], [doxygen])
|
|
if test -z "$DOXYGEN"; then
|
|
AC_MSG_ERROR([Doxygen not found - install doxygen or build without --enable-doxygen])
|
|
fi
|
|
fi
|
|
|
|
# Is graphviz/dot installed? If so, we'll use dot to create
|
|
# graphs in the documentation.
|
|
AC_CHECK_PROGS([DOT], [dot])
|
|
if test -z "$DOT"; then
|
|
AC_MSG_WARN([dot not found - will use simple charts in documentation])
|
|
HAVE_DOT=NO
|
|
elif test "x$enable_dot" = xno; then
|
|
HAVE_DOT=NO
|
|
else
|
|
HAVE_DOT=YES
|
|
fi
|
|
# If we have doxygen, and it's enabled, then process the file.
|
|
if test "x$enable_doxygen" != xno; then
|
|
if test -n "$DOXYGEN"; then
|
|
AC_SUBST(HAVE_DOT)
|
|
AC_CONFIG_FILES([docs/Doxyfile])
|
|
fi
|
|
# Note: the list of files to input to doxygen
|
|
# has been moved to docs/Doxyfile.in so
|
|
# that make distcheck works correctly.
|
|
# Any new inputs should be inserted into
|
|
# docs/Doxyfile.in and possibley docs/Makefile.am
|
|
fi
|
|
|
|
# Find the install program.
|
|
AC_PROG_INSTALL
|
|
|
|
# Check to see if any macros must be set to enable large (>2GB) files.
|
|
AC_SYS_LARGEFILE
|
|
|
|
AC_MSG_NOTICE([displaying some results])
|
|
|
|
## This next macro just prints some results for debugging
|
|
## support issues.
|
|
UD_DISPLAY_RESULTS
|
|
|
|
# For nightly build testing, output CC, FC, etc.
|
|
echo "CPPFLAGS=$CPPFLAGS CC=$CC CFLAGS=$CFLAGS LDFLAGS=$LDFLAGS LIBS=$LIBS" >> comps.txt
|
|
|
|
AC_MSG_NOTICE([checking types, headers, and functions])
|
|
|
|
AC_CHECK_HEADERS([sys/param.h])
|
|
AC_CHECK_HEADERS([libgen.h])
|
|
#AC_CHECK_HEADERS([locale.h])
|
|
AC_CHECK_HEADERS([locale.h stdio.h stdarg.h fcntl.h malloc.h stdlib.h string.h strings.h unistd.h sys/stat.h getopt.h sys/time.h sys/types.h time.h dirent.h stdint.h ctype.h sys/xattr_h])
|
|
|
|
# Do sys/resource.h separately
|
|
#AC_CHECK_HEADERS([sys/resource.h],[havesysresource=1],[havesysresource=0])
|
|
#if test "x$enable_dll" != xyes ; then
|
|
AC_CHECK_HEADERS([sys/resource.h])
|
|
#fi
|
|
|
|
# See if we have ftw.h to walk directory trees
|
|
AC_CHECK_HEADERS([ftw.h])
|
|
|
|
# Check for these functions...
|
|
AC_CHECK_FUNCS([strlcat snprintf strcasecmp fileno \
|
|
strdup strtoll strtoull \
|
|
mkstemp mktemp random \
|
|
getrlimit gettimeofday fsync MPI_Comm_f2c MPI_Info_f2c \
|
|
strncasecmp strlcpy])
|
|
|
|
# See if clock_gettime is available and its arg types.
|
|
AC_CHECK_FUNCS([clock_gettime])
|
|
AC_CHECK_TYPES([struct timespec])
|
|
|
|
# disable dap4 if hdf5 is disabled
|
|
if test "x$enable_hdf5" = "xno" ; then
|
|
AC_MSG_WARN([hdf5 not enabled; disabling DAP4])
|
|
enable_dap4=no
|
|
fi
|
|
|
|
if test "x$enable_dap4" = xyes; then
|
|
AC_DEFINE([NETCDF_ENABLE_DAP4], [1], [if true, build DAP4 Client])
|
|
fi
|
|
|
|
# check for useful, but not essential, memio support
|
|
AC_CHECK_FUNCS([memmove getpagesize sysconf])
|
|
|
|
# Does the user want to allow use of mmap for NC_DISKLESS?
|
|
AC_MSG_CHECKING([whether mmap is enabled for in-memory files])
|
|
AC_ARG_ENABLE([mmap],
|
|
[AS_HELP_STRING([--enable-mmap],
|
|
[allow mmap for in-memory files])])
|
|
test "x$enable_mmap" = xyes || enable_mmap=no
|
|
AC_MSG_RESULT($enable_mmap)
|
|
|
|
# check for mmap availability before committing to use mmap
|
|
have_mmap="$enable_mmap"
|
|
AC_CHECK_FUNCS([mmap],[havemmapfcn=yes],[havemmapfcn=no])
|
|
if test "x$havemmapfcn" = xno ; then
|
|
have_mmap=no
|
|
fi
|
|
|
|
# check for mremap availability; not strictly needed
|
|
AC_CHECK_FUNCS([mremap],[havemremapfcn=yes],[havemmapfcn=no])
|
|
|
|
# Check for MAP_ANONYMOUS
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
|
[#include <sys/mman.h>],
|
|
[[int x = MAP_ANONYMOUS;]])],
|
|
[havemapanon=yes],
|
|
[havemapanon=no])
|
|
AC_MSG_CHECKING([whether MAP_ANONYMOUS is defined])
|
|
AC_MSG_RESULT([${havemapanon}])
|
|
if test "x$havemapanon" != xyes ; then
|
|
have_mmap=no
|
|
fi
|
|
|
|
if test "x$have_mmap" != xyes ; then
|
|
if test "x$enable_mmap" = xyes ; then
|
|
AC_MSG_WARN([mmap functionality is not available: disabling mmap])
|
|
else
|
|
AC_MSG_NOTICE([mmap functionality is not available: disabling mmap])
|
|
fi
|
|
enable_mmap=no
|
|
fi
|
|
|
|
if test "x$enable_mmap" = xyes; then
|
|
AC_DEFINE([USE_MMAP], [1], [if true, use mmap for in-memory files])
|
|
fi
|
|
|
|
|
|
|
|
if test "x$enable_remote_functionality" = xno ; then
|
|
AC_MSG_WARN([--disable-remote-functionality => --disable-byterange])
|
|
enable_byterange=no
|
|
fi
|
|
|
|
|
|
# Does the user want to disable atexit?
|
|
AC_MSG_CHECKING([whether nc_finalize should be invoked at exit])
|
|
AC_ARG_ENABLE([atexit-finalize],
|
|
[AS_HELP_STRING([--disable-atexit-finalize],
|
|
[disable invoking nc_finalize at exit])])
|
|
test "x$enable_atexit_finalize" = xno || enable_atexit_finalize=yes
|
|
AC_MSG_RESULT($enable_atexit_finalize)
|
|
|
|
# Check for atexit
|
|
AC_CHECK_FUNCS([atexit])
|
|
|
|
# If no atexit, then disable atexit finalize
|
|
if test "x$enable_atexit_finalize" = xyes ; then
|
|
if test "x$ac_cv_func_function" = xno ; then
|
|
enable_atexit_finalize=no
|
|
AC_MSG_ERROR([atexit() required for enable-atexit-finalize.])
|
|
fi
|
|
fi
|
|
|
|
if test "x$enable_atexit_finalize" = xyes ; then
|
|
AC_DEFINE([NETCDF_ENABLE_ATEXIT_FINALIZE], [1], [If true, enable nc_finalize via atexit()])
|
|
fi
|
|
|
|
# Need libdl(d) for plugins
|
|
AC_CHECK_LIB([dl],[dlopen],[have_libdld=yes],[have_libdld=no])
|
|
if test "x$have_libdld" = "xyes" ; then
|
|
AC_SEARCH_LIBS([dlopen],[dl dld], [],[])
|
|
fi
|
|
|
|
# Does the user want plugins?
|
|
AC_MSG_CHECKING([whether dynamically loaded plugins is enabled])
|
|
AC_ARG_ENABLE([plugins],
|
|
[AS_HELP_STRING([--disable-plugins],
|
|
[disallow dynamically loaded plugins])])
|
|
test "x$enable_plugins" = xno || enable_plugins=yes
|
|
AC_MSG_RESULT([$enable_plugins])
|
|
if test "x$have_libdld" = xno && test "x$ISMSVC" = xno; then
|
|
enable_plugins=no
|
|
AC_MSG_WARN([libdld required for enable-plugins.])
|
|
fi
|
|
if test "x$enable_plugins" = xyes && test "x$enable_shared" = xno; then
|
|
AC_MSG_WARN([--disable-shared => --disable-plugins])
|
|
enable_plugins=no
|
|
fi
|
|
|
|
if test "x$enable_plugins" = xyes; then
|
|
AC_DEFINE([NETCDF_ENABLE_PLUGINS], [1], [if true, support dynamically loaded plugins])
|
|
fi
|
|
AM_CONDITIONAL(NETCDF_ENABLE_PLUGINS, [test "x$enable_plugins" = xyes])
|
|
AC_SUBST(USEPLUGINS, [${enable_plugins}])
|
|
|
|
AC_FUNC_ALLOCA
|
|
AC_CHECK_DECLS([isnan, isinf, isfinite],,,[#include <math.h>])
|
|
AC_CHECK_MEMBERS([struct stat.st_blksize])
|
|
UD_CHECK_IEEE
|
|
AC_CHECK_TYPES([size_t, ssize_t, schar, uchar, longlong, ushort, uint, int64, uint64, size64_t, ssize64_t, _off64_t, uint64_t, ptrdiff_t])
|
|
AC_TYPE_OFF_T
|
|
AC_TYPE_UINTPTR_T
|
|
AC_C_CHAR_UNSIGNED
|
|
AC_C_BIGENDIAN
|
|
|
|
AC_CHECK_TYPES([mode_t])
|
|
|
|
AM_CONDITIONAL(ISCYGWIN, [test "x$ISCYGWIN" = xyes])
|
|
AM_CONDITIONAL(ISMSVC, [test "x$ISMSVC" = xyes])
|
|
AM_CONDITIONAL(ISOSX, [test "x$ISOSX" = xyes])
|
|
AM_CONDITIONAL(ISMINGW, [test "x$ISMINGW" = xyes])
|
|
AM_CONDITIONAL(ISMSYS, [test "x$ISMSYS" = xyes])
|
|
|
|
AC_SUBST([ISMSVC], [${ISMSVC}])
|
|
AC_SUBST([WINVERMAJOR], [${WINVERMAJOR}])
|
|
AC_SUBST([WINVERBUILD], [${WINVERBUILD}])
|
|
AC_SUBST([ISCYGWIN], [${ISCYGWIN}])
|
|
AC_SUBST([ISOSX], [${ISOSX}])
|
|
AC_SUBST([ISMINGW], [${ISMINGW}])
|
|
AC_SUBST([ISMSYS], [${ISMSYS}])
|
|
|
|
if test "x$ISMSVC" != x ; then REGEDIT=yes; fi
|
|
if test "x$ISMSYS" != x ; then REGEDIT=yes; fi
|
|
if test "x$ISCYGWIN" != x ; then REGEDIT=yes; fi
|
|
if test "x$REGEDIT" = xyes; then
|
|
AC_DEFINE([REGEDIT], 1, [dreg.c usable])
|
|
fi
|
|
AM_CONDITIONAL(REGEDIT, [test "x$REGEDIT" = xyes])
|
|
AC_SUBST([ISREGEDIT], [yes])
|
|
|
|
###
|
|
# Crude hack to work around an issue
|
|
# in Cygwin.
|
|
###
|
|
SLEEPCMD=""
|
|
if test "x$ISCYGWIN" = "xyes"; then
|
|
SLEEPCMD="sleep 5"
|
|
AC_MSG_NOTICE([Pausing between sizeof() checks to mitigate a Cygwin issue.])
|
|
fi
|
|
|
|
$SLEEPCMD
|
|
AC_CHECK_SIZEOF(short)
|
|
$SLEEPCMD
|
|
AC_CHECK_SIZEOF(int)
|
|
$SLEEPCMD
|
|
AC_CHECK_SIZEOF(long)
|
|
$SLEEPCMD
|
|
AC_CHECK_SIZEOF(long long)
|
|
$SLEEPCMD
|
|
AC_CHECK_SIZEOF(float)
|
|
$SLEEPCMD
|
|
AC_CHECK_SIZEOF(double)
|
|
$SLEEPCMD
|
|
AC_CHECK_SIZEOF(off_t)
|
|
$SLEEPCMD
|
|
AC_CHECK_SIZEOF(size_t)
|
|
$SLEEPCMD
|
|
AC_CHECK_SIZEOF(unsigned long long)
|
|
|
|
if test "$ac_cv_sizeof_size_t" -lt "8" ; then
|
|
if test "x${enable_cdf5}" = xyes ; then
|
|
dnl unable to support CDF5, but --enable-cdf5 is explicitly set
|
|
AC_MSG_ERROR([Unable to support CDF5 feature because size_t is less than 8 bytes])
|
|
fi
|
|
enable_cdf5=no
|
|
else
|
|
if test "x${enable_cdf5}" != xno ; then
|
|
enable_cdf5=yes
|
|
fi
|
|
fi
|
|
|
|
if test "x${enable_cdf5}" = xyes; then
|
|
AC_DEFINE([NETCDF_ENABLE_CDF5], [1], [if true, enable CDF5 Support])
|
|
fi
|
|
AM_CONDITIONAL(NETCDF_ENABLE_CDF5, [test x$enable_cdf5 = xyes ])
|
|
|
|
$SLEEPCMD
|
|
if test "$ac_cv_type_uchar" = yes ; then
|
|
AC_CHECK_SIZEOF(uchar)
|
|
else
|
|
AC_CHECK_SIZEOF(unsigned char)
|
|
fi
|
|
|
|
$SLEEPCMD
|
|
if test "$ac_cv_type_ushort" = yes ; then
|
|
AC_CHECK_SIZEOF(ushort)
|
|
else
|
|
AC_CHECK_SIZEOF(unsigned short int)
|
|
fi
|
|
|
|
$SLEEPCMD
|
|
if test "$ac_cv_type_uint" = yes ; then
|
|
AC_CHECK_SIZEOF(uint)
|
|
else
|
|
AC_CHECK_SIZEOF(unsigned int)
|
|
fi
|
|
$SLEEPCMD
|
|
if test "$ac_cv_type_ushort" = yes ; then
|
|
AC_CHECK_SIZEOF(ushort)
|
|
else
|
|
AC_CHECK_SIZEOF(unsigned short int)
|
|
fi
|
|
$SLEEPCMD
|
|
if test "$ac_cv_type_uint" = yes ; then
|
|
AC_CHECK_SIZEOF(uint)
|
|
else
|
|
AC_CHECK_SIZEOF(unsigned int)
|
|
fi
|
|
$SLEEPCMD
|
|
AC_CHECK_SIZEOF(ssize_t)
|
|
$SLEEPCMD
|
|
AC_CHECK_SIZEOF([void*])
|
|
|
|
# Check for deflate library
|
|
AC_SEARCH_LIBS([deflate], [zlibwapi zlibstat zlib zlib1 z], [have_deflate=yes], [have_deflate=no])
|
|
AC_MSG_CHECKING([whether deflate library is available])
|
|
AC_MSG_RESULT([${have_deflate}])
|
|
|
|
if test "x$have_deflate" = xno ; then
|
|
AC_MSG_ERROR([Can't find or link to the z library. Turn off netCDF-4 and \
|
|
DAP and NCZarr clients with --disable-hdf5 --disable-dap --disable-nczarr, or see config.log for errors.])
|
|
fi
|
|
|
|
# We need the math library
|
|
AC_CHECK_LIB([m], [floor], [],
|
|
[AC_MSG_ERROR([Can't find or link to the math library.])])
|
|
|
|
if test "x$enable_netcdf4" = xyes; then
|
|
AC_DEFINE([USE_NETCDF4], [1], [if true, build netCDF-4])
|
|
fi
|
|
|
|
# Set defaults
|
|
hdf5_parallel=no
|
|
hdf5_supports_par_filters=no
|
|
enable_hdf5_szip=no
|
|
has_hdf5_ros3=no
|
|
|
|
if test "x$enable_hdf5" = xyes; then
|
|
AC_DEFINE([NETCDF_ENABLE_HDF5], [1], [if true, use HDF5])
|
|
AC_DEFINE([USE_HDF5], [1], [if true, use HDF5])
|
|
AC_DEFINE([H5_USE_16_API], [1], [use HDF5 1.6 API])
|
|
|
|
# Check for the main hdf5 and hdf5_hl library.
|
|
|
|
AC_SEARCH_LIBS([H5Fflush], [hdf5 hdf5.dll], [],
|
|
[AC_MSG_ERROR([Can't find or link to the hdf5 library. Use --disable-hdf5, or see config.log for errors.])])
|
|
AC_SEARCH_LIBS([H5DSis_scale], [hdf5_hl hdf5_hl.dll], [],
|
|
[AC_MSG_ERROR([Can't find or link to the hdf5 library. Use --disable-hdf5, or see config.log for errors.])])
|
|
|
|
AC_CHECK_HEADERS([hdf5.h], [], [AC_MSG_ERROR([Compiling a test with HDF5 failed. Either hdf5.h cannot be found, or config.log should be checked for other reason.])])
|
|
|
|
# Was HDF5 built with zlib as netCDF requires?
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include "H5public.h"],
|
|
[[#if !H5_HAVE_ZLIB_H
|
|
# error
|
|
#endif]
|
|
])], [], [AC_MSG_ERROR([HDF5 was not built with zlib, which is required. Rebuild HDF5 with zlib.])])
|
|
|
|
# H5Pset_fapl_mpiposix and H5Pget_fapl_mpiposix have been removed since HDF5 1.8.12.
|
|
# Use H5Pset_fapl_mpio and H5Pget_fapl_mpio, instead.
|
|
|
|
AC_CHECK_FUNCS([H5Pget_fapl_mpio H5Pset_deflate H5Z_SZIP H5Pset_all_coll_metadata_ops H5Literate H5Literate2])
|
|
|
|
# Check to see if HDF5 library has collective metadata APIs, (HDF5 >= 1.10.0)
|
|
if test "x$ac_cv_func_H5Pset_all_coll_metadata_ops" = xyes; then
|
|
AC_DEFINE([HDF5_HAS_COLL_METADATA_OPS], [1], [if true, use collective metadata ops in parallel netCDF-4])
|
|
fi
|
|
|
|
# If parallel is available in hdf5, enable it in the C code. Also add some stuff to netcdf.h.
|
|
if test "x$ac_cv_func_H5Pget_fapl_mpio" = xyes -o "x$ac_cv_func_H5Pget_fapl_mpiposix" = xyes; then
|
|
hdf5_parallel=yes
|
|
fi
|
|
AC_MSG_CHECKING([whether parallel io is enabled in hdf5])
|
|
AC_MSG_RESULT([$hdf5_parallel])
|
|
|
|
# See if H5Dread_chunk is available
|
|
AC_SEARCH_LIBS([H5Dread_chunk],[hdf5_hldll hdf5_hl], [has_readchunks=yes], [has_readdhunks=no])
|
|
|
|
# See if hdf5 library supports Read-Only S3 (byte-range) driver
|
|
AC_SEARCH_LIBS([H5Pset_fapl_ros3],[hdf5_hldll hdf5_hl], [has_hdf5_ros3=yes], [has_hdf5_ros3=no])
|
|
if test "x$has_hdf5_ros3" = xyes && test "x$enable_byterange" = xyes; then
|
|
AC_DEFINE([NETCDF_ENABLE_HDF5_ROS3], [1], [if true, support byte-range using hdf5 virtual file driver.])
|
|
fi
|
|
|
|
# Check to see if HDF5 library is 1.10.3 or greater. If so, allows
|
|
# parallel I/O with filters. This allows zlib/szip compression to
|
|
# be used with parallel I/O, which is very helpful to HPC users.
|
|
if test "x$has_readchunks" = xyes; then
|
|
AC_DEFINE([HDF5_SUPPORTS_PAR_FILTERS], [1], [if true, HDF5 is at least version 1.10.3 and allows parallel I/O with zip])
|
|
hdf5_supports_par_filters=yes
|
|
fi
|
|
AC_MSG_CHECKING([whether HDF5 allows parallel filters])
|
|
AC_MSG_RESULT([$has_readchunks])
|
|
|
|
# Check to see if user asked for parallel build, but HDF5 does not support it.
|
|
if test "x$hdf5_parallel" = "xno"; then
|
|
if test "x$enable_parallel_tests" = "xyes"; then
|
|
AC_MSG_ERROR([Parallel tests requested, but no parallel HDF5 installation detected.])
|
|
fi
|
|
fi
|
|
|
|
# Check whether HDF5 was built with the SZLIB library. If so we
|
|
# must be able to link to szip library.
|
|
AC_MSG_CHECKING([whether szlib was used when building HDF5])
|
|
if test "x$ac_cv_func_H5Z_SZIP" = xyes; then
|
|
enable_hdf5_szip=yes
|
|
AC_DEFINE([HAVE_H5Z_SZIP], [1], [if true, compile in szip compression in netCDF-4 variables])
|
|
fi
|
|
AC_MSG_RESULT([$enable_hdf5_szip])
|
|
|
|
# Check to see if HDF5 library is 1.10.6 or greater.
|
|
# Used to control path name conversion
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <H5public.h>]], [[
|
|
#if (H5_VERS_MAJOR*10000 + H5_VERS_MINOR*100 + H5_VERS_RELEASE < 11006)
|
|
choke me
|
|
#endif
|
|
]])], [hdf5_version_1106=yes], [hdf5_version_1106=no])
|
|
AC_MSG_CHECKING([whether HDF5 library is version 1.10.6 or later])
|
|
AC_MSG_RESULT([$hdf5_version_1106])
|
|
if test "x$hdf5_version_1106" = xyes; then
|
|
AC_DEFINE([HDF5_UTF8_PATHS], [1], [if true, HDF5 paths can be utf-8])
|
|
fi
|
|
|
|
fi
|
|
|
|
AM_CONDITIONAL(ENABLE_NCDUMPCHUNKS, [test "x$has_readchunks" = xyes ])
|
|
|
|
# If the user wants hdf4 built in, check it out.
|
|
if test "x$enable_hdf4" = xyes; then
|
|
AC_CHECK_LIB([jpeg], [jpeg_CreateCompress], [],
|
|
[AC_MSG_ERROR([Jpeg library required for --enable-hdf4 builds.])])
|
|
AC_CHECK_HEADERS([mfhdf.h], [], [nc_mfhdf_h_missing=yes])
|
|
if test "x$nc_mfhdf_h_missing" = xyes; then
|
|
AC_MSG_ERROR([Cannot find mfhdf.h, yet --enable-hdf4 was used.])
|
|
fi
|
|
AC_CHECK_LIB([df], [Hclose], [], [AC_MSG_ERROR([Can't find or link to the hdf4 df library. See config.log for errors.])])
|
|
AC_CHECK_LIB([mfhdf], [NC_arrayfill], [AC_MSG_ERROR([HDF4 library must be built with --disable-netcdf.])], [])
|
|
AC_CHECK_LIB([mfhdf], [SDcreate], [], [AC_MSG_ERROR([Can't find or link to the hdf4 mfhdf library. See config.log for errors.])])
|
|
|
|
AC_CHECK_LIB([jpeg], [jpeg_set_quality], [], [AC_MSG_ERROR([Can't find or link to the jpeg library (required by hdf4). See config.log for errors.])])
|
|
AC_DEFINE([USE_HDF4], [1], [if true, use HDF4 too])
|
|
fi
|
|
|
|
# There are several cases for parallelism:
|
|
# 1. PnetCDF enabled => we want to parallelism for CDF-1,CDF-2,and CDF-5
|
|
# 2. hdf5 has mpio enabled
|
|
# a. do not want to use it for netcdf4
|
|
# b. do want to use it for netcdf4
|
|
|
|
# Should we provide parallel io for netcdf-4?
|
|
if test "x$enable_hdf5" = xyes ; then
|
|
AC_ARG_ENABLE([parallel4],
|
|
[AS_HELP_STRING([--disable-parallel4],
|
|
[disable parallel I/O for netcdf-4, even if it's enabled in libhdf5])],
|
|
[user_set_parallel4=${enableval}]2)
|
|
test "x$enable_parallel4" = xno || enable_parallel4=yes
|
|
|
|
# If user wants parallel IO for netCDF-4, make sure HDF5 can provide it.
|
|
if test "x$enable_parallel4" = xyes; then
|
|
if test "x$hdf5_parallel" = xno; then
|
|
# If user specifically asked for parallel4, then error out.
|
|
if test "x$user_set_parallel4" = xyes; then
|
|
AC_MSG_ERROR([Paralllel IO in netCDF-4 requested, but HDF5 does not provide parallel IO.])
|
|
fi
|
|
# User didn't specify, so disable parallel4
|
|
enable_parallel4=no
|
|
AC_MSG_WARN([Parallel io disabled for netcdf-4 because hdf5 does not support])
|
|
fi
|
|
fi
|
|
else
|
|
enable_parallel4=no
|
|
fi
|
|
AC_MSG_CHECKING([whether parallel I/O is enabled for netcdf-4])
|
|
AC_MSG_RESULT($enable_parallel4)
|
|
|
|
# We have already tested for parallel io in netcdf4
|
|
# parallel I/O for CDF-1, 2, and 5 files can also be done through PnetCDF
|
|
# See if the PnetCDF lib is available and of the
|
|
# right version (1.6.0 or later)
|
|
if test "x$enable_pnetcdf" = xyes; then
|
|
pnetcdf_conflict=no
|
|
AC_CHECK_LIB([pnetcdf], [ncmpi_create], [],[pnetcdf_conflict=yes])
|
|
|
|
if test "x$pnetcdf_conflict" = xyes ; then
|
|
AC_MSG_ERROR([Cannot link to PnetCDF library.])
|
|
fi
|
|
|
|
# Pnetcdf did not support utf-8 until 1.6.0
|
|
|
|
AC_MSG_CHECKING([Is libpnetcdf version 1.6.0 or later?])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <pnetcdf.h>]], [[
|
|
#if (PNETCDF_VERSION_MAJOR*1000 + PNETCDF_VERSION_MINOR < 1006)
|
|
choke me
|
|
#endif
|
|
]])], [pnetcdf16=yes], [pnetcdf16=no])
|
|
AC_MSG_RESULT([$pnetcdf16])
|
|
if test x$pnetcdf16 = xno; then
|
|
AC_MSG_ERROR([--enable-pnetcdf requires version 1.6.0 or later])
|
|
fi
|
|
fi
|
|
|
|
# Now, set enable_parallel if either enable_pnetcdf or enable_parallel4 is set
|
|
if test "x$enable_pnetcdf" = xyes -o "x$enable_parallel4" = xyes; then
|
|
enable_parallel=yes
|
|
else
|
|
enable_parallel=no
|
|
fi
|
|
AM_CONDITIONAL(NETCDF_ENABLE_PARALLEL, [test x$enable_parallel = xyes ])
|
|
|
|
if test "x$hdf5_parallel" = xyes; then
|
|
# Provide more precise parallel control
|
|
AC_DEFINE([HDF5_PARALLEL], [1], [if true, hdf5 has parallelism enabled])
|
|
fi
|
|
|
|
# Set config flags
|
|
if test "x$enable_parallel4" = xyes; then
|
|
# Provide more precise parallel control
|
|
AC_DEFINE([USE_PARALLEL4], [1], [if true, parallel netcdf-4 is in use])
|
|
fi
|
|
|
|
if test "x$enable_pnetcdf" = xyes; then
|
|
AC_DEFINE([USE_PNETCDF], [1], [if true, PnetCDF is used])
|
|
fi
|
|
|
|
# If enable_parallel is in use, enable it in the C code. Also add some stuff to netcdf.h.
|
|
if test "x$enable_parallel" = xyes; then
|
|
AC_DEFINE([USE_PARALLEL], [1], [if true, PnetCDF or parallel netcdf-4 is in use])
|
|
fi
|
|
|
|
AC_ARG_ENABLE([erange_fill],
|
|
[AS_HELP_STRING([--enable-erange-fill],
|
|
[Enable use of fill value when out-of-range type
|
|
conversion causes NC_ERANGE error. @<:@default: disabled@:>@])],
|
|
[enable_erange_fill=${enableval}], [enable_erange_fill=auto]
|
|
)
|
|
|
|
# check PnetCDF's settings on enable_erange_fill and relax_coord_bound
|
|
if test "x$enable_pnetcdf" = xyes; then
|
|
UD_CHECK_HEADER_PATH([pnetcdf.h])
|
|
|
|
AC_MSG_CHECKING([if erange-fill is enabled in PnetCDF])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <pnetcdf.h>]], [[
|
|
#if !defined(PNETCDF_ERANGE_FILL) || PNETCDF_ERANGE_FILL == 0
|
|
choke me
|
|
#endif]])], [enable_erange_fill_pnetcdf=yes], [enable_erange_fill_pnetcdf=no])
|
|
AC_MSG_RESULT([$enable_erange_fill_pnetcdf])
|
|
if test "x$enable_erange_fill" = xauto ; then
|
|
enable_erange_fill=$enable_erange_fill_pnetcdf
|
|
elif test "$enable_erange_fill" != "$enable_erange_fill_pnetcdf"; then
|
|
if test "$enable_erange_fill" = yes; then
|
|
AC_MSG_ERROR([Enabling erange-fill conflicts with PnetCDF setting])
|
|
else
|
|
AC_MSG_ERROR([Disabling erange-fill conflicts with PnetCDF setting])
|
|
fi
|
|
fi
|
|
|
|
AC_MSG_CHECKING([if relax-coord-bound is enabled in PnetCDF])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <pnetcdf.h>]], [[
|
|
#if !defined(PNETCDF_RELAX_COORD_BOUND) || PNETCDF_RELAX_COORD_BOUND == 0
|
|
choke me
|
|
#endif]])], [relax_coord_bound_pnetcdf=yes], [relax_coord_bound_pnetcdf=no])
|
|
AC_MSG_RESULT([$relax_coord_bound_pnetcdf])
|
|
if test x"$relax_coord_bound_pnetcdf" != xyes; then
|
|
AC_MSG_ERROR([PNetCDF must be built with relax-coord-bound])
|
|
fi
|
|
else
|
|
if test "x$enable_erange_fill" = xauto; then
|
|
# if --enable-erange-fill is not used, default setting is no
|
|
enable_erange_fill=no
|
|
fi
|
|
fi
|
|
|
|
if test "x$enable_erange_fill" = xyes ; then
|
|
if test "x$M4FLAGS" = x ; then
|
|
M4FLAGS="-DERANGE_FILL"
|
|
else
|
|
M4FLAGS="$M4FLAGS -DERANGE_FILL"
|
|
fi
|
|
AC_DEFINE([ERANGE_FILL], [1], [if true, use _FillValue for NC_ERANGE data elements])
|
|
fi
|
|
AC_SUBST(M4FLAGS)
|
|
|
|
# No logging for netcdf-3.
|
|
if test "x$enable_netcdf4" = xno; then
|
|
enable_logging=no
|
|
fi
|
|
if test "x$enable_logging" = xyes; then
|
|
AC_DEFINE([LOGGING], 1, [If true, turn on logging.])
|
|
fi
|
|
|
|
# Control NCZarr filters
|
|
# Does the user want to use NCZarr filters?
|
|
AC_MSG_CHECKING([whether we should enable NCZarr filters])
|
|
AC_ARG_ENABLE([nczarr-filters], [AS_HELP_STRING([--disable-nczarr-filters],
|
|
[disable NCZarr filters])])
|
|
test "x$enable_nczarr_filters" = xno || enable_nczarr_filters=yes
|
|
AC_MSG_RESULT([$enable_nczarr_filters])
|
|
|
|
# Control filter test/example
|
|
AC_MSG_CHECKING([whether filter testing should be run])
|
|
AC_ARG_ENABLE([filter-testing],
|
|
[AS_HELP_STRING([--disable-filter-testing],
|
|
[Do not run filter test and example; requires shared libraries and HDF5|NCZarr])])
|
|
test "x$enable_filter_testing" = xno || enable_filter_testing=yes
|
|
AC_MSG_RESULT($enable_filter_testing)
|
|
|
|
# Apply constraints
|
|
if test "x$enable_plugins" = xno ; then
|
|
AC_MSG_WARN([--disable-plugins => --disable-nczarr-filters])
|
|
enable_nczarr_filters=no
|
|
fi
|
|
|
|
if test "x$enable_plugins" = xno ; then
|
|
AC_MSG_WARN([--disable-plugins => --disable-filter-testing])
|
|
enable_filter_testing=no
|
|
fi
|
|
|
|
if test "x$enable_nczarr" = xno; then
|
|
AC_MSG_WARN([--disable-nczarr => --disable-nczarr-filters])
|
|
enable_nczarr_filters=no
|
|
fi
|
|
|
|
if test "x$enable_nczarr_filters" = xyes; then
|
|
AC_DEFINE([NETCDF_ENABLE_NCZARR_FILTERS], [1], [if true, enable NCZarr filters])
|
|
fi
|
|
|
|
AM_CONDITIONAL(NETCDF_ENABLE_FILTER_TESTING, [test x$enable_filter_testing = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_NCZARR_FILTERS, [test x$enable_nczarr_filters = xyes])
|
|
|
|
# Automake conditionals need to be called, whether the answer is yes
|
|
# or no.
|
|
AM_CONDITIONAL(BUILD_PARALLEL, [test x$enable_parallel = xyes])
|
|
AM_CONDITIONAL(TEST_PARALLEL4, [test "x$enable_parallel4" = xyes -a "x$enable_parallel_tests" = xyes])
|
|
AM_CONDITIONAL(BUILD_DAP, [test "x$enable_dap" = xyes])
|
|
AM_CONDITIONAL(USE_DAP, [test "x$enable_dap" = xyes]) # Alias
|
|
# Provide protocol specific flags
|
|
AM_CONDITIONAL(NETCDF_ENABLE_DAP, [test "x$enable_dap" = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_DAP4, [test "x$enable_dap4" = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_LEGACY_MACROS, [test "x$netcdf_enable_legacy_macros" = xyes])
|
|
AM_CONDITIONAL(USE_STRICT_NULL_BYTE_HEADER_PADDING, [test x$enable_strict_null_byte_header_padding = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_CDF5, [test "x$enable_cdf5" = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_DAP_REMOTE_TESTS, [test "x$enable_dap_remote_tests" = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_EXTERNAL_SERVER_TESTS, [test "x$enable_external_server_tests" = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_DAP_AUTH_TESTS, [test "x$enable_dap_auth_tests" = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_DAP_LONG_TESTS, [test "x$enable_dap_long_tests" = xyes])
|
|
AM_CONDITIONAL(USE_PNETCDF_DIR, [test ! "x$PNETCDFDIR" = x])
|
|
AM_CONDITIONAL(USE_LOGGING, [test "x$enable_logging" = xyes])
|
|
AM_CONDITIONAL(CROSS_COMPILING, [test "x$cross_compiling" = xyes])
|
|
AM_CONDITIONAL(USE_NETCDF4, [test x$enable_netcdf4 = xyes])
|
|
AM_CONDITIONAL(USE_HDF5, [test x$enable_hdf5 = xyes])
|
|
AM_CONDITIONAL(USE_HDF4, [test x$enable_hdf4 = xyes])
|
|
AM_CONDITIONAL(USE_HDF4_FILE_TESTS, [test x$enable_hdf4_file_tests = xyes])
|
|
AM_CONDITIONAL(USE_RENAMEV3, [test x$enable_netcdf4 = xyes -o x$enable_dap = xyes])
|
|
AM_CONDITIONAL(USE_PNETCDF, [test x$enable_pnetcdf = xyes])
|
|
AM_CONDITIONAL(USE_DISPATCH, [test x$enable_dispatch = xyes])
|
|
AM_CONDITIONAL(BUILD_MMAP, [test x$enable_mmap = xyes])
|
|
AM_CONDITIONAL(BUILD_DOCS, [test x$enable_doxygen = xyes])
|
|
AM_CONDITIONAL(SHOW_DOXYGEN_TAG_LIST, [test x$enable_doxygen_tasks = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_METADATA_PERF, [test x$enable_metadata_perf = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_BYTERANGE, [test "x$enable_byterange" = xyes])
|
|
AM_CONDITIONAL(RELAX_COORD_BOUND, [test "xyes" = xyes])
|
|
AM_CONDITIONAL(HAS_PAR_FILTERS, [test x$hdf5_supports_par_filters = xyes ])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_NCZARR_FILTERS, [test x$enable_nczarr_filters = xyes])
|
|
# We need to simplify the set of S3 and Zarr flag combinations
|
|
AM_CONDITIONAL(NETCDF_ENABLE_S3, [test "x$enable_s3" = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_S3_AWS, [test "x$enable_s3_aws" = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_S3_INTERNAL, [test "x$enable_s3_internal" = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_NCZARR, [test "x$enable_nczarr" = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_S3_TESTPUB, [test "x$with_s3_testing" != xno]) # all => public
|
|
AM_CONDITIONAL(NETCDF_ENABLE_S3_TESTALL, [test "x$with_s3_testing" = xyes])
|
|
AM_CONDITIONAL(NETCDF_ENABLE_NCZARR_ZIP, [test "x$enable_nczarr_zip" = xyes])
|
|
AM_CONDITIONAL(HAVE_DEFLATE, [test "x$have_deflate" = xyes])
|
|
AM_CONDITIONAL(HAVE_SZ, [test "x$have_sz" = xyes])
|
|
AM_CONDITIONAL(HAVE_H5Z_SZIP, [test "x$enable_hdf5_szip" = xyes])
|
|
AM_CONDITIONAL(HAVE_BLOSC, [test "x$have_blosc" = xyes])
|
|
AM_CONDITIONAL(HAVE_BZ2, [test "x$have_bz2" = xyes])
|
|
AM_CONDITIONAL(HAVE_ZSTD, [test "x$have_zstd" = xyes])
|
|
|
|
# If the machine doesn't have a long long, and we want netCDF-4, then
|
|
# we've got problems!
|
|
if test "x$enable_netcdf4" = xyes; then
|
|
AC_TYPE_LONG_LONG_INT
|
|
AC_TYPE_UNSIGNED_LONG_LONG_INT
|
|
dnl if test ! "x$ac_cv_type_long_long_int" = xyes -o ! "x$ac_cv_type_unsigned_long_long_int" = xyes; then
|
|
dnl AC_MSG_ERROR([This platform does not support long long types. These are required for netCDF-4.])
|
|
dnl fi
|
|
fi
|
|
|
|
# Create the file name for a "make ftpbin" which is used to generate a
|
|
# binary distribution. For each release we generate binary releases on
|
|
# the thousands of machines in Unidata's vast underground complex at
|
|
# an undisclosed location in the Rocky Mountains. The binary
|
|
# distributions, along with the 25-foot thick cement slabs and the
|
|
# giant springs, will help distribute netCDF even after a catastrophic
|
|
# meteor strike.
|
|
AC_MSG_CHECKING([what to call the output of the ftpbin target])
|
|
BINFILE_NAME=binary-netcdf-$PACKAGE_VERSION
|
|
test "x$enable_netcdf4" = xno && BINFILE_NAME=${BINFILE_NAME}_nc3
|
|
BINFILE_NAME=${BINFILE_NAME}.tar
|
|
AC_SUBST(BINFILE_NAME)
|
|
AC_MSG_RESULT([$BINFILE_NAME $FC $CXX])
|
|
|
|
##
|
|
# Bugfix for Cygwin.
|
|
##
|
|
AC_MSG_CHECKING([if libtool needs -no-undefined flag to build shared libraries])
|
|
NOUNDEFINED=""
|
|
case "`uname`" in
|
|
CYGWIN*|MINGW*|AIX*)
|
|
## Add in the -no-undefined flag to LDFLAGS for libtool.
|
|
AC_MSG_RESULT([yes])
|
|
NOUNDEFINED=" -no-undefined"
|
|
;;
|
|
*)
|
|
## Don't add anything
|
|
AC_MSG_RESULT([no])
|
|
;;
|
|
esac
|
|
|
|
AC_MSG_CHECKING([value of LIBS])
|
|
AC_MSG_RESULT([$LIBS])
|
|
|
|
# Flags for nc-config script; by design $prefix, $includir, $libdir,
|
|
# etc. are left as shell variables in the script so as to facilitate
|
|
# relocation
|
|
if test "x$with_netcdf_c_lib" = x ; then
|
|
NC_LIBS="-lnetcdf"
|
|
else
|
|
NC_LIBS="$with_netcdf_c_lib"
|
|
fi
|
|
if test "x$enable_shared" != xyes; then
|
|
NC_LIBS="$LDFLAGS $NC_LIBS"
|
|
fi
|
|
|
|
case "x$target_os" in
|
|
xsolaris*)
|
|
NEWNCLIBS=""
|
|
for x in $NC_LIBS ; do
|
|
case "$x" in
|
|
-L*) r=`echo "$x" | sed -e 's|^-L|-R|'`
|
|
NEWNCLIBS="$NEWNCLIBS $x $r"
|
|
;;
|
|
*) NEWNCLIBS="$NEWNCLIBS $x" ;;
|
|
esac
|
|
done
|
|
NC_LIBS="$NEWNCLIBS"
|
|
;;
|
|
*);;
|
|
esac
|
|
|
|
NC_FLIBS="-lnetcdff $NC_LIBS"
|
|
|
|
|
|
AC_SUBST(NC_LIBS,[$NC_LIBS])
|
|
AC_SUBST(HAS_DAP,[$enable_dap])
|
|
AC_SUBST(HAS_DAP2,[$enable_dap])
|
|
AC_SUBST(HAS_DAP4,[$enable_dap4])
|
|
AC_SUBST(HAS_LEGACY_MACROS,[$enable_legacy_macros])
|
|
AC_SUBST(HAS_NC2,[$nc_build_v2])
|
|
AC_SUBST(HAS_CDF5,[$enable_cdf5])
|
|
AC_SUBST(HAS_HDF4,[$enable_hdf4])
|
|
AC_SUBST(HAS_BENCHMARKS,[$enable_benchmarks])
|
|
AC_SUBST(HAS_HDF5,[$enable_hdf5])
|
|
AC_SUBST(HAS_PNETCDF,[$enable_pnetcdf])
|
|
AC_SUBST(HAS_LOGGING, [$enable_logging])
|
|
AC_SUBST(HAS_PARALLEL,[$enable_parallel])
|
|
AC_SUBST(HAS_PARALLEL4,[$enable_parallel4])
|
|
AC_SUBST(HAS_DISKLESS,[yes])
|
|
AC_SUBST(HAS_MMAP,[$enable_mmap])
|
|
AC_SUBST(HAS_ERANGE_FILL,[$enable_erange_fill])
|
|
AC_SUBST(HAS_BYTERANGE,[$enable_byterange])
|
|
AC_SUBST(RELAX_COORD_BOUND,[yes])
|
|
AC_SUBST([HAS_PAR_FILTERS], [$hdf5_supports_par_filters])
|
|
AC_SUBST(HAS_S3,[$enable_s3])
|
|
AC_SUBST(HAS_S3_AWS,[$enable_s3_aws])
|
|
AC_SUBST(HAS_S3_INTERNAL,[$enable_s3_internal])
|
|
AC_SUBST(HAS_HDF5_ROS3,[$has_hdf5_ros3])
|
|
AC_SUBST(HAS_NCZARR,[$enable_nczarr])
|
|
AC_SUBST(NETCDF_ENABLE_S3_TESTING,[$with_s3_testing])
|
|
AC_SUBST(HAS_NCZARR_ZIP,[$enable_nczarr_zip])
|
|
AC_SUBST(HAS_PLUGINS, [$enable_plugins])
|
|
AC_SUBST(HAS_QUANTIZE,[$enable_quantize])
|
|
AC_SUBST(HAS_LOGGING,[$enable_logging])
|
|
AC_SUBST(DO_FILTER_TESTS,[$enable_filter_testing])
|
|
AC_SUBST(HAS_DEFLATE,[$have_deflate])
|
|
AC_SUBST(HAS_SZLIB,[$have_sz])
|
|
AC_SUBST(HAS_SZLIB_WRITE, [$have_sz])
|
|
AC_SUBST(HAS_ZSTD,[$have_zstd])
|
|
AC_SUBST(DO_LARGE_TESTS,[$enable_large_file_tests])
|
|
AC_SUBST(DO_REMOTE_FUNCTIONALITY,[$enable_remote_functionality])
|
|
|
|
if test "x$enable_s3_aws" = xyes ; then
|
|
AC_SUBST(WHICH_S3_SDK,[aws-sdk-cpp])
|
|
fi
|
|
if test "x$enable_s3_internal" = xyes; then
|
|
AC_SUBST(WHICH_S3_SDK,[internal])
|
|
fi
|
|
if test "x$enable_s3_aws" = xno && test "x$enable_s3_internal" = xno; then
|
|
AC_SUBST(WHICH_S3_SDK,[none])
|
|
fi
|
|
|
|
# The Unidata testing S3 bucket
|
|
# WARNING: this must match the value in CMakeLists.txt
|
|
AC_DEFINE([S3TESTBUCKET], ["unidata-zarr-test-data"], [S3 test bucket])
|
|
AC_SUBST([S3TESTBUCKET],["unidata-zarr-test-data"])
|
|
|
|
# The working S3 path tree within the Unidata bucket.
|
|
# WARNING: this must match the value in CMakeLists.txt
|
|
AC_DEFINE([S3TESTSUBTREE], ["netcdf-c"], [S3 test path prefix])
|
|
AC_SUBST([S3TESTSUBTREE],[netcdf-c])
|
|
|
|
# Build a small unique id to avoid interference on same platform
|
|
PLATFORMUID="$RANDOM"
|
|
# Make sure uid > 0
|
|
PLATFORMUID=$((PLATFORMUID % 1000 + 1))
|
|
# Build a unique id based on the date
|
|
TESTUID=`date +%s`
|
|
AC_DEFINE_UNQUOTED([TESTUID], [${TESTUID}], [S3 working path])
|
|
AC_SUBST([TESTUID],${TESTUID})
|
|
AC_SUBST([PLATFORMUID],${PLATFORMUID})
|
|
|
|
# Always available
|
|
std_filters="bz2"
|
|
if test "x$have_deflate" = xyes ; then
|
|
std_filters="${std_filters} deflate"
|
|
fi
|
|
if test "x$have_sz" = xyes ; then
|
|
std_filters="${std_filters} szip"
|
|
fi
|
|
if test "x$have_blosc" = xyes ; then
|
|
std_filters="${std_filters} blosc"
|
|
fi
|
|
if test "x$have_zstd" = xyes ; then
|
|
std_filters="${std_filters} zstd"
|
|
fi
|
|
|
|
AC_SUBST(STD_FILTERS,[$std_filters])
|
|
|
|
# The --with-plugin-dir option gives the user control of the plugin install
|
|
# directory. This also used as one of the default plugin directory when
|
|
# searching for plugins.
|
|
# If a specific directory is provided, it will be used.
|
|
# If not defined or defined with the value no, or --without-plugin-dir, then
|
|
# plugin installation will be suppressed (but see below).
|
|
AC_MSG_CHECKING([whether and where we should install plugins])
|
|
AC_ARG_WITH([plugin-dir], [AS_HELP_STRING([--with-plugin-dir=<absolute directory>|no|--without-plugin-dir],
|
|
[Install selected standard filters in specified or default directory])],
|
|
[],[with_plugin_dir=no])
|
|
AC_MSG_RESULT([$with_plugin_dir])
|
|
|
|
# Using selected filter options forces installation
|
|
if test "x$have_zstd" = xyes; then
|
|
AC_MSG_WARN([--enable_filter-zstd => --enable-plugins.])
|
|
enable_plugins=yes
|
|
fi
|
|
|
|
# Note: the term PLATFORMDEFAULT stands for:
|
|
# -- /usr/loca/hdf5/lib/plugin If on a *nix* machine
|
|
# -- %ALLUSERSPROFILE%/hdf5/lib/plugins If on a windows or Mingw platform
|
|
if test "x$ISMSVC" = xyes || test "x$ISMINGW" = xyes; then
|
|
PLATFORMDEFAULT="${ALLUSERSPROFILE}\\hdf5\\lib\\plugin"
|
|
PLATFORMSEP=";"
|
|
else
|
|
PLATFORMDEFAULT="/usr/local/hdf5/lib/plugin"
|
|
PLATFORMSEP=":"
|
|
fi
|
|
|
|
# Internally, the variable DEFAULT_PLUGIN_INSTALL_DIR is the default
|
|
# directory into which plugins are installed; this may be undefined if
|
|
# plugin installation is disabled (the usual case). It is exported as
|
|
# NETCDF_PLUGIN_INSTALL_DIR.
|
|
#
|
|
# Similarly the variable DEFAULT_PLUGIN_SEARCH_PATH is the default list
|
|
# of directories to search to locate plugins. It is exported as
|
|
# NETCDF_PLUGIN_SEARCH_PATH
|
|
#
|
|
# See the document docs/pluginpath.md for a more detailed discussion
|
|
# of how NETCDF_PLUGIN_INSTALL_DIR and NETCDF_PLUGIN_SEARCH_PATH are
|
|
# computed.
|
|
|
|
# Canonicalize --with-prefix-dir and --prefix
|
|
if test "x$with_plugin_dir" = xno ; then unset with_plugin_dir ; fi
|
|
if test "xprefix" = x ; then prefix=NONE ; fi
|
|
if test "x$with_plugin_dir" != x ; then # Table row 3
|
|
DEFAULT_PLUGIN_INSTALL_DIR="${with_plugin_dir}"
|
|
DEFAULT_PLUGIN_SEARCH_PATH="${with_plugin_dir}${PLATFORMSEP}${PLATFORMDEFAULT}"
|
|
elif test "x$prefix" != xNONE ; then # Table row 2
|
|
DEFAULT_PLUGIN_INSTALL_DIR="${prefix}/hdf5/lib/plugin"
|
|
DEFAULT_PLUGIN_SEARCH_PATH="${prefix}/hdf5/lib/plugin${PLATFORMSEP}${PLATFORMDEFAULT}"
|
|
else # Table row 1
|
|
unset DEFAULT_PLUGIN_INSTALL_DIR
|
|
DEFAULT_PLUGIN_SEARCH_PATH="${PLATFORMDEFAULT}"
|
|
fi
|
|
# canonical form is all forward slashes
|
|
DEFAULT_PLUGIN_INSTALL_DIR=`echo "$DEFAULT_PLUGIN_INSTALL_DIR" | tr '\\\\' '/'`
|
|
DEFAULT_PLUGIN_SEARCH_PATH=`echo "$DEFAULT_PLUGIN_SEARCH_PATH" | tr '\\\\' '/'`
|
|
|
|
# Inferences
|
|
if test "x$DEFAULT_PLUGIN_INSTALL_DIR" = x ; then # option missing|disabled
|
|
enable_plugin_dir=no
|
|
else
|
|
enable_plugin_dir=yes
|
|
fi
|
|
|
|
if test "x$enable_plugin_dir" = xyes ; then
|
|
AC_DEFINE([ENABLE_PLUGIN_DIR], [1], [If true, enable filter installation])
|
|
fi
|
|
|
|
AM_CONDITIONAL([ENABLE_PLUGIN_DIR], [test "x$enable_plugin_dir" = xyes])
|
|
AC_DEFINE_UNQUOTED([NETCDF_PLUGIN_INSTALL_DIR], ["${DEFAULT_PLUGIN_INSTALL_DIR}"], [Final Install Dir])
|
|
AC_DEFINE_UNQUOTED([NETCDF_PLUGIN_SEARCH_PATH], ["${DEFAULT_PLUGIN_SEARCH_PATH}"], [Final Search Path])
|
|
AC_SUBST([NETCDF_PLUGIN_INSTALL_DIR], [${DEFAULT_PLUGIN_INSTALL_DIR}])
|
|
AC_SUBST([NETCDF_PLUGIN_SEARCH_PATH], [${DEFAULT_PLUGIN_SEARCH_PATH}])
|
|
|
|
# Access netcdf specific version of config.h
|
|
AH_BOTTOM([#include "ncconfigure.h"])
|
|
|
|
##################################################
|
|
# Uncomment this to keep a copy of autoconf defines at this point, for
|
|
# debugging purposes.
|
|
# cp confdefs.h my_config.h
|
|
|
|
#####
|
|
# Create output variables from various
|
|
# shell variables, for use in generating
|
|
# libnetcdf.settings.
|
|
#####
|
|
AC_SUBST([enable_shared])
|
|
AC_SUBST([enable_static])
|
|
AC_SUBST([CFLAGS])
|
|
AC_SUBST([CPPFLAGS])
|
|
AC_SUBST([LDFLAGS])
|
|
AC_SUBST([AM_CFLAGS])
|
|
AC_SUBST([AM_CPPFLAGS])
|
|
AC_SUBST([AM_LDFLAGS])
|
|
AC_SUBST([NOUNDEFINED])
|
|
|
|
# Args:
|
|
# 1. netcdf_meta.h variable
|
|
# 2. conditional variable that is yes or no.
|
|
# 3. default condition
|
|
#
|
|
# example: AX_SET_META([NC_HAS_NC2],[$nc_build_v2],[]) # Because it checks for no.
|
|
# AX_SET_META([NC_HAS_HDF4],[$enable_hdf4],[yes])
|
|
AC_DEFUN([AX_SET_META],[
|
|
if [ test "x$2" = "x$3" ]; then
|
|
AC_SUBST([$1]) $1=1
|
|
else
|
|
AC_SUBST([$1]) $1=0
|
|
fi
|
|
])
|
|
|
|
#####
|
|
# Define values used in include/netcdf_meta.h
|
|
#####
|
|
AC_SUBST([NC_VERSION]) NC_VERSION=$VERSION
|
|
AX_SET_META([NC_HAS_NC2],[$nc_build_v2],[yes])
|
|
AX_SET_META([NC_HAS_HDF4],[$enable_hdf4],[yes])
|
|
AX_SET_META([NC_HAS_BENCHMARKS],[$enable_benchmarks],[yes])
|
|
AX_SET_META([NC_HAS_HDF5],[$enable_hdf5],[yes])
|
|
AX_SET_META([NC_HAS_DAP2],[$enable_dap],[yes])
|
|
AX_SET_META([NC_HAS_DAP4],[$enable_dap4],[yes])
|
|
AX_SET_META([NC_HAS_DISKLESS],[yes],[yes])
|
|
AX_SET_META([NC_HAS_MMAP],[$enable_mmap],[yes])
|
|
AX_SET_META([NC_HAS_PNETCDF],[$enable_pnetcdf],[yes])
|
|
AX_SET_META([NC_HAS_PARALLEL],[$enable_parallel],[yes])
|
|
AX_SET_META([NC_HAS_PARALLEL4],[$enable_parallel4],[yes])
|
|
AX_SET_META([NC_HAS_CDF5],[$enable_cdf5],[yes])
|
|
AX_SET_META([NC_HAS_ERANGE_FILL], [$enable_erange_fill],[yes])
|
|
AX_SET_META([NC_HAS_PAR_FILTERS], [$hdf5_supports_par_filters],[yes])
|
|
AX_SET_META([NC_HAS_BYTERANGE],[$enable_byterange],[yes])
|
|
AX_SET_META([NC_HAS_S3],[$enable_s3],[yes])
|
|
AX_SET_META([NC_HAS_S3_AWS],[$enable_s3_aws],[yes])
|
|
AX_SET_META([NC_HAS_S3_INTERNAL],[$enable_s3_internal],[yes])
|
|
AX_SET_META([NC_HAS_HDF5_ROS3],[$has_hdf5_ros3],[yes])
|
|
AX_SET_META([NC_HAS_NCZARR],[$enable_nczarr],[yes])
|
|
AX_SET_META([NC_HAS_LOGGING],[$enable_logging],[yes])
|
|
AX_SET_META([NC_HAS_QUANTIZE],[$enable_quantize],[yes])
|
|
AX_SET_META([NC_HAS_SZIP],[$enable_hdf5_szip],[yes])
|
|
AX_SET_META([NC_HAS_ZSTD],[$have_zstd],[yes])
|
|
AX_SET_META([NC_HAS_BLOSC],[$have_blosc],[yes])
|
|
AX_SET_META([NC_HAS_BZ2],[$have_bz2],[yes])
|
|
|
|
# This is the version of the dispatch table. If the dispatch table is
|
|
# changed, this should be incremented, so that user-defined format
|
|
# applications like PIO can determine whether they have an appropriate
|
|
# dispatch table to submit. If this is changed, make sure the value in
|
|
# CMakeLists.txt also changes to match.
|
|
AC_SUBST([NC_DISPATCH_VERSION], [5])
|
|
AC_DEFINE_UNQUOTED([NC_DISPATCH_VERSION], [${NC_DISPATCH_VERSION}], [Dispatch table version.])
|
|
|
|
#####
|
|
# End netcdf_meta.h definitions.
|
|
#####
|
|
|
|
# This would be true for a cmake build.
|
|
AC_SUBST([ISCMAKE], [])
|
|
|
|
# Provide true/false conditionals to temporarily suppress tests and such
|
|
AM_CONDITIONAL([AX_DISABLE], [test xno = xyes])
|
|
AM_CONDITIONAL([AX_ENABLE], [test xyes = xyes])
|
|
# Provide conditional to identify tests that must be run manually
|
|
AM_CONDITIONAL([AX_MANUAL], [test xno = xyes])
|
|
|
|
AC_MSG_NOTICE([generating header files and makefiles])
|
|
AC_CONFIG_FILES(test_common.sh:test_common.in)
|
|
AC_CONFIG_FILES(s3cleanup.sh:s3cleanup.in, [chmod ugo+x s3cleanup.sh])
|
|
AC_CONFIG_FILES(s3gc.sh:s3gc.in, [chmod ugo+x s3gc.sh])
|
|
for FP in plugins nc_test4 nczarr_test h5_test examples/C ; do
|
|
AC_CONFIG_FILES(${FP}/findplugin.sh:plugins/findplugin.in, [chmod ugo+x ${FP}/findplugin.sh])
|
|
done
|
|
AC_CONFIG_FILES(ncdap_test/findtestserver.c:ncdap_test/findtestserver.c.in, [chmod ugo+x ncdap_test/findtestserver.c])
|
|
AC_CONFIG_FILES([nc_test/run_pnetcdf_tests.sh:nc_test/run_pnetcdf_tests.sh.in],[chmod ugo+x nc_test/run_pnetcdf_tests.sh])
|
|
AC_CONFIG_FILES(dap4_test/findtestserver4.c:ncdap_test/findtestserver.c.in)
|
|
AC_CONFIG_FILES(dap4_test/pingurl4.c:ncdap_test/pingurl.c)
|
|
AC_CONFIG_FILES([h5_test/run_par_tests.sh], [chmod ugo+x h5_test/run_par_tests.sh])
|
|
AC_CONFIG_FILES([nc_test4/run_par_test.sh], [chmod ugo+x nc_test4/run_par_test.sh])
|
|
AC_CONFIG_FILES([nc_test4/run_par_warn_test.sh], [chmod ugo+x nc_test4/run_par_warn_test.sh])
|
|
AC_CONFIG_FILES([nc_perf/run_par_bm_test.sh], [chmod ugo+x nc_perf/run_par_bm_test.sh])
|
|
AC_CONFIG_FILES([nc_perf/run_gfs_test.sh], [chmod ugo+x nc_perf/run_gfs_test.sh])
|
|
AC_CONFIG_FILES(nczarr_test/timer_utils.h:unit_test/timer_utils.h)
|
|
AC_CONFIG_FILES(nczarr_test/timer_utils.c:unit_test/timer_utils.c)
|
|
AC_CONFIG_FILES(nczarr_test/test_filter.c:nc_test4/test_filter.c)
|
|
AC_CONFIG_FILES(nczarr_test/test_filter_misc.c:nc_test4/test_filter_misc.c)
|
|
AC_CONFIG_FILES(nczarr_test/tst_multifilter.c:nc_test4/tst_multifilter.c)
|
|
AC_CONFIG_FILES(nczarr_test/test_filter_repeat.c:nc_test4/test_filter_repeat.c)
|
|
AC_CONFIG_FILES(nczarr_test/test_filter_order.c:nc_test4/test_filter_order.c)
|
|
AC_CONFIG_FILES([examples/C/run_par_test.sh], [chmod ugo+x examples/C/run_par_test.sh])
|
|
AC_CONFIG_FILES([nc-config], [chmod 755 nc-config])
|
|
AC_CONFIG_FILES([Makefile
|
|
netcdf.pc
|
|
libnetcdf.settings
|
|
include/netcdf_meta.h
|
|
include/netcdf_dispatch.h
|
|
include/Makefile
|
|
h5_test/Makefile
|
|
hdf4_test/Makefile
|
|
libsrc/Makefile
|
|
libsrc4/Makefile
|
|
libhdf5/Makefile
|
|
libsrcp/Makefile
|
|
ncdump/Makefile
|
|
ncgen3/Makefile
|
|
ncgen/Makefile
|
|
examples/Makefile
|
|
examples/C/Makefile
|
|
examples/CDL/Makefile
|
|
oc2/Makefile
|
|
libdap2/Makefile
|
|
libdap4/Makefile
|
|
libhdf4/Makefile
|
|
libnczarr/Makefile
|
|
libncpoco/Makefile
|
|
libncxml/Makefile
|
|
libdispatch/Makefile
|
|
liblib/Makefile
|
|
ncdump/cdl/Makefile
|
|
ncdump/expected/Makefile
|
|
docs/Makefile
|
|
docs/images/Makefile
|
|
unit_test/Makefile
|
|
nctest/Makefile
|
|
nc_test4/Makefile
|
|
nc_perf/Makefile
|
|
nc_test/Makefile
|
|
ncdap_test/Makefile
|
|
ncdap_test/testdata3/Makefile
|
|
ncdap_test/expected3/Makefile
|
|
ncdap_test/expectremote3/Makefile
|
|
ncdap_test/expectedhyrax/Makefile
|
|
dap4_test/Makefile
|
|
plugins/Makefile
|
|
nczarr_test/Makefile
|
|
])
|
|
AC_OUTPUT()
|
|
|
|
cat libnetcdf.settings
|