Skip to content
Snippets Groups Projects
foamInstallationTest 11.6 KiB
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.
#
#------------------------------------------------------------------------------

# Base settings
MIN_VERSION_GCC=4.8.0
# General
WIDTH=20

# System variables
HOST=$(uname -n)
OSTYPE=$(uname -s)
# OpenFOAM application to test for the Version
# Global variables
unset fatalError criticalError

#==============================================================================
#                             HELPER FUNCTIONS
#==============================================================================
    echo "-------------------------------------------------------------------------------"
}

    LDIFF=$(expr ${#WORD} - ${2:-4})

    if [ $LDIFF -le 1 ]
    then
        while [ $LDIFF -lt 0 ]
        do
            LDIFF=$(expr $LDIFF + 1)
        LDIFF=$(expr $LDIFF + 4)
        WORD=$(echo "$WORD" | cut -c${LDIFF}-)
    eval EXP_ENV="$1"
    eval EXP_PATH="$2"
    CRIT="$3"
    EXISTS=" no  "
    ON_PATH=""

    if [ -n "$EXP_ENV" ]
        if test -e "$EXP_ENV"
        then
            EXISTS=" yes "
            if [ "$2" != noPath ]
                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"
Andrew Heather's avatar
Andrew Heather committed

    if [ "$EXISTS" = no ] || [ "$ON_PATH" = no ]
    then
    if [ "$3" = yes ] && [ "$ERROR" = true ]
    then
        criticalError="x${criticalError}"
        echo "WARNING: CRITICAL ERROR"
        echo
    fi
}

        if test ! -d "$d/$2" -a -x "$d/$2"
        then
            IFS=$oldIFS
            echo "$d/$2"
            return 0
        fi
# 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
}


    APP_PATH="$(findExec $PATH $1)"
    if [ -z "$APP_PATH" ]
        echo "$(fixlen "$1" 9)" "*** not installed ***"
            criticalError="x${criticalError}"
    case "$APP_NAME" in
        VERSION=$($APP_NAME -case /dev/null 2>&1 \
            | sed -ne 's/^.*Version: *\([^ ][^ ]*\).*/\1/p')
andy's avatar
andy committed
    flex)
        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"
andy's avatar
andy committed
            echo "    User version    : $VERSION"
            echo "    Minimum required: $MIN_VERSION_GCC"
            fatalError="x${fatalError}"
        VERSION=$($APP_PATH --version | head -1)
        VERSION=$($APP_PATH --version | head -1 | cut -d" " -f4)
            VERSION=$($APP_NAME --version 2>&1 | grep gzip | cut -d" " -f2)
            VERSION=$($APP_NAME --version | head -1 | cut -d" " -f2)
    if [ "$APP_PATH" = "$APP_SPEC" ] || [ -z "$APP_SPEC" ]
        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"
        case "$APP_NAME" in
        gcc | $foamTestApp)
            echo "          CRITICAL ERROR"
            criticalError="x${criticalError}"
    [ -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##*/}"
    echo "$(fixlen Shell: $WIDTH) ${SHELL##*/}"
    */csh | */tcsh | */bash | */ksh)
        ;;
    *)
        echo "FATAL ERROR: Cannot identify the shell you are running."
andy's avatar
andy committed
        echo "             OpenFOAM ${WM_PROJECT_VERSION} is compatible with "
        echo "             csh, tcsh, ksh and bash."
        echo
        fatalError="x${fatalError}"
    echo "$(fixlen Host: $WIDTH) $HOST"
    if [ -z "$HOST" ]
        echo "FATAL ERROR: Cannot stat hostname."
        echo "             Contact your system administrator, "
andy's avatar
andy committed
        echo "             OpenFOAM ${WM_PROJECT_VERSION} needs a valid "
        echo "             hostname to function."
        echo
        fatalError="x${fatalError}"
        echo "$(fixlen OS: $WIDTH) $OSTYPE version $(uname -r)"
        echo "FATAL ERROR: Incompatible operating system \"$OSTYPE\"."
andy's avatar
andy committed
        echo "             OpenFOAM ${FWM_PROJECT_VERSION} is currently "
        echo "             available for Linux and SunOS only."
        echo
        fatalError="x${fatalError}"
}


#==============================================================================
#                                MAIN SCRIPT
#==============================================================================
#
echo "Executing $0:"

#------------------------------------------------------------------------------
heading "Basic setup :"
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)"
andy's avatar
andy committed
reportExecutable flex
reportExecutable "$WM_CC"
reportExecutable "$WM_CXX"
reportExecutable gzip
    reportExecutable tar
else
Andrew Heather's avatar
Andrew Heather committed
    reportExecutable gtar
reportExecutable $foamTestApp  "$FOAM_APPBIN/$foamTestApp"
hline

#------------------------------------------------------------------------------
henry's avatar
henry committed
heading "Summary"
if [ "${#fatalError}" -gt 0 ]
    echo "The system test evoked ${#fatalError} fatal error(s)."
Andrew Heather's avatar
Andrew Heather committed
else
    echo "Base configuration ok."
fi
if [ "${#criticalError}" -gt 0 ]
    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."
#------------------------------------------------------------------------------