diff --git a/configure.ac b/configure.ac index c6b883f5761c7d7663173d11b175b6f7176acc67..338486f8024dfdf01903700c7611269199b6f5bc 100644 --- a/configure.ac +++ b/configure.ac @@ -53,28 +53,7 @@ AC_PROG_INSTALL AC_OPENMP # Set up libtool. AC_MSG_NOTICE([setting up libtool]) -dnl before switching on libtool, identify compilers that prevent us from -dnl certain build configurations -ACX_LT_PROBLEMS -LT_INIT([pic-only]) -dnl Clean up after Libtool checks: -rm -f a.out -dnl _KPSE_USE_LIBTOOL ensures libtool is also used for configure-time tests, -dnl which deduces dependent libraries automatically -_KPSE_USE_LIBTOOL -_KPSE_CHECK_LIBTOOL -AS_IF([test -n "$FC" && test "X$FC" != Xno], - [AC_LANG_PUSH([Fortran]) - _KPSE_CHECK_LIBTOOL - AC_LANG_POP([Fortran])]) -AS_IF([test -n "$F77" && test "X$F77" != Xno], - [AC_LANG_PUSH([Fortran 77]) - _KPSE_CHECK_LIBTOOL - AC_LANG_POP([Fortran 77])]) -AS_IF([test -n "$CXX" && test "X$CXX" != Xno], - [AC_LANG_PUSH([C++]) - _KPSE_CHECK_LIBTOOL - AC_LANG_POP([C++])]) +ACX_USE_LIBTOOL_CONFIGURATION([pic-only]) # ----------------------------------------------------------------------- # Check endianess of system @@ -190,46 +169,13 @@ 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 - AC_PATH_PROGS([MPI_LAUNCH],[mpirun mpiexec],[true]) saved_CFLAGS=$CFLAGS + saved_FCFLAGS=$FCFLAGS saved_LIBS=$LIBS CFLAGS="$CFLAGS $MPI_C_INCLUDE" + FCFLAGS="$FCFLAGS $MPI_FC_INCLUDE" LIBS="$LIBS $MPI_C_LIB" - AS_IF([test x"$cross_compiling" = xno], - [AC_MSG_CHECKING([if $MPI_LAUNCH works]) - AC_LINK_IFELSE([AC_LANG_SOURCE([ -@%:@include <stdio.h> -@%:@include <stdlib.h> - -@%:@include <mpi.h> - -@%:@define xmpi(ret) \\ - do { \\ - if (ret != MPI_SUCCESS) \\ - exit(EXIT_FAILURE); \\ - } while (0) - -int -main(int argc, char **argv) -{ - xmpi(MPI_Init(&argc, &argv)); - char *numarg = argv@<:@1@:>@; - int cmdnum = atoi(numarg); - int procnum = 1; - xmpi(MPI_Allreduce(MPI_IN_PLACE, &procnum, 1, MPI_INT, MPI_SUM, - MPI_COMM_WORLD)); - xmpi(MPI_Finalize()); - return (procnum == cmdnum)?EXIT_SUCCESS:EXIT_FAILURE; -} -])], - [AS_IF([$MPI_LAUNCH -n 4 ./conftest$EXEEXT 4], - [AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no]) - AC_MSG_FAILURE([mpirun doesn't work])])], - [AC_MSG_FAILURE([Cannot compile simple MPI program])]) - ]) - AS_IF([test "x$MPI_LAUNCH" = xtrue], - [AC_MSG_WARN([MPI launch command unavailable])]) + 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])], @@ -239,6 +185,7 @@ main(int argc, char **argv) @%:@include <mpi.h>])],[AC_INCLUDES_DEFAULT @%:@include <mpi.h>]) CFLAGS=$saved_CFLAGS + FCFLAGS=$saved_FCFLAGS LIBS=$saved_LIBS AC_ARG_VAR([YAXT_FC_LIB],[Flags needed to link YAXT for the Fortran API]) @@ -393,10 +340,10 @@ 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)" - save_CPPFLAGS=$CPPFLAGS + saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS $RUBY_INCLUDES" AC_CHECK_HEADER([ruby.h],,[enable_ruby=no], [AC_INCLUDES_DEFAULT]) - CPPFLAGS=$save_CPPFLAGS + 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'!])])], @@ -421,11 +368,11 @@ AC_ARG_ENABLE(python, "-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 - save_CPPFLAGS=$CPPFLAGS + saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" AC_CHECK_HEADER([Python.h],[enable_python=yes break],,[AC_INCLUDES_DEFAULT]) - CPPFLAGS=$save_CPPFLAGS + CPPFLAGS=$saved_CPPFLAGS done AS_IF([test "x$enable_python" != "xno"], [AS_IF([test "x$SWIG" = "x"], diff --git a/m4/acx_cfortran_flags.m4 b/m4/acx_cfortran_flags.m4 index 00acc66c8cfc3952af4757093049cd987eb92615..44854e587e043c411ff145dab2e255d1cdc49554 100644 --- a/m4/acx_cfortran_flags.m4 +++ b/m4/acx_cfortran_flags.m4 @@ -44,7 +44,7 @@ AC_DEFUN([ACX_XLF_QEXTNAME_ADD_APPENDUS], [AS_CASE([$host], [*-ibm-aix*|powerpc64-*-linux-*|powerpc-*-linux-*], [AC_MSG_CHECKING([if -Dappendus needs to be added to CPPFLAGS for cfortran.h]) - AS_IF([$CC -qversion 2>&1 | grep '^IBM XL C' >/dev/null], + AS_IF([$CC -qversion 2>&1 | sed 5q | grep '^IBM XL C' >/dev/null], [acx_temp_qextname_f77flags=`echo "$FFLAGS" | sed -n '/-qextname/{ s/^\(.* \)*-qextname\( .*\)*$/-qextname/;p;}'` acx_temp_qextname_fcflags=`echo "$FCFLAGS" | sed -n '/-qextname/{ s/^\(.* \)*-qextname\( .*\)*$/-qextname/;p;}'` dnl pretend the same option as for FC was used if F77 isn't used at all @@ -72,11 +72,11 @@ dnl automate flag elicitation for cfortran.h AC_DEFUN([_ACX_FIND_CFORTRAN_DEF], [AC_REQUIRE([AC_CANONICAL_HOST]) _AC_FORTRAN_ASSERT - AC_LANG_CASE([Fortran],[acx_FC=$FC], - [Fortran 77],[acx_FC=$F77]) + AS_VAR_PUSHDEF([acx_FC],[AC_LANG_CASE([Fortran],[FC],[Fortran 77],[F77])])dnl + AS_VAR_PUSHDEF([acx_FCFLAGS],[AC_LANG_CASE([Fortran],[FCFLAGS],[Fortran 77],[FFLAGS])])dnl AS_CASE([$host], [x86_64-*-linux-*|i*86-*-linux-*|*-apple-darwin*|ia64-*-linux-*|x86_64-*-freebsd*|i*86-*-freebsd*], - [acx_temp=`$acx_FC -V 2>&1` + [acx_temp=`$acx_FC -V 2>&1 | sed 5q` AS_IF([echo "$acx_temp" | grep '^Copyright.*\(The Portland Group\|NVIDIA CORPORATION\)' >/dev/null], [AS_VAR_SET([acx_cf_flag],[-DgFortran])], [echo "$acx_temp" | grep '^NAG Fortran Compiler Release' >/dev/null], @@ -85,24 +85,21 @@ AC_DEFUN([_ACX_FIND_CFORTRAN_DEF], [AS_VAR_SET([acx_cf_flag],[-DgFortran])], [echo "$acx_temp" | grep '^Cray Fortran' >/dev/null], [AS_VAR_SET([acx_cf_flag],[-DgFortran])], - [acx_temp=`$acx_FC --version 2>&1` \ + [acx_temp=`$acx_FC --version 2>&1 | sed 5q` \ && echo $acx_temp | grep '^GNU Fortran' >/dev/null], [AS_IF([echo $acx_temp | grep g77 >/dev/null], [AS_VAR_SET([acx_cf_flag],[-Dg77Fortran])], [dnl assume gfortran dnl check if compiling with f2c bindings or with default bindings - AS_IF([echo "]AC_LANG_CASE([Fortran],[$FCFLAGS], - [Fortran 77],[$FFLAGS])[" | grep '^\(.* \)*-ff2c\( .*\)*$' >/dev/null], + AS_IF([echo "$acx_FCFLAGS" | grep '^\(.* \)*-ff2c\( .*\)*$' >/dev/null], [AS_VAR_SET([acx_cf_flag],[-Df2cFortran])], [AS_VAR_SET([acx_cf_flag],[-DgFortran])])])], [echo $acx_temp | grep '^G95' >/dev/null], [AS_VAR_SET([acx_cf_flag],[-DNAGf90Fortran])], - [acx_temp=`$acx_FC -v 2>&1` \ - && echo $acx_temp | grep '^f2c'], + [$acx_FC -v 2>&1 | sed 5q | grep '^f2c'], [AS_VAR_SET([acx_cf_flag],[-Df2cFortran])])], [powerpc64-*-linux-*|powerpc-*-linux-*], - [AS_IF([acx_temp=`$acx_FC -qversion 2>&1` \ - && echo $acx_temp | grep '^IBM XL Fortran' >/dev/null], + [AS_IF([$acx_FC -qversion 2>&1 | sed 5q | grep '^IBM XL Fortran' >/dev/null], [AS_VAR_SET([acx_cf_flag],[-DIBMR2Fortran])])], [*-ibm-aix*], [dnl xlc set _IBMR2 so nothing needs to be done @@ -115,7 +112,8 @@ dnl check if compiling with f2c bindings or with default bindings [sx*-*-*|es*-*-*], [dnl fixme: make sure user is actually using sxf90 dnl but currently there is no alternative I know of - AS_VAR_SET([acx_cf_flag],[-DSXFortran])])]) + AS_VAR_SET([acx_cf_flag],[-DSXFortran])]) + AS_VAR_POPDEF([acx_FC])]) AC_DEFUN([ACX_FIND_CFORTRAN_DEF], [AC_CACHE_CHECK([C preprocessor flags for Fortran calling convention cfortran.h], @@ -165,7 +163,8 @@ Have you configured compatible compilers?])])]) ]) dnl now that flag is established, add (probed) defines to CPPFLAGS AS_IF([echo "$acx_cv_cf_flag" | grep ' (probed)$' >/dev/null], - [CPPFLAGS="${CPPFLAGS+$CPPFLAGS }`echo "$acx_cv_cf_flag" | sed 's/ (probed)$//'`"]) + [acx_temp=`echo "$acx_cv_cf_flag" | sed 's/ (probed)$//'` + CPPFLAGS="${CPPFLAGS+$CPPFLAGS }$acx_temp"]) ]) dnl dnl Local Variables: diff --git a/m4/acx_fortran_check_include.m4 b/m4/acx_fortran_check_include.m4 index c902ed0667822b162e17e8a28d63fd5d931d08ed..df5a5b0bf06b16a2d607320a6698153ea417eae3 100644 --- a/m4/acx_fortran_check_include.m4 +++ b/m4/acx_fortran_check_include.m4 @@ -6,7 +6,7 @@ dnl Version: 1.0 dnl Keywords: dnl Author: Thomas Jahns <jahns@dkrz.de> dnl Maintainer: Thomas Jahns <jahns@dkrz.de> -dnl URL: https://www.dkrz.de/redmine/projects/show/scales-ppm +dnl URL: https://www.dkrz.de/redmine/projects/scales-ppm dnl dnl Redistribution and use in source and binary forms, with or without dnl modification, are permitted provided that the following conditions are @@ -61,32 +61,32 @@ AC_DEFUN([ACX_FORTRAN_CHECK_MOD_PATHS_IFELSE], AC_REQUIRE([ACX_SL_FC_CHECK_MOD_PATH_FLAG]) AS_VAR_PUSHDEF([acx_Mod], [acx_cv_fortran_mod_$1])dnl AC_MSG_CHECKING([for $1 m4_default([$7],[extra]) module path]) - AC_CACHE_VAL([acx_Mod],dnl - [ac_mod_search_FCFLAGS_SAVE="$FCFLAGS" - for ac_moddir in '' $2; do - AS_IF([test -z "$ac_moddir"], + AC_CACHE_VAL([acx_Mod], + [ac_mod_search_FCFLAGS_SAVE=$FCFLAGS + AS_FOR([Ac_moddir],[ac_moddir],['' $2], + [AS_IF([test -z "Ac_moddir"], [ac_res="none required" FCFLAGS="m4_ifval([$6],[$6 ])$ac_mod_search_FCFLAGS_SAVE"], - [ac_res="$FC_MOD_FLAG$ac_moddir" + [ac_res="$FC_MOD_FLAG]Ac_moddir[" FCFLAGS="m4_ifval([$6],[$6 ])$ac_res $ac_mod_search_FCFLAGS_SAVE"]) - _ACX_FORTRAN_CHECK_MOD_IFELSE([$1],dnl - [AS_IF([test -z "$ac_moddir"],dnl - [AS_VAR_SET([acx_Mod],["$6"])],dnl - [AS_VAR_SET([acx_Mod],["]m4_ifval([$6],[$6 ])[$FC_MOD_FLAG$ac_moddir"])])],,[$5]) - AS_VAR_SET_IF([acx_Mod], [break])dnl - done - FCFLAGS="$ac_mod_search_FCFLAGS_SAVE"]) - AS_VAR_SET_IF([acx_Mod],dnl - [AS_IF([test x"AS_VAR_GET([acx_Mod])" = x],dnl - [AC_MSG_RESULT([(none required)])],dnl - [AC_MSG_RESULT([AS_VAR_GET([acx_Mod])])])], - [AC_MSG_RESULT([not found])]) - AS_VAR_SET_IF([acx_Mod], [$3], [$4])[]dnl + _ACX_FORTRAN_CHECK_MOD_IFELSE([$1], + [AS_IF([test -z "Ac_moddir"], + [AS_VAR_SET([acx_Mod],["$6"])], + [AS_VAR_SET([acx_Mod],["]m4_ifval([$6],[$6 ])[$FC_MOD_FLAG]Ac_moddir["])]) + break],,[$5])]) + FCFLAGS=$ac_mod_search_FCFLAGS_SAVE]) + AS_VAR_SET_IF([acx_Mod], + [AS_IF([test x"AS_VAR_GET([acx_Mod])" = x], + [AC_MSG_RESULT([(none required)])], + [AC_MSG_RESULT([AS_VAR_GET([acx_Mod])])])m4_ifval([$3],[ + $3])], + [AC_MSG_RESULT([not found])m4_ifval([$4],[ + $4])]) AS_VAR_POPDEF([acx_Mod])dnl ])# ACX_FORTRAN_CHECK_MOD_PATHS_IFELSE dnl dnl Local Variables: dnl mode: autoconf -dnl license-project-url: "https://www.dkrz.de/redmine/projects/show/scales-ppm" +dnl license-project-url: "https://www.dkrz.de/redmine/projects/scales-ppm" dnl license-default: "bsd" dnl End: diff --git a/m4/acx_fortran_package.m4 b/m4/acx_fortran_package.m4 index ef717370a818d236645fdffe658de24fcbc707a5..4e60389acaceeedc1e56852b244d9ff809778ff0 100644 --- a/m4/acx_fortran_package.m4 +++ b/m4/acx_fortran_package.m4 @@ -102,10 +102,11 @@ AC_DEFUN([ACX_F90_PACKAGE], AC_REQUIRE([_ASX_TR_ARG_PREPARE])dnl AC_SUBST(acx_pkg_root)dnl AS_VAR_SET([acx_pkg_bindings],[yes]) + AC_SUBST(acx_pkg_root)dnl AC_ARG_WITH(ASX_TR_ARG([$1-root]), [AS_HELP_STRING([--with-]ASX_TR_ARG([$1])[-root], - [set directory to search for $1 headers and library, @<:@default=$11@:>@])], - [AS_VAR_SET([acx_pkg_root],["$AS_TR_SH([with_]ASX_TR_ARG([$1])[_root])"])], + [set directory to search for $1 headers and library]m4_ifval([$11],[, @<:@default=$11@:>@]))], + [AS_VAR_COPY([acx_pkg_root],[withval])], m4_ifval([$11], [AS_VAR_SET([acx_pkg_root],[$11])])) AS_VAR_SET_IF([acx_pkg_root], [AS_VAR_SET_IF([acx_pkg_lib],, @@ -117,24 +118,24 @@ AC_DEFUN([ACX_F90_PACKAGE], [AS_HELP_STRING([--with-]ASX_TR_ARG([$1-]_AC_LANG_ABBREV)[-mod], [specifically set directory to search for $1 module, ]dnl [@<:@default=$]AS_TR_SH(ASX_TR_ARG([with_$1_root]))[/include@:>@])], - [AS_VAR_SET([acx_pkg_mod],["$FC_MOD_FLAG$AS_TR_SH(ASX_TR_ARG([with_$1_]_AC_LANG_ABBREV[_mod]))"])], - []) + [AS_VAR_SET([acx_pkg_mod],["$FC_MOD_FLAG$withval"])]) AC_ARG_VAR(acx_pkg_mod, [flags to enable 'USE $1' in Fortran program.]) ACX_FORTRAN_CHECK_MOD_PATHS_IFELSE([$2],["]AS_VAR_GET([acx_pkg_root])[/include" "]AS_VAR_GET([acx_pkg_root])[/lib"], [AS_VAR_COPY([acx_pkg_mod],[acx_Mod])], - [AS_VAR_SET([acx_pkg_bindings],[no]) ; $5], + [AS_VAR_SET([acx_pkg_bindings],[no]); $5], [$3],m4_ifval([$4],[$4 ])[AS_VAR_GET([acx_pkg_mod])])]) m4_ifval([$6], [AC_ARG_WITH(ASX_TR_ARG([$1-]_AC_LANG_ABBREV[-lib]), [AS_HELP_STRING([--with-]ASX_TR_ARG([$1-]_AC_LANG_ABBREV)[-lib], [specifically set directory to search for $1 library, ]dnl [@<:@default=$]AS_TR_SH(ASX_TR_ARG([with_$1_root]))[/lib@:>@])], - AS_VAR_SET([acx_pkg_lib], ["-L$AS_TR_SH(ASX_TR_ARG([with_$1_]_AC_LANG_ABBREV[_lib]))"]), - []) + [AS_VAR_SET([acx_pkg_lib], ["-L$withval"])]) + AC_ARG_VAR(acx_pkg_lib, + [specifically set flags to use when linking $1.])dnl + AC_SUBST(acx_pkg_lib)dnl AS_VAR_IF([acx_pkg_bindings], [yes], [AS_VAR_PUSHDEF([ac_Search], [acx_cv_option_search_$6_]_AC_LANG_ABBREV)dnl - AC_SUBST(acx_pkg_lib)dnl acx_save_FCFLAGS=$FCFLAGS FCFLAGS="AS_VAR_GET([acx_pkg_mod]) $FCFLAGS" ACX_OPTION_SEARCH_LIBS_MULTI([$6],[$7],, @@ -142,8 +143,17 @@ AC_DEFUN([ACX_F90_PACKAGE], [ use $2]m4_ifval([$12],[[ $12]]),m4_ifval([$14],[[$14]],[[ call $6$13]])) FCFLAGS=$acx_save_FCFLAGS - AS_VAR_COPY([acx_pkg_lib],[ac_Search]) + AS_LITERAL_IF([ac_Search], + [AS_VAR_SET([acx_pkg_lib], + [`echo "$]ac_Search[" | sed -e 's/^ *//;s/ *$//'`])], + [AS_VAR_COPY([acx_temp],[ac_Search]) + acx_temp=`echo "$acx_temp" | sed -e 's/^ *//;s/ *$//'` + AS_VAR_COPY([acx_pkg_lib],[acx_temp])]) AS_VAR_POPDEF([ac_Search])])]) + AS_VAR_POPDEF([acx_pkg_bindings])dnl + AS_VAR_POPDEF([acx_pkg_mod])dnl + AS_VAR_POPDEF([acx_pkg_lib])dnl + AS_VAR_POPDEF([acx_pkg_root])dnl AC_LANG_POP([Fortran])dnl ]) dnl diff --git a/m4/acx_lang_c_check_include.m4 b/m4/acx_lang_c_check_include.m4 index 84cb400b906aac3e9e9f6dbb3e0a69656de2d193..f3578992906d42f2a483f0184b3bd4305baa74fa 100644 --- a/m4/acx_lang_c_check_include.m4 +++ b/m4/acx_lang_c_check_include.m4 @@ -48,7 +48,7 @@ dnl # [INCLUDES], [INCLUDE-FLAGS], [EXTRA-INCLUDE-FLAG-SETS]) # ------------------------------------------------------------------ # Check the compiler accepts HEADER-FILE. The INCLUDES might be defaulted. -AC_DEFUN([ACX_LANG_CHECK_INCLUDE_PATHS_IFELSE(C)],dnl +AC_DEFUN([ACX_LANG_CHECK_INCLUDE_PATHS_IFELSE(C)], [ACX_GENERIC_CHECK_INCLUDE_PATHS_IFELSE(CPPFLAGS,-I,$@)]) # m4_define([ACX_LANG_INCLUDE_PROGRAM(C)], diff --git a/m4/acx_lang_check_include.m4 b/m4/acx_lang_check_include.m4 index 880cf58c27812fefb9e17cf2a4d88e719a3b8f26..0228bdd2a89a6079a1afea61cbc1de38147935f5 100644 --- a/m4/acx_lang_check_include.m4 +++ b/m4/acx_lang_check_include.m4 @@ -88,29 +88,37 @@ AC_DEFUN([ACX_GENERIC_CHECK_INCLUDE_PATHS_IFELSE], AC_MSG_CHECKING([for $3 extra include path]) AC_CACHE_VAL([acx_Include],dnl [AS_VAR_SET([save_flags],["@S|@$1"]) + AS_LITERAL_IF([save_flags],, + [AS_VAR_COPY([acx_temp],[save_flags +])])dnl while :; do - m4_foreach([ACX_IncSet],[$9], - [AS_FOR([AC_INCDIR],[ac_incdir],['']m4_ifval([$4],[ $4]), - [AS_IF([test -z "$ac_incdir"], - [ac_res="none required" - $1="m4_ifval(ACX_IncSet,ACX_IncSet )$8 AS_VAR_GET([save_flags])"], - [ac_res="$2$ac_incdir" - $1="m4_ifval(ACX_IncSet,ACX_IncSet )$8 $ac_res AS_VAR_GET([save_flags])"]) - _ACX_LANG_CHECK_INCLUDE_IFELSE([$3],dnl - [AS_IF([test -z "$ac_incdir"],dnl - [AS_VAR_SET([acx_Include],["]m4_ifval(ACX_IncSet,ACX_IncSet )$8["])],dnl - [AS_VAR_SET([acx_Include],["]m4_ifval(ACX_IncSet,ACX_IncSet )[$8 $2$ac_incdir"])])],,[$7]) - AS_VAR_SET_IF([acx_Include], [break])]) - AS_VAR_SET_IF([acx_Include], [break]) - ]) - break + m4_foreach([ACX_IncSet],[$9], + [AS_FOR([AC_INCDIR],[ac_incdir],['']m4_ifval([$4],[ $4]), + [AS_IF([test -z "$ac_incdir"], + [ac_res="none required" + $1="m4_ifval(ACX_IncSet,ACX_IncSet )m4_ifval([$8],[$8 ])AS_LITERAL_IF([save_flags],[$save_flags],[$acx_temp])"], + [ac_res="$2$ac_incdir" + $1="m4_ifval(ACX_IncSet,ACX_IncSet )m4_ifval([$8],[$8 ])$ac_res AS_LITERAL_IF([save_flags],[$save_flags],[$acx_temp])"]) + _ACX_LANG_CHECK_INCLUDE_IFELSE([$3],dnl + [AS_IF([test -z "$ac_incdir"],dnl + [AS_VAR_SET([acx_Include],["]m4_ifval(ACX_IncSet,ACX_IncSet )$8["])],dnl + [AS_VAR_SET([acx_Include],["]m4_ifval(ACX_IncSet,ACX_IncSet )[$8 $2$ac_incdir"])])],,[$7]) + AS_VAR_SET_IF([acx_Include], [break])]) + AS_VAR_SET_IF([acx_Include], [break]) + ]) + break done AS_VAR_COPY([$1],[save_flags])]) AS_VAR_SET_IF([acx_Include], - [acx_temp=]AS_VAR_GET([acx_Include])[ + [AS_LITERAL_IF([acx_Include], + [AS_VAR_PUSHDEF([acx_temp],[acx_Include])], + [AS_VAR_COPY([acx_temp],[acx_Include +])])dnl AS_IF([test x"$acx_temp" = x], - [AC_MSG_RESULT([(none required)])], - [AC_MSG_RESULT([$acx_temp])])], + [AC_MSG_RESULT([(none required)])], + [AC_MSG_RESULT([$acx_temp])]) + AS_LITERAL_IF([acx_Include], + [AS_VAR_POPDEF([acx_temp],[acx_Include])])], [AC_MSG_RESULT([not found])]) AS_VAR_SET_IF([acx_Include], [$5], [$6]) AS_VAR_POPDEF([acx_Include])])dnl diff --git a/m4/acx_lang_package.m4 b/m4/acx_lang_package.m4 index 4b46f627b1c3f29f88be538149f8c7fe7146f0a2..e18889f8e116c16de93f2c970cfe3af02d6c4030 100644 --- a/m4/acx_lang_package.m4 +++ b/m4/acx_lang_package.m4 @@ -75,57 +75,62 @@ AC_DEFUN([ACX_GENERIC_PACKAGE], AC_ARG_WITH(ASX_TR_ARG([$1-root]), [AS_HELP_STRING([--with-]ASX_TR_ARG([$1])[-root], [set directory to search for $1 headers and library]m4_ifval([$13],[, @<:@default=$13@:>@]))], - [AS_VAR_SET([acx_pkg_root],"$AS_TR_SH([with_]ASX_TR_ARG([$1])[_root])")], + [AS_VAR_COPY([acx_pkg_root],[withval])], m4_ifval([$13], AS_VAR_SET([acx_pkg_root],[$13]))) AS_VAR_SET_IF([acx_pkg_root], [AS_VAR_SET_IF([acx_pkg_lib],, - [AS_VAR_COPY([acx_temp],acx_pkg_root) - AS_VAR_SET([acx_pkg_lib],["$8$acx_temp/lib"])]) + [AS_LITERAL_IF([acx_pkg_root], + [AS_VAR_SET([acx_pkg_lib],["$8$]acx_pkg_root[/lib"])], + [AS_VAR_COPY([acx_temp],acx_pkg_root) + AS_VAR_SET([acx_pkg_lib],["$8$acx_temp/lib"])])]) AS_VAR_SET_IF([acx_pkg_inc],, - [AS_VAR_COPY([acx_temp],acx_pkg_root) - AS_VAR_SET([acx_pkg_inc],["$3$acx_temp/include"])])]) + [AS_LITERAL_IF([acx_pkg_root], + [AS_VAR_SET([acx_pkg_inc],["$3$]acx_pkg_root[/include"])], + [AS_VAR_COPY([acx_temp],acx_pkg_root) + AS_VAR_SET([acx_pkg_inc],["$3$acx_temp/include"])])])]) m4_ifval([$2], [AC_ARG_WITH(ASX_TR_ARG([$1-include]), [AS_HELP_STRING([--with-[]ASX_TR_ARG([$1])[]-include], [specifically set directory to search for $1 headers, ]dnl [@<:@default=$]AS_TR_SH(ASX_TR_ARG([with_$1_root]))[/include@:>@])], - [AS_VAR_SET([acx_pkg_inc],["]$3[$]AS_TR_SH(ASX_TR_ARG([with_$1_include]))["])]) - AC_ARG_VAR(acx_pkg_inc,dnl -[specifically set flags to use when compiling sources -using $1 includes.]) + [AS_VAR_SET([acx_pkg_inc],["$3$withval"])]) + AC_ARG_VAR(acx_pkg_inc, + [specifically set flags to use when compiling sources using $1 includes.]) ACX_LANG_CHECK_INCLUDE_PATHS_IFELSE([$2],[$14], - [AS_VAR_COPY([acx_temp],[acx_cv_pkg_inc]) - acx_temp=`echo "$acx_temp" | sed -e 's/^ *//;s/ *$//'` - AS_VAR_COPY([acx_pkg_inc],[acx_temp])], - [AS_VAR_SET([acx_pkg_bindings],[no]) - $6], + [AS_LITERAL_IF([acx_cv_pkg_inc], + [AS_VAR_SET([acx_pkg_inc],[`echo "$]acx_cv_pkg_inc[" | sed -e 's/^ *//;s/ *$//'`])], + [AS_VAR_COPY([acx_temp],[acx_cv_pkg_inc]) + acx_temp=`echo "$acx_temp" | sed -e 's/^ *//;s/ *$//'` + AS_VAR_COPY([acx_pkg_inc],[acx_temp])])], + [AS_VAR_SET([acx_pkg_bindings],[no]); $6], [$4],[$]acx_pkg_inc,m4_ifval([$5],[[$5]],[[[]]]))]) m4_ifval([$7], [AC_ARG_WITH(ASX_TR_ARG([$1-lib]), [AS_HELP_STRING([--with-]ASX_TR_ARG([$1])[-lib], [specifically set directory to search for $1 library, ]dnl [@<:@default=$]AS_TR_SH(ASX_TR_ARG([with_$1_root]))[/lib@:>@])], - [AS_VAR_SET([acx_pkg_lib],["$8$AS_TR_SH(ASX_TR_ARG([with_$1_lib]))"])]) + [AS_VAR_SET([acx_pkg_lib],["$8$withval"])]) AC_ARG_VAR(acx_pkg_lib, - [specifically set flags to use when linking $1.]) - AC_SUBST(acx_pkg_lib) - AS_VAR_IF([acx_pkg_bindings],[yes], + [specifically set flags to use when linking $1.])dnl + AC_SUBST(acx_pkg_lib)dnl + AS_VAR_IF([acx_pkg_bindings], [yes], [AS_VAR_PUSHDEF([ac_Search],[acx_cv_option_search_$7_]_AC_LANG_ABBREV)dnl ACX_OPTION_SEARCH_LIBS_MULTI([$7],[$9],, [AS_VAR_SET([acx_pkg_bindings],[no]) - $12],[$10],m4_ifval([$11],[$11 ])$[acx_pkg_lib]) - AS_VAR_COPY([acx_temp],[ac_Search]) - acx_temp=`echo "$acx_temp" | sed -e 's/^ *//;s/ *$//'` - AS_VAR_COPY([acx_pkg_lib],[acx_temp]) - AS_VAR_POPDEF([ac_Search])dnl - ]) - ])dnl - AS_VAR_POPDEF([acx_pkg_bindings]) - AS_VAR_POPDEF([acx_cv_pkg_inc]) - AS_VAR_POPDEF([acx_pkg_inc]) - AS_VAR_POPDEF([acx_pkg_lib]) - AS_VAR_POPDEF([acx_pkg_root]) - ]) + $12],[$10],m4_ifval([$11],[$11 ])$acx_pkg_lib) + AS_LITERAL_IF([ac_Search], + [AS_VAR_SET([acx_pkg_lib], + [`echo "$]ac_Search[" | sed -e 's/^ *//;s/ *$//'`])], + [AS_VAR_COPY([acx_temp],[ac_Search]) + acx_temp=`echo "$acx_temp" | sed -e 's/^ *//;s/ *$//'` + AS_VAR_COPY([acx_pkg_lib],[acx_temp])]) + AS_VAR_POPDEF([ac_Search])])]) + AS_VAR_POPDEF([acx_pkg_bindings])dnl + AS_VAR_POPDEF([acx_cv_pkg_inc])dnl + AS_VAR_POPDEF([acx_pkg_inc])dnl + AS_VAR_POPDEF([acx_pkg_lib])dnl + AS_VAR_POPDEF([acx_pkg_root])dnl + ]) dnl dnl Local Variables: dnl mode: autoconf diff --git a/m4/acx_lt_problems.m4 b/m4/acx_lt_problems.m4 index f2e1e58d2ab788b67d3de67182b30375607b5fd2..c775ff873744b2b0290826d8c65ab74537f02c61 100644 --- a/m4/acx_lt_problems.m4 +++ b/m4/acx_lt_problems.m4 @@ -6,7 +6,7 @@ dnl Version: 1.0 dnl Keywords: dnl Author: Thomas Jahns <jahns@dkrz.de> dnl Maintainer: Thomas Jahns <jahns@dkrz.de> -dnl URL: https://www.dkrz.de/redmine/projects/show/scales-ppm +dnl URL: https://www.dkrz.de/redmine/projects/scales-ppm dnl dnl Redistribution and use in source and binary forms, with or without dnl modification, are permitted provided that the following conditions are @@ -91,6 +91,6 @@ AC_DEFUN([ACX_LT_PROBLEMS], dnl dnl Local Variables: dnl mode: autoconf -dnl license-project-url: "https://www.dkrz.de/redmine/projects/show/scales-ppm" +dnl license-project-url: "https://www.dkrz.de/redmine/projects/scales-ppm" dnl license-default: "bsd" dnl End: diff --git a/m4/acx_m4_list_to_quoted_strings.m4 b/m4/acx_m4_list_to_quoted_strings.m4 new file mode 100644 index 0000000000000000000000000000000000000000..a55feb5412e64b0ffa23a0d2e6c180a24bafb26d --- /dev/null +++ b/m4/acx_m4_list_to_quoted_strings.m4 @@ -0,0 +1,52 @@ +dnl acx_m4_list_to_quoted_strings.m4 --- short description +dnl +dnl Copyright (C) 2019 Thomas Jahns <jahns@dkrz.de> +dnl +dnl Version: 1.0 +dnl Author: Thomas Jahns <jahns@dkrz.de> +dnl Keywords: +dnl Maintainer: Thomas Jahns <jahns@dkrz.de> +dnl URL: https://www.dkrz.de/redmine/projects/scales-ppm +dnl +dnl Redistribution and use in source and binary forms, with or without +dnl modification, are permitted provided that the following conditions are +dnl met: +dnl +dnl Redistributions of source code must retain the above copyright notice, +dnl this list of conditions and the following disclaimer. +dnl +dnl Redistributions in binary form must reproduce the above copyright +dnl notice, this list of conditions and the following disclaimer in the +dnl documentation and/or other materials provided with the distribution. +dnl +dnl Neither the name of the DKRZ GmbH nor the names of its contributors +dnl may be used to endorse or promote products derived from this software +dnl without specific prior written permission. +dnl +dnl THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +dnl IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +dnl TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +dnl PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +dnl OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +dnl EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +dnl PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +dnl PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +dnl LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +dnl NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +dnl SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +dnl +dnl ACX_M4_LIST_TO_QUOTED_STRINGS +dnl expand m4 quoted list to shell list of quoted strings +dnl e.g. converts +dnl [[a],[b]] to "a" "b" +m4_define([_ACX_M4_LIST_TO_QUOTED_STRINGS], + [m4_cond([$#],[0],,[$#],[1],["$1"], + ["$1" _ACX_M4_LIST_TO_QUOTED_STRINGS(m4_shift($@))])])dnl +AC_DEFUN([ACX_M4_LIST_TO_QUOTED_STRINGS], + [_ACX_M4_LIST_TO_QUOTED_STRINGS(m4_unquote([$1]))]) +dnl +dnl Local Variables: +dnl mode: autoconf +dnl license-project-url: "https://www.dkrz.de/redmine/projects/scales-ppm" +dnl license-default: "bsd" +dnl End: diff --git a/m4/acx_mpirun.m4 b/m4/acx_mpirun.m4 new file mode 100644 index 0000000000000000000000000000000000000000..6fe3e0a310f2f642329062352063262eb2f60fd8 --- /dev/null +++ b/m4/acx_mpirun.m4 @@ -0,0 +1,101 @@ +dnl acx_mpirun.m4 --- check whether launching MPI programs works +dnl +dnl Copyright (C) 2014 Thomas Jahns <jahns@dkrz.de> +dnl +dnl Keywords: configure configure.ac autoconf MPI mpirun mpiexec +dnl Author: Thomas Jahns <jahns@dkrz.de> +dnl Maintainer: Thomas Jahns <jahns@dkrz.de> +dnl URL: https://www.dkrz.de/redmine/projects/scales-ppm +dnl +dnl Redistribution and use in source and binary forms, with or without +dnl modification, are permitted provided that the following conditions are +dnl met: +dnl +dnl Redistributions of source code must retain the above copyright notice, +dnl this list of conditions and the following disclaimer. +dnl +dnl Redistributions in binary form must reproduce the above copyright +dnl notice, this list of conditions and the following disclaimer in the +dnl documentation and/or other materials provided with the distribution. +dnl +dnl Neither the name of the DKRZ GmbH nor the names of its contributors +dnl may be used to endorse or promote products derived from this software +dnl without specific prior written permission. +dnl +dnl THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +dnl IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +dnl TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +dnl PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +dnl OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +dnl EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +dnl PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +dnl PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +dnl LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +dnl NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +dnl SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +dnl +dnl +dnl ACX_MPIRUN([NUM_TASKS=4],[ACTION-IF-WORKING], +dnl [ACTION-IF-FAILED=AC_MSG_FAILURE]) +dnl +dnl First determines mpi launcher program (and sets MPI_LAUNCH to its path), +dnl then builds and runs simple program with 4 tasks +dnl (or NUM_TASKS if specified). +dnl MPI_LAUNCH is either set to a valid MPI launcher program path (unless +dnl cross-compiling, because it can't be tested then) or true (when it +dnl doesn't work). +dnl +dnl TODO: instead of setting C language, perform test for active AC_LANG +AC_DEFUN([ACX_MPIRUN], + [AC_PATH_PROGS([MPI_LAUNCH],[mpirun mpiexec],[true]) + AC_ARG_VAR([MPI_LAUNCH],[absolute path to launcher for MPI programs, must be working unless configuring in cross-compilation mode]) + AS_IF([test x"$cross_compiling" = xno -a x"$MPI_LAUNCH" != xtrue], + [AC_MSG_CHECKING([if $MPI_LAUNCH works]) + AS_IF([test -x `echo "$MPI_LAUNCH" | sed -e 's/@<:@ @:>@.*//'`], + [AC_LANG_PUSH([C]) + AC_LINK_IFELSE([AC_LANG_SOURCE([ +@%:@include <stdio.h> +@%:@include <stdlib.h> + +@%:@include <mpi.h> + +@%:@define xmpi(ret) \\ + do { \\ + if (ret != MPI_SUCCESS) \\ + exit(EXIT_FAILURE); \\ + } while (0) + +int +main(int argc, char **argv) +{ + xmpi(MPI_Init(&argc, &argv)); + char *numarg = argv@<:@1@:>@; + int cmdnum = atoi(numarg); + int procnum = 1; + xmpi(MPI_Allreduce(MPI_IN_PLACE, &procnum, 1, MPI_INT, MPI_SUM, + MPI_COMM_WORLD)); + xmpi(MPI_Finalize()); + return (procnum == cmdnum)?EXIT_SUCCESS:EXIT_FAILURE; +} +])], + [acx_mpirun_test="$MPI_LAUNCH -n m4_ifval([$1],[$1],[4]) ./conftest$EXEEXT m4_ifval([$1],[$1],[4])" + AS_IF([expr "$ac_link" : '.*/libtool --mode=link' >/dev/null], + [acx_mpirun_test=`echo "$ac_link" | sed -e 's@\(.*/libtool --mode=\)link.*@\1@'`"execute $acx_mpirun_test"]) + _AC_RUN_LOG([LIBC_FATAL_STDERR_=1 $acx_mpirun_test >&2],[echo "running $acx_mpirun_test"]) + AS_IF([test $ac_status -eq 0],, + [MPI_LAUNCH=true ; MPI_LAUNCH_failMsg="failed to run MPI programs"])], + [MPI_LAUNCH=true ; MPI_LAUNCH_failMsg="Cannot compile or link simple MPI program"]) + AC_LANG_POP([C])], + [MPI_LAUNCH_failMsg="Cannot execute $MPI_LAUNCH" ; MPI_LAUNCH=true])]) + AS_IF([test x"$MPI_LAUNCH" = xtrue], + [AC_MSG_RESULT([no]) + m4_ifval([$3],[$3],[AC_MSG_FAILURE([$MPI_LAUNCH_failMsg])])], + [AC_MSG_RESULT([yes])m4_ifval([$2],[ + $2])]) +]) +dnl +dnl Local Variables: +dnl mode: autoconf +dnl license-project-url: "https://www.dkrz.de/redmine/projects/scales-ppm" +dnl license-default: "bsd" +dnl End: diff --git a/m4/acx_option_search_libs.m4 b/m4/acx_option_search_libs.m4 index 93b2dda121c20231b5052cee2e445f8285d0536a..0e55de126fb37576347aa220dc8ca1bcacba27f2 100644 --- a/m4/acx_option_search_libs.m4 +++ b/m4/acx_option_search_libs.m4 @@ -52,20 +52,18 @@ dnl Uses either AC_LANG_PROGRAM([PREAMBLE],CALL-CODE) or dnl AC_LANG_CALL([PREAMBLE],FUNCTION), depending on whether CALL-CODE dnl is given or not. AC_DEFUN([_ACX_OPTION_SEARCH_LIBS], - [acx_option_func_search_save_LIBS="$LIBS" - AC_LANG_CONFTEST([m4_ifval([$6],[AC_LANG_PROGRAM([$5],[$6])],[AC_LANG_CALL([$5], [$1])])]) + [AC_LANG_CONFTEST([m4_ifval([$6],[AC_LANG_PROGRAM([$5],[$6])],[AC_LANG_CALL([$5], [$1])])]) AS_FOR([AC_LIB],[ac_lib],['' $2], [AS_IF([test -z "]AC_LIB["], [ac_res="none required" LIBS="m4_ifval([$4],[$4 ])m4_ifnblank($3,[$3 ])$acx_option_func_search_save_LIBS"], [ac_res="-l]AC_LIB[" LIBS="m4_ifval([$4],[$4 ])$ac_res m4_ifnblank($3,[$3 ])$acx_option_func_search_save_LIBS"]) - AC_LINK_IFELSE([], [AS_IF([test x"$ac_res" = x"none required"],dnl - [AS_VAR_SET([ac_Search],["]m4_ifval([$4],[$4 ])[$3"])],dnl - [AS_VAR_SET([ac_Search],["]m4_ifval([$4],[$4 ])[-l]AC_LIB[ $3"])])]) + AC_LINK_IFELSE([], [AS_IF([test x"$ac_res" = x"none required"], + [AS_VAR_SET([ac_Search],["]m4_ifval([$4],m4_ifnblank([$3],[$4 $3],[$4]),[$3])["])], + [AS_VAR_SET([ac_Search],["]m4_ifval([$4],[$4 ])[-l]AC_LIB[]m4_ifval([$3],[ $3])["])])]) AS_VAR_SET_IF([ac_Search], [break])]) - rm conftest.$ac_ext - LIBS="$acx_option_func_search_save_LIBS"]) + rm conftest.$ac_ext]) dnl ACX_OPTION_SEARCH_LIBS(FUNCTION, SEARCH-LIBS, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], [OTHER-LIBRARIES], dnl [EXTRA-FLAGS], [PREAMBLE]) @@ -77,7 +75,9 @@ dnl unconditionally, which might provoke linker errors. AC_DEFUN([ACX_OPTION_SEARCH_LIBS], [AS_VAR_PUSHDEF([ac_Search], [acx_cv_option_search_$1_]_AC_LANG_ABBREV)dnl AC_CACHE_CHECK([for library containing $1], [ac_Search], - [_ACX_OPTION_SEARCH_LIBS([$1],[$2],[$5],[$6],[$7])]) + [acx_option_func_search_save_LIBS=$LIBS + _ACX_OPTION_SEARCH_LIBS([$1],[$2],[$5],[$6],[$7]) + LIBS=$acx_option_func_search_save_LIBS]) ac_res=AS_VAR_GET([ac_Search]) AS_VAR_SET_IF([ac_Search], [$3], @@ -102,21 +102,24 @@ AC_DEFUN([ACX_OPTION_SEARCH_LIBS_MULTI], [AS_VAR_PUSHDEF([ac_Search], [acx_cv_option_search_$1_]_AC_LANG_ABBREV)dnl AC_MSG_CHECKING([for library containing $1]) AC_CACHE_VAL([ac_Search], - [while :; do + [acx_option_func_search_save_LIBS=$LIBS + while :; do m4_if(m4_car($5),[[]],,[_ACX_OPTION_SEARCH_LIBS([$1],[$2],,[$6],[$7],[$8]) AS_VAR_SET_IF([ac_Search], [break])]) - m4_foreach([ACX_LibSet], [$5], - [_ACX_OPTION_SEARCH_LIBS([$1],[$2],[ACX_LibSet],[$6],[$7],[$8]) + AS_FOR([ACX_LibSet],[acx_libset],ACX_M4_LIST_TO_QUOTED_STRINGS([$5]), + [_ACX_OPTION_SEARCH_LIBS([$1],[$2],ACX_LibSet,[$6],[$7],[$8]) AS_VAR_SET_IF([ac_Search],[break]) ]) break - done]) + done + LIBS=$acx_option_func_search_save_LIBS]) AS_VAR_SET_IF([ac_Search], [AS_IF([test x"AS_VAR_GET([ac_Search])" = x], [AC_MSG_RESULT([(none required)])], - [AC_MSG_RESULT([AS_VAR_GET([ac_Search])])])], - [AC_MSG_RESULT([not found])]) - AS_VAR_SET_IF([ac_Search],[$3],[$4]) + [AC_MSG_RESULT([AS_VAR_GET([ac_Search])])])m4_ifval([$3],[ + $3])], + [AC_MSG_RESULT([not found])m4_ifval([$4],[ + $4])]) AS_VAR_POPDEF([ac_Search])dnl ]) dnl diff --git a/m4/acx_sl_fc_mod_path_flag.m4 b/m4/acx_sl_fc_mod_path_flag.m4 index 8a413e77b19e94310957c6c25aa1cce36c2966b7..080a8713b35036ef896d8e317e49b69d0adf6e70 100644 --- a/m4/acx_sl_fc_mod_path_flag.m4 +++ b/m4/acx_sl_fc_mod_path_flag.m4 @@ -6,7 +6,7 @@ dnl Version: 1.0 dnl Keywords: dnl Author: Thomas Jahns <jahns@dkrz.de> dnl Maintainer: Thomas Jahns <jahns@dkrz.de> -dnl URL: https://www.dkrz.de/redmine/projects/show/scales-ppm +dnl URL: https://www.dkrz.de/redmine/projects/scales-ppm dnl dnl Redistribution and use in source and binary forms, with or without dnl modification, are permitted provided that the following conditions are @@ -91,6 +91,6 @@ AC_DEFUN([ACX_SL_FC_CHECK_MOD_PATH_FLAG],dnl dnl dnl Local Variables: dnl mode: autoconf -dnl license-project-url: "https://www.dkrz.de/redmine/projects/show/scales-ppm" +dnl license-project-url: "https://www.dkrz.de/redmine/projects/scales-ppm" dnl license-default: "bsd" dnl End: diff --git a/m4/acx_sl_mod_suffix.m4 b/m4/acx_sl_mod_suffix.m4 index b1ecbf55afc54c3aa9f05d164a93110ae9c5eee2..5d40623b546ea5284dfbf36a3c458c975d17c33e 100644 --- a/m4/acx_sl_mod_suffix.m4 +++ b/m4/acx_sl_mod_suffix.m4 @@ -6,7 +6,7 @@ dnl Version: 1.0 dnl Keywords: dnl Author: Thomas Jahns <jahns@dkrz.de> dnl Maintainer: Thomas Jahns <jahns@dkrz.de> -dnl URL: https://www.dkrz.de/redmine/projects/show/scales-ppm +dnl URL: https://www.dkrz.de/redmine/projects/scales-ppm dnl dnl Redistribution and use in source and binary forms, with or without dnl modification, are permitted provided that the following conditions are @@ -103,6 +103,6 @@ dnl dnl dnl Local Variables: dnl mode: autoconf -dnl license-project-url: "https://www.dkrz.de/redmine/projects/show/scales-ppm" +dnl license-project-url: "https://www.dkrz.de/redmine/projects/scales-ppm" dnl license-default: "bsd" dnl End: diff --git a/m4/acx_use_libtool_configuration.m4 b/m4/acx_use_libtool_configuration.m4 new file mode 100644 index 0000000000000000000000000000000000000000..68aec3caeed8b8aec6ec34de19beb46719cf988e --- /dev/null +++ b/m4/acx_use_libtool_configuration.m4 @@ -0,0 +1,128 @@ +dnl acx_use_libtool_configuration.m4 --- prevent problematic libtool build configurations +dnl +dnl Copyright (C) 2016 Thomas Jahns <jahns@dkrz.de> +dnl +dnl Version: 1.0 +dnl Keywords: +dnl Author: Thomas Jahns <jahns@dkrz.de> +dnl Maintainer: Thomas Jahns <jahns@dkrz.de> +dnl URL: https://www.dkrz.de/redmine/projects/scales-ppm +dnl +dnl Redistribution and use in source and binary forms, with or without +dnl modification, are permitted provided that the following conditions are +dnl met: +dnl +dnl Redistributions of source code must retain the above copyright notice, +dnl this list of conditions and the following disclaimer. +dnl +dnl Redistributions in binary form must reproduce the above copyright +dnl notice, this list of conditions and the following disclaimer in the +dnl documentation and/or other materials provided with the distribution. +dnl +dnl Neither the name of the DKRZ GmbH nor the names of its contributors +dnl may be used to endorse or promote products derived from this software +dnl without specific prior written permission. +dnl +dnl THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +dnl IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +dnl TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +dnl PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +dnl OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +dnl EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +dnl PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +dnl PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +dnl LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +dnl NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +dnl SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +dnl _ACX_LT_FLAGS_MANGLE +m4_define([nag_filter_flag_var], + [AS_IF([test x${$1+set} = xset], + [$1=`echo "$][$1" | tr ' ' '\n' | sed -e '/^-W@<:@lc@:>@/{' \ +-e 's/^\(-Wl\)/-XCClinker \1/;s/^\(-Wc\)/-Xcompiler \1/' -e '}' | tr '\n' ' '`])]) +AC_DEFUN([_ACX_LT_FORT_FLAGS_MANGLE], + [_AC_FORTRAN_ASSERT + AC_LANG_CASE([Fortran], + [AS_VAR_PUSHDEF([acx_FC],[FC])dnl + AS_VAR_PUSHDEF([acx_FCFLAGS],[FCFLAGS])dnl + AS_VAR_PUSHDEF([acx_LDFLAGS],[FCLDFLAGS])], + [Fortran 77], + [AS_VAR_PUSHDEF([acx_FC],[F77])dnl + AS_VAR_PUSHDEF([acx_FCFLAGS],[FFLAGS])dnl + AS_VAR_PUSHDEF([acx_LDFLAGS],[F77LDFLAGS])]) + acx_temp=`$acx_FC -V 2>&1 | sed 5q` +dnl fix problems from NAG compiler + AS_CASE(["$acx_temp"], + [*NAG\ Fortran\ Compiler\ Release*], + [nag_filter_flag_var([acx_FCFLAGS]) + nag_filter_flag_var([acx_LDFLAGS])]) +dnl fix conflicting use of -module by libtool and ifort + AC_LANG_CASE([Fortran], + [AS_CASE(["x${FC_MODOUT}x"], + [x'-module 'x|x'-mod 'x], + [FC_MODOUT="-Xcompiler ${FC_MODOUT}-Xcompiler "])])dnl + AS_VAR_POPDEF([acx_FC])dnl + AS_VAR_POPDEF([acx_FCFLAGS])dnl + AS_VAR_POPDEF([acx_LDFLAGS])]) +dnl +dnl ACX_USE_LIBTOOL_CONFIGURATION([ARGS-TO-LT_INIT]) +dnl Switch compiler to libtool wrapper and prevent occurrence of +dnl problematic setups +AC_DEFUN([ACX_USE_LIBTOOL_CONFIGURATION], + [dnl before switching on libtool, identify compilers that prevent us from + dnl certain build configurations + ACX_LT_PROBLEMS +dnl add some monkey patching for older libtool versions that don't handle +dnl newer PGI or NAG configurations particularly well + m4_if(m4_cmp(m4_version_compare(LT_PACKAGE_VERSION,[2.4.6]),1),-1, + [m4_pushdef([_LT_COMPILER_PIC],m4_bpatsubst(m4_dquote(m4_defn([_LT_COMPILER_PIC])),[;; + \*Portland\\ ],[;; @%:@( + *NAG\\ Fortran\\ Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $][1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $][1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $][1)='-Bstatic' + ;; + *PGI\\ Compilers\\ and\\ Tools*|*Port][land\\ ]))dnl + m4_pushdef([_LT_LINKER_SHLIBS],m4_bpatsubst(m4_dquote(m4_bpatsubst(m4_dquote( + m4_bpatsubst(m4_dquote(m4_defn( + [_LT_LINKER_SHLIBS])),[tmp_sharedflag='-shared'], + [tmp_sharedflag='-shared' + tmp_compiler_flags='$compiler_flags'])), + [\$CC '"\$tmp_sharedflag""\$tmp_addflag"' \$libobjs \$deplibs \$compiler_flags \$wl-soname], + [$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs '"$tmp_compiler_flags"' $wl-soname])), + [ tmp_sharedflag='-Wl,-shared'], + [ tmp_sharedflag='-Wl,-shared' + tmp_compiler_flags='`echo \$compiler_flags | sed -e '"'"'s/ -W@<:@cl@:>@,-no-pie\\b//g'"'"'`']))dnl + m4_pushdef([_LT_SYS_HIDDEN_LIBDEPS],m4_bpatsubst(m4_dquote( + m4_defn([_LT_SYS_HIDDEN_LIBDEPS])),[test x-\([LR]\) = "\$p"], + [test x-\1 = x"$p"]))])dnl + LT_INIT([$1]) + m4_if(m4_cmp(m4_version_compare(LT_PACKAGE_VERSION,[2.4.6]),1),-1, + [m4_popdef([_LT_COMPILER_PIC])m4_popdef([_LT_LINKER_SHLIBS])dnl + m4_popdef([_LT_SYS_HIDDEN_LIBDEPS])])dnl + dnl _KPSE_USE_LIBTOOL ensures libtool is also used for configure-time tests, + dnl which deduces dependent libraries automatically + _KPSE_USE_LIBTOOL + AC_PROVIDE_IFELSE([AC_PROG_FC], + [AS_IF([test -n "$FC" -a X"$FC" != Xno], + [AC_LANG_PUSH([Fortran]) + _ACX_LT_FORT_FLAGS_MANGLE + AC_LANG_POP([Fortran])])]) + AC_PROVIDE_IFELSE([AC_PROG_F77], + [AS_IF([test -n "$F77" -a X"$F77" != Xno], + [AC_LANG_PUSH([Fortran 77]) + _ACX_LT_FORT_FLAGS_MANGLE + AC_LANG_POP([Fortran 77])])]) +dnl substitute -shared-intel if present + AS_FOR([acx_flag_var],[acx_flag_var_],[CFLAGS CXXFLAGS FCFLAGS F77FLAGS LDFLAGS FCLDFLAGS], + [AS_IF([eval test x\$\{acx_flag_var+set\} = xset], + [eval acx_temp="\" \$$acx_flag_var_ \"" + AS_CASE([$acx_temp],[*\ -shared-intel\ *|*\ -static-intel\ *], + [acx_temp=`echo "$acx_temp" | sed -e 's/ \(-\(shared\|static\)-intel\) / -Xcompiler \1 -XCClinker \1 /'`]) +dnl take care of ifort/icc/icpc two-part options + eval acx_flag_var=\"`echo "$acx_temp" | sed -r -e 's/ -(align|allow|assume|ccdefault|check|convert|debug|debug-parameters|diag-type|diag-enable|diag-disable|double-size|dynamic-linker|dyncom|export-dir|extend-source|fp-model|fpscomp|gen-interfaces|heap-arrays|imacros|integer-size|iprefix|iquote|iwithprefixbefore|module|names|opt-report|opt-streaming-stores|pch-dir|pch-use|prof-dir|prof-file|real-size|reentrancy|stand|tcollect-filter|tune|warn|watch) (@<:@^-@:>@@<:@^ @:>@*) / -Xcompiler -\1 -Xcompiler \2 /g' -e 's/^ //;s/ $//'`\"])])])dnl +dnl +dnl Local Variables: +dnl mode: autoconf +dnl license-project-url: "https://www.dkrz.de/redmine/projects/scales-ppm" +dnl license-default: "bsd" +dnl End: diff --git a/util/crayftnpreproc-wrapper b/util/crayftnpreproc-wrapper index 563d4564a09b0796c4b4e1bda4f94ac51c66f3b2..03e18477fa03117ab9608550263b8a8c9e1bc8f8 100755 --- a/util/crayftnpreproc-wrapper +++ b/util/crayftnpreproc-wrapper @@ -3,10 +3,10 @@ # crayftnpreproc-wrapper --- wrapper to produce Cray ftn style front-end # preprocessor output on stdout # -# Copyright (C) 2014 Nathanael Hübbe <nathanael.huebbe@informatik.uni-hamburg.de> +# Copyright (C) 2014 Nathanael Hübbe <nathanael.huebbe@informatik.uni-hamburg.de> # Thomas Jahns <jahns@dkrz.de> # -# Author: Nathanael Hübbe <nathanael.huebbe@informatik.uni-hamburg.de> +# Author: Nathanael Hübbe <nathanael.huebbe@informatik.uni-hamburg.de> # Thomas Jahns <jahns@dkrz.de> # Maintainer: Thomas Jahns <jahns@dkrz.de> # URL: https://www.dkrz.de/redmine/projects/scales-ppm @@ -44,25 +44,46 @@ test x"$DEBUG" = x || set -x set -e # create temp directory for intermediate .i-files -temporaries="$(mktemp -d -t)" +temporaries=$(mktemp -d -t) trap "rm -rf $temporaries" EXIT -callDir="$PWD" +callDir=$PWD +declare -i i j declare -a inargs outargs preprocessedFiles inargs=("$@") j=0 # filter -o option and argument from flags for (( i = 0 ; i < ${#inargs[@]} ; i++ )) ; do - case ${inargs[$i]} in + case ${inargs[i]} in (-o) i=$((i + 1)) ;; (-o*) ;; (-eZ) ;; (-e*Z*) - outargs[$j]="${inargs[$i]//Z/}" + outargs[j]=${inargs[i]//Z/} j=$((j + 1)) ;; + (-e) + case ${inargs[i+1]} in + (Z) + # drop lone -e Z entirely + ((++i)) + ;; + (*Z*) + # filter Z from other arguments + outargs[j]=${inargs[i]} + outargs[j+1]=${inargs[i+1]//Z/} + ((++i)) + j=$((j + 2)) + ;; + # copy everything else verbatim + (*) + outargs[j]=${inargs[i]} + j=$((j + 1)) + ;; + esac + ;; (*) - outargs[$j]="${inargs[$i]}" + outargs[j]=${inargs[i]} j=$((j + 1)) ;; esac @@ -71,18 +92,18 @@ done # find non-option arguments at end of input and convert to absolute # path if necessary for (( i = ${#outargs[@]} - 1 ; i >= 0 ; i-- )) ; do - [[ -r "${outargs[$i]}" ]] || break - case "${outargs[$i]}" in + [[ -r "${outargs[i]}" ]] || break + case ${outargs[i]} in (/*) ;; - (*) outargs[$i]="$callDir/${outargs[$i]}" ;; + (*) outargs[i]="$callDir/${outargs[i]}" ;; esac done j=0 # use previous loop termination to build list of # names of .i-files produced by compiler for (( i = i + 1 ; i < ${#outargs[@]} ; i++ )) ; do - preprocessedFiles[$j]="${outargs[$i]%.*}.i" - preprocessedFiles[$j]="${preprocessedFiles[$j]##*/}" + preprocessedFiles[j]="${outargs[i]%.*}.i" + preprocessedFiles[j]=${preprocessedFiles[j]##*/} j=$((j + 1)) done @@ -110,5 +131,6 @@ grep -v -h '^#' "${preprocessedFiles[@]}" # Local Variables: # license-project-url: "https://www.dkrz.de/redmine/projects/scales-ppm" # license-default: "bsd" +# coding: utf-8 # End: # diff --git a/util/sunf95preproc-wrapper b/util/sunf95preproc-wrapper index 279ec07376569b899ebc7702c68733adb03f3d9f..5d4df6f532b6d1852644db42e2dc00d764d1ab15 100755 --- a/util/sunf95preproc-wrapper +++ b/util/sunf95preproc-wrapper @@ -47,6 +47,7 @@ if [ "${DEBUG+set}" = set ]; then set -x outputRedir=">&2" + echo "$0 $*" else outputRedir=">/dev/null 2>&1" fi @@ -80,12 +81,19 @@ if [ "${FC+set}" != set ]; then fi FC=${FC-$F90C} # nagfor 5.3 up chokes on -EP flag -nag=`$FC -V 2>&1 | sed -n '/^NAG/s/NAG Fortran Compiler.*/NAG/ -t print -b -: print -p'` -[ x"$nag" = xNAG ] || FCFLAGS=${FCFLAGS--EP} +case `$FC -V 2>&1 | sed 5q` in + *NAG\ Fortran\ Compiler*) + ;; + *PGI\ Compilers\ and\ Tools*) + echo 'This wrapper does not support the PGI Fortran compiler, use' >&2 + echo " $FC -E" >&2 + echo "instead." >&2 + exit 1 + ;; + *) + FCFLAGS=${FCFLAGS--EP} + ;; +esac # append -fpp if necessary IFStr=`echo "$IFS" | sed -n '$!s/$/\\\\n/ H diff --git a/util/sxpreproc-wrapper b/util/sxpreproc-wrapper index 04e26cadef5de0fbf30b7bbd4e867c7f9d4d9ceb..56c14569867010ec71ac2c33339a992eeb153786 100755 --- a/util/sxpreproc-wrapper +++ b/util/sxpreproc-wrapper @@ -91,6 +91,7 @@ TMPDIR="${TMPDIR-/tmp}" (umask 077 && mkdir "$tmp") } || exit $? #echo \"$FCFLAGS\" +trap "rm -rf '$tmp'" 0 for FortranFile in "$@" ; do fppOutput=`echo "$FortranFile" | sed 's:.*/:: s:^:'"$tmp/"'i.:'` @@ -101,7 +102,6 @@ s:^:'"$tmp/"'i.:'` test "${DEBUG+set}" = set && cat "$fppOutput" >&2 rm "$fppOutput" done -rm -rf "$tmp" # # Local Variables: # license-project-url: "https://www.dkrz.de/redmine/projects/scales-ppm" diff --git a/util/xlfpreproc-wrapper b/util/xlfpreproc-wrapper index 95e13c919403e49ae568c7eb0ad06af15dfc7e4d..0064f7e3ecfa6c81226de702ac4ac4b7c2ffe62e 100755 --- a/util/xlfpreproc-wrapper +++ b/util/xlfpreproc-wrapper @@ -9,7 +9,7 @@ # Keywords: # Author: Thomas Jahns <jahns@dkrz.de> # Maintainer: Thomas Jahns <jahns@dkrz.de> -# URL: http:// +# URL: https://www.dkrz.de/redmine/projects/scales-ppm # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are