From b1b8ce10bc6eb8c85e3dfe11417833c6344bfcdb Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Date: Fri, 19 Nov 2021 17:45:06 +0100 Subject: [PATCH] Rewrite the configure script. 1. Check for FC only if one of the Fortran interfaces is requested. 2. Fail if the Fortran ISO C interface is enabled but FC is not found. 3. Check for F77 only if the C Fortran interface is requested and either FC was not found or the user set F77 explicitly. In the latter case, we make sure that the generated library is compatible with both FC and F77. 4. Check for Fortran interfaces of MPI and YAXT only when needed and do not fail if either of them not found: we can still provide the C Fortran interface. 5. Refactor the Automake conditionals: remove redundant, rename the required in a consistent way. Conditionals from acx_options.m4 left unchanged since they might affect the integration into CDO. 6. General clean-up and refactoring. 7. Temporarily drop support for the experimental ruby and python interfaces. --- Makefile.am | 2 +- configure.ac | 753 ++++++++++++++------------- examples/Makefile.am | 8 +- examples/pio/Makefile.am | 25 +- src/Makefile.am | 56 +- tests/Makefile.am | 15 +- tests/pio_cksum_asynch.in | 2 +- tests/pio_cksum_cdf.in | 2 +- tests/pio_cksum_fpguard.in | 2 +- tests/pio_cksum_grb2.in | 2 +- tests/pio_cksum_mpi_fw_at_all.in | 2 +- tests/pio_cksum_mpi_fw_at_reblock.in | 2 +- tests/pio_cksum_mpi_fw_ordered.in | 2 +- tests/pio_cksum_mpinonb.in | 2 +- tests/pio_cksum_writer.in | 2 +- tests/pio_write_run.in | 8 +- tests/test_f2003.in | 2 +- 17 files changed, 448 insertions(+), 439 deletions(-) diff --git a/Makefile.am b/Makefile.am index c3ff72235..42820a0f5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = src interfaces app examples tests +SUBDIRS = src app examples tests # The pdf files below cannot be created in parallel: doc/cdi_cman.pdf: doc/cdi_fman.pdf diff --git a/configure.ac b/configure.ac index 0ba5cba05..b22ec792e 100644 --- a/configure.ac +++ b/configure.ac @@ -8,12 +8,8 @@ AC_PREREQ([2.69]) LT_PREREQ([2.4.6]) AC_INIT([cdi],[2.1.1],[https://mpimet.mpg.de/cdi]) - AC_DEFINE_UNQUOTED(CDI, ["$PACKAGE_VERSION"], [CDI version]) -echo "configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}" - -CONFIG_ABORT=yes AC_CONFIG_AUX_DIR([config]) AC_CONFIG_MACRO_DIR([m4]) dnl forbid acx macro names from remaining unexpanded @@ -22,172 +18,286 @@ AC_CANONICAL_HOST AC_CANONICAL_BUILD AM_INIT_AUTOMAKE([1.16.1 foreign serial-tests]) -AC_CONFIG_HEADERS([src/config.h]) AM_MAINTAINER_MODE([disable]) -# Check building environment AC_PROG_CC_C99 -dnl The check above forgets to delete the following directory -dnl generated by the MacOS linker, which results in multiple -dnl annoying messages from the rm utility: -rm -rf conftest.dSYM -dnl verify the setup supports POSIX 2001 +AS_VAR_IF([ac_cv_prog_cc_c99], [no], + [AC_MSG_FAILURE([C compiler does not support ISO C99])]) ACX_PROG_CC_POSIX([2001]) AC_C_RESTRICT -AC_PROG_FC -AS_IF([test -n "$FC" && test "X$FC" != Xno], - [AC_FC_SRCEXT([f90]) - AC_LANG_PUSH([Fortran]) - dnl check that FC is working just as well as CC - _AC_COMPILER_EXEEXT - AC_PROG_FPP - AC_LANG_POP([Fortran])]) -AC_PROG_F77 -AS_IF([test -n "$F77" && test "X$F77" != Xno], - [AC_LANG_PUSH([Fortran 77]) - dnl check that F77 is working just as well as CC - _AC_COMPILER_EXEEXT - AC_LANG_POP([Fortran 77])]) -AC_PROG_CXX + +AC_ARG_ENABLE([iso-c-interface], + [AS_HELP_STRING([--enable-iso-c-interface], + [create Fortran 90 interface using Fortran 2003 ISO_C_BINDING facility ]dnl +[@<:@default=no@:>@])], + [test "x$enableval" != xno && enable_iso_c_interface=yes], + [enable_iso_c_interface=no]) +AM_CONDITIONAL([ENABLE_ISOC_INTERFACE], + [test "x$enable_iso_c_interface" = xyes]) + +AC_ARG_ENABLE([cf-interface], + [AS_HELP_STRING([--enable-cf-interface], + [create Fortran 77 interface using cfortran.h @<:@default=yes@:>@])], + [test "x$enableval" != xno && enable_cf_interface=yes], + [enable_cf_interface=yes]) +AM_CONDITIONAL([ENABLE_CF_INTERFACE], [test "x$enable_cf_interface" = xyes]) + +dnl We need FC for the Fortran 90 and for the Fortran 77 interfaces. In the +dnl latter case, the compiler is used for testing. Note that we use neither +dnl AS_IF nor AS_VAR_IF here to prevent checking for FC when we do not need it: +if test "x$enable_iso_c_interface" = xyes || \ + test "x$enable_cf_interface" = xyes; then + if test "x$FC" != xno; then + AC_PROG_FC + test -z $FC 2>/dev/null && FC=no + AS_IF([test "x$FC" != xno], [AC_FC_SRCEXT([f90], [], [FC=no])]) + AS_IF([test "x$FC" != xno], + [AC_MSG_CHECKING([whether the Fortran compiler works]) + works_FC=no + AC_LANG_PUSH([Fortran]) + AC_LINK_IFELSE([AC_LANG_PROGRAM], + [AS_IF([test "x$cross_compiling" != xyes], + [AC_TRY_COMMAND([./conftest$ac_exeext]) + AS_IF([test $ac_status -eq 0], [works_FC=yes])], + [works_FC=yes])]) + AC_LANG_POP([Fortran]) + AC_MSG_RESULT([$works_FC]) + AS_VAR_IF([works_FC], [no], [FC=no]) + AS_UNSET([works_FC])]) + fi +else + FC=no +fi +dnl Additional checks required for the Fortran 90 interface: +AS_VAR_IF([enable_iso_c_interface], [yes], + [AS_IF([test "x$FC" != xno], [ACX_FC_CHECK_STRPTR_CONVERT([], [FC=no])]) + AS_VAR_IF([FC], [no], + [AC_MSG_FAILURE([the Fortran 90 interface is requested but the Fortran ]dnl +[compiler is disabled, missing or lacks the required features])]) +dnl Additional tests with fallback values: + AS_IF([test "x$FC" != xno], + [AC_LANG_PUSH([Fortran]) + ACX_SL_FC_CHECK_MOD_PATH_FLAG([], [FC_MOD_FLAG=-I]) + ACX_SL_FC_MOD_SUFFIX([], [FCMODEXT=mod]) + AC_LANG_POP([Fortran])])]) +AM_CONDITIONAL([FC_MOD_UPPERCASE], [test "x$FCMODCASE" = xuc]) + +dnl We need Fortran 77 if either FC is not available or the user has specified +dnl F77 explicitly to make sure that the generated Fortran 77 interface is +dnl compatible with it: +if test "x$enable_cf_interface" = xyes; then + AS_IF([test -n "$F77" && test "x$F77" != xno], + [requested_F77=yes], [requested_F77=no]) + if test "x$FC" = xno || test "x$requested_F77" = xyes; then + AC_PROG_F77 + test -z $F77 2>/dev/null && F77=no + AS_IF([test "x$F77" != xno], + [AC_MSG_CHECKING([whether the Fortran 77 compiler works]) + works_F77=no + AC_LANG_PUSH([Fortran 77]) + AC_LINK_IFELSE([AC_LANG_PROGRAM], + [AS_IF([test "x$cross_compiling" != xyes], + [AC_TRY_COMMAND([./conftest$ac_exeext]) + AS_IF([test $ac_status -eq 0], [works_F77=yes])], + [works_F77=yes])]) + AC_LANG_POP([Fortran 77]) + AC_MSG_RESULT([$works_F77]) + AS_VAR_IF([works_F77], [no], [F77=no]) + AS_UNSET([works_F77])]) + else + F77=no + fi + AS_IF([test "x$F77" = xno && test "x$requested_F77" = xyes], + [AC_MSG_FAILURE([the explicitly requested Fortran 77 compiler is ]dnl +[missing or lacks the required features])]) + AS_UNSET([requested_F77]) +else + F77=no +fi +dnl Additional checks required for the Fortran 77 interface: +AS_VAR_IF([enable_cf_interface], [yes], + [dnl +dnl The following macro make sure the the user's request for the Fortran 77 +dnl interface compatibility is fulfilled: + ACX_FIND_CFORTRAN_DEF + ACX_XLF_QEXTNAME_ADD_APPENDUS + ACX_CHECK_CFORTRAN([$srcdir/src], + [AC_DEFINE([HAVE_CF_INTERFACE], [1], + [Defined to 1 if C / Fortran interface cfortran.h works])]) + AS_IF([test "x$FC" = xno && test "x$F77" = xno], + [AC_MSG_FAILURE([the Fortran 77 interface is requested but both ]dnl +[Fortran and Fortran 77 compilers are disabled, missing or lack the ]dnl +[required features])]) + AS_IF([test "x$FC" != xno], + [dnl +dnl Additional tests with fallback values: +dnl TODO: the following should be put to a separate .m4 file (note that we +dnl test the Fortran include statement, which we actually use in the code, and +dnl not the Fortran preprocessor include directive, which is tested in +dnl ACX_SL_PROG_FC_FPP_FEATURES): + AC_CACHE_CHECK([for Fortran compiler flag needed to specify search dnl +paths for the \"INCLUDE\" statement], [acx_cv_fc_ftn_include_flag], + [AC_LANG_PUSH([Fortran]) + acx_cv_fc_ftn_include_flag=unknown + AS_MKDIR_P([conftest.dir]) + AC_LANG_CONFTEST([AC_LANG_PROGRAM]) + mv conftest.$ac_ext conftest.dir/conftest.inc + AC_LANG_CONFTEST([AC_LANG_SOURCE( + [[ include "conftest.inc"]])]) + saved_FCFLAGS=$FCFLAGS + for acx_flag in -I '-I '; do + FCFLAGS="$saved_FCFLAGS ${acx_flag}conftest.dir" + AC_LINK_IFELSE([], [acx_cv_fc_ftn_include_flag=$acx_flag]) + test "x$acx_cv_fc_ftn_include_flag" != xunknown && break + done + FCFLAGS=$saved_FCFLAGS + rm -rf conftest.$ac_ext conftest.dir + AC_LANG_POP([Fortran])]) + AS_VAR_IF([acx_cv_fc_ftn_include_flag], [unknown], + [acx_cv_fc_ftn_include_flag=-I]) + AC_SUBST([FC_OPTINC], [$acx_cv_fc_ftn_include_flag]) +dnl Find the Fortran compiler flag needed to specify a preprocessor macro +dnl definition for *.F90 source files: + m4_pushdef([AC_FC_PP_SRCEXT])dnl + saved_ac_fc_srcext=$ac_fc_srcext + ac_fc_srcext='F90' + AC_FC_PP_DEFINE([], [FC_DEFINE=-D]) + ac_fc_srcext=$saved_ac_fc_srcext + m4_popdef([AC_FC_PP_DEFINE])])]) + AC_PROG_INSTALL AC_OPENMP -# Set up libtool. + +dnl Set up libtool: AC_MSG_NOTICE([setting up libtool]) ACX_USE_LIBTOOL_CONFIGURATION([pic-only]) -# ----------------------------------------------------------------------- -# Check endianess of system +dnl Check endianess of system: AC_C_BIGENDIAN -# ---------------------------------------------------------------------- -# Check large file support on 32 bit systems +dnl Check large file support on 32 bit systems: AC_SYS_LARGEFILE -# ---------------------------------------------------------------------- -# Checks for library functions. +dnl Checks for library functions: AC_FUNC_MMAP -# ---------------------------------------------------------------------- -# Checks for structures. +dnl Check for structures: AC_CHECK_MEMBERS([struct stat.st_blksize]) -# ---------------------------------------------------------------------- -# Checks for header files +dnl Checks for header files: AC_CHECK_HEADERS([malloc.h unistd.h sys/time.h],,,[AC_INCLUDES_DEFAULT]) AX_EXECINFO -# ---------------------------------------------------------------------- -# Checks for the availability of functions +dnl Checks for the availability of functions: AC_CHECK_FUNCS([mallinfo pwrite]) AC_REPLACE_FUNCS([getline]) +dnl Check for UUID library: ACX_UUID -LIBS="${LIBS+$LIBS }$UUID_C_LIB" -CPPFLAGS="${CPPFLAGS+$CPPFLAGS }$UUID_C_INCLUDE" -# ---------------------------------------------------------------------- -# Checks for the availability of ANSI-C99 functions -AC_CHECK_DECLS([isnan],,,[AC_INCLUDES_DEFAULT +AS_VAR_APPEND([CFLAGS], [" $UUID_C_INCLUDE"]) +LIBS="$UUID_C_LIB $LIBS" +dnl Checks for the availability of ANSI-C99 functions: +AC_CHECK_DECLS([isnan], [], [], + [AC_INCLUDES_DEFAULT @%:@include <math.h>]) - -# check for sysconf names -AC_CHECK_DECLS([_SC_LARGE_PAGESIZE, PAGESIZE, PAGE_SIZE, _SC_PAGE_SIZE, dnl -_SC_PAGESIZE, _PC_REC_XFER_ALIGN, POSIX_REC_XFER_ALIGN],,,[AC_INCLUDES_DEFAULT +dnl Check for sysconf names: +AC_CHECK_DECLS( + [_SC_LARGE_PAGESIZE, PAGESIZE, PAGE_SIZE, _SC_PAGE_SIZE, _SC_PAGESIZE, dnl +_PC_REC_XFER_ALIGN, POSIX_REC_XFER_ALIGN], [], [], + [AC_INCLUDES_DEFAULT @%:@include <limits.h> @%:@include <unistd.h>]) -# -# Check for non-standard builtin -AS_FOR([builtin_macro],[builtin],[__builtin_ctz], - [AS_VAR_PUSHDEF([builtin_cache],[acx_cv_have_decl_]builtin_macro) +dnl Check for math library: +AC_SEARCH_LIBS(floor, m) + +dnl Check for non-standard builtin: +AS_FOR([builtin_macro], [builtin], [__builtin_ctz], + [AS_VAR_PUSHDEF([builtin_cache], [acx_cv_have_decl_]builtin_macro) AC_CACHE_CHECK([whether ]builtin_macro[ is declared], [builtin_cache], - [AC_LINK_IFELSE([AC_LANG_PROGRAM(,[ unsigned lbz = builtin_macro][[(56U)]])], - [AS_VAR_SET([builtin_cache],[yes])], - [AS_VAR_SET([builtin_cache],[no])])]) - AS_VAR_IF([builtin_cache],[yes], - [AC_DEFINE_UNQUOTED([HAVE_DECL_]AS_TR_CPP([builtin_macro]),[1]) + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM([], [ unsigned lbz = builtin_macro][[(56U)]])], + [AS_VAR_SET([builtin_cache], [yes])], + [AS_VAR_SET([builtin_cache], [no])])]) + AS_VAR_IF([builtin_cache], [yes], + [AC_DEFINE_UNQUOTED([HAVE_DECL_]AS_TR_CPP([builtin_macro]), [1]) break], - [AC_DEFINE_UNQUOTED([HAVE_DECL_]AS_TR_CPP([builtin_macro]),[0])])]) + [AC_DEFINE_UNQUOTED([HAVE_DECL_]AS_TR_CPP([builtin_macro]), [0])])]) AH_TEMPLATE([HAVE_DECL___BUILTIN_CTZ], [Define to 1 if __builtin_ctz is available, 0 if not]) -# Check compiler version -case "$CC" in - pgcc*) COMP_VERSION=`$CC -V | head -2 | tail -n 1`;; - *gcc*) COMP_VERSION=`$CC --version | head -n 1`;; - g++*) COMP_VERSION=`$CC --version | head -n 1`;; - clang*) COMP_VERSION=`$CC --version | head -n 1`;; - sxc*) COMP_VERSION=`$CC -V 2>&1 | tail -n 1`;; - xlc*) COMP_VERSION=`$CC -qversion 2>&1 | head -n 1`;; - *) - # 'head -n 1' exits after printing the first line, which closes the pipe - # and kills the compiler's process leaving it no chance to clean any - # temporary files it might have created (e.g. Intel compiler creates - # 'a.out' when it is called with additional flags like -I, -L, etc., - # which is the case when $CC is an MPI wrapper). Therefore, we have to - # run the processes one after another: - COMP_VERSION=`$CC -V 2>&1` - COMP_VERSION=`echo "$COMP_VERSION" | head -n 1` ;; -esac - -if test -z "$COMP_VERSION" ; then COMP_VERSION="unknown"; fi; -AC_DEFINE_UNQUOTED(COMP_VERSION, ["$COMP_VERSION"], [Compiler version]) - -# Check for system type -AC_DEFINE_UNQUOTED([SYSTEM_TYPE],["$ac_cv_build"], [System type]) -AC_SUBST([SYSTEM_TYPE],["$ac_cv_build"]) -# ----------------------------------------------------------------------- -# Check for math library and add -lm to LIBS -AC_SEARCH_LIBS(floor, m) -# ---------------------------------------------------------------------- -# Add basic configure options +dnl TODO: add comments on why we do not have all options in one place: +dnl Add basic configure options: ACX_CDI_OPTIONS -AM_CONDITIONAL([ENABLE_NETCDF],[test x$ENABLE_NETCDF = xyes]) +AM_CONDITIONAL([ENABLE_NETCDF], [test "x$ENABLE_NETCDF" = xyes]) AC_CHECK_FUNCS([grib_get_length]) -AS_IF([test x"$with_grib_api" != x -a "x$with_grib_api" != xno \ - -o x"$with_eccodes" != x -a x"$with_eccodes" != xno], - [ENABLE_LIBGRIB_API=yes],[ENABLE_LIBGRIB_API=no]) -AC_SUBST([ENABLE_LIBGRIB_API]) -AM_SUBST_NOTMAKE([ENABLE_LIBGRIB_API]) -# ---------------------------------------------------------------------- -# Compile with MPI support + +dnl TODO: check whether we really need all the following information. Is it just +dnl for 'app/cdi -d'? If so, we can skip this when we are not going to install +dnl the executable: +AC_DEFINE_UNQUOTED(COMPILER, ["$CC $CFLAGS"], [Compiler]) +dnl TODO: replace the following with a macro that can do the detection better: +dnl Check compiler version: +COMP_VERSION= +AS_CASE([$CC], + [pgcc*], [COMP_VERSION=`$CC -V | head -2 | tail -n 1`], + [*gcc*], [COMP_VERSION=`$CC --version | head -n 1`], + [g++*], [COMP_VERSION=`$CC --version | head -n 1`], + [clang*], [COMP_VERSION=`$CC --version | head -n 1`], + [sxc*], [COMP_VERSION=`$CC -V 2>&1 | tail -n 1`], + [xlc*], [COMP_VERSION=`$CC -qversion 2>&1 | head -n 1`], + [dnl +dnl 'head -n 1' exits after printing the first line, which closes the pipe and +dnl kills the compiler's process leaving it no chance to clean any temporary +dnl files it might have created (e.g. Intel compiler creates 'a.out' when it is +dnl called with additional flags like -I, -L, etc., which is the case when $CC +dnl is an MPI wrapper). Therefore, we have to run the processes one after +dnl another: + COMP_VERSION=`$CC -V 2>&1` + COMP_VERSION=`echo "$COMP_VERSION" | head -n 1`]) +test -z "$COMP_VERSION" && COMP_VERSION=unknown +AC_DEFINE_UNQUOTED([COMP_VERSION], ["$COMP_VERSION"], [Compiler version]) +dnl +dnl Checks for system type: +AC_DEFINE_UNQUOTED([SYSTEM_TYPE], ["$ac_cv_build"], [System type]) +AC_SUBST([SYSTEM_TYPE], ["$ac_cv_build"]) + +dnl Compile with MPI support: AC_ARG_ENABLE([mpi], - AS_HELP_STRING([--enable-mpi], - [Compile with MPI compiler @<:@default=no@:>@]),, - [enable_mpi=no]) + [AS_HELP_STRING([--enable-mpi], + [enable parallel I/O with MPI @<:@default=no@:>@])], + [test "x$enableval" != xno && enable_mpi=yes], + [enable_mpi=no]) + +build_pio_fc_programs=no +have_ppm=no +have_parallel_nc4=no AS_VAR_IF([enable_mpi], [yes], - [ACX_C_PACKAGE([MPI],[mpi.h],,, - [AC_MSG_FAILURE([Required header mpi.h not found or not compilable.]) - enable_MPI=no], - [MPI_Waitall],[mpi mpich],,, - [AC_MSG_FAILURE([Cannot link C MPI programs.]) - enable_MPI=no]) - AS_IF([test -n "$FC" && test "X$FC" != "Xno"], - [ACX_FORTRAN_PACKAGE([MPI], [mpif.h],,, - [AC_MSG_FAILURE([Required include mpif.h not found or not compilable.]) - enable_MPI=no],[mpi_waitall], - [mpi mpi_f90 mpi_f77 mpich],[[-lmpi_f77 -lmpi],[-lmpi]],, - [AC_MSG_FAILURE([Cannot link Fortran MPI programs.]) - enable_MPI=no],[])])]) -AS_IF([test x"${enable_mpi}" = xyes], - [USE_MPI=yes]) -HAVE_PARALLEL_NC4=0 -enable_ppm=no -AS_IF([test x"$USE_MPI" = xyes], - [AC_DEFINE([USE_MPI],[1],[parallel I/O requested and available]) -dnl test properties of MPI system + [dnl +dnl Check for MPI C interface: + ACX_C_PACKAGE([MPI], [mpi.h],,, + [AC_MSG_FAILURE([required header mpi.h not found or not compilable])], + [MPI_Waitall],[mpi mpich], [], [], + [AC_MSG_FAILURE([cannot link C MPI programs])]) + +dnl Check for MPI_LAUNCH command: saved_CFLAGS=$CFLAGS - saved_FCFLAGS=$FCFLAGS saved_LIBS=$LIBS - CFLAGS="$CFLAGS $MPI_C_INCLUDE" - FCFLAGS="$FCFLAGS $MPI_FC_INCLUDE" - LIBS="$LIBS $MPI_C_LIB" - ACX_MPIRUN(,,[AC_MSG_WARN([MPI launch command unavailable])]) - AH_TEMPLATE([YAXT_UID_DT],[Defined to MPI datatype to be used for Xt_uid])dnl - AC_CHECK_DECL([MPI_UINT64_T], - [AC_DEFINE([YAXT_UID_DT],[MPI_UINT64_T])], - [AC_CHECK_SIZEOF([unsigned long]) - AC_CHECK_SIZEOF([unsigned long long]) - AC_CHECK_DECLS([MPI_UNSIGNED_LONG_LONG],,,[AC_INCLUDES_DEFAULT -@%:@include <mpi.h>])],[AC_INCLUDES_DEFAULT -@%:@include <mpi.h>]) + AS_VAR_APPEND([CFLAGS], [" $MPI_C_INCLUDE"]) + LIBS="$MPI_C_LIB $LIBS" + ACX_MPIRUN(,,[AC_MSG_WARN([MPI launch command not found or not compilable])]) CFLAGS=$saved_CFLAGS - FCFLAGS=$saved_FCFLAGS LIBS=$saved_LIBS +dnl Check for MPI Fortran interface (if needed): + build_pio_fc_programs=$enable_cf_interface + test "x$FC" = xno && build_pio_fc_programs=no + AS_VAR_IF([build_pio_fc_programs], [yes], + [ACX_F90_PACKAGE([MPI], [mpi],,, + [AC_MSG_WARN([required Fortran module mpi not found or not compilable]) + build_pio_fc_programs=no], + [mpi_waitall], [mpi mpi_f90 mpi_f77 mpich], [[-lmpi_f77 -lmpi],[-lmpi]],, + [AC_MSG_WARN([cannot link Fortran MPI programs]) + build_pio_fc_programs=no],, + [[INTEGER :: req(1), stat(mpi_status_size, 1), ierror]], + [[(1, req, stat, ierror)]])]) + +dnl Check for YAXT C interface: +dnl dnl Declare pkg-config precious variables: PKG_PROG_PKG_CONFIG dnl Set precious variables following the naming convention of ACX_C_PACKAGE: @@ -223,8 +333,8 @@ dnl have names YAXT_C_INCLUDE and YAXT_C_LIB, respectively: m4_popdef([AC_ARG_VAR])dnl saved_CFLAGS=$CFLAGS saved_LIBS=$LIBS - CFLAGS="$CFLAGS $MPI_C_INCLUDE" - LIBS="$LIBS $MPI_C_LIB" + AS_VAR_APPEND([CFLAGS], [" $MPI_C_INCLUDE"]) + LIBS="$MPI_C_LIB $LIBS" dnl The following is extracted from ACX_GENERIC_PACKAGE, which is expanded by dnl ACX_C_PACKAGE. We do not use the latter macro here to avoid introduction of dnl the '--with-yaxt-XXX' configure options, which might be very confusing since @@ -233,13 +343,42 @@ dnl whatever pkg-config finds will be used instead. [YAXT_C_INCLUDE=$acx_cv_c_include_yaxt_h ACX_OPTION_SEARCH_LIBS_MULTI([xt_initialized], [yaxt_c yaxt], [YAXT_C_LIB=$acx_cv_option_search_xt_initialized_c], - [AC_MSG_FAILURE([Cannot link to yaxt.])],,[$YAXT_C_LIB])], - [AC_MSG_FAILURE([Required include yaxt.h not found or not compilable.])],, + [AC_MSG_FAILURE([cannot link C YAXT programs])],,[$YAXT_C_LIB])], + [AC_MSG_FAILURE([required header yaxt.h not found or not compilable])],, [$YAXT_C_INCLUDE],[[]]) +dnl + AH_TEMPLATE([YAXT_UID_DT], + [Defined to MPI datatype to be used for Xt_uid])dnl + defined_Xt_uid=no + AC_CHECK_DECL([MPI_UINT64_T], + [AC_DEFINE([YAXT_UID_DT], [MPI_UINT64_T]) + defined_Xt_uid=yes], + [AS_VAR_APPEND([CFLAGS], [" $YAXT_C_INCLUDE"]) + LIBS="$YAXT_C_LIB $LIBS" + AC_CHECK_SIZEOF([Xt_uid],, + [AC_INCLUDES_DEFAULT +@%:@include <yaxt.h>]) + AC_CHECK_SIZEOF([unsigned long]) + AS_IF([test "$ac_cv_sizeof_unsigned_long" -eq "$ac_cv_sizeof_Xt_uid"], + [AC_DEFINE([YAXT_UID_DT], [MPI_UNSIGNED_LONG]) + defined_Xt_uid=yes], + [AC_CHECK_DECLS([MPI_UNSIGNED_LONG_LONG], + [AC_CHECK_SIZEOF([unsigned long long]) + AS_IF([test "$ac_cv_sizeof_unsigned_long_long" -eq "$ac_cv_sizeof_Xt_uid"], + [AC_DEFINE([YAXT_UID_DT],[MPI_UNSIGNED_LONG_LONG]) + defined_Xt_uid=yes])],, + [AC_INCLUDES_DEFAULT +@%:@include <mpi.h>])])], + [AC_INCLUDES_DEFAULT +@%:@include <mpi.h>]) + AS_VAR_IF([defined_Xt_uid], [no], + [AC_MSG_FAILURE([no way to communicate Xt_uid found])]) + AS_UNSET([defined_Xt_uid]) CFLAGS=$saved_CFLAGS LIBS=$saved_LIBS -dnl - AS_IF([test -n "$FC" && test "X$FC" != Xno], + +dnl Check for YAXT Fortran interface (if needed): + AS_VAR_IF([build_pio_fc_programs], [yes], [dnl dnl Set precious variables following the naming convention of ACX_F90_PACKAGE: AC_ARG_VAR([YAXT_FC_MOD], @@ -259,52 +398,34 @@ dnl have names YAXT_FC_MOD and YAXT_FC_LIB, respectively: m4_popdef([AC_ARG_VAR])dnl saved_FCFLAGS=$FCFLAGS saved_LIBS=$LIBS - FCFLAGS="$FCFLAGS $MPI_FC_INCLUDE" - LIBS="$LIBS $MPI_FC_LIB" + AS_VAR_APPEND([FCFLAGS], [" $MPI_FC_MOD"]) + LIBS="$MPI_FC_LIB $LIBS" dnl The following is extracted from ACX_F90_PACKAGE. We do not use the dnl aforementioned macro here to avoid introduction of the '--with-yaxt-XXX' dnl configure options, which might be very confusing since whatever pkg-config dnl finds will be used instead. AC_LANG_PUSH([Fortran])dnl - ACX_SL_FC_CHECK_MOD_PATH_FLAG ACX_FORTRAN_CHECK_MOD_PATHS_IFELSE([yaxt],, [YAXT_FC_MOD=$acx_cv_fortran_mod_yaxt -dnl The original FCFLAGS are already saved above: - FCFLAGS="$FCFLAGS $YAXT_FC_MOD" + AS_VAR_APPEND([FCFLAGS], [" $YAXT_FC_MOD"]) dnl Note that the following test must check for a function implemented in the dnl Fortran library, as well as for a function implemented in the C library and dnl available via C bindings: ACX_OPTION_SEARCH_LIBS_MULTI([xt_initialized],[yaxt], [YAXT_FC_LIB=$acx_cv_option_search_xt_initialized_fc], - [AC_MSG_FAILURE([Cannot link to yaxt.])],[[-lyaxt_c]], + [AC_MSG_WARN([cannot link Fortran YAXT programs]) + build_pio_fc_programs=no],[[-lyaxt_c]], [$YAXT_FC_LIB], [[ use yaxt logical is_initialized]], [[ is_initialized = xt_initialized() call xt_finalize()]])], - [AC_MSG_FAILURE([Required module yaxt not found or not compilable.])],, + [AC_MSG_WARN([required Fortran module yaxt not found or not compilable]) + build_pio_fc_programs=no],, [$YAXT_FC_MOD]) AC_LANG_POP([Fortran])dnl FCFLAGS=$saved_FCFLAGS LIBS=$saved_LIBS]) -dnl The configure script fails above if YAXT is not available: - AC_DEFINE([HAVE_YAXT],,[yaxt library is available]) - - AS_IF([test "x$ac_cv_have_decl_MPI_UINT64_T" != xyes], - [saved_CFLAGS=$CFLAGS - saved_LIBS=$LIBS - CFLAGS="$CFLAGS $YAXT_C_INCLUDE $MPI_C_INCLUDE" - LIBS="$LIBS $YAXT_C_LIB $MPI_C_LIB" - AC_CHECK_SIZEOF([Xt_uid],,[AC_INCLUDES_DEFAULT -@%:@include <yaxt.h>]) - AS_IF([test "$ac_cv_sizeof_unsigned_long" -eq "$ac_cv_sizeof_Xt_uid"], - [AC_DEFINE([YAXT_UID_DT],[MPI_UNSIGNED_LONG])], - [test "x$ac_cv_have_decl_MPI_UNSIGNED_LONG_LONG" = xyes \ - -a "$ac_cv_sizeof_unsigned_long_long" -eq "$ac_cv_sizeof_Xt_uid"], - [AC_DEFINE([YAXT_UID_DT],[MPI_UNSIGNED_LONG_LONG])], - [AC_MSG_FAILURE([no way to communicate Xt_uid found])]) - CFLAGS=$saved_CFLAGS - LIBS=$saved_LIBS]) dnl Parallel netCDF support still requires ScalES-PPM and YAXT to re-arrange the dnl data when running with more than one collector. @@ -328,8 +449,8 @@ dnl case have names PPM_CORE_C_INCLUDE and PPM_CORE_C_LIB, respectively: m4_popdef([AC_ARG_VAR])dnl saved_CFLAGS=$CFLAGS saved_LIBS=$LIBS - CFLAGS="$CFLAGS $MPI_C_INCLUDE" - LIBS="$LIBS $MPI_C_LIB" + AS_VAR_APPEND([CFLAGS], [" $MPI_C_INCLUDE"]) + LIBS="$MPI_C_LIB $LIBS" dnl The following is extracted from ACX_GENERIC_PACKAGE, which is expanded by dnl ACX_C_PACKAGE. We do not use the latter macro here to avoid introduction of dnl the '--with-ppm-core-XXX' configure options, which might be very confusing @@ -338,29 +459,26 @@ dnl since whatever pkg-config finds will be used instead. [PPM_CORE_C_INCLUDE=$acx_cv_c_include_ppm_ppm_h ACX_OPTION_SEARCH_LIBS_MULTI([PPM_initialize], [scalesppmcore], [PPM_CORE_C_LIB=$acx_cv_option_search_PPM_initialize_c - enable_ppm=yes + have_ppm=yes AC_DEFINE([HAVE_PPM_CORE],,[ScalES PPM C core library is available]) - saved_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS $PPM_CORE_C_INCLUDE" + AS_VAR_APPEND([CFLAGS], [" $PPM_CORE_C_INCLUDE"]) AC_CHECK_HEADERS([ppm/dist_array.h], - [HAVE_PPM_DIST_ARRAY=yes],, - [AC_INCLUDES_DEFAULT]) - CPPFLAGS=$saved_CPPFLAGS + [HAVE_PPM_DIST_ARRAY=yes], + [HAVE_PPM_DIST_ARRAY=no], + [AC_INCLUDES_DEFAULT]) AC_SUBST([HAVE_PPM_DIST_ARRAY]) AM_SUBST_NOTMAKE([HAVE_PPM_DIST_ARRAY])], - [AC_MSG_WARN([Cannot link to scales-ppm-core library.])],, + [AC_MSG_WARN([cannot link C SCALES-PPM-CORE programs])],, [$PPM_CORE_C_LIB])], - [AC_MSG_WARN([Include ppm/ppm.h not found or not compilable.])],, + [AC_MSG_WARN([required header ppm/ppm.h not found or not compilable])],, [$PPM_CORE_C_INCLUDE],[[]]) CFLAGS=$saved_CFLAGS LIBS=$saved_LIBS - AS_VAR_IF([enable_ppm], [no], - [PPM_CORE_C_INCLUDE= - PPM_CORE_C_LIB=]) -dnl + dnl NC_HAS_PNETCDF is useful when available to short-circuit some tests - AS_IF([test x"$ENABLE_NETCDF" = xyes], - [AC_CHECK_HEADERS([netcdf_meta.h],,,[AC_INCLUDES_DEFAULT + AS_VAR_IF([ENABLE_NETCDF], [yes], + [AC_CHECK_HEADERS([netcdf_meta.h],,, + [AC_INCLUDES_DEFAULT @%:@include <netcdf.h>]) dnl The following test is relevant only for older versions of netCDF. Starting dnl version 4.3.3, netCDF provides the NC_HAS_PNETCDF macro and its value @@ -372,172 +490,55 @@ dnl overrides the result of the test. test "x$($NC_CONFIG --has-pnetcdf)" = "xyes" && \ acx_cv_have_pnetcdf=yes]) AS_VAR_IF([acx_cv_have_pnetcdf], [yes], - [AC_DEFINE([HAVE_NETCDF_PAR_PNETCDF],[1], + [AC_DEFINE([HAVE_NETCDF_PAR_PNETCDF], [1], [Defined to 1 if NetCDF parallel open supports NC_PNETCDF])])]) -dnl -dnl If not both scales-ppm and yaxt are available, netcdf can only be used in -dnl serial mode: - AS_IF([test x"$ENABLE_NC4" = xyes && test x"$enable_ppm" = xyes], + +dnl If scales-ppm is not available, netcdf can only be used in serial mode: + AS_IF([test x"$ENABLE_NC4" = xyes && test x"$have_ppm" = xyes], [saved_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $MPI_C_INCLUDE" - AC_CHECK_HEADERS([netcdf_par.h],,,[AC_INCLUDES_DEFAULT + AC_CHECK_HEADERS([netcdf_par.h],,, + [AC_INCLUDES_DEFAULT @%:@include <netcdf.h>]) AC_CHECK_DECL([MPI_Bcast], - [HAVE_PARALLEL_NC4=1 + [have_parallel_nc4=yes AC_CHECK_DECLS([nc_inq_format_extended],, - [AC_MSG_NOTICE([The supplied netCDF library does not support nc_inq_format_extended.])], + [AC_MSG_NOTICE([The supplied netCDF library does not support ]dnl +[nc_inq_format_extended.])], [AC_INCLUDES_DEFAULT @%:@include <netcdf.h>]) ACX_TLS_XLC_RETRY - AC_DEFINE([HAVE_PARALLEL_NC4],[1], + AC_DEFINE([HAVE_PARALLEL_NC4], [1], [netCDF library does support MPI parallel invocations])], - [AC_MSG_WARN([The supplied netCDF library does not support MPI parallel invocations])], + [AC_MSG_WARN([the supplied netCDF library does not support MPI ]dnl +[parallel invocations])], [AC_INCLUDES_DEFAULT @%:@include <netcdf.h> @%:@ifdef HAVE_NETCDF_PAR_H @%:@include <netcdf_par.h> @%:@endif]) CFLAGS=$saved_CFLAGS]) -dnl + +dnl Check for librt: AC_SUBST([LIBRT], ['']) AC_CHECK_DECL([_POSIX_ASYNCHRONOUS_IO], [saved_LIBS=$LIBS AC_SEARCH_LIBS([aio_suspend], [rt], [test "$ac_res" = "none required" || LIBRT=$ac_res]) LIBS=$saved_LIBS])], -dnl - [MPI_LAUNCH="`pwd`/util/serialrun" - AC_SUBST([MPI_LAUNCH])]) -AC_SUBST([HAVE_PARALLEL_NC4]) -AM_CONDITIONAL([USE_MPI],[test x"$USE_MPI" = xyes]) -AM_CONDITIONAL([USE_PPM_CORE],[test $enable_ppm = yes]) -AM_CONDITIONAL([HAVE_PARALLEL_NC4],[test $HAVE_PARALLEL_NC4 -gt 0]) -AC_SUBST([USE_MPI]) -AC_SUBST([ENABLE_MPI],[`test x"$enable_mpi" = xyes && echo true || echo false`]) -# ---------------------------------------------------------------------- -# Create the Fortran Interface via iso_c_binding module (Fortran 2003 Standard) -# -AC_ARG_ENABLE([iso-c-interface], - [AS_HELP_STRING([--enable-iso-c-interface], - [Create Fortran Interface via iso_c_bindings facility of F2003 [default=no].])], - [enable_isoc=${enableval}],[enable_isoc=no]) -AS_IF([test x"$enable_isoc" = xyes], - [AS_IF([test -z "$FC" || test "X$FC" = "Xno"], - [AC_MSG_FAILURE([Fortran compiler not found or disabled: either disable dnl -Fortran 2003 interface (--disable-iso-c-interface) or set FC accordingly])]) - ACX_FC_CHECK_STRPTR_CONVERT([], - [AC_MSG_FAILURE([the Fortran compiler cannot handle complex CHARACTER dnl -interoperability: disable Fortran 2003 interface (--disable-iso-c-interface)])])], - [enable_isoc=no]) -AM_CONDITIONAL([CREATE_ISOC],[test "x$enable_isoc" = 'xyes']) -AC_SUBST([ENABLE_F2003_ISOC],[$enable_isoc]) -AM_SUBST_NOTMAKE([ENABLE_F2003_ISOC]) -# in case the Fortran interface uses the more modern F90-style interface, -# the FCFLAGS for users of the library have to include a switch to use the -# .mod file -CDI_F90_INTERFACE_FCFLAGS='' -AS_IF([test "x${enable_isoc}" = "xyes"], - [AC_LANG_PUSH([Fortran]) - ACX_SL_FC_CHECK_MOD_PATH_FLAG - AC_LANG_POP([Fortran]) - CDI_F90_INTERFACE_FCFLAGS="${FC_MOD_FLAG}${includedir}"]) -AC_SUBST([CDI_F90_INTERFACE_FCFLAGS]) -# Check the module extension of the fortran compiler -AS_IF([test -n "$FC" && test "X$FC" != "Xno"], - [ACX_SL_FC_MOD_SUFFIX(,[FCMODEXT=mod])]) -AM_CONDITIONAL([FORTRAN_MOD_UC],[test "x$FCMODCASE" = "xuc"]) -# ----------------------------------------------------------------------- -# Check for SWIG - Generator for script-language bindings -AC_ARG_ENABLE(swig, - [AS_HELP_STRING([--enable-swig],[use swig to create extra bindings [default=no] (EXPERIMENTAL)])], - [AC_CHECK_PROG(SWIG,swig,swig)], - [enable_swig=no]) -AM_CONDITIONAL(ENABLE_SWIG,[test "x$SWIG" != "x"]) -# ---------------------------------------------------------------------- -# Create the Ruby Interface via swig -# -AC_ARG_ENABLE([ruby], - [AS_HELP_STRING([--enable-ruby],[ruby language bindings [default=no] (EXPERIMENTAL)])], - [AC_CHECK_PROG([RUBY],[ruby],[ruby]) - RUBY_INCLUDES="$($RUBY $srcdir/config/interface.rb)" - saved_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS $RUBY_INCLUDES" - AC_CHECK_HEADER([ruby.h],,[enable_ruby=no], [AC_INCLUDES_DEFAULT]) - CPPFLAGS=$saved_CPPFLAGS - AS_IF([test "x$RUBY" != "x"], - [AS_IF([test "x$SWIG" = "x"], - [AC_MSG_ERROR([Ruby bindings: Please enable SWIG with '--enable-swig'!])])], - [AS_IF([test `$SWIG -help 2>&1 | $GREP -c '\-ruby *- Generate'` = 0], - [AC_MSG_NOTICE([No (swig does not support -ruby option)]) - enable_ruby=no - ])])], - [enable_ruby=no]) -AM_CONDITIONAL(ENABLE_RUBY,[test "x$enable_ruby" != "xno"]) -AS_IF([test "x$enable_ruby" != "xno"],[AC_SUBST([ENABLE_RUBY],[true])],[AC_SUBST([ENABLE_RUBY],[false])]) -# Ruby is also used for the Fortran 2003 ISO C generator in maintainer mode. -# Report properly if it's missing: -AS_VAR_IF([RUBY], [], [AS_UNSET([RUBY])]) + [YAXT_C_INCLUDE=; YAXT_C_LIB= + MPI_C_INCLUDE=; MPI_C_LIB= + MPI_LAUNCH="`pwd`/util/serialrun"]) +AS_VAR_IF([have_ppm], [no], [PPM_CORE_C_INCLUDE=; PPM_CORE_C_LIB=]) +AS_VAR_IF([build_pio_fc_programs], [no], + [YAXT_FC_MOD=; YAXT_FC_LIB= + MPI_FC_MOD=; MPI_FC_LIB=]) +AM_CONDITIONAL([BUILD_PIO_FC_PROGRAMS], [test "x$build_pio_fc_programs" = xyes]) +AM_CONDITIONAL([ENABLE_MPI], [test "x$enable_mpi" = xyes]) +AM_CONDITIONAL([HAVE_PARALLEL_NC4], [test "x$have_parallel_nc4" = xyes]) + AM_MISSING_PROG([RUBY], [ruby]) -# ---------------------------------------------------------------------- -# Create the Python Interface via swig -AC_ARG_ENABLE(python, - [AS_HELP_STRING([--enable-python],[python language bindings [default=no] (EXPERIMENTAL)])], - [AC_CHECK_PROG(PYTHON,python,python) - enable_python=no - for PYTHON_INCLUDES in \ - "-I`$PYTHON -c 'from distutils import sysconfig;print(sysconfig.get_python_inc())'`" \ - "-I`$PYTHON -c 'from distutils import sysconfig;print(sysconfig.get_python_lib(1,1))' | $SED 's/lib/include/'`" - do - saved_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" - AC_CHECK_HEADER([Python.h],[enable_python=yes - break],,[AC_INCLUDES_DEFAULT]) - CPPFLAGS=$saved_CPPFLAGS - done - AS_IF([test "x$enable_python" != "xno"], - [AS_IF([test "x$SWIG" = "x"], - [AC_MSG_ERROR([Python bindings: Please enable SWIG with '--enable-swig'!])], - [PYTHON=])], - [AS_IF([test `$SWIG -help 2>&1 | $GREP -c '\-python *- Generate'` = 0], - [AC_MSG_NOTICE([No (swig does not support -python option)]) - enable_python=no - ])])], - [enable_python=no]) -AM_CONDITIONAL(ENABLE_PYTHON, [test "x$enable_python" != "xno"]) -AS_IF([test "x$enable_python" != "xno"],[AC_SUBST([ENABLE_PYTHON],[true])],[AC_SUBST([ENABLE_PYTHON],[false])]) -# ---------------------------------------------------------------------- -AM_CONDITIONAL(CREATE_INTERFACES, [test "x$enable_ruby" = "xyes" -o "x$enable_python" = "xyes"]) -# ---------------------------------------------------------------------- -# Create the CDI Fortran77 Interface via cfortran.h -AC_ARG_ENABLE([cf-interface], - [AS_HELP_STRING([--disable-cf-interface], - [Omit building of cfortran Interface])], - [enable_cfinterface=${enableval}],[enable_cfinterface=yes]) -AS_IF([test "x${enable_cfinterface}" = "xyes"], [ -dnl ###################################################################### -dnl Test whether cfortran.h works correctly -dnl ###################################################################### -ACX_FIND_CFORTRAN_DEF -ACX_XLF_QEXTNAME_ADD_APPENDUS -AS_IF([test -n "$FC" -a X"$FC" != Xno -o -n "$F77" -a X"$F77" != Xno], - [ACX_CHECK_CFORTRAN([$srcdir/src], - [AC_DEFINE([HAVE_CF_INTERFACE],[1], - [Defined to 1 if C / Fortran interface cfortran.h works])], - [AS_CASE([x"$acx_cv_cfortran_works"], - [x"error"], - [AC_MSG_NOTICE([Linking/Running with C EXTERNAL built with cfortran.h does not work!])], - [x"compiling with cfortran.h failed"], - [AC_MSG_NOTICE([Compilation with cfortran.h is not working!])], - [x"error compiling Fortran subroutine"], - [AC_MSG_NOTICE([compilation of simple Fortran source failed!])], - [AC_MSG_NOTICE([Unexpected error when linking C and Fortran via cfortran.h!])]) - AC_MSG_NOTICE([Disabling cfortran.h bindings generation]) - acx_cv_cfortran_works=no])]) -]) -AM_CONDITIONAL([USE_FC],[test -n "$FC" -a X"$FC" != Xno -a x"$acx_cv_cfortran_works" = xyes])dnl -dnl -AC_SUBST([CPPFLAGS])dnl -dnl + m4_foreach([build_flag_var],[[BUILD_CFLAGS],[BUILD_FCFLAGS],[BUILD_LDFLAGS],[BUILD_LIBS],[BUILD_MPI_C_LIB],[BUILD_MPI_FC_LIB],[BUILD_C_INCLUDE],[BUILD_FC_INCLUDE]], [AC_ARG_VAR(build_flag_var, [append to ]m4_bpatsubst(build_flag_var, [BUILD_], [])[ during build but not in configure phase])dnl @@ -549,63 +550,69 @@ m4_foreach([build_tool_var],[[BUILD_CC],[BUILD_CXX],[BUILD_FC],[BUILD_F77]], [replace ]m4_bpatsubst(build_tool_var, [BUILD_], [])[ with expansion of $]build_tool_var[ during build but not in configure phase])dnl AC_CONFIG_COMMANDS_PRE(m4_bpatsubst(build_tool_var, [BUILD_], [])[="$]{build_tool_var:-$[]m4_bpatsubst(build_tool_var, [BUILD_], [])}["])dnl AM_SUBST_NOTMAKE(build_tool_var)])dnl -dnl -dnl -dnl -# Checks for compiler -COMPILER="$CC $CFLAGS" -AC_DEFINE_UNQUOTED(COMPILER, ["$COMPILER"], [Compiler]) - -AC_CONFIG_FILES([tests/test_cksum_grib \ - tests/test_cksum_grib2 \ - tests/test_cksum_nc \ - tests/test_cksum_nc2 \ - tests/test_cksum_nc4 \ - tests/test_cksum_extra \ - tests/test_cksum_service \ - tests/test_cksum_ieg \ - tests/test_chunk_cksum \ - tests/test_f2003 \ - tests/pio_write_run \ - tests/pio_write_deco2d_run \ - tests/pio_cksum_mpinonb \ - tests/pio_cksum_mpi_fw_ordered \ - tests/pio_cksum_mpi_fw_at_all \ - tests/pio_cksum_mpi_fw_at_reblock \ - tests/pio_cksum_fpguard \ - tests/pio_cksum_asynch \ - tests/pio_cksum_writer \ - tests/pio_cksum_cdf \ - tests/test_byteswap_run \ - tests/test_resource_copy_run \ - tests/pio_cksum_grb2 \ - tests/test_resource_copy_mpi_run \ - tests/test_cdf_transformation \ - tests/test_cdf_const \ - tests/test_table_run \ - tables/gen_tableheaderfile \ - util/serialrun],[chmod a+x "$ac_file"]) - -AC_CONFIG_FILES([Makefile src/Makefile interfaces/Makefile app/Makefile \ - tests/Makefile examples/Makefile cdi.settings \ - examples/pio/Makefile src/cmake/cdi/cdi-config.cmake src/cmake/cdi/cdi-config-version.cmake \ - src/pkgconfig/cdi.pc src/pkgconfig/cdipio.pc src/pkgconfig/cdi_f2003.pc]) + +dnl Additional output variables for cdi.settings: +AC_SUBST([ENABLE_MPI], [$enable_mpi]) +AM_SUBST_NOTMAKE([ENABLE_MPI)])dnl +AC_SUBST([HAVE_PARALLEL_NC4], [$have_parallel_nc4]) +AM_SUBST_NOTMAKE([HAVE_PARALLEL_NC4)])dnl + +AC_CONFIG_HEADERS([src/config.h]) +AC_CONFIG_FILES([ + Makefile + app/Makefile + cdi.settings + examples/Makefile + examples/pio/Makefile + src/Makefile + src/cmake/cdi/cdi-config-version.cmake + src/cmake/cdi/cdi-config.cmake + src/pkgconfig/cdi.pc + src/pkgconfig/cdi_f2003.pc + src/pkgconfig/cdipio.pc + tests/Makefile +]) +AC_CONFIG_FILES([ + tables/gen_tableheaderfile + tests/pio_cksum_asynch + tests/pio_cksum_cdf + tests/pio_cksum_fpguard + tests/pio_cksum_grb2 + tests/pio_cksum_mpi_fw_at_all + tests/pio_cksum_mpi_fw_at_reblock + tests/pio_cksum_mpi_fw_ordered + tests/pio_cksum_mpinonb + tests/pio_cksum_writer + tests/pio_write_deco2d_run + tests/pio_write_run + tests/test_byteswap_run + tests/test_cdf_const + tests/test_cdf_transformation + tests/test_chunk_cksum + tests/test_cksum_extra + tests/test_cksum_grib + tests/test_cksum_grib2 + tests/test_cksum_ieg + tests/test_cksum_nc + tests/test_cksum_nc2 + tests/test_cksum_nc4 + tests/test_cksum_service + tests/test_f2003 + tests/test_resource_copy_mpi_run + tests/test_resource_copy_run + tests/test_table_run + util/serialrun +], +[chmod a+x "$ac_file"]) + AC_OUTPUT -# ---------------------------------------------------------------------- -# Show configuration AC_MSG_NOTICE([CDI is configured with the following options:]) -./config.status cdi.settings cat cdi.settings -AS_IF([test "$ac_cv_prog_cc_c99" = "no"], - [AC_MSG_NOTICE([ - - Warning: The C compiler does not accept ANSI C99 source code! -])]) AC_MSG_NOTICE([ Configuration completed. - You can now say 'make' to compile the CDI package and 'make install' to install it afterwards. + You can now run 'make' to compile the CDI package and 'make install' to install it afterwards. ]) diff --git a/examples/Makefile.am b/examples/Makefile.am index 17695a736..f32cc8b87 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -14,12 +14,12 @@ if ENABLE_NETCDF check_PROGRAMS += cdi_write_const endif -if CREATE_ISOC +if ENABLE_ISOC_INTERFACE check_PROGRAMS += cdi_read_f2003 cdi_write_f2003 -endif +endif ENABLE_ISOC_INTERFACE AM_CPPFLAGS = -I$(top_srcdir)/src -AM_FCFLAGS = $(FPP_INCOPT)$(top_srcdir)/src $(FC_MOD_FLAG)../src +AM_FCFLAGS = $(FC_OPTINC)$(top_srcdir)/src $(FC_MOD_FLAG)../src AM_LDFLAGS = if ENABLE_ALL_STATIC @@ -52,7 +52,7 @@ cdi_read_f2003_LDADD = $(top_builddir)/src/libcdi_f2003.la $(top_builddir)/src/l cdi_write_f2003_SOURCES = cdi_write_f2003.f90 cdi_write_f2003_LDADD = $(top_builddir)/src/libcdi_f2003.la $(top_builddir)/src/libcdi.la -if FORTRAN_MOD_UC +if FC_MOD_UPPERCASE cdi_read_f2003.$(OBJEXT) cdi_write_f2003.$(OBJEXT): $(top_builddir)/src/MO_CDI.$(FCMODEXT) else cdi_read_f2003.$(OBJEXT) cdi_write_f2003.$(OBJEXT): $(top_builddir)/src/mo_cdi.$(FCMODEXT) diff --git a/examples/pio/Makefile.am b/examples/pio/Makefile.am index 4f8caaf3f..1c8671d4a 100644 --- a/examples/pio/Makefile.am +++ b/examples/pio/Makefile.am @@ -2,34 +2,37 @@ check_PROGRAMS = \ collectData \ collectDataNStreams -if USE_MPI +if ENABLE_MPI check_PROGRAMS += compareResourcesArray -endif +endif ENABLE_MPI -if USE_FC +if ENABLE_CF_INTERFACE check_PROGRAMS += collectData2003 -endif +endif ENABLE_CF_INTERFACE AM_CPPFLAGS = -I$(top_srcdir)/src $(YAXT_C_INCLUDE) +if ENABLE_MPI +AM_CPPFLAGS += -DUSE_MPI +endif ENABLE_MPI AM_CFLAGS = $(MPI_C_INCLUDE) -AM_FCFLAGS = $(FPP_INCOPT)$(top_srcdir)/src $(MPI_FC_INCLUDE) -if USE_MPI -AM_FCFLAGS += $(FPP_DEFOPT)USE_MPI -endif +AM_FCFLAGS = $(FC_OPTINC)$(top_srcdir)/src $(MPI_FC_INCLUDE) +if ENABLE_MPI +AM_FCFLAGS += $(FC_DEFINE)USE_MPI +endif ENABLE_MPI AM_LDFLAGS = if ENABLE_ALL_STATIC AM_LDFLAGS += -all-static endif -if USE_MPI +if ENABLE_MPI LDADD = $(top_builddir)/src/libcdipio.la $(top_builddir)/src/libcdi.la $(YAXT_LIBS) $(MPI_C_LIB) collectData2003_LDADD = $(top_builddir)/src/libcdipio.la $(top_builddir)/src/libcdi.la $(YAXT_FC_LIB) $(MPI_FC_LIB) -else +else !ENABLE_MPI LDADD = $(top_builddir)/src/libcdi.la collectData2003_LDADD = $(top_builddir)/src/libcdi.la -endif +endif !ENABLE_MPI collectData_SOURCES = collectData.c diff --git a/src/Makefile.am b/src/Makefile.am index dbc327972..85f94b162 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,11 +10,11 @@ EXTRA_DIST = cdilib.c nodist_pkgconfig_DATA = nodist_cmake_DATA = -if FORTRAN_MOD_UC +if FC_MOD_UPPERCASE mo_cdi_mod = MO_CDI.$(FCMODEXT) -else +else !FC_MOD_UPPERCASE mo_cdi_mod = mo_cdi.$(FCMODEXT) -endif +endif !FC_MOD_UPPERCASE if ENABLE_CDI_LIB include_HEADERS += \ @@ -27,36 +27,34 @@ nodist_pkgconfig_DATA += pkgconfig/cdi.pc nodist_cmake_DATA += \ cmake/cdi/cdi-config-version.cmake \ cmake/cdi/cdi-config.cmake -# add cdi.inc only if cfortran interface is required -if USE_FC +if ENABLE_CF_INTERFACE include_HEADERS += cdi.inc -endif -if CREATE_ISOC +endif ENABLE_CF_INTERFACE +if ENABLE_ISOC_INTERFACE nodist_include_HEADERS += $(mo_cdi_mod) lib_LTLIBRARIES += libcdi_f2003.la nodist_pkgconfig_DATA += pkgconfig/cdi_f2003.pc -endif -if USE_MPI +endif ENABLE_ISOC_INTERFACE +if ENABLE_MPI include_HEADERS += cdipio.h lib_LTLIBRARIES += libcdipio.la nodist_pkgconfig_DATA += pkgconfig/cdipio.pc -# add cdipio.inc only if cfortran interface is required -if USE_FC +if ENABLE_CF_INTERFACE include_HEADERS += cdipio.inc -endif -endif -else +endif ENABLE_CF_INTERFACE +endif ENABLE_MPI +else !ENABLE_CDI_LIB noinst_LTLIBRARIES += libcdi.la -if CREATE_ISOC +if ENABLE_ISOC_INTERFACE noinst_LTLIBRARIES += libcdi_f2003.la -endif -if USE_MPI +endif ENABLE_ISOC_INTERFACE +if ENABLE_MPI noinst_LTLIBRARIES += libcdipio.la -endif -endif +endif ENABLE_MPI +endif !ENABLE_CDI_LIB AM_CPPFLAGS = -if USE_MPI +if ENABLE_MPI # TODO: this needs a refactoring but for now we set this macro here and not in # config.h because the macro is used in several files that do not include the # header file directly. @@ -208,21 +206,17 @@ libcdi_la_SOURCES = \ zaxis.c \ zaxis.h -# cfortran.h is an optional part of libcdi -if USE_FC +if ENABLE_CF_INTERFACE libcdi_la_SOURCES += \ cdiFortran.c \ cfortran.h -endif +endif ENABLE_CF_INTERFACE -# these only contain code if grib_api is available if HAVE_LIBGRIB_API libcdi_la_SOURCES += \ gribapi_utilities.c \ stream_gribapi.c -endif - -libcdi_la_LIBADD = $(UUID_C_LIB) +endif HAVE_LIBGRIB_API libcdi_f2003_la_SOURCES = mo_cdi.f90 libcdi_f2003_la_LIBADD = libcdi.la @@ -270,15 +264,15 @@ libcdipio_la_SOURCES = \ resource_unpack.c \ resource_unpack.h -if USE_FC +if ENABLE_CF_INTERFACE libcdipio_la_SOURCES += \ cdipioFortran.c \ cfortran.h -endif +endif ENABLE_CF_INTERFACE if HAVE_PARALLEL_NC4 libcdipio_la_SOURCES += pio_cdf_int.c -endif +endif HAVE_PARALLEL_NC4 libcdipio_la_LIBADD = libcdi.la $(LIBRT) $(PPM_CORE_C_LIB) $(YAXT_C_LIB) $(MPI_C_LIB) @@ -331,7 +325,7 @@ cdilib.c: CLEANFILES = cdilib.c MOSTLYCLEANFILES = make_fint -if CREATE_ISOC +if ENABLE_ISOC_INTERFACE MOSTLYCLEANFILES += $(mo_cdi_mod) endif diff --git a/tests/Makefile.am b/tests/Makefile.am index 1c2b40caa..56ac4b099 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -29,7 +29,7 @@ TESTS = \ test_resource_copy_run \ test_table_run -if USE_MPI +if ENABLE_MPI TESTS += test_resource_copy_mpi_run endif @@ -53,11 +53,14 @@ check_PROGRAMS += \ test_cdf_write endif -if USE_MPI +if ENABLE_MPI check_PROGRAMS += test_resource_copy_mpi -endif +endif ENABLE_MPI AM_CPPFLAGS = -I$(top_srcdir)/src +if ENABLE_MPI +AM_CPPFLAGS += -DUSE_MPI +endif ENABLE_MPI AM_CFLAGS = $(PPM_CORE_C_INCLUDE) $(YAXT_C_INCLUDE) $(MPI_C_INCLUDE) AM_LDFLAGS = @@ -98,7 +101,7 @@ pio_write_SOURCES = \ simple_model.c \ simple_model_helper.c \ simple_model_helper.h -if USE_MPI +if ENABLE_MPI pio_write_LDADD = ../src/libcdipio.la ../src/libcdi.la $(PPM_CORE_LIBS) $(YAXT_LIBS) $(MPI_C_LIB) else pio_write_LDADD = $(LDADD) @@ -112,7 +115,7 @@ pio_write_deco2d_SOURCES = \ pio_write_setup_grid.h \ simple_model_helper.c \ simple_model_helper.h -if USE_MPI +if ENABLE_MPI pio_write_deco2d_LDADD = ../src/libcdipio.la ../src/libcdi.la $(PPM_CORE_LIBS) $(YAXT_LIBS) $(MPI_C_LIB) else pio_write_deco2d_LDADD = $(LDADD) @@ -137,7 +140,7 @@ test_cdf_write_SOURCES = \ test_cdf_write.c test_resource_copy_mpi_SOURCES = test_resource_copy_mpi.c -if USE_MPI +if ENABLE_MPI test_resource_copy_mpi_LDADD = ../src/libcdipio.la ../src/libcdi.la $(UUID_C_LIB) else test_resource_copy_mpi_LDADD = $(LDADD) diff --git a/tests/pio_cksum_asynch.in b/tests/pio_cksum_asynch.in index a9b19b2c9..d958a3b74 100644 --- a/tests/pio_cksum_asynch.in +++ b/tests/pio_cksum_asynch.in @@ -1,5 +1,5 @@ #!@SHELL@ -@USE_MPI_FALSE@exit 77 +@ENABLE_MPI_FALSE@exit 77 pio_write_args="-p PIO_ASYNCH -w 3" mpi_task_num=7 diff --git a/tests/pio_cksum_cdf.in b/tests/pio_cksum_cdf.in index 50a1449d9..e46ddf0a7 100644 --- a/tests/pio_cksum_cdf.in +++ b/tests/pio_cksum_cdf.in @@ -1,5 +1,5 @@ #!@SHELL@ -@USE_MPI_FALSE@exit 77 +@ENABLE_MPI_FALSE@exit 77 LOG=pio_cksum_cdf.log diff --git a/tests/pio_cksum_fpguard.in b/tests/pio_cksum_fpguard.in index aa50e3322..fbb654028 100644 --- a/tests/pio_cksum_fpguard.in +++ b/tests/pio_cksum_fpguard.in @@ -1,5 +1,5 @@ #!@SHELL@ -@USE_MPI_FALSE@exit 77 +@ENABLE_MPI_FALSE@exit 77 pio_write_args="-p PIO_FPGUARD -w 3" mpi_task_num=6 diff --git a/tests/pio_cksum_grb2.in b/tests/pio_cksum_grb2.in index c436e1dea..36702c564 100644 --- a/tests/pio_cksum_grb2.in +++ b/tests/pio_cksum_grb2.in @@ -1,5 +1,5 @@ #!@SHELL@ -@USE_MPI_FALSE@exit 77 +@ENABLE_MPI_FALSE@exit 77 pio_write_args="-w 3" mpi_task_num=8 diff --git a/tests/pio_cksum_mpi_fw_at_all.in b/tests/pio_cksum_mpi_fw_at_all.in index b6560fcb5..ac1d199da 100644 --- a/tests/pio_cksum_mpi_fw_at_all.in +++ b/tests/pio_cksum_mpi_fw_at_all.in @@ -1,5 +1,5 @@ #!@SHELL@ -@USE_MPI_FALSE@exit 77 +@ENABLE_MPI_FALSE@exit 77 pio_write_args="-p PIO_MPI_FW_AT_ALL -w 2" mpi_task_num=5 diff --git a/tests/pio_cksum_mpi_fw_at_reblock.in b/tests/pio_cksum_mpi_fw_at_reblock.in index 8b8cd1b24..57c67b168 100644 --- a/tests/pio_cksum_mpi_fw_at_reblock.in +++ b/tests/pio_cksum_mpi_fw_at_reblock.in @@ -1,5 +1,5 @@ #!@SHELL@ -@USE_MPI_FALSE@exit 77 +@ENABLE_MPI_FALSE@exit 77 pio_write_args="-p PIO_MPI_FW_AT_REBLOCK -w 2" mpi_task_num=5 diff --git a/tests/pio_cksum_mpi_fw_ordered.in b/tests/pio_cksum_mpi_fw_ordered.in index 55e4a825b..40c3deebf 100644 --- a/tests/pio_cksum_mpi_fw_ordered.in +++ b/tests/pio_cksum_mpi_fw_ordered.in @@ -1,5 +1,5 @@ #!@SHELL@ -@USE_MPI_FALSE@exit 77 +@ENABLE_MPI_FALSE@exit 77 pio_write_args="-p PIO_MPI_FW_ORDERED -w 2" mpi_task_num=5 diff --git a/tests/pio_cksum_mpinonb.in b/tests/pio_cksum_mpinonb.in index 609defe15..4cbc92d56 100644 --- a/tests/pio_cksum_mpinonb.in +++ b/tests/pio_cksum_mpinonb.in @@ -1,5 +1,5 @@ #!@SHELL@ -@USE_MPI_FALSE@exit 77 +@ENABLE_MPI_FALSE@exit 77 pio_write_args="-p PIO_MPI -w 2" mpi_task_num=4 diff --git a/tests/pio_cksum_writer.in b/tests/pio_cksum_writer.in index e5a39f73e..733ddd49b 100644 --- a/tests/pio_cksum_writer.in +++ b/tests/pio_cksum_writer.in @@ -1,5 +1,5 @@ #!@SHELL@ -@USE_MPI_FALSE@exit 77 +@ENABLE_MPI_FALSE@exit 77 test 'x@ENABLE_GRIB@' = xyes || exit 77 pio_write_args="-p PIO_WRITER -w 4" diff --git a/tests/pio_write_run.in b/tests/pio_write_run.in index c9a0e7256..5d60a27ed 100644 --- a/tests/pio_write_run.in +++ b/tests/pio_write_run.in @@ -25,8 +25,8 @@ case ${suffix} in ;; esac -@USE_MPI_TRUE@variations="-qno-batch-rma -qcache-redists -qcreate-curvilinear-grid -qpreset-decomposition=true" -@USE_MPI_FALSE@variations="-qcreate-curvilinear-grid" +@ENABLE_MPI_TRUE@variations='-qno-batch-rma -qcache-redists -qcreate-curvilinear-grid -qpreset-decomposition=true' +@ENABLE_MPI_FALSE@variations='-qcreate-curvilinear-grid' test_variation() { @@ -50,7 +50,9 @@ for variation in "" $variations ; do test_variation "$variation" done -@USE_MPI_TRUE@@USE_PPM_CORE_TRUE@test_variation "-qcreate-curvilinear-grid -quse-dist-grid" +if test 'x@HAVE_PPM_DIST_ARRAY@' = xyes; then + test_variation "-qcreate-curvilinear-grid -quse-dist-grid" +fi exec 2>&6 1>&5 5>&- 6>&- # diff --git a/tests/test_f2003.in b/tests/test_f2003.in index 1e7efd99c..956e4c262 100644 --- a/tests/test_f2003.in +++ b/tests/test_f2003.in @@ -1,5 +1,5 @@ #!@SHELL@ -@CREATE_ISOC_FALSE@exit 77 +@ENABLE_ISOC_INTERFACE_FALSE@exit 77 test 'x@ENABLE_NETCDF@' = xyes || exit 77 cdi_read_f2003_stdout="$0.cdi_read_f2003.stdout" -- GitLab