#----------------------------------*-sh-*-------------------------------------- # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | www.openfoam.com # \\/ M anipulation | #------------------------------------------------------------------------------ # Copyright (C) 2011-2016 OpenFOAM Foundation # Copyright (C) 2017-2018 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License # . # # File # etc/config.sh/functions # - sourced by OpenFOAM-*/etc/bashrc # # Description # Shell functions and variables used when sourcing the OpenFOAM environment # # Some functionality mirrored by bin/tools/lib-dir # #------------------------------------------------------------------------------ if [ -z "$WM_SHELL_FUNCTIONS" ] then # 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 _foamClean() { foamVar_name="$1" shift eval "$($foamClean -sh-env=$foamVar_name $@)" unset "foamVar_name" } # Echo values to stderr when FOAM_VERBOSE is on, no-op otherwise unset -f _foamEcho 2>/dev/null if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ] then _foamEcho() { echo "$@" 1>&2; } else _foamEcho() { true; } fi # 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 # Prepend PATH unset -f _foamAddPath 2>/dev/null _foamAddPath() { [ -n "$1" ] && export PATH="$1:$PATH" } # Prepend MANPATH unset -f _foamAddMan 2>/dev/null _foamAddMan() { [ -n "$1" ] && export MANPATH="$1:$MANPATH" } # Prepend LD_LIBRARY_PATH unset -f _foamAddLib 2>/dev/null _foamAddLib() { [ -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 _foamAddLibAuto() { # 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" ] || [ "$foamVar_end" = none ] || [ "$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" ;; (*) # Relative to prefix 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 _foamEval() { for i do case "$i" in -*) # Stray option (not meant for us here) -> get out break ;; *=) # name= -> unset name [ -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" ;; *) # Filename: source it if [ -f "$i" ] then [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ] \ && echo "Using: $i" 1>&2 . "$i" else _foamEtc -silent "$i" fi ;; esac done } #-------------------------------------------------------------------------- # 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 else # Was previously loaded/defined - now unset unset -f _foamAddPath _foamAddMan _foamAddLib _foamAddLibAuto 2>/dev/null unset -f _foamClean _foamEcho _foamEtc _foamEval 2>/dev/null unset foamClean unset WM_SHELL_FUNCTIONS fi #------------------------------------------------------------------------------