#----------------------------------*-sh-*-------------------------------------- # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2017-2019 OpenCFD Ltd. # \\/ M anipulation | #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, licensed under GNU General Public License # . # # Script # cmakeFunctions # # Description # Helper functions for CMake #------------------------------------------------------------------------------ . $WM_PROJECT_DIR/wmake/scripts/wmakeFunctions # Require some 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}" } #------------------------------------------------------------------------------