openfoam/wmake/scripts/cmakeFunctions

159 lines
3.9 KiB
Bash

#----------------------------------*-sh-*--------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | www.openfoam.com
# \\/ M anipulation |
#------------------------------------------------------------------------------
# Copyright (C) 2017-2019 OpenCFD Ltd.
#------------------------------------------------------------------------------
# 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 wmake functions
# Export compiler information for cmake
export CC="$(wmake -show-c)"
export CXX="$(wmake -show-cxx)"
export CFLAGS="$(wmake -show-cflags)"
export CXXFLAGS="$(wmake -show-cxxflags)"
#------------------------------------------------------------------------------
#
# 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}"
}
#------------------------------------------------------------------------------