#----------------------------------*-sh-*--------------------------------------
# =========                 |
# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
#  \\    /   O peration     |
#   \\  /    A nd           | www.openfoam.com
#    \\/     M anipulation  |
#------------------------------------------------------------------------------
#     Copyright (C) 2011-2016 OpenFOAM Foundation
#     Modified code Copyright (C) 2016-2019 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
#     This file is part of OpenFOAM, licensed under GNU General Public License
#     <http://www.gnu.org/licenses/>.
#
# File
#     config.csh/paraview
#     - sourced by OpenFOAM-*/etc/cshrc or via foamPV alias
#
# Description
#     Setup for PARAVIEW (partially cmake, qt too)
#
#     To disable use of the PV_PLUGIN_PATH:
#         ParaView_VERSION=none
#
#     For system-wide installations:
#         cmake_version=cmake-system
#         ParaView_QT=qt-system
#         ParaView_VERSION=system       [EXPERIMENTAL]
#
# Note
#     The following env. variables are required for building plugins:
#         ParaView_DIR
#         PV_PLUGIN_PATH
#     The OpenFOAM plugin must be the first in PV_PLUGIN_PATH and have
#     paraview-major.minor encoded in its name.
#
#     For central installations not located under ThirdParty, the environment
#     values must be set manually. For example,
#
#         setenv ParaView_DIR /opt/paraview/paraview-5.6.0
#         setenv PV_PLUGIN_PATH $FOAM_LIBBIN/paraview-5.6
#
#         setenv PATH $ParaView_DIR/bin:${PATH}
#         setenv LD_LIBRARY_PATH $ParaView_DIR/lib:$LD_LIBRARY_PATH
#         unsetenv ParaView_VERSION     # skip ThirdParty settings
#
#     In paraview-5.4 and earlier, the libraries were in the sub-directory:
#
#         setenv LD_LIBRARY_PATH $ParaView_DIR/lib/paraview-5.4:$LD_LIBRARY_PATH
#
#------------------------------------------------------------------------------
# USER EDITABLE PART: Changes made here may be lost with the next upgrade

set ParaView_VERSION=5.6.0
set ParaView_QT=qt-system
set cmake_version=cmake-system

# END OF (NORMAL) USER EDITABLE PART
#------------------------------------------------------------------------------
set pv_api=auto         # Either auto or pair of (major.minor) digits

if (! $?ParaView_DIR ) setenv ParaView_DIR
if (! $?WM_COMPILER_LIB_ARCH ) setenv WM_COMPILER_LIB_ARCH

# Compiler-specific location for ThirdParty installations
set archDir="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER"

# Clean PATH and LD_LIBRARY_PATH
eval `$WM_PROJECT_DIR/bin/foamCleanPath -csh-env=PATH "$ParaView_DIR $archDir/ParaView- $archDir/qt- $archDir/cmake-"`
eval `$WM_PROJECT_DIR/bin/foamCleanPath -csh-env=LD_LIBRARY_PATH "$ParaView_DIR $archDir/ParaView- $archDir/qt-"`

# Evaluate command-line parameters for ParaView and cmake
while ( $#argv > 0 )
    switch ($argv[1])
    case cmake*=*:
    case ParaView*=*:
        # name=value  -> set name=value
        eval "set $argv[1]"
        breaksw
    endsw
    shift
end

# ThirdParty cmake
set cmake="$archDir/$cmake_version"
if ( -r "$cmake/bin/cmake" ) then
    # _foamAddPath not available when foamPV alias is used
    setenv PATH "$cmake/bin:${PATH}"
endif

if ($?ParaView_VERSION) then
switch ("$ParaView_VERSION")
case "":
    # empty - do nothing
    setenv ParaView_DIR   # Defined but empty (used by foamPV alias)
    breaksw

case "none":
    unsetenv PV_PLUGIN_PATH
    setenv ParaView_DIR   # Defined but empty (used by foamPV alias)

    if ($?FOAM_VERBOSE && $?prompt) then
        echo "Using paraview (disabled)"
    endif
    breaksw

case "system":
    # Obtain major.minor from `paraview --version`
    set pv_api=`paraview --version | \
        sed -ne 's/^[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/p'`

    if ( "${%pv_api}" ) then
        setenv PV_PLUGIN_PATH "$FOAM_LIBBIN/paraview-$pv_api"
    else
        unsetenv ParaView_DIR PV_PLUGIN_PATH
    endif

    if ($?FOAM_VERBOSE && $?prompt) then
        echo "Using paraview (disabled)"
        if ( $?PV_PLUGIN_PATH ) then
            echo "Using paraview (system)"
            echo "    PV_PLUGIN_PATH       : $PV_PLUGIN_PATH"
        else
            echo "system paraview (not found)"
        endif
    endif
    breaksw

default:
    # ParaView_VERSION set and non-empty

    # Set API to correspond to VERSION
    # pv_api is <digits>.<digits> from ParaView_VERSION
    if (! $?pv_api ) set pv_api=auto
    switch ("$ParaView_VERSION")
    case "$pv_api".*:
        # API and VERSION appear to correspond
        breaksw

    case [0-9]*:
        # Extract API from VERSION
        set pv_api=`echo "$ParaView_VERSION" | \
            sed -ne 's/^[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/p'`
        breaksw
    endsw

    setenv ParaView_DIR "$archDir/ParaView-$ParaView_VERSION"

    # Set paths if binaries are present
    if ( -r "$ParaView_DIR" ) then
        # The OpenFOAM plugin directory must be the first in PV_PLUGIN_PATH
        # and have paraview-major.minor encoded in its name
        setenv PV_PLUGIN_PATH "$FOAM_LIBBIN/paraview-$pv_api"

        setenv PATH "${ParaView_DIR}/bin:${PATH}"
        set pvLibDir="${ParaView_DIR}/lib/paraview-$pv_api"
        #OBSOLETE? set pvPython=$ParaView_DIR/Utilities/VTKPythonWrapping

        #OBSOLETE? # Python libraries as required
        #OBSOLETE? if ( -r $pvPython ) then
        #OBSOLETE?     if ($?PYTHONPATH) then
        #OBSOLETE?         setenv PYTHONPATH ${PYTHONPATH}:${pvPython}:$pvLibDir
        #OBSOLETE?     else
        #OBSOLETE?         setenv PYTHONPATH ${pvPython}:${pvLibDir}
        #OBSOLETE?     endif
        #OBSOLETE? endif

        # QT libraries as required
        # Set Qt5_DIR to root directory.
        # Another possibility: "qtpaths --qt-version"

        set qtDir="$archDir/$ParaView_QT"
        if ( -d "$qtDir" ) then
            switch ("$ParaView_QT")
            case *-5*:
                setenv Qt5_DIR "$qtDir"
                breaksw
            endsw
            foreach qtLibDir ("$qtDir/lib$WM_COMPILER_LIB_ARCH" "$qtDir/lib")
                if ( -d "$qtLibDir" ) then
                    setenv LD_LIBRARY_PATH "${qtLibDir}:${LD_LIBRARY_PATH}"
                    break
                endif
            end
        endif

        # ParaView libraries
        # - 5.4 and earlier: lib/paraview-X.X
        # - 5.5 and later:   lib/
        switch ("$pv_api")
        case 5.[0-4]*:
            setenv LD_LIBRARY_PATH "${pvLibDir}:${LD_LIBRARY_PATH}"
            breaksw
        default:
            setenv LD_LIBRARY_PATH "${ParaView_DIR}/lib:${LD_LIBRARY_PATH}"
            breaksw
        endsw

        if ($?FOAM_VERBOSE && $?prompt) then
            echo "Using paraview"
            echo "    ParaView_DIR         : $ParaView_DIR"
            echo "    library dir          : $pvLibDir"
            echo "    PV_PLUGIN_PATH       : $PV_PLUGIN_PATH"
        endif
    else
        if ($?FOAM_VERBOSE && $?prompt) then
            echo "No paraview found"
            echo "    ParaView_DIR         : $ParaView_DIR"
        endif

        unsetenv PV_PLUGIN_PATH
        setenv ParaView_DIR   # Defined but empty (used by foamPV alias)
    endif
    breaksw
endsw
endif


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

unsetenv ParaView_VERSION ParaView_QT

unset archDir
unset cmake cmake_version
unset pv_api pvLibDir pvPython qtDir qtLibDir

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