blob: 16223007f9e981b3a350fe006f367038ae86756c (
plain)
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
|
cmake_minimum_required(VERSION 3.19)
include(.cmake.conf)
include(ExternalProject)
include(cmake/Functions.cmake)
project(QtWebEngineRepoSuperBuild
VERSION "${QT_REPO_MODULE_VERSION}"
DESCRIPTION "Qt WebEngine Libraries"
HOMEPAGE_URL "https://qt.io/"
LANGUAGES CXX C
)
option(FORCE_TEST_RUN "Forces test run after compilation" FALSE)
find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
# coin configures 'just' for test build
if(QT_BUILD_STANDALONE_TESTS)
qt_build_repo()
return()
endif()
set(installDir ${CMAKE_CURRENT_BINARY_DIR}/install)
### FEATURES
qt_build_repo_begin()
qt_feature_module_begin(ONLY_EVALUATE_FEATURES)
# Enable printing of feature summary by forcing qt_configure_record_command
# to work in spite of ONLY_EVALUATE_FEATURES.
set(__QtFeature_only_evaluate_features OFF)
include(configure.cmake)
include(src/core/api/configure.cmake)
qt_feature_module_end(ONLY_EVALUATE_FEATURES)
if(NOT ${webEngineSupport})
add_custom_target(WebEngineErrorMessage ALL
${CMAKE_COMMAND} -E cmake_echo_color --red "QtWebEngine will not be built: ${webEngineError}"
COMMENT "Check QtWebEngine support")
message("-- Support check for QtWebEngine failed: ${webEngineError}")
set(QT_FEATURE_qtwebengine_build OFF CACHE BOOL "Build QtWebEngine" FORCE)
endif()
if(NOT ${pdfSupport})
add_custom_target(PdfErrorMessage ALL
${CMAKE_COMMAND} -E cmake_echo_color --red "QtPdf will not be built: ${pdfError}"
COMMENT "Check QtPdf support")
message("-- Support check for QtPdf failed: ${pdfError}")
set(QT_FEATURE_qtpdf_build OFF CACHE BOOL "Build QtPdf" FORCE)
endif()
if(NOT QT_FEATURE_qtwebengine_build AND NOT QT_FEATURE_qtpdf_build)
# coin missing artifacts workaround
install(FILES coin-bug-707 DESTINATION ${INSTALL_DATADIR})
return()
endif()
add_subdirectory(src/core/api)
add_subdirectory(src/core/tools)
add_subdirectory(src/process)
add_subdirectory(src/webenginewidgets)
add_subdirectory(src/webenginequick)
qt_build_repo_end()
### NINJA
if(NOT Ninja_FOUND)
externalproject_add(ninja
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/ninja
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/ninja
INSTALL_DIR ${installDir}
PREFIX ninja
USES_TERMINAL_BUILD ON
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DCMAKE_PREFIX_PATH:PATH=<INSTALL_DIR>
)
endif()
### GN
if(NOT Gn_FOUND)
externalproject_add(gn
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src/gn
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/gn
INSTALL_DIR ${installDir}
PREFIX gn
USES_TERMINAL_BUILD ON
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DCMAKE_PREFIX_PATH:PATH=<INSTALL_DIR>
-DWEBENGINE_ROOT_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR}
)
endif()
### LIBS
# on windows source path can be specified without hard drive letter,
# however we need that for gn use REALPATH
get_filename_component(WEBENGINE_ROOT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" REALPATH)
get_qt_features(featureList webengine)
get_qt_features(featureList qtwebengine)
if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/qtbase/lib/cmake/Qt6/qt.toolchain.cmake")
list(APPEND libsCmakeArgs
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}"
)
endif()
list(TRANSFORM featureList PREPEND "-D")
list(APPEND libsCmakeArgs
"-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}"
"-DWEBENGINE_ROOT_BUILD_PATH=${CMAKE_CURRENT_BINARY_DIR}"
"-DWEBENGINE_ROOT_SOURCE_DIR=${WEBENGINE_ROOT_SOURCE_DIR}"
"-DWEBENGINE_REPO_BUILD=TRUE"
"${featureList}"
)
if(LINUX)
set(cmd "${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/src")
file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/build.sh CONTENT "ulimit -n 4096 && ${cmd}\n")
set(coinBug699 COMMAND bash build.sh)
else()
if ("${CMAKE_DEFAULT_CONFIGS}" STREQUAL "all")
set(coinBug699 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/src)
else()
set(coinBug699 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/src --config $<CONFIG>)
endif()
endif()
externalproject_add(libs
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/src
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/src
PREFIX libs
USES_TERMINAL_CONFIGURE ON
USES_TERMINAL_BUILD ON
BUILD_ALWAYS TRUE
CMAKE_ARGS ${libsCmakeArgs}
BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Starting $<CONFIG> build"
${coinBug699}
COMMAND ${CMAKE_COMMAND} -E echo "$<CONFIG> build complete"
# TODO: this is aworkaround for broken qt_lib_webengine*.pri files,
# coin does the in-source build and later calls qmake to build examples
# and this leftover file gets sucked instead of install or src/mkspecs,
# simply remove it, we need to implment a dry run in qt base to fix it.
COMMAND ${CMAKE_COMMAND} -E remove_directory ../mkspecs
)
# Ensure the libs project is reconfigured if the root project is reconfigured, so that the
# correct CMake and qmake support files are used when building examples, rather than
# using the incomplete support files created by the root project.
qt_internal_add_external_project_dependency_to_root_project(libs)
if(QT_BUILD_EXAMPLES AND BUILD_SHARED_LIBS)
externalproject_add(qtwebengine_examples
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/examples
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/examples
PREFIX examples
USES_TERMINAL_BUILD ON
BUILD_ALWAYS TRUE
CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
"${featureList}"
)
externalproject_add_stepdependencies(qtwebengine_examples install libs)
endif()
if(FORCE_TEST_RUN OR QT_BUILD_TESTS)
find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS QuickTest Test)
unset(testRunCommand)
if(FORCE_TEST_RUN)
set(testRunCommand TEST_COMMAND ctest)
endif()
externalproject_add(qtwebengine_tests
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/tests
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/tests
PREFIX tests
USES_TERMINAL_BUILD ON
USES_TERMINAL_TEST ON
BUILD_ALWAYS TRUE
CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
"${featureList}"
INSTALL_COMMAND ""
${testRunCommand}
)
externalproject_add_stepdependencies(qtwebengine_tests install libs)
if(QT_BUILD_EXAMPLES AND BUILD_SHARED_LIBS)
externalproject_add_stepdependencies(qtwebengine_tests install qtwebengine_examples)
endif()
endif()
if(NOT Gn_FOUND)
externalproject_add_stepdependencies(libs install gn)
endif()
if(NOT Ninja_FOUND)
externalproject_add_stepdependencies(gn install ninja)
endif()
if(NOT QT_FEATURE_framework)
# install resources (again), coin calls install with DESTDIR
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/translations/qtwebengine_locales
DESTINATION ${CMAKE_INSTALL_PREFIX}/translations
)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/resources
DESTINATION ${CMAKE_INSTALL_PREFIX}
)
endif()
|