mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
- improve handling of changes in ParaView/VTK or cmake parameters (#1693) * adjust internals to support recording of an unlimited number of configuration parameters and use file `cmp` instead of trying to check strings ourselves. ENH: new wmake/scripts/wmake.cmake-args handler - additional handling of -prefix=... as CMAKE_INSTALL_PREFIX export. - in some contexts, can use instead of AllwmakeParseArguments
214 lines
5.2 KiB
Bash
214 lines
5.2 KiB
Bash
#----------------------------------*-sh-*--------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | www.openfoam.com
|
|
# \\/ M anipulation |
|
|
#------------------------------------------------------------------------------
|
|
# Copyright (C) 2017-2020 OpenCFD Ltd.
|
|
#------------------------------------------------------------------------------
|
|
# License
|
|
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
|
|
#
|
|
# Script
|
|
# cmakeFunctions
|
|
#
|
|
# Description
|
|
# Helper functions for CMake
|
|
#
|
|
# Environment
|
|
# Consider CMAKE_INSTALL_PREFIX as a reserved name, although it is not
|
|
# set/unset here.
|
|
#
|
|
# Files
|
|
# Uses etc/config.sh/cmake (if it exists) for the
|
|
# CMAKE_ARCH_PATH that may specify a possible cmake/bin directory.
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
. ${WM_PROJECT_DIR:?}/wmake/scripts/have_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)"
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
#
|
|
# Save build/configure parameter information (dependency) into sentinel file
|
|
#
|
|
# 1 - sentinelFile
|
|
# 2... build/configure parameters
|
|
#
|
|
storeDependency()
|
|
{
|
|
local sentinel="$1"
|
|
local depend
|
|
shift
|
|
|
|
if [ -n "$sentinel" ]
|
|
then
|
|
mkdir -p "$(dirname "$sentinel")"
|
|
|
|
echo '# Build/configure parameters' >| "$sentinel"
|
|
|
|
for depend
|
|
do
|
|
echo "-- $depend"
|
|
done >> "$sentinel"
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
|
|
#
|
|
# Check sentinel file(s) to handle changed build/configure parameters
|
|
# such as paraview / vtk version changes
|
|
#
|
|
# 1 - sourceDir
|
|
# 2... build/configure parameters
|
|
#
|
|
sameDependency()
|
|
{
|
|
local sourceDir="$1"
|
|
shift
|
|
local depend objectsDir
|
|
local compare=0
|
|
|
|
# Where generated files are stored
|
|
objectsDir=$(findObjectDir "$sourceDir") || exit 1 # Fatal
|
|
local sentinel="$objectsDir/ThirdParty"
|
|
|
|
if [ -f "$sentinel" ]
|
|
then
|
|
# Create an .update version
|
|
storeDependency "${sentinel}.update" $@
|
|
cmp "${sentinel}" "${sentinel}.update" >/dev/null 2>&1
|
|
compare=$?
|
|
|
|
if [ "$compare" -ne 0 ]
|
|
then
|
|
echo "build/configure parameters changed between builds" 1>&2
|
|
fi
|
|
|
|
else
|
|
# No sentinel file: First time, or failed compilation?
|
|
if [ -f "$objectsDir/CMakeCache.txt" ]
|
|
then
|
|
echo "previous build was incomplete" 1>&2
|
|
compare=1
|
|
fi
|
|
fi
|
|
|
|
echo "$sentinel"
|
|
return "$compare"
|
|
}
|
|
|
|
|
|
# Resolve the location of cmake (if needed) and call with output
|
|
# suppressed according to WM_QUIET
|
|
call_cmake()
|
|
{
|
|
if have_cmake
|
|
then
|
|
if [ -n "$WM_QUIET" ]
|
|
then
|
|
echo "cmake..."
|
|
"$CMAKE_EXE" -DCMAKE_RULE_MESSAGES=OFF $@ >/dev/null
|
|
else
|
|
echo "cmake $@"
|
|
"$CMAKE_EXE" $@
|
|
fi
|
|
else
|
|
return 1
|
|
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 "$sourceDir" "$depend" $@) || \
|
|
rm -rf "$objectsDir" 2>/dev/null
|
|
|
|
mkdir -p "$objectsDir" \
|
|
&& ( cd "$objectsDir" && call_cmake "$@" "$sourceDir" && \
|
|
make "-j${WM_NCOMPPROCS:-1}" ) \
|
|
&& storeDependency "$sentinel" "$depend" $@
|
|
}
|
|
|
|
|
|
# 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 "$sourceDir" "$depend" $@) || \
|
|
rm -rf "$objectsDir" 2>/dev/null
|
|
|
|
mkdir -p "$objectsDir" \
|
|
&& ( cd "$objectsDir" && call_cmake "$@" "$sourceDir" && \
|
|
make "-j${WM_NCOMPPROCS:-1}" install ) \
|
|
&& storeDependency "$sentinel" "$depend" $@
|
|
}
|
|
|
|
|
|
# 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 "$sourceDir" "$depend" $@) || \
|
|
rm -rf "$objectsDir" 2>/dev/null
|
|
|
|
mkdir -p "$objectsDir" \
|
|
&& wmake "$@" \
|
|
&& storeDependency "$sentinel" "$depend" $@
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------------
|