-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
231 lines (197 loc) · 7.91 KB
/
Copy pathCMakeLists.txt
File metadata and controls
231 lines (197 loc) · 7.91 KB
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
cmake_minimum_required(VERSION 3.16)
set(MIN_QT_VERSION 6.9.0)
include(.cmake.conf)
project(QtApplicationManager
VERSION "${QT_REPO_MODULE_VERSION}"
DESCRIPTION "QtApplicationManager Tools and Libraries"
HOMEPAGE_URL "https://qt.io/"
LANGUAGES CXX C
)
set(QT_NO_INTERNAL_COMPATIBILITY_FUNCTIONS TRUE)
add_compile_definitions(
"QT_ENABLE_STRICT_MODE_UP_TO=QT_VERSION_CHECK(6,11,0)"
"QT_NO_SINGLE_ARGUMENT_QHASH_OVERLOAD=1"
"QT_NO_QPAIR=1"
"QT_LEAN_HEADERS=1"
)
# populate the platform check variables
find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals)
if(NOT (ANDROID OR IOS OR LINUX OR MACOS OR (WIN32 AND NOT WINRT)))
if (QNX)
message(NOTICE "QNX is not officially supported - continuing anyway ...")
include(QtAppManHelpers)
qt_am_internal_check_qnx_version()
else()
message(NOTICE "Skipping the build as building is only supported on Windows, macOS, Linux, Android and iOS.")
return()
endif()
endif()
# find the all modules (Gui isn't really optional, but we have to deal with a no-gui CI configuration)
find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS Core Concurrent)
find_package(Qt6 ${PROJECT_VERSION} QUIET CONFIG OPTIONAL_COMPONENTS
Gui
Qml
Quick
QuickTest
DBus
WaylandClient
WaylandCompositor
QuickTest
Widgets
ZlibPrivate
DltLogging
HttpServer
)
if (${Qt6_VERSION} VERSION_LESS "${MIN_QT_VERSION}")
message(FATAL_ERROR "Qt ${MIN_QT_VERSION} or newer is required for building version ${PROJECT_VERSION} of the QtApplicationManager")
endif()
include(src/systemui-lib/Qt6AppManSystemUIPrivateMacros.cmake)
if(NOT QT_FEATURE_ssl)
message(NOTICE "Skipping the build as SSL support in Qt is not available")
return()
endif()
if(NOT TARGET Qt::Gui OR NOT TARGET Qt::Quick)
message(NOTICE "Skipping the build as QtGui and/or QtQuick are not available.")
return()
endif()
## COVERAGE ###########################################################
if(AM_COVERAGE)
if(NOT (LINUX AND GCC))
message(FATAL_ERROR "Coverage builds are only supported on Linux, using GCC.")
return()
endif()
set(QT_BUILD_TESTS ON)
set(QT_BUILD_TESTS_BY_DEFAULT ON)
add_compile_options(--coverage -fprofile-update=atomic)
add_link_options(--coverage)
add_compile_definitions(QT_AM_COVERAGE)
set(GCOV_EXCLUDE
'/usr/*'
'${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}/*'
'${CMAKE_CURRENT_LIST_DIR}/tests/*'
'${CMAKE_CURRENT_LIST_DIR}/examples/*'
'${CMAKE_CURRENT_LIST_DIR}/src/3rdparty/*'
'${CMAKE_CURRENT_LIST_DIR}/src/plugin-interfaces/*'
'moc_*'
'${CMAKE_CURRENT_BINARY_DIR}/*'
)
if(QT_SOURCE_TREE AND NOT DEFINED ENV{HOST_OS_COIN})
string(REGEX REPLACE "/qtbase$" "" qtSrcDir ${QT_SOURCE_TREE})
list(APPEND GCOV_EXCLUDE '${qtSrcDir}/*')
endif()
set(COVERAGE_DEPENDS all)
if(QT_WILL_INSTALL)
list(APPEND COVERAGE_DEPENDS tests/auto/install)
endif()
set(GCOV_OPTIONS
--rc branch_coverage=1
--rc check_data_consistency=0
--ignore-errors mismatch,mismatch
--ignore-errors unused,unused
--ignore-errors gcov,gcov
--filter branch,initializer,trivial
)
add_custom_target(check_coverage
COMMAND sh -c 'which lcov >/dev/null || { echo "The lcov tool is not available." && exit 2 \; }'
COMMAND sh -c 'which genhtml >/dev/null || { echo "The genhtml tool is not available." && exit 2 \; }'
COMMAND sh -c 'lcov --version | grep -q "^lcov: LCOV version 2\." || { echo "The lcov tool must be version 2." && exit 2 \; }'
COMMAND find . \\\( -name \"*.gcov-info\" -o -name \"*.gcda\" \\\) -print0 | xargs -0 rm -f
COMMAND echo
COMMAND echo "=== Initializing from compile time coverage data"
COMMAND echo
COMMAND lcov -keep-going -c -i -d . --rc geninfo_auto_base=1 ${GCOV_OPTIONS} -o "${CMAKE_CURRENT_BINARY_DIR}/base.gcov-info"
COMMAND echo
COMMAND echo "=== Running tests"
COMMAND echo
COMMAND ctest --test-dir tests/auto --repeat until-pass:3
COMMAND echo
COMMAND sh -c '[ x$$AM_SUDO_TESTS = x1 ] && { echo "=== Running sudo tests" \; } || { echo "=== Skipping sudo tests" \; }'
COMMAND echo
COMMAND sh -c '[ x$$AM_SUDO_TESTS = x1 ] && sudo ctest --test-dir tests/auto/sudo --repeat until-pass:3 || true'
COMMAND sh -c '[ x$$AM_SUDO_TESTS = x1 ] && sudo ctest --test-dir tests/auto/packagemanager --repeat until-pass:3 || true'
COMMAND echo
COMMAND echo "=== Collecting runtime coverage data from tests"
COMMAND echo
COMMAND lcov -keep-going -c -d . --rc geninfo_auto_base=1 ${GCOV_OPTIONS} -o "${CMAKE_CURRENT_BINARY_DIR}/test.gcov-info"
COMMAND echo
COMMAND echo "=== Consolidating all coverage data"
COMMAND echo
COMMAND lcov -keep-going ${GCOV_OPTIONS} -o "${CMAKE_CURRENT_BINARY_DIR}/temp.gcov-info" `find . -name \"*.gcov-info\" | xargs -n1 echo -a`
COMMAND echo
COMMAND echo "=== Removing excluded files from coverage data"
COMMAND echo
COMMAND lcov -keep-going ${GCOV_OPTIONS} -o "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.gcov-info" -r temp.gcov-info ${GCOV_EXCLUDE}
COMMAND echo
COMMAND echo "=== Removing temporary coverage data"
COMMAND echo
COMMAND rm -f base.gcov-info test.gcov-info temp.gcov-info
COMMAND echo
COMMAND echo "=== Generating coverage report"
COMMAND echo
COMMAND genhtml -o coverage-report -s -f -t "${PROJECT_NAME}" --legend --branch-coverage ${GCOV_OPTIONS} --demangle-cpp "c++filt" ${PROJECT_NAME}.gcov-info
COMMAND echo \"\\n\\nCoverage report is available at file://`pwd`/coverage-report/index.html\\n\"
DEPENDS ${COVERAGE_DEPENDS}
USES_TERMINAL
)
endif()
## SANITIZE ###########################################################
if (AM_SANITIZE)
if (MSVC)
set(ECM_ENABLE_SANITIZERS address)
else()
set(ECM_ENABLE_SANITIZERS address undefined)
endif()
include(3rdparty/extra-cmake-modules/modules/ECMEnableSanitizers)
endif()
## BUILD ##############################################################
qt_build_repo()
## DOCUMENTATION ######################################################
file(GLOB_RECURSE allDocFiles "doc/*.qdoc" "doc/*.png" "doc/*.qdocconf")
if(QT_BUILD_ONLINE_DOCS)
set(DOC_CONF "doc/online/qtapplicationmanager.qdocconf")
else()
set(DOC_CONF "doc/qtapplicationmanager.qdocconf")
endif()
add_custom_target(Documentation SOURCES
doc/QtApplicationManagerDoc
${allDocFiles}
)
qt_internal_add_docs(Documentation
${DOC_CONF}
)
add_custom_target("Other-Files" SOURCES
.cmake.conf
qt_cmdline.cmake
src/common-lib/qt_cmdline.cmake
src/package-lib/qt_cmdline.cmake
src/systemui-lib/qt_cmdline.cmake
src/common-lib/configure.cmake
src/plugin-interfaces/configure.cmake
cmake/FindWrapLibArchive.cmake
cmake/FindWrapLibYaml.cmake
cmake/QtAppManHelpers.cmake
cmake/QtAppManBuildConfig.cmake
cmake/QtAppManVersionDefines.cmake
dependencies.yaml
sync.profile
LICENSES/BSD-3-Clause.txt
LICENSES/GFDL-1.3-no-invariants-only.txt
LICENSES/GPL-3.0-only.txt
LICENSES/LicenseRef-Qt-Commercial.txt
LICENSES/Qt-GPL-exception-1.0.txt
util/bash/appman-prompt
util/bash/README
)
## QMAKE FEATURES #####################################################
if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILD_STANDALONE_EXAMPLES)
# Copy mkspecs for users preferring qmake builds
set(mkspecs_install_dir "${INSTALL_MKSPECSDIR}")
qt_path_join(mkspecs_install_dir ${QT_INSTALL_DIR} ${mkspecs_install_dir})
file(GLOB QMAKE_FEATURES
"qmake-features/*.prf"
)
qt_copy_or_install(
FILES "${QMAKE_FEATURES}"
DESTINATION "${mkspecs_install_dir}/features"
)
endif()