From 4409a0ea5afebb04cb7d9e205d3db2762910fc28 Mon Sep 17 00:00:00 2001
From: Henry Weller <http://cfd.direct>
Date: Wed, 9 Mar 2016 09:01:09 +0000
Subject: [PATCH] etc/bashrc, etc/config.sh: Updates provided by Bruno Santos:

 1. "foamCompiler" was changed to a more permanent "WM_COMPILER_TYPE"
    environment variable, so that it can be used by 3rd party
    installation scripts, such as "makeGcc", "makeLLVM" and so on. More
    on this will be provided in issue #1215.

 2. The script functions such as "_foamSource()" and "_foamAddPath()"
    were moved to a new file "etc/config.sh/functions". It has the
    ability to set or unset, depending on whether "WM_BASH_FUNCTIONS" is
    defined or not. This allows for these functions to be reused by
    other scripts, such as "makeGcc".

 3. The script "etc/config.sh/CGAL" relies on whether a local
    environment variable "SOURCE_CGAL_VERSIONS_ONLY" is defined or not,
    so that it will load only the version settings if it's defined. This
    is to make it easier to call this script from "makeCGAL". Although
    it still feels a bit of a clunky hack, but I didn't manage to deduce
    any other way we could do this :( I didn't add indentation within
    the if-block, to make it easier to read the changes. In addition,
    the local variable "common_path" is used to shorten the length of
    the lines and use slightly less repeated code.

 4. Added another new script "etc/config.sh/compiler", which has only
    the version numbers for the compilers taken out from the "settings"
    file. It currently depends on "WM_COMPILER_TYPE" for setting the
    variables, the same way it did with "foamCompiler". This script is
    now always sourced from the "settings" file, for the following
    reasons:

   - "makeGCC" and "makeLLVM" can now take advantage of this script file.

   - The example "compiler" script (detailed next) can rely on this
     script file and then override parameters on-demand, as well as
     allowing for system compilers to have dedicated settings, such as
     setting "WM_CC". This is similar to how the example environment
     script for "paraview" works.

 5. To the script "etc/config.sh/example/compiler" were added a few more examples:

   - It now starts with a block where it first loads the default "compiler" script.

   - Has a "WM_COMPILER=Gcc48u" case example for when we try to use GCC
     4.8 in Ubuntu 15.10. This is just to give the idea that in a
     particular system, we might have several system-wide compiler
     versions. For example, in Ubuntu 15.10, there is GCC 4.7, 4.8 and
     5.2, which could be used for testing performances or compatibility
     with some other 3rd party library.

   - Has the "WM_COMPILER=Icc" case example, related to the original bug
     report, where "WM_CC=icc" and "WM_CXX=icpc", so that the user then
     simply copies this file to their own local preferences folder.

 6. Small bug fix in "etc/config.sh/mpi", where unsetting "minBufferSize" was missing at the end of the script.

 7. Small change in "etc/config.sh/paraview", where "CMAKE_ROOT" is set
    along with "CMAKE_HOME". This is due to a rare issue that occurs on
    people's systems where they have a custom system-wide CMake version
    installed and which is used by having "CMAKE_ROOT" set on that
    environment. This can mess up OpenFOAM's custom ParaView builds,
    given that conflicting CMake versions can lead to not building
    ParaView at all.

   - For more details about "CMAKE_ROOT":
     https://cmake.org/Wiki/CMake_Useful_Variables [^]

 8. The scripts "_foamAddPath _foamAddLib _foamAddMan" were not being
    unset at the end of "settings". They are now unset at the end of
    "bashrc", through a call to the new double-use "functions" script.

Additionally all references to "foamCompiler" have been changed to
"WM_COMPILER_TYPE".

See also http://www.openfoam.org/mantisbt/view.php?id=1232
---
 etc/bashrc                     |  61 +++--------------
 etc/config.sh/CGAL             |  13 +++-
 etc/config.sh/compiler         |  82 ++++++++++++++++++++++
 etc/config.sh/example/compiler |  22 +++++-
 etc/config.sh/example/prefs.sh |   4 +-
 etc/config.sh/functions        | 122 +++++++++++++++++++++++++++++++++
 etc/config.sh/mpi              |   5 ++
 etc/config.sh/paraview         |   1 +
 etc/config.sh/settings         | 101 +++------------------------
 9 files changed, 264 insertions(+), 147 deletions(-)
 create mode 100644 etc/config.sh/compiler
 create mode 100644 etc/config.sh/functions

diff --git a/etc/bashrc b/etc/bashrc
index 3517abfb690..2f76281083f 100644
--- a/etc/bashrc
+++ b/etc/bashrc
@@ -58,8 +58,8 @@ foamInstall=$HOME/$WM_PROJECT
 : ${FOAM_INST_DIR:=$foamInstall}; export FOAM_INST_DIR
 
 #- Compiler location:
-#    foamCompiler= system | ThirdParty (OpenFOAM)
-foamCompiler=system
+#    WM_COMPILER_TYPE= system | ThirdParty (OpenFOAM)
+export WM_COMPILER_TYPE=system
 
 #- Compiler:
 #    WM_COMPILER = Gcc | Gcc45 | Gcc46 | Gcc47 | Gcc48 | Gcc49| Clang | Icc
@@ -137,52 +137,9 @@ fi
 # ~~~~~~~~~~~~~~~~~~~~~~
 export WM_PROJECT_USER_DIR=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION
 
-
-# Source files, possibly with some verbosity
-_foamSource()
-{
-    while [ $# -ge 1 ]
-    do
-        [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "Sourcing: $1" 1>&2
-        . $1
-       shift
-    done
-}
-
-# Evaluate command-line parameters
-_foamEval()
-{
-    while [ $# -gt 0 ]
-    do
-        case "$1" in
-        -*)
-            # stray option (not meant for us here) -> get out
-            break
-            ;;
-        *=)
-            # name=       -> unset name
-            [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "unset ${1%=}" 1>&2
-            eval "unset ${1%=}"
-            ;;
-        *=*)
-            # name=value  -> export name=value
-            [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "export $1" 1>&2
-            eval "export $1"
-            ;;
-        *)
-            # filename: source it
-            if [ -f "$1" ]
-            then
-                _foamSource "$1"
-            else
-                _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -silent "$1"`
-            fi
-            ;;
-        esac
-        shift
-    done
-}
-
+# Source initialization functions
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+. $WM_PROJECT_DIR/etc/config.sh/functions
 
 # Add in preset user or site preferences:
 _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile prefs.sh`
@@ -245,9 +202,13 @@ then
 fi
 
 
-# cleanup environment:
+# Cleanup environment:
 # ~~~~~~~~~~~~~~~~~~~~
 unset cleaned foamClean foamInstall foamOldDirs
-unset _foamSource _foamEval
+
+
+# Unload initialization functions:
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+. $WM_PROJECT_DIR/etc/config.sh/functions
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.sh/CGAL b/etc/config.sh/CGAL
index 5b6a32618cd..c76aabe75e5 100644
--- a/etc/config.sh/CGAL
+++ b/etc/config.sh/CGAL
@@ -32,8 +32,13 @@
 boost_version=boost-system
 cgal_version=CGAL-4.7
 
-export BOOST_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$boost_version
-export CGAL_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$cgal_version
+if [ -z "$SOURCE_CGAL_VERSIONS_ONLY" ]
+then
+
+common_path=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER
+
+export BOOST_ARCH_PATH=$common_path/$boost_version
+export CGAL_ARCH_PATH=$common_path/$cgal_version
 
 if [ "$FOAM_VERBOSE" -a "$PS1" ]
 then
@@ -52,6 +57,8 @@ then
     _foamAddLib $BOOST_ARCH_PATH/lib
 fi
 
-unset boost_version cgal_version
+unset boost_version cgal_version common_path
+
+fi
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.sh/compiler b/etc/config.sh/compiler
new file mode 100644
index 00000000000..63099a7923b
--- /dev/null
+++ b/etc/config.sh/compiler
@@ -0,0 +1,82 @@
+#----------------------------------*-sh-*--------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
+#    \\/     M anipulation  |
+#------------------------------------------------------------------------------
+# License
+#     This file is part of OpenFOAM.
+#
+#     OpenFOAM is free software: you can redistribute it and/or modify it
+#     under the terms of the GNU General Public License as published by
+#     the Free Software Foundation, either version 3 of the License, or
+#     (at your option) any later version.
+#
+#     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+#     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+#     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+#     for more details.
+#
+#     You should have received a copy of the GNU General Public License
+#     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+#
+# File
+#     etc/config.sh/compiler
+#
+# Description
+#     Startup file for custom compiler versions for OpenFOAM
+#     Sourced from OpenFOAM-<VERSION>/etc/config.sh/settings
+#
+#------------------------------------------------------------------------------
+
+case "$WM_COMPILER_TYPE" in
+OpenFOAM | ThirdParty)
+
+    # Default versions of GMP, MPFR and MPC, override as necessary
+    gmp_version=gmp-5.1.2
+    mpfr_version=mpfr-3.1.2
+    mpc_version=mpc-1.0.1
+
+    case "$WM_COMPILER" in
+    Gcc | Gcc48)
+        gcc_version=gcc-4.8.5
+        ;;
+    Gcc45)
+        gcc_version=gcc-4.5.4
+        ;;
+    Gcc46)
+        gcc_version=gcc-4.6.4
+        ;;
+    Gcc47)
+        gcc_version=gcc-4.7.4
+        ;;
+    Gcc49)
+        gcc_version=gcc-4.9.3
+        ;;
+    Gcc51)
+        gcc_version=gcc-5.1.0
+        ;;
+    Gcc52)
+        gcc_version=gcc-5.2.0
+        ;;
+    Gcc53)
+        gcc_version=gcc-5.3.0
+        ;;
+    Clang)
+        # Using clang - not gcc
+        export WM_CC='clang'
+        export WM_CXX='clang++'
+        clang_version=llvm-3.7.0
+        ;;
+    *)
+        echo 1>&2
+        echo "Warning in $WM_PROJECT_DIR/etc/config.sh/compiler:" 1>&2
+        echo "    Unknown OpenFOAM compiler type '$WM_COMPILER'" 1>&2
+        echo "    Please check your settings" 1>&2
+        echo 1>&2
+        ;;
+    esac
+    ;;
+
+esac
diff --git a/etc/config.sh/example/compiler b/etc/config.sh/example/compiler
index 34658b82178..493cafb56ef 100644
--- a/etc/config.sh/example/compiler
+++ b/etc/config.sh/example/compiler
@@ -25,12 +25,19 @@
 #     config.sh/example/compiler
 #
 # Description
-#     Example of fine tuning ThirdParty compiler settings for OpenFOAM
+#     Example of fine tuning compiler versions and settings for OpenFOAM
 #     Sourced from OpenFOAM-<VERSION>/etc/config.sh/settings
 #
 #------------------------------------------------------------------------------
 
-# Modified compiler settings
+# First load the standard versions, if necessary
+foamFile=$($WM_PROJECT_DIR/bin/foamEtcFile -mode o config.sh/compiler \
+               2>/dev/null)
+[ $? -eq 0 ] && _foamSource $foamFile
+unset foamFile
+
+
+# Override compiler settings
 case "$WM_COMPILER" in
 Gcc46 | Gcc46++0x)
     gcc_version=gcc-4.6.0
@@ -44,6 +51,17 @@ Gcc45 | Gcc45++0x)
     mpfr_version=mpfr-2.4.2
     mpc_version=mpc-0.8.1
     ;;
+Gcc48u)
+    # Example of using the system GCC 4.8 in Ubuntu 15.10. Keep in mind you
+    # will also need to create respective directory in "wmake/rules"
+    export WM_CC='gcc-4.8'
+    export WM_CXX='g++-4.8'
+    ;;
+Icc)
+    # Example for ensuring that 3rd software uses the Icc compilers
+    export WM_CC='icc'
+    export WM_CXX='icpc'
+    ;;
 esac
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.sh/example/prefs.sh b/etc/config.sh/example/prefs.sh
index a378712af5a..58b1fd76614 100644
--- a/etc/config.sh/example/prefs.sh
+++ b/etc/config.sh/example/prefs.sh
@@ -38,7 +38,7 @@
 
 ## Specify OpenFOAM ThirdParty compiler
 ## ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# foamCompiler=ThirdParty
+#WM_COMPILER_TYPE=ThirdParty
 
 ## Specify compiler type
 ## ~~~~~~~~~~~~~~~~~~~~~
@@ -46,7 +46,7 @@
 
 ## Specify system openmpi
 ## ~~~~~~~~~~~~~~~~~~~~~~
-# export WM_MPLIB=SYSTEMOPENMPI
+#export WM_MPLIB=SYSTEMOPENMPI
 
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.sh/functions b/etc/config.sh/functions
new file mode 100644
index 00000000000..dcec6549d47
--- /dev/null
+++ b/etc/config.sh/functions
@@ -0,0 +1,122 @@
+#----------------------------------*-sh-*--------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
+#    \\/     M anipulation  |
+#------------------------------------------------------------------------------
+# License
+#     This file is part of OpenFOAM.
+#
+#     OpenFOAM is free software: you can redistribute it and/or modify it
+#     under the terms of the GNU General Public License as published by
+#     the Free Software Foundation, either version 3 of the License, or
+#     (at your option) any later version.
+#
+#     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+#     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+#     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+#     for more details.
+#
+#     You should have received a copy of the GNU General Public License
+#     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+#
+# File
+#     etc/config.sh/functions
+#
+# Description
+#     Initialization script functions for the bashrc environment
+#     Sourced from OpenFOAM-<VERSION>/etc/config.sh/bashrc
+#
+#------------------------------------------------------------------------------
+
+if [ -z "$WM_BASH_FUNCTIONS" ]
+then
+
+    # Temporary environment variable for automatically (un)loading functions
+    WM_BASH_FUNCTIONS=loaded
+
+    # Source files, possibly with some verbosity
+    _foamSource()
+    {
+        while [ $# -ge 1 ]
+        do
+            [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "Sourcing: $1" 1>&2
+            . $1
+          shift
+        done
+    }
+
+    # Evaluate command-line parameters
+    _foamEval()
+    {
+        while [ $# -gt 0 ]
+        do
+            case "$1" in
+            -*)
+                # stray option (not meant for us here) -> get out
+                break
+                ;;
+            *=)
+                # name=       -> unset name
+                [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "unset ${1%=}" 1>&2
+                eval "unset ${1%=}"
+                ;;
+            *=*)
+                # name=value  -> export name=value
+                [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "export $1" 1>&2
+                eval "export $1"
+                ;;
+            *)
+                # filename: source it
+                if [ -f "$1" ]
+                then
+                    _foamSource "$1"
+                else
+                    _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -silent "$1"`
+                fi
+                ;;
+            esac
+            shift
+        done
+    }
+
+    # Prefix to PATH
+    _foamAddPath()
+    {
+        while [ $# -ge 1 ]
+        do
+            export PATH=$1:$PATH
+            shift
+        done
+    }
+
+    # Prefix to LD_LIBRARY_PATH
+    _foamAddLib()
+    {
+        while [ $# -ge 1 ]
+        do
+            export LD_LIBRARY_PATH=$1:$LD_LIBRARY_PATH
+            shift
+        done
+    }
+
+    # Prefix to MANPATH
+    _foamAddMan()
+    {
+        while [ $# -ge 1 ]
+        do
+            export MANPATH=$1:$MANPATH
+            shift
+        done
+    }
+
+else
+
+    # Cleanup environment:
+    # ~~~~~~~~~~~~~~~~~~~~
+    unset WM_BASH_FUNCTIONS
+    unset _foamAddPath _foamAddLib _foamAddMan
+    unset _foamSource _foamEval
+
+fi
diff --git a/etc/config.sh/mpi b/etc/config.sh/mpi
index f31c0018f66..36b651e0fcc 100644
--- a/etc/config.sh/mpi
+++ b/etc/config.sh/mpi
@@ -267,4 +267,9 @@ then
 fi
 export MPI_BUFFER_SIZE
 
+
+# Cleanup environment:
+# ~~~~~~~~~~~~~~~~~~~~
+unset minBufferSize
+
 #------------------------------------------------------------------------------
diff --git a/etc/config.sh/paraview b/etc/config.sh/paraview
index c686b32702a..0d14688677b 100644
--- a/etc/config.sh/paraview
+++ b/etc/config.sh/paraview
@@ -49,6 +49,7 @@ do
     if [ -r $cmake ]
     then
         export CMAKE_HOME=$cmake
+        export CMAKE_ROOT=$cmake
         export PATH=$CMAKE_HOME/bin:$PATH
         break
     fi
diff --git a/etc/config.sh/settings b/etc/config.sh/settings
index cdd3b21f208..aff65057c39 100644
--- a/etc/config.sh/settings
+++ b/etc/config.sh/settings
@@ -30,37 +30,6 @@
 #
 #------------------------------------------------------------------------------
 
-# Prefix to PATH
-_foamAddPath()
-{
-    while [ $# -ge 1 ]
-    do
-        export PATH=$1:$PATH
-        shift
-    done
-}
-
-# Prefix to LD_LIBRARY_PATH
-_foamAddLib()
-{
-    while [ $# -ge 1 ]
-    do
-        export LD_LIBRARY_PATH=$1:$LD_LIBRARY_PATH
-        shift
-    done
-}
-
-# Prefix to MANPATH
-_foamAddMan()
-{
-    while [ $# -ge 1 ]
-    do
-        export MANPATH=$1:$MANPATH
-        shift
-    done
-}
-
-#------------------------------------------------------------------------------
 # Set environment variables according to system type
 export WM_ARCH=`uname -s`
 
@@ -233,61 +202,19 @@ unset MPFR_ARCH_PATH GMP_ARCH_PATH
 
 # Location of compiler installation
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-if [ -z "$foamCompiler" ]
+if [ -z "$WM_COMPILER_TYPE" ]
 then
-    foamCompiler=system
+    WM_COMPILER_TYPE=system
     echo "Warning in $WM_PROJECT_DIR/etc/config.sh/settings:" 1>&2
-    echo "    foamCompiler not set, using '$foamCompiler'" 1>&2
+    echo "    WM_COMPILER_TYPE not set, using '$WM_COMPILER_TYPE'" 1>&2
 fi
 
-case "${foamCompiler}" in
-OpenFOAM | ThirdParty)
-    # Default versions of GMP, MPFR and MPC, overide as necessary
-    gmp_version=gmp-5.1.2
-    mpfr_version=mpfr-3.1.2
-    mpc_version=mpc-1.0.1
-    case "$WM_COMPILER" in
-    Gcc | Gcc48)
-        gcc_version=gcc-4.8.5
-        ;;
-    Gcc45)
-        gcc_version=gcc-4.5.4
-        ;;
-    Gcc46)
-        gcc_version=gcc-4.6.4
-        ;;
-    Gcc47)
-        gcc_version=gcc-4.7.4
-        ;;
-    Gcc49)
-        gcc_version=gcc-4.9.3
-        ;;
-    Gcc51)
-        gcc_version=gcc-5.1.0
-        ;;
-    Gcc52)
-        gcc_version=gcc-5.2.0
-        ;;
-    Gcc53)
-        gcc_version=gcc-5.3.0
-        ;;
-    Clang)
-        # Using clang - not gcc
-        export WM_CC='clang'
-        export WM_CXX='clang++'
-        clang_version=llvm-3.7.0
-        ;;
-    *)
-        echo 1>&2
-        echo "Warning in $WM_PROJECT_DIR/etc/config.sh/settings:" 1>&2
-        echo "    Unknown OpenFOAM compiler type '$WM_COMPILER'" 1>&2
-        echo "    Please check your settings" 1>&2
-        echo 1>&2
-        ;;
-    esac
+# Load configured compiler versions, regardless of the compiler type
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/compiler`
 
-    # Optional configuration tweaks:
-    _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/compiler`
+case "$WM_COMPILER_TYPE" in
+OpenFOAM | ThirdParty)
 
     if [ -n "$gcc_version" ]
     then
@@ -303,7 +230,7 @@ OpenFOAM | ThirdParty)
             echo "    Cannot find $gccDir installation." 1>&2
             echo "    Please install this compiler version or if you wish to" \
                  " use the system compiler," 1>&2
-            echo "    change the 'foamCompiler' setting to 'system'" 1>&2
+            echo "    change the 'WM_COMPILER_TYPE' setting to 'system'" 1>&2
             echo
         }
 
@@ -341,7 +268,7 @@ OpenFOAM | ThirdParty)
             echo "    Cannot find $clangDir installation." 1>&2
             echo "    Please install this compiler version or if you wish to" \
                  " use the system compiler," 1>&2
-            echo "    change the 'foamCompiler' setting to 'system'" 1>&2
+            echo "    change the 'WM_COMPILER_TYPE' setting to 'system'" 1>&2
             echo 1>&2
         }
 
@@ -354,15 +281,9 @@ system)
     # Use system compiler
     ;;
 *)
-    echo "Warn: foamCompiler='$foamCompiler' is unsupported" 1>&2
+    echo "Warn: WM_COMPILER_TYPE='$WM_COMPILER_TYPE' is unsupported" 1>&2
     echo "   treating as 'system' instead" 1>&2
     ;;
 esac
 
-
-# Cleanup environment:
-# ~~~~~~~~~~~~~~~~~~~~
-#keep _foamAddPath _foamAddLib _foamAddMan
-unset foamCompiler minBufferSize
-
 #------------------------------------------------------------------------------
-- 
GitLab