
- renamed develop version from 'plus' to 'develop' - patches now prefixed by corresponding OpenFOAM version number. This makes it easier to sort and see what old/junk exists. - remove MPI_BUFFER_SIZEk env variable (for all openfoam variants). The OpenFOAM shell setup addresses this and there is no reason to pollute the module environment at this stage.
504 lines
15 KiB
Diff
504 lines
15 KiB
Diff
--- OpenFOAM-v1612+.orig/bin/foamEtcFile 2016-12-23 15:22:59.000000000 +0100
|
|
+++ OpenFOAM-v1612+/bin/foamEtcFile 2017-03-23 10:08:37.296887070 +0100
|
|
@@ -4,7 +4,7 @@
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
|
-# \\/ M anipulation |
|
|
+# \\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
|
|
#-------------------------------------------------------------------------------
|
|
# License
|
|
# This file is part of OpenFOAM.
|
|
@@ -26,7 +26,7 @@
|
|
# foamEtcFile
|
|
#
|
|
# Description
|
|
-# Locate user/group/shipped file with semantics similar to the
|
|
+# Locate user/group/other files with semantics similar to the
|
|
# ~OpenFOAM/fileName expansion.
|
|
#
|
|
# The -mode option can be used to allow chaining from
|
|
@@ -34,40 +34,53 @@
|
|
#
|
|
# For example, within the user ~/.OpenFOAM/<VER>/prefs.sh:
|
|
# \code
|
|
-# foamPrefs=`$WM_PROJECT_DIR/bin/foamEtcFile -m go prefs.sh` \
|
|
-# && _foamSource $foamPrefs
|
|
+# eval $(foamEtcFile -sh -mode=go prefs.sh)
|
|
# \endcode
|
|
#
|
|
+# Environment
|
|
+# - WM_PROJECT: (unset defaults to OpenFOAM)
|
|
+# - WM_PROJECT_SITE: (unset defaults to PREFIX/site)
|
|
+# - WM_PROJECT_VERSION: (unset defaults to detect from path)
|
|
+#
|
|
# Note
|
|
-# This script must exist in $FOAM_INST_DIR/OpenFOAM-<VERSION>/bin/
|
|
-# or $FOAM_INST_DIR/openfoam<VERSION>/bin/ (for the debian version)
|
|
+# This script must exist in one of these locations:
|
|
+# - $WM_PROJECT_INST_DIR/OpenFOAM-<VERSION>/bin
|
|
+# - $WM_PROJECT_INST_DIR/openfoam-<VERSION>/bin
|
|
+# - $WM_PROJECT_INST_DIR/OpenFOAM+<VERSION>/bin
|
|
+# - $WM_PROJECT_INST_DIR/openfoam+<VERSION>/bin
|
|
+# - $WM_PROJECT_INST_DIR/openfoam<VERSION>/bin (debian version)
|
|
#
|
|
#-------------------------------------------------------------------------------
|
|
+unset optQuiet optSilent
|
|
usage() {
|
|
[ "${optQuiet:-$optSilent}" = true ] && exit 1
|
|
-
|
|
exec 1>&2
|
|
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
|
|
cat<<USAGE
|
|
|
|
-Usage: ${0##*/} [OPTION] fileName
|
|
- ${0##*/} [OPTION] -list
|
|
+Usage: foamEtcFile [OPTION] fileName
|
|
+ foamEtcFile [OPTION] [-list|-list-test] [fileName]
|
|
options:
|
|
- -all return all files (otherwise stop after the first match)
|
|
- -list list the directories to be searched
|
|
- -mode <mode> any combination of u(user), g(group), o(other)
|
|
- -prefix <dir> specify an alternative installation prefix
|
|
- -quiet suppress all normal output
|
|
- -silent suppress all stderr output
|
|
- -version <ver> specify an alternative OpenFOAM version
|
|
- in the form Maj.Min.Rev (eg, 1.7.0)
|
|
- -help print the usage
|
|
+ -a, -all Return all files (otherwise stop after the first match)
|
|
+ -l, -list List directories or files to be checked
|
|
+ -list-test List (existing) directories or files to be checked
|
|
+ -mode=MODE Any combination of u(user), g(group), o(other)
|
|
+ -prefix=DIR Specify an alternative installation prefix
|
|
+ -version=VER Specify alternative OpenFOAM version (eg, 3.0, 1612, ...)
|
|
+ -csh | -sh Produce output suitable for a csh or sh 'eval'
|
|
+ -csh-verbose | -sh-verbose
|
|
+ As per -csh | -sh, with additional verbosity
|
|
+ -q, -quiet Suppress all normal output
|
|
+ -s, -silent Suppress stderr, except -csh-verbose, -sh-verbose output
|
|
+ -help Print the usage
|
|
|
|
- Locate user/group/shipped file with semantics similar to the
|
|
+ Locate user/group/other file with semantics similar to the
|
|
~OpenFOAM/fileName expansion.
|
|
|
|
- The options can also be specified as a single character
|
|
- (eg, '-q' instead of '-quiet'), but must not be grouped.
|
|
+ Single character options must not be grouped. Equivalent options:
|
|
+ -mode=MODE, -mode MODE, -m MODE
|
|
+ -prefix=DIR, -prefix DIR, -p DIR
|
|
+ -version=VER, -version VER, -v VER
|
|
|
|
Exit status
|
|
0 when the file is found. Print resolved path to stdout.
|
|
@@ -78,61 +91,117 @@
|
|
exit 1
|
|
}
|
|
|
|
-#-------------------------------------------------------------------------------
|
|
+# Report error and exit
|
|
+die()
|
|
+{
|
|
+ [ "${optQuiet:-$optSilent}" = true ] && exit 1
|
|
+ exec 1>&2
|
|
+ echo
|
|
+ echo "Error encountered:"
|
|
+ while [ "$#" -ge 1 ]; do echo " $1"; shift; done
|
|
+ echo
|
|
+ echo "See 'foamEtcFile -help' for usage"
|
|
+ echo
|
|
+ exit 1
|
|
+}
|
|
|
|
-# the bin dir:
|
|
-binDir="${0%/*}"
|
|
+#-------------------------------------------------------------------------------
|
|
+binDir="${0%/*}" # The bin dir
|
|
+projectDir="${binDir%/bin}" # The project dir
|
|
+prefixDir="${projectDir%/*}" # The prefix dir (same as $WM_PROJECT_INST_DIR)
|
|
|
|
-# the project dir:
|
|
+# Could not resolve projectDir, prefixDir? (eg, called as ./bin/foamEtcFile)
|
|
+if [ "$prefixDir" = "$projectDir" ]
|
|
+then
|
|
+ binDir="$(cd $binDir && pwd -L)"
|
|
projectDir="${binDir%/bin}"
|
|
-
|
|
-# the prefix dir (same as $FOAM_INST_DIR):
|
|
prefixDir="${projectDir%/*}"
|
|
+fi
|
|
+projectDirName="${projectDir##*/}" # The project directory name
|
|
|
|
-# the name used for the project directory
|
|
-projectDirName="${projectDir##*/}"
|
|
+projectName="${WM_PROJECT:-OpenFOAM}" # The project name
|
|
+projectVersion="$WM_PROJECT_VERSION" # Empty? - will be treated later
|
|
|
|
-# version number used for debian packaging
|
|
-unset versionNum
|
|
|
|
+#-------------------------------------------------------------------------------
|
|
+
|
|
+# Guess project version or simply get the stem part of the projectDirName.
|
|
+# Handle standard and debian naming conventions.
|
|
#
|
|
-# handle standard and debian naming convention
|
|
+# - projectVersion: update unless already set
|
|
#
|
|
-case "$projectDirName" in
|
|
-OpenFOAM-*) # standard naming convention OpenFOAM-<VERSION>
|
|
- version="${projectDirName##OpenFOAM-}"
|
|
- ;;
|
|
+# Helper variables:
|
|
+# - dirBase (for reassembling name) == projectDirName without the version
|
|
+# - versionNum (debian packaging)
|
|
+unset dirBase versionNum
|
|
+guessVersion()
|
|
+{
|
|
+ local version
|
|
|
|
-openfoam[0-9]* | openfoam-dev) # debian naming convention 'openfoam<VERSION>'
|
|
- versionNum="${projectDirName##openfoam}"
|
|
- case "$versionNum" in
|
|
- ??) # convert 2 digit version number to decimal delineated
|
|
- version=$(echo "$versionNum" | sed -e 's@\(.\)\(.\)@\1.\2@')
|
|
- ;;
|
|
- ???) # convert 3 digit version number to decimal delineated
|
|
- version=$(echo "$versionNum" | sed -e 's@\(.\)\(.\)\(.\)@\1.\2.\3@')
|
|
- ;;
|
|
- ????) # convert 4 digit version number to decimal delineated
|
|
- version=$(echo "$versionNum" | sed -e 's@\(.\)\(.\)\(.\)\(.\)@\1.\2.\3.\4@')
|
|
- ;;
|
|
- *) # failback - use current environment setting
|
|
- version="$WM_PROJECT_VERSION"
|
|
+ case "$projectDirName" in
|
|
+ (OpenFOAM-* | openfoam-*)
|
|
+ # Standard naming: OpenFOAM-<VERSION> or openfoam-<VERSION>
|
|
+ dirBase="${projectDirName%%-*}-"
|
|
+ version="${projectDirName#*-}"
|
|
+ version="${version%%*-}" # Extra safety, eg openfoam-version-packager
|
|
+ ;;
|
|
+
|
|
+ (OpenFOAM+* | openfoam+*)
|
|
+ # Alternative naming: OpenFOAM+<VERSION> or openfoam+<VERSION>
|
|
+ dirBase="${projectDirName%%+*}+"
|
|
+ version="${projectDirName#*+}"
|
|
+ version="${version%%*-}" # Extra safety, eg openfoam-version-packager
|
|
+ ;;
|
|
+
|
|
+ (openfoam[0-9]*)
|
|
+ # Debian naming: openfoam<VERSION>
|
|
+ dirBase="openfoam"
|
|
+ version="${projectDirName#openfoam}"
|
|
+ versionNum="$version"
|
|
+
|
|
+ # Convert digits version number to decimal delineated
|
|
+ case "${#versionNum}" in (2|3|4)
|
|
+ version=$(echo "$versionNum" | sed -e 's@\([0-9]\)@\1.@g')
|
|
+ version="${version%.}"
|
|
;;
|
|
esac
|
|
+
|
|
+ # Ignore special treatment if no decimals were inserted.
|
|
+ [ "${#version}" -gt "${#versionNum}" ] || unset versionNum
|
|
;;
|
|
|
|
-*)
|
|
- echo "Error : unknown/unsupported naming convention"
|
|
- exit 1
|
|
+ (*)
|
|
+ die "unknown/unsupported naming convention for '$projectDirName'"
|
|
;;
|
|
esac
|
|
|
|
+ # Set projectVersion if required
|
|
+ : ${projectVersion:=$version}
|
|
+}
|
|
+
|
|
+
|
|
+# Set projectVersion and update versionNum, projectDirName accordingly
|
|
+setVersion()
|
|
+{
|
|
+ projectVersion="$1"
|
|
+
|
|
+ # Need dirBase when reassembling projectDirName
|
|
+ [ -n "$dirBase" ] || guessVersion
|
|
+
|
|
+ # Debian: update x.y.z -> xyz version
|
|
+ if [ -n "$versionNum" ]
|
|
+ then
|
|
+ versionNum=$(echo "$projectVersion" | sed -e 's@\.@@g')
|
|
+ fi
|
|
+
|
|
+ projectDirName="$dirBase${versionNum:-$projectVersion}"
|
|
+}
|
|
+
|
|
|
|
-# default mode is 'ugo'
|
|
-mode=ugo
|
|
-unset optAll optList optQuiet optSilent
|
|
+optMode=ugo # Default mode is always 'ugo'
|
|
+unset optAll optList optShell optVersion
|
|
|
|
-# parse options
|
|
+# Parse options
|
|
while [ "$#" -gt 0 ]
|
|
do
|
|
case "$1" in
|
|
@@ -141,27 +210,45 @@
|
|
;;
|
|
-a | -all)
|
|
optAll=true
|
|
+ unset optShell
|
|
;;
|
|
-l | -list)
|
|
optList=true
|
|
+ unset optShell
|
|
+ ;;
|
|
+ -list-test)
|
|
+ optList='test'
|
|
+ unset optShell
|
|
+ ;;
|
|
+ -csh | -sh | -csh-verbose | -sh-verbose)
|
|
+ optShell="${1#-}"
|
|
+ unset optAll
|
|
+ ;;
|
|
+ -mode=[ugo]*)
|
|
+ optMode="${1#*=}"
|
|
+ ;;
|
|
+ -prefix=/*)
|
|
+ prefixDir="${1#*=}"
|
|
+ prefixDir="${prefixDir%/}"
|
|
+ ;;
|
|
+ -version=*)
|
|
+ optVersion="${1#*=}"
|
|
;;
|
|
-m | -mode)
|
|
- [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
|
|
- mode="$2"
|
|
-
|
|
- # sanity check:
|
|
- case "$mode" in
|
|
- *u* | *g* | *o* )
|
|
+ optMode="$2"
|
|
+ shift
|
|
+ # Sanity check. Handles missing argument too.
|
|
+ case "$optMode" in
|
|
+ ([ugo]*)
|
|
;;
|
|
- *)
|
|
- usage "'$1' option with invalid mode '$mode'"
|
|
+ (*)
|
|
+ die "invalid mode '$optMode'"
|
|
;;
|
|
esac
|
|
- shift
|
|
;;
|
|
-p | -prefix)
|
|
- [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
|
|
- prefixDir="$2"
|
|
+ [ "$#" -ge 2 ] || die "'$1' option requires an argument"
|
|
+ prefixDir="${2%/}"
|
|
shift
|
|
;;
|
|
-q | -quiet)
|
|
@@ -171,13 +258,8 @@
|
|
optSilent=true
|
|
;;
|
|
-v | -version)
|
|
- [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
|
|
- version="$2"
|
|
- # convert x.y.z -> xyz version (if installation looked like debian)
|
|
- if [ -n "$versionNum" ]
|
|
- then
|
|
- versionNum=$(echo "$version" | sed -e 's@\.@@g')
|
|
- fi
|
|
+ [ "$#" -ge 2 ] || die "'$1' option requires an argument"
|
|
+ optVersion="$2"
|
|
shift
|
|
;;
|
|
--)
|
|
@@ -185,7 +267,7 @@
|
|
break
|
|
;;
|
|
-*)
|
|
- usage "unknown option: '$*'"
|
|
+ die "unknown option: '$1'"
|
|
;;
|
|
*)
|
|
break
|
|
@@ -195,11 +277,28 @@
|
|
done
|
|
|
|
|
|
-# debugging:
|
|
-# echo "Installed locations:"
|
|
-# for i in projectDir prefixDir projectDirName version versionNum
|
|
+#-------------------------------------------------------------------------------
|
|
+
|
|
+if [ -n "$optVersion" ]
|
|
+then
|
|
+ setVersion $optVersion
|
|
+elif [ -z "$projectVersion" ]
|
|
+then
|
|
+ guessVersion
|
|
+fi
|
|
+
|
|
+# Updates:
|
|
+# - projectDir for changes via -prefix or -version
|
|
+# - projectSite for changes via -prefix
|
|
+projectDir="$prefixDir/$projectDirName"
|
|
+projectSite="${WM_PROJECT_SITE:-$prefixDir/site}"
|
|
+
|
|
+
|
|
+# Debugging:
|
|
+# echo "Installed locations:" 1>&2
|
|
+# for i in projectDir prefixDir projectDirName projectVersion
|
|
# do
|
|
-# eval echo "$i=\$$i"
|
|
+# eval echo "$i=\$$i" 1>&2
|
|
# done
|
|
|
|
|
|
@@ -210,30 +309,18 @@
|
|
|
|
# Define the various places to be searched:
|
|
unset dirList
|
|
-case "$mode" in
|
|
-*u*) # user
|
|
- userDir="$HOME/.${WM_PROJECT:-OpenFOAM}"
|
|
- dirList="$dirList $userDir/$version $userDir"
|
|
+case "$optMode" in (*u*) # (U)ser
|
|
+ dirList="$dirList $HOME/.$projectName/$projectVersion $HOME/.$projectName"
|
|
;;
|
|
esac
|
|
|
|
-case "$mode" in
|
|
-*g*) # group (site)
|
|
- siteDir="${WM_PROJECT_SITE:-$prefixDir/site}"
|
|
- dirList="$dirList $siteDir/$version $siteDir"
|
|
+case "$optMode" in (*g*) # (G)roup == site
|
|
+ dirList="$dirList $projectSite/$projectVersion $projectSite"
|
|
;;
|
|
esac
|
|
|
|
-case "$mode" in
|
|
-*o*) # other (shipped)
|
|
- if [ -n "$versionNum" ]
|
|
- then
|
|
- # debian packaging
|
|
- dirList="$dirList $prefixDir/openfoam$versionNum/etc"
|
|
- else
|
|
- # standard packaging
|
|
- dirList="$dirList $prefixDir/${WM_PROJECT:-OpenFOAM}-$version/etc"
|
|
- fi
|
|
+case "$optMode" in (*o*) # (O)ther == shipped
|
|
+ dirList="$dirList $projectDir/etc"
|
|
;;
|
|
esac
|
|
set -- $dirList
|
|
@@ -244,50 +331,87 @@
|
|
#
|
|
|
|
exitCode=0
|
|
-if [ "$optList" = true ]
|
|
+if [ -n "$optList" ]
|
|
then
|
|
|
|
- # list directories, or potential file locations
|
|
- [ "$nArgs" -le 1 ] || usage
|
|
+ # List directories, or potential file locations
|
|
+ [ "$nArgs" -le 1 ] || \
|
|
+ die "-list expects 0 or 1 filename, but $nArgs provided"
|
|
+
|
|
+ # A silly combination, but -quiet does have precedence
|
|
+ [ -n "$optQuiet" ] && exit 0
|
|
|
|
- # a silly combination, but -quiet does have precedence
|
|
- [ "$optQuiet" = true ] && exit 0
|
|
+ # Test for directory or file too?
|
|
+ if [ "$optList" = "test" ]
|
|
+ then
|
|
+ exitCode=2 # Fallback to a general error (file not found)
|
|
|
|
+ if [ "$nArgs" -eq 1 ]
|
|
+ then
|
|
for dir
|
|
do
|
|
- if [ "$nArgs" -eq 1 ]
|
|
+ resolved="$dir/$fileName"
|
|
+ if [ -f "$resolved" ]
|
|
then
|
|
- echo "$dir/$fileName"
|
|
+ echo "$resolved"
|
|
+ exitCode=0 # OK
|
|
+ fi
|
|
+ done
|
|
else
|
|
+ for dir
|
|
+ do
|
|
+ if [ -d "$dir" ]
|
|
+ then
|
|
echo "$dir"
|
|
+ exitCode=0 # OK
|
|
fi
|
|
done
|
|
+ fi
|
|
+ else
|
|
+ for dir
|
|
+ do
|
|
+ echo "$dir${fileName:+/}$fileName"
|
|
+ done
|
|
+ fi
|
|
|
|
else
|
|
|
|
- [ "$nArgs" -eq 1 ] || usage
|
|
+ [ "$nArgs" -eq 1 ] || die "One filename expected - $nArgs provided"
|
|
|
|
- # general error, eg file not found
|
|
- exitCode=2
|
|
+ exitCode=2 # Fallback to a general error (file not found)
|
|
|
|
for dir
|
|
do
|
|
if [ -f "$dir/$fileName" ]
|
|
then
|
|
exitCode=0
|
|
- if [ "$optQuiet" = true ]
|
|
- then
|
|
+ [ -n "$optQuiet" ] && break
|
|
+
|
|
+ case "$optShell" in
|
|
+ (*verbose)
|
|
+ echo "Using: $dir/$fileName" 1>&2
|
|
+ ;;
|
|
+ esac
|
|
+
|
|
+ case "$optShell" in
|
|
+ csh*)
|
|
+ echo "source $dir/$fileName"
|
|
break
|
|
- else
|
|
+ ;;
|
|
+ sh*)
|
|
+ echo ". $dir/$fileName"
|
|
+ break
|
|
+ ;;
|
|
+ *)
|
|
echo "$dir/$fileName"
|
|
- [ "$optAll" = true ] || break
|
|
- fi
|
|
+ [ -n "$optAll" ] || break
|
|
+ ;;
|
|
+ esac
|
|
fi
|
|
done
|
|
|
|
fi
|
|
|
|
-
|
|
exit $exitCode
|
|
|
|
#------------------------------------------------------------------------------
|