From 5fdb20c35e96a9e073466eb69def1ca8b041a8a8 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Mon, 19 Dec 2016 18:04:12 +0100 Subject: [PATCH] STYLE: bump min gcc for foamInstallationTest - cleanup some code in foamInstallationTest --- bin/foamInstallationTest | 391 ++++++++++++++++++--------------------- 1 file changed, 175 insertions(+), 216 deletions(-) diff --git a/bin/foamInstallationTest b/bin/foamInstallationTest index 17b285a5ab..0b92b8f74c 100755 --- a/bin/foamInstallationTest +++ b/bin/foamInstallationTest @@ -26,30 +26,27 @@ # foamInstallationTest # # Description -# Checks the machine system, the installation of OpenFOAM, and the user's +# Check the machine system, the installation of OpenFOAM, and the user's # personal configuration for running OpenFOAM. # #------------------------------------------------------------------------------ # Base settings -MIN_VERSION_GCC=4.5.0 +MIN_VERSION_GCC=4.8.0 # General WIDTH=20 -# Global variables -fatalError=0 -criticalError=0 - # System variables -HOST=`uname -n` -OSTYPE=`uname -s` -USER_NAME=$LOGNAME -: ${USER_NAME:=$USER} +HOST=$(uname -n) +OSTYPE=$(uname -s) -# which OpenFOAM application to test for the Version +# OpenFOAM application to test for the Version foamTestApp=icoFoam +# Global variables +unset fatalError criticalError + #============================================================================== # HELPER FUNCTIONS #============================================================================== @@ -68,43 +65,22 @@ heading() } -lenBase() -{ - echo $1 | tr -d " " | wc -m | tr -d " " -} - - -length() -{ - NOCHAR=`lenBase $1` - NOCHAR=`expr $NOCHAR - 1` - [ $NOCHAR -ge 0 ] || NOCHAR=0 - echo $NOCHAR -} - - -stringLength() -{ - echo $1 | wc -m | tr -d " " -} - - fixlen() { WORD=$1 - ONELEN=`stringLength $1` - LDIFF=`expr $ONELEN - $2` + LDIFF=$(expr ${#WORD} - ${2:-4}) + if [ $LDIFF -le 1 ] then while [ $LDIFF -lt 0 ] do WORD="$WORD " - LDIFF=`expr $LDIFF + 1` + LDIFF=$(expr $LDIFF + 1) done echo "$WORD" else - LDIFF=`expr $LDIFF + 4` - WORD=`echo "$WORD" | cut -c${LDIFF}-` + LDIFF=$(expr $LDIFF + 4) + WORD=$(echo "$WORD" | cut -c${LDIFF}-) echo "...${WORD}" fi } @@ -112,83 +88,54 @@ fixlen() reportEnv() { - EXP_ENV=`eval "echo $1"` - EXP_PATH=`eval "echo $2"` + eval EXP_ENV="$1" + eval EXP_PATH="$2" CRIT="$3" EXISTS=" no " ON_PATH="" - if [ `length $EXP_ENV` -gt 0 ] + + if [ -n "$EXP_ENV" ] then - case "$OSTYPE" in - SunOS) - if /usr/bin/test -e $EXP_ENV + if test -e "$EXP_ENV" + then + EXISTS=" yes " + if [ "$2" != noPath ] then - EXISTS=" yes " - if [ "$2" != noPath ] - then - ON_PATH=" no " - oldIFS=$IFS - IFS=':' - for e in $EXP_PATH - do - case "$e" in - "$EXP_ENV" | "$EXP_ENV/bin" | "$EXP_ENV/lib") - ON_PATH="yes " - ;; - esac - done - IFS=$oldIFS - else - CRIT=" $3" - fi - else - ON_PATH=" " - fi - echo "`fixlen "$1" 21` `fixlen "$EXP_ENV" 40` $EXISTS $ON_PATH $CRIT" - ;; - *) - if [ -e "$EXP_ENV" ] - then - EXISTS=" yes " - if [ "$2" != noPath ] - then - ON_PATH=" no " - oldIFS=$IFS - IFS=':' - for e in $EXP_PATH - do - case "$e" in - "$EXP_ENV" | "$EXP_ENV/bin" | "$EXP_ENV/lib") - ON_PATH="yes " - ;; - esac - done - IFS=$oldIFS - else - CRIT=" $3" - fi - else - ON_PATH=" " - fi - echo "`fixlen "$1" 21` `fixlen "$EXP_ENV" 40` $EXISTS $ON_PATH $CRIT" - ;; - esac + ON_PATH=" no " + oldIFS=$IFS + IFS=':' + for e in $EXP_PATH + do + case "$e" in + "$EXP_ENV" | "$EXP_ENV/bin" | "$EXP_ENV/lib") + ON_PATH="yes " + break + ;; + esac + done + IFS=$oldIFS + else + CRIT=" $3" + fi + else + ON_PATH=" " + fi + echo "$(fixlen "$1" 21) $(fixlen "$EXP_ENV" 40) $EXISTS $ON_PATH $CRIT" else - echo "`fixlen "$1" 21` --------- env variable not set --------- $3" + echo "$(fixlen "$1" 21) --------- env variable not set --------- $3" fi - ERROR="false" + ERROR=false if [ "$EXISTS" = no ] || [ "$ON_PATH" = no ] then - ERROR="true" + ERROR=true fi if [ "$3" = yes ] && [ "$ERROR" = true ] then - criticalError=`expr $criticalError + 1` + criticalError="x${criticalError}" echo "WARNING: CRITICAL ERROR" echo fi - } @@ -198,139 +145,149 @@ findExec() IFS=':' for d in $1 do - case "$OSTYPE" in - SunOS) - if /usr/bin/test ! -d "$d/$2" -a -x "$d/$2" - then - IFS=$oldIFS - echo "$d/$2" - return 0 - fi - ;; - *) - if [ ! -d "$d/$2" -a -x "$d/$2" ] - then - IFS=$oldIFS - echo "$d/$2" - return 0 - fi - ;; - esac + if test ! -d "$d/$2" -a -x "$d/$2" + then + IFS=$oldIFS + echo "$d/$2" + return 0 + fi done IFS=$oldIFS return 1 } +# compare (required-version, version) +# Major.minor.patch <= Major.minor.patch +# +vercmp_3() +{ + local arg1="$1" + local arg2="$2" + + oldIFS=$IFS + IFS='.' + set -- $arg1 + local arg1Major=$1 arg1Minor=$2 arg1Patch="${3:-0}" + + set -- $arg2 + local arg2Major=$1 arg2Minor=$2 arg2Patch="${3:-0}" + + IFS=$oldIFS + + #debug> echo "check $arg1 vs $arg2" + #debug> echo "arg1maj=$arg1Major arg1min=$arg1Minor arg1patch=$arg1Patch" + #debug> echo "arg2maj=$arg2Major arg2min=$arg2Minor arg2patch=$arg2Patch" + + # Major version + if [ $arg1Major -lt $arg2Major ] + then + return 0 + elif [ $arg1Major -gt $arg2Major ] + then + return 1 + fi + + # Minor version + if [ $arg1Minor -lt $arg2Minor ] + then + return 0 + elif [ $arg1Minor -gt $arg2Minor ] + then + return 2 + fi + + # Patch + if [ -n "$arg1Patch" -a -n "$arg2Patch" ] + then + if [ "$arg1Patch" -gt "$arg2Patch" ] + then + return 3 + fi + fi + + return 0 +} + + reportExecutable() { - APP_PATH="" - APP_PATH=`findExec $PATH $1` + APP_NAME="$1" APP_SPEC="$2" - if [ ! -n $APP_PATH ] + APP_PATH="$(findExec $PATH $1)" + if [ -z "$APP_PATH" ] then - echo "`fixlen "$1" 9`" "*** not installed ***" + echo "$(fixlen "$1" 9)" "*** not installed ***" VERSION="" case "$1" in gcc* | $foamTestApp) echo " CRITICAL ERROR" - criticalError=`expr $criticalError + 1` + criticalError="x${criticalError}" ;; esac echo return 1 fi - case "$1" in + case "$APP_NAME" in $foamTestApp) - VERSION=`$1 -case /dev/null 2>&1 \ - | sed -ne 's/^.*Version: *\([^ ][^ ]*\).*/\1/p'` + VERSION=$($APP_NAME -case /dev/null 2>&1 \ + | sed -ne 's/^.*Version: *\([^ ][^ ]*\).*/\1/p') ;; flex) - VERSION=`$1 --version /dev/null 2>&1 \ - | sed -ne 's/flex \([0-9][0-9.]*\).*/\1/p' ` + VERSION=$($APP_NAME --version /dev/null 2>&1 \ + | sed -ne 's/flex \([0-9][0-9.]*\).*/\1/p') ;; gcc* | g++*) - VERSION=`$1 -v 2>&1 \ - | sed -ne 's/^gcc version \([0-9][0-9.]*\).*/\1/p' ` + VERSION=$($APP_NAME -v 2>&1 \ + | sed -ne 's/^gcc version \([0-9][0-9.]*\).*/\1/p') - case "$1" in - gcc*) - BINARYCODENAME=gcc - ;; - g++*) - BINARYCODENAME=g++ - ;; - esac + if ! vercmp_3 "$MIN_VERSION_GCC" "$VERSION" + then + case "$APP_NAME" in + gcc*) + SHORT_NAME=gcc + ;; + g++*) + SHORT_NAME=g++ + ;; + esac - MINV1=`echo $MIN_VERSION_GCC | cut -d. -f1` - MINV2=`echo $MIN_VERSION_GCC | cut -d. -f2` - MINV3=`echo $MIN_VERSION_GCC | cut -d. -f3` - - V1=`echo $VERSION | cut -d. -f1` - V2=`echo $VERSION | cut -d. -f2` - V3=`echo $VERSION | cut -d. -f3` - - - gccOK="" - pass="" - if [ $V1 -lt $MINV1 ]; then - gccOk="ERROR" - elif [ $V1 -gt $MINV1 ]; then - pass="yes" - fi - - if [ "$pass" = "" ] && [ "$gccOk" = "" ]; then - if [ $V2 -lt $MINV2 ]; then - gccOk="ERROR" - elif [ $V2 -gt $MINV2 ]; then - pass="yes" - fi - fi - - if [ "$pass" = "" ] && [ "$gccOk" = "" ] && [ $V3 != "" ] && [ $MINV3 != "" ]; then - if [ $V3 -lt $MINV3 ]; then - gccOk="ERROR" - fi - fi - - if [ "$gccOk" != "" ]; then - echo "ERROR: $BINARYCODENAME version is too old for this release of OpenFOAM" + echo "ERROR: $SHORT_NAME version is too old for this release of OpenFOAM" echo " User version : $VERSION" echo " Minimum required: $MIN_VERSION_GCC" echo "" - fatalError=`expr $fatalError + 1` + fatalError="x${fatalError}" fi - ;; gtar) - VERSION=`$APP_PATH --version | head -1` + VERSION=$($APP_PATH --version | head -1) ;; tar) - VERSION=`$APP_PATH --version | head -1 | cut -d" " -f4` + VERSION=$($APP_PATH --version | head -1 | cut -d" " -f4) ;; gzip) case "$OSTYPE" in SunOS) - VERSION=`$1 --version 2>&1 | grep gzip | cut -d" " -f2` + VERSION=$($APP_NAME --version 2>&1 | grep gzip | cut -d" " -f2) ;; *) - VERSION=`$1 --version | head -1 | cut -d" " -f2` + VERSION=$($APP_NAME --version | head -1 | cut -d" " -f2) ;; esac ;; esac - if [ "$APP_PATH" = "$APP_SPEC" ] || [ ! "$2" ] + if [ "$APP_PATH" = "$APP_SPEC" ] || [ -z "$APP_SPEC" ] then - echo "`fixlen "$1" 9` `fixlen "$VERSION" 10` `fixlen "$APP_PATH" 58`" + echo "$(fixlen "$APP_NAME" 9) $(fixlen "$VERSION" 10) $(fixlen "$APP_PATH" 58)" else - echo "`fixlen "$1" 9` `fixlen "$VERSION" 10`" + echo "$(fixlen "$APP_NAME" 9) $(fixlen "$VERSION" 10)" echo "WARNING: Conflicting installations:" echo " OpenFOAM settings : $APP_SPEC" echo " current path : $APP_PATH" - case "$1" in + case "$APP_NAME" in gcc | $foamTestApp) echo " CRITICAL ERROR" - criticalError=`expr $criticalError + 1` + criticalError="x${criticalError}" ;; esac echo "" @@ -340,7 +297,9 @@ reportExecutable() checkOpenFOAMEnvironment() { - [ -d "$WM_PROJECT_INST_DIR" ] && [ -d "$WM_THIRD_PARTY_DIR" ] || { + [ -d "$WM_PROJECT_INST_DIR" ] && \ + [ -d "$WM_PROJECT_DIR" ] && \ + [ -d "$WM_THIRD_PARTY_DIR" ] || { echo "" echo "FATAL ERROR: OpenFOAM environment not configured." echo "" @@ -350,12 +309,15 @@ checkOpenFOAMEnvironment() echo "" exit 1 } + + echo "$(fixlen OpenFOAM: $WIDTH) ${WM_PROJECT_DIR##*/}" + echo "$(fixlen ThirdParty: $WIDTH) ${WM_THIRD_PARTY_DIR##*/}" } checkUserShell() { - echo "`fixlen Shell: $WIDTH` ${SHELL##*/}" + echo "$(fixlen Shell: $WIDTH) ${SHELL##*/}" case $SHELL in */csh | */tcsh | */bash | */ksh) ;; @@ -364,7 +326,7 @@ checkUserShell() echo " OpenFOAM ${WM_PROJECT_VERSION} is compatible with " echo " csh, tcsh, ksh and bash." echo - fatalError=`expr $fatalError + 1` + fatalError="x${fatalError}" ;; esac } @@ -372,15 +334,15 @@ checkUserShell() checkHostName() { - echo "`fixlen Host: $WIDTH` $HOST" - if [ ! "$HOST" ] + echo "$(fixlen Host: $WIDTH) $HOST" + if [ -z "$HOST" ] then echo "FATAL ERROR: Cannot stat hostname." echo " Contact your system administrator, " echo " OpenFOAM ${WM_PROJECT_VERSION} needs a valid " echo " hostname to function." echo - fatalError=`expr $fatalError + 1` + fatalError="x${fatalError}" fi } @@ -389,14 +351,14 @@ checkOS() { case "$OSTYPE" in Linux | LinuxAMD64 | SunOS ) - echo "`fixlen OS: $WIDTH` $OSTYPE version $(uname -r)" + echo "$(fixlen OS: $WIDTH) $OSTYPE version $(uname -r)" ;; *) echo "FATAL ERROR: Incompatible operating system \"$OSTYPE\"." echo " OpenFOAM ${FWM_PROJECT_VERSION} is currently " echo " available for Linux and SunOS only." echo - fatalError=`expr $fatalError + 1` + fatalError="x${fatalError}" ;; esac } @@ -409,7 +371,7 @@ checkOS() echo "Executing $0:" #------------------------------------------------------------------------------ -heading "Checking basic setup..." +heading "Basic setup :" hline checkOpenFOAMEnvironment checkUserShell @@ -418,51 +380,48 @@ checkOS hline #------------------------------------------------------------------------------ -heading "Checking main OpenFOAM env variables..." -COL1=`fixlen Environment_variable 21` -COL2=`fixlen Set_to_file_or_directory 40` +heading "Main OpenFOAM env variables :" +COL1=$(fixlen EnvironmentVariable 21) +COL2=$(fixlen FileOrDirectory 40) COL3="Valid" COL4="Path" 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" +reportEnv '$WM_PROJECT_INST_DIR' noPath yes +reportEnv '$WM_PROJECT_USER_DIR' noPath no +reportEnv '$WM_THIRD_PARTY_DIR' noPath yes hline #------------------------------------------------------------------------------ -heading "Checking the OpenFOAM env variables set on the PATH..." +heading "OpenFOAM env variables in PATH :" hline echo "$COL1 $COL2 $COL3 $COL4 $COL5" hline -reportEnv '$WM_PROJECT_DIR' '$PATH' "yes" +reportEnv '$WM_PROJECT_DIR' '$PATH' yes echo "" -reportEnv '$FOAM_APPBIN' '$PATH' "yes" -reportEnv '$FOAM_SITE_APPBIN' '$PATH' "no" -reportEnv '$FOAM_USER_APPBIN' '$PATH' "no" -reportEnv '$WM_DIR' '$PATH' "yes" +reportEnv '$FOAM_APPBIN' '$PATH' yes +reportEnv '$FOAM_SITE_APPBIN' '$PATH' no +reportEnv '$FOAM_USER_APPBIN' '$PATH' no +reportEnv '$WM_DIR' '$PATH' yes hline #------------------------------------------------------------------------------ -heading "Checking the OpenFOAM env variables set on the LD_LIBRARY_PATH..." +heading "OpenFOAM env variables in LD_LIBRARY_PATH :" hline echo "$COL1 $COL2 $COL3 $COL4 $COL5" 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 '$MPI_ARCH_PATH' '$LD_LIBRARY_PATH' "yes" +reportEnv '$FOAM_LIBBIN' '$LD_LIBRARY_PATH' yes +reportEnv '$FOAM_SITE_LIBBIN' '$LD_LIBRARY_PATH' no +reportEnv '$FOAM_USER_LIBBIN' '$LD_LIBRARY_PATH' no +reportEnv '$MPI_ARCH_PATH' '$LD_LIBRARY_PATH' yes hline #------------------------------------------------------------------------------ -heading "Third party software" -COL1=`fixlen Software 9` -COL2=`fixlen Version 10` -COL3=`fixlen Location 10` +heading "Third-party software" hline -echo "$COL1 $COL2 $COL3" +echo "$(fixlen Software 9) $(fixlen Version 10) $(fixlen Location 10)" hline reportExecutable flex reportExecutable "$WM_CC" @@ -482,19 +441,19 @@ hline heading "Summary" hline -if [ $fatalError -gt 0 ] +if [ "${#fatalError}" -gt 0 ] then - echo "The system test has evoked $fatalError fatal error(s)." + echo "The system test evoked ${#fatalError} fatal error(s)." else echo "Base configuration ok." fi -if [ $criticalError -gt 0 ] +if [ "${#criticalError}" -gt 0 ] then - echo "The foam installation contains $criticalError critical error(s)." + echo "The foam installation contains ${#criticalError} critical error(s)." else echo "Critical systems ok." fi -if [ $criticalError -gt 0 ] || [ $fatalError -gt 0 ] +if [ "${#criticalError}" -gt 0 ] || [ "${#fatalError}" -gt 0 ] then echo echo "Review the output for warning messages and consult"