296 lines
7.2 KiB
Bash
Executable File
296 lines
7.2 KiB
Bash
Executable File
#!/bin/sh
|
|
#------------------------------------------------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
|
# \\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
|
|
#-------------------------------------------------------------------------------
|
|
# 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/>.
|
|
#
|
|
# Script
|
|
# foamEtcFile
|
|
#
|
|
# Description
|
|
# Locate user/group/shipped file with semantics similar to the
|
|
# ~OpenFOAM/fileName expansion.
|
|
#
|
|
# The -mode option can be used to allow chaining from
|
|
# personal settings to site-wide settings.
|
|
#
|
|
# For example, within the user ~/.OpenFOAM/<VER>/prefs.sh:
|
|
# \code
|
|
# foamFile=$(foamEtcFile -mode go prefs.sh) && . $foamFile
|
|
# \endcode
|
|
#
|
|
# Note
|
|
# This script must exist in $FOAM_INST_DIR/OpenFOAM-<VERSION>/bin/
|
|
# or $FOAM_INST_DIR/openfoam<VERSION>/bin/ (for the 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
|
|
options:
|
|
-a, -all return all files (otherwise stop after the first match)
|
|
-l, -list list the directories to be searched
|
|
-m, -mode MODE any combination of u(user), g(group), o(other)
|
|
-p, -prefix DIR specify an alternative installation prefix
|
|
-q, -quiet suppress all normal output
|
|
-s, -silent suppress all stderr output
|
|
-v, -version VER specify an alternative OpenFOAM version (eg, 3.0, 1612, ...)
|
|
-help print the usage
|
|
|
|
Locate user/group/shipped file with semantics similar to the
|
|
~OpenFOAM/fileName expansion.
|
|
|
|
Many options can be specified as a single character, but must not be grouped.
|
|
|
|
Exit status
|
|
0 when the file is found. Print resolved path to stdout.
|
|
1 for miscellaneous errors.
|
|
2 when the file is not found.
|
|
|
|
USAGE
|
|
exit 1
|
|
}
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# The bin dir:
|
|
binDir="${0%/*}"
|
|
|
|
# The project dir:
|
|
projectDir="${binDir%/bin}"
|
|
|
|
# The prefix dir (same as $FOAM_INST_DIR):
|
|
prefixDir="${projectDir%/*}"
|
|
|
|
# The name used for the project directory
|
|
projectDirName="${projectDir##*/}"
|
|
|
|
# versionNum used for debian packaging
|
|
unset version versionNum
|
|
|
|
#
|
|
# Handle standard and debian naming conventions
|
|
# - set version (always) and versionNum (debian only)
|
|
#
|
|
case "$projectDirName" in
|
|
OpenFOAM-*) # standard naming: OpenFOAM-<VERSION>
|
|
version="${projectDirName##OpenFOAM-}"
|
|
;;
|
|
|
|
openfoam[0-9]* | openfoam-dev) # debian naming: openfoam<VERSION>
|
|
versionNum="${projectDirName##openfoam}"
|
|
case "${#versionNum}" in
|
|
(2|3|4) # Convert digits version number to decimal delineated
|
|
version=$(echo "$versionNum" | sed -e 's@\([0-9]\)@\1.@g')
|
|
version="${version%.}"
|
|
;;
|
|
|
|
(*) # Fallback - use current environment setting
|
|
version="$WM_PROJECT_VERSION"
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
*)
|
|
echo "${0##*/} Error : unknown/unsupported naming convention" 1>&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
|
|
# Default mode is always 'ugo'
|
|
mode=ugo
|
|
unset optAll optList
|
|
|
|
# parse options
|
|
while [ "$#" -gt 0 ]
|
|
do
|
|
case "$1" in
|
|
-h | -help)
|
|
usage
|
|
;;
|
|
-a | -all)
|
|
optAll=true
|
|
;;
|
|
-l | -list)
|
|
optList=true
|
|
;;
|
|
-mode=[ugo]*)
|
|
mode="${1#-mode=}"
|
|
;;
|
|
-prefix=/*)
|
|
prefixDir="${1#-prefix=}"
|
|
prefixDir="${prefixDir%/}"
|
|
;;
|
|
-version=*)
|
|
version="${1#-version=}"
|
|
# convert x.y.z -> xyz version (if installation looked like debian)
|
|
if [ -n "$versionNum" ]
|
|
then
|
|
versionNum=$(echo "$version" | sed -e 's@\.@@g')
|
|
fi
|
|
;;
|
|
-m | -mode)
|
|
mode="$2"
|
|
# Sanity check. Handles missing argument too.
|
|
case "$mode" in
|
|
[ugo]*)
|
|
;;
|
|
*)
|
|
usage "invalid mode '$mode'"
|
|
;;
|
|
esac
|
|
shift
|
|
;;
|
|
-p | -prefix)
|
|
[ "$#" -ge 2 ] || usage "'$1' option requires an argument"
|
|
prefixDir="${2%/}"
|
|
shift
|
|
;;
|
|
-q | -quiet)
|
|
optQuiet=true
|
|
;;
|
|
-s | -silent)
|
|
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
|
|
shift
|
|
;;
|
|
--)
|
|
shift
|
|
break
|
|
;;
|
|
-*)
|
|
usage "unknown option: '$1'"
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# Update projectDir accordingly
|
|
if [ -n "$versionNum" ]
|
|
then
|
|
projectDir="$prefixDir/openfoam$versionNum" # debian
|
|
else
|
|
projectDir="$prefixDir/${WM_PROJECT:-OpenFOAM}-$version" # standard
|
|
fi
|
|
|
|
|
|
# debugging:
|
|
# echo "Installed locations:"
|
|
# for i in projectDir prefixDir projectDirName version versionNum
|
|
# do
|
|
# eval echo "$i=\$$i"
|
|
# done
|
|
|
|
|
|
# Save the essential bits of information
|
|
# silently remove leading ~OpenFOAM/ (used in Foam::findEtcFile)
|
|
nArgs=$#
|
|
fileName="${1#~OpenFOAM/}"
|
|
|
|
# Define the various places to be searched:
|
|
unset dirList
|
|
case "$mode" in (*u*) # user
|
|
dir="$HOME/.${WM_PROJECT:-OpenFOAM}"
|
|
dirList="$dirList $dir/$version $dir"
|
|
;;
|
|
esac
|
|
|
|
case "$mode" in (*g*) # group (site)
|
|
dir="${WM_PROJECT_SITE:-$prefixDir/site}"
|
|
dirList="$dirList $dir/$version $dir"
|
|
;;
|
|
esac
|
|
|
|
case "$mode" in (*o*) # other (shipped)
|
|
dirList="$dirList $projectDir/etc"
|
|
;;
|
|
esac
|
|
set -- $dirList
|
|
|
|
|
|
#
|
|
# The main routine
|
|
#
|
|
|
|
exitCode=0
|
|
if [ "$optList" = true ]
|
|
then
|
|
|
|
# list directories, or potential file locations
|
|
[ "$nArgs" -le 1 ] || usage
|
|
|
|
# a silly combination, but -quiet does have precedence
|
|
[ "$optQuiet" = true ] && exit 0
|
|
|
|
for dir
|
|
do
|
|
if [ "$nArgs" -eq 1 ]
|
|
then
|
|
echo "$dir/$fileName"
|
|
else
|
|
echo "$dir"
|
|
fi
|
|
done
|
|
|
|
else
|
|
|
|
[ "$nArgs" -eq 1 ] || usage
|
|
|
|
# general error, eg file not found
|
|
exitCode=2
|
|
|
|
for dir
|
|
do
|
|
if [ -f "$dir/$fileName" ]
|
|
then
|
|
exitCode=0
|
|
[ "$optQuiet" = true ] && break
|
|
|
|
echo "$dir/$fileName"
|
|
[ "$optAll" = true ] || break
|
|
fi
|
|
done
|
|
|
|
fi
|
|
|
|
|
|
exit $exitCode
|
|
|
|
#------------------------------------------------------------------------------
|