From a79d28ab76e31b8bb94f1f020a4696b64deb25b3 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Thu, 29 Nov 2018 18:04:44 +0100
Subject: [PATCH] ENH: relocate WM_PROJECT_SITE default (issue #1050)

- was PREFIX/site, now PROJECT/site

  This avoids several issues when installing OpenFOAM in clusters
  without an intermediate OpenFOAM-specific installation prefix.

  The 'site' directory may have a reserved meaning in these situations
  and it is undesirable to 'leak' upwards into the parent directory to
  look for configuration files.

  Placing the default within the project directory avoids this.
  Alternative locations can be given via the WM_PROJECT_SITE variable.
---
 bin/foamLog                             | 2 +-
 bin/foamNewCase                         | 7 ++++---
 bin/tools/change-sitedir.sh             | 4 ++--
 doc/codingStyleGuide.org                | 4 ++--
 etc/bashrc                              | 4 +++-
 etc/config.csh/settings                 | 5 ++---
 etc/config.sh/settings                  | 5 ++---
 etc/cshrc                               | 4 +++-
 src/OpenFOAM/global/etcFiles/etcFiles.C | 2 +-
 src/OpenFOAM/global/etcFiles/etcFiles.H | 2 +-
 src/OpenFOAM/include/foamVersion.H      | 9 ++-------
 11 files changed, 23 insertions(+), 25 deletions(-)

diff --git a/bin/foamLog b/bin/foamLog
index facdf58607..b3beddcbb0 100755
--- a/bin/foamLog
+++ b/bin/foamLog
@@ -31,7 +31,7 @@
 #------------------------------------------------------------------------------
 Script=${0##*/}
 toolsDir=${0%/*}/tools
-siteDir=${WM_PROJECT_SITE:-${WM_PROJECT_INST_DIR:-<unknown>}/site}
+siteDir="${WM_PROJECT_SITE:-${WM_PROJECT_DIR:-<unknown>}/site}"
 userDir=$HOME/.OpenFOAM
 
 usage() {
diff --git a/bin/foamNewCase b/bin/foamNewCase
index 2b88170dd1..902b082ca1 100755
--- a/bin/foamNewCase
+++ b/bin/foamNewCase
@@ -30,9 +30,10 @@
 #     - requires rsync
 #
 #------------------------------------------------------------------------------
-siteDir=${WM_PROJECT_SITE:-${WM_PROJECT_INST_DIR:-<unknown>}/site}
-userDir=$HOME/.OpenFOAM
-version=${WM_PROJECT_VERSION:-unknown}
+siteDir="${WM_PROJECT_SITE:-${WM_PROJECT_DIR:-<unknown>}/site}"
+userDir="$HOME/.OpenFOAM"
+version="${WM_PROJECT_VERSION:-unknown}"
+
 templateDir="appTemplates"
 
 #------------------------------------------------------------------------------
diff --git a/bin/tools/change-sitedir.sh b/bin/tools/change-sitedir.sh
index 61d9c3ea8b..220f1225d2 100644
--- a/bin/tools/change-sitedir.sh
+++ b/bin/tools/change-sitedir.sh
@@ -42,11 +42,11 @@
 #     The suffix value should normally include "platforms/$WM_OPTIONS"
 #
 # Example
-#     . /path/change-sitedir.sh -prefix -platforms
+#     . /path/change-sitedir.sh -project -platforms
 #
 #   corresponds to the standard site location:
 #
-#     $WM_PROJECT_INST_DIR/site{/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS}
+#     $WM_PROJECT_DIR/site{/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS}
 #
 #------------------------------------------------------------------------------
 
diff --git a/doc/codingStyleGuide.org b/doc/codingStyleGuide.org
index 1421552021..4df1aa03b4 100644
--- a/doc/codingStyleGuide.org
+++ b/doc/codingStyleGuide.org
@@ -115,9 +115,9 @@
         //    - ~/.OpenFOAM/
         //      <em>for version-independent files</em>
         //  -# group settings
-        //    - $WM_PROJECT_INST_DIR/site/\<VERSION\>
+        //    - $WM_PROJECT_DIR/site/\<VERSION\>
         //      <em>for version-specific files</em>
-        //    - $WM_PROJECT_INST_DIR/site/
+        //    - $WM_PROJECT_DIR/site/
         //      <em>for version-independent files</em>
         //  -# other (shipped) settings
         //    - $WM_PROJECT_DIR/etc/
diff --git a/etc/bashrc b/etc/bashrc
index cfb47547f9..3f316875f5 100644
--- a/etc/bashrc
+++ b/etc/bashrc
@@ -134,7 +134,9 @@ export WM_THIRD_PARTY_DIR=$WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION
 export WM_PROJECT_USER_DIR=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION
 
 # [WM_PROJECT_SITE] - Location of site-specific (group) files
-# default (unset) implies WM_PROJECT_INST_DIR/site
+# Default (unset) implies WM_PROJECT_DIR/site
+# Normally defined in calling environment
+
 if [ -d "$WM_PROJECT_SITE" ]
 then
     export WM_PROJECT_SITE
diff --git a/etc/config.csh/settings b/etc/config.csh/settings
index 4fe574cef9..be1103bd08 100644
--- a/etc/config.csh/settings
+++ b/etc/config.csh/settings
@@ -154,7 +154,7 @@ setenv FOAM_EXT_LIBBIN $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRE
 if ( $?WM_PROJECT_SITE ) then
     set siteDir=$WM_PROJECT_SITE
 else
-    set siteDir=$WM_PROJECT_INST_DIR/site
+    set siteDir=$WM_PROJECT_DIR/site
 endif
 
 # Shared site (group) executables/libraries
@@ -177,7 +177,6 @@ endif
 if ( -d "$siteDir/$WM_PROJECT_VERSION/bin" ) then   # Version-specific
     _foamAddPath "$siteDir/$WM_PROJECT_VERSION/bin"
 endif
-unset siteDir
 
 _foamAddPath ${FOAM_USER_APPBIN}:${FOAM_SITE_APPBIN}:${FOAM_APPBIN}
 _foamAddLib  $FOAM_LIBBIN/dummy     # Dummy versions of external libraries last
@@ -333,7 +332,7 @@ endsw
 
 # Cleanup
 # ~~~~~~~
-unset archDir
+unset archDir siteDir
 unset gcc_version gccDir
 unset gmp_version gmpDir  mpfr_version mpfrDir  mpc_version mpcDir
 unset clang_version clangDir
diff --git a/etc/config.sh/settings b/etc/config.sh/settings
index f1789ca4df..d2de700c3d 100644
--- a/etc/config.sh/settings
+++ b/etc/config.sh/settings
@@ -148,7 +148,7 @@ if [ -n "$WM_PROJECT_SITE" ]
 then
     siteDir=$WM_PROJECT_SITE
 else
-    siteDir=$WM_PROJECT_INST_DIR/site
+    siteDir=$WM_PROJECT_DIR/site
 fi
 
 # Shared site (group) executables/libraries
@@ -173,7 +173,6 @@ if [ -d "$siteDir/$WM_PROJECT_VERSION/bin" ]    # Version-specific
 then
     _foamAddPath "$siteDir/$WM_PROJECT_VERSION/bin"
 fi
-unset siteDir
 
 _foamAddPath $FOAM_USER_APPBIN:$FOAM_SITE_APPBIN:$FOAM_APPBIN
 _foamAddLib  $FOAM_LIBBIN/dummy     # Dummy versions of external libraries last
@@ -321,7 +320,7 @@ esac
 
 # Cleanup
 # ~~~~~~~
-unset archDir
+unset archDir siteDir
 unset gcc_version gccDir
 unset gmp_version gmpDir  mpfr_version mpfrDir  mpc_version mpcDir
 unset clang_version clangDir
diff --git a/etc/cshrc b/etc/cshrc
index a8da076288..56f0239972 100644
--- a/etc/cshrc
+++ b/etc/cshrc
@@ -145,7 +145,9 @@ setenv WM_THIRD_PARTY_DIR  $WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION
 setenv WM_PROJECT_USER_DIR "$HOME/$WM_PROJECT/$LOGNAME-$WM_PROJECT_VERSION"
 
 # [WM_PROJECT_SITE] - Location of site-specific (group) files
-# default (unset) implies WM_PROJECT_INST_DIR/site
+# Default (unset) implies WM_PROJECT_DIR/site
+# Normally defined in calling environment
+
 if ( $?WM_PROJECT_SITE ) then
     set foamOldDirs="$WM_PROJECT_SITE $foamOldDirs"
     if ( ! -d "$WM_PROJECT_SITE" ) unsetenv WM_PROJECT_SITE
diff --git a/src/OpenFOAM/global/etcFiles/etcFiles.C b/src/OpenFOAM/global/etcFiles/etcFiles.C
index 6e23b80b34..9d2f28c86c 100644
--- a/src/OpenFOAM/global/etcFiles/etcFiles.C
+++ b/src/OpenFOAM/global/etcFiles/etcFiles.C
@@ -68,7 +68,7 @@ static inline bool userResourceDir(Foam::fileName& queried)
 // Corresponds to foamEtcFile -mode=g
 // Looks for
 //   - $WM_PROJECT_SITE
-//   - $WM_PROJECT_INST_DIR/site
+//   - $WM_PROJECT_DIR/site
 static inline bool groupResourceDir(Foam::fileName& queried)
 {
     #ifdef FOAM_RESOURCE_SITE_ENVNAME
diff --git a/src/OpenFOAM/global/etcFiles/etcFiles.H b/src/OpenFOAM/global/etcFiles/etcFiles.H
index f88ac509bf..859c1010b5 100644
--- a/src/OpenFOAM/global/etcFiles/etcFiles.H
+++ b/src/OpenFOAM/global/etcFiles/etcFiles.H
@@ -71,7 +71,7 @@ fileNameList findEtcDirs
 //
 //  \note Treatment of empty or undefined variables
 //  - \b \$WM_PROJECT_VERSION : Use compile-time value of OPENFOAM
-//  - \b \$WM_PROJECT_SITE : Use $WM_PROJECT_INST_DIR/site
+//  - \b \$WM_PROJECT_SITE : Use $WM_PROJECT_DIR/site
 //
 //  \return The list of full paths of all the matching files or
 //      an empty list if the name cannot be found.
diff --git a/src/OpenFOAM/include/foamVersion.H b/src/OpenFOAM/include/foamVersion.H
index 37df0a8377..90e3d5dd31 100644
--- a/src/OpenFOAM/include/foamVersion.H
+++ b/src/OpenFOAM/include/foamVersion.H
@@ -66,14 +66,9 @@ SourceFiles
 //- when the directory corresponding to FOAM_RESOURCE_SITE_ENVNAME is empty.
 //  The fallback search appends "/site" to the directory.
 //
-//  Default: "WM_PROJECT_INST_DIR"
-//
-//  \note If packaging OpenFOAM into a single directory (eg, spack, EasyBuild),
-//      this should be changed to "WM_PROJECT_DIR" to avoid searching within
-//      the prefix (parent) directory.
-//
+//  Default: "WM_PROJECT_DIR"
 //  Used by foamEtcFiles() and stringOps::expand()
-#define FOAM_RESOURCE_SITE_FALLBACK_ENVNAME "WM_PROJECT_INST_DIR"
+#define FOAM_RESOURCE_SITE_FALLBACK_ENVNAME "WM_PROJECT_DIR"
 
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-- 
GitLab