From 5bb5b3adfa437217efe028e39aa50fcfb67b677d Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Wed, 9 Oct 2019 13:07:03 +0200
Subject: [PATCH] BACKPORT: spack configuration patches (as per OpenFOAM-v1706)

etc/bashrc
  - improved robustness when sourcing
  - source top-level prefs.sh first (for sysadmin changes)

etc/config.*/settings
  - write job control information to the user directory
  - site/ directory under the OpenFOAM project dir, not its parent dir

etc/config.*/mpi
  - added USERMPI as place for spack mpi information

mgridgen, zoltan:
  - make location configurable

metis, scotch:
  - also check lib path (not just lib64)
---
 .../mesh/manipulation/renumberMesh/Allwmake   | 29 ++++++++++++++-----
 etc/bashrc                                    |  9 ++++--
 etc/config.csh/mpi                            |  7 +++++
 etc/config.csh/settings                       |  9 ++++--
 etc/config.sh/mpi                             |  7 +++++
 etc/config.sh/settings                        | 10 +++++--
 etc/cshrc                                     |  6 ++--
 src/fvAgglomerationMethods/Allwmake           |  8 +++--
 .../MGridGenGamgAgglomeration/Make/options    | 16 ++++------
 src/parallel/decompose/Allwmake               |  2 ++
 .../decompose/metisDecomp/Make/options        |  1 +
 .../decompose/ptscotchDecomp/Make/options     |  1 +
 .../decompose/scotchDecomp/Make/options       |  1 +
 src/renumber/Allwmake                         | 13 ++++-----
 src/renumber/zoltanRenumber/Make/options      |  5 +++-
 15 files changed, 84 insertions(+), 40 deletions(-)

diff --git a/applications/utilities/mesh/manipulation/renumberMesh/Allwmake b/applications/utilities/mesh/manipulation/renumberMesh/Allwmake
index ee135cc373c..59db39f970d 100755
--- a/applications/utilities/mesh/manipulation/renumberMesh/Allwmake
+++ b/applications/utilities/mesh/manipulation/renumberMesh/Allwmake
@@ -4,20 +4,35 @@ cd ${0%/*} || exit 1    # Run from this directory
 # Parse arguments for compilation (at least for error catching)
 . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments
 
-export COMPILE_FLAGS=''
-export LINK_FLAGS=''
+unset COMP_FLAGS LINK_FLAGS
 
 if [ -f "${FOAM_LIBBIN}/libSloanRenumber.so" ]
 then
-    echo "Found libSloanRenumber.so  --  enabling Sloan renumbering support."
+    echo "    found libSloanRenumber  --  enabling sloan renumbering support."
     export LINK_FLAGS="${LINK_FLAGS} -lSloanRenumber"
 fi
 
-if [ -f "${ZOLTAN_ARCH_PATH}/lib/libzoltan.a" -a -f "${FOAM_LIBBIN}/libzoltanRenumber.so" ]
+if [ -f "${FOAM_LIBBIN}/libzoltanRenumber.so" ]
 then
-    echo "Found libzoltanRenumber.so  --  enabling zoltan renumbering support."
-    export COMPILE_FLAGS="-DFOAM_USE_ZOLTAN"
-    export LINK_FLAGS="${LINK_FLAGS} -lzoltanRenumber -L${ZOLTAN_ARCH_PATH}/lib -lzoltan"
+    if [ -z "$ZOLTAN_ARCH_PATH" ]
+    then
+        # Optional: get ZOLTAN_ARCH_PATH
+        if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/zoltan)
+        then
+            . $settings
+        fi
+    fi
+
+    for libdir in lib "lib${WM_COMPILER_LIB_ARCH}"
+    do
+        if [ -f "$ZOLTAN_ARCH_PATH/$libdir/libzoltan.a" ]
+        then
+            echo "    found libzoltanRenumber  --  enabling zoltan renumbering support."
+            export COMP_FLAGS="-DFOAM_USE_ZOLTAN"
+            export LINK_FLAGS="${LINK_FLAGS} -lzoltanRenumber -L$ZOLTAN_ARCH_PATH/$libdir -lzoltan"
+            break
+        fi
+    done
 fi
 
 wmake $targetType
diff --git a/etc/bashrc b/etc/bashrc
index d9c253492bb..613ced698f6 100644
--- a/etc/bashrc
+++ b/etc/bashrc
@@ -42,7 +42,8 @@ export WM_PROJECT_VERSION=plus
 #
 # Please set to the appropriate path if the default is not correct.
 #
-[ $BASH_SOURCE ] && FOAM_INST_DIR=$(\cd ${BASH_SOURCE%/*/*/*} && \pwd -P) || \
+rc="${BASH_SOURCE:-${ZSH_NAME:+$0}}"
+[ -n "$rc" ] && FOAM_INST_DIR=$(\cd $(dirname $rc)/../.. && \pwd -L) || \
 FOAM_INST_DIR=$HOME/$WM_PROJECT
 # FOAM_INST_DIR=~$WM_PROJECT
 # FOAM_INST_DIR=/opt/$WM_PROJECT
@@ -135,8 +136,10 @@ export WM_PROJECT_USER_DIR=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 . $WM_PROJECT_DIR/etc/config.sh/functions
 
-# Add in preset user or site preferences:
-_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile prefs.sh`
+# Override definitions via prefs, with 'other' first so the sys-admin
+# can provide base values independent of WM_PROJECT_SITE
+_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -mode o  prefs.sh`
+_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -mode ug prefs.sh`
 
 # Evaluate command-line parameters and record settings for later
 # these can be used to set/unset values, or specify alternative pref files
diff --git a/etc/config.csh/mpi b/etc/config.csh/mpi
index c56bbab3f92..a7ffdcee893 100644
--- a/etc/config.csh/mpi
+++ b/etc/config.csh/mpi
@@ -71,8 +71,15 @@ case OPENMPI:
     _foamAddMan     $MPI_ARCH_PATH/share/man
     breaksw
 
+case USERMPI:
+    # Use an arbitrary, user-specified mpi implementation
+    setenv FOAM_MPI mpi-user
+    _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/mpi-user`
+    breaksw
+
 case SYSTEMMPI:
     setenv FOAM_MPI mpi-system
+    _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/mpi-system`
 
     if ( ! ($?MPI_ROOT) ) then
         echo
diff --git a/etc/config.csh/settings b/etc/config.csh/settings
index 659b4c5ae22..52f682dd495 100644
--- a/etc/config.csh/settings
+++ b/etc/config.csh/settings
@@ -137,7 +137,7 @@ endsw
 #------------------------------------------------------------------------------
 
 # Location of the jobControl directory
-setenv FOAM_JOB_DIR $WM_PROJECT_INST_DIR/jobControl
+setenv FOAM_JOB_DIR "$HOME/.OpenFOAM/jobControl"
 
 # wmake configuration
 setenv WM_DIR $WM_PROJECT_DIR/wmake
@@ -196,8 +196,11 @@ endif
 unset siteDir
 
 _foamAddPath ${FOAM_USER_APPBIN}:${FOAM_SITE_APPBIN}:${FOAM_APPBIN}
-# Make sure to pick up dummy versions of external libraries last
-_foamAddLib  ${FOAM_USER_LIBBIN}:${FOAM_SITE_LIBBIN}:${FOAM_LIBBIN}:${FOAM_EXT_LIBBIN}:${FOAM_LIBBIN}/dummy
+_foamAddLib  $FOAM_LIBBIN/dummy     # Dummy versions of external libraries last
+if ( $?FOAM_EXT_LIBBIN ) then       # External libraries (allowed to be unset)
+    _foamAddLib $FOAM_EXT_LIBBIN
+endif
+_foamAddLib  ${FOAM_USER_LIBBIN}:${FOAM_SITE_LIBBIN}:${FOAM_LIBBIN}
 
 # Compiler settings
 # ~~~~~~~~~~~~~~~~~
diff --git a/etc/config.sh/mpi b/etc/config.sh/mpi
index 757aef05ee2..50b08ffdb7a 100644
--- a/etc/config.sh/mpi
+++ b/etc/config.sh/mpi
@@ -75,8 +75,15 @@ OPENMPI)
     _foamAddMan     $MPI_ARCH_PATH/share/man
     ;;
 
+USERMPI)
+    # Use an arbitrary, user-specified mpi implementation
+    export FOAM_MPI=mpi-user
+    _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/mpi-user`
+    ;;
+
 SYSTEMMPI)
     export FOAM_MPI=mpi-system
+    _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/mpi-system`
 
     if [ -z "$MPI_ROOT" ]
     then
diff --git a/etc/config.sh/settings b/etc/config.sh/settings
index 4e457c15c00..6281be6a48a 100644
--- a/etc/config.sh/settings
+++ b/etc/config.sh/settings
@@ -141,7 +141,7 @@ esac
 #------------------------------------------------------------------------------
 
 # Location of the jobControl directory
-export FOAM_JOB_DIR=$WM_PROJECT_INST_DIR/jobControl
+export FOAM_JOB_DIR="$HOME/.OpenFOAM/jobControl"
 
 # wmake configuration
 export WM_DIR=$WM_PROJECT_DIR/wmake
@@ -198,8 +198,12 @@ fi
 unset siteDir
 
 _foamAddPath $FOAM_USER_APPBIN:$FOAM_SITE_APPBIN:$FOAM_APPBIN
-# Make sure to pick up dummy versions of external libraries last
-_foamAddLib  $FOAM_USER_LIBBIN:$FOAM_SITE_LIBBIN:$FOAM_LIBBIN:$FOAM_EXT_LIBBIN:$FOAM_LIBBIN/dummy
+_foamAddLib  $FOAM_LIBBIN/dummy     # Dummy versions of external libraries last
+if [ -n "$FOAM_EXT_LIBBIN" ]        # External libraries (allowed to be unset)
+then
+    _foamAddLib $FOAM_EXT_LIBBIN
+fi
+_foamAddLib  $FOAM_USER_LIBBIN:$FOAM_SITE_LIBBIN:$FOAM_LIBBIN
 
 # Compiler settings
 # ~~~~~~~~~~~~~~~~~
diff --git a/etc/cshrc b/etc/cshrc
index 9928e0073fb..0bee1478685 100644
--- a/etc/cshrc
+++ b/etc/cshrc
@@ -148,8 +148,10 @@ setenv WM_PROJECT_USER_DIR $HOME/$WM_PROJECT/$LOGNAME-$WM_PROJECT_VERSION
 # Source files, possibly with some verbosity
 alias _foamSource 'if ($?FOAM_VERBOSE && $?prompt) echo "Sourcing: \!*"; if (\!* != "") source \!*'
 
-# Add in preset user or site preferences:
-_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile prefs.csh`
+# Override definitions via prefs, with 'other' first so the sys-admin
+# can provide base values independent of WM_PROJECT_SITE
+_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -mode o  prefs.csh`
+_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -mode ug prefs.csh`
 
 # Evaluate command-line parameters and record settings for later
 # these can be used to set/unset values, or specify alternative pref files
diff --git a/src/fvAgglomerationMethods/Allwmake b/src/fvAgglomerationMethods/Allwmake
index dcef4328c21..ba1c5ee1a7c 100755
--- a/src/fvAgglomerationMethods/Allwmake
+++ b/src/fvAgglomerationMethods/Allwmake
@@ -4,9 +4,13 @@ cd ${0%/*} || exit 1    # Run from this directory
 # Parse arguments for library compilation
 . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments
 
-export ParMGridGen=$WM_THIRD_PARTY_DIR/ParMGridGen-1.0
+unset MGRIDGEN_ARCH_PATH
+if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/mgridgen)
+then
+    . $settings
+fi
 
-if [ -e "$FOAM_LIBBIN/libMGridGen.so" ]
+if [ -e "$MGRIDGEN_ARCH_PATH/include/mgridgen.h" ]
 then
     wmake $targetType MGridGenGamgAgglomeration
 fi
diff --git a/src/fvAgglomerationMethods/MGridGenGamgAgglomeration/Make/options b/src/fvAgglomerationMethods/MGridGenGamgAgglomeration/Make/options
index a58b65fb790..8f7b5aedc66 100644
--- a/src/fvAgglomerationMethods/MGridGenGamgAgglomeration/Make/options
+++ b/src/fvAgglomerationMethods/MGridGenGamgAgglomeration/Make/options
@@ -1,15 +1,9 @@
-/* Needs ParMGridGen environment variable set. (see Allwmake script) */
-
-TYPE_REAL=
-#if defined(WM_SP)
-TYPE_REAL=-DTYPE_REAL
-#endif
-
 EXE_INC = \
     -I$(LIB_SRC)/finiteVolume/lnInclude \
-    -I$(ParMGridGen)/MGridGen/Lib/lnInclude \
-    -I$(ParMGridGen)/MGridGen/IMlib/lnInclude \
-    $(TYPE_REAL)
+    -I$(MGRIDGEN_ARCH_PATH)/include
 
 LIB_LIBS = \
-    -L$(FOAM_EXT_LIBBIN) -lMGridGen
+    -L$(FOAM_EXT_LIBBIN) \
+    -L$(MGRIDGEN_ARCH_PATH)/lib \
+    -L$(MGRIDGEN_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
+    -lmgrid
diff --git a/src/parallel/decompose/Allwmake b/src/parallel/decompose/Allwmake
index 6bddc475ea6..33634f7d77b 100755
--- a/src/parallel/decompose/Allwmake
+++ b/src/parallel/decompose/Allwmake
@@ -36,6 +36,7 @@ hasMetis()
 
     # Library
     [ -r $FOAM_EXT_LIBBIN/libmetis.so ] || \
+    [ -r $METIS_ARCH_PATH/lib/libmetis.so ] || \
     [ -r $METIS_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libmetis.so ] || \
     [ "${METIS_ARCH_PATH##*-}" = system ] || {
         echo "$warning (missing library)"
@@ -90,6 +91,7 @@ hasScotch()
 
     # Library
     [ -r $FOAM_EXT_LIBBIN/libscotch.so ] || \
+    [ -r $SCOTCH_ARCH_PATH/lib/libscotch.so ] || \
     [ -r $SCOTCH_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libscotch.so ] || \
     [ "${SCOTCH_ARCH_PATH##*-}" = system ] || {
         echo "$warning (missing library)"
diff --git a/src/parallel/decompose/metisDecomp/Make/options b/src/parallel/decompose/metisDecomp/Make/options
index b1cce000a22..a832e26823f 100644
--- a/src/parallel/decompose/metisDecomp/Make/options
+++ b/src/parallel/decompose/metisDecomp/Make/options
@@ -8,6 +8,7 @@ EXE_INC = \
  * to support central, non-thirdparty installations
  */
 LIB_LIBS = \
+    -L$(METIS_ARCH_PATH)/lib \
     -L$(METIS_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
     -L$(FOAM_EXT_LIBBIN) \
     -lmetis
diff --git a/src/parallel/decompose/ptscotchDecomp/Make/options b/src/parallel/decompose/ptscotchDecomp/Make/options
index 9dab60dab53..51ae4a6662c 100644
--- a/src/parallel/decompose/ptscotchDecomp/Make/options
+++ b/src/parallel/decompose/ptscotchDecomp/Make/options
@@ -16,6 +16,7 @@ EXE_INC = \
  * to support central, non-thirdparty installations
  */
 LIB_LIBS = \
+    -L$(SCOTCH_ARCH_PATH)/lib \
     -L$(SCOTCH_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
     -L$(FOAM_EXT_LIBBIN) \
     -L$(FOAM_EXT_LIBBIN)/$(FOAM_MPI) \
diff --git a/src/parallel/decompose/scotchDecomp/Make/options b/src/parallel/decompose/scotchDecomp/Make/options
index 5cc3e25d8c1..1ca71f6a683 100644
--- a/src/parallel/decompose/scotchDecomp/Make/options
+++ b/src/parallel/decompose/scotchDecomp/Make/options
@@ -16,6 +16,7 @@ EXE_INC = \
  * to support central, non-thirdparty installations
  */
 LIB_LIBS = \
+    -L$(SCOTCH_ARCH_PATH)/lib \
     -L$(SCOTCH_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
     -L$(FOAM_EXT_LIBBIN) \
     -lscotch \
diff --git a/src/renumber/Allwmake b/src/renumber/Allwmake
index e1fcc89e662..aef86c64506 100755
--- a/src/renumber/Allwmake
+++ b/src/renumber/Allwmake
@@ -5,14 +5,11 @@ cd ${0%/*} || exit 1    # Run from this directory
 targetType=libso
 . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments
 
-## Get ZOLTAN_ARCH_PATH
-#if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/zoltan)
-#then
-#    . $settings
-#    echo "using ZOLTAN_ARCH_PATH=$ZOLTAN_ARCH_PATH"
-#else
-#    echo "Error: no config.sh/zoltan settings"
-#fi
+# Optional: get ZOLTAN_ARCH_PATH
+if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/zoltan)
+then
+    . $settings
+fi
 
 wmake $targetType renumberMethods
 
diff --git a/src/renumber/zoltanRenumber/Make/options b/src/renumber/zoltanRenumber/Make/options
index c637f39ba96..ed93f8b2b87 100644
--- a/src/renumber/zoltanRenumber/Make/options
+++ b/src/renumber/zoltanRenumber/Make/options
@@ -4,10 +4,13 @@ sinclude $(RULES)/mplib$(WM_MPLIB)
 EXE_INC = \
     /* -DFULLDEBUG -g -O0 */ \
     $(PFLAGS) $(PINC) \
+    ${c++LESSWARN} \
     -I$(FOAM_SRC)/renumber/renumberMethods/lnInclude \
     -I$(ZOLTAN_ARCH_PATH)/include/ \
     -I$(LIB_SRC)/meshTools/lnInclude
 
 LIB_LIBS = \
-    /* -L$(ZOLTAN_ARCH_PATH)/lib -lzoltan */ \
+    -L$(ZOLTAN_ARCH_PATH)/lib \
+    -L$(ZOLTAN_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
+    -lzoltan \
     -lmeshTools
-- 
GitLab