File: cmakeFunctions

package info (click to toggle)
openfoam 1812%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 220,284 kB
  • sloc: cpp: 1,038,902; sh: 14,536; ansic: 8,240; lex: 657; xml: 387; python: 300; awk: 212; makefile: 94; sed: 88; csh: 3
file content (154 lines) | stat: -rw-r--r-- 3,881 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#----------------------------------*-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}"
}


#------------------------------------------------------------------------------