openfoam/wmake/scripts/paraviewFunctions
Mark Olesen fcf4c5fb22 ENH: wmake have_* script changes
- use local 'prefix' variable for easier override and more consistency
2019-01-10 20:14:46 +01:00

204 lines
5.4 KiB
Bash

#----------------------------------*-sh-*--------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2018 OpenCFD Ltd.
# \\/ M anipulation |
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, licensed under GNU General Public License
# <http://www.gnu.org/licenses/>.
#
# Script
# paraviewFunctions
#
# Description
# Helper functions for CMake with ParaView.
# Setup of variables for creating ParaView plugins
#
# Requires
# ParaView_DIR (unless system)
# PV_PLUGIN_PATH
#
# Provides Functions
# have_pvplugin_support, no_paraview, echo_paraview
# cmakeVtk, cmakePv
#
# Variables on success
# HAVE_PVPLUGIN_SUPPORT
# FOAM_PV_PLUGIN_LIBBIN
# PARAVIEW_API - the paraview major/minor numbers (eg 5.6)
# PARAVIEW_INC_DIR
#
# Note
# The OpenFOAM plugin must be the first in PV_PLUGIN_PATH and have
# paraview-major.minor encoded in its name.
#
#------------------------------------------------------------------------------
. $WM_PROJECT_DIR/wmake/scripts/sysFunctions # General system functions
. $WM_PROJECT_DIR/wmake/scripts/cmakeFunctions # Require cmake functions
#------------------------------------------------------------------------------
# Reset variables
no_paraview()
{
unset HAVE_PVPLUGIN_SUPPORT FOAM_PV_PLUGIN_LIBBIN
unset PARAVIEW_API PARAVIEW_INC_DIR
return 0
}
# Report
echo_paraview()
{
echo "paraview=${HAVE_PVPLUGIN_SUPPORT:-false}"
echo "root=$ParaView_DIR"
echo "include=$PARAVIEW_INC_DIR"
echo "plugin=$FOAM_PV_PLUGIN_LIBBIN"
echo "api=$PARAVIEW_API"
}
# CMake into objectsDir with VTK_DIR dependency
cmakeVtk()
{
cmakeVersioned "VTK_DIR=$VTK_DIR" "$1"
}
# CMake into objectsDir with ParaView_DIR dependency
cmakePv()
{
cmakeVersioned "ParaView_DIR=$ParaView_DIR" "$1"
}
#
# Build library - use sentinel file(s) to handle paraview version changes
#
wmakeLibPv()
{
local depend="ParaView_DIR=$ParaView_DIR"
local sentinel
for libName
do
sentinel=$(sameDependency "$depend" $libName) || \
wclean $libName
wmake $targetType $libName \
&& echo "$depend" > ${sentinel:-/dev/null}
done
}
# Test if a ParaView plugin can be built.
# On success, return 0 and export variables
# -> HAVE_PVPLUGIN_SUPPORT, FOAM_PV_PLUGIN_LIBBIN,
# PARAVIEW_API, PARAVIEW_INC_DIR
#
# There are several prerequisites for building plugins
#
have_pvplugin_support()
{
local header settings warn pv_api installDir binDir includeDir targetDir
warn="==> skip paraview-plugin"
# Trivial check
command -v cmake > /dev/null 2>&1 || {
echo "$warn (no cmake)"
return 1
}
# The OpenFOAM plugin must be the first in PV_PLUGIN_PATH
# and must have the paraview major+minor version encoded in its name!
# Eg, PV_PLUGIN_PATH="$FOAM_LIBBIN/paraview-5.5"
# Get the first entry from PV_PLUGIN_PATH=dir1;dir2;...
targetDir="${PV_PLUGIN_PATH##;}"
targetDir="${targetDir%%;*}"
# Extract the paraview major+minor version from the directory name
# From /path/paraview-5.6 -> 5.6
pv_api=$(echo "${targetDir##*/}" | \
sed -n -e 's/^[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/p')
[ -n "$targetDir" ] || {
echo "$warn (could determine target)"
echo " PV_PLUGIN_PATH=${PV_PLUGIN_PATH:-???}"
return 1
}
[ -n "$pv_api" ] || {
echo "$warn (could determine major.minor version)"
return 1
}
# Header/library names
header="pqServerManagerModel.h"
if [ -n "$ParaView_DIR" ]
then
# ParaView_DIR defined. Look for include/
header=$(findFirstFile \
"$ParaView_DIR/include/paraview-$pv_api/$header" \
"$ParaView_DIR/include/paraview/$header"
)
else
# No ParaView_DIR defined
# - use location of 'paraview' to guess an equivalent ParaView_DIR
# - assume we can use paraview-config
binDir="$(command -v paraview 2>/dev/null)"
binDir="${binDir%/*}" # Eg, /usr/bin/paraview -> /usr/bin
installDir="${binDir%/*}" # Eg, /usr/bin -> /usr
case "$installDir" in
(/*) # An absolute path
includeDir="$installDir/include" # Eg, /usr -> /usr/include
;;
esac
header=$(findFirstFile \
"$(paraview-config --include 2>/dev/null |sed -ne 's/^ *-I//p')/$header"\
"${includeDir:+$includeDir/paraview-$pv_api/$header}" \
"${includeDir:+$includeDir/paraview/$header}" \
/usr/local/include/"paraview-$pv_api/$header" \
/usr/local/include/paraview/"$header" \
/usr/include/"paraview-$pv_api/$header" \
/usr/include/paraview/"$header" \
)
fi
# Header found?
[ -n "$header" ] || {
[ -n "$warn" ] && echo "$warn (no header)"
return 2
}
# OK
export HAVE_PVPLUGIN_SUPPORT=true
export FOAM_PV_PLUGIN_LIBBIN="$targetDir"
export PARAVIEW_API="$pv_api"
export PARAVIEW_INC_DIR="${header%/*}" # Basename
return 0 # success
}
# Force reset of old variables
no_paraview
# Testing
if [ "$1" = "-test" ]
then
have_pvplugin_support
echo_paraview
fi
#------------------------------------------------------------------------------