STYLE: bump min gcc for foamInstallationTest

- cleanup some code in foamInstallationTest
This commit is contained in:
Mark Olesen
2016-12-19 18:04:12 +01:00
parent 7b4680482e
commit 5fdb20c35e

View File

@ -26,30 +26,27 @@
# foamInstallationTest # foamInstallationTest
# #
# Description # 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. # personal configuration for running OpenFOAM.
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Base settings # Base settings
MIN_VERSION_GCC=4.5.0 MIN_VERSION_GCC=4.8.0
# General # General
WIDTH=20 WIDTH=20
# Global variables
fatalError=0
criticalError=0
# System variables # System variables
HOST=`uname -n` HOST=$(uname -n)
OSTYPE=`uname -s` OSTYPE=$(uname -s)
USER_NAME=$LOGNAME
: ${USER_NAME:=$USER}
# which OpenFOAM application to test for the Version # OpenFOAM application to test for the Version
foamTestApp=icoFoam foamTestApp=icoFoam
# Global variables
unset fatalError criticalError
#============================================================================== #==============================================================================
# HELPER FUNCTIONS # 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() fixlen()
{ {
WORD=$1 WORD=$1
ONELEN=`stringLength $1` LDIFF=$(expr ${#WORD} - ${2:-4})
LDIFF=`expr $ONELEN - $2`
if [ $LDIFF -le 1 ] if [ $LDIFF -le 1 ]
then then
while [ $LDIFF -lt 0 ] while [ $LDIFF -lt 0 ]
do do
WORD="$WORD " WORD="$WORD "
LDIFF=`expr $LDIFF + 1` LDIFF=$(expr $LDIFF + 1)
done done
echo "$WORD" echo "$WORD"
else else
LDIFF=`expr $LDIFF + 4` LDIFF=$(expr $LDIFF + 4)
WORD=`echo "$WORD" | cut -c${LDIFF}-` WORD=$(echo "$WORD" | cut -c${LDIFF}-)
echo "...${WORD}" echo "...${WORD}"
fi fi
} }
@ -112,16 +88,15 @@ fixlen()
reportEnv() reportEnv()
{ {
EXP_ENV=`eval "echo $1"` eval EXP_ENV="$1"
EXP_PATH=`eval "echo $2"` eval EXP_PATH="$2"
CRIT="$3" CRIT="$3"
EXISTS=" no " EXISTS=" no "
ON_PATH="" ON_PATH=""
if [ `length $EXP_ENV` -gt 0 ]
if [ -n "$EXP_ENV" ]
then then
case "$OSTYPE" in if test -e "$EXP_ENV"
SunOS)
if /usr/bin/test -e $EXP_ENV
then then
EXISTS=" yes " EXISTS=" yes "
if [ "$2" != noPath ] if [ "$2" != noPath ]
@ -134,6 +109,7 @@ reportEnv()
case "$e" in case "$e" in
"$EXP_ENV" | "$EXP_ENV/bin" | "$EXP_ENV/lib") "$EXP_ENV" | "$EXP_ENV/bin" | "$EXP_ENV/lib")
ON_PATH="yes " ON_PATH="yes "
break
;; ;;
esac esac
done done
@ -144,51 +120,22 @@ reportEnv()
else else
ON_PATH=" " ON_PATH=" "
fi fi
echo "`fixlen "$1" 21` `fixlen "$EXP_ENV" 40` $EXISTS $ON_PATH $CRIT" 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 else
CRIT=" $3" echo "$(fixlen "$1" 21) --------- env variable not set --------- $3"
fi
else
ON_PATH=" "
fi
echo "`fixlen "$1" 21` `fixlen "$EXP_ENV" 40` $EXISTS $ON_PATH $CRIT"
;;
esac
else
echo "`fixlen "$1" 21` --------- env variable not set --------- $3"
fi fi
ERROR="false" ERROR=false
if [ "$EXISTS" = no ] || [ "$ON_PATH" = no ] if [ "$EXISTS" = no ] || [ "$ON_PATH" = no ]
then then
ERROR="true" ERROR=true
fi fi
if [ "$3" = yes ] && [ "$ERROR" = true ] if [ "$3" = yes ] && [ "$ERROR" = true ]
then then
criticalError=`expr $criticalError + 1` criticalError="x${criticalError}"
echo "WARNING: CRITICAL ERROR" echo "WARNING: CRITICAL ERROR"
echo echo
fi fi
} }
@ -198,139 +145,149 @@ findExec()
IFS=':' IFS=':'
for d in $1 for d in $1
do do
case "$OSTYPE" in if test ! -d "$d/$2" -a -x "$d/$2"
SunOS)
if /usr/bin/test ! -d "$d/$2" -a -x "$d/$2"
then then
IFS=$oldIFS IFS=$oldIFS
echo "$d/$2" echo "$d/$2"
return 0 return 0
fi fi
;;
*)
if [ ! -d "$d/$2" -a -x "$d/$2" ]
then
IFS=$oldIFS
echo "$d/$2"
return 0
fi
;;
esac
done done
IFS=$oldIFS IFS=$oldIFS
return 1 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() reportExecutable()
{ {
APP_PATH="" APP_NAME="$1"
APP_PATH=`findExec $PATH $1`
APP_SPEC="$2" APP_SPEC="$2"
if [ ! -n $APP_PATH ] APP_PATH="$(findExec $PATH $1)"
if [ -z "$APP_PATH" ]
then then
echo "`fixlen "$1" 9`" "*** not installed ***" echo "$(fixlen "$1" 9)" "*** not installed ***"
VERSION="" VERSION=""
case "$1" in case "$1" in
gcc* | $foamTestApp) gcc* | $foamTestApp)
echo " CRITICAL ERROR" echo " CRITICAL ERROR"
criticalError=`expr $criticalError + 1` criticalError="x${criticalError}"
;; ;;
esac esac
echo echo
return 1 return 1
fi fi
case "$1" in case "$APP_NAME" in
$foamTestApp) $foamTestApp)
VERSION=`$1 -case /dev/null 2>&1 \ VERSION=$($APP_NAME -case /dev/null 2>&1 \
| sed -ne 's/^.*Version: *\([^ ][^ ]*\).*/\1/p'` | sed -ne 's/^.*Version: *\([^ ][^ ]*\).*/\1/p')
;; ;;
flex) flex)
VERSION=`$1 --version /dev/null 2>&1 \ VERSION=$($APP_NAME --version /dev/null 2>&1 \
| sed -ne 's/flex \([0-9][0-9.]*\).*/\1/p' ` | sed -ne 's/flex \([0-9][0-9.]*\).*/\1/p')
;; ;;
gcc* | g++*) gcc* | g++*)
VERSION=`$1 -v 2>&1 \ VERSION=$($APP_NAME -v 2>&1 \
| sed -ne 's/^gcc version \([0-9][0-9.]*\).*/\1/p' ` | sed -ne 's/^gcc version \([0-9][0-9.]*\).*/\1/p')
case "$1" in if ! vercmp_3 "$MIN_VERSION_GCC" "$VERSION"
then
case "$APP_NAME" in
gcc*) gcc*)
BINARYCODENAME=gcc SHORT_NAME=gcc
;; ;;
g++*) g++*)
BINARYCODENAME=g++ SHORT_NAME=g++
;; ;;
esac esac
MINV1=`echo $MIN_VERSION_GCC | cut -d. -f1` echo "ERROR: $SHORT_NAME version is too old for this release of OpenFOAM"
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 " User version : $VERSION" echo " User version : $VERSION"
echo " Minimum required: $MIN_VERSION_GCC" echo " Minimum required: $MIN_VERSION_GCC"
echo "" echo ""
fatalError=`expr $fatalError + 1` fatalError="x${fatalError}"
fi fi
;; ;;
gtar) gtar)
VERSION=`$APP_PATH --version | head -1` VERSION=$($APP_PATH --version | head -1)
;; ;;
tar) tar)
VERSION=`$APP_PATH --version | head -1 | cut -d" " -f4` VERSION=$($APP_PATH --version | head -1 | cut -d" " -f4)
;; ;;
gzip) gzip)
case "$OSTYPE" in case "$OSTYPE" in
SunOS) 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
;; ;;
esac esac
if [ "$APP_PATH" = "$APP_SPEC" ] || [ ! "$2" ] if [ "$APP_PATH" = "$APP_SPEC" ] || [ -z "$APP_SPEC" ]
then 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 else
echo "`fixlen "$1" 9` `fixlen "$VERSION" 10`" echo "$(fixlen "$APP_NAME" 9) $(fixlen "$VERSION" 10)"
echo "WARNING: Conflicting installations:" echo "WARNING: Conflicting installations:"
echo " OpenFOAM settings : $APP_SPEC" echo " OpenFOAM settings : $APP_SPEC"
echo " current path : $APP_PATH" echo " current path : $APP_PATH"
case "$1" in case "$APP_NAME" in
gcc | $foamTestApp) gcc | $foamTestApp)
echo " CRITICAL ERROR" echo " CRITICAL ERROR"
criticalError=`expr $criticalError + 1` criticalError="x${criticalError}"
;; ;;
esac esac
echo "" echo ""
@ -340,7 +297,9 @@ reportExecutable()
checkOpenFOAMEnvironment() 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 ""
echo "FATAL ERROR: OpenFOAM environment not configured." echo "FATAL ERROR: OpenFOAM environment not configured."
echo "" echo ""
@ -350,12 +309,15 @@ checkOpenFOAMEnvironment()
echo "" echo ""
exit 1 exit 1
} }
echo "$(fixlen OpenFOAM: $WIDTH) ${WM_PROJECT_DIR##*/}"
echo "$(fixlen ThirdParty: $WIDTH) ${WM_THIRD_PARTY_DIR##*/}"
} }
checkUserShell() checkUserShell()
{ {
echo "`fixlen Shell: $WIDTH` ${SHELL##*/}" echo "$(fixlen Shell: $WIDTH) ${SHELL##*/}"
case $SHELL in case $SHELL in
*/csh | */tcsh | */bash | */ksh) */csh | */tcsh | */bash | */ksh)
;; ;;
@ -364,7 +326,7 @@ checkUserShell()
echo " OpenFOAM ${WM_PROJECT_VERSION} is compatible with " echo " OpenFOAM ${WM_PROJECT_VERSION} is compatible with "
echo " csh, tcsh, ksh and bash." echo " csh, tcsh, ksh and bash."
echo echo
fatalError=`expr $fatalError + 1` fatalError="x${fatalError}"
;; ;;
esac esac
} }
@ -372,15 +334,15 @@ checkUserShell()
checkHostName() checkHostName()
{ {
echo "`fixlen Host: $WIDTH` $HOST" echo "$(fixlen Host: $WIDTH) $HOST"
if [ ! "$HOST" ] if [ -z "$HOST" ]
then then
echo "FATAL ERROR: Cannot stat hostname." echo "FATAL ERROR: Cannot stat hostname."
echo " Contact your system administrator, " echo " Contact your system administrator, "
echo " OpenFOAM ${WM_PROJECT_VERSION} needs a valid " echo " OpenFOAM ${WM_PROJECT_VERSION} needs a valid "
echo " hostname to function." echo " hostname to function."
echo echo
fatalError=`expr $fatalError + 1` fatalError="x${fatalError}"
fi fi
} }
@ -389,14 +351,14 @@ checkOS()
{ {
case "$OSTYPE" in case "$OSTYPE" in
Linux | LinuxAMD64 | SunOS ) 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 "FATAL ERROR: Incompatible operating system \"$OSTYPE\"."
echo " OpenFOAM ${FWM_PROJECT_VERSION} is currently " echo " OpenFOAM ${FWM_PROJECT_VERSION} is currently "
echo " available for Linux and SunOS only." echo " available for Linux and SunOS only."
echo echo
fatalError=`expr $fatalError + 1` fatalError="x${fatalError}"
;; ;;
esac esac
} }
@ -409,7 +371,7 @@ checkOS()
echo "Executing $0:" echo "Executing $0:"
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
heading "Checking basic setup..." heading "Basic setup :"
hline hline
checkOpenFOAMEnvironment checkOpenFOAMEnvironment
checkUserShell checkUserShell
@ -418,51 +380,48 @@ checkOS
hline hline
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
heading "Checking main OpenFOAM env variables..." heading "Main OpenFOAM env variables :"
COL1=`fixlen Environment_variable 21` COL1=$(fixlen EnvironmentVariable 21)
COL2=`fixlen Set_to_file_or_directory 40` COL2=$(fixlen FileOrDirectory 40)
COL3="Valid" COL3="Valid"
COL4="Path" COL4="Path"
COL5="Crit" COL5="Crit"
hline hline
echo "$COL1 $COL2 $COL3 $COL5" echo "$COL1 $COL2 $COL3 $COL5"
hline hline
reportEnv '$WM_PROJECT_INST_DIR' 'noPath' "yes" reportEnv '$WM_PROJECT_INST_DIR' noPath yes
reportEnv '$WM_PROJECT_USER_DIR' 'noPath' "no" reportEnv '$WM_PROJECT_USER_DIR' noPath no
reportEnv '$WM_THIRD_PARTY_DIR' 'noPath' "yes" reportEnv '$WM_THIRD_PARTY_DIR' noPath yes
hline hline
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
heading "Checking the OpenFOAM env variables set on the PATH..." heading "OpenFOAM env variables in PATH :"
hline hline
echo "$COL1 $COL2 $COL3 $COL4 $COL5" echo "$COL1 $COL2 $COL3 $COL4 $COL5"
hline hline
reportEnv '$WM_PROJECT_DIR' '$PATH' "yes" reportEnv '$WM_PROJECT_DIR' '$PATH' yes
echo "" echo ""
reportEnv '$FOAM_APPBIN' '$PATH' "yes" reportEnv '$FOAM_APPBIN' '$PATH' yes
reportEnv '$FOAM_SITE_APPBIN' '$PATH' "no" reportEnv '$FOAM_SITE_APPBIN' '$PATH' no
reportEnv '$FOAM_USER_APPBIN' '$PATH' "no" reportEnv '$FOAM_USER_APPBIN' '$PATH' no
reportEnv '$WM_DIR' '$PATH' "yes" reportEnv '$WM_DIR' '$PATH' yes
hline hline
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
heading "Checking the OpenFOAM env variables set on the LD_LIBRARY_PATH..." heading "OpenFOAM env variables in LD_LIBRARY_PATH :"
hline hline
echo "$COL1 $COL2 $COL3 $COL4 $COL5" echo "$COL1 $COL2 $COL3 $COL4 $COL5"
hline hline
reportEnv '$FOAM_LIBBIN' '$LD_LIBRARY_PATH' "yes" reportEnv '$FOAM_LIBBIN' '$LD_LIBRARY_PATH' yes
reportEnv '$FOAM_SITE_LIBBIN' '$LD_LIBRARY_PATH' "no" reportEnv '$FOAM_SITE_LIBBIN' '$LD_LIBRARY_PATH' no
reportEnv '$FOAM_USER_LIBBIN' '$LD_LIBRARY_PATH' "no" reportEnv '$FOAM_USER_LIBBIN' '$LD_LIBRARY_PATH' no
reportEnv '$MPI_ARCH_PATH' '$LD_LIBRARY_PATH' "yes" reportEnv '$MPI_ARCH_PATH' '$LD_LIBRARY_PATH' yes
hline hline
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
heading "Third party software" heading "Third-party software"
COL1=`fixlen Software 9`
COL2=`fixlen Version 10`
COL3=`fixlen Location 10`
hline hline
echo "$COL1 $COL2 $COL3" echo "$(fixlen Software 9) $(fixlen Version 10) $(fixlen Location 10)"
hline hline
reportExecutable flex reportExecutable flex
reportExecutable "$WM_CC" reportExecutable "$WM_CC"
@ -482,19 +441,19 @@ hline
heading "Summary" heading "Summary"
hline hline
if [ $fatalError -gt 0 ] if [ "${#fatalError}" -gt 0 ]
then then
echo "The system test has evoked $fatalError fatal error(s)." echo "The system test evoked ${#fatalError} fatal error(s)."
else else
echo "Base configuration ok." echo "Base configuration ok."
fi fi
if [ $criticalError -gt 0 ] if [ "${#criticalError}" -gt 0 ]
then then
echo "The foam installation contains $criticalError critical error(s)." echo "The foam installation contains ${#criticalError} critical error(s)."
else else
echo "Critical systems ok." echo "Critical systems ok."
fi fi
if [ $criticalError -gt 0 ] || [ $fatalError -gt 0 ] if [ "${#criticalError}" -gt 0 ] || [ "${#fatalError}" -gt 0 ]
then then
echo echo
echo "Review the output for warning messages and consult" echo "Review the output for warning messages and consult"