diff --git a/bin/foamInstallationTest b/bin/foamInstallationTest index 9dede18ebb545c9d4bf5af8c0db6a1abfc5a3b48..a3ebbbae09534c08a4109d409f163b42dd3ec3b0 100755 --- a/bin/foamInstallationTest +++ b/bin/foamInstallationTest @@ -10,41 +10,29 @@ # Copyright (C) 2019-2020 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 <http://www.gnu.org/licenses/>. +# This file is part of OpenFOAM, distributed under GPL-3.0-or-later. # # Script -# foamInstallationTest +# bin/foamInstallationTest # # Description -# Check the machine system, the installation of OpenFOAM, and the user's -# personal configuration for running OpenFOAM. +# Check the machine, software components, and the OpenFOAM environment +# for running OpenFOAM. # #------------------------------------------------------------------------------ # Base settings MIN_VERSION_GCC=4.8.5 +MIN_VERSION_LLVM=3.7.1 # General WIDTH=20 # System variables -HOST=$(uname -n) -OSTYPE=$(uname -s) +HOST="$(uname -n)" +OSTYPE="$(uname -s)" -# OpenFOAM application to test for the Version +# OpenFOAM application to test for existence. Obtain version from wmake. foamTestApp=icoFoam # Global variables @@ -62,7 +50,6 @@ hline() heading() { - echo echo echo "$1" } @@ -99,7 +86,7 @@ reportEnv() if [ -n "$EXP_ENV" ] then - if test -e "$EXP_ENV" + if [ -e "$EXP_ENV" ] then EXISTS=" yes " if [ "$2" != noPath ] @@ -125,7 +112,7 @@ reportEnv() 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) $(fixlen "[env variable unset]" 40) $3" fi ERROR=false @@ -144,11 +131,17 @@ reportEnv() findExec() { + if [ -x "$2" ] && [ ! -d "$2" ] + then + echo "$2" + return 0 + fi + oldIFS=$IFS IFS=':' for d in $1 do - if test ! -d "$d/$2" -a -x "$d/$2" + if [ -x "$d/$2" ] && [ ! -d "$d/$2" ] then IFS=$oldIFS echo "$d/$2" @@ -201,7 +194,7 @@ vercmp_3() fi # Patch - if [ -n "$arg1Patch" -a -n "$arg2Patch" ] + if [ -n "$arg1Patch" ] && [ -n "$arg2Patch" ] then if [ "$arg1Patch" -gt "$arg2Patch" ] then @@ -218,12 +211,14 @@ reportExecutable() APP_NAME="$1" APP_SPEC="$2" APP_PATH="$(findExec $PATH $1)" + VERSION="unknown" + if [ -z "$APP_PATH" ] then - echo "$(fixlen "$1" 9)" "*** not installed ***" + echo "$(fixlen "${1##*/}" 9)" "*** not installed ***" VERSION="" case "$1" in - gcc* | $foamTestApp) + *gcc* | *clang* | "$foamTestApp") echo " CRITICAL ERROR" criticalError="x${criticalError}" ;; @@ -231,11 +226,21 @@ reportExecutable() echo return 1 fi + case "$APP_NAME" in - $foamTestApp) - VERSION=$($APP_NAME -case /dev/null 2>&1 \ - | sed -ne 's/^.*Version: *\([^ ][^ ]*\).*/\1/p') + "$foamTestApp") + VERSION=$($APP_NAME -help 2>&1 \ + | sed -ne 's/^.*Build: *\([^ ][^ ]*\).*/\1/p') + + # Cannot do much with the build info: + # Build: 51e3d2a8ae-20200528 (patch=200506) + # so just treat as available/not available + if [ -n "$VERSION" ] + then + VERSION="exists" + fi ;; + flex) VERSION=$(flex --version /dev/null 2>&1 \ | sed -ne 's/flex \([0-9][0-9.]*\).*/\1/p') @@ -243,6 +248,23 @@ reportExecutable() wmake) VERSION="$(wmake --version 2>/dev/null)" ;; + *clang*) + VERSION=$($APP_NAME --version 2>/dev/null \ + | sed -ne '1{s/^.*version \([0-9][.0-9]*\).*/\1/p;}') + + if ! vercmp_3 "$MIN_VERSION_LLVM" "$VERSION" + then + case "$APP_NAME" in + (*clang++*) SHORT_NAME=clang++ ;; + (*) SHORT_NAME=clang ;; + esac + 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="x${fatalError}" + fi + ;; *gcc* | *g++*) VERSION=$($APP_NAME -v 2>&1 \ | sed -ne 's/^gcc version \([0-9][0-9.]*\).*/\1/p') @@ -250,85 +272,77 @@ reportExecutable() if ! vercmp_3 "$MIN_VERSION_GCC" "$VERSION" then case "$APP_NAME" in - gcc*) - SHORT_NAME=gcc - ;; - g++*) - SHORT_NAME=g++ - ;; + (*g++*) SHORT_NAME=g++ ;; + (*) SHORT_NAME=gcc ;; esac - echo "ERROR: $SHORT_NAME version is too old for this release of OpenFOAM" echo " User version : $VERSION" echo " Minimum required: $MIN_VERSION_GCC" - echo "" + echo fatalError="x${fatalError}" fi ;; - gtar) - VERSION=$($APP_PATH --version | head -1) - ;; - tar) - VERSION=$($APP_PATH --version | head -1 | cut -d" " -f4) - ;; - gzip) - case "$OSTYPE" in - SunOS) - VERSION=$($APP_NAME --version 2>&1 | grep gzip | cut -d" " -f2) - ;; - *) - VERSION=$($APP_NAME --version | head -1 | cut -d" " -f2) - ;; - esac - ;; esac + if [ "$APP_PATH" = "$APP_SPEC" ] || [ -z "$APP_SPEC" ] then - echo "$(fixlen "$APP_NAME" 9) $(fixlen "$VERSION" 10) $(fixlen "$APP_PATH" 58)" + echo "$(fixlen "${APP_NAME##*/}" 12) $(fixlen "$VERSION" 10) $(fixlen "$APP_PATH" 55)" else - echo "$(fixlen "$APP_NAME" 9) $(fixlen "$VERSION" 10)" + echo "$(fixlen "${APP_NAME##*/}" 12) $(fixlen "$VERSION" 10)" echo "WARNING: Conflicting installations:" echo " OpenFOAM settings : $APP_SPEC" echo " current path : $APP_PATH" case "$APP_NAME" in - gcc | $foamTestApp) + *clang* | *gcc* | "$foamTestApp") echo " CRITICAL ERROR" criticalError="x${criticalError}" ;; esac - echo "" + echo fi } -checkOpenFOAMEnvironment() +checkEnvironment() { - [ -d "$WM_PROJECT_DIR" ] && [ -d "$WM_THIRD_PARTY_DIR" ] || { - echo "" - echo "FATAL ERROR: OpenFOAM environment not configured." - echo "" - echo " Please follow the download and installation link in README.html:" - echo " <OpenFOAM installation dir>/OpenFOAM-${WM_PROJECT_VERSION}/README.html" + if [ -d "$WM_PROJECT_DIR" ] + then + echo "$(fixlen OpenFOAM: $WIDTH) ${WM_PROJECT_DIR##*/}" + else + echo + echo "ERROR: OpenFOAM environment not configured." + echo + echo " Please see the information in the README.md" + echo " <OpenFOAM installation dir>/OpenFOAM-${WM_PROJECT_VERSION}/README.md" echo " for information on setting-up the OpenFOAM environment." - echo "" + echo + fatalError="x${fatalError}" exit 1 - } + fi - echo "$(fixlen OpenFOAM: $WIDTH) ${WM_PROJECT_DIR##*/}" - echo "$(fixlen ThirdParty: $WIDTH) ${WM_THIRD_PARTY_DIR##*/}" + if [ -d "$WM_THIRD_PARTY_DIR" ] + then + echo "$(fixlen ThirdParty: $WIDTH) ${WM_THIRD_PARTY_DIR##*/}" + else + echo "$(fixlen ThirdParty: $WIDTH) [missing]" + echo "This can be intentional, or indicate a faulty installation" + fi } checkUserShell() { echo "$(fixlen Shell: $WIDTH) ${SHELL##*/}" - case $SHELL in + case "$SHELL" in */csh | */tcsh | */bash | */ksh) ;; + */dash | */zsh) + echo "[The ${SHELL##*/} shell is generally okay to use]" + ;; *) - echo "FATAL ERROR: Cannot identify the shell you are running." - echo " OpenFOAM ${WM_PROJECT_VERSION} is compatible with " - echo " csh, tcsh, ksh and bash." + echo "ERROR: Cannot identify the shell you are running." + echo " OpenFOAM ${WM_PROJECT_VERSION} is compatible with " + echo " csh, tcsh, bash, ksh (and possibly dash, zsh)" echo fatalError="x${fatalError}" ;; @@ -341,10 +355,9 @@ checkHostName() 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 "ERROR: Cannot stat hostname." + echo " OpenFOAM ${WM_PROJECT_VERSION} needs a valid hostname." + echo " Contact your system administrator." echo fatalError="x${fatalError}" fi @@ -358,9 +371,9 @@ checkOS() 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, Darwin and SunOS only." + echo "ERROR: Incompatible operating system \"$OSTYPE\"." + echo " OpenFOAM ${WM_PROJECT_VERSION} is currently available for" + echo " Linux, Darwin and SunOS only." echo fatalError="x${fatalError}" ;; @@ -371,13 +384,13 @@ checkOS() #============================================================================== # MAIN SCRIPT #============================================================================== -# -echo "Executing $0:" + +echo "Executing ${0##*/}" #------------------------------------------------------------------------------ heading "Basic setup :" hline -checkOpenFOAMEnvironment +checkEnvironment checkUserShell checkHostName checkOS @@ -385,7 +398,7 @@ hline #------------------------------------------------------------------------------ heading "Main OpenFOAM env variables :" -COL1=$(fixlen EnvironmentVariable 21) +COL1=$(fixlen Environment 21) COL2=$(fixlen FileOrDirectory 40) COL3="Valid" COL4="Path" @@ -394,7 +407,8 @@ hline echo "$COL1 $COL2 $COL3 $COL5" hline reportEnv '$WM_PROJECT_USER_DIR' noPath no -reportEnv '$WM_THIRD_PARTY_DIR' noPath yes +reportEnv '$WM_THIRD_PARTY_DIR' noPath maybe +reportEnv '$WM_PROJECT_SITE' noPath no hline #------------------------------------------------------------------------------ @@ -403,7 +417,7 @@ hline echo "$COL1 $COL2 $COL3 $COL4 $COL5" hline reportEnv '$WM_PROJECT_DIR' '$PATH' yes -echo "" +echo reportEnv '$FOAM_APPBIN' '$PATH' yes reportEnv '$FOAM_SITE_APPBIN' '$PATH' no reportEnv '$FOAM_USER_APPBIN' '$PATH' no @@ -425,22 +439,25 @@ hline #------------------------------------------------------------------------------ heading "Software Components" hline -echo "$(fixlen Software 9) $(fixlen Version 10) $(fixlen Location 10)" +echo "$(fixlen Software 12) $(fixlen Version 10) $(fixlen Location 10)" hline reportExecutable flex reportExecutable wmake -reportExecutable "$(wmake -show-c)" -reportExecutable "$(wmake -show-cxx)" -reportExecutable gzip -if [ "$OSTYPE" = Linux ] -then - reportExecutable tar -else - reportExecutable gtar -fi -reportExecutable $foamTestApp "$FOAM_APPBIN/$foamTestApp" +for compilerType in c cxx +do + compiler="$(wmake -show-path-"$compilerType" 2>/dev/null)" + if [ -n "$compiler" ] + then + reportExecutable "$compiler" + else + echo "unknown $compilerType compiler for $WM_COMPILER" + fatalError="x${fatalError}" + fi +done hline +reportExecutable "$foamTestApp" "$FOAM_APPBIN/$foamTestApp" + #------------------------------------------------------------------------------ heading "Summary" diff --git a/bin/foamSystemCheck b/bin/foamSystemCheck index b2d4e57ede33c1dc44645dbd45817a18d811bca8..4d5c7fadf0c2e65e5fda94453b7fb97e14eaf236 100755 --- a/bin/foamSystemCheck +++ b/bin/foamSystemCheck @@ -10,56 +10,50 @@ # Copyright (C) 2020 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 <http://www.gnu.org/licenses/>. +# This file is part of OpenFOAM, distributed under GPL-3.0-or-later. # # Script -# foamSystemCheck +# bin/foamSystemCheck # # Description -# Checks the machine system and the user's -# personal configuration for running OpenFOAM. +# Check the machine, software components, and the environment +# for installing OpenFOAM. # #------------------------------------------------------------------------------ -# STATIC VARIABLES -# ~~~~~~~~~~~~~~~~ -HLINE="-----------------------------------------------------------------------" -WIDTH=16 -unset fatalError +# General +WIDTH=12 -# FUNCTIONS -# ~~~~~~~~~ -heading() +# System variables +HOST="$(uname -n)" +OSTYPE="$(uname -s)" + +# Global variables +unset fatalError criticalError + +#============================================================================== +# HELPER FUNCTIONS +#============================================================================== + +hline() { - echo - echo "$1" - echo "$HLINE" + echo "-------------------------------------------------------------------------------" } -lenBase() + +heading() { - echo $1 | tr -d " " | wc -m | tr -d " " + echo + echo "$1" } length() { - NOCHAR=$(lenBase $1) - NOCHAR=$(expr $NOCHAR - 1) - [ $NOCHAR -ge 0 ] || NOCHAR=0 - echo $NOCHAR + ## echo "length <$1>" 1>&2 + nChars="$(echo "$1" | tr -d ' ' | wc -c)" + nChars="$((nChars - 1))" # Remove newline from the count + [ "$nChars" -ge 0 ] || nChars=0 + echo "$nChars" } fixlen() @@ -82,57 +76,102 @@ fixlen() fi } -# MAIN CODE -# ~~~~~~~~~ -heading "Checking basic system..." -# check shell -echo "$(fixlen Shell: $WIDTH) $SHELL" -case "$SHELL" in -*/csh | */tcsh | */bash | */ksh) - ;; -*) - echo "ERROR: Cannot identify the current shell." - echo " OpenFOAM $WM_PROJECT_VERSION is compatible" - echo " with csh, tcsh, ksh and bash." - echo - fatalError=true - ;; -esac - -# check hostname -HOST=$(uname -n) -echo "$(fixlen Host: $WIDTH) $HOST" -if [ $(length $HOST) -eq 0 ] -then - echo "ERROR: Cannot stat hostname." - echo " OpenFOAM $WM_PROJECT_VERSION needs a valid hostname to" - echo " function. Contact your system administrator." - echo - fatalError=true -fi +# ----------------------------------------------------------------------------- -# check os -OSTYPE=$(uname -s) -case "$OSTYPE" in -Linux* | Darwin* | SunOS ) - echo "$(fixlen OS: $WIDTH) $OSTYPE version $(uname -r)" - ;; -*) - echo "ERROR: Incompatible operating system \"$OSTYPE\"." - echo " OpenFOAM $WM_PROJECT_VERSION is currently available for " - echo " Linux, Darwin and SunOS only." - echo - fatalError=true - ;; -esac +checkEnvironment() +{ + if [ -d "$WM_PROJECT_DIR" ] + then + echo "$(fixlen OpenFOAM: $WIDTH) ${WM_PROJECT_DIR##*/}" + else + echo + echo "ERROR: OpenFOAM environment not configured." + echo + echo " Please see the information in the README.md" + echo " <OpenFOAM installation dir>/OpenFOAM-${WM_PROJECT_VERSION}/README.md" + echo " for information on setting-up the OpenFOAM environment." + echo + fatalError="x${fatalError}" + exit 1 + fi + + if [ -d "$WM_THIRD_PARTY_DIR" ] + then + echo "$(fixlen ThirdParty: $WIDTH) ${WM_THIRD_PARTY_DIR##*/}" + else + echo "$(fixlen ThirdParty: $WIDTH) [missing]" + echo "This can be intentional, or indicate a faulty installation" + fi +} +checkUserShell() +{ + echo "$(fixlen Shell: $WIDTH) ${SHELL##*/}" + case "$SHELL" in + */csh | */tcsh | */bash | */ksh) + ;; + */dash | */zsh) + echo "[The ${SHELL##*/} shell is generally okay to use]" + ;; + *) + echo "ERROR: Cannot identify the shell you are running." + echo " OpenFOAM ${WM_PROJECT_VERSION} is compatible with " + echo " csh, tcsh, bash, ksh (and possibly dash, zsh)" + echo + fatalError="x${fatalError}" + ;; + esac +} + + +checkHostName() +{ + echo "$(fixlen Host: $WIDTH) $HOST" + if [ -z "$HOST" ] + then + echo "ERROR: Cannot stat hostname." + echo " OpenFOAM ${WM_PROJECT_VERSION} needs a valid hostname." + echo " Contact your system administrator." + echo + fatalError="x${fatalError}" + fi +} + + +checkOS() +{ + case "$OSTYPE" in + Linux* | Darwin* | SunOS ) + echo "$(fixlen OS: $WIDTH) $OSTYPE version $(uname -r)" + ;; + *) + echo "ERROR: Incompatible operating system \"$OSTYPE\"." + echo " OpenFOAM ${WM_PROJECT_VERSION} is currently available for" + echo " Linux, Darwin and SunOS only." + echo + fatalError="x${fatalError}" + ;; + esac +} + +#============================================================================== +# MAIN SCRIPT +#============================================================================== + +heading "Checking basic system..." +hline + +checkUserShell +checkHostName +checkOS + # check user name -USER_NAME=$LOGNAME +USER_NAME="$LOGNAME" if [ $(length $USER_NAME) -eq 0 ] then - USER_NAME=$USER + USER_NAME="$USER" fi echo "$(fixlen User: $WIDTH) ${USER_NAME}" @@ -142,25 +181,26 @@ then echo " OpenFOAM $WM_PROJECT_VERSION needs a valid user name." echo " Contact your system administrator. " echo - fatalError=true + fatalError="x${fatalError}" fi - -echo echo -if [ "$fatalError" = true ] +if [ -n "$fatalError" ] then - echo "System check: FAIL" - echo "==================" - echo "Your system is not currently compatible with OpenFOAM installation " - echo "requirements. Review the error messages and consult the documentation" - echo "for further instructions." - echo + cat << FAILED +System check: FAIL +================== +Your system may not compatible with the current OpenFOAM requirements. +Review the error messages and consult the documentation for further information +FAILED else - echo "System check: PASS" - echo "==================" - echo "Continue OpenFOAM installation." - echo + cat << PASSED +System check: PASS +================== +Can continue to OpenFOAM installation. +PASSED fi +echo + #------------------------------------------------------------------------------