diff --git a/bin/foamEtcFile b/bin/foamEtcFile index 20b5be0fedf56828b9adb63e91e37c187874a090..a6859b6ae5a1a4f52e4b4084937acf8c1c0016de 100755 --- a/bin/foamEtcFile +++ b/bin/foamEtcFile @@ -204,15 +204,15 @@ fileName="${1#~OpenFOAM/}" unset dirList case "$mode" in *u*) # user - dirList="$dirList $HOME/.${WM_PROJECT:-OpenFOAM}/$version" - dirList="$dirList $HOME/.${WM_PROJECT:-OpenFOAM}" + userDir="$HOME/.${WM_PROJECT:-OpenFOAM}" + dirList="$dirList $userDir/$version $userDir" ;; esac case "$mode" in -*g*) # group - dirList="$dirList $prefixDir/site/$version" - dirList="$dirList $prefixDir/site" +*g*) # group (site) + siteDir="${WM_PROJECT_SITE:-$prefixDir/site}" + dirList="$dirList $siteDir/$version $siteDir" ;; esac diff --git a/bin/foamLog b/bin/foamLog index b5ca4900b0caa6fe9ea851e2463db9f5c524c44d..c86dce622da99aa4c2cb7abf6748b61cc41b18b9 100755 --- a/bin/foamLog +++ b/bin/foamLog @@ -33,6 +33,8 @@ #------------------------------------------------------------------------------ Script=${0##*/} toolsDir=${0%/*}/tools +siteDir=${WM_PROJECT_SITE:-${WM_PROJECT_INST_DIR:-<unknown>}/site} +userDir=$HOME/.OpenFOAM usage() { exec 1>&2 @@ -84,10 +86,10 @@ The value taken will be the first (non-space)word after this column. The database ($Script.db) will taken from these locations: . - $HOME/.OpenFOAM/$WM_PROJECT_VERSION - $HOME/.OpenFOAM - $WM_PROJECT_INST_DIR/site/$WM_PROJECT_VERSION - $WM_PROJECT_INST_DIR/site + $userDir/$WM_PROJECT_VERSION + $userDir + $siteDir/$WM_PROJECT_VERSION + $siteDir $WM_PROJECT_DIR/etc $toolsDir diff --git a/bin/foamNewCase b/bin/foamNewCase index fda86b4bddaafabeca9c4ffa3dd6d3e7396cf6e7..3abbd76e1ef84b10b9fea0367d78fb465f8c7c12 100755 --- a/bin/foamNewCase +++ b/bin/foamNewCase @@ -30,7 +30,7 @@ # - requires rsync # #------------------------------------------------------------------------------ -siteDir=${WM_PROJECT_INST_DIR:-unknown}/site +siteDir=${WM_PROJECT_SITE:-${WM_PROJECT_INST_DIR:-<unknown>}/site} userDir=$HOME/.OpenFOAM version=${WM_PROJECT_VERSION:-unknown} templateDir="appTemplates" diff --git a/etc/aliases.csh b/etc/aliases.csh index 76baa715855e3e481c93ba5b0556fc1a32f57cd5..314810bef659e79397c73367941a4108b2256c24 100644 --- a/etc/aliases.csh +++ b/etc/aliases.csh @@ -67,6 +67,11 @@ alias foamSol 'cd $FOAM_SOLVERS' alias foamTuts 'cd $FOAM_TUTORIALS' alias foamUtils 'cd $FOAM_UTILITIES' alias foam3rdParty 'cd $WM_THIRD_PARTY_DIR' -alias foamSite 'cd $WM_PROJECT_INST_DIR/site' + +if ( $?WM_PROJECT_SITE ) then + alias foamSite 'cd $WM_PROJECT_SITE' +else + alias foamSite 'cd $WM_PROJECT_INST_DIR/site' +endif # ----------------------------------------------------------------------------- diff --git a/etc/aliases.sh b/etc/aliases.sh index c3d05d4a72a4ea89f92cc2f2f4f0761e23b8d1de..2f3898a90ecc12e09d7e282918452b71741e9fdf 100644 --- a/etc/aliases.sh +++ b/etc/aliases.sh @@ -72,6 +72,12 @@ alias foamSol='cd $FOAM_SOLVERS' alias foamTuts='cd $FOAM_TUTORIALS' alias foamUtils='cd $FOAM_UTILITIES' alias foam3rdParty='cd $WM_THIRD_PARTY_DIR' -alias foamSite='cd $WM_PROJECT_INST_DIR/site' + +if [ -n "$WM_PROJECT_SITE" ] +then + alias foamSite='cd $WM_PROJECT_SITE' +else + alias foamSite='cd $WM_PROJECT_INST_DIR/site' +fi # ----------------------------------------------------------------------------- diff --git a/etc/settings.csh b/etc/settings.csh index 5a6b6c273a78b9424eca62966190ae3864afe343..ae4da934d9efd4aaf8f653b1d608a4b85911e5af 100644 --- a/etc/settings.csh +++ b/etc/settings.csh @@ -148,6 +148,9 @@ setenv FOAM_LIBBIN $WM_PROJECT_DIR/platforms/$WM_OPTIONS/lib # external (ThirdParty) libraries setenv FOAM_EXT_LIBBIN $WM_THIRD_PARTY_DIR/platforms/$WM_OPTIONS/lib +# default location of site-specific templates etc +# setenv WM_PROJECT_SITE $WM_PROJECT_INST_DIR/site + # shared site executables/libraries # similar naming convention as ~OpenFOAM expansion setenv FOAM_SITE_APPBIN $WM_PROJECT_INST_DIR/site/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS/bin diff --git a/etc/settings.sh b/etc/settings.sh index e86de7de25e1cb4c27cd3bed0384284d43a789bd..17c8c091ee57a187f7c2bc9a59e74a1ddb3085eb 100644 --- a/etc/settings.sh +++ b/etc/settings.sh @@ -169,6 +169,9 @@ export FOAM_LIBBIN=$WM_PROJECT_DIR/platforms/$WM_OPTIONS/lib # external (ThirdParty) libraries export FOAM_EXT_LIBBIN=$WM_THIRD_PARTY_DIR/platforms/$WM_OPTIONS/lib +# default location of site-specific templates etc +# export WM_PROJECT_SITE=$WM_PROJECT_INST_DIR/site + # shared site executables/libraries # similar naming convention as ~OpenFOAM expansion export FOAM_SITE_APPBIN=$WM_PROJECT_INST_DIR/site/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS/bin diff --git a/src/OSspecific/POSIX/POSIX.C b/src/OSspecific/POSIX/POSIX.C index e6e54c32c055aa298ea10c417d861b86d1997af3..ff4c2e84ee1d6d973c6598bbd710931f5a0cb4e3 100644 --- a/src/OSspecific/POSIX/POSIX.C +++ b/src/OSspecific/POSIX/POSIX.C @@ -253,19 +253,20 @@ bool Foam::chDir(const fileName& dir) Foam::fileName Foam::findEtcFile(const fileName& name, bool mandatory) { - // Search user files: - // ~~~~~~~~~~~~~~~~~~ + // + // search for user files in + // * ~/.OpenFOAM/VERSION + // * ~/.OpenFOAM + // fileName searchDir = home()/".OpenFOAM"; if (isDir(searchDir)) { - // Check for user file in ~/.OpenFOAM/VERSION fileName fullName = searchDir/FOAMversion/name; if (isFile(fullName)) { return fullName; } - // Check for version-independent user file in ~/.OpenFOAM fullName = searchDir/name; if (isFile(fullName)) { @@ -274,32 +275,61 @@ Foam::fileName Foam::findEtcFile(const fileName& name, bool mandatory) } - // Search site files: - // ~~~~~~~~~~~~~~~~~~ - searchDir = getEnv("WM_PROJECT_INST_DIR"); - if (isDir(searchDir)) + // + // search for group (site) files in + // * $WM_PROJECT_SITE/VERSION + // * $WM_PROJECT_SITE + // + searchDir = getEnv("WM_PROJECT_SITE"); + if (searchDir.size()) { - // Check for site file in $WM_PROJECT_INST_DIR/site/VERSION - fileName fullName = searchDir/"site"/FOAMversion/name; - if (isFile(fullName)) + if (isDir(searchDir)) { - return fullName; - } + fileName fullName = searchDir/FOAMversion/name; + if (isFile(fullName)) + { + return fullName; + } - // Check for version-independent site file in $WM_PROJECT_INST_DIR/site - fullName = searchDir/"site"/name; - if (isFile(fullName)) + fullName = searchDir/name; + if (isFile(fullName)) + { + return fullName; + } + } + } + else + { + // + // OR search for group (site) files in + // * $WM_PROJECT_INST_DIR/site/VERSION + // * $WM_PROJECT_INST_DIR/site + // + searchDir = getEnv("WM_PROJECT_INST_DIR"); + if (isDir(searchDir)) { - return fullName; + fileName fullName = searchDir/"site"/FOAMversion/name; + if (isFile(fullName)) + { + return fullName; + } + + fullName = searchDir/"site"/name; + if (isFile(fullName)) + { + return fullName; + } } } - // Search installation files: - // ~~~~~~~~~~~~~~~~~~~~~~~~~~ + + // + // search for other (shipped) files in + // * $WM_PROJECT_DIR/etc + // searchDir = getEnv("WM_PROJECT_DIR"); if (isDir(searchDir)) { - // Check for shipped OpenFOAM file in $WM_PROJECT_DIR/etc fileName fullName = searchDir/"etc"/name; if (isFile(fullName)) { @@ -311,7 +341,8 @@ Foam::fileName Foam::findEtcFile(const fileName& name, bool mandatory) // abort if the file is mandatory, otherwise return null if (mandatory) { - std::cerr<< "--> FOAM FATAL ERROR in Foam::findEtcFile() :" + std::cerr + << "--> FOAM FATAL ERROR in Foam::findEtcFile() :" " could not find mandatory file\n '" << name.c_str() << "'\n\n" << std::endl; ::exit(1); diff --git a/src/OpenFOAM/include/OSspecific.H b/src/OpenFOAM/include/OSspecific.H index d68ae1661dbb052f12889e3714b083f853cc429b..ec1d5bdcc30c54f302f0d75e3cf53e04db301674 100644 --- a/src/OpenFOAM/include/OSspecific.H +++ b/src/OpenFOAM/include/OSspecific.H @@ -93,22 +93,22 @@ fileName cwd(); // else return false bool chDir(const fileName& dir); -//- Search for \em name -// in the following hierarchy: -// -# personal settings: -// - ~/.OpenFOAM/\<VERSION\>/ -// <em>for version-specific files</em> +//- Search for a file from user/group/shipped directories. +// The search scheme allows for version-specific and +// version-independent files using the following hierarchy: +// - \b user settings: +// - ~/.OpenFOAM/\<VERSION\> // - ~/.OpenFOAM/ -// <em>for version-independent files</em> -// -# site-wide settings: +// - \b group (site) settings (when $WM_PROJECT_SITE is set): +// - $WM_PROJECT_SITE/\<VERSION\> +// - $WM_PROJECT_SITE +// - \b group (site) settings (when $WM_PROJECT_SITE is not set): // - $WM_PROJECT_INST_DIR/site/\<VERSION\> -// <em>for version-specific files</em> // - $WM_PROJECT_INST_DIR/site/ -// <em>for version-independent files</em> -// -# shipped settings: +// - \b other (shipped) settings: // - $WM_PROJECT_DIR/etc/ // -// \return the full path name or fileName() if the name cannot be found +// \return The full path name or fileName() if the name cannot be found // Optionally abort if the file cannot be found fileName findEtcFile(const fileName&, bool mandatory=false);