Newer
Older
#!/bin/sh
#------------------------------------------------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
# \\/ M anipulation |
#-------------------------------------------------------------------------------
# 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/>.
#
# Script
# foamInstallationTest
#
# Description
# Check the machine system, the installation of OpenFOAM, and the user's
# personal configuration for running OpenFOAM.
#
#------------------------------------------------------------------------------
# General
WIDTH=20
# System variables
HOST=$(uname -n)
OSTYPE=$(uname -s)
# OpenFOAM application to test for the Version
foamTestApp=icoFoam
# Global variables
unset fatalError criticalError
#==============================================================================
# HELPER FUNCTIONS
#==============================================================================
hline()
{
echo "-------------------------------------------------------------------------------"
}
heading()
{
echo
echo
fixlen()
{
LDIFF=$(expr ${#WORD} - ${2:-4})
if [ $LDIFF -le 1 ]
then
while [ $LDIFF -lt 0 ]
do
done
echo "$WORD"
else
LDIFF=$(expr $LDIFF + 4)
WORD=$(echo "$WORD" | cut -c${LDIFF}-)
echo "...${WORD}"
fi
}
reportEnv()
{
eval EXP_ENV="$1"
eval EXP_PATH="$2"
CRIT="$3"
EXISTS=" no "
ON_PATH=""
then
if test -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 "
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"
echo "$(fixlen "$1" 21) --------- env variable not set --------- $3"
if [ "$EXISTS" = no ] || [ "$ON_PATH" = no ]
then
if [ "$3" = yes ] && [ "$ERROR" = true ]
then
criticalError="x${criticalError}"
echo "WARNING: CRITICAL ERROR"
echo
fi
}
findExec()
{
oldIFS=$IFS
IFS=':'
for d in $1
do
if test ! -d "$d/$2" -a -x "$d/$2"
then
IFS=$oldIFS
echo "$d/$2"
return 0
fi
IFS=$oldIFS
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
# 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="$(findExec $PATH $1)"
if [ -z "$APP_PATH" ]
then
echo "$(fixlen "$1" 9)" "*** not installed ***"
case "$1" in
gcc* | $foamTestApp)
echo " CRITICAL ERROR"
criticalError="x${criticalError}"
esac
echo
return 1
fi
$foamTestApp)
VERSION=$($APP_NAME -case /dev/null 2>&1 \
| sed -ne 's/^.*Version: *\([^ ][^ ]*\).*/\1/p')
VERSION=$($APP_NAME --version /dev/null 2>&1 \
| sed -ne 's/flex \([0-9][0-9.]*\).*/\1/p')
VERSION=$($APP_NAME -v 2>&1 \
| sed -ne 's/^gcc version \([0-9][0-9.]*\).*/\1/p')
if ! vercmp_3 "$MIN_VERSION_GCC" "$VERSION"
then
case "$APP_NAME" in
gcc*)
SHORT_NAME=gcc
;;
g++*)
SHORT_NAME=g++
;;
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 ""
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
;;
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" 9) $(fixlen "$VERSION" 10)"
echo "WARNING: Conflicting installations:"
echo " OpenFOAM settings : $APP_SPEC"
echo " current path : $APP_PATH"
gcc | $foamTestApp)
echo " CRITICAL ERROR"
criticalError="x${criticalError}"
checkOpenFOAMEnvironment()
{
[ -d "$WM_PROJECT_INST_DIR" ] && \
[ -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"
echo " for information on setting-up the OpenFOAM environment."
echo "$(fixlen OpenFOAM: $WIDTH) ${WM_PROJECT_DIR##*/}"
echo "$(fixlen ThirdParty: $WIDTH) ${WM_THIRD_PARTY_DIR##*/}"
checkUserShell()
{
echo "$(fixlen Shell: $WIDTH) ${SHELL##*/}"
case $SHELL in
*/csh | */tcsh | */bash | */ksh)
;;
*)
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
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
checkOS()
{
case "$OSTYPE" in
Linux | LinuxAMD64 | SunOS )
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
;;
esac
}
#==============================================================================
# MAIN SCRIPT
#==============================================================================
#
echo "Executing $0:"
#------------------------------------------------------------------------------
hline
checkOpenFOAMEnvironment
checkUserShell
checkHostName
checkOS
hline
#------------------------------------------------------------------------------
heading "Main OpenFOAM env variables :"
COL1=$(fixlen EnvironmentVariable 21)
COL2=$(fixlen FileOrDirectory 40)
COL3="Valid"
COL4="Path"
COL5="Crit"
echo "$COL1 $COL2 $COL3 $COL5"
reportEnv '$WM_PROJECT_INST_DIR' noPath yes
reportEnv '$WM_PROJECT_USER_DIR' noPath no
reportEnv '$WM_THIRD_PARTY_DIR' noPath yes
hline
#------------------------------------------------------------------------------
heading "OpenFOAM env variables in PATH :"
echo "$COL1 $COL2 $COL3 $COL4 $COL5"
reportEnv '$WM_PROJECT_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 "OpenFOAM env variables in LD_LIBRARY_PATH :"
echo "$COL1 $COL2 $COL3 $COL4 $COL5"
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"
echo "$(fixlen Software 9) $(fixlen Version 10) $(fixlen Location 10)"
reportExecutable "$WM_CC"
reportExecutable "$WM_CXX"
if [ "$OSTYPE" = Linux ]
then
reportExecutable tar
else
reportExecutable $foamTestApp "$FOAM_APPBIN/$foamTestApp"
hline
#------------------------------------------------------------------------------
if [ "${#fatalError}" -gt 0 ]
then
echo "The system test evoked ${#fatalError} fatal error(s)."
echo "Base configuration ok."
fi
if [ "${#criticalError}" -gt 0 ]
then
echo "The foam installation contains ${#criticalError} critical error(s)."
else
echo "Critical systems ok."
fi
if [ "${#criticalError}" -gt 0 ] || [ "${#fatalError}" -gt 0 ]
then
echo
echo "Review the output for warning messages and consult"
echo "the installation guide for troubleshooting."
echo
echo Done
echo
#------------------------------------------------------------------------------