From 5f910c4d02b91012054bdbedb6512ced919c3813 Mon Sep 17 00:00:00 2001 From: openfoam-maintainance Date: Mon, 4 Oct 2010 14:13:26 +0200 Subject: [PATCH] Backport the prefs.sh-facility from 1.7.x --HG-- branch : bgschaidMac --- bin/foamEtcFile | 277 ++++++++++++++++++++++++++++++++++++++++++ etc/bashrc | 41 +++++-- etc/cshrc | 27 +++- etc/prefs.csh-EXAMPLE | 52 ++++++++ etc/prefs.sh-EXAMPLE | 52 ++++++++ 5 files changed, 437 insertions(+), 12 deletions(-) create mode 100755 bin/foamEtcFile create mode 100644 etc/prefs.csh-EXAMPLE create mode 100644 etc/prefs.sh-EXAMPLE diff --git a/bin/foamEtcFile b/bin/foamEtcFile new file mode 100755 index 000000000..5bae566b5 --- /dev/null +++ b/bin/foamEtcFile @@ -0,0 +1,277 @@ +#!/bin/sh +#------------------------------------------------------------------------------ +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2008-2010 OpenCFD Ltd. +# \\/ 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 . +# +# 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//prefs.sh: +# @verbatim +# foamPrefs=`$WM_PROJECT_DIR/bin/foamEtcFile -m go prefs.sh` \ +# && _foamSource $foamPrefs +# @endverbatim +# +#------------------------------------------------------------------------------- +usage() { + [ "$quietOpt" = true ] && exit 1 + + exec 1>&2 + while [ "$#" -ge 1 ]; do echo "$1"; shift; done + cat< any combination of u(user), g(group), o(other) + -prefix specify an alternative installation prefix + -quiet suppress all normal output + -version specify an alternative OpenFOAM version + in the form Maj.Min.Rev (eg, 1.7.0) + -help print the usage + + Locate user/group/shipped 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. + + 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 +} + +# +# This script must exist in /OpenFOAM-/bin/ +# or /openfoam/bin/ (for the debian version) +# +#------------------------------------------------------------------------------- + +# the bindir: +binDir="${0%/*}" + +# the project dir: +projectDir="${binDir%/bin}" + +# the prefix dir (same as foamInstall): +prefixDir="${projectDir%/*}" + +# the name used for the project directory +projectDirName="${projectDir##*/}" + +# version number used for debian packaging +unset versionNum + +# +# handle standard and debian naming convention +# +case "$projectDirName" in +OpenFOAM-*) # standard naming convention OpenFOAM- + version="${projectDirName##OpenFOAM-}" + ;; + +openfoam[0-9]*) # debian naming convention 'openfoam' + 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" + ;; + esac + ;; + +*) + echo "Error : unknown/unsupported naming convention" + exit 1 + ;; +esac + + +# default mode is 'ugo' +mode=ugo +unset listOpt quietOpt + +# parse options +while [ "$#" -gt 0 ] +do + case "$1" in + -h | -help) + usage + ;; + -l | -list) + listOpt=true + ;; + -m | -mode) + [ "$#" -ge 2 ] || usage "'$1' option requires an argument" + mode="$2" + + # sanity check: + case "$mode" in + *u* | *g* | *o* ) + ;; + *) + usage "'$1' option with invalid mode '$mode'" + ;; + esac + shift + ;; + -p | -prefix) + [ "$#" -ge 2 ] || usage "'$1' option requires an argument" + prefixDir="$2" + shift + ;; + -q | -quiet) + quietOpt=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: '$*'" + ;; + *) + break + ;; + esac + shift +done + + +# 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 + dirList="$dirList $HOME/.${WM_PROJECT:-OpenFOAM}/$version" + dirList="$dirList $HOME/.${WM_PROJECT:-OpenFOAM}" + ;; +esac + +case "$mode" in +*g*) # group + dirList="$dirList $prefixDir/site/$version" + dirList="$dirList $prefixDir/site" + ;; +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 + ;; +esac +set -- $dirList + + +# +# The main routine +# + +if [ "$listOpt" = true ] +then + + # list directories, or potential file locations + [ "$nArgs" -le 1 ] || usage + + # a silly combination, but -quiet has precedence + [ "$quietOpt" = true ] && exit 0 + + for dir + do + if [ "$nArgs" -eq 1 ] + then + echo "$dir/$fileName" + else + echo "$dir" + fi + done + exit 0 + +else + + [ "$nArgs" -eq 1 ] || usage + + for dir + do + if [ -f "$dir/$fileName" ] + then + [ "$quietOpt" = true ] || echo "$dir/$fileName" + exit 0 + fi + done + +fi + + +# general error, eg file not found +exit 2 + +#------------------------------------------------------------------------------ diff --git a/etc/bashrc b/etc/bashrc index 6852f3f11..f3f7dd017 100644 --- a/etc/bashrc +++ b/etc/bashrc @@ -78,6 +78,37 @@ export WM_PROJECT_USER_DIR=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ export WM_THIRD_PARTY_DIR=$WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION +# Source files, possibly with some verbosity +_foamSource() +{ + while [ $# -ge 1 ] + do + [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "Sourcing: $1" + . $1 + shift + done +} + +# Add in preset user or site preferences: +foamPrefs=`$WM_PROJECT_DIR/bin/foamEtcFile prefs.sh` && _foamSource $foamPrefs +unset foamPrefs + +# Evaluate command-line parameters +while [ $# -gt 0 ] +do + case "$1" in + *=) + # name= -> unset name + eval "unset ${1%=}" + ;; + *=*) + # name=value -> export name=value + eval "export $1" + ;; + esac + shift +done + # Operating System/Platform # ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -278,16 +309,6 @@ export PATH LD_LIBRARY_PATH MANPATH # Source project setup files # ~~~~~~~~~~~~~~~~~~~~~~~~~~ -_foamSource() -{ - while [ $# -ge 1 ] - do - [ "$FOAM_VERBOSE" -a "$PS1" ] && echo "Sourcing: $1" - . $1 - shift - done -} - _foamSource $WM_PROJECT_DIR/etc/settings.sh _foamSource $WM_PROJECT_DIR/etc/aliases.sh diff --git a/etc/cshrc b/etc/cshrc index 40c67dfe1..78cbb09f3 100644 --- a/etc/cshrc +++ b/etc/cshrc @@ -72,6 +72,31 @@ setenv WM_PROJECT_USER_DIR $HOME/$WM_PROJECT/$LOGNAME-$WM_PROJECT_VERSION # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ setenv WM_THIRD_PARTY_DIR $WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION +# Source files, possibly with some verbosity +alias _foamSource 'if ($?FOAM_VERBOSE && $?prompt) echo "Sourcing: \!*"; source + +# Add in preset user or site preferences: +set foamPrefs=`$WM_PROJECT_DIR/bin/foamEtcFile prefs.csh` +if ( $status == 0 ) then + _foamSource $foamPrefs +endif +unset foamPrefs + +# Evaluate command-line parameters +while ( $#argv > 0 ) + switch ($argv[1]) + case *=: + # name= -> unsetenv name + eval "unsetenv $argv[1]:s/=//" + breaksw + case *=*: + # name=value -> setenv name value + eval "setenv $argv[1]:s/=/ /" + breaksw + endsw + shift +end + # Operating System/Platform # ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -228,8 +253,6 @@ setenv MANPATH `$cleanProg "$MANPATH" "$foamOldDirs"` # Source project setup files # ~~~~~~~~~~~~~~~~~~~~~~~~~~ -alias _foamSource 'if ($?FOAM_VERBOSE && $?prompt) echo "Executing: \!*"; source \!*' - _foamSource $WM_PROJECT_DIR/etc/settings.csh _foamSource $WM_PROJECT_DIR/etc/aliases.csh diff --git a/etc/prefs.csh-EXAMPLE b/etc/prefs.csh-EXAMPLE new file mode 100644 index 000000000..6222054e2 --- /dev/null +++ b/etc/prefs.csh-EXAMPLE @@ -0,0 +1,52 @@ +#----------------------------------*-sh-*-------------------------------------- +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. +# \\/ 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 . +# +# File +# etc/prefs.csh +# +# Description +# Preset variables for the OpenFOAM configuration - C-Shell shell syntax. +# +# The prefs.csh file will be sourced by the OpenFOAM etc/cshrc when it is +# found by foamEtcFile. +# +# See Also +# 'foamEtcFile -help' or 'foamEtcFile -list' for information about the +# paths searched +# +#------------------------------------------------------------------------------ + +## Specify system compiler +## ~~~~~~~~~~~~~~~~~~~~~~~ +#set compilerInstall=system + +## Specify system openmpi +## ~~~~~~~~~~~~~~~~~~~~~~ +#setenv WM_MPLIB SYSTEMOPENMPI + +# Specify ParaView version +# ~~~~~~~~~~~~~~~~~~~~~~~~ +setenv ParaView_VERSION git # eg, cvs/git version +setenv ParaView_MAJOR 3.7 + +# ----------------------------------------------------------------- end-of-file diff --git a/etc/prefs.sh-EXAMPLE b/etc/prefs.sh-EXAMPLE new file mode 100644 index 000000000..598c5710c --- /dev/null +++ b/etc/prefs.sh-EXAMPLE @@ -0,0 +1,52 @@ +#----------------------------------*-sh-*-------------------------------------- +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd. +# \\/ 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 . +# +# File +# etc/prefs.sh +# +# Description +# Preset variables for the OpenFOAM configuration - POSIX shell syntax. +# +# The prefs.sh file will be sourced by the OpenFOAM etc/bashrc when it is +# found by foamEtcFile. +# +# See Also +# 'foamEtcFile -help' or 'foamEtcFile -list' for information about the +# paths searched +# +#------------------------------------------------------------------------------ + +# Specify system compiler +# ~~~~~~~~~~~~~~~~~~~~~~~ +compilerInstall=system + +# Specify system openmpi +# ~~~~~~~~~~~~~~~~~~~~~~ +export WM_MPLIB=SYSTEMOPENMPI + +# Specify ParaView version +# ~~~~~~~~~~~~~~~~~~~~~~~~ +export ParaView_VERSION=git # eg, cvs/git version +export ParaView_MAJOR=3.7 + +# ----------------------------------------------------------------- end-of-file