Skip to content
Snippets Groups Projects
cmakeFunctions 3.79 KiB
Newer Older
  • Learn to ignore specific revisions
  • #----------------------------------*-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}"
    }
    
    
    
    #------------------------------------------------------------------------------