summaryrefslogtreecommitdiff
path: root/m4/ax_lib_netcdf4.m4
diff options
context:
space:
mode:
authorPeter Simons <simons@cryp.to>2016-02-29 11:30:51 +0100
committerPeter Simons <simons@cryp.to>2016-02-29 11:30:51 +0100
commitbe5966c8d7cea729c95818469d4614995c1ecfca (patch)
treea7b28cf585151a7803194d3199454b70e749aa43 /m4/ax_lib_netcdf4.m4
parent39683064bbccb4008f239262cb681a970bf53603 (diff)
downloadautoconf-archive-be5966c8d7cea729c95818469d4614995c1ecfca.tar.gz
AX_LIB_NETCDF4: initial version
This macro detects NetCDF: http://www.unidata.ucar.edu/software/netcdf/.
Diffstat (limited to 'm4/ax_lib_netcdf4.m4')
-rw-r--r--m4/ax_lib_netcdf4.m4277
1 files changed, 277 insertions, 0 deletions
diff --git a/m4/ax_lib_netcdf4.m4 b/m4/ax_lib_netcdf4.m4
new file mode 100644
index 0000000..2fcf358
--- /dev/null
+++ b/m4/ax_lib_netcdf4.m4
@@ -0,0 +1,277 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_lib_netcdf4.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_LIB_NETCDF4([serial/parallel])
+#
+# DESCRIPTION
+#
+# This macro provides tests of the availability of the NetCDF v4 library.
+#
+# The optional macro argument should be either 'serial' or 'parallel'. The
+# macro will call nc-config to check the output of the '--has-pnetcdf'
+# option and error out if the requested parallel isn't supported.
+#
+# If the optional argument is omitted, no check is made to see if NetCDF
+# has parallel support.
+#
+# The macro adds a --with-netcdf4 option accepting one of three values:
+#
+# no - do not check for the NetCDF4 library.
+# yes - do check for NetCDF4 library in standard locations.
+# path - installation prefix for NetCDF version 4.
+#
+# If NetCDF4 is successfully found, this macro calls
+#
+# AC_SUBST(NETCDF4_VERSION)
+# AC_SUBST(NETCDF4_CC)
+# AC_SUBST(NETCDF4_CFLAGS)
+# AC_SUBST(NETCDF4_CPPFLAGS)
+# AC_SUBST(NETCDF4_LDFLAGS)
+# AC_SUBST(NETCDF4_LIBS)
+# AC_SUBST(NETCDF4_FC)
+# AC_SUBST(NETCDF4_FFLAGS)
+# AC_SUBST(NETCDF4_FLIBS)
+# AC_DEFINE(HAVE_NETCDF4)
+#
+# It also sets
+#
+# with_netcdf4="yes"
+# with_netcdf4_fortran="yes" (if NetCDF has Fortran support)
+# with_netcdf4_parallel="yes" (if NetCDF has MPI support)
+#
+# If NetCDF4 is disabled or not found, this macros sets
+#
+# with_netcdf4="no"
+# with_netcdf4_fortran="no"
+#
+# Note it does not set with_netcdf4_parallel in this case.
+#
+# Your configuration script can test $with_netcdf4 to take any further
+# actions. NETCDF4_{C,CPP,LD}FLAGS may be used when building with C or
+# C++. NETCDF4_F{FLAGS,LIBS} and NETCDF4_LDFLAGS should be used when
+# building Fortran applications.
+#
+# To use the macro, one would code one of the following in "configure.ac"
+# before AC_OUTPUT:
+#
+# 1) dnl Check for NetCDF4 support
+# AX_LIB_NETCDF4()
+#
+# 2) dnl Check for serial NetCDF4 support
+# AX_LIB_NETCDF4([serial])
+#
+# 3) dnl Check for parallel NetCDF4 support
+# AX_LIB_NETCDF4([parallel])
+#
+# One could test $with_netcdf4 for the outcome or display it as follows
+#
+# echo "NetCDF v4 support: $with_netcdf4"
+#
+# One could also for example, override the default CC in "configure.ac" to
+# enforce compilation with the compiler that NetCDF v4 was built with:
+#
+# AX_LIB_NETCDF4([parallel])
+# if test "$with_netcdf4" = "yes"; then
+# CC="$NETCDF4_CC"
+# else
+# AC_MSG_ERROR([Unable to find NetCDF4, we need parallel NetCDF4.])
+# fi
+#
+# LICENSE
+#
+# Copyright (c) 2016 Timothy Brown <tbrown@freeshell.org>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 1
+
+AC_DEFUN([AX_LIB_NETCDF4], [
+
+AC_REQUIRE([AC_PROG_SED])
+AC_REQUIRE([AC_PROG_AWK])
+AC_REQUIRE([AC_PROG_GREP])
+
+dnl Check first argument is one of the recognized values.
+dnl Fail eagerly if is incorrect as this simplifies case statements below.
+if test "m4_normalize(m4_default([$1],[]))" = "" ; then
+ netcdf4_requested_mode="serial"
+elif test "m4_normalize(m4_default([$1],[]))" = "serial" ; then
+ netcdf4_requested_mode="serial"
+elif test "m4_normalize(m4_default([$1],[]))" = "parallel"; then
+ netcdf4_requested_mode="parallel"
+else
+ AC_MSG_ERROR([
+Unrecognized value for AX[]_LIB_NETCDF4 within configure.ac.
+If supplied, argument 1 must be either 'serial' or 'parallel'.
+])
+fi
+
+dnl Add a default --with-netcdf4 configuration option.
+AC_ARG_WITH([netcdf4],
+ AS_HELP_STRING(
+ [--with-netcdf4=[yes/no/PATH]],
+ m4_case(m4_normalize([$1]),
+ [serial], [base directory of serial NetCDF4 installation],
+ [parallel], [base directory of parallel NetCDF4 installation],
+ [base directory of NetCDF4 installation])
+ ),
+ [if test "$withval" = "no"; then
+ with_netcdf4="no"
+ elif test "$withval" = "yes"; then
+ with_netcdf4="yes"
+ else
+ with_netcdf4="yes"
+ NETCDF4_PREFIX="${withval}"
+ NC_CONFIG="${withval}/bin/nc-config"
+ fi],
+ [with_netcdf4="yes"]
+)
+
+dnl Set defaults to blank
+NETCDF4_CC=""
+NETCDF4_VERSION=""
+NETCDF4_CFLAGS=""
+NETCDF4_CPPFLAGS=""
+NETCDF4_LDFLAGS=""
+NETCDF4_LIBS=""
+NETCDF4_FC=""
+NETCDF4_FFLAGS=""
+NETCDF4_FLIBS=""
+
+dnl Try and find NetCDF4 tools and options.
+if test "$with_netcdf4" = "yes"; then
+ if test -z "$NC_CONFIG"; then
+ dnl Check to see if NC_CONFIG is in the path.
+ AC_PATH_PROGS([NC_CONFIG], [nc-config], [])
+ NETCDF4_PREFIX=$(AS_DIRNAME([$(AS_DIRNAME(["$NC_CONFIG"]))]))
+ else
+ AC_MSG_CHECKING([Using provided NetCDF4 prefix])
+ AC_MSG_RESULT([$NC_CONFIG])
+ fi
+
+ AC_MSG_CHECKING([for NetCDF4 libraries])
+
+ if test ! -f "$NC_CONFIG" || test ! -x "$NC_CONFIG"; then
+ AC_MSG_RESULT([no])
+ AC_MSG_WARN([
+
+Unable to locate NetCDF4 compilation helper script 'nc-config'.
+Please specify --with-netcdf4=<LOCATION> as the full path prefix
+where NetCDF4 has been installed.
+NetCDF4 support is being disabled (equivalent to --with-netcdf4=no).
+])
+ with_netcdf4="no"
+ with_netcdf4_fortran="no"
+ else
+ dnl Get the actual compiler used
+ NETCDF4_CC=$(eval $NC_CONFIG --cc | $AWK '{print $[]1}')
+ if test "$NETCDF4_CC" = "ccache"; then
+ NETCDF4_CC=$(eval $NC_CONFIG --cc | $AWK '{print $[]2}')
+ fi
+
+ dnl Look for version
+ NETCDF4_VERSION=$(eval $NC_CONFIG --version | $AWK '{print $[]2}')
+
+ dnl Look for the CFLAGS
+ NETCDF4_CFLAGS=$(eval $NC_CONFIG --cflags)
+
+ dnl Look for the LIBS and LDFLAGS
+ NETCDF4_tmp_clibs=$(eval $NC_CONFIG --libs)
+
+ dnl Sort out the tmp libs based on their prefixes
+ for arg in $NETCDF4_tmp_clibs ; do
+ case "$arg" in
+ -L*) echo $NETCDF4_LDFLAGS | $GREP -e "$arg" 2>&1 >/dev/null \
+ || NETCDF4_LDFLAGS="$arg $NETCDF4_LDFLAGS"
+ ;;
+ -l*) echo $NETCDF4_LIBS | $GREP -e "$arg" 2>&1 >/dev/null \
+ || NETCDF4_LIBS="$arg $NETCDF4_LIBS"
+ ;;
+ esac
+ done
+
+ AC_MSG_RESULT([yes (version $[NETCDF4_VERSION])])
+
+ dnl See if we need (and have) parallel support
+ if test "$netcdf4_requested_mode" = "parallel" ; then
+ with_netcdf4_parallel=$(eval $NC_CONFIG --has-pnetcdf)
+ if test "$with_netcdf4_parallel" = "no" ; then
+ AC_MSG_ERROR([
+parallel NetCDF4 is not supported (while it was requested)
+])
+ fi
+ fi
+
+ dnl See if we can compile
+ ax_lib_netcdf4_save_CC=$CC
+ ax_lib_netcdf4_save_CPPFLAGS=$CPPFLAGS
+ ax_lib_netcdf4_save_LIBS=$LIBS
+ ax_lib_netcdf4_save_LDFLAGS=$LDFLAGS
+ CC=$NETCDF4_CC
+ CFLAGS=$NETCDF4_CFLAGS
+ LIBS=$NETCDF4_LIBS
+ LDFLAGS=$NETCDF4_LDFLAGS
+ AC_CHECK_HEADER([netcdf.h], [ac_cv_netcdf4_h=yes], [ac_cv_netcdf4_h=no])
+ AC_CHECK_LIB([netcdf], [nc_create], [ac_cv_libnetcdf4=yes],
+ [ac_cv_libnetcdf4=no])
+ if test "$ac_cv_netcdf4_h" = "no" && \
+ test "$ac_cv_libnetcdf4" = "no" ; then
+ AC_MSG_WARN([Unable to compile NetCDF4 test program])
+ fi
+
+ CC=$ax_lib_netcdf4_save_CC
+ CFLAGS=$ax_lib_netcdf4_save_CFLAGS
+ LIBS=$ax_lib_netcdf4_save_LIBS
+ LDFLAGS=$ax_lib_hdf5_save_LDFLAGS
+
+
+ AC_MSG_CHECKING([for matching NetCDF4 Fortran libraries])
+ NF_CONFIG="${NETCDF4_PREFIX}/bin/nf-config"
+ if test ! -f "$NF_CONFIG" || test ! -x "$NF_CONFIG"; then
+ AC_MSG_RESULT([no])
+ with_netcdf4_fortran="no"
+ else
+ NETCDF_FVERSION=$(eval $NF_CONFIG --version | $AWK '{print $[]2}')
+ AC_MSG_RESULT([yes (version $[NETCDF_FVERSION])])
+ NETCDF4_FC=$(eval $NF_CONFIG --fc | $AWK '{print $[]1}')
+ if test "$NETCDF4_FC" = "ccache"; then
+ NETCDF4_FC=$(eval $NF_CONFIG --fc | $AWK '{print $[]2}')
+ fi
+ dnl Look for the FFLAGS
+ NETCDF4_FFLAGS=$(eval $NC_CONFIG --fflags)
+
+ dnl Look for the FLIBS and LDFLAGS
+ NETCDF4_tmp_flibs=$(eval $NC_CONFIG --flibs)
+
+ dnl Sort out the tmp libs based on their prefixes
+ for arg in $NETCDF4_tmp_flibs ; do
+ case "$arg" in
+ -L*) echo $NETCDF4_LDFLAGS | $GREP -e "$arg" 2>&1 >/dev/null \
+ || NETCDF4_LDFLAGS="$arg $NETCDF4_LDFLAGS"
+ ;;
+ -l*) echo $NETCDF4_FLIBS | $GREP -e "$arg" 2>&1 >/dev/null \
+ || NETCDF4_FLIBS="$arg $NETCDF4_FLIBS"
+ ;;
+ esac
+ done
+ with_netcdf4_fortran="yes"
+ fi
+
+ AC_SUBST([NETCDF4_VERSION])
+ AC_SUBST([NETCDF4_CC])
+ AC_SUBST([NETCDF4_CFLAGS])
+ AC_SUBST([NETCDF4_LDFLAGS])
+ AC_SUBST([NETCDF4_LIBS])
+ AC_SUBST([NETCDF4_FC])
+ AC_SUBST([NETCDF4_FFLAGS])
+ AC_SUBST([NETCDF4_FLIBS])
+ AC_DEFINE([HAVE_NETCDF4], [1], [Defined if you have NETCDF4 support])
+ fi
+fi
+])