Skip to content
Snippets Groups Projects
functions 6.64 KiB
Newer Older
#----------------------------------*-sh-*--------------------------------------
# =========                 |
# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
#  \\    /   O peration     |
#   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
#    \\/     M anipulation  | Copyright (C) 2017-2018 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
#     This file is part of OpenFOAM, licensed under GNU General Public License
#     <http://www.gnu.org/licenses/>.
#
# File
#     etc/config.sh/functions
#     - sourced by OpenFOAM-*/etc/bashrc
#     Shell functions and variables used when sourcing the OpenFOAM environment
#
#     Some functionality mirrored by bin/tools/lib-dir
#
#------------------------------------------------------------------------------

if [ -z "$WM_SHELL_FUNCTIONS" ]
    # Not previously loaded/defined - define now
    # Temporary environment variable to track loading/unloading of functions
    WM_SHELL_FUNCTIONS=loaded
    # Cleaning environment variables
    foamClean="$WM_PROJECT_DIR/bin/foamCleanPath"

    # Cleaning environment variables
    unset -f _foamClean 2>/dev/null
         eval "$($foamClean -sh-env=$foamVar_name $@)"
         unset "foamVar_name"
    # Source an etc file, possibly with some verbosity
    # - use eval to avoid intermediate variables (ksh doesn't have 'local')
    unset -f _foamEtc 2>/dev/null
    if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ]
    then
        _foamEtc()
        {
            eval "$($WM_PROJECT_DIR/bin/foamEtcFile -sh-verbose ${FOAM_CONFIG_NOUSER:+-mode=o} $@)";
        }
    else
        _foamEtc()
        {
            eval "$($WM_PROJECT_DIR/bin/foamEtcFile -sh ${FOAM_CONFIG_NOUSER:+-mode=o} $@)";
        }
    fi

    unset -f _foamAddPath 2>/dev/null
        [ -n "$1" ] && export PATH="$1:$PATH"
    unset -f _foamAddMan 2>/dev/null
        [ -n "$1" ] && export MANPATH="$1:$MANPATH"
    unset -f _foamAddLib 2>/dev/null
        [ -n "$1" ] && export LD_LIBRARY_PATH="$1:$LD_LIBRARY_PATH"
    # Prepend to LD_LIBRARY_PATH with additional checking
    # $1 = base directory for 'lib' or 'lib64'
    # $2 = fallback libname ('lib' or 'lib64')
    #
    # 0) Skip entirely if directory ends in "-none" or "-system".
    #    These special cases (disabled, system directories) should not require
    #    adjustment of LD_LIBRARY_PATH
    # 1) Check for dir/lib64 and dir/lib
    # 2) Use fallback if the previous failed
    #
    # Return 0 on success
    unset -f _foamAddLibAuto 2>/dev/null
        # Note ksh does not have 'local' thus these ugly variable names
        foamVar_prefix="$1"
        foamVar_end="${1##*-}"

        # Do not add (none) or a system directory
        if [ -z "$foamVar_prefix" -o "$foamVar_end" = none -o "$foamVar_end" = system ]
        then
            unset foamVar_prefix foamVar_end
            return 1
        elif [ -d "$foamVar_prefix" ]
        then
            for foamVar_end in lib$WM_COMPILER_LIB_ARCH lib
            do
                if [ -d "$foamVar_prefix/$foamVar_end" ]
                then
                    export LD_LIBRARY_PATH="$foamVar_prefix/$foamVar_end:$LD_LIBRARY_PATH"
                    unset foamVar_prefix foamVar_end
                    return 0
                fi
            done
        fi

        # Use fallback. Add without checking existence of the directory
        foamVar_end=$2
        if [ -n "$foamVar_end" ]
        then
            case "$foamVar_end" in
            /*)     # An absolute path
                export LD_LIBRARY_PATH="$foamVar_end:$LD_LIBRARY_PATH"
                export LD_LIBRARY_PATH="$foamVar_prefix/$foamVar_end:$LD_LIBRARY_PATH"
                ;;
            esac
            unset foamVar_prefix foamVar_end
            return 0
        fi

        unset foamVar_prefix foamVar_end
        return 1    # Nothing set
    # Special treatment for Darwin
    # - DYLD_LIBRARY_PATH instead of LD_LIBRARY_PATH
    if [ "$(uname -s 2>/dev/null)" = Darwin ]
    then
        unset -f _foamAddLib _foamAddLibAuto 2>/dev/null

        # Prepend DYLD_LIBRARY_PATH
        _foamAddLib()
        {
            [ -n "$1" ] && export DYLD_LIBRARY_PATH="$1:$DYLD_LIBRARY_PATH"
        }

        # Prepend to DYLD_LIBRARY_PATH with additional checking
        # - use lib-dir script instead of rewriting
        _foamAddLibAuto()
        {
            eval "$($WM_PROJECT_DIR/bin/tools/lib-dir -sh $@)";
        }
    fi


    # Evaluate command-line parameters
    unset -f _foamEval 2>/dev/null
                # Stray option (not meant for us here) -> get out
                [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ] \
                    && echo "unset ${1%=}" 1>&2
                eval "unset ${1%=}"
                ;;
            *=*)
                # name=value  -> export name=value
                [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ] \
                    && echo "export $i" 1>&2
                eval "export $i"
                    [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ] \
                        && echo "Using: $i" 1>&2
                    . "$i"
                    _foamEtc -silent "$i"

    #--------------------------------------------------------------------------
    # Avoid any ThirdParty settings that may have 'leaked' into the environment

    unset MPI_ARCH_PATH
    unset ADIOS_ARCH_PATH
    unset ADIOS1_ARCH_PATH
    unset ADIOS2_ARCH_PATH
    unset BOOST_ARCH_PATH
    unset CCMIO_ARCH_PATH
    unset CGAL_ARCH_PATH
    unset FFTW_ARCH_PATH
    unset GPERFTOOLS_ARCH_PATH
    unset GMP_ARCH_PATH
    unset MPFR_ARCH_PATH
    unset MESA_ARCH_PATH
    unset METIS_ARCH_PATH
    unset SCOTCH_ARCH_PATH

    # Was previously loaded/defined - now unset
    unset -f _foamAddPath _foamAddMan _foamAddLib _foamAddLibAuto 2>/dev/null
    unset -f _foamClean _foamEtc _foamEval 2>/dev/null
    unset foamClean
    unset WM_SHELL_FUNCTIONS

#------------------------------------------------------------------------------