wmake.*: Improved robustness and portability using shellcheck

This commit is contained in:
Henry Weller
2018-05-03 21:49:07 +01:00
parent 08704a2d1f
commit 0cca225762
13 changed files with 158 additions and 157 deletions

View File

@ -1,9 +1,9 @@
#!/bin/sh
#!/bin/bash
#------------------------------------------------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
# \\/ M anipulation |
#-------------------------------------------------------------------------------
# License
@ -37,6 +37,7 @@
Script=${0##*/}
# Source the wmake functions
# shellcheck source=scripts/wmakeFunctions
. ${0%/*}/scripts/wmakeFunctions
error() {
@ -120,7 +121,7 @@ then
if [ "$dir" ]
then
cd $dir 2>/dev/null || {
cd "$dir" 2>/dev/null || {
echo "$Script error: could not change to directory '$dir'" 1>&2
exit 1
}
@ -152,61 +153,61 @@ then
echo "Removing empty directories..."
# Get sub-directories avoiding particular directories
# shellcheck disable=SC2044
for dir in $(find . -mindepth 1 -maxdepth 1 \
-type d \( -name .git -prune -o -print \) )
do
echo " searching: $dir"
find $dir -depth -type d -empty -exec rmdir {} \; -print
find "$dir" -depth -type d -empty -exec rmdir {} \; -print
done
# Second pass: clean up object directories with WM_PROJECT_DIR that don't
# have respective source code folders, along with the respective binaries
expandPath $PWD
expandPath "$PWD"
if [ "$exPath" = "$WM_PROJECT_DIR" ]
then
findObjectDir $PWD
findObjectDir "$PWD"
if [ -d $objectsDir ]
if [ -d "$objectsDir" ]
then
echo " Removing redundant object directories in $objectsDir"
find $objectsDir -name 'variables' -print | \
while read variablesFile
find "$objectsDir" -name 'variables' -print | \
while read -r variablesFile
do
# Hack'ish way of getting the original source code path
depFile=$(dirname $variablesFile)
depToSource $depFile
depFile=$(dirname "$variablesFile")
depToSource "$depFile"
# Check if the original source code directory exists
if [ ! -r "$sourceFile" ]
then
# Delete the respective binary first
binaryFile=$(cat $variablesFile |
grep -e '^ *\(EXE\|LIB\) *= *' )
binaryFile=$(grep -e '^ *\(EXE\|LIB\) *= *' "$variablesFile")
# Catch all file extension (o,a,so,?+) for libraries
if echo $binaryFile | grep -qe '^ *LIB *= *'
if echo "$binaryFile" | grep -qe '^ *LIB *= *'
then
binaryFile="${binaryFile}.*"
fi
# Isolate path and translate environment variables
binaryFile=$(echo $binaryFile | \
binaryFile=$(echo "$binaryFile" | \
sed -e 's/^ *\(EXE\|LIB\) *= *//' \
-e 's/(/{/g' -e 's/)/}/g' )
# Expand environment variables for path
binaryFile=$(eval echo $binaryFile)
binaryFile=$(eval echo "$binaryFile")
# Verbosely remove binary file
if [ -n "$binaryFile" -a -e "$binaryFile" ]
if [ -n "$binaryFile" ] && [ -e "$binaryFile" ]
then
rm -vf $binaryFile 2>/dev/null
rm -vf "$binaryFile" 2>/dev/null
fi
# Remove the deprecated object directory
rm -rvf $depFile 2>/dev/null
rm -rvf "$depFile" 2>/dev/null
fi
done
fi
@ -232,16 +233,17 @@ then
exit $?
else
# For all the sub-directories containing a 'Make' directory
for dir in `find . \( -type d -a -name Make \)`
# shellcheck disable=SC2044
for dir in $(find . \( -type d -a -name Make \))
do
dir=${dir%/Make} # Parent directory - trim /Make from the end
# If Allwclean exists execute otherwise wclean
if [ -e "$dir/Allwclean" ]
then
$dir/Allwclean
"$dir/Allwclean"
else
$0 $dir
$0 "$dir"
fi
done
fi
@ -255,15 +257,15 @@ unset targetType
# Clean the 'Make' directory if present
#------------------------------------------------------------------------------
if [ -d $MakeDir ]
if [ -d "$MakeDir" ]
then
objectsDir=$MakeDir/$WM_OPTIONS
if [ $(echo $PWD | grep "$WM_PROJECT_DIR") ]
if [[ "$PWD" = *"$WM_PROJECT_DIR"* ]]
then
platformPath=$WM_PROJECT_DIR/platforms/${WM_OPTIONS}
objectsDir=$platformPath$(echo $PWD | sed s%$WM_PROJECT_DIR%% )
objectsDir=$platformPath${PWD//$WM_PROJECT_DIR/}
fi
rm -rf $objectsDir 2>/dev/null
rm -rf "$objectsDir" 2>/dev/null
fi

View File

@ -3,7 +3,7 @@
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2015-2017 OpenFOAM Foundation
# \\ / A nd | Copyright (C) 2015-2018 OpenFOAM Foundation
# \\/ M anipulation |
#-------------------------------------------------------------------------------
# License
@ -79,16 +79,16 @@ USAGE
}
# Print help message
if [ "$1" = "-h" -o "$1" = "-help" ]; then
if [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
usage && exit 0
fi
# Check the script is executed from the project top-level directory
[ "$PWD" = "$WM_PROJECT_DIR" ] || \
error "Not in the project top-level directory " $WM_PROJECT_DIR
error "Not in the project top-level directory " "$WM_PROJECT_DIR"
# Get the platforms from the arguments
platforms="$@"
platforms="$*"
# If no arguments are provided select the current platform
if [ "$#" -lt 1 ]; then
@ -100,7 +100,7 @@ if [ "$platforms" = "-all" ]; then
rm -rf platforms/*
echo "Removing lnInclude directories"
find . -depth -type d \( -name lnInclude \) | xargs rm -rf
find . -depth -type d \( -name lnInclude \) -print0 | xargs -0 rm -rf
tutorials/Allclean
else
@ -114,10 +114,10 @@ else
[ -n "$platform" ] || continue
fi
if [ -d platforms/${platform} ]
if [ -d platforms/"${platform}" ]
then
echo "Cleaning platform $platform"
rm -rf platforms/${platform}*
rm -rf platforms/"${platform}"*
else
echo "Platform $platform not built"
fi

View File

@ -38,6 +38,7 @@
Script=${0##*/}
# Source the wmake functions
# shellcheck source=scripts/wmakeFunctions
. ${0%/*}/scripts/wmakeFunctions
usage() {
@ -90,9 +91,9 @@ checkEnv
sourceFile=$1
if [ ! -e $1 ]
if [ ! -e "$1" ]
then
sourceFile=$(find . -name $sourceFile -print -quit)
sourceFile=$(find . -name "$sourceFile" -print -quit)
if [ -z "$sourceFile" ]
then
echo "$Script: cannot find source file $1" 1>&2
@ -106,11 +107,11 @@ fi
# and echo path for the dep file corresponding to the specified source file
#------------------------------------------------------------------------------
findObjectDir $sourceFile
findObjectDir "$sourceFile"
fileName=${1##*/}
echo $objectsDir/$fileName.dep
echo "$objectsDir/$fileName.dep"
#------------------------------------------------------------------------------

View File

@ -56,7 +56,8 @@
Script=${0##*/}
# Source the wmake functions
. ${0%/*}/scripts/wmakeFunctions
# shellcheck source=scripts/wmakeFunctions
. "${0%/*}/scripts/wmakeFunctions"
error() {
exec 1>&2
@ -116,7 +117,7 @@ useAllCores()
{
if [ -r /proc/cpuinfo ]
then
WM_NCOMPPROCS=$(egrep "^processor" /proc/cpuinfo | wc -l)
WM_NCOMPPROCS=$(grep -Ec "^processor" /proc/cpuinfo)
else
WM_NCOMPPROCS=1
fi
@ -152,7 +153,7 @@ do
# Parallel compilation on all cores of local machine
-j)
useAllCores
test $# -ge 2 && expr $2 + 1 > /dev/null 2>&1 \
test $# -ge 2 && (($2 + 1)) > /dev/null 2>&1 \
&& shift && export WM_NCOMPPROCS=$1
echo "Compiling enabled on $WM_NCOMPPROCS cores"
;;
@ -202,7 +203,7 @@ checkEnv
# When compiling anything but a standalone exe WM_PROJECT and WM_PROJECT_DIR
# must be set
[ "$1" = exe -o \( "$WM_PROJECT" -a "$WM_PROJECT_DIR" \) ] || {
[ "$1" = exe ] || { [ "$WM_PROJECT" ] && [ "$WM_PROJECT_DIR" ]; } || {
echo "$Script error:" 1>&2
echo " environment variable \$WM_PROJECT or " \
"\$WM_PROJECT_DIR not set" 1>&2
@ -216,25 +217,24 @@ checkEnv
#------------------------------------------------------------------------------
# Set WM_NCOMPPROCS automatically when both WM_HOSTS and WM_SCHEDULER are set
if [ -z "$WM_NCOMPPROCS" -a -n "$WM_HOSTS" -a -n "$WM_SCHEDULER" ]
if [ -z "$WM_NCOMPPROCS" ] && [ -n "$WM_HOSTS" ] && [ -n "$WM_SCHEDULER" ]
then
WM_NCOMPPROCS=$(wmakeScheduler -count)
[ $? -eq 0 ] || unset WM_NCOMPPROCS
WM_NCOMPPROCS=$(wmakeScheduler -count) || unset WM_NCOMPPROCS
fi
if [ "$WM_NCOMPPROCS" ]
then
parOpt="-j $WM_NCOMPPROCS"
if [ "$WM_NCOMPPROCS" -gt 1 -a ! "$MAKEFLAGS" ]
if [ "$WM_NCOMPPROCS" -gt 1 ] && [ ! "$MAKEFLAGS" ]
then
lockDir=$HOME/.$WM_PROJECT/.wmake
if [ -d $lockDir ]
if [ -d "$lockDir" ]
then
rm -f $lockDir/*
rm -f "$lockDir/*"
else
mkdir -p $lockDir
mkdir -p "$lockDir"
fi
make="$make --no-print-directory $parOpt"
@ -266,7 +266,7 @@ then
if [ "$dir" ]
then
cd $dir 2>/dev/null || {
cd "$dir" 2>/dev/null || {
echo "$Script error: could not change to directory '$dir'" 1>&2
exit 1
}
@ -286,7 +286,7 @@ if [ -n "$update" ]
then
wrmdep -update
wrmdep -old
wmakeLnIncludeAll -update $parOpt
wmakeLnIncludeAll -update "$parOpt"
wclean empty
export WM_UPDATE_DEPENDENCIES=yes
elif [ -z "$all" ]
@ -303,7 +303,7 @@ if [ "$all" = "all" ]
then
if [ -e Allwmake ]
then
./Allwmake -fromWmake $targetType
./Allwmake -fromWmake "$targetType"
exit $?
else
# Have to keep track of the main exit code for the call to "make"
@ -312,22 +312,21 @@ then
# Find all the sub-directories containing a 'Make' directory
FOAM_APPS=$(\
for d in *; \
do [ -d "$d" -a "$d" != Optional -a "$d" != Make ] \
do [ -d "$d" ] && [ "$d" != Optional ] && [ "$d" != Make ] \
&& echo "$d"; \
done | xargs \
)
if [ ! "$FOAM_APPS" = "" ]
then
# Compile all applications in sub-directories
$make ${WM_CONTINUE_ON_ERROR:+-k} \
-f $WM_DIR/makefiles/apps \
-f "$WM_DIR/makefiles/apps" \
TARGET="$targetType" FOAM_APPS="$FOAM_APPS"
makeExitCode=$?
fi
# If the current directory contains a 'Make' directory continue
# otherwise exit, or always exit in case of error
if [ ! -d $MakeDir -o $makeExitCode -ne 0 ]
if [ ! -d "$MakeDir" ] || [ "$makeExitCode" -ne 0 ]
then
exit $makeExitCode
fi
@ -344,7 +343,7 @@ fi
if [ "$all" = "queue" ]
then
[ -n "$update" ] || wmakeLnIncludeAll $parOpt
[ -n "$update" ] || wmakeLnIncludeAll "$parOpt"
(
export WM_COLLECT_DIR=$WM_PROJECT_DIR/platforms/${WM_OPTIONS}/${PWD////_}
@ -385,7 +384,6 @@ then
case "$targetType" in
lib*)
unset targetType
break
;;
esac
fi
@ -397,23 +395,23 @@ fi
#------------------------------------------------------------------------------
objectsDir=$MakeDir/$WM_OPTIONS
if [ $(echo $PWD | grep "$WM_PROJECT_DIR") ]
if [[ "$PWD" = *"$WM_PROJECT_DIR"* ]]
then
platformPath=$WM_PROJECT_DIR/platforms/${WM_OPTIONS}
objectsDir=$platformPath$(echo $PWD | sed s%$WM_PROJECT_DIR%% )
objectsDir=$platformPath${PWD//$WM_PROJECT_DIR/}
fi
(
unset MAKEFLAGS
mkdir -p $objectsDir
mkdir -p "$objectsDir"
# Pre-build the $WM_OPTIONS/options file
# which is included when building the $WM_OPTIONS/files file
$make -s -f $WM_DIR/makefiles/files MAKE_DIR=$MakeDir \
OBJECTS_DIR=$objectsDir $objectsDir/options
$make -s -f "$WM_DIR/makefiles/files" MAKE_DIR="$MakeDir" \
OBJECTS_DIR="$objectsDir" "$objectsDir/options"
$make -s -f $WM_DIR/makefiles/files MAKE_DIR=$MakeDir \
OBJECTS_DIR=$objectsDir
$make -s -f "$WM_DIR/makefiles/files" MAKE_DIR="$MakeDir" \
OBJECTS_DIR="$objectsDir"
)
@ -421,7 +419,7 @@ fi
# Check the $objectsDir/sourceFiles file was created successfully
#------------------------------------------------------------------------------
[ -r $objectsDir/sourceFiles ] || {
[ -r "$objectsDir/sourceFiles" ] || {
echo "$Script error: file '$objectsDir/sourceFiles'" \
"could not be created in $PWD" 1>&2
exit 1
@ -438,8 +436,8 @@ case "$targetType" in
# ... but only if 'LIB' is declared in 'Make/files'
if grep -e '^ *LIB *=' "$MakeDir/files" >/dev/null 2>&1
then
$make -s -f $WM_DIR/makefiles/general MAKE_DIR=$MakeDir \
OBJECTS_DIR=$objectsDir lnInclude
$make -s -f "$WM_DIR/makefiles/general" MAKE_DIR="$MakeDir" \
OBJECTS_DIR="$objectsDir" lnInclude
fi
;;
esac
@ -452,8 +450,8 @@ esac
if [ -n "$WM_UPDATE_DEPENDENCIES" ]
then
$make -f $WM_DIR/makefiles/general MAKE_DIR=$MakeDir \
OBJECTS_DIR=$objectsDir dep
$make -f "$WM_DIR"/makefiles/general MAKE_DIR="$MakeDir" \
OBJECTS_DIR="$objectsDir" dep
makeExitCode=$?
if [ $makeExitCode -ne 0 ]
@ -469,8 +467,9 @@ fi
# Make the dependency files or object files and link
#------------------------------------------------------------------------------
exec $make -f $WM_DIR/makefiles/general MAKE_DIR=$MakeDir \
OBJECTS_DIR=$objectsDir $targetType
# shellcheck disable=SC2093,SC2086
exec $make -f "$WM_DIR/makefiles/general" MAKE_DIR="$MakeDir" \
OBJECTS_DIR="$objectsDir" $targetType
#------------------------------------------------------------------------------

View File

@ -3,7 +3,7 @@
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
# \\/ M anipulation |
#-------------------------------------------------------------------------------
# License
@ -104,7 +104,7 @@ dirName="$1"
# Use /bin/pwd to get the absolute path (could be linked)
thisDir=$(/bin/pwd)
target=$(cd $dirName 2>/dev/null && /bin/pwd)
target=$(cd "$dirName" 2>/dev/null && /bin/pwd)
# Return 0 if this directory is <dir>
[ "$thisDir" = "$target" ] && exit 0

View File

@ -3,7 +3,7 @@
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
# \\/ M anipulation |
#-------------------------------------------------------------------------------
# License
@ -98,12 +98,12 @@ fi
[ -e Make/files ] || {
echo "$Script: Creating Make/files"
$WM_DIR/scripts/makeFiles
"$WM_DIR/scripts/makeFiles"
}
[ -e Make/options ] || {
echo "$Script: Creating Make/options"
$WM_DIR/scripts/makeOptions
"$WM_DIR/scripts/makeOptions"
}

View File

@ -3,7 +3,7 @@
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
# \\/ M anipulation |
#-------------------------------------------------------------------------------
# License
@ -70,9 +70,6 @@ error() {
# Parse arguments and options
#------------------------------------------------------------------------------
# Default 'find' option
unset findOpt
# Default 'ln' option
lnOpt="-s"
@ -141,7 +138,7 @@ fi
cd $incDir || exit 1
if [ "$silentOpt" = true -o -n "$WM_QUIET" ]
if [ "$silentOpt" = true ] || [ -n "$WM_QUIET" ]
then
echo " ln: $incDir" 1>&2
else
@ -152,14 +149,14 @@ fi
#------------------------------------------------------------------------------
# Remove any broken links first (this helps when file locations have moved)
#------------------------------------------------------------------------------
find -L . -type l | xargs rm -f
find -L . -type l -print0 | xargs -0 rm -f
#------------------------------------------------------------------------------
# Create links, avoid recreating links unless necessary
# things placed in the 'noLink' directory are skipped
#------------------------------------------------------------------------------
find .. $findOpt \
find .. \
\( -name lnInclude -o -name Make -o -name config -o -name noLink \) \
-prune \
-o \( \

View File

@ -62,7 +62,6 @@ error() {
# Parse arguments and options
#------------------------------------------------------------------------------
findName=lnInclude
nCores=0
# Default 'wmakeLnInclude' option
@ -87,7 +86,7 @@ do
# Parallel execution on WM_NCOMPPROCS cores
-j)
nCores=$WM_NCOMPPROCS
test $# -ge 2 && expr $2 + 1 > /dev/null 2>&1 \
test $# -ge 2 && (($2 + 1)) > /dev/null 2>&1 \
&& shift && nCores=$1
;;
# Parallel compilation on specified number of cores
@ -115,8 +114,10 @@ then
exit 1
}
# shellcheck disable=SC2034
LIB_SRC="$WM_PROJECT_DIR/src"
# shellcheck disable=SC2016
includeDirs="
$WM_PROJECT_DIR/src/$WM_PROJECT
$WM_PROJECT_DIR/src/OSspecific/$WM_OSTYPE
@ -126,13 +127,13 @@ then
printed=
for d in $includeDirs
do [ ! -d "$d" ]
path=$(eval echo $d)
if [ ! -d $path/lnInclude ]
path=$(eval echo "$d")
if [ ! -d "$path/lnInclude" ]
then
[ $printed ] || echo "$Script: running wmakeLnInclude on dependent libraries:"
printed=true
echo -n " "
eval wmakeLnInclude $wmLnOpt $d
eval wmakeLnInclude $wmLnOpt "$d"
fi
done
@ -140,8 +141,6 @@ then
else
FAIL=0
if [ "$nCores" -gt 0 ]
then
echo "$Script: starting wmakeLnInclude processes on $nCores cores"
@ -154,7 +153,7 @@ else
for checkDir
do
if [ -d $checkDir ]
if [ -d "$checkDir" ]
then
echo " searching $checkDir for 'Make' directories"
else
@ -162,7 +161,7 @@ else
continue
fi
find $checkDir -depth -type d -name Make -print | while read MakeDir
find "$checkDir" -depth -type d -name Make -print | while read -r MakeDir
do
topDir=${MakeDir%/Make} # trim /Make from the end
if [ -d "$topDir" ]
@ -173,16 +172,18 @@ else
# and more as the cores become free
if [ "$nCores" -gt 0 ]
then
# shellcheck disable=SC2207
joblist=($(jobs -p))
while (( ${#joblist[*]} > $nCores ))
while (( ${#joblist[*]} > "$nCores" ))
do
# When the job limit is reached wait for a job to finish
wait -n
# shellcheck disable=SC2207
joblist=($(jobs -p))
done
wmakeLnInclude $wmLnOpt $topDir &
wmakeLnInclude $wmLnOpt "$topDir" &
else
wmakeLnInclude $wmLnOpt $topDir
wmakeLnInclude $wmLnOpt "$topDir"
fi
elif [ -d "$topDir/lnInclude" ]
then
@ -204,7 +205,7 @@ else
sleep 3
fi
unset FAIL joblist
unset joblist
fi
@ -212,7 +213,7 @@ fi
# Cleanup local variables and functions
#------------------------------------------------------------------------------
unset Script usage error findName nCores wmLnOpt depOpt
unset Script usage error nCores wmLnOpt depOpt
#------------------------------------------------------------------------------

View File

@ -3,7 +3,7 @@
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
# \\/ M anipulation |
#-------------------------------------------------------------------------------
# License
@ -78,7 +78,7 @@ do
shift
;;
-major)
echo ${WM_PROJECT_VERSION:-unknown}
echo "${WM_PROJECT_VERSION:-unknown}"
exit 0
;;
-u | -update)
@ -119,10 +119,10 @@ build="$WM_PROJECT_DIR/.build"
unset oldPackage oldVersion
getOldValues()
{
set -- $(tail -1 $build 2>/dev/null)
set -- "$(tail -1 "$build" 2>/dev/null)"
oldVersion="$1"
[ "$#" -gt 0 ] && shift
oldPackage="$@"
oldPackage="$*"
[ "${oldPackage:-none}" = none ] && unset oldPackage
}
@ -153,7 +153,7 @@ else
# if there are multiple values (eg, HEAD, origin/HEAD, ...)
# only take the first one, which is 'HEAD'
version=$(
cd $WM_PROJECT_DIR 2>/dev/null && \
cd "$WM_PROJECT_DIR" 2>/dev/null && \
git show-ref --hash=12 --head HEAD 2>/dev/null | head -1
)
@ -181,11 +181,11 @@ fi
#------------------------------------------------------------------------------
# Update persistent build tag if possible
#------------------------------------------------------------------------------
if [ $rc -eq 0 -a -n "$update" ]
if [ $rc -eq 0 ] && [ -n "$update" ]
then
if [ "$version:$package" != "$oldVersion:$oldPackage" ]
then
if [ -w "$build" -o \( -w "$WM_PROJECT_DIR" -a ! -e "$build" \) ]
if [ -w "$build" ] || { [ -w "$WM_PROJECT_DIR" ] && [ ! -e "$build" ]; }
then
printTag >| "$build" 2>/dev/null
fi

View File

@ -3,7 +3,7 @@
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
# \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
# \\/ M anipulation |
#-------------------------------------------------------------------------------
# License
@ -51,24 +51,24 @@
Script=${0##*/}
# csh sets HOST, bash sets HOSTNAME
: ${HOST:=$HOSTNAME}
: "${HOST:=$HOSTNAME}"
lockDir=$HOME/.$WM_PROJECT/.wmake
# Fallback - 1 core on current host
: ${WM_HOSTS:=$HOST:1}
: "${WM_HOSTS:=$HOST:1}"
# Count the total number of slots available and exit
if [ "$1" = "-count" ]
then
expr $(
(( $(
for slotGroup in $WM_HOSTS
do
n=${slotGroup##*:}
[ "$n" = "${slotGroup%%:*}" ] && n=1 # missing ':'
echo "+ ${n:-1}"
done
)
) ))
exit 0
fi
@ -127,7 +127,7 @@ case $sourceFoam in
esac
# Quote double-quotes for remote command line
rcmd=$(echo $* | sed -e s/\"/\'\"\'/g)
rcmd=${*//\"/\'\"\'}
# The same, without forking (not ksh, maybe not /bin/sh either)
# rcmd=$(while [ "$#" -gt 0 ]; do echo "${1//\"/'\"'}"; shift; done)
@ -138,7 +138,7 @@ nColours=0
for col in $WM_COLOURS
do
colourList[$nColours]=$col
((nColours = $nColours + 1))
((nColours = nColours + 1))
done
# Bashism: make pipe fail early.
@ -156,9 +156,9 @@ colourPipe()
if tty -s <&1 # [ "$1" ]
then
(
while read line
while read -r line
do
setterm -foreground $1
setterm -foreground "$1"
echo "$line"
done
setterm -foreground default
@ -200,17 +200,17 @@ do
colour="${colourList[$colourIndex]}"
if [ "$host" = "$HOST" ]; then
eval $* 2>&1 | colourPipe "$colour"
eval "$*" 2>&1 | colourPipe "$colour"
else
ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" \
ssh "$host" "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" \
2>&1 | colourPipe "$colour"
fi
retval=$?
else
if [ "$host" = "$HOST" ]; then
eval $* 2>&1
eval "$*" 2>&1
else
ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" \
ssh "$host" "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" \
2>&1
fi
retval=$?
@ -220,10 +220,10 @@ do
rm -f "$lockFile" 2>/dev/null
exit $retval
fi
i=$(expr $i + 1)
i=$((i + 1))
# Cycle through colours. Note: outside lock clause!
colourIndex=$(expr $colourIndex + 1)
colourIndex=$((colourIndex + 1))
[ "$colourIndex" -lt "$nColours" ] || colourIndex=0
done

View File

@ -3,7 +3,7 @@
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
# \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
# \\/ M anipulation |
#-------------------------------------------------------------------------------
# License
@ -67,23 +67,22 @@ error() {
}
# csh sets HOST, bash sets HOSTNAME
: ${HOST:=$HOSTNAME}
: "${HOST:=$HOSTNAME}"
lockDir=$HOME/.$WM_PROJECT/.wmake
# Fallback - 1 core on current host
: ${WM_HOSTS:=$HOST:1}
: "${WM_HOSTS:=$HOST:1}"
# Count the total number of slots available and exit
if [ "$1" = "-count" ]
then
expr $(
(( $(
for slotGroup in $WM_HOSTS
do
n=${slotGroup##*:}
[ "$n" = "${slotGroup%%:*}" ] && n=1 # Missing ':'
echo "+ ${n:-1}"
done
)
) ))
exit 0
fi
@ -142,7 +141,7 @@ case $sourceFoam in
esac
# Quote double-quotes for remote command line
rcmd=$(echo $* | sed -e s/\"/\'\"\'/g)
rcmd=${*//\"/\'\"\'}
# The same, without forking (not ksh, maybe not /bin/sh either)
# rcmd=$(while [ "$#" -gt 0 ]; do echo "${1//\"/'\"'}"; shift; done)
@ -153,7 +152,7 @@ nColours=0
for col in $WM_COLOURS
do
colourList[$nColours]=$col
((nColours = $nColours + 1))
((nColours = nColours + 1))
done
# Bashism: make pipe fail early.
@ -170,9 +169,9 @@ colourPipe()
if [ "$1" ]
then
(
while read line
while read -r line
do
setterm -foreground $1
setterm -foreground "$1"
echo "$line"
done
setterm -foreground default
@ -222,11 +221,11 @@ do
# Determine load
if [ "$host" = "$HOST" ]; then
stat=`uptime`
stat=$(uptime)
else
stat=`ssh $host uptime`
stat=$(ssh "$host" uptime)
fi
load=`echo "$stat" | sed -e 's/.*average:[^0-9.]*\([0-9.]*\).*/\1/'`
load=$(echo "$stat" | sed -e 's/.*average:[^0-9.]*\([0-9.]*\).*/\1/')
#echo "$Script: Machine:$host load:$load allowed:$WM_NCOMPPROCS nprocs:$nprocs"
@ -242,18 +241,18 @@ do
echo "$Script: Machine:$host Starting:$*"
if [ "$host" = "$HOST" ]; then
eval $* 2>&1 | colourPipe "$colour"
eval "$*" 2>&1 | colourPipe "$colour"
else
ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1 \
ssh "$host" "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1 \
| colourPipe "$colour"
fi
retval=$?
else
echo "$Script: Machine:$host Starting:$*"
if [ "$host" = "$HOST" ]; then
eval $* 2>&1
eval "$*" 2>&1
else
ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1
ssh "$host" "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1
fi
retval=$?
fi
@ -262,7 +261,7 @@ do
# Cycle through colours. Note: outside lock clause!
colourIndex=$(expr $colourIndex + 1)
colourIndex=$((colourIndex + 1))
[ "$colourIndex" -lt "$nColours" ] || colourIndex=0
done

View File

@ -54,6 +54,7 @@
Script=${0##*/}
# Source the wmake functions
# shellcheck source=scripts/wmakeFunctions
. ${0%/*}/scripts/wmakeFunctions
usage() {
@ -146,16 +147,16 @@ files)
# With the -a/-all option replace the current platform with a wildcard
if [ "$all" = "all" ]
then
objectsDir=$(echo $objectsDir | sed s%$WM_OPTIONS%*% )
objectsDir=$(echo "$objectsDir" | sed s%"$WM_OPTIONS"%*% )
fi
if [ "$#" -eq 0 ]
then
echo "removing all .dep files ..."
find $objectsDir -name '*.dep' -print | xargs -t rm 2>/dev/null
find "$objectsDir" -name '*.dep' -print0 | xargs -0t rm 2>/dev/null
else
echo "removing .dep files referring to $1 ..."
find $objectsDir -name '*.dep' -exec grep -q "$1" '{}' \; \
find "$objectsDir" -name '*.dep' -exec grep -q "$1" '{}' \; \
-exec rm '{}' \; -print
fi
@ -170,9 +171,9 @@ oldFolders)
for checkDir
do
findObjectDir $checkDir
findObjectDir "$checkDir"
if [ -d $objectsDir ]
if [ -d "$objectsDir" ]
then
echo " searching: $objectsDir"
else
@ -180,15 +181,15 @@ oldFolders)
continue
fi
find $objectsDir -name '*.dep' -print | while read depFile
find "$objectsDir" -name '*.dep' -print | while read -r depFile
do
depToSource $depFile
depToSource "$depFile"
# Check C++ or Flex source file exists
if [ ! -r "$sourceFile" ];
then
echo " rm $depFile"
rm -f $depFile 2>/dev/null
rm -f "$depFile" 2>/dev/null
fi
done
done
@ -208,19 +209,19 @@ updateMode)
for filePathAndName in $fileNameList
do
fileName=$(basename $filePathAndName)
fileName=$(basename "$filePathAndName")
echo " 'src': $fileName"
cd src
$Script -a $fileName
(
cd src || exit
$Script -a "$fileName"
echo " 'applications': $fileName"
cd ../applications
$Script -a $fileName
cd ..
echo " 'applications': $fileName"
cd ../applications || exit
$Script -a "$fileName"
)
# Just in case, remove the symbolic link as the last step
unlink $filePathAndName
unlink "$filePathAndName"
done
;;

View File

@ -38,6 +38,7 @@
Script=${0##*/}
# Source the wmake functions
# shellcheck source=scripts/wmakeFunctions
. ${0%/*}/scripts/wmakeFunctions
usage() {
@ -100,16 +101,16 @@ findObjectDir .
# With the -a/-all option replace the current platform with a wildcard
if [ "$all" = "all" ]
then
objectsDir=$(echo $objectsDir | sed s%$WM_OPTIONS%*% )
objectsDir=$(echo "$objectsDir" | sed s%"$WM_OPTIONS"%*% )
fi
if [ "$#" -eq 0 ]
then
echo "removing all .o files ..."
find $objectsDir -name '*.o' -print | xargs -t rm 2>/dev/null
find "$objectsDir" -name '*.o' -print0 | xargs -0t rm 2>/dev/null
else
echo "removing .o files corresponding to $1 ..."
rm $objectsDir/${1%%.*}.o
rm "$objectsDir/${1%%.*}.o"
fi