-
Notifications
You must be signed in to change notification settings - Fork 6.4k
/
portfile.cmake
533 lines (482 loc) · 23.2 KB
/
portfile.cmake
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
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
# Reminder for myself and everybody else:
# Qt cross module dependency information within the Qt respository is wrong and/or incomplete.
# Always check the toplevel CMakeLists.txt for the find_package call and search for linkage against the Qt:: targets
# Often enough certain (bigger) dependencies are only used to build examples and/or tests.
# As such getting the correct dependency information relevant for vcpkg requires a manual search/check
set(QT_IS_LATEST ON)
## All above goes into the qt_port_hashes in the future
include("${CMAKE_CURRENT_LIST_DIR}/cmake/qt_install_submodule.cmake")
set(${PORT}_PATCHES
allow_outside_prefix.patch
config_install.patch
fix_cmake_build.patch
harfbuzz.patch
fix_egl.patch
fix_egl_2.patch
installed_dir.patch
GLIB2-static.patch # alternative is to force pkg-config
clang-cl_source_location.patch
clang-cl_QGADGET_fix.diff
fix-host-aliasing.patch
fix_deploy_windows.patch
)
if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
list(APPEND ${PORT}_PATCHES env.patch)
endif()
list(APPEND ${PORT}_PATCHES
dont_force_cmakecache_latest.patch
)
if(VCPKG_TARGET_IS_WINDOWS AND NOT "doubleconversion" IN_LIST FEATURES)
message(FATAL_ERROR "${PORT} requires feature doubleconversion on windows!" )
endif()
if(VCPKG_TARGET_IS_LINUX)
message(WARNING "qtbase currently requires packages from the system package manager. "
"They can be installed on Ubuntu systems via sudo apt-get install "
"'^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev "
"libxkbcommon-x11-dev libegl1-mesa-dev.")
endif()
# Features can be found via searching for qt_feature in all configure.cmake files in the source:
# The files also contain information about the Platform for which it is searched
# Always use FEATURE_<feature> in vcpkg_cmake_configure
# (using QT_FEATURE_X overrides Qts condition check for the feature.)
# Theoretically there is a feature for every widget to enable/disable it but that is way to much for vcpkg
set(input_vars doubleconversion freetype harfbuzz libb2 jpeg libmd4c png sql-sqlite)
set(INPUT_OPTIONS)
foreach(_input IN LISTS input_vars)
if(_input MATCHES "(png|jpeg)" )
list(APPEND INPUT_OPTIONS -DINPUT_lib${_input}:STRING=)
elseif(_input MATCHES "(sql-sqlite)") # Not yet used by the cmake build
else()
list(APPEND INPUT_OPTIONS -DINPUT_${_input}:STRING=)
endif()
if("${_input}" IN_LIST FEATURES)
string(APPEND INPUT_OPTIONS system)
elseif(_input STREQUAL "libb2" AND NOT VCPKG_TARGET_IS_WINDOWS)
string(APPEND INPUT_OPTIONS system)
elseif(_input STREQUAL "libmd4c")
string(APPEND INPUT_OPTIONS qt) # libmd4c is not yet in VCPKG (but required by qtdeclarative)
else()
string(APPEND INPUT_OPTIONS no)
endif()
endforeach()
# General features:
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
FEATURES
"appstore-compliant" FEATURE_appstore_compliant
"zstd" FEATURE_zstd
"framework" FEATURE_framework
"concurrent" FEATURE_concurrent
"concurrent" FEATURE_future
"dbus" FEATURE_dbus
"gui" FEATURE_gui
"thread" FEATURE_thread
"network" FEATURE_network
"sql" FEATURE_sql
"widgets" FEATURE_widgets
#"xml" FEATURE_xml # Required to build moc
"testlib" FEATURE_testlib
"zstd" CMAKE_REQUIRE_FIND_PACKAGE_zstd
${require_features}
INVERTED_FEATURES
"zstd" CMAKE_DISABLE_FIND_PACKAGE_ZSTD
"dbus" CMAKE_DISABLE_FIND_PACKAGE_WrapDBus1
)
list(APPEND FEATURE_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_Libudev:BOOL=ON)
list(APPEND FEATURE_OPTIONS -DFEATURE_xml:BOOL=ON)
if("dbus" IN_LIST FEATURES AND VCPKG_TARGET_IS_LINUX)
list(APPEND FEATURE_OPTIONS -DINPUT_dbus=linked)
elseif("dbus" IN_LIST FEATURES)
list(APPEND FEATURE_OPTIONS -DINPUT_dbus=runtime)
else()
list(APPEND FEATURE_OPTIONS -DINPUT_dbus=no)
endif()
if(VCPKG_QT_NAMESPACE)
list(APPEND FEATURE_OPTIONS "-DQT_NAMESPACE:STRING=${VCPKG_QT_NAMESPACE}")
endif()
# Corelib features:
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_CORE_OPTIONS
FEATURES
"doubleconversion" FEATURE_doubleconversion
"glib" FEATURE_glib
"icu" FEATURE_icu
"pcre2" FEATURE_pcre2
#"icu" CMAKE_REQUIRE_FIND_PACKAGE_ICU
"glib" CMAKE_REQUIRE_FIND_PACKAGE_GLIB2
INVERTED_FEATURES
#"doubleconversion" CMAKE_DISABLE_FIND_PACKAGE_WrapDoubleConversion # Required
#"pcre2" CMAKE_DISABLE_FIND_PACKAGE_WrapSystemPCRE2 # Bug in qt cannot be deactivated
"icu" CMAKE_DISABLE_FIND_PACKAGE_ICU
"glib" CMAKE_DISABLE_FIND_PACKAGE_GLIB2
)
list(APPEND FEATURE_CORE_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_LTTngUST:BOOL=ON)
list(APPEND FEATURE_CORE_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_PPS:BOOL=ON)
list(APPEND FEATURE_CORE_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_Slog2:BOOL=ON)
list(APPEND FEATURE_CORE_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_Libsystemd:BOOL=ON)
list(APPEND FEATURE_CORE_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_WrapBacktrace:BOOL=ON)
#list(APPEND FEATURE_CORE_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_WrapAtomic:BOOL=ON) # Cannot be disabled on x64 platforms
#list(APPEND FEATURE_CORE_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_WrapRt:BOOL=ON) # Cannot be disabled on osx
# Network features:
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_NET_OPTIONS
FEATURES
"openssl" FEATURE_openssl
"brotli" FEATURE_brotli
"securetransport" FEATURE_securetransport
#"brotli" CMAKE_REQUIRE_FIND_PACKAGE_WrapBrotli
#"openssl" CMAKE_REQUIRE_FIND_PACKAGE_WrapOpenSSL
INVERTED_FEATURES
"brotli" CMAKE_DISABLE_FIND_PACKAGE_WrapBrotli
"openssl" CMAKE_DISABLE_FIND_PACKAGE_WrapOpenSSL
)
if("openssl" IN_LIST FEATURES)
list(APPEND FEATURE_NET_OPTIONS -DINPUT_openssl=linked)
else()
list(APPEND FEATURE_NET_OPTIONS -DINPUT_openssl=no)
endif()
list(APPEND FEATURE_NET_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_Libproxy:BOOL=ON)
list(APPEND FEATURE_NET_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_GSSAPI:BOOL=ON)
list(APPEND FEATURE_NET_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_WrapResolv:BOOL=ON)
# Gui features:
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_GUI_OPTIONS
FEATURES
"freetype" FEATURE_freetype # required on windows
"harfbuzz" FEATURE_harfbuzz
"fontconfig" FEATURE_fontconfig # NOT WINDOWS
"jpeg" FEATURE_jpeg
"png" FEATURE_png
"opengl" FEATURE_opengl
"xlib" FEATURE_xlib
"xkb" FEATURE_xkbcommon
"xcb" FEATURE_xcb
"xcb-xlib" FEATURE_xcb_xlib
"xkbcommon-x11" FEATURE_xkbcommon_x11
"xrender" FEATURE_xrender # requires FEATURE_xcb_native_painting; otherwise disabled.
"xrender" FEATURE_xcb_native_painting # experimental
"gles2" FEATURE_opengles2
"gles3" FEATURE_opengles3
#Cannot be required since Qt will look in CONFIG mode first but is controlled via CMAKE_DISABLE_FIND_PACKAGE_Vulkan below
#"vulkan" CMAKE_REQUIRE_FIND_PACKAGE_WrapVulkanHeaders
"egl" FEATURE_egl
#"fontconfig" CMAKE_REQUIRE_FIND_PACKAGE_Fontconfig
#"harfbuzz" CMAKE_REQUIRE_FIND_PACKAGE_WrapSystemHarfbuzz
#"jpeg" CMAKE_REQUIRE_FIND_PACKAGE_JPEG
#"png" CMAKE_REQUIRE_FIND_PACKAGE_PNG
#"xlib" CMAKE_REQUIRE_FIND_PACKAGE_X11
#"xkb" CMAKE_REQUIRE_FIND_PACKAGE_XKB
#"xcb" CMAKE_REQUIRE_FIND_PACKAGE_XCB
#"xcb-xlib" CMAKE_REQUIRE_FIND_PACKAGE_X11_XCB
#"xkbcommon-x11" CMAKE_REQUIRE_FIND_PACKAGE_XKB_COMMON_X11
#"xrender" CMAKE_REQUIRE_FIND_PACKAGE_XRender
INVERTED_FEATURES
"vulkan" CMAKE_DISABLE_FIND_PACKAGE_Vulkan
"opengl" CMAKE_DISABLE_FIND_PACKAGE_WrapOpenGL
"egl" CMAKE_DISABLE_FIND_PACKAGE_EGL
"gles2" CMAKE_DISABLE_FIND_PACKAGE_GLESv2
"gles3" CMAKE_DISABLE_FIND_PACKAGE_GLESv3
"fontconfig" CMAKE_DISABLE_FIND_PACKAGE_Fontconfig
#"freetype" CMAKE_DISABLE_FIND_PACKAGE_WrapSystemFreetype # Bug in qt cannot be deactivated
"harfbuzz" CMAKE_DISABLE_FIND_PACKAGE_WrapSystemHarfbuzz
"jpeg" CMAKE_DISABLE_FIND_PACKAGE_JPEG
"png" CMAKE_DISABLE_FIND_PACKAGE_PNG
"xlib" CMAKE_DISABLE_FIND_PACKAGE_X11
"xkb" CMAKE_DISABLE_FIND_PACKAGE_XKB
"xcb" CMAKE_DISABLE_FIND_PACKAGE_XCB
"xcb-xlib" CMAKE_DISABLE_FIND_PACKAGE_X11_XCB
"xkbcommon-x11" CMAKE_DISABLE_FIND_PACKAGE_XKB_COMMON_X11
"xrender" CMAKE_DISABLE_FIND_PACKAGE_XRender
# There are more X features but I am unsure how to safely disable them! Most of them seem to be found automaticall with find_package(X11)
)
if("gles2" IN_LIST FEATURES)
list(APPEND FEATURE_GUI_OPTIONS -DINPUT_opengl='es2')
list(APPEND FEATURE_GUI_OPTIONS -DFEATURE_opengl_desktop=OFF)
endif()
if(NOT "opengl" IN_LIST FEATURES AND NOT "gles2" IN_LIST FEATURES)
list(APPEND FEATURE_GUI_OPTIONS -DINPUT_opengl='no')
list(APPEND FEATURE_GUI_OPTIONS -DFEATURE_opengl_desktop=OFF)
list(APPEND FEATURE_GUI_OPTIONS -DFEATURE_opengl_dynamic=OFF)
endif()
if("xcb" IN_LIST FEATURES)
list(APPEND FEATURE_GUI_OPTIONS -DINPUT_xcb=yes)
else()
list(APPEND FEATURE_GUI_OPTIONS -DINPUT_xcb=no)
endif()
if("xkb" IN_LIST FEATURES)
list(APPEND FEATURE_GUI_OPTIONS -DINPUT_xkbcommon=yes)
else()
list(APPEND FEATURE_GUI_OPTIONS -DINPUT_xkbcommon=no)
endif()
# Disable OpenGL ES 3.1 and 3.2
list(APPEND FEATURE_GUI_OPTIONS -DFEATURE_opengles31:BOOL=OFF)
list(APPEND FEATURE_GUI_OPTIONS -DFEATURE_opengles32:BOOL=OFF)
list(APPEND FEATURE_GUI_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_ATSPI2:BOOL=ON)
list(APPEND FEATURE_GUI_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_DirectFB:BOOL=ON)
list(APPEND FEATURE_GUI_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_Libdrm:BOOL=ON)
list(APPEND FEATURE_GUI_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_gbm:BOOL=ON)
list(APPEND FEATURE_GUI_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_Libinput:BOOL=ON)
list(APPEND FEATURE_GUI_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_Mtdev:BOOL=ON)
list(APPEND FEATURE_GUI_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_Tslib:BOOL=ON)
# sql-drivers features:
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_SQLDRIVERS_OPTIONS
FEATURES
"sql-sqlite" FEATURE_system_sqlite
"sql-odbc" FEATURE_sql_odbc
"sql-mysql" FEATURE_sql_mysql
"sql-oci" FEATURE_sql_oci
#"sql-psql" CMAKE_REQUIRE_FIND_PACKAGE_PostgreSQL
#"sql-sqlite" CMAKE_REQUIRE_FIND_PACKAGE_SQLite3
INVERTED_FEATURES
"sql-psql" CMAKE_DISABLE_FIND_PACKAGE_PostgreSQL
"sql-sqlite" CMAKE_DISABLE_FIND_PACKAGE_SQLite3
"sql-odbc" CMAKE_DISABLE_FIND_PACKAGE_ODBC
"sql-mysql" CMAKE_DISABLE_FIND_PACKAGE_MySQL
"sql-oci" CMAKE_DISABLE_FIND_PACKAGE_Oracle
)
set(DB_LIST DB2 Interbase Mimer)
foreach(_db IN LISTS DB_LIST)
list(APPEND FEATURE_SQLDRIVERS_OPTIONS -DCMAKE_DISABLE_FIND_PACKAGE_${_db}:BOOL=ON)
endforeach()
# printsupport features:
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_PRINTSUPPORT_OPTIONS
FEATURES
"cups" FEATURE_cups
INVERTED_FEATURES
"cups" CMAKE_DISABLE_FIND_PACKAGE_Cups
)
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_WIDGETS_OPTIONS
FEATURES
"gtk3" FEATURE_gtk3
INVERTED_FEATURES
"gtk3" CMAKE_DISABLE_FIND_PACKAGE_GTK3
)
set(TOOL_NAMES
androiddeployqt
androidtestrunner
cmake_automoc_parser
moc
qdbuscpp2xml
qdbusxml2cpp
qlalr
qmake
qmake6
qvkgen
rcc
tracegen
uic
qtpaths
qtpaths6
windeployqt
windeployqt6
macdeployqt
macdeployqt6
androiddeployqt6
syncqt
tracepointgen
)
qt_install_submodule(PATCHES ${${PORT}_PATCHES}
TOOL_NAMES ${TOOL_NAMES}
CONFIGURE_OPTIONS
#--trace-expand
${FEATURE_OPTIONS}
${FEATURE_CORE_OPTIONS}
${FEATURE_NET_OPTIONS}
${FEATURE_GUI_OPTIONS}
${FEATURE_SQLDRIVERS_OPTIONS}
${FEATURE_PRINTSUPPORT_OPTIONS}
${FEATURE_WIDGETS_OPTIONS}
${INPUT_OPTIONS}
-DQT_USE_BUNDLED_BundledFreetype:BOOL=FALSE
-DQT_USE_BUNDLED_BundledHarfbuzz:BOOL=FALSE
-DQT_USE_BUNDLED_BundledLibpng:BOOL=FALSE
-DQT_USE_BUNDLED_BundledPcre2:BOOL=FALSE
-DINPUT_bundled_xcb_xinput:STRING=no
-DFEATURE_force_debug_info:BOOL=ON
-DFEATURE_relocatable:BOOL=ON
CONFIGURE_OPTIONS_RELEASE
CONFIGURE_OPTIONS_DEBUG
-DFEATURE_debug:BOOL=ON
CONFIGURE_OPTIONS_MAYBE_UNUSED
FEATURE_appstore_compliant # only used for android/ios
)
# Install CMake helper scripts
file(COPY
"${CMAKE_CURRENT_LIST_DIR}/cmake/"
DESTINATION
"${CURRENT_PACKAGES_DIR}/share/${PORT}"
)
file(CONFIGURE OUTPUT "${CURRENT_PACKAGES_DIR}/share/${PORT}/port_status.cmake" CONTENT "set(qtbase_with_icu ${FEATURE_icu})\n")
set(other_files qt-cmake
qt-cmake-private
qt-cmake-standalone-test
qt-configure-module
qt-internal-configure-tests
qt-cmake-create
)
if(CMAKE_HOST_WIN32)
set(script_suffix ".bat")
else()
set(script_suffix "")
endif()
list(TRANSFORM other_files APPEND "${script_suffix}")
list(APPEND other_files
android_cmakelist_patcher.sh
android_emulator_launcher.sh
ensure_pro_file.cmake
syncqt.pl
target_qt.conf
qt-cmake-private-install.cmake
qt-testrunner.py
sanitizer-testrunner.py
)
foreach(_config debug release)
if(_config MATCHES "debug")
set(path_suffix debug/)
else()
set(path_suffix)
endif()
if(NOT EXISTS "${CURRENT_PACKAGES_DIR}/${path_suffix}bin")
continue()
endif()
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/Qt6/bin/${path_suffix}")
foreach(other_file IN LISTS other_files)
if(EXISTS "${CURRENT_PACKAGES_DIR}/${path_suffix}bin/${other_file}")
set(target_file "${CURRENT_PACKAGES_DIR}/tools/Qt6/bin/${path_suffix}${other_file}")
file(RENAME "${CURRENT_PACKAGES_DIR}/${path_suffix}bin/${other_file}" "${target_file}")
file(READ "${target_file}" _contents)
if(_config MATCHES "debug")
string(REPLACE "..\\share\\" "..\\..\\..\\..\\share\\" _contents "${_contents}")
string(REPLACE "../share/" "../../../../share/" _contents "${_contents}")
else()
string(REPLACE "..\\share\\" "..\\..\\..\\share\\" _contents "${_contents}")
string(REPLACE "../share/" "../../../share/" _contents "${_contents}")
endif()
string(REGEX REPLACE "set cmake_path=[^\n]+\n" "set cmake_path=cmake\n" _contents "${_contents}")
string(REGEX REPLACE "original_cmake_path=[^\n]+\n" "original_cmake_path=does-not-exist\n" _contents "${_contents}")
file(WRITE "${target_file}" "${_contents}")
endif()
endforeach()
endforeach()
# Fixup qt.toolchain.cmake
set(qttoolchain "${CURRENT_PACKAGES_DIR}/share/Qt6/qt.toolchain.cmake")
file(READ "${qttoolchain}" toolchain_contents)
string(REGEX REPLACE "set\\\(__qt_initially_configured_toolchain_file [^\\\n]+\\\n" "" toolchain_contents "${toolchain_contents}")
string(REGEX REPLACE "set\\\(__qt_chainload_toolchain_file [^\\\n]+\\\n" "set(__qt_chainload_toolchain_file \"\${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}\")" toolchain_contents "${toolchain_contents}")
string(REGEX REPLACE "set\\\(VCPKG_CHAINLOAD_TOOLCHAIN_FILE [^\\\n]+\\\n" "" toolchain_contents "${toolchain_contents}")
string(REGEX REPLACE "set\\\(__qt_initial_c_compiler [^\\\n]+\\\n" "" toolchain_contents "${toolchain_contents}")
string(REGEX REPLACE "set\\\(__qt_initial_cxx_compiler [^\\\n]+\\\n" "" toolchain_contents "${toolchain_contents}")
string(REPLACE "${CURRENT_HOST_INSTALLED_DIR}" "\${vcpkg_installed_dir}/${HOST_TRIPLET}" toolchain_contents "${toolchain_contents}")
file(WRITE "${qttoolchain}" "${toolchain_contents}")
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static" OR NOT VCPKG_TARGET_IS_WINDOWS)
if(VCPKG_CROSSCOMPILING)
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin/qmake" "${CURRENT_PACKAGES_DIR}/debug/bin/qmake") # qmake has been moved so this is the qmake helper script
endif()
file(GLOB_RECURSE _bin_files "${CURRENT_PACKAGES_DIR}/bin/*")
if(NOT _bin_files) # Only clean if empty otherwise let vcpkg throw and error.
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin/" "${CURRENT_PACKAGES_DIR}/debug/bin/")
else()
message(STATUS "Files in '/bin':${_bin_files}")
endif()
endif()
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/share/Qt6/QtBuildInternals")
if(NOT VCPKG_TARGET_IS_OSX)
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/share/Qt6/macos")
endif()
if(NOT VCPKG_TARGET_IS_IOS)
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/share/Qt6/ios")
endif()
file(RELATIVE_PATH installed_to_host "${CURRENT_INSTALLED_DIR}" "${CURRENT_HOST_INSTALLED_DIR}")
file(RELATIVE_PATH host_to_installed "${CURRENT_HOST_INSTALLED_DIR}" "${CURRENT_INSTALLED_DIR}")
if(installed_to_host)
string(APPEND installed_to_host "/")
string(APPEND host_to_installed "/")
endif()
set(_file "${CMAKE_CURRENT_LIST_DIR}/qt.conf.in")
set(REL_PATH "")
set(REL_HOST_TO_DATA "\${CURRENT_INSTALLED_DIR}/")
configure_file("${_file}" "${CURRENT_PACKAGES_DIR}/tools/Qt6/qt_release.conf" @ONLY) # For vcpkg-qmake
set(BACKUP_CURRENT_INSTALLED_DIR "${CURRENT_INSTALLED_DIR}")
set(BACKUP_CURRENT_HOST_INSTALLED_DIR "${CURRENT_HOST_INSTALLED_DIR}")
set(CURRENT_INSTALLED_DIR "./../../../")
set(CURRENT_HOST_INSTALLED_DIR "${CURRENT_INSTALLED_DIR}${installed_to_host}")
## Configure installed qt.conf
set(REL_HOST_TO_DATA "${host_to_installed}")
configure_file("${_file}" "${CURRENT_PACKAGES_DIR}/tools/Qt6/bin/qt.conf")
set(REL_PATH debug/)
configure_file("${_file}" "${CURRENT_PACKAGES_DIR}/tools/Qt6/bin/qt.debug.conf")
set(CURRENT_INSTALLED_DIR "${BACKUP_CURRENT_INSTALLED_DIR}")
set(CURRENT_HOST_INSTALLED_DIR "${BACKUP_CURRENT_HOST_INSTALLED_DIR}")
set(REL_HOST_TO_DATA "\${CURRENT_INSTALLED_DIR}/")
configure_file("${_file}" "${CURRENT_PACKAGES_DIR}/tools/Qt6/qt_debug.conf" @ONLY) # For vcpkg-qmake
if(VCPKG_TARGET_IS_WINDOWS)
set(_DLL_FILES brotlicommon brotlidec bz2 freetype harfbuzz libpng16)
set(DLLS_TO_COPY "")
foreach(_file IN LISTS _DLL_FILES)
if(EXISTS "${CURRENT_INSTALLED_DIR}/bin/${_file}.dll")
list(APPEND DLLS_TO_COPY "${CURRENT_INSTALLED_DIR}/bin/${_file}.dll")
endif()
endforeach()
file(COPY ${DLLS_TO_COPY} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/Qt6/bin")
endif()
set(hostinfofile "${CURRENT_PACKAGES_DIR}/share/Qt6HostInfo/Qt6HostInfoConfig.cmake")
file(READ "${hostinfofile}" _contents)
string(REPLACE [[set(QT6_HOST_INFO_LIBEXECDIR "bin")]] [[set(QT6_HOST_INFO_LIBEXECDIR "tools/Qt6/bin")]] _contents "${_contents}")
string(REPLACE [[set(QT6_HOST_INFO_BINDIR "bin")]] [[set(QT6_HOST_INFO_BINDIR "tools/Qt6/bin")]] _contents "${_contents}")
file(WRITE "${hostinfofile}" "${_contents}")
if(NOT VCPKG_CROSSCOMPILING OR EXISTS "${CURRENT_PACKAGES_DIR}/share/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake")
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake"
"PACKAGE_PREFIX_DIR}/bin/syncqt"
"PACKAGE_PREFIX_DIR}/tools/Qt6/bin/syncqt")
endif()
set(configfile "${CURRENT_PACKAGES_DIR}/share/Qt6CoreTools/Qt6CoreToolsTargets-debug.cmake")
if(EXISTS "${configfile}")
file(READ "${configfile}" _contents)
if(EXISTS "${CURRENT_PACKAGES_DIR}/tools/Qt6/bin/qmake.exe")
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/qmake.debug.bat" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/Qt6/bin")
string(REPLACE [[ "${_IMPORT_PREFIX}/tools/Qt6/bin/qmake.exe"]] [[ "${_IMPORT_PREFIX}/tools/Qt6/bin/qmake.debug.bat"]] _contents "${_contents}")
endif()
if(EXISTS "${CURRENT_PACKAGES_DIR}/tools/Qt6/bin/qtpaths.exe")
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/qtpaths.debug.bat" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/Qt6/bin")
string(REPLACE [[ "${_IMPORT_PREFIX}/tools/Qt6/bin/qtpaths.exe"]] [[ "${_IMPORT_PREFIX}/tools/Qt6/bin/qtpaths.debug.bat"]] _contents "${_contents}")
endif()
if(EXISTS "${CURRENT_PACKAGES_DIR}/tools/Qt6/bin/windeployqt.exe")
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/windeployqt.debug.bat" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/Qt6/bin")
string(REPLACE [[ "${_IMPORT_PREFIX}/tools/Qt6/bin/windeployqt.exe"]] [[ "${_IMPORT_PREFIX}/tools/Qt6/bin/windeployqt.debug.bat"]] _contents "${_contents}")
endif()
file(WRITE "${configfile}" "${_contents}")
endif()
if(VCPKG_CROSSCOMPILING)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/share/Qt6/Qt6Dependencies.cmake" "${CURRENT_HOST_INSTALLED_DIR}" "\${CMAKE_CURRENT_LIST_DIR}/../../../${HOST_TRIPLET}")
endif()
function(remove_original_cmake_path file)
file(READ "${file}" _contents)
string(REGEX REPLACE "original_cmake_path=[^\n]*" "original_cmake_path=''" _contents "${_contents}")
file(WRITE "${file}" "${_contents}")
endfunction()
if(NOT VCPKG_TARGET_IS_WINDOWS)
foreach(file "qt-cmake" "qt-cmake-private")
remove_original_cmake_path("${CURRENT_PACKAGES_DIR}/tools/Qt6/bin/${file}")
if(NOT VCPKG_BUILD_TYPE)
remove_original_cmake_path("${CURRENT_PACKAGES_DIR}/tools/Qt6/bin/debug/${file}")
endif()
endforeach()
endif()
if(VCPKG_TARGET_IS_WINDOWS)
# dlls owned but not automatically installed by qtbase
# this is required to avoid ownership troubles in downstream qt modules
set(qtbase_owned_dlls
double-conversion.dll
icudt74.dll
icuin74.dll
icuuc74.dll
libcrypto-3-${VCPKG_TARGET_ARCHITECTURE}.dll
libcrypto-3.dll # for x86
pcre2-16.dll
zlib1.dll
zstd.dll
)
list(TRANSFORM qtbase_owned_dlls PREPEND "${CURRENT_INSTALLED_DIR}/bin/")
foreach(dll IN LISTS qtbase_owned_dlls)
if(NOT EXISTS "${dll}") # Need to remove non-existant dlls since dependencies could have been build statically
list(REMOVE_ITEM qtbase_owned_dlls "${dll}")
endif()
endforeach()
file(COPY ${qtbase_owned_dlls} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/Qt6/bin")
endif()