diff --git a/META-INFO/.gitignore b/META-INFO/.gitignore new file mode 100644 index 0000000000..eddcd95786 --- /dev/null +++ b/META-INFO/.gitignore @@ -0,0 +1,5 @@ +# Do not track build information +build-info + +# Do not track time-stamp +time-stamp diff --git a/META-INFO/README.md b/META-INFO/README.md new file mode 100644 index 0000000000..3ac2880aa3 --- /dev/null +++ b/META-INFO/README.md @@ -0,0 +1,84 @@ +# META-INFO + +Meta-information is for OpenFOAM internal use only. + +Do not rely on any files or any file contents in this directory, +or even the existence of this directory. + +The format, content and meaning may be changed at anytime without +notice. + +The information is provided here for internal documentation purposes. + +## api-info + +This file and its contents are to be tracked by git. + +- File content (api) generated by wmakeBuildInfo from OPENFOAM define + in `wmake/rules/General/general` + +- File content (patch) is manually generated content. + + +## build-info + +This file is *never* to be tracked by git, but may be present in shipped +source archives. + +- File content (branch, build) generated by wmakeBuildInfo from git + information and cached from previous wmake (api) + + +## Content types + +### api + +- 4-digit year-month (YYMM) integer corresponding to the major + release or in unusual cases an intermediate release. + +- Format is year-month, as per `date +%y%m`. + Eg, `1712` for the Dec-2017 release. + + +### patch + +- 6-digit year-month-day (YYMMDD) integer corresponding to a patch-level + for the given **released** API. + Development branches have a patch value of `0`. + +- Format is year-month-day, as per `date +%y%m%d`. + +- The first release is by definition unpatched, and thus carries + a patch value of `0`. If this release were to be patched the following + day, the patch level would jump accordingly. + +The patch value is only meaningful together with the api value. + + +## Flow of information + +Changes in the build information must be reflected in information +available in the final binaries. Conversely, it is necessary for later +distributions to have a record of the same information. + +| property | source | saved | +|-----------|---------------------------|------------| +| api | wmake/rules | api-info | +| patch | manual (api-info) | build-info | +| branch | git | build-info | +| build | git | build-info | + + +The command `wmakeBuildInfo -check` is used to determine if +the saved information needs synchronization. The command +`wmakeBuildInfo -update` preforms the synchronitzation. + + +## Notes + +The saved information is split into two separate files. The `api-info` +contains more permanent information, whereas the `build-info` is more +transient in nature. + +---- +2018-11-29 diff --git a/META-INFO/api-info b/META-INFO/api-info new file mode 100644 index 0000000000..dc411fce20 --- /dev/null +++ b/META-INFO/api-info @@ -0,0 +1,2 @@ +api=1811 +patch=0 diff --git a/bin/foamEtcFile b/bin/foamEtcFile index 1239d83e7e..e45a7fd86d 100755 --- a/bin/foamEtcFile +++ b/bin/foamEtcFile @@ -24,21 +24,20 @@ # \endcode # # The -mode option can also be used when chaining settings. -# For example, in the user ~/.OpenFOAM//config.sh/compiler +# For example, in the user ~/.OpenFOAM/config.sh/compiler # \code # eval $(foamEtcFile -sh -mode=go config.sh/compiler) # \endcode # # Environment -# - WM_PROJECT (unset defaults to OpenFOAM) -# - WM_PROJECT_VERSION (unset defaults to detect from path) -# - WM_PROJECT_SITE (unset defaults to PREFIX/site) +# - WM_PROJECT_SITE (unset defaults to PROJECT/site) # # Note -# This script must exist in one of these locations: -# - PREFIX/OpenFOAM-/bin -# - PREFIX/openfoam-/bin -# - PREFIX/openfoam/bin +# This script must exist in the project 'bin' directory +# +# The '-show-api' and '-show-patch' options implement partial logic +# from wmake/wmakeBuildInfo. +# Make sure that any changes there are also reflected here. # #------------------------------------------------------------------------------- printHelp() { @@ -52,8 +51,6 @@ options: -list (-l) 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, 1712, 1806, ...) -csh Produce 'source FILE' output for a csh eval -sh Produce '. FILE' output for a sh eval -csh-verbose As per -csh, with additional verbosity @@ -61,6 +58,9 @@ options: -config Add config directory prefix for shell type: with -csh* for a config.csh/ prefix with -sh* for a config.sh/ prefix + -show-api Print api value from wmake/rules, or meta-info and exit + -show-patch Print patch value from meta-info and exit + -with-api=NUM Specify alternative api value to search with -quiet (-q) Suppress all normal output -silent (-s) Suppress stderr, except -csh-verbose, -sh-verbose output -help Print the usage @@ -70,8 +70,8 @@ Locate user/group/other file as per '#includeEtc' Do not group single character options. Equivalent options: | -mode=MODE | -mode MODE | -m MODE - | -prefix=DIR | -prefix DIR | -p DIR - | -version=VER | -version VER | -v VER + | -prefix=DIR | -prefix DIR | -p DIR [obsolete 1812] + | -version=VER | -version VER | -v VER [obsolete 1812] Exit status 0 when the file is found. Print resolved path to stdout. @@ -98,80 +98,71 @@ die() } #------------------------------------------------------------------------------- -binDir="${0%/*}" # The bin dir -projectDir="${binDir%/bin}" # The project dir -prefixDir="${projectDir%/*}" # The prefix dir (same as $WM_PROJECT_INST_DIR) +binDir="${0%/*}" # The bin dir +projectDir="$(\cd $(dirname $binDir) && \pwd -L)" # Project dir -# Could not resolve projectDir, prefixDir? (eg, called as ./bin/foamEtcFile) -if [ "$prefixDir" = "$projectDir" ] -then - binDir="$(cd $binDir && pwd -L)" - projectDir="${binDir%/bin}" - prefixDir="${projectDir%/*}" -fi -projectDirName="${projectDir##*/}" # The project directory name - -projectVersion="$WM_PROJECT_VERSION" # Empty? - will be treated later -userDir="$HOME/.OpenFOAM" # Hard-coded as per foamVersion.H +userDir="$HOME/.OpenFOAM" # As per foamVersion.H +groupDir="${WM_PROJECT_SITE:-$projectDir/site}" # As per foamVersion.H #------------------------------------------------------------------------------- -# Guess project version or simply get the stem part of the projectDirName. -# Handle standard naming conventions: +# The API locations. See wmake/wmakeBuildInfo +rulesFile="$projectDir/wmake/rules/General/general" +metaInfoDir="$projectDir/META-INFO" + +# Get api from rules/General/general # -# * OpenFOAM-[-extra...] -# * openfoam-[-extra...] -# * openfoam +# Failure modes: +# - No api information (can't find file etc). +# -> Fatal for building, but could be OK for a stripped down version # -# - projectVersion: update unless already set +# Fallback. Get from api-info # -# Helper variables: -# - dirBase (for reassembling name) == projectDirName without the version -unset dirBase -guessVersion() +getApi() { - local version + local value - case "$projectDirName" in - (OpenFOAM-* | openfoam-*) - # Dashed naming: OpenFOAM- or openfoam- - dirBase="${projectDirName%%-*}-" - version="${projectDirName#*-}" - version="${version%%*-}" # Extra safety, eg openfoam-version-packager - ;; + value="$(sed -ne '/^ *#/!{ /WM_VERSION.*OPENFOAM=/{ s@^.*OPENFOAM= *\([0-9][0-9]*\).*@\1@p; q }}' $rulesFile 2>/dev/null)" + if [ -z "$value" ] && [ -f "$metaInfoDir/api-info" ] + then + # Fallback. Get from api-info + value="$(sed -ne 's@^ *api *= *\([0-9][0-9]*\).*@\1@p' $metaInfoDir/api-info 2>/dev/null)" + fi - (openfoam[0-9]*) - # Debian-style naming: openfoam - dirBase="openfoam" - version="${projectDirName#openfoam}" - ;; - - (*) - die "unknown/unsupported naming convention for '$projectDirName'" - ;; - esac - - # Set projectVersion if required - : ${projectVersion:=$version} + if [ -n "$value" ] + then + echo "$value" + else + return 1 + fi } -# Set projectVersion and update versionNum, projectDirName accordingly -setVersion() +# Get patch from meta-info / api-info +# +# Failure modes: +# - No patch information (can't find file etc). +# +getPatchLevel() { - projectVersion="$1" + local value - # Need dirBase when reassembling projectDirName - [ -n "$dirBase" ] || guessVersion + # Fallback. Get from api-info + value="$(sed -ne 's@^ *patch *= *\([0-9][0-9]*\).*@\1@p' $metaInfoDir/api-info 2>/dev/null)" - projectDirName="$dirBase$projectVersion" + if [ -n "$value" ] + then + echo "$value" + else + return 1 + fi } #------------------------------------------------------------------------------- optMode=ugo # Default mode is always 'ugo' unset shellOutput verboseOutput -unset optAll optConfig optList optVersion +unset optAll optConfig optList projectApi # Parse options while [ "$#" -gt 0 ] @@ -180,6 +171,19 @@ do -h | -help*) printHelp ;; + -show-api) + # Show API and exit + getApi + exit $? + ;; + -show-patch) + # Show patch level and exit + getPatchLevel + exit $? + ;; + -with-api=*) + projectApi="${1#*=}" + ;; -a | -all) optAll=true unset shellOutput verboseOutput @@ -204,13 +208,6 @@ do -mode=[ugo]*) optMode="${1#*=}" ;; - -prefix=/*) - prefixDir="${1#*=}" - prefixDir="${prefixDir%/}" - ;; - -version=*) - optVersion="${1#*=}" - ;; -m | -mode) optMode="$2" shift @@ -223,22 +220,23 @@ do ;; esac ;; - -p | -prefix) - [ "$#" -ge 2 ] || die "'$1' option requires an argument" - prefixDir="${2%/}" - shift - ;; -q | -quiet) optQuiet=true ;; -s | -silent) optSilent=true ;; - -v | -version) + + -prefix=* | -version=*) + echo "ignored defunct option '${1%%=*}'" 1>&2 + ;; + -p | -prefix | -v | -version) + # Ignored, but still need to check/discard its argument [ "$#" -ge 2 ] || die "'$1' option requires an argument" - optVersion="$2" + echo "ignored defunct option '$1'" 1>&2 shift ;; + --) shift break @@ -255,6 +253,10 @@ done #------------------------------------------------------------------------------- +# Establish the API value +[ -n "$projectApi" ] || projectApi=$(getApi) + + # Split arguments into filename (for searching) and trailing bits for shell eval # Silently remove leading ~OpenFOAM/ (as per Foam::findEtcFile) nArgs=$# @@ -279,25 +281,9 @@ then fi -# Get version information -if [ -n "$optVersion" ] -then - setVersion $optVersion -elif [ -z "$projectVersion" ] -then - guessVersion -fi - -# Updates: -# - projectDir for changes via -prefix or -version -# - groupDir for changes via -prefix -projectDir="$prefixDir/$projectDirName" -groupDir="${WM_PROJECT_SITE:-$prefixDir/site}" - - # Debugging: # echo "Installed locations:" 1>&2 -# for i in projectDir prefixDir projectDirName projectVersion +# for i in projectDir # do # eval echo "$i=\$$i" 1>&2 # done @@ -305,12 +291,12 @@ groupDir="${WM_PROJECT_SITE:-$prefixDir/site}" # Define the various places to be searched: unset dirList case "$optMode" in (*u*) # (U)ser - dirList="$dirList $userDir/$projectVersion $userDir" + dirList="$dirList $userDir/$projectApi $userDir" ;; esac case "$optMode" in (*g*) # (G)roup == site - dirList="$dirList $groupDir/$projectVersion/etc $groupDir/etc" + dirList="$dirList $groupDir/$projectApi/etc $groupDir/etc" ;; esac diff --git a/bin/foamExec b/bin/foamExec deleted file mode 100755 index 85b20547e1..0000000000 --- a/bin/foamExec +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/bash -#------------------------------------------------------------------------------ -# ========= | -# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox -# \\ / O peration | -# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation -# \\/ M anipulation | Copyright (C) 2018 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 . -# -# Script -# foamExec -# -# Description -# Usage: foamExec [-version=foamVersion] ... -# -# Runs the version of executable -# with the rest of the arguments. -# -# Can also be used for parallel runs. For example, -# \code -# mpirun -np \ -# foamExec -version=VERSION ... -parallel -# \endcode -# -# Note -# This script must exist in $WM_PROJECT_INST_DIR/OpenFOAM-/bin -# or $WM_PROJECT_INST_DIR/openfoam/bin (debian) -# -# foamEtcFile located in the same directory as this script -# -# See also -# foamEtcFile -# -#------------------------------------------------------------------------------ -usage() { - exec 1>&2 - while [ "$#" -ge 1 ]; do echo "$1"; shift; done - cat< ... - -options: - -mode=MODE Any combination of u(user), g(group), o(other) - -prefix=DIR Specify an alternative installation prefix - pass through to foamEtcFile - -version=VER Specify alternative OpenFOAM version (eg, 3.0, 1612, ...) - pass through to foamEtcFile - -help Print the usage - -Run a particular OpenFOAM version of - -USAGE - exit 1 -} - -#------------------------------------------------------------------------------- -binDir="${0%/*}" # The bin dir -projectDir="${binDir%/bin}" # The project dir -# prefixDir="${projectDir%/*}" # The prefix dir (same as $WM_PROJECT_INST_DIR) - -projectVersion="${WM_PROJECT_VERSION:-unknown}" - -unset etcOpts -# parse options -while [ "$#" -gt 0 ] -do - case "$1" in - -h | -help*) - usage - ;; - -mode=*) - etcOpts="$etcOpts $1" # pass-thru to foamEtcFile - ;; - -prefix=/*) - etcOpts="$etcOpts $1" # pass-thru to foamEtcFile - ;; - -version=*) - etcOpts="$etcOpts $1" # pass-thru to foamEtcFile - projectVersion="${1#*=}" # for reporting - ;; - -m | -mode) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - etcOpts="$etcOpts $1 $2" # pass-thru to foamEtcFile - shift - ;; - -p | -prefix) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - etcOpts="$etcOpts $1 $2" # pass-thru to foamEtcFile - shift - ;; - -v | -version) - [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - etcOpts="$etcOpts $1 $2" # pass-thru to foamEtcFile - projectVersion="$2" # for reporting - shift - ;; - --) - shift - break - ;; - -*) - usage "invalid option '$1'" - ;; - *) - break - ;; - esac - shift -done - - -# Find and source the OpenFOAM -# placed in function to preserve command-line arguments -sourceBashrc() -{ - rcFile="$($binDir/foamEtcFile $etcOpts bashrc)" || { - echo "Error: bashrc file could not be found for OpenFOAM-$projectVersion" 1>&2 - exit 2 - } - - . $rcFile $FOAM_SETTINGS -} - - -[ "$#" -ge 1 ] || usage "no application specified" - -sourceBashrc -exec "$@" - -#------------------------------------------------------------------------------ diff --git a/bin/foamInstallationTest b/bin/foamInstallationTest index 286bd3292c..0aa8a5edc1 100755 --- a/bin/foamInstallationTest +++ b/bin/foamInstallationTest @@ -297,9 +297,7 @@ reportExecutable() checkOpenFOAMEnvironment() { - [ -d "$WM_PROJECT_INST_DIR" ] && \ - [ -d "$WM_PROJECT_DIR" ] && \ - [ -d "$WM_THIRD_PARTY_DIR" ] || { + [ -d "$WM_PROJECT_DIR" ] && [ -d "$WM_THIRD_PARTY_DIR" ] || { echo "" echo "FATAL ERROR: OpenFOAM environment not configured." echo "" @@ -389,7 +387,6 @@ COL5="Crit" hline echo "$COL1 $COL2 $COL3 $COL5" hline -reportEnv '$WM_PROJECT_INST_DIR' noPath yes reportEnv '$WM_PROJECT_USER_DIR' noPath no reportEnv '$WM_THIRD_PARTY_DIR' noPath yes hline @@ -415,11 +412,12 @@ hline reportEnv '$FOAM_LIBBIN' '$LD_LIBRARY_PATH' yes reportEnv '$FOAM_SITE_LIBBIN' '$LD_LIBRARY_PATH' no reportEnv '$FOAM_USER_LIBBIN' '$LD_LIBRARY_PATH' no +reportEnv '$FOAM_EXT_LIBBIN' '$LD_LIBRARY_PATH' maybe reportEnv '$MPI_ARCH_PATH' '$LD_LIBRARY_PATH' yes hline #------------------------------------------------------------------------------ -heading "Third-party software" +heading "Software Components" hline echo "$(fixlen Software 9) $(fixlen Version 10) $(fixlen Location 10)" hline diff --git a/bin/foamLog b/bin/foamLog index b3beddcbb0..2603832309 100755 --- a/bin/foamLog +++ b/bin/foamLog @@ -28,11 +28,16 @@ # Description # Extract data for each time-step from a log file for graphing. # +# Environment +# WM_PROJECT_API +# WM_PROJECT_DIR +# WM_PROJECT_SITE +# #------------------------------------------------------------------------------ -Script=${0##*/} -toolsDir=${0%/*}/tools -siteDir="${WM_PROJECT_SITE:-${WM_PROJECT_DIR:-}/site}" -userDir=$HOME/.OpenFOAM +Script="${0##*/}" +toolsDir="${0%/*}/tools" +groupDir="${WM_PROJECT_SITE:-${WM_PROJECT_DIR:-}/site}" +userDir="$HOME/.OpenFOAM" usage() { exec 1>&2 @@ -85,11 +90,11 @@ cat < specify the application to use - -case specify alternative case directory, default is the cwd + -app NAME specify the application to use + -case DIR specify alternative case directory, default is the cwd -list list the applications available - -version specify an alternative version (default: '$WM_PROJECT_VERSION') + -with-api=NUM specify alternative api to use (default: \$WM_PROJECT_API) + -version VER [obsolete] + -help Print the usage clone initial application settings to the specified case from - $userDir/$templateDir/{$version,}/ - $siteDir/$templateDir/{$version,}/ + $userDir/$templateDir/{$projectApi,}/APP + $groupDir/$templateDir/{$projectApi,}/APP USAGE exit 1 } #------------------------------------------------------------------------------ -unset appName caseName listOpt +unset appName caseName optList # parse options while [ "$#" -gt 0 ] @@ -69,21 +76,23 @@ do -app) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" appName="$2" - shift 2 + shift ;; -case) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" caseName="$2" - shift 2 + shift ;; -l | -list) - listOpt=true - shift + optList=true ;; -v | -ver | -version) [ "$#" -ge 2 ] || usage "'$1' option requires an argument" - version="$2" - shift 2 + echo "ignored defunct option -version" 1>&2 + shift + ;; + -with-api=*) + projectApi="${1#*=}" ;; -*) usage "unknown option: '$*'" @@ -92,19 +101,16 @@ do usage "unexpected argument: '$*'" ;; esac + shift done # need rsync, except for when listing -type rsync >/dev/null 2>&1 || [ "$listOpt" = true ] || usage "Error: 'rsync' seems to be missing" +command -v rsync >/dev/null 2>&1 || \ + [ "$optList" = true ] || usage "Error: 'rsync' seems to be missing" #------------------------------------------------------------------------------ -[ -n "$version" ] || { - echo "Error: no -version specified and \$WM_PROJECT_VERSION is not set" - exit 1 -} - # # find apps in current directory # considered an app if it has constant/ and system/ directories @@ -113,18 +119,23 @@ findApps() { for app in $(/bin/ls -d * 2>/dev/null) do - [ -d "$app/constant" -a -d "$app/system" ] && echo $app + [ -d "$app/constant" -a -d "$app/system" ] && echo "$app" done } appList=$( - for dir in $userDir/$templateDir $siteDir/$templateDir + for dir in "$userDir/$templateDir" "$groupDir/$templateDir" do - if cd $dir 2>/dev/null + if cd "$dir" 2>/dev/null then findApps ## generic - cd $version 2>/dev/null && findApps ## version-specific + + ## version-specific + if [ -n "$projectApi" ] + then + cd "$projectApi" 2>/dev/null && findApps + fi fi done | sort | uniq ) @@ -142,7 +153,7 @@ listApps() } -if [ "$listOpt" = true ] +if [ "$optList" = true ] then listApps exit 0 @@ -160,11 +171,11 @@ fi # get the corresponding srcDir name srcDir=$( - for dir in $userDir/$templateDir $siteDir/$templateDir + for dir in "$userDir/$templateDir" "$groupDir/$templateDir" do if [ -d $dir ] then - for appDir in $dir/$version/$appName $dir/$appName + for appDir in "$dir/$projectApi/$appName" "$dir/$appName" do if [ -d $appDir -a -d $appDir/constant -a -d $appDir/system ] then @@ -211,21 +222,6 @@ echo " syncing ..." # sync updated files only, itemize changes so we know what is going on rsync -aui $srcDir/ $newDir - -# -# reuse or create new FOAM_SETTINGS (useful for queuing systems) -# -if [ -e "$newDir/FOAM_SETTINGS" ] -then - echo " retaining FOAM_SETTINGS" -else - echo " creating FOAM_SETTINGS" - cat << SETTINGS > "$newDir/FOAM_SETTINGS" -APPLICATION=$appName -FOAM_VERSION=OpenFOAM-$version -SETTINGS -fi - echo Done #------------------------------------------------------------------------------ diff --git a/bin/foamUpdateCaseFileHeader b/bin/foamUpdateCaseFileHeader index 23a87a0c55..11f110a045 100755 --- a/bin/foamUpdateCaseFileHeader +++ b/bin/foamUpdateCaseFileHeader @@ -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) 2018 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM. @@ -44,7 +44,7 @@ options: -help print the usage Updates the header of application files and removes consecutive blank lines. - By default, writes current OpenFOAM version in the header. + By default, writes current OpenFOAM API number version in the header. An alternative version can be specified with the -version option. USAGE @@ -74,8 +74,12 @@ do esac done -# constant width for version - default to WM_PROJECT_VERSION -version=$(printf %-36s ${version:-$WM_PROJECT_VERSION}) +# Constant width for version - default to WM_PROJECT_API + +: ${version:=$WM_PROJECT_API} +: ${version:=$WM_PROJECT_VERSION} + +version=$(printf %-36s ${version:-OPENFOAM}) [ $# -ge 1 ] || usage diff --git a/bin/tools/change-sitedir.sh b/bin/tools/change-sitedir.sh index 220f1225d2..f66504a225 100644 --- a/bin/tools/change-sitedir.sh +++ b/bin/tools/change-sitedir.sh @@ -2,7 +2,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 2017 OpenCFD Ltd. +# \\ / A nd | Copyright (C) 2017-2018 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------ # License @@ -25,7 +25,7 @@ # . change-sitedir.sh PREFIX [SUFFIX] # # Shortcuts (prefix) -# -prefix "$WM_PROJECT_INST_DIR/site" +# -prefix "$WM_PROJECT_DIR/../site" # -project "$WM_PROJECT_DIR/site" # -none remove from environment # @@ -46,7 +46,7 @@ # # corresponds to the standard site location: # -# $WM_PROJECT_DIR/site{/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS} +# $WM_PROJECT_DIR/site{/$WM_PROJECT_API/platforms/$WM_OPTIONS} # #------------------------------------------------------------------------------ @@ -56,7 +56,7 @@ then suffix="$2" foamOldDirs="$FOAM_SITE_APPBIN $FOAM_SITE_LIBBIN \ - $WM_PROJECT_SITE $WM_PROJECT_INST_DIR/site $WM_PROJECT_DIR/site" + $WM_PROJECT_SITE $WM_PROJECT_DIR/site" foamClean=$WM_PROJECT_DIR/bin/foamCleanPath if [ -x "$foamClean" ] then @@ -66,12 +66,12 @@ then fi case "$suffix" in - -plat*) suffix="platforms/$WM_OPTIONS" ;; + -plat*) suffix="platforms/$WM_OPTIONS" ;; esac case "$prefix" in - -prefix) prefix="$WM_PROJECT_INST_DIR/site" ;; - -project) prefix="$WM_PROJECT_DIR/site" ;; - -none) unset prefix ;; + -prefix) prefix="${WM_PROJECT_DIR%/*}/site" ;; + -project) prefix="$WM_PROJECT_DIR/site" ;; + -none) unset prefix ;; esac if [ -n "$prefix" ] diff --git a/bin/tools/change-userdir.sh b/bin/tools/change-userdir.sh index d126fcfe5d..06df062b63 100644 --- a/bin/tools/change-userdir.sh +++ b/bin/tools/change-userdir.sh @@ -69,8 +69,8 @@ then -plat*) suffix="platforms/$WM_OPTIONS" ;; esac case "$prefix" in - -home) prefix="$HOME/OpenFOAM/$USER-${WM_PROJECT_VERSION:-unknown}" ;; - -none) unset prefix ;; + -home) prefix="$HOME/OpenFOAM/$USER-${WM_PROJECT_VERSION:-unknown}" ;; + -none) unset prefix ;; esac if [ -n "$prefix" ] diff --git a/bin/tools/foamConfigurePaths b/bin/tools/foamConfigurePaths index ad0ea89887..6890d35ed0 100755 --- a/bin/tools/foamConfigurePaths +++ b/bin/tools/foamConfigurePaths @@ -25,9 +25,8 @@ usage() { usage: ${0##*/} options Basic - -prefix DIR specify installation directory (eg, /opt) - -version VER specify project version (eg, 1612) - -projectName NAME specify project directory name (eg, openfoam1612) + -project-path DIR specify 'WM_PROJECT_DIR' (eg, /opt/openfoam1806-patch1) + -version VER specify project version (eg, v1806) -archOption 32|64 specify 'WM_ARCH_OPTION' architecture option -SP | -float32 specify 'WM_PRECISION_OPTION' for single precision -DP | -float64 specify 'WM_PRECISION_OPTION' for double precision @@ -61,31 +60,26 @@ Components -metis ver specify 'METIS_VERSION' -metis-path DIR specify 'METIS_ARCH_PATH' -scotch VER specify 'SCOTCH_VERSION' (eg, scotch_6.0.4) - -scotch-path DIR specify 'SCOTCH_ARCH_PATH' (eg, /opt/OpenFOAM-scotch_6.0.4) + -scotch-path DIR specify 'SCOTCH_ARCH_PATH' (eg, /opt/scotch_6.0.4) Graphics -paraview VER specify 'ParaView_VERSION' (eg, 5.4.1) + -paraview-qt VER specify 'ParaView_QT' (eg, qt-system) -paraview-path DIR specify 'ParaView_DIR' (eg, /opt/ParaView-5.4.1) -vtk VER specify 'vtk_version' (eg, VTK-7.1.0) -mesa VER specify 'mesa_version' (eg, mesa-13.0.1) Misc - -default-third default ThirdParty location: PREFIX/ThirdParty-VERSION - -no-third use PROJECT/ThirdParty for ThirdParty location - -third-path DIR specify 'WM_THIRD_PARTY_DIR' - -default-site set PREFIX/site as fallback for WM_PROJECT_SITE - -no-site use PROJECT/site as fallback for WM_PROJECT_SITE - - -sigfpe | -no-sigfpe [defunct - now under etc/controlDict] + -foamInstall DIR [obsolete] + -projectName NAME [obsolete] + -sigfpe|-no-sigfpe [obsolete - now under etc/controlDict] Adjusts hardcoded versions and installation paths (for bash, POSIX shell). Equivalent options: - -prefix -foamInstall --foamInstall - -version -foamVersion --projectVersion - -projectName --projectName + -version -foamVersion --projectVersion -archOption --archOption -third -ThirdParty -paraview --paraviewVersion | -paraviewVersion @@ -186,6 +180,31 @@ replace() done } +# Standard type of replacements. +# replace .. +# looks for "setenv KEYWORD value" +# but avoids "setenv KEYWORD" without a value +replaceCsh() +{ + local file="$1" + shift + + local key val + + while [ "$#" -ge 2 ] + do + key=$1 + val=$2 + shift 2 + + _inlineSed \ + "$file" \ + "setenv *$key [^ #]*" \ + "setenv $key $val" \ + "Replaced $key setenv by '$val'" + done +} + # Get the option's value (argument). # Die if the argument doesn't exist or is empty # $1 option @@ -196,13 +215,14 @@ getOptionValue() echo "$2" } -# Remove BASH_SOURCE and FOAM_INST_DIR=... magic that looks like this: + +# Remove BASH_SOURCE and projectDir=... magic that looks like this: # ---- -# variable=$BASH_SOURCE -# [ -n "$variable" ] && FOAM_INST_DIR= ... -# FOAM_INST_DIR=... +# projectDir=$BASH_SOURCE +# [ -n "$projectDir" ] && projectDir= ... +# projectDir=... # ---- -removeMagic() +removeBashMagic() { local file="$1" @@ -211,10 +231,33 @@ removeMagic() exit 2 # Fatal } - echo " Remove default FOAM_INST_DIR setting ($file)" + echo " Remove automatic projectDir setting ($file)" sed -i \ - -e '/^ *#/!{/\(BASH_SOURCE\|FOAM_INST_DIR=\)/s/^/##IGNORE## /}' \ + -e '/^ *#/!{/\(BASH_SOURCE\|projectDir=\)/s/^/##IGNORE## /}' \ + "$file" +} + + +# Remove set projectName=, set projectDir= magic that looks like this: +# ---- +# set projectName="$WM_PROJECT" +# set projectDir=`lsof +p $$ |& \ +# sed -n -e 's@^[^/]*@@; s@\(/'"$projectName"'[^/]*\)/etc/cshrc[^/]*@\1@p'` +# ---- +removeCshMagic() +{ + local file="$1" + + [ -f "$file" ] || { + echo "Missing file: $file" + exit 2 # Fatal + } + + echo " Remove automatic projectDir setting ($file)" + + sed -i \ + -e '/^ *#/!{\@\(projectName=\|projectDir=\|/etc/cshrc\)@s/^/##IGNORE## /}' \ "$file" } @@ -235,23 +278,15 @@ do ## Basic ## - -prefix | -foamInstall | --foamInstall) - # Replace WM_PROJECT_INST_DIR, disable FOAM_INST_DIR discovery + -project-path) + # Replace WM_PROJECT_DIR=... optionValue=$(getOptionValue "$@") - removeMagic etc/bashrc - replace etc/bashrc WM_PROJECT_INST_DIR "$optionValue" - adjusted=true - shift - ;; + replace etc/bashrc WM_PROJECT_DIR "\"$optionValue\"" + replaceCsh etc/cshrc WM_PROJECT_DIR "\"$optionValue\"" + + removeBashMagic etc/bashrc + removeCshMagic etc/cshrc - -projectName | --projectName) - # Replace basename part of WM_PROJECT_DIR=... - optionValue=$(getOptionValue "$@") - _inlineSed \ - etc/bashrc \ - 'WM_PROJECT_DIR=.*' \ - 'WM_PROJECT_DIR=$WM_PROJECT_INST_DIR/'"$optionValue" \ - "Replaced WM_PROJECT_DIR basename by $optionValue" adjusted=true shift ;; @@ -259,7 +294,8 @@ do -version | -foamVersion | --projectVersion) # Replace WM_PROJECT_VERSION=... optionValue=$(getOptionValue "$@") - replace etc/bashrc WM_PROJECT_VERSION "$optionValue" + replace etc/bashrc WM_PROJECT_VERSION "$optionValue" + replaceCsh etc/cshrc WM_PROJECT_VERSION "$optionValue" adjusted=true shift ;; @@ -275,7 +311,8 @@ do echo "WM_ARCH_OPTION already set to $optionValue" : ${adjusted:=false} else - replace etc/bashrc WM_ARCH_OPTION "$optionValue" + replace etc/bashrc WM_ARCH_OPTION "$optionValue" + replaceCsh etc/cshrc WM_ARCH_OPTION "$optionValue" adjusted=true fi shift @@ -283,20 +320,23 @@ do -SP | -float32) # Replace WM_PRECISION_OPTION=... - replace etc/bashrc WM_PRECISION_OPTION "SP" + replace etc/bashrc WM_PRECISION_OPTION "SP" + replaceCsh etc/cshrc WM_PRECISION_OPTION "SP" adjusted=true ;; -DP | -float64) # Replace WM_PRECISION_OPTION=... - replace etc/bashrc WM_PRECISION_OPTION "DP" + replace etc/bashrc WM_PRECISION_OPTION "DP" + replaceCsh etc/cshrc WM_PRECISION_OPTION "DP" adjusted=true ;; -int32 | -int64) # Replace WM_LABEL_SIZE=... optionValue="${1#-int}" - replace etc/bashrc WM_LABEL_SIZE "$optionValue" + replace etc/bashrc WM_LABEL_SIZE "$optionValue" + replaceCsh etc/cshrc WM_LABEL_SIZE "$optionValue" adjusted=true ;; @@ -306,7 +346,8 @@ do -clang) # Replace clang_version=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/compiler clang_version "$optionValue" + replace etc/config.sh/compiler clang_version "$optionValue" + replace etc/config.csh/compiler clang_version "$optionValue" adjusted=true shift ;; @@ -314,7 +355,8 @@ do -gcc) # Replace gcc_version=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/compiler gcc_version "$optionValue" + replace etc/config.sh/compiler gcc_version "$optionValue" + replace etc/config.csh/compiler gcc_version "$optionValue" adjusted=true shift ;; @@ -325,6 +367,9 @@ do replace etc/bashrc \ WM_COMPILER_TYPE system \ WM_COMPILER "$optionValue" + replaceCsh etc/cshrc \ + WM_COMPILER_TYPE system \ + WM_COMPILER "$optionValue" adjusted=true shift ;; @@ -335,25 +380,31 @@ do replace etc/bashrc \ WM_COMPILER_TYPE ThirdParty \ WM_COMPILER "$optionValue" + replaceCsh etc/cshrc \ + WM_COMPILER_TYPE ThirdParty \ + WM_COMPILER "$optionValue" adjusted=true shift ;; gmp-[4-9]* | gmp-system) # gcc-related package - replace etc/config.sh/compiler gmp_version "$1" + replace etc/config.sh/compiler gmp_version "$1" + replace etc/config.csh/compiler gmp_version "$1" adjusted=true ;; mpfr-[2-9]* | mpfr-system) # gcc-related package - replace etc/config.sh/compiler mpfr_version "$1" + replace etc/config.sh/compiler mpfr_version "$1" + replace etc/config.csh/compiler mpfr_version "$1" adjusted=true ;; mpc-[0-9]* | mpc-system) # gcc-related package - replace etc/config.sh/compiler mpc_version "$1" + replace etc/config.sh/compiler mpc_version "$1" + replace etc/config.csh/compiler mpc_version "$1" adjusted=true ;; @@ -363,7 +414,8 @@ do -mpi) # Explicitly set WM_MPLIB=... optionValue=$(getOptionValue "$@") - replace etc/bashrc WM_MPLIB "$optionValue" + replace etc/bashrc WM_MPLIB "$optionValue" + replaceCsh etc/bashrc WM_MPLIB "$optionValue" optMpi=system adjusted=true shift @@ -383,21 +435,29 @@ do "FOAM_MPI=$optMpi" \ "Replaced 'FOAM_MPI=$expected' setting by 'FOAM_MPI=$optMpi'" - replace etc/bashrc WM_MPLIB OPENMPI + _inlineSed etc/config.csh/mpi \ + "FOAM_MPI $expected" \ + "FOAM_MPI $optMpi" \ + "Replaced 'FOAM_MPI $expected' setting by 'FOAM_MPI $optMpi'" + + replace etc/bashrc WM_MPLIB OPENMPI + replaceCsh etc/cshrc WM_MPLIB OPENMPI adjusted=true shift ;; -openmpi-system) # Explicitly set WM_MPLIB=SYSTEMOPENMPI - replace etc/bashrc WM_MPLIB SYSTEMOPENMPI + replace etc/bashrc WM_MPLIB SYSTEMOPENMPI + replaceCsh etc/cshrc WM_MPLIB SYSTEMOPENMPI optMpi=system adjusted=true ;; -openmpi-third) # Explicitly set WM_MPLIB=OPENMPI, using default setting for openmpi - replace etc/bashrc WM_MPLIB OPENMPI + replace etc/bashrc WM_MPLIB OPENMPI + replaceCsh etc/cshrc WM_MPLIB OPENMPI optMpi=third adjusted=true ;; @@ -408,7 +468,8 @@ do -boost) # Replace boost_version=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/CGAL boost_version "$optionValue" + replace etc/config.sh/CGAL boost_version "$optionValue" + replace etc/config.csh/CGAL boost_version "$optionValue" adjusted=true shift ;; @@ -416,7 +477,8 @@ do -boost-path) # Replace BOOST_ARCH_PATH=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/CGAL BOOST_ARCH_PATH "$optionValue" + replace etc/config.sh/CGAL BOOST_ARCH_PATH "\"$optionValue\"" + replaceCsh etc/config.csh/CGAL BOOST_ARCH_PATH "\"$optionValue\"" adjusted=true shift ;; @@ -424,7 +486,8 @@ do -cgal) # Replace cgal_version=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/CGAL cgal_version "$optionValue" + replace etc/config.sh/CGAL cgal_version "$optionValue" + replace etc/config.csh/CGAL cgal_version "$optionValue" adjusted=true shift ;; @@ -432,7 +495,8 @@ do -cgal-path) # Replace CGAL_ARCH_PATH=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/CGAL CGAL_ARCH_PATH "$optionValue" + replace etc/config.sh/CGAL CGAL_ARCH_PATH "$optionValue" + replaceCsh etc/config.csh/CGAL CGAL_ARCH_PATH "$optionValue" adjusted=true shift ;; @@ -440,7 +504,8 @@ do -fftw) # Replace fftw_version=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/FFTW fftw_version "$optionValue" + replace etc/config.sh/FFTW fftw_version "$optionValue" + replace etc/config.csh/FFTW fftw_version "$optionValue" adjusted=true shift ;; @@ -448,7 +513,8 @@ do -fftw-path) # Replace FFTW_ARCH_PATH=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/FFTW FFTW_ARCH_PATH "$optionValue" + replace etc/config.sh/FFTW FFTW_ARCH_PATH "\"$optionValue\"" + replaceCsh etc/config.csh/FFTW FFTW_ARCH_PATH "\"$optionValue\"" adjusted=true shift ;; @@ -456,7 +522,8 @@ do -cmake) # Replace cmake_version=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/paraview cmake_version "$optionValue" + replace etc/config.sh/paraview cmake_version "$optionValue" + replace etc/config.csh/paraview cmake_version "$optionValue" adjusted=true shift ;; @@ -472,7 +539,7 @@ do -kahip-path) # Replace KAHIP_ARCH_PATH=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/kahip KAHIP_ARCH_PATH "$optionValue" + replace etc/config.sh/kahip KAHIP_ARCH_PATH "\"$optionValue\"" adjusted=true shift ;; @@ -488,7 +555,7 @@ do -metis-path) # Replace METIS_ARCH_PATH=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/metis METIS_ARCH_PATH "$optionValue" + replace etc/config.sh/metis METIS_ARCH_PATH "\"$optionValue\"" adjusted=true shift ;; @@ -504,7 +571,7 @@ do -scotch-path | -scotchArchPath | --scotchArchPath) # Replace SCOTCH_ARCH_PATH=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/scotch SCOTCH_ARCH_PATH "$optionValue" + replace etc/config.sh/scotch SCOTCH_ARCH_PATH "\"$optionValue\"" adjusted=true shift ;; @@ -519,7 +586,17 @@ do _matches "$optionValue" "$expected" || \ die "'$1' has bad value: '$optionValue'" - replace etc/config.sh/paraview ParaView_VERSION "$optionValue" + replace etc/config.sh/paraview ParaView_VERSION "$optionValue" + replaceCsh etc/config.csh/paraview ParaView_VERSION "$optionValue" + adjusted=true + shift + ;; + + -paraview-qt) + # Replace ParaView_QT=... + optionValue=$(getOptionValue "$@") + replace etc/config.sh/paraview ParaView_QT "$optionValue" + replace etc/config.csh/paraview ParaView_QT "$optionValue" adjusted=true shift ;; @@ -527,7 +604,8 @@ do -paraview-path | -paraviewInstall | --paraviewInstall) # Replace ParaView_DIR=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/paraview ParaView_DIR "$optionValue" + replace etc/config.sh/paraview ParaView_DIR \""$optionValue\"" + replaceCsh etc/config.csh/paraview ParaView_DIR \""$optionValue\"" adjusted=true shift ;; @@ -535,7 +613,8 @@ do -vtk) # Replace vtk_version=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/vtk vtk_version "$optionValue" + replace etc/config.sh/vtk vtk_version "$optionValue" + replace etc/config.csh/vtk vtk_version "$optionValue" adjusted=true shift ;; @@ -543,7 +622,8 @@ do -mesa) # Replace mesa_version=... optionValue=$(getOptionValue "$@") - replace etc/config.sh/vtk mesa_version "$optionValue" + replace etc/config.sh/vtk mesa_version "$optionValue" + replace etc/config.csh/vtk mesa_version "$optionValue" adjusted=true shift ;; @@ -551,55 +631,17 @@ do ## Misc ## - -no-third) - # Replace WM_THIRD_PARTY_DIR=... with location within the project dir - replace etc/bashrc WM_THIRD_PARTY_DIR '$WM_PROJECT_DIR/ThirdParty' - adjusted=true - shift - ;; - - -default-third) - # Replace WM_THIRD_PARTY_DIR=... with default location/naming - replace etc/bashrc WM_THIRD_PARTY_DIR \ - '$WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION' - adjusted=true - shift - ;; - - -third-path) - # Replace WM_THIRD_PARTY_DIR=... - optionValue=$(getOptionValue "$@") - replace etc/bashrc WM_THIRD_PARTY_DIR "$optionValue" - adjusted=true - shift - ;; - - -no-site) - # Replace fallback value for site within the project dir - _inlineSed \ - etc/config.sh/settings \ - '^ *siteDir=.*\/site' \ - 'siteDir=$WM_PROJECT_DIR/site' \ - "Setting fallback site-dir '\$WM_PROJECT_DIR/site'" - adjusted=true - shift - ;; - - -default-site) - # Replace WM_THIRD_PARTY_DIR=... with standard location - _inlineSed \ - etc/config.sh/settings \ - '^ *siteDir=.*\/site' \ - 'siteDir=$WM_PROJECT_INST_DIR/site' \ - "Setting fallback site-dir '\$WM_PROJECT_INST_DIR/site'" - adjusted=true - shift - ;; - -sigfpe | -no-sigfpe) echo "Enable/disable FOAM_SIGFPE now via controlDict" 1>&2 ;; + -foamInstall | --foamInstall | -projectName | --projectName) + # Removed for 1812 + optionValue=$(getOptionValue "$@") + echo "Ignoring obsolete option $1" 1>&2 + shift + ;; + *) die "unknown option/argument: '$1'" ;; diff --git a/bin/tools/foamCreateModuleInclude b/bin/tools/foamCreateModuleInclude index f8e8775ed3..9c568cb3c6 100755 --- a/bin/tools/foamCreateModuleInclude +++ b/bin/tools/foamCreateModuleInclude @@ -219,7 +219,7 @@ echo "Using openfoam: $WM_PROJECT_DIR" 1>&2 echo "==> $moduleOutput" 1>&2 # Remove some cruft -unset FOAM_JOB_DIR FOAM_RUN FOAM_SETTINGS FOAM_INST_DIR +unset FOAM_JOB_DIR FOAM_RUN FOAM_SETTINGS FOAM_INST_DIR WM_PROJECT_INST_DIR unset WM_PROJECT_USER_DIR WM_THIRD_PARTY_DIR unset SCOTCH_VERSION diff --git a/etc/README.md b/etc/README.md new file mode 100644 index 0000000000..d638115c48 --- /dev/null +++ b/etc/README.md @@ -0,0 +1,29 @@ +OpenFOAM Configuration +---------------------- + +The main OpenFOAM settings are located in the parent `etc/` directory. +Both POSIX (bash, dash,...) and csh shells are supported. +To configure OpenFOAM, source either the `etc/bashrc` or the +`etc/cshrc` file, as appropriate for your shell. + +These source the following files in the `config.sh/` or +`config.csh/` directories: + +* `setup` : finalize setup of OpenFOAM environment (called by bashrc,cshrc) +* `settings` : core settings +* `aliases` : aliases for interactive shells +* `unset` : sourced to clear as many OpenFOAM environment settings as possible +* `mpi` : MPI communications library settings +* `ensight` : application settings for EnSight +* `paraview` : application settings for ParaView +* `scotch` : application settings for compiling against scotch +* `metis` : application settings for compiling against metis + +The `config.*/example` directories contain additional example configuration +files for the corresponding shell: + +* `compiler` : an example of fine tuning ThirdParty compiler settings +* `openmpi` : an example of fine tuning openmpi settings for OpenFOAM +* `paraview` : an example of chaining to the standard config/paraview + with a different ParaView_VERSION +* `prefs`: an example of supplying alternative site-defined settings diff --git a/etc/README.org b/etc/README.org deleted file mode 100644 index 60029da36a..0000000000 --- a/etc/README.org +++ /dev/null @@ -1,21 +0,0 @@ -* OpenFOAM Configuration - The main OpenFOAM settings are located in the parent etc/ directory. The bash - and csh shells are supported and to configure OpenFOAM source etc/bashrc or - etc/cshrc respectively which source the following files in the config.sh or - config.csh respectively: - + =settings=: core settings - + =aliases=: aliases for interactive shells - + =unset=: sourced to clear as many OpenFOAM environment settings as possible - + =mpi=: MPI communications library settings - + =ensight=: application settings for EnSight - + =paraview=: application settings for ParaView - + =scotch=: application settings for compiling against scotch - + =metis=: application settings for compiling against metis 5 - - The config.*/example directories contains various example configuration files - for the corresponding shell: - + =compiler=: an example of fine tuning ThirdParty compiler settings - + =openmpi=: an example of fine tuning openmpi settings for OpenFOAM - + =paraview=: an example of chaining to the standard config/paraview with a - different ParaView_VERSION - + =prefs=: an example of supplying alternative site-defined settings diff --git a/etc/bashrc b/etc/bashrc index 3a5262af78..b38f5f5b14 100644 --- a/etc/bashrc +++ b/etc/bashrc @@ -22,9 +22,9 @@ # - $WM_PROJECT_DIR/etc/prefs.sh # # - User or group values (first file found): -# - ~/.OpenFOAM/$WM_PROJECT_VERSION/prefs.sh +# - ~/.OpenFOAM/$WM_PROJECT_API/prefs.sh # - ~/.OpenFOAM/prefs.sh -# - $WM_PROJECT_SITE/$WM_PROJECT_VERSION/etc/prefs.sh +# - $WM_PROJECT_SITE/$WM_PROJECT_API/etc/prefs.sh # - $WM_PROJECT_SITE/etc/prefs.sh # # Environment @@ -43,21 +43,22 @@ export WM_PROJECT=OpenFOAM export WM_PROJECT_VERSION=plus -# [FOAM_INST_DIR] - parent directory containing the OpenFOAM installation. +# [projectDir] - directory containing this OpenFOAM version. # \- When this file is located as $WM_PROJECT_DIR/etc/bashrc, the next lines # should work when sourced by BASH or ZSH shells. If this however fails, # set one of the fallback values to an appropriate path. -# -- -rc="${BASH_SOURCE:-${ZSH_NAME:+$0}}" -[ -n "$rc" ] && FOAM_INST_DIR="$(\cd $(dirname $rc)/../.. && \pwd -L)" || \ -FOAM_INST_DIR="$HOME/$WM_PROJECT" -# FOAM_INST_DIR="/opt/$WM_PROJECT" -# FOAM_INST_DIR="/usr/local/$WM_PROJECT" # +# This can be removed if an absolute path is provided for WM_PROJECT_DIR +# later on in this file +# -- +projectDir="${BASH_SOURCE:-${ZSH_NAME:+$0}}"; +[ -n "$projectDir" ] && projectDir="$(\cd $(dirname $projectDir)/.. && \pwd -L)" ||\ +projectDir="$HOME/OpenFOAM/OpenFOAM-$WM_PROJECT_VERSION" +# projectDir="/opt/OpenFOAM/OpenFOAM-$WM_PROJECT_VERSION" +# projectDir="/usr/local/OpenFOAM/OpenFOAM-$WM_PROJECT_VERSION" # END OF (NORMAL) USER EDITABLE PART ################################################################################ : # Safety statement (if the user removed all fallback values) -unset rc # Configuration environment variables. # Should override via file instead of editing this file. @@ -127,113 +128,31 @@ foamOldDirs="$WM_PROJECT_DIR $WM_THIRD_PARTY_DIR \ $HOME/$WM_PROJECT/$USER $FOAM_USER_APPBIN $FOAM_USER_LIBBIN \ $WM_PROJECT_SITE $FOAM_SITE_APPBIN $FOAM_SITE_LIBBIN" -# Location of installation and third-party software -export WM_PROJECT_INST_DIR=$FOAM_INST_DIR -export WM_PROJECT_DIR=$WM_PROJECT_INST_DIR/$WM_PROJECT-$WM_PROJECT_VERSION -export WM_THIRD_PARTY_DIR=$WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION +# [WM_PROJECT_DIR] - Location of this OpenFOAM version +export WM_PROJECT_DIR="$projectDir" # [WM_PROJECT_USER_DIR] - Location of user files -export WM_PROJECT_USER_DIR=$HOME/$WM_PROJECT/$USER-$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_DIR/site # Normally defined in calling environment -if [ -d "$WM_PROJECT_SITE" ] + +# Finalize setup of OpenFOAM environment for POSIX shell +if [ -d "$WM_PROJECT_DIR" ] then - export WM_PROJECT_SITE + if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ] + then + echo "source $WM_PROJECT_DIR/etc/config.sh/setup" 1>&2 + fi + . "$WM_PROJECT_DIR/etc/config.sh/setup" "$@" else - unset WM_PROJECT_SITE + echo "Error: did not locate installation path for $WM_PROJECT-$WM_PROJECT_VERSION" 1>&2 + echo "No directory: $WM_PROJECT_DIR" 1>&2 fi -# Load shell functions -unset WM_SHELL_FUNCTIONS -. $WM_PROJECT_DIR/etc/config.sh/functions - -# Overrides via -# 1. other (system) values -_foamEtc -mode=o prefs.sh - -# 2. user or group values (unless disabled) -[ -z "$FOAM_CONFIG_NOUSER" ] && _foamEtc -mode=ug prefs.sh - -# Evaluate command-line parameters and record settings for later. -# These can be used to set/unset values, specify additional files etc. -FOAM_SETTINGS="$@" -if [ -z "$FOAM_SETTINGS" ] -then - unset FOAM_SETTINGS -else - export FOAM_SETTINGS - _foamEval "$@" -fi - -# Clean standard environment variables (PATH, MANPATH, LD_LIBRARY_PATH) -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -export PATH MANPATH LD_LIBRARY_PATH -_foamClean PATH "$foamOldDirs" -_foamClean MANPATH "$foamOldDirs" -_foamClean LD_LIBRARY_PATH "$foamOldDirs" - -# Setup for OpenFOAM compilation etc -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -_foamEtc -config settings - -# Setup for third-party packages -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -_foamEtc -config mpi -_foamEtc -config paraview -- "$@" # Pass through for evaluation -_foamEtc -config vtk -_foamEtc -config ensight -_foamEtc -config gperftools -## _foamEtc -config ADIOS -## _foamEtc -config ADIOS2 -_foamEtc -config CGAL -_foamEtc -config scotch -_foamEtc -config FFTW - -if [ -d "$WM_PROJECT_DIR/doc/man1" ] -then - _foamAddMan "$WM_PROJECT_DIR/doc" -fi - -# Interactive shell -if /usr/bin/tty -s 2>/dev/null -then - _foamEtc -config aliases - [ "${BASH_VERSINFO:-0}" -ge 4 ] && _foamEtc -config bash_completion -fi - - -# Clean environment paths again. Only remove duplicates -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -export PATH MANPATH LD_LIBRARY_PATH - -_foamClean PATH -_foamClean MANPATH -_foamClean LD_LIBRARY_PATH - -# Add trailing ':' for system manpages -if [ -n "$MANPATH" ] -then - MANPATH="${MANPATH}:" -fi - -if [ -n "$LD_PRELOAD" ] -then - export LD_PRELOAD - _foamClean LD_PRELOAD -fi - - -# Cleanup temporary information -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Unload shell functions -. $WM_PROJECT_DIR/etc/config.sh/functions - -# Variables (done as the last statement for a clean exit code) -unset FOAM_INST_DIR # Old variable name (OpenFOAM-v1606) - now unneeded -unset cleaned foamOldDirs +# Cleanup variables (done as final statement for a clean exit code) +unset foamOldDirs projectDir #------------------------------------------------------------------------------ diff --git a/etc/config.csh/functions b/etc/config.csh/functions index 7365e632bc..f78a161f74 100644 --- a/etc/config.csh/functions +++ b/etc/config.csh/functions @@ -33,6 +33,13 @@ alias _foamAddLib 'setenv LD_LIBRARY_PATH \!*\:${LD_LIBRARY_PATH}' # $2 = fallback libname ('lib' or 'lib64') alias _foamAddLibAuto 'eval `$WM_PROJECT_DIR/bin/tools/lib-dir -csh \!*`' +# Echo values when FOAM_VERBOSE is on, no-op otherwise +if ($?FOAM_VERBOSE && $?prompt) then + alias _foamEcho 'echo \!*' +else + alias _foamEcho 'true' +endif + # Source an etc file, possibly with some verbosity if ($?FOAM_VERBOSE && $?prompt) then if ($?FOAM_CONFIG_NOUSER) then diff --git a/etc/config.csh/settings b/etc/config.csh/settings index e865f46af2..ac09ece5bd 100644 --- a/etc/config.csh/settings +++ b/etc/config.csh/settings @@ -147,9 +147,6 @@ setenv WM_OPTIONS "$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION$WM_C setenv FOAM_APPBIN "$WM_PROJECT_DIR/platforms/$WM_OPTIONS/bin" setenv FOAM_LIBBIN "$WM_PROJECT_DIR/platforms/$WM_OPTIONS/lib" -# External (ThirdParty) libraries -setenv FOAM_EXT_LIBBIN "$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib" - # Site-specific (group) files # Default @@ -173,7 +170,7 @@ setenv FOAM_USER_LIBBIN "$WM_PROJECT_USER_DIR/platforms/$WM_OPTIONS/lib" # Prepend wmake to the path - not required for runtime-only environment set foundDir="${WM_PROJECT_DIR}/wmake" if ( $?WM_DIR ) then - if ( -d "${WM_DIR}" ) foundDir="${WM_DIR}" + if ( -d "${WM_DIR}" ) set foundDir="${WM_DIR}" endif if ( -d "$foundDir" ) then setenv PATH "${foundDir}:${PATH}" @@ -189,8 +186,8 @@ setenv PATH "${WM_PROJECT_DIR}/bin:${PATH}" if ( -d "$siteDir/bin" ) then # Generic _foamAddPath "$siteDir/bin" endif -if ( -d "$siteDir/$WM_PROJECT_VERSION/bin" ) then # Version-specific - _foamAddPath "$siteDir/$WM_PROJECT_VERSION/bin" +if ( -d "$siteDir/$WM_PROJECT_API/bin" ) then # API-specific + _foamAddPath "$siteDir/$WM_PROJECT_API/bin" endif # OpenFOAM executables (user, group, standard) @@ -200,8 +197,11 @@ _foamAddPath "${FOAM_USER_APPBIN}:${FOAM_SITE_APPBIN}:${FOAM_APPBIN}" _foamAddLib "$FOAM_LIBBIN/dummy" # External (ThirdParty) libraries. Also allowed to be unset -if ( $?FOAM_EXT_LIBBIN ) then - _foamAddLib $FOAM_EXT_LIBBIN +if ( -d "$WM_THIRD_PARTY_DIR" ) then + setenv FOAM_EXT_LIBBIN "$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib" + _foamAddLib "$FOAM_EXT_LIBBIN" +else + unsetenv FOAM_EXT_LIBBIN endif # OpenFOAM libraries (user, group, standard) diff --git a/etc/config.csh/setup b/etc/config.csh/setup new file mode 100644 index 0000000000..7f02c0dcb6 --- /dev/null +++ b/etc/config.csh/setup @@ -0,0 +1,187 @@ +#----------------------------------*-sh-*-------------------------------------- +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2018 OpenCFD Ltd. +# \\/ M anipulation | +#------------------------------------------------------------------------------ +# License +# This file is part of OpenFOAM, licensed under GNU General Public License +# . +# +# File +# etc/config.csh/setup +# - sourced by OpenFOAM-*/etc/cshrc +# +# Description +# Finalize setup of OpenFOAM environment for C-shell (csh, tcsh) +# +# Environment +# FOAM_VERBOSE (set/unset) +# - add extra verbosity when sourcing files +# FOAM_CONFIG_NOUSER (set/unset) +# - suppress use of user/group configuration files +# +#------------------------------------------------------------------------------ + +# [WM_PROJECT_API] - The API level for the project +setenv WM_PROJECT_API `$WM_PROJECT_DIR/bin/foamEtcFile -show-api` + +# The installation parent directory +set prefixDir="${WM_PROJECT_DIR:h}" + +# Load shell "functions" (actually aliases) +source "$WM_PROJECT_DIR/etc/config.csh/functions" + + +# [WM_THIRD_PARTY_DIR] - Location of third-party software components +# \- This may be installed in a directory parallel to the OpenFOAM project +# directory, with the same version name or using the API value. +# It may also not be required at all, in which case a dummy "ThirdParty" +# directory inside of the OpenFOAM project directory. +# +# Note: only accept if the directory exists and contains a "Allwmake" file + +setenv WM_THIRD_PARTY_DIR +set foundDir='' +_foamEcho "Locating ThirdParty directory" +foreach WM_THIRD_PARTY_DIR (\ + "$WM_PROJECT_DIR/ThirdParty" \ + "$prefixDir/ThirdParty-$WM_PROJECT_VERSION" \ + "$prefixDir/ThirdParty-v$WM_PROJECT_API" \ + "$prefixDir/ThirdParty-$WM_PROJECT_API" \ + "$prefixDir/ThirdParty-common" \ +) + _foamEcho "... $WM_THIRD_PARTY_DIR" + if ( -d "$WM_THIRD_PARTY_DIR" ) then + if ( -f "$WM_THIRD_PARTY_DIR/Allwmake" || -d "$WM_THIRD_PARTY_DIR/platforms" ) then + set foundDir=true + break + endif + endif +end + +if ( "${%foundDir}" ) then + _foamEcho "Using $WM_THIRD_PARTY_DIR" +else + # Dummy fallback value + setenv WM_THIRD_PARTY_DIR "$WM_PROJECT_DIR/ThirdParty" + _foamEcho "Dummy $WM_THIRD_PARTY_DIR" +endif +# Done with ThirdParty discovery + + +# Overrides via +# 1. other (system) values +_foamEtc -mode=o prefs.csh + +# 2. user or group values (unless disabled) +if (! $?FOAM_CONFIG_NOUSER ) then + _foamEtc -mode=ug prefs.csh +endif + + +# Capture and evaluate any command-line parameters +# These can be used to set/unset values, specify additional files etc. +setenv FOAM_SETTINGS "${*}" + +while ( $#argv > 0 ) + switch ($argv[1]) + case -*: + # Stray option (not meant for us here) -> get out + break + breaksw + case *=: + # name= -> unsetenv name + _foamEcho "unsetenv $argv[1]:s/=//" + eval "unsetenv $argv[1]:s/=//" + breaksw + case *=*: + # name=value -> setenv name value + _foamEcho "setenv $argv[1]:s/=/ /" + eval "setenv $argv[1]:s/=/ /" + breaksw + default: + # Filename: source it + if ( -f "$argv[1]" ) then + _foamEcho "Using: $argv[1]" + source "$argv[1]" + else + _foamEtc -silent "$argv[1]" + endif + breaksw + endsw + shift +end + + +# Clean standard environment variables (PATH, MANPATH, LD_LIBRARY_PATH) +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Prevent local variables from shadowing setenv variables +unset PATH MANPATH LD_LIBRARY_PATH LD_PRELOAD +if (! $?LD_LIBRARY_PATH ) setenv LD_LIBRARY_PATH +if (! $?MANPATH ) setenv MANPATH + +_foamClean PATH "$foamOldDirs" +_foamClean MANPATH "$foamOldDirs" +_foamClean LD_LIBRARY_PATH "$foamOldDirs" + +# Setup for OpenFOAM compilation etc +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +_foamEtc -config settings + +# Setup for third-party packages +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +_foamEtc -config mpi +_foamEtc -config paraview -- "$FOAM_SETTINGS" # Pass through for evaluation +_foamEtc -config vtk +_foamEtc -config ensight +## _foamEtc -config ADIOS +## _foamEtc -config ADIOS2 +_foamEtc -config CGAL +_foamEtc -config FFTW + +if ( -d "$WM_PROJECT_DIR/doc/man1" ) then + _foamAddMan "$WM_PROJECT_DIR/doc" +endif + +# Interactive shell +if ($?prompt) then + _foamEtc -config aliases + _foamEtc -config tcsh_completion +endif + + +# Clean environment paths again. Only remove duplicates +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +_foamClean PATH +_foamClean MANPATH +_foamClean LD_LIBRARY_PATH + +# Add trailing ':' for system manpages +if ( $?MANPATH ) then + setenv MANPATH "${MANPATH}:" +endif + +if ( $?LD_PRELOAD ) then + _foamClean LD_PRELOAD +endif + + +# Cleanup temporary information +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Unload shell "functions" +unalias _foamClean +unalias _foamEcho +unalias _foamEtc +unalias _foamAddPath +unalias _foamAddMan +unalias _foamAddLib +unalias _foamAddLibAuto + +# Variables (done as final statement for a clean exit code) +unset cleaned foamOldDirs foundDir prefixDir + +#------------------------------------------------------------------------------ diff --git a/etc/config.csh/unset b/etc/config.csh/unset index 7769d74e61..b35cef97ef 100644 --- a/etc/config.csh/unset +++ b/etc/config.csh/unset @@ -59,6 +59,7 @@ unsetenv WM_OPTIONS unsetenv WM_OSTYPE unsetenv WM_PRECISION_OPTION unsetenv WM_PROJECT +unsetenv WM_PROJECT_API unsetenv WM_PROJECT_DIR unsetenv WM_PROJECT_INST_DIR unsetenv WM_PROJECT_SITE diff --git a/etc/config.sh/functions b/etc/config.sh/functions index eef3d9941d..ead8071054 100644 --- a/etc/config.sh/functions +++ b/etc/config.sh/functions @@ -40,6 +40,15 @@ then unset "foamVar_name" } + # Echo values to stderr when FOAM_VERBOSE is on, no-op otherwise + unset -f _foamEcho 2>/dev/null + if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ] + then + _foamEcho() { echo "$@" 1>&2; } + else + _foamEcho() { true; } + fi + # Source an etc file, possibly with some verbosity # - use eval to avoid intermediate variables (ksh doesn't have 'local') unset -f _foamEtc 2>/dev/null @@ -216,7 +225,7 @@ else # Was previously loaded/defined - now unset unset -f _foamAddPath _foamAddMan _foamAddLib _foamAddLibAuto 2>/dev/null - unset -f _foamClean _foamEtc _foamEval 2>/dev/null + unset -f _foamClean _foamEcho _foamEtc _foamEval 2>/dev/null unset foamClean unset WM_SHELL_FUNCTIONS diff --git a/etc/config.sh/settings b/etc/config.sh/settings index ae63d010fe..23aec009a3 100644 --- a/etc/config.sh/settings +++ b/etc/config.sh/settings @@ -140,9 +140,6 @@ export WM_OPTIONS="$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION$WM_C export FOAM_APPBIN="$WM_PROJECT_DIR/platforms/$WM_OPTIONS/bin" export FOAM_LIBBIN="$WM_PROJECT_DIR/platforms/$WM_OPTIONS/lib" -# External (ThirdParty) libraries -export FOAM_EXT_LIBBIN="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib" - # Site-specific (group) files # Default @@ -187,9 +184,9 @@ if [ -d "$siteDir/bin" ] # Generic then _foamAddPath "$siteDir/bin" fi -if [ -d "$siteDir/$WM_PROJECT_VERSION/bin" ] # Version-specific +if [ -d "$siteDir/$WM_PROJECT_API/bin" ] # API-specific then - _foamAddPath "$siteDir/$WM_PROJECT_VERSION/bin" + _foamAddPath "$siteDir/$WM_PROJECT_API/bin" fi # OpenFOAM executables (user, group, standard) @@ -198,10 +195,13 @@ _foamAddPath "$FOAM_USER_APPBIN:$FOAM_SITE_APPBIN:$FOAM_APPBIN" # Dummy versions of external libraries. To be found last in LD_LIBRARY_PATH _foamAddLib "$FOAM_LIBBIN/dummy" -# External libraries (allowed to be unset) -if [ -n "$FOAM_EXT_LIBBIN" ] +# External (ThirdParty) libraries. Also allowed to be unset +if [ -d "$WM_THIRD_PARTY_DIR" ] then - _foamAddLib $FOAM_EXT_LIBBIN + export FOAM_EXT_LIBBIN="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib" + _foamAddLib "$FOAM_EXT_LIBBIN" +else + unset FOAM_EXT_LIBBIN fi # OpenFOAM libraries (user, group, standard) diff --git a/etc/config.sh/setup b/etc/config.sh/setup new file mode 100644 index 0000000000..423605ce92 --- /dev/null +++ b/etc/config.sh/setup @@ -0,0 +1,171 @@ +#----------------------------------*-sh-*-------------------------------------- +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 2018 OpenCFD Ltd. +# \\/ M anipulation | +#------------------------------------------------------------------------------ +# License +# This file is part of OpenFOAM, licensed under GNU General Public License +# . +# +# File +# etc/config.sh/setup +# - sourced by OpenFOAM-*/etc/bashrc +# +# Description +# Finalize setup of OpenFOAM environment for POSIX shell. +# +# Environment +# FOAM_VERBOSE (set/unset) +# - add extra verbosity when sourcing files +# FOAM_CONFIG_NOUSER (set/unset) +# - suppress use of user/group configuration files +# +#------------------------------------------------------------------------------ + +# [WM_PROJECT_API] - The API level for the project +export WM_PROJECT_API="$($WM_PROJECT_DIR/bin/foamEtcFile -show-api)" + +# The installation parent directory +prefixDir="${WM_PROJECT_DIR%/*}" + +# Load shell functions +unset WM_SHELL_FUNCTIONS +. "$WM_PROJECT_DIR/etc/config.sh/functions" + + +# [WM_THIRD_PARTY_DIR] - Location of third-party software components +# \- This may be installed in a directory parallel to the OpenFOAM project +# directory, with the same version name or using the API value. +# It may also not be required at all, in which case a dummy "ThirdParty" +# directory inside of the OpenFOAM project directory. +# +# Note: only accept if the directory exists and contains a "Allwmake" file +export WM_THIRD_PARTY_DIR +unset foundDir + +_foamEcho "Locating ThirdParty directory" + +for WM_THIRD_PARTY_DIR in \ + "$WM_PROJECT_DIR/ThirdParty" \ + "$prefixDir/ThirdParty-$WM_PROJECT_VERSION" \ + "$prefixDir/ThirdParty-v$WM_PROJECT_API" \ + "$prefixDir/ThirdParty-$WM_PROJECT_API" \ + "$prefixDir/ThirdParty-common" \ + ; +do + _foamEcho "... $WM_THIRD_PARTY_DIR" + if [ -d "$WM_THIRD_PARTY_DIR" ] + then + if [ -f "$WM_THIRD_PARTY_DIR/Allwmake" ] || \ + [ -d "$WM_THIRD_PARTY_DIR/platforms" ] + then + foundDir=true + break + fi + fi +done + +if [ -n "$foundDir" ] +then + _foamEcho "Using $WM_THIRD_PARTY_DIR" +else + # Dummy fallback value + WM_THIRD_PARTY_DIR="$WM_PROJECT_DIR/ThirdParty" + _foamEcho "Dummy $WM_THIRD_PARTY_DIR" +fi +# Done with ThirdParty discovery + + +# Overrides via +# 1. other (system) values +_foamEtc -mode=o prefs.sh + +# 2. user or group values (unless disabled) +[ -z "$FOAM_CONFIG_NOUSER" ] && _foamEtc -mode=ug prefs.sh + + +# Capture and evaluate any command-line parameters +# These can be used to set/unset values, specify additional files etc. +FOAM_SETTINGS="$@" + +# Evaluate the command-line parameters, which were saved as FOAM_SETTINGS. +# These can be used to set/unset values, specify additional files etc. +if [ -z "$FOAM_SETTINGS" ] +then + unset FOAM_SETTINGS +else + export FOAM_SETTINGS + _foamEval "$@" +fi + + +# Clean standard environment variables (PATH, MANPATH, LD_LIBRARY_PATH) +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +export PATH MANPATH LD_LIBRARY_PATH +_foamClean PATH "$foamOldDirs" +_foamClean MANPATH "$foamOldDirs" +_foamClean LD_LIBRARY_PATH "$foamOldDirs" + +# Setup for OpenFOAM compilation etc +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +_foamEtc -config settings + +# Setup for third-party packages +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +_foamEtc -config mpi +_foamEtc -config paraview -- "$@" # Pass through for evaluation +_foamEtc -config vtk +_foamEtc -config ensight +_foamEtc -config gperftools +## _foamEtc -config ADIOS +## _foamEtc -config ADIOS2 +_foamEtc -config CGAL +_foamEtc -config scotch +_foamEtc -config FFTW + +if [ -d "$WM_PROJECT_DIR/doc/man1" ] +then + _foamAddMan "$WM_PROJECT_DIR/doc" +fi + +# Interactive shell +if /usr/bin/tty -s 2>/dev/null +then + _foamEtc -config aliases + [ "${BASH_VERSINFO:-0}" -ge 4 ] && _foamEtc -config bash_completion +fi + + +# Clean environment paths again. Only remove duplicates +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +export PATH MANPATH LD_LIBRARY_PATH + +_foamClean PATH +_foamClean MANPATH +_foamClean LD_LIBRARY_PATH + +# Add trailing ':' for system manpages +if [ -n "$MANPATH" ] +then + MANPATH="${MANPATH}:" +fi + +if [ -n "$LD_PRELOAD" ] +then + export LD_PRELOAD + _foamClean LD_PRELOAD +fi + + +# Cleanup temporary information +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Unload shell functions +. "$WM_PROJECT_DIR/etc/config.sh/functions" + +# Variables (done as the last statement for a clean exit code) +unset cleaned foamOldDirs foundDir prefixDir + +#------------------------------------------------------------------------------ diff --git a/etc/config.sh/unset b/etc/config.sh/unset index 4ebfe76185..4d3c5fd0e4 100644 --- a/etc/config.sh/unset +++ b/etc/config.sh/unset @@ -50,6 +50,7 @@ unset WM_OPTIONS unset WM_OSTYPE unset WM_PRECISION_OPTION unset WM_PROJECT +unset WM_PROJECT_API unset WM_PROJECT_DIR unset WM_PROJECT_INST_DIR unset WM_PROJECT_SITE diff --git a/etc/cshrc b/etc/cshrc index 28b93b5ef9..971041cfa8 100644 --- a/etc/cshrc +++ b/etc/cshrc @@ -22,10 +22,10 @@ # - $WM_PROJECT_DIR/etc/prefs.csh # # - User or group values (first file found): -# - ~/.OpenFOAM/$WM_PROJECT_VERSION/prefs.csh +# - ~/.OpenFOAM/$WM_PROJECT_API/prefs.csh # - ~/.OpenFOAM/prefs.csh -# - $WM_PROJECT_SITE/$WM_PROJECT_VERSION/etc/prefs.csh -# - $WM_PROJECT_SITE/etc/prefs.csh +# - $WM_PROJECT_SITE/$WM_PROJECT_API/etc/prefs.csh +# - $WM_PROJECT_SITE/prefs.csh # # Environment # FOAM_VERBOSE (set/unset) @@ -43,17 +43,22 @@ setenv WM_PROJECT OpenFOAM setenv WM_PROJECT_VERSION plus -# [FOAM_INST_DIR] - parent directory containing the OpenFOAM installation. +# [projectDir] - parent directory containing the OpenFOAM installation. # \- When this file is located as $WM_PROJECT_DIR/etc/cshrc, the next lines # should work when sourced by CSH or TCSH shells. If this however fails, # set one of the fallback values to an appropriate path. -# -- -set FOAM_INST_DIR=`lsof +p $$ |& \ - sed -n -e 's@[^/]*@@' -e 's@/'$WM_PROJECT'[^/]*/etc/cshrc.*@@p'` -# set FOAM_INST_DIR=$HOME/$WM_PROJECT -# set FOAM_INST_DIR=/opt/$WM_PROJECT -# set FOAM_INST_DIR=/usr/local/$WM_PROJECT # +# This can be removed if an absolute path is provided for WM_PROJECT_DIR +# later on in this file. +# -- +# If the directory naming does not match WM_PROJECT, need to change here +set projectName="$WM_PROJECT" +set projectDir=`lsof +p $$ |& \ + sed -n -e 's@^[^/]*@@; s@\(/'"$projectName"'[^/]*\)/etc/cshrc[^/]*@\1@p'` + +# set projectDir="$HOME/OpenFOAM/OpenFOAM-$WM_PROJECT_VERSION" +# set projectDir="/opt/OpenFOAM/OpenFOAM-$WM_PROJECT_VERSION" +# set projectDir="/usr/local/OpenFOAM/OpenFOAM-$WM_PROJECT_VERSION" # END OF (NORMAL) USER EDITABLE PART ################################################################################ @@ -138,10 +143,8 @@ if ( $?FOAM_SITE_LIBBIN ) then set foamOldDirs="$foamOldDirs $FOAM_SITE_LIBBIN" endif -# Location of installation and third-party software -setenv WM_PROJECT_INST_DIR $FOAM_INST_DIR -setenv WM_PROJECT_DIR $WM_PROJECT_INST_DIR/$WM_PROJECT-$WM_PROJECT_VERSION -setenv WM_THIRD_PARTY_DIR $WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION +# [WM_PROJECT_DIR] - Location of this OpenFOAM version +setenv WM_PROJECT_DIR "$projectDir" # [WM_PROJECT_USER_DIR] - Location of user files setenv WM_PROJECT_USER_DIR "$HOME/$WM_PROJECT/$LOGNAME-$WM_PROJECT_VERSION" @@ -157,118 +160,17 @@ else unsetenv WM_PROJECT_SITE endif -# Load shell "functions" (actually aliases) -source $WM_PROJECT_DIR/etc/config.csh/functions -# Overrides via -# 1. other (system) values -_foamEtc -mode=o prefs.csh - -# 2. user or group values (unless disabled) -if (! $?FOAM_CONFIG_NOUSER ) then - _foamEtc -mode=ug prefs.csh +# Finalize setup of OpenFOAM environment +if ( -d "$WM_PROJECT_DIR" ) then + if ($?FOAM_VERBOSE && $?prompt) echo "source $WM_PROJECT_DIR/etc/config.csh/setup" + source "$WM_PROJECT_DIR/etc/config.csh/setup" "${*}" +else + echo "Error: did not locate installation path for $WM_PROJECT-$WM_PROJECT_VERSION" + echo "No directory: $WM_PROJECT_DIR" endif -# Evaluate command-line parameters and record settings for later. -# These can be used to set/unset values, specify additional files etc. -setenv FOAM_SETTINGS "${*}" -while ( $#argv > 0 ) - switch ($argv[1]) - case -*: - # Stray option (not meant for us here) -> get out - break - breaksw - case *=: - # name= -> unsetenv name - if ($?FOAM_VERBOSE && $?prompt) echo "unsetenv $argv[1]:s/=//" - eval "unsetenv $argv[1]:s/=//" - breaksw - case *=*: - # name=value -> setenv name value - if ($?FOAM_VERBOSE && $?prompt) echo "setenv $argv[1]:s/=/ /" - eval "setenv $argv[1]:s/=/ /" - breaksw - default: - # Filename: source it - if ( -f "$argv[1]" ) then - if ($?FOAM_VERBOSE && $?prompt) echo "Using: $argv[1]" - source "$argv[1]" - else - _foamEtc -silent "$argv[1]" - endif - breaksw - endsw - shift -end - - -# Clean standard environment variables (PATH, MANPATH, LD_LIBRARY_PATH) -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# Prevent local variables from shadowing setenv variables -unset PATH MANPATH LD_LIBRARY_PATH LD_PRELOAD -if (! $?LD_LIBRARY_PATH ) setenv LD_LIBRARY_PATH -if (! $?MANPATH ) setenv MANPATH - -_foamClean PATH "$foamOldDirs" -_foamClean MANPATH "$foamOldDirs" -_foamClean LD_LIBRARY_PATH "$foamOldDirs" - -# Setup for OpenFOAM compilation etc -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -_foamEtc -config settings - -# Setup for third-party packages -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -_foamEtc -config mpi -_foamEtc -config paraview -- "$FOAM_SETTINGS" # Pass through for evaluation -_foamEtc -config vtk -_foamEtc -config ensight -## _foamEtc -config ADIOS -## _foamEtc -config ADIOS2 -_foamEtc -config CGAL -_foamEtc -config FFTW - -if ( -d "$WM_PROJECT_DIR/doc/man1" ) then - _foamAddMan "$WM_PROJECT_DIR/doc" -endif - -# Interactive shell -if ($?prompt) then - _foamEtc -config aliases - _foamEtc -config tcsh_completion -endif - - -# Clean environment paths again. Only remove duplicates -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -_foamClean PATH -_foamClean MANPATH -_foamClean LD_LIBRARY_PATH - -# Add trailing ':' for system manpages -if ( $?MANPATH ) then - setenv MANPATH "${MANPATH}:" -endif - -if ( $?LD_PRELOAD ) then - _foamClean LD_PRELOAD -endif - - -# Cleanup temporary information -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Unload shell "functions" -unalias _foamClean -unalias _foamEtc -unalias _foamAddPath -unalias _foamAddMan -unalias _foamAddLib -unalias _foamAddLibAuto - -# Variables (done as the last statement for a clean exit code) -unset FOAM_INST_DIR # Old variable name (OpenFOAM-v1606) - now unneeded -unset cleaned foamOldDirs +# Cleanup variables (done as final statement for a clean exit code) +unset foamOldDirs projectDir projectName #------------------------------------------------------------------------------ diff --git a/src/Allwmake b/src/Allwmake index bb96a54004..7742d3502c 100755 --- a/src/Allwmake +++ b/src/Allwmake @@ -16,7 +16,7 @@ cd ${0%/*} && wmakeCheckPwd "$WM_PROJECT_DIR/src" 2>/dev/null || { #------------------------------------------------------------------------------ # Trigger update of version strings as required -wmakePrintBuild -check || wrmo OpenFOAM/global/global.o 2>/dev/null +wmakeBuildInfo -check || wrmo OpenFOAM/global/global.o 2>/dev/null wmakeLnInclude -u OpenFOAM wmakeLnInclude -u OSspecific/"${WM_OSTYPE:-POSIX}" diff --git a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C index 6e564d58c6..0e92a02440 100644 --- a/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C +++ b/src/OpenFOAM/db/dynamicLibrary/dynamicCode/dynamicCode.C @@ -81,6 +81,7 @@ void Foam::dynamicCode::checkSecurity << " allowSystemOperations 1" << nl << nl << "to the InfoSwitches setting in the system controlDict." << nl << "The system controlDict is any of" << nl << nl + << " ~/.OpenFOAM/" << OPENFOAM << "/controlDict" << nl << " ~/.OpenFOAM/controlDict" << nl << " $WM_PROJECT_DIR/etc/controlDict" << nl << endl << exit(FatalIOError); diff --git a/src/OpenFOAM/global/etcFiles/etcFiles.C b/src/OpenFOAM/global/etcFiles/etcFiles.C index 68cdfd067b..c192baab4c 100644 --- a/src/OpenFOAM/global/etcFiles/etcFiles.C +++ b/src/OpenFOAM/global/etcFiles/etcFiles.C @@ -119,18 +119,8 @@ Foam::fileNameList searchEtc bool (*accept)(const Foam::fileName&) ) { - Foam::fileName version(Foam::getEnv("WM_PROJECT_VERSION")); - - // Fallback when WM_PROJECT_VERSION is unset - if (version.empty()) - { - #if OPENFOAM - version.assign(std::to_string(OPENFOAM)); - #else - version.assign(foamVersion::version); - #endif - } - + // Could use foamVersion::api, but this more direct. + const Foam::fileName version(std::to_string(OPENFOAM)); Foam::fileNameList list; Foam::fileName dir, candidate; diff --git a/src/OpenFOAM/global/global.Cver b/src/OpenFOAM/global/global.Cver index 5e8e56ad5a..1f27a0f91b 100644 --- a/src/OpenFOAM/global/global.Cver +++ b/src/OpenFOAM/global/global.Cver @@ -26,8 +26,8 @@ Description It is important that these are constructed in the appropriate order to avoid the use of unconstructed data in the global namespace. - This file has the extension .Cver to trigger a Makefile rule that converts - 'VERSION\_STRING' and 'BUILD\_STRING' into the appropriate strings. + This file has a '.Cver' extension to trigger a Makefile rule to replace + 'BUILD', 'VERSION' tags with the corresponding strings. \*---------------------------------------------------------------------------*/ @@ -48,14 +48,14 @@ const int Foam::foamVersion::api // Value of PATCH generated by the build-script const std::string Foam::foamVersion::patch ( - "" + "@PATCH@" ); // Value of the BUILD generated by the build-script const std::string Foam::foamVersion::build ( - "BUILD_STRING" + "@BUILD@" ); @@ -78,7 +78,7 @@ const std::string Foam::foamVersion::buildArch // Only required for compatibility const std::string Foam::foamVersion::version ( - "VERSION_STRING" + "@VERSION@" ); diff --git a/src/functionObjects/utilities/systemCall/systemCall.C b/src/functionObjects/utilities/systemCall/systemCall.C index 4d5c816ec7..26d19cd558 100644 --- a/src/functionObjects/utilities/systemCall/systemCall.C +++ b/src/functionObjects/utilities/systemCall/systemCall.C @@ -127,6 +127,7 @@ bool Foam::functionObjects::systemCall::read(const dictionary& dict) << " allowSystemOperations 1" << nl << nl << "to the InfoSwitches setting in the system controlDict." << nl << "The system controlDict is any of" << nl << nl + << " ~/.OpenFOAM/" << OPENFOAM << "/controlDict" << nl << " ~/.OpenFOAM/controlDict" << nl << " $WM_PROJECT_DIR/etc/controlDict" << nl << endl << exit(FatalError); diff --git a/wmake/rules/General/version b/wmake/rules/General/version index ef3aa5c37d..08400d12cc 100644 --- a/wmake/rules/General/version +++ b/wmake/rules/General/version @@ -2,11 +2,9 @@ SUFFIXES += .Cver -# Update version strings in C++ file and in $WM_PROJECT_DIR/.build file +# Update strings in C++ file and in META-INFO files Cvertoo = \ - sed -e 's!VERSION_STRING!$(shell wmakePrintBuild -major)!' \ - -e 's!BUILD_STRING!$(shell wmakePrintBuild -update)!' \ - $< > $(@D)/$( $(@D)/$(. +# +# Script +# wmakeBuildInfo +# +# Description +# Print the version used when building the project +# +# Environment +# - WM_PROJECT_DIR +# - WM_DIR (unset defaults to WM_PROJECT_DIR/wmake) +# +# Note +# Partial logic is also implemented in the bin/foamEtcFile +# -show-api and -show-patch options. +# Make sure that any changes here are also reflected there. +# +#------------------------------------------------------------------------------ +# Locations +rulesFile="${WM_DIR:-$WM_PROJECT_DIR/wmake}/rules/General/general" +metaInfoDir="$WM_PROJECT_DIR/META-INFO" + +usage() { + exec 1>&2 + + while [ "$#" -ge 1 ]; do echo "$1"; shift; done + cat<&2 + echo + echo "Error encountered:" + while [ "$#" -ge 1 ]; do echo " $1"; shift; done + echo + echo "See '${0##*/} -help' for usage" + echo + exit 1 +} + +#------------------------------------------------------------------------------ +# Parse arguments and options +#------------------------------------------------------------------------------ +unset optCheck optDryRun optUpdate optQuery optFilter + +while [ "$#" -gt 0 ] +do + case "$1" in + -h | -help*) + usage + ;; + -check) + optCheck=true + ;; + -diff) + optCheck=verbose + ;; + -dry-run) + optDryRun=true + ;; + -update) + optUpdate=true + ;; + -query) + optQuery="make:meta" + ;; + -query-make | -query-meta) + optQuery="$optQuery:${1##*-}" + ;; + -show-api) + optQuery="api" + ;; + -show-patch) + optQuery="patch" + ;; + -filter) + optFilter=true + shift # Stop here, a file name follows + break + ;; + *) + die "unknown option/argument: '$1'" + ;; + esac + shift +done + +#------------------------------------------------------------------------------ + +if [ "$optFilter" = true ] +then + [ -f "$1" ] || { + echo "Error in ${0##*/}: file not found '$1'" 1>&2 + exit 2 + } + + # Disable other methods that generate output to stdout + unset optCheck optQuery +else + [ "$#" -eq 0 ] || die "Unexpected option/arguments $@" + + # Nothing specified? Default to -query-make + if [ -z "$optCheck$optUpdate$optQuery" ] + then + optQuery="make" + fi +fi + + +#------------------------------------------------------------------------------ + +# Variables +declare -A makeInfo +declare -A metaInfo + +# +# Populate makeInfo array +# +# - api : from rules/General/general +# - patch : cached value from previous make +# - branch : from git +# - build : from git +# +# Failure modes: +# - No api information (can't find file etc). +# -> FATAL: should never happen. +# +# - No git installed or no git repo +# -> branch and build are populated as empty strings +# +# - Working on detached head. +# -> branch has value "HEAD" instead of something more readable. +# +getMakeInfo() +{ + local api patch build branch + makeInfo=() + + # (api) from WM_DIR/rules/General/general + # - extract WM_VERSION = OPENFOAM= + + api="$(sed -ne '/^ *#/!{ /WM_VERSION.*OPENFOAM=/{ s@^.*OPENFOAM= *\([0-9][0-9]*\).*@\1@p; q }}' $rulesFile 2>/dev/null)" + + if [ -d "$metaInfoDir" ] + then + # (patch) from build-info - not from api-info + patch="$(sed -ne 's@^patch *= *\([0-9][0-9]*\).*@\1@p' $metaInfoDir/build-info 2>/dev/null)" + fi + + # Build info from git + build="$(git --git-dir=$WM_PROJECT_DIR/.git log -1 --date='format:%y%m%d' --format='%h-%ad' 2>/dev/null)" + + # Branch info from git + if [ -n "$build" ] + then + branch="$(git --git-dir=$WM_PROJECT_DIR/.git rev-parse --abbrev-ref HEAD 2>/dev/null)" + fi + + makeInfo[api]="$api" + makeInfo[patch]="${patch:-0}" # default is 0 + makeInfo[branch]="$branch" + makeInfo[build]="$build" + makeInfo[cached]=true +} + + +# +# Populate metaInfo array +# +# - api : from META-INFO/api-info +# - patch : from META-INFO/api-info +# - branch : from META-INFO/build-info +# - build : from META-INFO/build-info +# +# Failure modes: +# - Directory, file or entry not found. +# -> corresponding entries are empty strings +# +getMetaInfo() +{ + local api patch build branch + metaInfo=() + + if [ -d "$metaInfoDir" ] + then + # (api, patch) from api-info + # (branch, build) from build-info + + api="$(sed -ne 's@^api *= *\([0-9][0-9]*\).*@\1@p' $metaInfoDir/api-info 2>/dev/null)" + patch="$(sed -ne 's@^patch *= *\([0-9][0-9]*\).*@\1@p' $metaInfoDir/api-info 2>/dev/null)" + branch="$(sed -ne 's@^branch *= *\([^ ]*\).*@\1@p' $metaInfoDir/build-info 2>/dev/null)" + build="$(sed -ne 's@^build *= *\([^ ]*\).*@\1@p' $metaInfoDir/build-info 2>/dev/null)" + fi + + metaInfo[api]="$api" + metaInfo[patch]="${patch:-0}" # default is 0 + metaInfo[branch]="$branch" + metaInfo[build]="$build" + metaInfo[cached]=true +} + + +# +# Get api from rules/General/general +# +# Failure modes: +# - No api information (can't find file etc). +# -> Fatal for building, but could be OK for a stripped down version +# +# Fallback. Get from api-info +# +getApi() +{ + [ -n "${makeInfo[cached]}" ] || getMakeInfo + + # Local copy + local api="${makeInfo[api]}" + + if [ -z "$api" ] + then + [ -n "${metaInfo[cached]}" ] || getMetaInfo + api="${metaInfo[api]}" + fi + + if [ -n "$api" ] + then + echo "$api" + else + return 1 + fi +} + + +# Get patch from meta-info / api-info +# +# Failure modes: +# - No patch information (can't find file etc). +# +getPatchLevel() +{ + [ -n "${metaInfo[cached]}" ] || getMetaInfo + + # Local copy + local value="${metaInfo[patch]}" + + if [ -n "$value" ] + then + echo "$value" + else + return 1 + fi +} + + +# Report make info +reportMakeInfo() +{ + local key + + [ -n "${makeInfo[cached]}" ] || getMakeInfo + [ -n "${metaInfo[cached]}" ] || getMetaInfo + + local patch="${metaInfo[patch]}" # <- From meta-info only + makeInfo[patch]="${patch:=0}" # Extra safety + + echo "make" + for key in api patch branch build + do + echo " $key = ${makeInfo[$key]}" + done +} + + +# Report meta info +reportMetaInfo() +{ + local key + + [ -n "${metaInfo[cached]}" ] || getMetaInfo + + local patch="${metaInfo[patch]}" # <- From meta-info only + metaInfo[patch]="${patch:=0}" # Extra safety + + echo "meta" + for key in api patch branch build + do + echo " $key = ${metaInfo[$key]}" + done +} + + +# Test make vs meta info. +# Return 0 for no differences, 1 otherwise +# $1 == verbose, print as diff. Silent otherwise +checkDiff() +{ + local verbose="$1" + local key diff + + [ -n "${makeInfo[cached]}" ] || getMakeInfo + [ -n "${metaInfo[cached]}" ] || getMetaInfo + + for key in api patch branch build + do + if [ "${makeInfo[$key]}" != "${metaInfo[$key]}" ] + then + diff="$diff $key" + fi + done + + if [ "$verbose" = verbose ] && [ -n "$diff" ] + then + echo "Differences" + for key in $diff + do + echo "$key:" + echo " make ${makeInfo[$key]}" + echo " meta ${metaInfo[$key]}" + done + fi + + test -z "$diff" +} + + +# +# Update metaInfo (on disk) based on the makeInfo +# +performUpdate() +{ + [ -n "${makeInfo[cached]}" ] || getMakeInfo + [ -n "${metaInfo[cached]}" ] || getMetaInfo + + # Local copies of the make info + local api="${makeInfo[api]}" + local branch="${makeInfo[branch]}" + local build="${makeInfo[build]}" + local patch="${makeInfo[patch]}" + + # If any of the make-info are empty (bad), + # use the meta-info to avoid spurious changes + [ -n "$api" ] || api="${metaInfo[api]}" + [ -n "$branch" ] || branch="${metaInfo[branch]}" + [ -n "$build" ] || build="${metaInfo[build]}" + + local outputFile + + # build-info + outputFile="$metaInfoDir/build-info" + if [ "$branch" != "${metaInfo[branch]}" ] || \ + [ "$build" != "${metaInfo[build]}" ] || \ + [ "$patch" != "${metaInfo[patch]}" ] + then + patch="${metaInfo[patch]}" # <- From meta-info only + : "${patch:=0}" # Extra safety + + if [ -n "$optDryRun" ] + then + echo "dry-run (update) ${outputFile##*/} branch=${branch}" 1>&2 + echo "dry-run (update) ${outputFile##*/} build=${build}" 1>&2 + echo "dry-run (update) ${outputFile##*/} patch=${patch}" 1>&2 + else + echo "branch=${branch}" >| "$outputFile" + echo "build=${build}" >> "$outputFile" + echo "patch=${patch}" >> "$outputFile" + fi + fi + + + # api-info + outputFile="$metaInfoDir/api-info" + if [ "$api" != "${metaInfo[api]}" ] + then + patch="${metaInfo[patch]}" # <- From meta-info only + : "${patch:=0}" # Extra safety + + if [ -n "$optDryRun" ] + then + echo "dry-run (update) ${outputFile##*/} api=${api}" 1>&2 + echo "dry-run (update) ${outputFile##*/} patch=${patch}" 1>&2 + else + echo "api=${api}" >| "$outputFile" + echo "patch=${patch}" >> "$outputFile" + fi + fi + + return 0 +} + + +# +# Update metaInfo (on disk) based on the makeInfo +# This is the +# +performFiltering() +{ + local input="$1" + + [ -f "$input" ] || { + echo "Error in ${0##*/}: file not found '$1'" 1>&2 + exit 2 + } + + [ -n "${makeInfo[cached]}" ] || getMakeInfo + [ -n "${metaInfo[cached]}" ] || getMetaInfo + + # Local copies of the make info + local api="${makeInfo[api]}" + local branch="${makeInfo[branch]}" + local build="${makeInfo[build]}" + local patch="${metaInfo[patch]}" # <- From meta-info only + : "${patch:=0}" # Extra safety + + + # If any of the make-info are empty (bad), + # conjure up something from the meta-info + + # api is not normally needed (available directly from -Ddefine) + # but we may wish to filter other types of files + + if [ -z "$api" ] + then + api="${metaInfo[api]}" + api="${api:-0}" # integer value + fi + + # branch/build could be missing for non-git + if [ -z "$branch" ] + then + branch="${metaInfo[branch]}" + branch="${branch:-unknown}" + fi + if [ -z "$build" ] + then + build="${metaInfo[build]}" + build="nogit${build:+-$build}" + fi + + sed \ + -e 's!@API@!'"${api}"'!g' \ + -e 's!@PATCH@!'"${patch:-0}"'!g' \ + -e 's!@BRANCH@!'"${branch}"'!g' \ + -e 's!@BUILD@!'"${build}"'!g' \ + -e 's!@VERSION@!'"${WM_PROJECT_VERSION}"'!g' \ + "$input" + + return 0 +} + + +#------------------------------------------------------------------------------ + +# Dispatching + +if [ -n "$optCheck" ] +then + checkDiff $optCheck + exit $? +elif [ "$optQuery" = api ] +then + # Show API and exit + getApi + exit $? +elif [ "$optQuery" = patch ] +then + # Show patch level and exit + getPatchLevel + exit $? +else + # Other queries + case "$optQuery" in (*make*) reportMakeInfo ;; esac + case "$optQuery" in (*meta*) reportMetaInfo ;; esac +fi + +[ -n "$optUpdate" ] && performUpdate + +if [ -n "$optFilter" ] +then + # Perform filter on file + performFiltering "$1" +fi + +exit 0 # clean exit + +#------------------------------------------------------------------------------ diff --git a/wmake/wmakePrintBuild b/wmake/wmakePrintBuild index 6c7941114a..bafd96bb6c 100755 --- a/wmake/wmakePrintBuild +++ b/wmake/wmakePrintBuild @@ -61,6 +61,17 @@ die() } +#------------------------------------------------------------------------------ + +cat << WARN_OBSOLETE 1>&2 +############################################################################### +## The wmakePrintBuild utility is OBSOLETE (Dec-2018). ## +## The wmakeBuildInfo utility is to be used instead. ## +############################################################################### + +WARN_OBSOLETE + + #------------------------------------------------------------------------------ # Parse arguments and options #------------------------------------------------------------------------------