155 lines
3.8 KiB
Bash
155 lines
3.8 KiB
Bash
#----------------------------------*-sh-*--------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | Copyright (C) 2017-2018 OpenCFD Ltd.
|
|
# \\/ M anipulation |
|
|
#------------------------------------------------------------------------------
|
|
# License
|
|
# This file is part of OpenFOAM, licensed under GNU General Public License
|
|
# <http://www.gnu.org/licenses/>.
|
|
#
|
|
# Script
|
|
# cmakeFunctions
|
|
#
|
|
# Description
|
|
# Helper functions for CMake
|
|
#------------------------------------------------------------------------------
|
|
. $WM_PROJECT_DIR/wmake/scripts/wmakeFunctions # Require some wmake functions
|
|
|
|
# Ensure CMake gets the correct C/C++ compilers
|
|
[ -n "$WM_CC" ] && export CC="$WM_CC"
|
|
[ -n "$WM_CXX" ] && export CXX="$WM_CXX"
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
#
|
|
# Check sentinel file(s) to handle paraview / vtk version changes
|
|
#
|
|
sameDependency()
|
|
{
|
|
local depend="$1"
|
|
local sourceDir="$2"
|
|
local objectsDir sentinel prev
|
|
|
|
# Where generated files are stored
|
|
objectsDir=$(findObjectDir "$sourceDir") || exit 1 # Fatal
|
|
sentinel="$objectsDir/ThirdParty"
|
|
|
|
echo "$sentinel"
|
|
|
|
if read -r prev 2>/dev/null < $sentinel
|
|
then
|
|
if [ "$prev" = "$depend" ]
|
|
then
|
|
return 0
|
|
else
|
|
echo "${depend%=*} changed between builds" 1>&2
|
|
return 1
|
|
fi
|
|
elif [ -f "$objectsDir/CMakeCache.txt" ]
|
|
then
|
|
echo "previous build was incomplete" 1>&2
|
|
return 1
|
|
else
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
|
|
# CMake with output suppressed according to WM_QUIET
|
|
_cmake()
|
|
{
|
|
echo "cmake..."
|
|
if [ -n "$WM_QUIET" ]
|
|
then
|
|
cmake -DCMAKE_RULE_MESSAGES=OFF $@ >/dev/null
|
|
else
|
|
cmake $@
|
|
fi
|
|
}
|
|
|
|
|
|
# CMake into objectsDir with external dependency
|
|
# - use sentinel file(s) to handle paraview/vtk version changes
|
|
#
|
|
# 1 - depend
|
|
# 2 - sourceDir
|
|
# 3... optional cmake defines
|
|
#
|
|
cmakeVersioned()
|
|
{
|
|
local depend="$1"
|
|
local sourceDir="$2"
|
|
shift 2
|
|
local objectsDir sentinel
|
|
|
|
# Where generated files are stored
|
|
objectsDir=$(findObjectDir "$sourceDir") || exit 1 # Fatal
|
|
|
|
# Version changed
|
|
sentinel=$(sameDependency "$depend" "$sourceDir") || \
|
|
rm -rf "$objectsDir" > /dev/null 2>&1
|
|
|
|
mkdir -p "$objectsDir" \
|
|
&& (cd "$objectsDir" && _cmake "$@" "$sourceDir" && make) \
|
|
&& echo "$depend" >| "${sentinel:-/dev/null}"
|
|
}
|
|
|
|
|
|
# CMake into objectsDir with external dependency
|
|
#
|
|
# 1 - depend
|
|
# 2 - sourceDir
|
|
# 3... optional cmake defines
|
|
#
|
|
cmakeVersionedInstall()
|
|
{
|
|
local depend="$1"
|
|
local sourceDir="$2"
|
|
shift 2
|
|
local objectsDir sentinel
|
|
|
|
# Where generated files are stored
|
|
objectsDir=$(findObjectDir "$sourceDir") || exit 1 # Fatal
|
|
|
|
# Version changed
|
|
sentinel=$(sameDependency "$depend" "$sourceDir") || \
|
|
rm -rf "$objectsDir" > /dev/null 2>&1
|
|
|
|
mkdir -p "$objectsDir" \
|
|
&& (cd "$objectsDir" && _cmake "$@" "$sourceDir" && make install) \
|
|
&& echo "$depend" >| "${sentinel:-/dev/null}"
|
|
}
|
|
|
|
|
|
# wmake with tracking of external dependency as per cmakeVersioned
|
|
# - use sentinel file(s) to handle paraview/vtk version changes
|
|
#
|
|
# 1 - depend
|
|
# 2 - sourceDir
|
|
# 3... wmake arguments
|
|
#
|
|
wmakeVersioned()
|
|
{
|
|
local depend="$1"
|
|
local sourceDir="$2"
|
|
shift 2
|
|
local objectsDir sentinel
|
|
|
|
# Where generated files are stored
|
|
objectsDir=$(findObjectDir "$sourceDir") || exit 1 # Fatal
|
|
|
|
# Version changed
|
|
sentinel=$(sameDependency "$depend" "$sourceDir") || \
|
|
rm -rf "$objectsDir" > /dev/null 2>&1
|
|
|
|
mkdir -p "$objectsDir" \
|
|
&& wmake "$@" \
|
|
&& echo "$depend" >| "${sentinel:-/dev/null}"
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------------
|