From c110263a4bdfc26efad5cb27e06505623d358e9d Mon Sep 17 00:00:00 2001
From: Christian Engwer <christi@dune-project.org>
Date: Sun, 9 Jul 2006 20:11:56 +0000
Subject: [PATCH] Implemented --disable-parallel. This should fix bug #141.
 Please test this feature. For the time being I will leave the bug open.

[[Imported from SVN: r4589]]
---
 m4/dune_mpi.m4 | 305 +++++++++++++++++++++++++++----------------------
 1 file changed, 166 insertions(+), 139 deletions(-)

diff --git a/m4/dune_mpi.m4 b/m4/dune_mpi.m4
index d976d06bb..41dc03b0c 100644
--- a/m4/dune_mpi.m4
+++ b/m4/dune_mpi.m4
@@ -41,163 +41,185 @@
 # breaks often. Bad luck. Blame the MPI folks for this mess. And blame
 # them a lot. [Thimo 26.8.2004]
 
-# TODO:
-#
-# - add --disable-mpi
+# Sometimes ACX_MPI will not be able to find the correct MPI compiler,
+# or sometimes you might have several MPI installations. Specify the
+# MPICC variable to enforce a certain MPI compiler.
+
+# In order to diasble the usage of MPI (and make Dune pure
+# sequentiell) you can supply the option
+#   --disable-parallel
+# [Christian 9.7.2006]
 
 AC_DEFUN([DUNE_MPI],[
   AC_PREREQ(2.50) dnl for AC_LANG_CASE
 
-  # implicitly sets the HAVE_MPI-define and the MPICXX-substitution
-  ACX_MPI()
+  AC_LANG_PUSH([C])
 
-  # remove HAVE_MPI from confdefs.h
-  cp confdefs.h confdefs.h.tmp
-  grep -v "^#define HAVE_MPI " confdefs.h.tmp > confdefs.h
-  rm -f confdefs.h.tmp
+  # enable/disable parallel features
+  AC_ARG_ENABLE(parallel,
+    AC_HELP_STRING([--disable-parallel],
+      [Try to use the parallel feature of Dune. This option requires MPI to be present. 
+       configure will try to determin your MPI automatically,
+       you can overwrite this setting by specifying the MPICC veriable]),
+    [with_parallel=$enableval],
+    [with_parallel=yes]
+  )
 
   # disable runtest if we have a queuing system
   AC_ARG_ENABLE(mpiruntest,
     AC_HELP_STRING([--disable-mpiruntest],
       [Don't try to run a MPI program during configure. (This is need if you depend on a queuing system)]),
-    [mpiruntest=$enable],
+    [mpiruntest=${enableval}],
     [mpiruntest=yes]
   )
 
-# somehow variables like $1, $2 seem to disappear after m4... Quote them...
-dune_mpi_getflags () {
-    # -- call mpiCC, remove compiler name
-    # compiler-name is first word in line _if_ it doesn't start with a dash!
-    # needed because mpiCC sometimes does not include compiler (newer LAM)
+  with_mpi="no"
 
-    # the additional brackets keep m4 from interpreting the brackets
-    # in the sed-command...
-    retval=[`$MPICOMP ${1} ${2} 2>/dev/null | head -1 | sed -e 's/^[^-][^ ]\+ //'`]
-    # remove dummy-parameter (if existing)
-    if test ${#} = 2 ; then
-      retval=`echo $retval | sed -e "s/${2}//"`
-    fi
-}
+  # //
+  # helper shell functions
 
-# removes regexp $2 from string $1
-dune_mpi_remove () {
-   retval=`echo ${1} | sed -e "s/${2}//"`
-}
+    # somehow variables like $1, $2 seem to disappear after m4... Quote them...
+    dune_mpi_getflags () {
+      # -- call mpiCC, remove compiler name
+      # compiler-name is first word in line _if_ it doesn't start with a dash!
+      # needed because mpiCC sometimes does not include compiler (newer LAM)
 
-  # get compilation script
-  AC_LANG_CASE([C],[
-	MPICOMP="$MPICC"
+      # the additional brackets keep m4 from interpreting the brackets
+      # in the sed-command...
+      retval=[`$MPICOMP ${1} ${2} 2>/dev/null | head -1 | sed -e 's/^[^-][^ ]\+ //'`]
+      # remove dummy-parameter (if existing)
+      if test ${#} = 2 ; then
+        retval=`echo $retval | sed -e "s/${2}//"`
+      fi
+    }
+    # removes regexp $2 from string $1
+    dune_mpi_remove () {
+      retval=`echo ${1} | sed -e "s/${2}//"`
+    }
+  # //
+
+  # 1) no paramter : ''
+  #    => use ACX_MPI to find the mpi Compiler
+  # 2) --with-mpi=/opt/special-mpi/bin/mpicc : '/opt/special-mpi/bin/mpicc'
+  #    => use /opt/special-mpi/bin/mpicc as MPI compiler
+  # 3) --without-mpi : 'no'
+  #    => disable MPI
+
+  ## do nothing if --disable-parallel is used
+  if test x$with_parallel == xyes ; then
+  
+    # implicitly sets the HAVE_MPI-define and the MPICXX-substitution
+    ACX_MPI()
+    # remove HAVE_MPI from confdefs.h
+    cp confdefs.h confdefs.h.tmp
+    grep -v "^#define HAVE_MPI " confdefs.h.tmp > confdefs.h
+    rm -f confdefs.h.tmp
+    # get compilation script
+    AC_LANG_CASE([C],[
+        MPICOMP="$MPICC"
         dune_mpi_isgnu="$GCC"
-],
-[C++],[
-	MPICOMP="$MPICXX"
+      ],
+      [C++],[
+        MPICOMP="$MPICXX"
         dune_mpi_isgnu="$GXX"
-]
-)
-
-  # taken from acx_mpi: test succeeded if MPILIBS is not empty
-  if test x != x"$MPILIBS" -a x != x"$MPICOMP" ; then
-    with_mpi="no"
-
-    AC_MSG_CHECKING([MPI-package])
-    # the LAM mpiCC knows a -showme parameter
-    dune_mpi_getflags "-showme"
-    if test x"$retval" != x ; then
-      with_mpi="LAM"
-
-      # try new -showme:xxx function
-      dune_mpi_getflags "-showme:compile"
+      ])
+  
+    # taken from acx_mpi: test succeeded if MPILIBS is not empty
+    if test x != x"$MPICOMP" ; then
+
+      AC_MSG_CHECKING([MPI-package])
+      # the LAM mpiCC knows a -showme parameter
+      dune_mpi_getflags "-showme"
       if test x"$retval" != x ; then
-        # seems like LAM >= 7.1 which supports extraction of parameters without
-        # dummy files
-        AC_MSG_RESULT([LAM >= 7.1])
-        MPI_CPPFLAGS="$retval"
-
-        dune_mpi_getflags "-showme:link"
-        MPI_LDFLAGS="$retval"
-      else
-        AC_MSG_RESULT([LAM <= 7.0])
-        # use -showme and dummy parameters to extract flags        
-        AC_LANG_CASE([C], [MPISOURCE="dummy.c"],
-	  [C++], [MPISOURCE="dummy.cc"])
-
-        dune_mpi_getflags "-showme" "-c $MPISOURCE"
-        MPI_CPPFLAGS="$retval"
-
-        dune_mpi_getflags "-showme" "dummy.o -o dummy"
-        MPI_LDFLAGS="$retval"
-      fi
-    else
-      # the MPICH mpiCC knows a -show parameter
-      dune_mpi_getflags "-show"
-      if test x"$retval" != x ; then
-        with_mpi="MPICH"
-
-        # use special commands to extract options      
-
-        dune_mpi_getflags "-compile_info"
-        MPI_CPPFLAGS="$retval"
-        # hack in option to disable MPICH-C++-bindings...
-        AC_LANG_CASE([C++], [MPI_CPPFLAGS="$MPI_CPPFLAGS -DMPICH_SKIP_MPICXX"])
-
-        # remove implicitly set -c
-	dune_mpi_remove "$MPI_CPPFLAGS" '-c'
-	MPI_CPPFLAGS="$retval"
-
-        dune_mpi_getflags "-link_info"
-        MPI_LDFLAGS="$retval"
-
-        AC_MSG_RESULT([MPICH])
-      else	
-	# check exitcode of -v
-        if $MPICOMP -v -c $MPISOURCE > /dev/null 2>&1 ; then
-          AC_MSG_RESULT([IBM MPI])
-          with_mpi="IBM MPI"
-
-          dune_mpi_getflags "-v" "-c dummy.c"
-	  # mpCC passes on it's own parameter...
-          retval=`echo $retval | sed -e "s/-v//"`
-	  # remove compiler name (double bracket to quote for m4)
-          retval=`echo $retval | sed -e 's/^xl[[cC]] //'`
-	  # remove stuff we passed
-          retval=`echo $retval | sed -e "s/-c dummy.c//"`
-
-	  # mpCC assumes xlc is used...
-	  if test x$dune_mpi_isgnu = xyes ; then
-	    # change commandline if GNU compiler is used
-            retval=`echo $retval | sed -e 's/\(-b[[^ ]]*\)/-Xlinker \1/g'`
-          fi
+        with_mpi="LAM"
+  
+        # try new -showme:xxx function
+        dune_mpi_getflags "-showme:compile"
+        if test x"$retval" != x ; then
+          # seems like LAM >= 7.1 which supports extraction of parameters without
+          # dummy files
+          AC_MSG_RESULT([LAM >= 7.1])
           MPI_CPPFLAGS="$retval"
-
-          dune_mpi_getflags "-v" "dummy.o -o dummy"
-	  # mpCC passes on it's own parameter...
-          retval=`echo $retval | sed -e "s/-v//"`
-	  # remove compiler name
-          retval=`echo $retval | sed -e 's/^xl[[cC]] //'`
-	  # remove stuff we passed
-          retval=`echo $retval | sed -e "s/dummy.o -o dummy//"`
-
-	  if test x$dune_mpi_isgnu = xyes ; then
-	    # change commandline if GNU compiler is used
-            retval=`echo $retval | sed -e 's/\(-b[[^ ]]*\)/-Xlinker \1/g'`
-          fi
-
+  
+          dune_mpi_getflags "-showme:link"
           MPI_LDFLAGS="$retval"
         else
-          # don't know MPI....
-          AC_MSG_RESULT([unknown])
+          AC_MSG_RESULT([LAM <= 7.0])
+          # use -showme and dummy parameters to extract flags        
+          AC_LANG_CASE([C], [MPISOURCE="dummy.c"],
+            [C++], [MPISOURCE="dummy.cc"])
+          dune_mpi_getflags "-showme" "-c $MPISOURCE"
+          MPI_CPPFLAGS="$retval"
+          dune_mpi_getflags "-showme" "dummy.o -o dummy"
+          MPI_LDFLAGS="$retval"
+        fi
+      else
+        # the MPICH mpiCC knows a -show parameter
+        dune_mpi_getflags "-show"
+        if test x"$retval" != x ; then
+          with_mpi="MPICH"
+          # use special commands to extract options      
+          dune_mpi_getflags "-compile_info"
+          MPI_CPPFLAGS="$retval"
+          # hack in option to disable MPICH-C++-bindings...
+          AC_LANG_CASE([C++], [MPI_CPPFLAGS="$MPI_CPPFLAGS -DMPICH_SKIP_MPICXX"])
+          # remove implicitly set -c
+          dune_mpi_remove "$MPI_CPPFLAGS" '-c'
+          MPI_CPPFLAGS="$retval"
+          dune_mpi_getflags "-link_info"
+          MPI_LDFLAGS="$retval"
+          AC_MSG_RESULT([MPICH])
+        else  
+          # check exitcode of -v
+          if $MPICOMP -v -c $MPISOURCE > /dev/null 2>&1 ; then
+            AC_MSG_RESULT([IBM MPI])
+            with_mpi="IBM MPI"
+  
+            dune_mpi_getflags "-v" "-c dummy.c"
+            # mpCC passes on it's own parameter...
+            retval=`echo $retval | sed -e "s/-v//"`
+            # remove compiler name (double bracket to quote for m4)
+            retval=`echo $retval | sed -e 's/^xl[[cC]] //'`
+            # remove stuff we passed
+            retval=`echo $retval | sed -e "s/-c dummy.c//"`
+  
+            # mpCC assumes xlc is used...
+            if test x$dune_mpi_isgnu = xyes ; then
+              # change commandline if GNU compiler is used
+              retval=`echo $retval | sed -e 's/\(-b[[^ ]]*\)/-Xlinker \1/g'`
+            fi
+            MPI_CPPFLAGS="$retval"
+  
+            dune_mpi_getflags "-v" "dummy.o -o dummy"
+            # mpCC passes on it's own parameter...
+            retval=`echo $retval | sed -e "s/-v//"`
+            # remove compiler name
+            retval=`echo $retval | sed -e 's/^xl[[cC]] //'`
+            # remove stuff we passed
+            retval=`echo $retval | sed -e "s/dummy.o -o dummy//"`
+
+            if test x$dune_mpi_isgnu = xyes ; then
+              # change commandline if GNU compiler is used
+              retval=`echo $retval | sed -e 's/\(-b[[^ ]]*\)/-Xlinker \1/g'`
+            fi
+
+            MPI_LDFLAGS="$retval"
+          else
+            # don't know MPI....
+            AC_MSG_RESULT([unknown])
+          fi
         fi
       fi
-    fi
 
-    # fallback... can't extract flags :( 
-    if test x"$with_mpi" = xno ; then
-      AC_MSG_WARN([Could not identify MPI-package! Please send a bugreport and tell us what MPI-package you're using])
+      # fallback... can't extract flags :( 
+      if test x"$with_mpi" = xno ; then
+        AC_MSG_WARN([Could not identify MPI-package! Please send a bugreport and tell us what MPI-package you're using])
+      fi
+    else
+      # ACX_MPI didn't find anything
+      with_mpi="no"
     fi
-  else
-    # ACX_MPI didn't find anything
-    with_mpi="no"
-  fi
+  fi # end of MPI identification
 
   # if an MPI implementation was found..
   if test x"$with_mpi" != xno ; then
@@ -206,7 +228,7 @@ dune_mpi_remove () {
     # store old values
     ac_save_LIBS="$LIBS"
     ac_save_CPPFLAGS="$CPPFLAGS"
-	
+    
     # looks weird but as the -l... are contained in the MPI_LDFLAGS these
     # parameters have to be last on the commandline: with LIBS this is true
     LIBS="$MPI_LDFLAGS"
@@ -216,10 +238,12 @@ dune_mpi_remove () {
       AC_MSG_WARN([Diabled test whether compiling/running with $with_mpi works.])    
     else
       AC_MSG_CHECKING([whether compiling/running with $with_mpi works])
-	
+  
       if test x"$with_mpi" = xLAM ; then
         AC_MSG_NOTICE([Starting "lamboot" for checking...])
         lamboot -H
+        sleep 2s
+        AC_MSG_NOTICE(["lamboot" started...])
       fi
 
       # try to create program
@@ -227,17 +251,18 @@ dune_mpi_remove () {
         AC_LANG_SOURCE(
           [ #include <mpi.h>
             int main (int argc, char** argv) { 
-	        MPI_Init(&argc, &argv); 
+            MPI_Init(&argc, &argv); 
             MPI_Finalize(); }]),
-        [ AC_MSG_RESULT([yes]) ],
-        [ AC_MSG_RESULT([no])
-          AC_MSG_WARN([could not compile or run MPI testprogram, deactivating MPI! See config.log for details])
-          with_mpi=no]
+          [ AC_MSG_RESULT([yes]) ],
+          [ AC_MSG_RESULT([no])
+            AC_MSG_WARN([could not compile or run MPI testprogram, deactivating MPI! See config.log for details])
+            with_mpi=no]
       )
 
       if test x"$with_mpi" = xLAM ; then
         AC_MSG_NOTICE([Stopping LAM via "lamhalt"...])
-        lamhalt -H; sleep 1
+        lamhalt -H; sleep 2s
+        AC_MSG_NOTICE(["lamboot" stopped...])
       fi
     fi
 
@@ -257,4 +282,6 @@ dune_mpi_remove () {
   fi
 
   AM_CONDITIONAL(MPI, test x"$with_mpi" != xno)
+
+  AC_LANG_POP
 ])
-- 
GitLab