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