summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/FindWrapFreetype.cmake44
-rw-r--r--cmake/FindWrapHarfbuzz.cmake56
-rw-r--r--cmake/FindWrapPCRE2.cmake36
-rw-r--r--cmake/FindWrapPNG.cmake17
-rw-r--r--cmake/FindWrapSystemFreetype.cmake35
-rw-r--r--cmake/FindWrapSystemHarfbuzz.cmake45
-rw-r--r--cmake/FindWrapSystemPCRE2.cmake23
-rw-r--r--cmake/FindWrapSystemPNG.cmake27
-rw-r--r--cmake/QtBaseGlobalTargets.cmake1
-rw-r--r--cmake/QtFindWrapHelper.cmake74
-rw-r--r--cmake/QtPostProcess.cmake23
-rw-r--r--configure.cmake5
-rw-r--r--src/3rdparty/CMakeLists.txt20
-rw-r--r--src/3rdparty/freetype/CMakeLists.txt101
-rw-r--r--src/3rdparty/freetype/freetype.pro12
-rw-r--r--src/3rdparty/harfbuzz-ng/.prev_CMakeLists.txt179
-rw-r--r--src/3rdparty/harfbuzz-ng/CMakeLists.txt180
-rw-r--r--src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro7
-rw-r--r--src/3rdparty/libpng/CMakeLists.txt54
-rw-r--r--src/3rdparty/pcre2/CMakeLists.txt72
-rw-r--r--src/CMakeLists.txt20
-rw-r--r--src/corelib/.prev_CMakeLists.txt33
-rw-r--r--src/corelib/CMakeLists.txt51
-rw-r--r--src/corelib/configure.cmake10
-rw-r--r--src/gui/.prev_CMakeLists.txt18
-rw-r--r--src/gui/CMakeLists.txt28
-rw-r--r--src/gui/configure.cmake47
-rw-r--r--src/network/.prev_CMakeLists.txt16
-rw-r--r--src/network/CMakeLists.txt16
-rw-r--r--src/platformsupport/fontdatabases/CMakeLists.txt2
-rw-r--r--src/plugins/imageformats/jpeg/.prev_CMakeLists.txt74
-rw-r--r--src/plugins/imageformats/jpeg/CMakeLists.txt74
-rw-r--r--src/plugins/platforms/minimal/CMakeLists.txt2
-rw-r--r--src/tools/bootstrap/.prev_CMakeLists.txt11
-rw-r--r--src/tools/bootstrap/CMakeLists.txt65
-rwxr-xr-xutil/cmake/configurejson2cmake.py39
-rw-r--r--util/cmake/helper.py54
-rwxr-xr-xutil/cmake/pro2cmake.py69
38 files changed, 1436 insertions, 204 deletions
diff --git a/cmake/FindWrapFreetype.cmake b/cmake/FindWrapFreetype.cmake
index ec7d2a8d24..3f8317be69 100644
--- a/cmake/FindWrapFreetype.cmake
+++ b/cmake/FindWrapFreetype.cmake
@@ -1,33 +1,17 @@
-# We can't create the same interface imported target multiple times, CMake will complain if we do
-# that. This can happen if the find_package call is done in multiple different subdirectories.
-if(TARGET WrapFreetype::WrapFreetype)
- set(WrapFreetype_FOUND ON)
- return()
-endif()
-
-set(WrapFreetype_FOUND OFF)
-
-# Hunter has the package named freetype, but exports the Freetype::Freetype target as upstream
-# First try the CONFIG package, and afterwards the MODULE if not found
+include(QtFindWrapHelper NO_POLICY_SCOPE)
-find_package(Freetype CONFIG NAMES Freetype freetype QUIET)
-if(NOT Freetype_FOUND)
- find_package(Freetype MODULE)
+set(_qt_wrap_use_bundled FALSE)
+if(QT_FEATURE_freetype AND NOT QT_FEATURE_system_freetype)
+ set(_qt_wrap_use_bundled TRUE)
endif()
-if(Freetype_FOUND)
- # vcpkg defines a lower case target name, while upstream Find module defines a prefixed
- # upper case name.
- set(potential_target_names Freetype::Freetype freetype)
- foreach(target_name ${potential_target_names})
- if(TARGET ${target_name})
- set(WrapFreetype_FOUND ON)
- set(final_target_name ${target_name})
-
- add_library(WrapFreetype::WrapFreetype INTERFACE IMPORTED)
- target_link_libraries(WrapFreetype::WrapFreetype INTERFACE ${final_target_name})
-
- break()
- endif()
- endforeach()
-endif()
+qt_find_package_system_or_bundled(wrap_freetype
+ FRIENDLY_PACKAGE_NAME "Freetype"
+ WRAP_PACKAGE_TARGET "WrapFreetype::WrapFreetype"
+ WRAP_PACKAGE_FOUND_VAR_NAME "WrapFreetype_FOUND"
+ BUNDLED_PACKAGE_NAME "Qt6BundledFreetype"
+ BUNDLED_PACKAGE_TARGET "Qt6::BundledFreetype"
+ SYSTEM_PACKAGE_NAME "WrapSystemFreetype"
+ SYSTEM_PACKAGE_TARGET "WrapSystemFreetype::WrapSystemFreetype"
+ USE_BUNDLED_PACKAGE "${_qt_wrap_use_bundled}"
+)
diff --git a/cmake/FindWrapHarfbuzz.cmake b/cmake/FindWrapHarfbuzz.cmake
index f7845b28bd..eac95b669d 100644
--- a/cmake/FindWrapHarfbuzz.cmake
+++ b/cmake/FindWrapHarfbuzz.cmake
@@ -1,45 +1,17 @@
-# We can't create the same interface imported target multiple times, CMake will complain if we do
-# that. This can happen if the find_package call is done in multiple different subdirectories.
-if(TARGET WrapHarfbuzz::WrapHarfbuzz)
- set(WrapHarfbuzz_FOUND ON)
- return()
-endif()
-
-set(WrapHarfbuzz_FOUND OFF)
-
-find_package(harfbuzz)
+include(QtFindWrapHelper NO_POLICY_SCOPE)
-# Gentoo has some buggy version of a harfbuzz Config file. Check if include paths are valid.
-set(__harfbuzz_target_name "harfbuzz::harfbuzz")
-if(harfbuzz_FOUND AND TARGET "${__harfbuzz_target_name}")
- get_property(__harfbuzz_include_paths TARGET "${__harfbuzz_target_name}"
- PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
- foreach(__harfbuzz_include_dir ${__harfbuzz_include_paths})
- if(NOT EXISTS "${__harfbuzz_include_dir}")
- # Must be the broken Gentoo harfbuzzConfig.cmake file. Try to use pkg-config instead.
- set(__harfbuzz_broken_config_file TRUE)
- break()
- endif()
- endforeach()
+set(_qt_wrap_use_bundled FALSE)
+if(QT_FEATURE_harfbuzz AND NOT QT_FEATURE_system_harfbuzz)
+ set(_qt_wrap_use_bundled TRUE)
endif()
-if(__harfbuzz_broken_config_file)
- find_package(PkgConfig)
-
- pkg_check_modules(harfbuzz harfbuzz IMPORTED_TARGET)
- set(__harfbuzz_target_name "PkgConfig::harfbuzz")
-
- if (NOT TARGET "${__harfbuzz_target_name}")
- set(harfbuzz_FOUND 0)
- endif()
-endif()
-
-if(TARGET "${__harfbuzz_target_name}")
- set(WrapHarfbuzz_FOUND ON)
-
- add_library(WrapHarfbuzz::WrapHarfbuzz INTERFACE IMPORTED)
- target_link_libraries(WrapHarfbuzz::WrapHarfbuzz INTERFACE ${__harfbuzz_target_name})
-endif()
-unset(__harfbuzz_target_name)
-unset(__harfbuzz_include_dir)
-unset(__harfbuzz_broken_config_file)
+qt_find_package_system_or_bundled(wrap_harfbuzz
+ FRIENDLY_PACKAGE_NAME "Harfbuzz"
+ WRAP_PACKAGE_TARGET "WrapHarfbuzz::WrapHarfbuzz"
+ WRAP_PACKAGE_FOUND_VAR_NAME "WrapHarfbuzz_FOUND"
+ BUNDLED_PACKAGE_NAME "Qt6BundledHarfbuzz"
+ BUNDLED_PACKAGE_TARGET "Qt6::BundledHarfbuzz"
+ SYSTEM_PACKAGE_NAME "WrapSystemHarfbuzz"
+ SYSTEM_PACKAGE_TARGET "WrapSystemHarfbuzz::WrapSystemHarfbuzz"
+ USE_BUNDLED_PACKAGE "${_qt_wrap_use_bundled}"
+)
diff --git a/cmake/FindWrapPCRE2.cmake b/cmake/FindWrapPCRE2.cmake
index 08f660bdfc..fec46f36b0 100644
--- a/cmake/FindWrapPCRE2.cmake
+++ b/cmake/FindWrapPCRE2.cmake
@@ -1,23 +1,17 @@
-if(TARGET WrapPCRE2::WrapPCRE2)
- set(WrapPCRE2_FOUND TRUE)
- return()
-endif()
-
-find_package(PCRE2 CONFIG QUIET)
+include(QtFindWrapHelper NO_POLICY_SCOPE)
-if(PCRE2_FOUND AND TARGET PCRE2::pcre2-16)
- # Hunter case.
- add_library(WrapPCRE2::WrapPCRE2 INTERFACE IMPORTED)
- target_link_libraries(WrapPCRE2::WrapPCRE2 INTERFACE PCRE2::pcre2-16)
- set(WrapPCRE2_FOUND TRUE)
-else()
- find_library(PCRE2_LIBRARIES NAMES pcre2-16)
- find_path(PCRE2_INCLUDE_DIRS pcre2.h)
-
- if (PCRE2_LIBRARIES AND PCRE2_INCLUDE_DIRS)
- add_library(WrapPCRE2::WrapPCRE2 INTERFACE IMPORTED)
- target_link_libraries(WrapPCRE2::WrapPCRE2 INTERFACE ${PCRE2_LIBRARIES})
- target_include_directories(WrapPCRE2::WrapPCRE2 INTERFACE ${PCRE2_INCLUDE_DIRS})
- set(WrapPCRE2_FOUND TRUE)
- endif()
+set(_qt_wrap_use_bundled FALSE)
+if(QT_FEATURE_pcre2 AND NOT QT_FEATURE_system_pcre2)
+ set(_qt_wrap_use_bundled TRUE)
endif()
+
+qt_find_package_system_or_bundled(wrap_pcre2
+ FRIENDLY_PACKAGE_NAME "PCRE2"
+ WRAP_PACKAGE_TARGET "WrapPCRE2::WrapPCRE2"
+ WRAP_PACKAGE_FOUND_VAR_NAME "WrapPCRE2_FOUND"
+ BUNDLED_PACKAGE_NAME "Qt6BundledPcre2"
+ BUNDLED_PACKAGE_TARGET "Qt6::BundledPcre2"
+ SYSTEM_PACKAGE_NAME "WrapSystemPCRE2"
+ SYSTEM_PACKAGE_TARGET "WrapSystemPCRE2::WrapSystemPCRE2"
+ USE_BUNDLED_PACKAGE "${_qt_wrap_use_bundled}"
+)
diff --git a/cmake/FindWrapPNG.cmake b/cmake/FindWrapPNG.cmake
new file mode 100644
index 0000000000..d9e7aa539b
--- /dev/null
+++ b/cmake/FindWrapPNG.cmake
@@ -0,0 +1,17 @@
+include(QtFindWrapHelper NO_POLICY_SCOPE)
+
+set(_qt_wrap_use_bundled FALSE)
+if(QT_FEATURE_png AND NOT QT_FEATURE_system_png)
+ set(_qt_wrap_use_bundled TRUE)
+endif()
+
+qt_find_package_system_or_bundled(wrap_png
+ FRIENDLY_PACKAGE_NAME "PNG"
+ WRAP_PACKAGE_TARGET "WrapPNG::WrapPNG"
+ WRAP_PACKAGE_FOUND_VAR_NAME "WrapPNG_FOUND"
+ BUNDLED_PACKAGE_NAME "Qt6BundledLibpng"
+ BUNDLED_PACKAGE_TARGET "Qt6::BundledLibpng"
+ SYSTEM_PACKAGE_NAME "WrapSystemPNG"
+ SYSTEM_PACKAGE_TARGET "WrapSystemPNG::WrapSystemPNG"
+ USE_BUNDLED_PACKAGE "${_qt_wrap_use_bundled}"
+)
diff --git a/cmake/FindWrapSystemFreetype.cmake b/cmake/FindWrapSystemFreetype.cmake
new file mode 100644
index 0000000000..d41906f949
--- /dev/null
+++ b/cmake/FindWrapSystemFreetype.cmake
@@ -0,0 +1,35 @@
+# We can't create the same interface imported target multiple times, CMake will complain if we do
+# that. This can happen if the find_package call is done in multiple different subdirectories.
+if(TARGET WrapSystemFreetype::WrapSystemFreetype)
+ set(WrapSystemFreetype_FOUND ON)
+ return()
+endif()
+
+set(WrapSystemFreetype_FOUND OFF)
+
+# Hunter has the package named freetype, but exports the Freetype::Freetype target as upstream
+# First try the CONFIG package, and afterwards the MODULE if not found
+
+find_package(Freetype CONFIG NAMES Freetype freetype QUIET)
+if(NOT Freetype_FOUND)
+ find_package(Freetype MODULE)
+endif()
+
+if(Freetype_FOUND)
+ # vcpkg defines a lower case target name, while upstream Find module defines a prefixed
+ # upper case name.
+ set(potential_target_names Freetype::Freetype freetype)
+ foreach(target_name ${potential_target_names})
+ if(TARGET ${target_name})
+ set(WrapSystemFreetype_FOUND ON)
+ set(final_target_name ${target_name})
+
+ add_library(WrapSystemFreetype::WrapSystemFreetype INTERFACE IMPORTED)
+ target_link_libraries(WrapSystemFreetype::WrapSystemFreetype INTERFACE
+ ${final_target_name})
+
+ break()
+ endif()
+ endforeach()
+endif()
+
diff --git a/cmake/FindWrapSystemHarfbuzz.cmake b/cmake/FindWrapSystemHarfbuzz.cmake
new file mode 100644
index 0000000000..6829dc1430
--- /dev/null
+++ b/cmake/FindWrapSystemHarfbuzz.cmake
@@ -0,0 +1,45 @@
+# We can't create the same interface imported target multiple times, CMake will complain if we do
+# that. This can happen if the find_package call is done in multiple different subdirectories.
+if(TARGET WrapSystemHarfbuzz::WrapSystemHarfbuzz)
+ set(WrapSystemHarfbuzz_FOUND ON)
+ return()
+endif()
+
+set(WrapSystemHarfbuzz_FOUND OFF)
+
+find_package(harfbuzz)
+
+# Gentoo has some buggy version of a harfbuzz Config file. Check if include paths are valid.
+set(__harfbuzz_target_name "harfbuzz::harfbuzz")
+if(harfbuzz_FOUND AND TARGET "${__harfbuzz_target_name}")
+ get_property(__harfbuzz_include_paths TARGET "${__harfbuzz_target_name}"
+ PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
+ foreach(__harfbuzz_include_dir ${__harfbuzz_include_paths})
+ if(NOT EXISTS "${__harfbuzz_include_dir}")
+ # Must be the broken Gentoo harfbuzzConfig.cmake file. Try to use pkg-config instead.
+ set(__harfbuzz_broken_config_file TRUE)
+ break()
+ endif()
+ endforeach()
+endif()
+
+if(__harfbuzz_broken_config_file)
+ find_package(PkgConfig)
+
+ pkg_check_modules(harfbuzz harfbuzz IMPORTED_TARGET)
+ set(__harfbuzz_target_name "PkgConfig::harfbuzz")
+
+ if (NOT TARGET "${__harfbuzz_target_name}")
+ set(harfbuzz_FOUND 0)
+ endif()
+endif()
+
+if(TARGET "${__harfbuzz_target_name}")
+ set(WrapSystemHarfbuzz_FOUND ON)
+
+ add_library(WrapSystemHarfbuzz::WrapSystemHarfbuzz INTERFACE IMPORTED)
+ target_link_libraries(WrapSystemHarfbuzz::WrapSystemHarfbuzz INTERFACE ${__harfbuzz_target_name})
+endif()
+unset(__harfbuzz_target_name)
+unset(__harfbuzz_include_dir)
+unset(__harfbuzz_broken_config_file)
diff --git a/cmake/FindWrapSystemPCRE2.cmake b/cmake/FindWrapSystemPCRE2.cmake
new file mode 100644
index 0000000000..31379ecc63
--- /dev/null
+++ b/cmake/FindWrapSystemPCRE2.cmake
@@ -0,0 +1,23 @@
+if(TARGET WrapSystemPCRE2::WrapSystemPCRE2)
+ set(WrapSystemPCRE2_FOUND TRUE)
+ return()
+endif()
+
+find_package(PCRE2 CONFIG QUIET)
+
+if(PCRE2_FOUND AND TARGET PCRE2::pcre2-16)
+ # Hunter case.
+ add_library(WrapSystemPCRE2::WrapSystemPCRE2 INTERFACE IMPORTED)
+ target_link_libraries(WrapSystemPCRE2::WrapSystemPCRE2 INTERFACE PCRE2::pcre2-16)
+ set(WrapSystemPCRE2_FOUND TRUE)
+else()
+ find_library(PCRE2_LIBRARIES NAMES pcre2-16)
+ find_path(PCRE2_INCLUDE_DIRS pcre2.h)
+
+ if (PCRE2_LIBRARIES AND PCRE2_INCLUDE_DIRS)
+ add_library(WrapSystemPCRE2::WrapSystemPCRE2 INTERFACE IMPORTED)
+ target_link_libraries(WrapSystemPCRE2::WrapSystemPCRE2 INTERFACE ${PCRE2_LIBRARIES})
+ target_include_directories(WrapSystemPCRE2::WrapSystemPCRE2 INTERFACE ${PCRE2_INCLUDE_DIRS})
+ set(WrapSystemPCRE2_FOUND TRUE)
+ endif()
+endif()
diff --git a/cmake/FindWrapSystemPNG.cmake b/cmake/FindWrapSystemPNG.cmake
new file mode 100644
index 0000000000..cff160ad04
--- /dev/null
+++ b/cmake/FindWrapSystemPNG.cmake
@@ -0,0 +1,27 @@
+# We can't create the same interface imported target multiple times, CMake will complain if we do
+# that. This can happen if the find_package call is done in multiple different subdirectories.
+if(TARGET WrapSystemPNG::WrapSystemPNG)
+ set(WrapSystemPNG_FOUND ON)
+ return()
+endif()
+
+set(WrapSystemPNG_FOUND OFF)
+
+find_package(PNG QUIET)
+
+if(PNG_FOUND)
+ set(potential_target_names PNG::PNG)
+ foreach(target_name ${potential_target_names})
+ if(TARGET ${target_name})
+ set(WrapSystemPNG_FOUND ON)
+ set(final_target_name ${target_name})
+
+ add_library(WrapSystemPNG::WrapSystemPNG INTERFACE IMPORTED)
+ target_link_libraries(WrapSystemPNG::WrapSystemPNG INTERFACE
+ ${final_target_name})
+
+ break()
+ endif()
+ endforeach()
+endif()
+
diff --git a/cmake/QtBaseGlobalTargets.cmake b/cmake/QtBaseGlobalTargets.cmake
index 182d2986f0..31e0512732 100644
--- a/cmake/QtBaseGlobalTargets.cmake
+++ b/cmake/QtBaseGlobalTargets.cmake
@@ -229,6 +229,7 @@ qt_copy_or_install(FILES
cmake/QtCompilerFlags.cmake
cmake/QtCompilerOptimization.cmake
cmake/QtFeature.cmake
+ cmake/QtFindWrapHelper.cmake
cmake/QtPlatformSupport.cmake
cmake/QtPlatformAndroid.cmake
cmake/QtPostProcess.cmake
diff --git a/cmake/QtFindWrapHelper.cmake b/cmake/QtFindWrapHelper.cmake
new file mode 100644
index 0000000000..cb6d19600b
--- /dev/null
+++ b/cmake/QtFindWrapHelper.cmake
@@ -0,0 +1,74 @@
+# Creates an imported wrapper target that links against either a Qt bundled package
+# or a system package.
+#
+# Used for consuming 3rd party libraries in Qt.
+#
+# Example: Creates WrapFreetype::WrapFreetype linking against either
+# Qt6::BundledFreetype or WrapSystemFreetype::WrapSystemFreetype.
+#
+# The implementation has to use a unique prefix in each variable, otherwise when WrapFreetype
+# find_package()s WrapPNG, the nested call would override the parent call variables, due to macros
+# using the same scope.
+macro(qt_find_package_system_or_bundled _unique_prefix)
+ set(_flags "")
+ set(_options
+ FRIENDLY_PACKAGE_NAME
+ WRAP_PACKAGE_TARGET
+ WRAP_PACKAGE_FOUND_VAR_NAME
+ BUNDLED_PACKAGE_NAME
+ BUNDLED_PACKAGE_TARGET
+ SYSTEM_PACKAGE_NAME
+ SYSTEM_PACKAGE_TARGET
+ USE_BUNDLED_PACKAGE
+ )
+ set(_multioptions "")
+
+ cmake_parse_arguments("_qfwrap_${_unique_prefix}"
+ "${_flags}" "${_options}" "${_multioptions}" ${ARGN})
+
+ # We can't create the same interface imported target multiple times, CMake will complain if we
+ # do that. This can happen if the find_package call is done in multiple different
+ # subdirectories.
+ if(TARGET "${_qfwrap_${_unique_prefix}_WRAP_PACKAGE_TARGET}")
+ set(${_qfwrap_${_unique_prefix}_WRAP_PACKAGE_FOUND_VAR_NAME} ON)
+ return()
+ endif()
+
+ set(${_qfwrap_${_unique_prefix}_WRAP_PACKAGE_FOUND_VAR_NAME} OFF)
+
+ if(_qfwrap_${_unique_prefix}_USE_BUNDLED_PACKAGE)
+ set(${_unique_prefix}_qt_package_name_to_use
+ "${_qfwrap_${_unique_prefix}_BUNDLED_PACKAGE_NAME}")
+ set(${_unique_prefix}_qt_package_target_to_use
+ "${_qfwrap_${_unique_prefix}_BUNDLED_PACKAGE_TARGET}")
+ set(${_unique_prefix}_qt_package_success_message
+ "Using Qt bundled ${_qfwrap_${_unique_prefix}_FRIENDLY_PACKAGE_NAME}.")
+ set(${_unique_prefix}_qt_package_type "bundled")
+ else()
+ set(${_unique_prefix}_qt_package_name_to_use
+ "${_qfwrap_${_unique_prefix}_SYSTEM_PACKAGE_NAME}")
+ set(${_unique_prefix}_qt_package_target_to_use
+ "${_qfwrap_${_unique_prefix}_SYSTEM_PACKAGE_TARGET}")
+ set(${_unique_prefix}_qt_package_success_message
+ "Using system ${_qfwrap_${_unique_prefix}_FRIENDLY_PACKAGE_NAME}.")
+ set(${_unique_prefix}_qt_package_type "system")
+ endif()
+
+ if(NOT TARGET "${${_unique_prefix}_qt_package_target_to_use}")
+ find_package("${${_unique_prefix}_qt_package_name_to_use}")
+ endif()
+
+ if(TARGET "${${_unique_prefix}_qt_package_target_to_use}")
+ set(${_qfwrap_${_unique_prefix}_WRAP_PACKAGE_FOUND_VAR_NAME} ON)
+ message(STATUS "${${_unique_prefix}_qt_package_success_message}")
+ add_library("${_qfwrap_${_unique_prefix}_WRAP_PACKAGE_TARGET}" INTERFACE IMPORTED)
+ target_link_libraries("${_qfwrap_${_unique_prefix}_WRAP_PACKAGE_TARGET}"
+ INTERFACE
+ ${${_unique_prefix}_qt_package_target_to_use})
+ set_target_properties("${_qfwrap_${_unique_prefix}_WRAP_PACKAGE_TARGET}" PROPERTIES
+ INTERFACE_QT_3RD_PARTY_PACKAGE_TYPE
+ "${${_unique_prefix}_qt_package_type}")
+ elseif(${_unique_prefix}_qt_package_type STREQUAL "bundled")
+ message(FATAL_ERROR "Can't find ${_qfwrap_${_unique_prefix}_BUNDLED_PACKAGE_TARGET}.")
+ endif()
+endmacro()
diff --git a/cmake/QtPostProcess.cmake b/cmake/QtPostProcess.cmake
index 19cd4b699b..e8e6c2b3aa 100644
--- a/cmake/QtPostProcess.cmake
+++ b/cmake/QtPostProcess.cmake
@@ -371,7 +371,28 @@ function(qt_internal_create_config_file_for_standalone_tests)
${QT_CONFIG_INSTALL_DIR}
"${INSTALL_CMAKE_NAMESPACE}BuildInternals" "${standalone_tests_config_dir}")
- list(JOIN QT_REPO_KNOWN_MODULES " " QT_REPO_KNOWN_MODULES_STRING)
+ # Filter out bundled system libraries. Otherwise when looking for their dependencies
+ # (like PNG for Freetype) FindWrapPNG is searched for during configuration of
+ # standalone tests, and it can happen that Core or Gui features are not
+ # imported early enough, which means FindWrapPNG will try to find a system PNG library instead
+ # of the bundled one.
+ set(modules)
+ foreach(m ${QT_REPO_KNOWN_MODULES})
+ get_target_property(target_type "${m}" TYPE)
+
+ # Interface libraries are never bundled system libraries (hopefully).
+ if(target_type STREQUAL "INTERFACE_LIBRARY")
+ list(APPEND modules "${m}")
+ continue()
+ endif()
+
+ get_target_property(is_3rd_party "${m}" QT_MODULE_IS_3RDPARTY_LIBRARY)
+ if(NOT is_3rd_party)
+ list(APPEND modules "${m}")
+ endif()
+ endforeach()
+
+ list(JOIN modules " " QT_REPO_KNOWN_MODULES_STRING)
string(STRIP "${QT_REPO_KNOWN_MODULES_STRING}" QT_REPO_KNOWN_MODULES_STRING)
# Skip generating and installing file if no modules were built. This make sure not to install
diff --git a/configure.cmake b/configure.cmake
index 36daadadad..9f620a8973 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -7,7 +7,6 @@
#### Libraries
qt_find_package(ZLIB PROVIDED_TARGETS ZLIB::ZLIB)
-set_package_properties(ZLIB PROPERTIES TYPE REQUIRED)
qt_find_package(ZSTD PROVIDED_TARGETS ZSTD::ZSTD)
qt_find_package(WrapDBus1 PROVIDED_TARGETS dbus-1)
qt_find_package(Libudev PROVIDED_TARGETS PkgConfig::Libudev)
@@ -614,6 +613,10 @@ qt_feature("alloca" PRIVATE
LABEL "alloca()"
CONDITION QT_FEATURE_alloca_h OR QT_FEATURE_alloca_malloc_h OR TEST_alloca_stdlib_h
)
+qt_feature("system-zlib" PRIVATE
+ LABEL "Using system zlib"
+ CONDITION ZLIB_FOUND
+)
qt_feature("zstd" PRIVATE
LABEL "Zstandard support"
CONDITION ZSTD_FOUND
diff --git a/src/3rdparty/CMakeLists.txt b/src/3rdparty/CMakeLists.txt
index 79ff5cd93c..f9a6e7c68b 100644
--- a/src/3rdparty/CMakeLists.txt
+++ b/src/3rdparty/CMakeLists.txt
@@ -1,8 +1,24 @@
+# special case skip regeneration
+# The file is maintained manually
add_subdirectory(harfbuzz)
add_subdirectory(double-conversion)
-#special case begin
+if(QT_FEATURE_png AND NOT QT_FEATURE_system_png)
+ add_subdirectory(libpng)
+endif()
+
+if(QT_FEATURE_freetype AND NOT QT_FEATURE_system_freetype)
+ add_subdirectory(freetype)
+endif()
+
+if(QT_FEATURE_harfbuzz AND NOT QT_FEATURE_system_harfbuzz)
+ add_subdirectory(harfbuzz-ng)
+endif()
+
+if(QT_FEATURE_regularexpression AND NOT QT_FEATURE_system_pcre2)
+ add_subdirectory(pcre2)
+endif()
+
if (ANDROID)
add_subdirectory(gradle)
endif()
-#special case end
diff --git a/src/3rdparty/freetype/CMakeLists.txt b/src/3rdparty/freetype/CMakeLists.txt
new file mode 100644
index 0000000000..622b488c34
--- /dev/null
+++ b/src/3rdparty/freetype/CMakeLists.txt
@@ -0,0 +1,101 @@
+# Generated from freetype.pro.
+
+#####################################################################
+## BundledFreetype Generic Library:
+#####################################################################
+
+qt_add_3rdparty_library(BundledFreetype
+ STATIC
+ INSTALL
+ SOURCES
+ src/autofit/afdummy.c
+ src/autofit/afhints.c
+ src/autofit/aflatin.c
+ src/autofit/autofit.c
+ src/base/ftbase.c
+ src/base/ftbbox.c
+ src/base/ftbitmap.c
+ src/base/ftdebug.c
+ src/base/ftfntfmt.c
+ src/base/ftglyph.c
+ src/base/ftinit.c
+ src/base/ftlcdfil.c
+ src/base/ftmm.c
+ src/base/ftsynth.c
+ src/base/fttype1.c
+ src/bdf/bdf.c
+ src/cache/ftcache.c
+ src/cff/cff.c
+ src/cid/type1cid.c
+ src/gzip/ftgzip.c
+ src/lzw/ftlzw.c
+ src/otvalid/otvalid.c
+ src/otvalid/otvbase.c
+ src/otvalid/otvcommn.c
+ src/otvalid/otvgdef.c
+ src/otvalid/otvgpos.c
+ src/otvalid/otvgsub.c
+ src/otvalid/otvjstf.c
+ src/otvalid/otvmod.c
+ src/pcf/pcf.c
+ src/pfr/pfr.c
+ src/psaux/psaux.c
+ src/pshinter/pshinter.c
+ src/psnames/psmodule.c
+ src/raster/raster.c
+ src/sfnt/sfnt.c
+ src/smooth/smooth.c
+ src/truetype/truetype.c
+ src/type1/type1.c
+ src/type42/type42.c
+ src/winfonts/winfnt.c
+ DEFINES
+ FT2_BUILD_LIBRARY
+ FT_CONFIG_OPTION_SYSTEM_ZLIB
+ TT_CONFIG_OPTION_SUBPIXEL_HINTING
+ PUBLIC_INCLUDE_DIRECTORIES
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+)
+qt_disable_warnings(BundledFreetype)
+qt_set_symbol_visibility_hidden(BundledFreetype)
+
+#### Keys ignored in scope 1:.:.:freetype.pro:<TRUE>:
+# OTHER_FILES = "$$PWD/src/autofit/afangles.c" "$$PWD/src/autofit/afglobal.c" "$$PWD/src/autofit/afloader.c" "$$PWD/src/autofit/afmodule.c"
+# QT_FOR_CONFIG = "gui-private"
+
+## Scopes:
+#####################################################################
+
+qt_extend_target(BundledFreetype CONDITION WIN32
+ SOURCES
+ src/base/ftsystem.c
+)
+
+qt_extend_target(BundledFreetype CONDITION UNIX
+ SOURCES
+ builds/unix/ftsystem.c
+ INCLUDE_DIRECTORIES
+ builds/unix
+)
+
+qt_extend_target(BundledFreetype CONDITION QT_FEATURE_png
+ DEFINES
+ FT_CONFIG_OPTION_USE_PNG
+ LIBRARIES
+ WrapPNG::WrapPNG
+)
+
+qt_extend_target(BundledFreetype CONDITION QT_FEATURE_system_zlib
+ LIBRARIES
+ ZLIB::ZLIB
+)
+
+qt_extend_target(BundledFreetype CONDITION NOT QT_FEATURE_system_zlib
+ INCLUDE_DIRECTORIES
+ ../zlib/src
+)
+
+qt_extend_target(BundledFreetype CONDITION NOT QT_FEATURE_system_zlib AND NOT no_core_dep
+ LIBRARIES
+ Qt::Core
+)
diff --git a/src/3rdparty/freetype/freetype.pro b/src/3rdparty/freetype/freetype.pro
index 4034815158..0665de521b 100644
--- a/src/3rdparty/freetype/freetype.pro
+++ b/src/3rdparty/freetype/freetype.pro
@@ -11,13 +11,9 @@ MODULE_INCLUDEPATH += $$PWD/include
load(qt_helper_lib)
SOURCES += \
- $$PWD/src/autofit/afangles.c \
$$PWD/src/autofit/afdummy.c \
- $$PWD/src/autofit/afglobal.c \
$$PWD/src/autofit/afhints.c \
$$PWD/src/autofit/aflatin.c \
- $$PWD/src/autofit/afloader.c \
- $$PWD/src/autofit/afmodule.c \
$$PWD/src/autofit/autofit.c \
$$PWD/src/base/ftbase.c \
$$PWD/src/base/ftbitmap.c \
@@ -57,6 +53,14 @@ SOURCES += \
$$PWD/src/type42/type42.c \
$$PWD/src/winfonts/winfnt.c
+# These source files are included by one of the sources above
+# which means they should not be compiled as separate object files.
+OTHER_FILES += \
+ $$PWD/src/autofit/afangles.c \
+ $$PWD/src/autofit/afglobal.c \
+ $$PWD/src/autofit/afloader.c \
+ $$PWD/src/autofit/afmodule.c
+
win32 {
SOURCES += $$PWD/src/base/ftsystem.c
} else {
diff --git a/src/3rdparty/harfbuzz-ng/.prev_CMakeLists.txt b/src/3rdparty/harfbuzz-ng/.prev_CMakeLists.txt
new file mode 100644
index 0000000000..23e3689fe0
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/.prev_CMakeLists.txt
@@ -0,0 +1,179 @@
+# Generated from harfbuzz-ng.pro.
+
+#####################################################################
+## BundledHarfbuzz Generic Library:
+#####################################################################
+
+qt_add_3rdparty_library(BundledHarfbuzz
+ STATIC
+ SOURCES
+ src/hb.h
+ src/hb-atomic-private.hh
+ src/hb-blob.cc src/hb-blob.h
+ src/hb-buffer.cc src/hb-buffer.h
+ src/hb-buffer-deserialize-json.hh
+ src/hb-buffer-deserialize-text.hh
+ src/hb-buffer-private.hh
+ src/hb-buffer-serialize.cc
+ src/hb-cache-private.hh
+ src/hb-common.cc src/hb-common.h
+ src/hb-debug.hh
+ src/hb-deprecated.h
+ src/hb-dsalgs.hh
+ src/hb-face.cc src/hb-face.h
+ src/hb-face-private.hh
+ src/hb-font.cc src/hb-font.h
+ src/hb-font-private.hh
+ src/hb-mutex-private.hh
+ src/hb-object-private.hh
+ src/hb-open-file-private.hh
+ src/hb-open-type-private.hh
+ src/hb-ot-cbdt-table.hh
+ src/hb-ot-cmap-table.hh
+ src/hb-ot-glyf-table.hh
+ src/hb-ot-head-table.hh
+ src/hb-ot-hhea-table.hh
+ src/hb-ot-hmtx-table.hh
+ src/hb-ot-maxp-table.hh
+ src/hb-ot-name-table.hh
+ src/hb-ot-os2-table.hh
+ src/hb-ot-post-table.hh
+ src/hb-ot-tag.cc
+ src/hb-private.hh
+ src/hb-set.cc src/hb-set.h
+ src/hb-set-digest-private.hh
+ src/hb-set-private.hh
+ src/hb-shape.cc src/hb-shape.h
+ src/hb-shape-plan.cc src/hb-shape-plan.h
+ src/hb-shape-plan-private.hh
+ src/hb-shaper.cc
+ src/hb-shaper-impl-private.hh
+ src/hb-shaper-list.hh
+ src/hb-shaper-private.hh
+ src/hb-string-array.hh
+ src/hb-unicode.cc src/hb-unicode.h
+ src/hb-unicode-private.hh
+ src/hb-utf-private.hh
+ src/hb-version.h
+ src/hb-warning.cc
+ DEFINES
+ HAVE_ATEXIT
+ HAVE_CONFIG_H
+ HB_DISABLE_DEPRECATED
+ HB_EXTERN=
+ HB_NDEBUG
+ HB_NO_UNICODE_FUNCS
+ QT_NO_VERSION_TAGGING
+ INCLUDE_DIRECTORIES
+ .core.includes
+ PUBLIC_INCLUDE_DIRECTORIES
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+)
+qt_disable_warnings(BundledHarfbuzz)
+qt_set_symbol_visibility_hidden(BundledHarfbuzz)
+
+#### Keys ignored in scope 1:.:.:harfbuzz-ng.pro:<TRUE>:
+# SHAPERS = "opentype"
+
+## Scopes:
+#####################################################################
+
+qt_extend_target(BundledHarfbuzz CONDITION APPLE
+ SOURCES
+ src/hb-coretext.cc src/hb-coretext.h
+ DEFINES
+ HAVE_CORETEXT
+)
+
+#### Keys ignored in scope 2:.:.:harfbuzz-ng.pro:APPLE:
+# SHAPERS = "coretext"
+
+qt_extend_target(BundledHarfbuzz CONDITION UNIX
+ DEFINES
+ HAVE_PTHREAD
+ HAVE_SCHED_H
+ HAVE_SCHED_YIELD
+)
+
+qt_extend_target(BundledHarfbuzz CONDITION WIN32
+ DEFINES
+ HB_NO_WIN1256
+)
+
+qt_extend_target(BundledHarfbuzz CONDITION ANDROID
+ DEFINES
+ _POSIX_C_SOURCE=200112L
+)
+
+qt_extend_target(BundledHarfbuzz CONDITION SHAPERS___contains___opentype
+ SOURCES
+ src/hb-ot.h
+ src/hb-ot-font.cc src/hb-ot-font.h
+ src/hb-ot-kern-table.hh
+ src/hb-ot-layout.cc src/hb-ot-layout.h
+ src/hb-ot-layout-common-private.hh
+ src/hb-ot-layout-gdef-table.hh
+ src/hb-ot-layout-gpos-table.hh
+ src/hb-ot-layout-gsub-table.hh
+ src/hb-ot-layout-gsubgpos-private.hh
+ src/hb-ot-layout-jstf-table.hh
+ src/hb-ot-layout-math-table.hh
+ src/hb-ot-layout-private.hh
+ src/hb-ot-map.cc
+ src/hb-ot-map-private.hh
+ src/hb-ot-math.cc src/hb-ot-math.h
+ src/hb-ot-math-table.hh
+ src/hb-ot-post-macroman.hh
+ src/hb-ot-shape.cc src/hb-ot-shape.h
+ src/hb-ot-shape-complex-arabic.cc
+ src/hb-ot-shape-complex-arabic-fallback.hh
+ src/hb-ot-shape-complex-arabic-private.hh
+ src/hb-ot-shape-complex-arabic-table.hh
+ src/hb-ot-shape-complex-default.cc
+ src/hb-ot-shape-complex-hangul.cc
+ src/hb-ot-shape-complex-hebrew.cc
+ src/hb-ot-shape-complex-indic.cc
+ src/hb-ot-shape-complex-indic-machine.hh
+ src/hb-ot-shape-complex-indic-private.hh
+ src/hb-ot-shape-complex-indic-table.cc
+ src/hb-ot-shape-complex-myanmar.cc
+ src/hb-ot-shape-complex-myanmar-machine.hh
+ src/hb-ot-shape-complex-private.hh
+ src/hb-ot-shape-complex-thai.cc
+ src/hb-ot-shape-complex-tibetan.cc
+ src/hb-ot-shape-complex-use.cc
+ src/hb-ot-shape-complex-use-machine.hh
+ src/hb-ot-shape-complex-use-private.hh
+ src/hb-ot-shape-complex-use-table.cc
+ src/hb-ot-shape-fallback.cc
+ src/hb-ot-shape-fallback-private.hh
+ src/hb-ot-shape-normalize.cc
+ src/hb-ot-shape-normalize-private.hh
+ src/hb-ot-shape-private.hh
+ src/hb-ot-tag.h
+ src/hb-ot-var.cc src/hb-ot-var.h
+ src/hb-ot-var-avar-table.hh
+ src/hb-ot-var-fvar-table.hh
+ src/hb-ot-var-hvar-table.hh
+ src/hb-ot-var-mvar-table.hh
+ DEFINES
+ HAVE_OT
+)
+
+qt_extend_target(BundledHarfbuzz CONDITION APPLE_UIKIT
+ LIBRARIES
+ ${FWCoreGraphics}
+ ${FWCoreText}
+)
+
+qt_extend_target(BundledHarfbuzz CONDITION APPLE AND NOT APPLE_UIKIT
+ LIBRARIES
+ ${FWApplicationServices}
+)
+
+qt_extend_target(BundledHarfbuzz CONDITION SHAPERS_ISEMPTY OR SHAPERS___contains___fallback
+ SOURCES
+ src/hb-fallback-shape.cc
+ DEFINES
+ HAVE_FALLBACK
+)
diff --git a/src/3rdparty/harfbuzz-ng/CMakeLists.txt b/src/3rdparty/harfbuzz-ng/CMakeLists.txt
new file mode 100644
index 0000000000..21ea01144a
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/CMakeLists.txt
@@ -0,0 +1,180 @@
+# Generated from harfbuzz-ng.pro.
+
+#####################################################################
+## BundledHarfbuzz Generic Library:
+#####################################################################
+
+qt_add_3rdparty_library(BundledHarfbuzz
+ STATIC
+ SOURCES
+ src/hb.h
+ src/hb-atomic-private.hh
+ src/hb-blob.cc src/hb-blob.h
+ src/hb-buffer.cc src/hb-buffer.h
+ src/hb-buffer-deserialize-json.hh
+ src/hb-buffer-deserialize-text.hh
+ src/hb-buffer-private.hh
+ src/hb-buffer-serialize.cc
+ src/hb-cache-private.hh
+ src/hb-common.cc src/hb-common.h
+ src/hb-debug.hh
+ src/hb-deprecated.h
+ src/hb-dsalgs.hh
+ src/hb-face.cc src/hb-face.h
+ src/hb-face-private.hh
+ src/hb-font.cc src/hb-font.h
+ src/hb-font-private.hh
+ src/hb-mutex-private.hh
+ src/hb-object-private.hh
+ src/hb-open-file-private.hh
+ src/hb-open-type-private.hh
+ src/hb-ot-cbdt-table.hh
+ src/hb-ot-cmap-table.hh
+ src/hb-ot-glyf-table.hh
+ src/hb-ot-head-table.hh
+ src/hb-ot-hhea-table.hh
+ src/hb-ot-hmtx-table.hh
+ src/hb-ot-maxp-table.hh
+ src/hb-ot-name-table.hh
+ src/hb-ot-os2-table.hh
+ src/hb-ot-post-table.hh
+ src/hb-ot-tag.cc
+ src/hb-private.hh
+ src/hb-set.cc src/hb-set.h
+ src/hb-set-digest-private.hh
+ src/hb-set-private.hh
+ src/hb-shape.cc src/hb-shape.h
+ src/hb-shape-plan.cc src/hb-shape-plan.h
+ src/hb-shape-plan-private.hh
+ src/hb-shaper.cc
+ src/hb-shaper-impl-private.hh
+ src/hb-shaper-list.hh
+ src/hb-shaper-private.hh
+ src/hb-string-array.hh
+ src/hb-unicode.cc src/hb-unicode.h
+ src/hb-unicode-private.hh
+ src/hb-utf-private.hh
+ src/hb-version.h
+ src/hb-warning.cc
+ DEFINES
+ HAVE_ATEXIT
+ HAVE_CONFIG_H
+ HB_DISABLE_DEPRECATED
+ HB_EXTERN=
+ HB_NDEBUG
+ HB_NO_UNICODE_FUNCS
+ QT_NO_VERSION_TAGGING
+ INCLUDE_DIRECTORIES
+ $<TARGET_PROPERTY:Core,INCLUDE_DIRECTORIES> # special case
+ "${CMAKE_CURRENT_SOURCE_DIR}" # special case
+ PUBLIC_INCLUDE_DIRECTORIES
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+)
+qt_disable_warnings(BundledHarfbuzz)
+qt_set_symbol_visibility_hidden(BundledHarfbuzz)
+
+#### Keys ignored in scope 1:.:.:harfbuzz-ng.pro:<TRUE>:
+# SHAPERS = "opentype"
+
+## Scopes:
+#####################################################################
+
+qt_extend_target(BundledHarfbuzz CONDITION APPLE
+ SOURCES
+ src/hb-coretext.cc src/hb-coretext.h
+ DEFINES
+ HAVE_CORETEXT
+)
+
+#### Keys ignored in scope 2:.:.:harfbuzz-ng.pro:APPLE:
+# SHAPERS = "coretext"
+
+qt_extend_target(BundledHarfbuzz CONDITION UNIX
+ DEFINES
+ HAVE_PTHREAD
+ HAVE_SCHED_H
+ HAVE_SCHED_YIELD
+)
+
+qt_extend_target(BundledHarfbuzz CONDITION WIN32
+ DEFINES
+ HB_NO_WIN1256
+)
+
+qt_extend_target(BundledHarfbuzz CONDITION ANDROID
+ DEFINES
+ _POSIX_C_SOURCE=200112L
+)
+
+qt_extend_target(BundledHarfbuzz CONDITION TRUE # special case
+ SOURCES
+ src/hb-ot.h
+ src/hb-ot-font.cc src/hb-ot-font.h
+ src/hb-ot-kern-table.hh
+ src/hb-ot-layout.cc src/hb-ot-layout.h
+ src/hb-ot-layout-common-private.hh
+ src/hb-ot-layout-gdef-table.hh
+ src/hb-ot-layout-gpos-table.hh
+ src/hb-ot-layout-gsub-table.hh
+ src/hb-ot-layout-gsubgpos-private.hh
+ src/hb-ot-layout-jstf-table.hh
+ src/hb-ot-layout-math-table.hh
+ src/hb-ot-layout-private.hh
+ src/hb-ot-map.cc
+ src/hb-ot-map-private.hh
+ src/hb-ot-math.cc src/hb-ot-math.h
+ src/hb-ot-math-table.hh
+ src/hb-ot-post-macroman.hh
+ src/hb-ot-shape.cc src/hb-ot-shape.h
+ src/hb-ot-shape-complex-arabic.cc
+ src/hb-ot-shape-complex-arabic-fallback.hh
+ src/hb-ot-shape-complex-arabic-private.hh
+ src/hb-ot-shape-complex-arabic-table.hh
+ src/hb-ot-shape-complex-default.cc
+ src/hb-ot-shape-complex-hangul.cc
+ src/hb-ot-shape-complex-hebrew.cc
+ src/hb-ot-shape-complex-indic.cc
+ src/hb-ot-shape-complex-indic-machine.hh
+ src/hb-ot-shape-complex-indic-private.hh
+ src/hb-ot-shape-complex-indic-table.cc
+ src/hb-ot-shape-complex-myanmar.cc
+ src/hb-ot-shape-complex-myanmar-machine.hh
+ src/hb-ot-shape-complex-private.hh
+ src/hb-ot-shape-complex-thai.cc
+ src/hb-ot-shape-complex-tibetan.cc
+ src/hb-ot-shape-complex-use.cc
+ src/hb-ot-shape-complex-use-machine.hh
+ src/hb-ot-shape-complex-use-private.hh
+ src/hb-ot-shape-complex-use-table.cc
+ src/hb-ot-shape-fallback.cc
+ src/hb-ot-shape-fallback-private.hh
+ src/hb-ot-shape-normalize.cc
+ src/hb-ot-shape-normalize-private.hh
+ src/hb-ot-shape-private.hh
+ src/hb-ot-tag.h
+ src/hb-ot-var.cc src/hb-ot-var.h
+ src/hb-ot-var-avar-table.hh
+ src/hb-ot-var-fvar-table.hh
+ src/hb-ot-var-hvar-table.hh
+ src/hb-ot-var-mvar-table.hh
+ DEFINES
+ HAVE_OT
+)
+
+qt_extend_target(BundledHarfbuzz CONDITION APPLE_UIKIT
+ LIBRARIES
+ ${FWCoreGraphics}
+ ${FWCoreText}
+)
+
+qt_extend_target(BundledHarfbuzz CONDITION APPLE AND NOT APPLE_UIKIT
+ LIBRARIES
+ ${FWApplicationServices}
+)
+
+qt_extend_target(BundledHarfbuzz CONDITION SHAPERS_ISEMPTY OR SHAPERS___contains___fallback
+ SOURCES
+ src/hb-fallback-shape.cc
+ DEFINES
+ HAVE_FALLBACK
+)
diff --git a/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro b/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
index ad40b98753..54060e20ff 100644
--- a/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
+++ b/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
@@ -164,7 +164,7 @@ contains(SHAPERS, opentype) {
$$PWD/src/hb-ot-var.h
}
-contains(SHAPERS, coretext) {
+darwin {
DEFINES += HAVE_CORETEXT
SOURCES += \
@@ -173,13 +173,14 @@ contains(SHAPERS, coretext) {
HEADERS += \
$$PWD/src/hb-coretext.h
- uikit: \
+ uikit {
# On iOS/tvOS/watchOS CoreText and CoreGraphics are stand-alone frameworks
LIBS_PRIVATE += -framework CoreText -framework CoreGraphics
- else: \
+ } else {
# On Mac OS they are part of the ApplicationServices umbrella framework,
# even in 10.8 where they were also made available stand-alone.
LIBS_PRIVATE += -framework ApplicationServices
+ }
CONFIG += watchos_coretext
}
diff --git a/src/3rdparty/libpng/CMakeLists.txt b/src/3rdparty/libpng/CMakeLists.txt
new file mode 100644
index 0000000000..d1c5cea164
--- /dev/null
+++ b/src/3rdparty/libpng/CMakeLists.txt
@@ -0,0 +1,54 @@
+# Generated from libpng.pro.
+
+#####################################################################
+## BundledLibpng Generic Library:
+#####################################################################
+
+qt_add_3rdparty_library(BundledLibpng
+ STATIC
+ INSTALL
+ SOURCES
+ png.c
+ pngerror.c
+ pngget.c
+ pngmem.c
+ pngpread.c
+ pngread.c
+ pngrio.c
+ pngrtran.c
+ pngrutil.c
+ pngset.c
+ pngtrans.c
+ pngwio.c
+ pngwrite.c
+ pngwtran.c
+ pngwutil.c
+ DEFINES
+ PNG_ARM_NEON_OPT=0
+ PNG_POWERPC_VSX_OPT=0
+ PUBLIC_INCLUDE_DIRECTORIES
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+)
+qt_disable_warnings(BundledLibpng)
+qt_set_symbol_visibility_hidden(BundledLibpng)
+
+#### Keys ignored in scope 1:.:.:libpng.pro:<TRUE>:
+# TR_EXCLUDE = "$$PWD/*"
+
+## Scopes:
+#####################################################################
+
+qt_extend_target(BundledLibpng CONDITION QT_FEATURE_system_zlib
+ LIBRARIES
+ ZLIB::ZLIB
+)
+
+qt_extend_target(BundledLibpng CONDITION NOT QT_FEATURE_system_zlib
+ INCLUDE_DIRECTORIES
+ ../zlib/src
+)
+
+qt_extend_target(BundledLibpng CONDITION NOT QT_FEATURE_system_zlib AND NOT no_core_dep
+ LIBRARIES
+ Qt::Core
+)
diff --git a/src/3rdparty/pcre2/CMakeLists.txt b/src/3rdparty/pcre2/CMakeLists.txt
new file mode 100644
index 0000000000..76cddc83bc
--- /dev/null
+++ b/src/3rdparty/pcre2/CMakeLists.txt
@@ -0,0 +1,72 @@
+# Generated from pcre2.pro.
+
+#####################################################################
+## BundledPcre2 Generic Library:
+#####################################################################
+
+qt_add_3rdparty_library(BundledPcre2
+ STATIC
+ SOURCES
+ src/config.h
+ src/pcre2.h
+ src/pcre2_auto_possess.c
+ src/pcre2_chartables.c
+ src/pcre2_compile.c
+ src/pcre2_config.c
+ src/pcre2_context.c
+ src/pcre2_dfa_match.c
+ src/pcre2_error.c
+ src/pcre2_extuni.c
+ src/pcre2_find_bracket.c
+ src/pcre2_internal.h
+ src/pcre2_intmodedep.h
+ src/pcre2_jit_compile.c
+ src/pcre2_maketables.c
+ src/pcre2_match.c
+ src/pcre2_match_data.c
+ src/pcre2_newline.c
+ src/pcre2_ord2utf.c
+ src/pcre2_pattern_info.c
+ src/pcre2_script_run.c
+ src/pcre2_serialize.c
+ src/pcre2_string_utils.c
+ src/pcre2_study.c
+ src/pcre2_substitute.c
+ src/pcre2_substring.c
+ src/pcre2_tables.c
+ src/pcre2_ucd.c
+ src/pcre2_ucp.h
+ src/pcre2_valid_utf.c
+ src/pcre2_xclass.c
+ DEFINES
+ HAVE_CONFIG_H
+ PUBLIC_DEFINES
+ PCRE2_CODE_UNIT_WIDTH=16
+ PUBLIC_INCLUDE_DIRECTORIES
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
+)
+qt_disable_warnings(BundledPcre2)
+qt_set_symbol_visibility_hidden(BundledPcre2)
+
+## Scopes:
+#####################################################################
+
+qt_extend_target(BundledPcre2 CONDITION WIN32
+ PUBLIC_DEFINES
+ PCRE2_STATIC
+)
+
+qt_extend_target(BundledPcre2 CONDITION APPLE_UIKIT OR QNX OR WINRT
+ DEFINES
+ PCRE2_DISABLE_JIT
+)
+
+qt_extend_target(BundledPcre2 CONDITION (TEST_architecture_arch STREQUAL "arm") AND WIN32
+ DEFINES
+ PCRE2_DISABLE_JIT
+)
+
+qt_extend_target(BundledPcre2 CONDITION (TEST_architecture_arch STREQUAL "arm64") AND WIN32
+ DEFINES
+ PCRE2_DISABLE_JIT
+)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ce94330a90..00c2f05b29 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,4 +1,24 @@
# special case skip regeneration
+
+# Temporary fix for OpenSSL feature detection until we can provide a
+# proper implementation of additional compile tests for library dependencies
+# in configure.json
+
+find_package(OpenSSL)
+if (NOT OPENSSL_FOUND OR NOT OPENSSL_VERSION VERSION_GREATER_EQUAL "1.1.0")
+ set(QT_FEATURE_openssl_runtime OFF CACHE BOOL "" FORCE)
+ set(QT_FEATURE_openssl_linked OFF CACHE BOOL "" FORCE)
+ set(QT_FEATURE_openssl OFF CACHE BOOL "" FORCE)
+endif()
+
+# We need to include the features of a few modules before they are actually declared.
+# The feature values are used as conditions for deciding whether bundled 3rd party libraries
+# should be built.
+# The order of evaluation matters.
+qt_feature_evaluate_features("${CMAKE_CURRENT_SOURCE_DIR}/corelib/configure.cmake")
+qt_feature_evaluate_features("${CMAKE_CURRENT_SOURCE_DIR}/network/configure.cmake")
+qt_feature_evaluate_features("${CMAKE_CURRENT_SOURCE_DIR}/gui/configure.cmake")
+
add_subdirectory(3rdparty)
function(find_or_build_bootstrap_names)
diff --git a/src/corelib/.prev_CMakeLists.txt b/src/corelib/.prev_CMakeLists.txt
index d92b3272ad..a0b11a7329 100644
--- a/src/corelib/.prev_CMakeLists.txt
+++ b/src/corelib/.prev_CMakeLists.txt
@@ -236,7 +236,6 @@ qt_add_module(Core
../3rdparty/sha3
../3rdparty/tinycbor/src
LIBRARIES
- ZLIB::ZLIB
doubleconversion
PRECOMPILED_HEADER
"global/qt_pch.h"
@@ -306,8 +305,10 @@ endif()
#### Keys ignored in scope 2:.:.:corelib.pro:QT_FEATURE_gc_binaries:
# MODULE_CONFIG = "gc_binaries"
-#### Keys ignored in scope 3:.:.:corelib.pro:NOT QT_NAMESPACE_ISEMPTY:
-# MODULE_DEFINES = "QT_NAMESPACE=$$QT_NAMESPACE"
+qt_extend_target(Core CONDITION NOT QT_NAMESPACE_ISEMPTY
+ PUBLIC_DEFINES
+ QT_NAMESPACE=
+)
qt_extend_target(Core CONDITION ANDROID
SOURCES
@@ -594,6 +595,32 @@ qt_extend_target(Core CONDITION MSVC
"tools/qvector_msvc.cpp"
)
+qt_extend_target(Core CONDITION QT_FEATURE_system_zlib
+ LIBRARIES
+ ZLIB::ZLIB
+)
+
+qt_extend_target(Core CONDITION NOT QT_FEATURE_system_zlib
+ SOURCES
+ ../3rdparty/zlib/src/adler32.c
+ ../3rdparty/zlib/src/compress.c
+ ../3rdparty/zlib/src/crc32.c
+ ../3rdparty/zlib/src/deflate.c
+ ../3rdparty/zlib/src/gzclose.c
+ ../3rdparty/zlib/src/gzlib.c
+ ../3rdparty/zlib/src/gzread.c
+ ../3rdparty/zlib/src/gzwrite.c
+ ../3rdparty/zlib/src/infback.c
+ ../3rdparty/zlib/src/inffast.c
+ ../3rdparty/zlib/src/inflate.c
+ ../3rdparty/zlib/src/inftrees.c
+ ../3rdparty/zlib/src/trees.c
+ ../3rdparty/zlib/src/uncompr.c
+ ../3rdparty/zlib/src/zutil.c
+ INCLUDE_DIRECTORIES
+ ../3rdparty/zlib/src
+)
+
qt_extend_target(Core CONDITION QT_FEATURE_commandlineparser
SOURCES
tools/qcommandlineoption.cpp tools/qcommandlineoption.h
diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt
index 0d827099c8..8e236ec3f5 100644
--- a/src/corelib/CMakeLists.txt
+++ b/src/corelib/CMakeLists.txt
@@ -4,6 +4,7 @@
qt_find_package(Threads PROVIDED_TARGETS Threads::Threads)
qt_find_package(WrapDoubleConversion REQUIRED
PROVIDED_TARGETS WrapDoubleConversion::WrapDoubleConversion)
+qt_find_package(WrapPCRE2 PROVIDED_TARGETS WrapPCRE2::WrapPCRE2)
if (NOT WrapDoubleConversion_FOUND)
message(FATAL_ERROR "Your C library does not provide \
@@ -249,14 +250,12 @@ qt_add_module(Core
INCLUDE_DIRECTORIES
"${CMAKE_CURRENT_BINARY_DIR}/global" # special case
../3rdparty/tinycbor/src
- # special case: remove ../3rdparty/...
PRECOMPILED_HEADER
global/qt_pch.h
NO_PCH_SOURCES
"text/qstring_compat.cpp"
LIBRARIES
- ZLIB::ZLIB
- # double-conversion # special case
+ # double-conversion # special case remove
Qt::GlobalConfigPrivate # special case
QtHarfBuzz # special case
Threads::Threads # special case
@@ -414,8 +413,13 @@ endif()
#### Keys ignored in scope 2:.:.:corelib.pro:QT_FEATURE_gc_binaries:
# MODULE_CONFIG = "gc_binaries"
-#### Keys ignored in scope 3:.:.:corelib.pro:NOT QT_NAMESPACE_ISEMPTY:
-# MODULE_DEFINES = "QT_NAMESPACE=$$QT_NAMESPACE"
+# special case begin
+# remove because it's handled manually
+#qt_extend_target(Core CONDITION NOT QT_NAMESPACE_ISEMPTY
+# PUBLIC_DEFINES
+# QT_NAMESPACE=
+#)
+# special case end
qt_extend_target(Core CONDITION ANDROID
SOURCES
@@ -694,6 +698,32 @@ qt_extend_target(Core CONDITION MSVC
"tools/qvector_msvc.cpp"
)
+qt_extend_target(Core CONDITION QT_FEATURE_system_zlib
+ LIBRARIES
+ ZLIB::ZLIB
+)
+
+qt_extend_target(Core CONDITION NOT QT_FEATURE_system_zlib
+ SOURCES
+ ../3rdparty/zlib/src/adler32.c
+ ../3rdparty/zlib/src/compress.c
+ ../3rdparty/zlib/src/crc32.c
+ ../3rdparty/zlib/src/deflate.c
+ ../3rdparty/zlib/src/gzclose.c
+ ../3rdparty/zlib/src/gzlib.c
+ ../3rdparty/zlib/src/gzread.c
+ ../3rdparty/zlib/src/gzwrite.c
+ ../3rdparty/zlib/src/infback.c
+ ../3rdparty/zlib/src/inffast.c
+ ../3rdparty/zlib/src/inflate.c
+ ../3rdparty/zlib/src/inftrees.c
+ ../3rdparty/zlib/src/trees.c
+ ../3rdparty/zlib/src/uncompr.c
+ ../3rdparty/zlib/src/zutil.c
+ INCLUDE_DIRECTORIES
+ ../3rdparty/zlib/src
+)
+
qt_extend_target(Core CONDITION QT_FEATURE_commandlineparser
SOURCES
tools/qcommandlineoption.cpp tools/qcommandlineoption.h
@@ -1258,3 +1288,14 @@ qt_add_docs(Core
doc/qtcore.qdocconf
)
+# special case begin
+# Handle qtzlib.pro to create headers for the
+# QtZlibPrivate target, equivalent to Qt += zlib-private
+if(NOT QT_FEATURE_system_zlib)
+ qt_add_module(Zlib
+ INTERNAL_MODULE
+ HEADER_MODULE
+ NO_CONFIG_HEADER_FILE
+ )
+endif()
+# special case end
diff --git a/src/corelib/configure.cmake b/src/corelib/configure.cmake
index 78565ca340..d2b310b58d 100644
--- a/src/corelib/configure.cmake
+++ b/src/corelib/configure.cmake
@@ -16,7 +16,7 @@ qt_find_package(Libsystemd PROVIDED_TARGETS PkgConfig::Libsystemd)
qt_find_package(Atomic PROVIDED_TARGETS Atomic)
qt_find_package(WrapRt PROVIDED_TARGETS WrapRt)
qt_find_package(LTTngUST PROVIDED_TARGETS LTTng::UST)
-qt_find_package(WrapPCRE2 PROVIDED_TARGETS WrapPCRE2::WrapPCRE2)
+qt_find_package(WrapSystemPCRE2 PROVIDED_TARGETS WrapSystemPCRE2::WrapSystemPCRE2)
set_package_properties(WrapPCRE2 PROPERTIES TYPE REQUIRED)
if((QNX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
qt_find_package(PPS PROVIDED_TARGETS PPS::PPS)
@@ -642,6 +642,12 @@ qt_feature("pcre2"
DISABLE INPUT_pcre STREQUAL 'no' OR INPUT_pcre STREQUAL 'system'
)
qt_feature_config("pcre2" QMAKE_PRIVATE_CONFIG)
+qt_feature("system-pcre2" PRIVATE
+ LABEL " Using system PCRE2"
+ CONDITION WrapSystemPCRE2_FOUND
+ ENABLE INPUT_pcre STREQUAL 'system'
+ DISABLE INPUT_pcre STREQUAL 'no' OR INPUT_pcre STREQUAL 'qt'
+)
qt_feature("poll_ppoll" PRIVATE
LABEL "Native ppoll()"
CONDITION NOT WASM AND TEST_ppoll
@@ -701,7 +707,7 @@ qt_feature("regularexpression" PUBLIC
SECTION "Kernel"
LABEL "QRegularExpression"
PURPOSE "Provides an API to Perl-compatible regular expressions."
- CONDITION ON OR QT_FEATURE_pcre2
+ CONDITION QT_FEATURE_system_pcre2 OR QT_FEATURE_pcre2
)
qt_feature_definition("regularexpression" "QT_NO_REGULAREXPRESSION" NEGATE VALUE "1")
qt_feature("sharedmemory" PUBLIC
diff --git a/src/gui/.prev_CMakeLists.txt b/src/gui/.prev_CMakeLists.txt
index 885be85a41..8d1ea159f0 100644
--- a/src/gui/.prev_CMakeLists.txt
+++ b/src/gui/.prev_CMakeLists.txt
@@ -215,7 +215,6 @@ qt_add_module(Gui
../3rdparty/VulkanMemoryAllocator
LIBRARIES
Qt::CorePrivate
- ZLIB::ZLIB
PUBLIC_LIBRARIES
Qt::Core
PRIVATE_MODULE_INTERFACE
@@ -397,7 +396,7 @@ qt_extend_target(Gui CONDITION QT_FEATURE_png
SOURCES
image/qpnghandler.cpp image/qpnghandler_p.h
LIBRARIES
- PNG::PNG
+ WrapPNG::WrapPNG
)
#### Keys ignored in scope 38:.:image:image/image.pri:WIN32 AND mingw:
@@ -538,6 +537,21 @@ qt_extend_target(Gui CONDITION ANDROID AND TEST_architecture_arch STREQUAL x86_6
QT_COMPILER_SUPPORTS_SSE4_2
)
+qt_extend_target(Gui CONDITION QT_FEATURE_system_zlib
+ LIBRARIES
+ ZLIB::ZLIB
+)
+
+qt_extend_target(Gui CONDITION NOT QT_FEATURE_system_zlib
+ INCLUDE_DIRECTORIES
+ ../3rdparty/zlib/src
+)
+
+qt_extend_target(Gui CONDITION NOT QT_FEATURE_system_zlib AND NOT no_core_dep
+ LIBRARIES
+ Qt::Core
+)
+
qt_extend_target(Gui CONDITION QT_FEATURE_regularexpression
SOURCES
util/qshadergenerator.cpp util/qshadergenerator_p.h
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index f18bb0ed16..1383381c85 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -8,6 +8,8 @@ set(OpenGL_GL_PREFERENCE GLVND) # special case:
# special case begin
qt_find_package(X11_XCB)
+qt_find_package(WrapHarfbuzz PROVIDED_TARGETS WrapHarfbuzz::WrapHarfbuzz)
+qt_find_package(WrapPNG PROVIDED_TARGETS WrapPNG::WrapPNG)
if (QT_FEATURE_gui)
if (WINRT)
@@ -259,7 +261,6 @@ qt_add_module(Gui
../3rdparty/VulkanMemoryAllocator
LIBRARIES
Qt::CorePrivate
- ZLIB::ZLIB
PUBLIC_LIBRARIES
Qt::Core
PRIVATE_MODULE_INTERFACE
@@ -479,7 +480,7 @@ qt_extend_target(Gui CONDITION QT_FEATURE_png
SOURCES
image/qpnghandler.cpp image/qpnghandler_p.h
LIBRARIES
- PNG::PNG
+ WrapPNG::WrapPNG
)
#### Keys ignored in scope 38:.:image:image/image.pri:WIN32 AND mingw:
@@ -639,6 +640,21 @@ qt_extend_target(Gui CONDITION ANDROID AND TEST_architecture_arch STREQUAL x86_6
QT_COMPILER_SUPPORTS_SSE4_2
)
+qt_extend_target(Gui CONDITION QT_FEATURE_system_zlib
+ LIBRARIES
+ ZLIB::ZLIB
+)
+
+qt_extend_target(Gui CONDITION NOT QT_FEATURE_system_zlib
+ INCLUDE_DIRECTORIES
+ ../3rdparty/zlib/src
+)
+
+qt_extend_target(Gui CONDITION NOT QT_FEATURE_system_zlib AND NOT no_core_dep
+ LIBRARIES
+ Qt::Core
+)
+
qt_extend_target(Gui CONDITION QT_FEATURE_regularexpression
SOURCES
util/qshadergenerator.cpp util/qshadergenerator_p.h
@@ -679,14 +695,6 @@ qt_extend_target(Gui CONDITION QT_FEATURE_opengl AND QT_FEATURE_opengles2
opengl/qopenglfunctions_es2.cpp opengl/qopenglfunctions_es2.h
)
-# special case begin
-# Make Vulkan a global imported target, so that generator expressions involving Vulkan
-# can be correctly evaluated in any sub project directory.
-if(TARGET Vulkan::Vulkan)
- set_property(TARGET Vulkan::Vulkan PROPERTY IMPORTED_GLOBAL TRUE)
-endif()
-# special case end
-
qt_extend_target(Gui CONDITION QT_FEATURE_vulkan
SOURCES
rhi/qrhivulkan.cpp rhi/qrhivulkan_p.h
diff --git a/src/gui/configure.cmake b/src/gui/configure.cmake
index aac73e8bc2..7b3cd14ce4 100644
--- a/src/gui/configure.cmake
+++ b/src/gui/configure.cmake
@@ -26,14 +26,14 @@ qt_find_package(ATSPI2 PROVIDED_TARGETS PkgConfig::ATSPI2)
qt_find_package(DirectFB PROVIDED_TARGETS PkgConfig::DirectFB)
qt_find_package(Libdrm PROVIDED_TARGETS Libdrm::Libdrm)
qt_find_package(EGL PROVIDED_TARGETS EGL::EGL)
-qt_find_package(WrapFreetype PROVIDED_TARGETS WrapFreetype::WrapFreetype)
+qt_find_package(WrapSystemFreetype PROVIDED_TARGETS WrapSystemFreetype::WrapSystemFreetype)
set_package_properties(WrapFreetype PROPERTIES TYPE REQUIRED)
qt_find_package(Fontconfig PROVIDED_TARGETS Fontconfig::Fontconfig)
qt_find_package(gbm PROVIDED_TARGETS gbm::gbm)
-qt_find_package(WrapHarfbuzz PROVIDED_TARGETS WrapHarfbuzz::WrapHarfbuzz)
+qt_find_package(WrapSystemHarfbuzz PROVIDED_TARGETS WrapSystemHarfbuzz::WrapSystemHarfbuzz)
qt_find_package(Libinput PROVIDED_TARGETS Libinput::Libinput)
qt_find_package(JPEG PROVIDED_TARGETS JPEG::JPEG)
-qt_find_package(PNG PROVIDED_TARGETS PNG::PNG)
+qt_find_package(WrapSystemPNG PROVIDED_TARGETS WrapSystemPNG::WrapSystemPNG)
qt_find_package(Mtdev PROVIDED_TARGETS PkgConfig::Mtdev)
qt_find_package(OpenGL PROVIDED_TARGETS OpenGL::GL)
qt_find_package(GLESv2 PROVIDED_TARGETS GLESv2::GLESv2)
@@ -43,7 +43,7 @@ if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
qt_find_package(Wayland PROVIDED_TARGETS Wayland::Server)
endif()
if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
- qt_find_package(X11 PROVIDED_TARGETS X11::XCB)
+ qt_find_package(X11 PROVIDED_TARGETS X11::X11)
endif()
if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
qt_find_package(X11 PROVIDED_TARGETS ${X11_SM_LIB} ${X11_ICE_LIB})
@@ -82,6 +82,9 @@ if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
qt_find_package(XCB COMPONENTS XINERAMA PROVIDED_TARGETS XCB::XINERAMA)
endif()
if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
+ qt_find_package(X11_XCB PROVIDED_TARGETS X11::XCB)
+endif()
+if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
qt_find_package(XCB COMPONENTS XKB PROVIDED_TARGETS XCB::XKB)
endif()
if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
@@ -97,6 +100,9 @@ if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
qt_find_package(XKB 0.4.1 PROVIDED_TARGETS XKB::XKB)
endif()
if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
+ qt_find_package(XKB_COMMON_X11 0.4.1 PROVIDED_TARGETS PkgConfig::XKB_COMMON_X11)
+endif()
+if((LINUX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
qt_find_package(XRender PROVIDED_TARGETS PkgConfig::XRender)
endif()
@@ -148,7 +154,7 @@ qt_config_compile_test(egl_x11
LABEL "EGL on X11"
LIBRARIES
EGL::EGL
- X11::XCB
+ X11::X11
CODE
"// Check if EGL is compatible with X. Some EGL implementations, typically on
// embedded devices, are not intended to be used together with X. EGL support
@@ -609,10 +615,17 @@ qt_feature("freetype" PUBLIC PRIVATE
PURPOSE "Supports the FreeType 2 font engine (and its supported font formats)."
)
qt_feature_definition("freetype" "QT_NO_FREETYPE" NEGATE VALUE "1")
+qt_feature("system-freetype" PRIVATE
+ LABEL " Using system FreeType"
+ AUTODETECT NOT MSVC
+ CONDITION QT_FEATURE_freetype AND WrapSystemFreetype_FOUND
+ ENABLE INPUT_freetype STREQUAL 'system'
+ DISABLE INPUT_freetype STREQUAL 'qt'
+)
qt_feature("fontconfig" PUBLIC PRIVATE
LABEL "Fontconfig"
AUTODETECT NOT APPLE
- CONDITION NOT MSVC AND ON AND FONTCONFIG_FOUND
+ CONDITION NOT MSVC AND QT_FEATURE_system_freetype AND FONTCONFIG_FOUND
)
qt_feature_definition("fontconfig" "QT_NO_FONTCONFIG" NEGATE VALUE "1")
qt_feature("gbm"
@@ -625,6 +638,13 @@ qt_feature("harfbuzz" PUBLIC PRIVATE
CONDITION harfbuzz_FOUND
)
qt_feature_definition("harfbuzz" "QT_NO_HARFBUZZ" NEGATE VALUE "1")
+qt_feature("system-harfbuzz" PRIVATE
+ LABEL " Using system HarfBuzz"
+ AUTODETECT NOT APPLE AND NOT WIN32
+ CONDITION QT_FEATURE_harfbuzz AND WrapSystemHarfbuzz_FOUND
+ ENABLE INPUT_harfbuzz STREQUAL 'system'
+ DISABLE INPUT_harfbuzz STREQUAL 'qt'
+)
qt_feature("qqnx_imf" PRIVATE
LABEL "IMF"
CONDITION libs.imf OR FIXME
@@ -810,11 +830,24 @@ qt_feature("jpeg" PRIVATE
DISABLE INPUT_libjpeg STREQUAL 'no'
)
qt_feature_definition("jpeg" "QT_NO_IMAGEFORMAT_JPEG" NEGATE)
+qt_feature("system-jpeg" PRIVATE
+ LABEL " Using system libjpeg"
+ CONDITION QT_FEATURE_jpeg AND JPEG_FOUND
+ ENABLE INPUT_libjpeg STREQUAL 'system'
+ DISABLE INPUT_libjpeg STREQUAL 'qt'
+)
qt_feature("png" PRIVATE
LABEL "PNG"
DISABLE INPUT_libpng STREQUAL 'no'
)
qt_feature_definition("png" "QT_NO_IMAGEFORMAT_PNG" NEGATE)
+qt_feature("system-png" PRIVATE
+ LABEL " Using system libpng"
+ AUTODETECT QT_FEATURE_system_zlib
+ CONDITION QT_FEATURE_png AND WrapSystemPNG_FOUND
+ ENABLE INPUT_libpng STREQUAL 'system'
+ DISABLE INPUT_libpng STREQUAL 'qt'
+)
qt_feature("sessionmanager" PUBLIC
SECTION "Kernel"
LABEL "Session Management"
@@ -884,7 +917,7 @@ qt_feature("xkbcommon" PRIVATE
)
qt_feature("xkbcommon-x11" PRIVATE
LABEL "xkbcommon-x11"
- CONDITION QT_FEATURE_xkbcommon AND XKB_FOUND
+ CONDITION QT_FEATURE_xkbcommon AND XKB_COMMON_X11_FOUND
)
qt_feature("xlib" PRIVATE
LABEL "XLib"
diff --git a/src/network/.prev_CMakeLists.txt b/src/network/.prev_CMakeLists.txt
index afe28a2da0..8f38d07e93 100644
--- a/src/network/.prev_CMakeLists.txt
+++ b/src/network/.prev_CMakeLists.txt
@@ -50,7 +50,6 @@ qt_add_module(Network
kernel
LIBRARIES
Qt::CorePrivate
- ZLIB::ZLIB
PUBLIC_LIBRARIES
Qt::Core
PRIVATE_MODULE_INTERFACE
@@ -147,6 +146,21 @@ qt_extend_target(Network CONDITION QT_FEATURE_http
socket/qhttpsocketengine.cpp socket/qhttpsocketengine_p.h
)
+qt_extend_target(Network CONDITION QT_FEATURE_system_zlib
+ LIBRARIES
+ ZLIB::ZLIB
+)
+
+qt_extend_target(Network CONDITION NOT QT_FEATURE_system_zlib
+ INCLUDE_DIRECTORIES
+ ../3rdparty/zlib/src
+)
+
+qt_extend_target(Network CONDITION NOT QT_FEATURE_system_zlib AND NOT no_core_dep
+ LIBRARIES
+ Qt::Core
+)
+
qt_extend_target(Network CONDITION QT_FEATURE_topleveldomain
SOURCES
kernel/qtldurl.cpp kernel/qtldurl_p.h
diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt
index ca30771eb0..c455a00121 100644
--- a/src/network/CMakeLists.txt
+++ b/src/network/CMakeLists.txt
@@ -63,7 +63,6 @@ qt_add_module(Network
kernel
LIBRARIES
Qt::CorePrivate
- ZLIB::ZLIB
PUBLIC_LIBRARIES
Qt::Core
PRIVATE_MODULE_INTERFACE
@@ -160,6 +159,21 @@ qt_extend_target(Network CONDITION QT_FEATURE_http
socket/qhttpsocketengine.cpp socket/qhttpsocketengine_p.h
)
+qt_extend_target(Network CONDITION QT_FEATURE_system_zlib
+ LIBRARIES
+ ZLIB::ZLIB
+)
+
+qt_extend_target(Network CONDITION NOT QT_FEATURE_system_zlib
+ INCLUDE_DIRECTORIES
+ ../3rdparty/zlib/src
+)
+
+qt_extend_target(Network CONDITION NOT QT_FEATURE_system_zlib AND NOT no_core_dep
+ LIBRARIES
+ Qt::Core
+)
+
qt_extend_target(Network CONDITION QT_FEATURE_topleveldomain
SOURCES
kernel/qtldurl.cpp kernel/qtldurl_p.h
diff --git a/src/platformsupport/fontdatabases/CMakeLists.txt b/src/platformsupport/fontdatabases/CMakeLists.txt
index 1150ac6bef..b613d6cf6a 100644
--- a/src/platformsupport/fontdatabases/CMakeLists.txt
+++ b/src/platformsupport/fontdatabases/CMakeLists.txt
@@ -1,6 +1,6 @@
# Generated from fontdatabases.pro.
-qt_find_package(WrapFreetype) # special case
+qt_find_package(WrapFreetype PROVIDED_TARGETS WrapFreetype::WrapFreetype) # special case
qt_find_package(Fontconfig) # special case
#####################################################################
diff --git a/src/plugins/imageformats/jpeg/.prev_CMakeLists.txt b/src/plugins/imageformats/jpeg/.prev_CMakeLists.txt
index 25b5861122..a02c8f05ed 100644
--- a/src/plugins/imageformats/jpeg/.prev_CMakeLists.txt
+++ b/src/plugins/imageformats/jpeg/.prev_CMakeLists.txt
@@ -11,7 +11,6 @@ qt_add_plugin(QJpegPlugin
main.cpp main.h
qjpeghandler.cpp qjpeghandler_p.h
PUBLIC_LIBRARIES
- JPEG::JPEG
Qt::Core
Qt::CorePrivate
Qt::Gui
@@ -20,3 +19,76 @@ qt_add_plugin(QJpegPlugin
#### Keys ignored in scope 1:.:.:jpeg.pro:<TRUE>:
# OTHER_FILES = "jpeg.json"
+
+## Scopes:
+#####################################################################
+
+qt_extend_target(QJpegPlugin CONDITION QT_FEATURE_system_jpeg
+ PUBLIC_LIBRARIES
+ JPEG::JPEG
+)
+
+qt_extend_target(QJpegPlugin CONDITION NOT QT_FEATURE_system_jpeg
+ SOURCES
+ ../../../3rdparty/libjpeg/src/jaricom.c
+ ../../../3rdparty/libjpeg/src/jcapimin.c
+ ../../../3rdparty/libjpeg/src/jcapistd.c
+ ../../../3rdparty/libjpeg/src/jcarith.c
+ ../../../3rdparty/libjpeg/src/jccoefct.c
+ ../../../3rdparty/libjpeg/src/jccolor.c
+ ../../../3rdparty/libjpeg/src/jcdctmgr.c
+ ../../../3rdparty/libjpeg/src/jchuff.c
+ ../../../3rdparty/libjpeg/src/jcinit.c
+ ../../../3rdparty/libjpeg/src/jcmainct.c
+ ../../../3rdparty/libjpeg/src/jcmarker.c
+ ../../../3rdparty/libjpeg/src/jcmaster.c
+ ../../../3rdparty/libjpeg/src/jcomapi.c
+ ../../../3rdparty/libjpeg/src/jcparam.c
+ ../../../3rdparty/libjpeg/src/jcphuff.c
+ ../../../3rdparty/libjpeg/src/jcprepct.c
+ ../../../3rdparty/libjpeg/src/jcsample.c
+ ../../../3rdparty/libjpeg/src/jctrans.c
+ ../../../3rdparty/libjpeg/src/jdapimin.c
+ ../../../3rdparty/libjpeg/src/jdapistd.c
+ ../../../3rdparty/libjpeg/src/jdarith.c
+ ../../../3rdparty/libjpeg/src/jdatadst.c
+ ../../../3rdparty/libjpeg/src/jdatasrc.c
+ ../../../3rdparty/libjpeg/src/jdcoefct.c
+ ../../../3rdparty/libjpeg/src/jdcolor.c
+ ../../../3rdparty/libjpeg/src/jddctmgr.c
+ ../../../3rdparty/libjpeg/src/jdhuff.c
+ ../../../3rdparty/libjpeg/src/jdinput.c
+ ../../../3rdparty/libjpeg/src/jdmainct.c
+ ../../../3rdparty/libjpeg/src/jdmarker.c
+ ../../../3rdparty/libjpeg/src/jdmaster.c
+ ../../../3rdparty/libjpeg/src/jdmerge.c
+ ../../../3rdparty/libjpeg/src/jdphuff.c
+ ../../../3rdparty/libjpeg/src/jdpostct.c
+ ../../../3rdparty/libjpeg/src/jdsample.c
+ ../../../3rdparty/libjpeg/src/jdtrans.c
+ ../../../3rdparty/libjpeg/src/jerror.c
+ ../../../3rdparty/libjpeg/src/jfdctflt.c
+ ../../../3rdparty/libjpeg/src/jfdctfst.c
+ ../../../3rdparty/libjpeg/src/jfdctint.c
+ ../../../3rdparty/libjpeg/src/jidctflt.c
+ ../../../3rdparty/libjpeg/src/jidctfst.c
+ ../../../3rdparty/libjpeg/src/jidctint.c
+ ../../../3rdparty/libjpeg/src/jidctred.c
+ ../../../3rdparty/libjpeg/src/jmemmgr.c
+ ../../../3rdparty/libjpeg/src/jmemnobs.c
+ ../../../3rdparty/libjpeg/src/jquant1.c
+ ../../../3rdparty/libjpeg/src/jquant2.c
+ ../../../3rdparty/libjpeg/src/jsimd_none.c
+ ../../../3rdparty/libjpeg/src/jutils.c
+ INCLUDE_DIRECTORIES
+ ../../../3rdparty/libjpeg
+ ../../../3rdparty/libjpeg/src
+)
+
+qt_extend_target(QJpegPlugin CONDITION WINRT AND NOT QT_FEATURE_system_jpeg
+ DEFINES
+ NO_GETENV
+)
+
+#### Keys ignored in scope 6:.:../../../3rdparty:../../../3rdparty/libjpeg.pri:GCC:
+# QMAKE_CFLAGS_WARN_ON = "-Wno-unused-parameter" "-Wno-main"
diff --git a/src/plugins/imageformats/jpeg/CMakeLists.txt b/src/plugins/imageformats/jpeg/CMakeLists.txt
index 6aaa6538ec..13d28c7b8b 100644
--- a/src/plugins/imageformats/jpeg/CMakeLists.txt
+++ b/src/plugins/imageformats/jpeg/CMakeLists.txt
@@ -13,7 +13,6 @@ qt_add_plugin(QJpegPlugin
main.cpp main.h
qjpeghandler.cpp qjpeghandler_p.h
PUBLIC_LIBRARIES
- JPEG::JPEG
Qt::Core
Qt::CorePrivate
Qt::Gui
@@ -22,3 +21,76 @@ qt_add_plugin(QJpegPlugin
#### Keys ignored in scope 1:.:.:jpeg.pro:<TRUE>:
# OTHER_FILES = "jpeg.json"
+
+## Scopes:
+#####################################################################
+
+qt_extend_target(QJpegPlugin CONDITION QT_FEATURE_system_jpeg
+ PUBLIC_LIBRARIES
+ JPEG::JPEG
+)
+
+qt_extend_target(QJpegPlugin CONDITION NOT QT_FEATURE_system_jpeg
+ SOURCES
+ ../../../3rdparty/libjpeg/src/jaricom.c
+ ../../../3rdparty/libjpeg/src/jcapimin.c
+ ../../../3rdparty/libjpeg/src/jcapistd.c
+ ../../../3rdparty/libjpeg/src/jcarith.c
+ ../../../3rdparty/libjpeg/src/jccoefct.c
+ ../../../3rdparty/libjpeg/src/jccolor.c
+ ../../../3rdparty/libjpeg/src/jcdctmgr.c
+ ../../../3rdparty/libjpeg/src/jchuff.c
+ ../../../3rdparty/libjpeg/src/jcinit.c
+ ../../../3rdparty/libjpeg/src/jcmainct.c
+ ../../../3rdparty/libjpeg/src/jcmarker.c
+ ../../../3rdparty/libjpeg/src/jcmaster.c
+ ../../../3rdparty/libjpeg/src/jcomapi.c
+ ../../../3rdparty/libjpeg/src/jcparam.c
+ ../../../3rdparty/libjpeg/src/jcphuff.c
+ ../../../3rdparty/libjpeg/src/jcprepct.c
+ ../../../3rdparty/libjpeg/src/jcsample.c
+ ../../../3rdparty/libjpeg/src/jctrans.c
+ ../../../3rdparty/libjpeg/src/jdapimin.c
+ ../../../3rdparty/libjpeg/src/jdapistd.c
+ ../../../3rdparty/libjpeg/src/jdarith.c
+ ../../../3rdparty/libjpeg/src/jdatadst.c
+ ../../../3rdparty/libjpeg/src/jdatasrc.c
+ ../../../3rdparty/libjpeg/src/jdcoefct.c
+ ../../../3rdparty/libjpeg/src/jdcolor.c
+ ../../../3rdparty/libjpeg/src/jddctmgr.c
+ ../../../3rdparty/libjpeg/src/jdhuff.c
+ ../../../3rdparty/libjpeg/src/jdinput.c
+ ../../../3rdparty/libjpeg/src/jdmainct.c
+ ../../../3rdparty/libjpeg/src/jdmarker.c
+ ../../../3rdparty/libjpeg/src/jdmaster.c
+ ../../../3rdparty/libjpeg/src/jdmerge.c
+ ../../../3rdparty/libjpeg/src/jdphuff.c
+ ../../../3rdparty/libjpeg/src/jdpostct.c
+ ../../../3rdparty/libjpeg/src/jdsample.c
+ ../../../3rdparty/libjpeg/src/jdtrans.c
+ ../../../3rdparty/libjpeg/src/jerror.c
+ ../../../3rdparty/libjpeg/src/jfdctflt.c
+ ../../../3rdparty/libjpeg/src/jfdctfst.c
+ ../../../3rdparty/libjpeg/src/jfdctint.c
+ ../../../3rdparty/libjpeg/src/jidctflt.c
+ ../../../3rdparty/libjpeg/src/jidctfst.c
+ ../../../3rdparty/libjpeg/src/jidctint.c
+ ../../../3rdparty/libjpeg/src/jidctred.c
+ ../../../3rdparty/libjpeg/src/jmemmgr.c
+ ../../../3rdparty/libjpeg/src/jmemnobs.c
+ ../../../3rdparty/libjpeg/src/jquant1.c
+ ../../../3rdparty/libjpeg/src/jquant2.c
+ ../../../3rdparty/libjpeg/src/jsimd_none.c
+ ../../../3rdparty/libjpeg/src/jutils.c
+ INCLUDE_DIRECTORIES
+ ../../../3rdparty/libjpeg
+ ../../../3rdparty/libjpeg/src
+)
+
+qt_extend_target(QJpegPlugin CONDITION WINRT AND NOT QT_FEATURE_system_jpeg
+ DEFINES
+ NO_GETENV
+)
+
+#### Keys ignored in scope 6:.:../../../3rdparty:../../../3rdparty/libjpeg.pri:GCC:
+# QMAKE_CFLAGS_WARN_ON = "-Wno-unused-parameter" "-Wno-main"
diff --git a/src/plugins/platforms/minimal/CMakeLists.txt b/src/plugins/platforms/minimal/CMakeLists.txt
index 4f4638b640..623cf5f83a 100644
--- a/src/plugins/platforms/minimal/CMakeLists.txt
+++ b/src/plugins/platforms/minimal/CMakeLists.txt
@@ -4,6 +4,8 @@
## QMinimalIntegrationPlugin Plugin:
#####################################################################
+qt_find_package(WrapFreetype PROVIDED_TARGETS WrapFreetype::WrapFreetype) # special case
+
qt_add_plugin(QMinimalIntegrationPlugin
OUTPUT_NAME qminimal
TYPE platforms
diff --git a/src/tools/bootstrap/.prev_CMakeLists.txt b/src/tools/bootstrap/.prev_CMakeLists.txt
index e43c5eb350..be8c0e22d8 100644
--- a/src/tools/bootstrap/.prev_CMakeLists.txt
+++ b/src/tools/bootstrap/.prev_CMakeLists.txt
@@ -107,6 +107,13 @@ qt_add_module(Bootstrap
QT_VERSION_MINOR=
QT_VERSION_PATCH=
QT_VERSION_STR=\"\"
+ PUBLIC_DEFINES
+ QT_BOOTSTRAPPED
+ QT_NO_CAST_TO_ASCII
+ QT_VERSION_MAJOR=
+ QT_VERSION_MINOR=
+ QT_VERSION_PATCH=
+ QT_VERSION_STR=\"\"
INCLUDE_DIRECTORIES
..
../../3rdparty/tinycbor/src
@@ -184,7 +191,7 @@ qt_extend_target(Bootstrap CONDITION UNIX AND NOT APPLE_OSX
../../corelib/io/qstandardpaths_unix.cpp
)
-qt_extend_target(Bootstrap CONDITION CMAKE_CROSSCOMPILING
+qt_extend_target(Bootstrap CONDITION CMAKE_CROSSCOMPILING OR NOT QT_FEATURE_system_zlib
SOURCES
../../3rdparty/zlib/src/adler32.c
../../3rdparty/zlib/src/compress.c
@@ -205,7 +212,7 @@ qt_extend_target(Bootstrap CONDITION CMAKE_CROSSCOMPILING
../../3rdparty/zlib/src
)
-qt_extend_target(Bootstrap CONDITION NOT CMAKE_CROSSCOMPILING
+qt_extend_target(Bootstrap CONDITION QT_FEATURE_system_zlib AND NOT CMAKE_CROSSCOMPILING
LIBRARIES
ZLIB::ZLIB
)
diff --git a/src/tools/bootstrap/CMakeLists.txt b/src/tools/bootstrap/CMakeLists.txt
index 88b2c94038..c9deb2c4f5 100644
--- a/src/tools/bootstrap/CMakeLists.txt
+++ b/src/tools/bootstrap/CMakeLists.txt
@@ -4,8 +4,11 @@
## Bootstrap Module:
#####################################################################
-# special case:
+# special case begin
+# The bootstrap library has a few manual tweaks compared to other
+# libraries.
add_library(Bootstrap STATIC)
+# special case end
qt_extend_target(Bootstrap
SOURCES
../../corelib/codecs/qlatincodec.cpp
@@ -110,11 +113,10 @@ qt_extend_target(Bootstrap
..
../../3rdparty/tinycbor/src
PUBLIC_INCLUDE_DIRECTORIES # special case
- $<TARGET_PROPERTY:Core,INCLUDE_DIRECTORIES>
- $<TARGET_PROPERTY:Xml,INCLUDE_DIRECTORIES>
+ $<TARGET_PROPERTY:Core,INCLUDE_DIRECTORIES> # special case
+ $<TARGET_PROPERTY:Xml,INCLUDE_DIRECTORIES> # special case
PUBLIC_LIBRARIES # special case
- ZLIB::ZLIB
- Qt::Platform
+ Qt::Platform # special case
)
#### Keys ignored in scope 1:.:.:bootstrap.pro:<TRUE>:
@@ -189,34 +191,31 @@ qt_extend_target(Bootstrap CONDITION UNIX AND NOT APPLE_OSX
../../corelib/io/qstandardpaths_unix.cpp
)
-# special case begin
-# These lines need to commented out. This will never get cross_compiled!
-#qt_extend_target(Bootstrap CONDITION CMAKE_CROSSCOMPILING
-# SOURCES
-# ../../3rdparty/zlib/src/adler32.c
-# ../../3rdparty/zlib/src/compress.c
-# ../../3rdparty/zlib/src/crc32.c
-# ../../3rdparty/zlib/src/deflate.c
-# ../../3rdparty/zlib/src/gzclose.c
-# ../../3rdparty/zlib/src/gzlib.c
-# ../../3rdparty/zlib/src/gzread.c
-# ../../3rdparty/zlib/src/gzwrite.c
-# ../../3rdparty/zlib/src/infback.c
-# ../../3rdparty/zlib/src/inffast.c
-# ../../3rdparty/zlib/src/inflate.c
-# ../../3rdparty/zlib/src/inftrees.c
-# ../../3rdparty/zlib/src/trees.c
-# ../../3rdparty/zlib/src/uncompr.c
-# ../../3rdparty/zlib/src/zutil.c
-# INCLUDE_DIRECTORIES
-# ../../3rdparty/zlib/src
-#)
-#
-#qt_extend_target(Bootstrap CONDITION NOT CMAKE_CROSSCOMPILING
-# LIBRARIES
-# ZLIB::ZLIB
-#)
-# special case end
+qt_extend_target(Bootstrap CONDITION CMAKE_CROSSCOMPILING OR NOT QT_FEATURE_system_zlib
+ SOURCES
+ ../../3rdparty/zlib/src/adler32.c
+ ../../3rdparty/zlib/src/compress.c
+ ../../3rdparty/zlib/src/crc32.c
+ ../../3rdparty/zlib/src/deflate.c
+ ../../3rdparty/zlib/src/gzclose.c
+ ../../3rdparty/zlib/src/gzlib.c
+ ../../3rdparty/zlib/src/gzread.c
+ ../../3rdparty/zlib/src/gzwrite.c
+ ../../3rdparty/zlib/src/infback.c
+ ../../3rdparty/zlib/src/inffast.c
+ ../../3rdparty/zlib/src/inflate.c
+ ../../3rdparty/zlib/src/inftrees.c
+ ../../3rdparty/zlib/src/trees.c
+ ../../3rdparty/zlib/src/uncompr.c
+ ../../3rdparty/zlib/src/zutil.c
+ INCLUDE_DIRECTORIES
+ ../../3rdparty/zlib/src
+)
+
+qt_extend_target(Bootstrap CONDITION QT_FEATURE_system_zlib AND NOT CMAKE_CROSSCOMPILING
+ LIBRARIES
+ ZLIB::ZLIB
+)
qt_extend_target(Bootstrap CONDITION WIN32 AND mingw
PUBLIC_LIBRARIES
diff --git a/util/cmake/configurejson2cmake.py b/util/cmake/configurejson2cmake.py
index 9f93ecafa6..29753bf641 100755
--- a/util/cmake/configurejson2cmake.py
+++ b/util/cmake/configurejson2cmake.py
@@ -202,7 +202,25 @@ def parseLib(ctx, lib, data, cm_fh, cmake_find_packages_set):
cmake_find_packages_set.add(newlib.targetName)
- cm_fh.write(generate_find_package_info(newlib, emit_if=emit_if))
+ find_package_kwargs = {"emit_if": emit_if}
+ if newlib.is_bundled_with_qt:
+ # If a library is bundled with Qt, it has 2 FindFoo.cmake
+ # modules: WrapFoo and WrapSystemFoo.
+ # FindWrapSystemFoo.cmake will try to find the 'Foo' library in
+ # the usual CMake locations, and will create a
+ # WrapSystemFoo::WrapSystemFoo target pointing to the library.
+ #
+ # FindWrapFoo.cmake will create a WrapFoo::WrapFoo target which
+ # will link either against the WrapSystemFoo or QtBundledFoo
+ # target depending on certain feature values.
+ #
+ # Because the following qt_find_package call is for
+ # configure.cmake consumption, we make the assumption that
+ # configure.cmake is interested in finding the system library
+ # for the purpose of enabling or disabling a system_foo feature.
+ find_package_kwargs["use_system_package_name"] = True
+
+ cm_fh.write(generate_find_package_info(newlib, **find_package_kwargs))
def lineify(label, value, quote=True):
@@ -225,12 +243,7 @@ def map_condition(condition):
return "OFF"
assert isinstance(condition, str)
- mapped_features = {
- "gbm": "gbm_FOUND",
- "system-xcb": "ON",
- "system-freetype": "ON",
- "system-pcre2": "ON",
- }
+ mapped_features = {"gbm": "gbm_FOUND", "system-xcb": "ON"}
# Turn foo != "bar" into (NOT foo STREQUAL 'bar')
condition = re.sub(r"(.+)\s*!=\s*('.+')", "(! \\1 == \\2)", condition)
@@ -259,6 +272,12 @@ def map_condition(condition):
if libmapping.appendFoundSuffix:
substitution += "_FOUND"
+ # Assume that feature conditions are interested whether
+ # a system library is found, rather than the bundled one
+ # which we always know we can build.
+ if libmapping.is_bundled_with_qt:
+ substitution = substitution.replace("Wrap", "WrapSystem")
+
elif match.group(1) == "features":
feature = match.group(2)
if feature in mapped_features:
@@ -748,14 +767,8 @@ def parseFeature(ctx, feature, data, cm_fh):
"disable": "NOT TEST_sun_iconv",
},
"system-doubleconversion": None, # No system libraries anymore!
- "system-freetype": None,
- "system-harfbuzz": None,
- "system-jpeg": None,
- "system-pcre2": None,
- "system-png": None,
"system-sqlite": None,
"system-xcb": None,
- "system-zlib": None,
"tiff": {"condition": "QT_FEATURE_imageformatplugin AND TIFF_FOUND"},
"use_gold_linker": None,
"verifyspec": None, # qmake specific...
diff --git a/util/cmake/helper.py b/util/cmake/helper.py
index b5f38617b1..9b9f347fff 100644
--- a/util/cmake/helper.py
+++ b/util/cmake/helper.py
@@ -41,6 +41,7 @@ class LibraryMapping:
extra: typing.List[str] = [],
appendFoundSuffix: bool = True,
emit_if: str = "",
+ is_bundled_with_qt: bool = False,
) -> None:
self.soName = soName
self.packageName = packageName
@@ -49,6 +50,9 @@ class LibraryMapping:
self.extra = extra
self.targetName = targetName
+ # True if qt bundles the library sources as part of Qt.
+ self.is_bundled_with_qt = is_bundled_with_qt
+
# if emit_if is non-empty, the generated find_package call
# for a library will be surrounded by this condition.
self.emit_if = emit_if
@@ -369,8 +373,10 @@ _qt_library_map = [
LibraryMapping("axcontainer", "Qt6", "Qt::AxContainer", extra=["COMPONENTS", "AxContainer"]),
LibraryMapping(
"webkitwidgets", "Qt6", "Qt::WebKitWidgets", extra=["COMPONENTS", "WebKitWidgets"]
+ ),
+ LibraryMapping(
+ "zlib", "Qt6", "Qt::Zlib", extra=["COMPONENTS", "Zlib"]
)
- # qtzlib: No longer supported.
]
# Note that the library map is adjusted dynamically further down.
@@ -391,13 +397,21 @@ _library_map = [
LibraryMapping(
"fontconfig", "Fontconfig", "Fontconfig::Fontconfig", resultVariable="FONTCONFIG"
),
- LibraryMapping("freetype", "WrapFreetype", "WrapFreetype::WrapFreetype", extra=["REQUIRED"]),
+ LibraryMapping(
+ "freetype",
+ "WrapFreetype",
+ "WrapFreetype::WrapFreetype",
+ extra=["REQUIRED"],
+ is_bundled_with_qt=True,
+ ),
LibraryMapping("gbm", "gbm", "gbm::gbm"),
LibraryMapping("glib", "GLIB2", "GLIB2::GLIB2"),
LibraryMapping("gnu_iconv", None, None),
LibraryMapping("gtk3", "GTK3", "PkgConfig::GTK3"),
LibraryMapping("gssapi", "GSSAPI", "GSSAPI::GSSAPI"),
- LibraryMapping("harfbuzz", "WrapHarfbuzz", "WrapHarfbuzz::WrapHarfbuzz"),
+ LibraryMapping(
+ "harfbuzz", "WrapHarfbuzz", "WrapHarfbuzz::WrapHarfbuzz", is_bundled_with_qt=True
+ ),
LibraryMapping("host_dbus", None, None),
LibraryMapping(
"icu", "ICU", "ICU::i18n ICU::uc ICU::data", extra=["COMPONENTS", "i18n", "uc", "data"]
@@ -409,7 +423,7 @@ _library_map = [
LibraryMapping("libdl", None, "${CMAKE_DL_LIBS}"),
LibraryMapping("libinput", "Libinput", "Libinput::Libinput"),
LibraryMapping("libjpeg", "JPEG", "JPEG::JPEG"), # see also jpeg
- LibraryMapping("libpng", "PNG", "PNG::PNG"),
+ LibraryMapping("libpng", "WrapPNG", "WrapPNG::WrapPNG", is_bundled_with_qt=True),
LibraryMapping("libproxy", "Libproxy", "PkgConfig::Libproxy"),
LibraryMapping("librt", "WrapRt", "WrapRt"),
LibraryMapping("libudev", "Libudev", "PkgConfig::Libudev"),
@@ -428,7 +442,9 @@ _library_map = [
),
LibraryMapping("openssl", "OpenSSL", "OpenSSL::SSL"),
LibraryMapping("oci", "Oracle", "Oracle::OCI"),
- LibraryMapping("pcre2", "WrapPCRE2", "WrapPCRE2::WrapPCRE2", extra=["REQUIRED"]),
+ LibraryMapping(
+ "pcre2", "WrapPCRE2", "WrapPCRE2::WrapPCRE2", extra=["REQUIRED"], is_bundled_with_qt=True
+ ),
LibraryMapping("posix_iconv", None, None),
LibraryMapping("pps", "PPS", "PPS::PPS"),
LibraryMapping("psql", "PostgreSQL", "PostgreSQL::PostgreSQL"),
@@ -532,7 +548,7 @@ _library_map = [
LibraryMapping("xkbcommon", "XKB", "XKB::XKB", extra=["0.4.1"]),
LibraryMapping("xlib", "X11", "X11::X11"),
LibraryMapping("xrender", "XRender", "PkgConfig::XRender"),
- LibraryMapping("zlib", "ZLIB", "ZLIB::ZLIB", extra=["REQUIRED"]),
+ LibraryMapping("zlib", "ZLIB", "ZLIB::ZLIB"),
LibraryMapping("zstd", "ZSTD", "ZSTD::ZSTD"),
LibraryMapping("tiff", "TIFF", "TIFF::TIFF"),
LibraryMapping("webp", "WrapWebP", "WrapWebP::WrapWebP"),
@@ -671,7 +687,12 @@ def map_3rd_party_library(lib: str) -> str:
def generate_find_package_info(
- lib: LibraryMapping, use_qt_find_package: bool = True, *, indent: int = 0, emit_if: str = ""
+ lib: LibraryMapping,
+ use_qt_find_package: bool = True,
+ *,
+ indent: int = 0,
+ emit_if: str = "",
+ use_system_package_name: bool = False,
) -> str:
isRequired = False
@@ -688,6 +709,13 @@ def generate_find_package_info(
if cmake_target_name.endswith("_nolink") or cmake_target_name.endswith("/nolink"):
cmake_target_name = cmake_target_name[:-7]
+ initial_package_name = lib.packageName
+ package_name = initial_package_name
+ if use_system_package_name:
+ replace_args = ["Wrap", "WrapSystem"]
+ package_name = package_name.replace(*replace_args)
+ cmake_target_name = cmake_target_name.replace(*replace_args)
+
if cmake_target_name and use_qt_find_package:
extra += ["PROVIDED_TARGETS", cmake_target_name]
@@ -697,17 +725,19 @@ def generate_find_package_info(
if use_qt_find_package:
if extra:
- result = f"{ind}qt_find_package({lib.packageName} {' '.join(extra)})\n"
+ result = f"{ind}qt_find_package({package_name} {' '.join(extra)})\n"
else:
- result = f"{ind}qt_find_package({lib.packageName})\n"
+ result = f"{ind}qt_find_package({package_name})\n"
if isRequired:
- result += f"{ind}set_package_properties({lib.packageName} PROPERTIES TYPE REQUIRED)\n"
+ result += (
+ f"{ind}set_package_properties({initial_package_name} PROPERTIES TYPE REQUIRED)\n"
+ )
else:
if extra:
- result = f"{ind}find_package({lib.packageName} {' '.join(extra)})\n"
+ result = f"{ind}find_package({package_name} {' '.join(extra)})\n"
else:
- result = f"{ind}find_package({lib.packageName})\n"
+ result = f"{ind}find_package({package_name})\n"
# If a package should be found only in certain conditions, wrap
# the find_package call within that condition.
diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py
index b46985e582..fca5d4fceb 100755
--- a/util/cmake/pro2cmake.py
+++ b/util/cmake/pro2cmake.py
@@ -1556,8 +1556,11 @@ def map_condition(condition: str) -> str:
part = f"TARGET {map_qt_library(feature.group(2))}"
else:
feature_name = featureName(feature.group(2))
- if feature_name.startswith("system_") and is_known_3rd_party_library(
- feature_name[7:]
+ if (
+ feature_name.startswith("system_")
+ and is_known_3rd_party_library(feature_name[7:])
+ and not feature_name.startswith("system_jpeg")
+ and not feature_name.startswith("system_zlib")
):
part = "ON"
elif feature == "dlopen":
@@ -1955,14 +1958,46 @@ def write_defines(
write_list(cm_fh, defines, cmake_parameter, indent, footer=footer)
-def write_include_paths(
+def write_3rd_party_defines(
cm_fh: IO[str], scope: Scope, cmake_parameter: str, *, indent: int = 0, footer: str = ""
):
- includes = [i.rstrip("/") or ("/") for i in scope.get_files("INCLUDEPATH")]
+ defines = scope.expand("MODULE_DEFINES")
+ write_list(cm_fh, defines, cmake_parameter, indent, footer=footer)
+
+def get_include_paths_helper(scope: Scope, include_var_name: str) -> List[str]:
+ includes = [i.rstrip("/") or ("/") for i in scope.get_files(include_var_name)]
+ return includes
+
+
+def write_include_paths(
+ cm_fh: IO[str], scope: Scope, cmake_parameter: str, *, indent: int = 0, footer: str = ""
+):
+ includes = get_include_paths_helper(scope, "INCLUDEPATH")
write_list(cm_fh, includes, cmake_parameter, indent, footer=footer)
+def write_3rd_party_include_paths(
+ cm_fh: IO[str], scope: Scope, cmake_parameter: str, *, indent: int = 0, footer: str = ""
+):
+ # Used in qt_helper_lib.prf.
+ includes = get_include_paths_helper(scope, "MODULE_INCLUDEPATH")
+
+ # Wrap the includes in BUILD_INTERFACE generator expression, because
+ # the include paths point to a source dir, and CMake will error out
+ # when trying to create consumable exported targets.
+ processed_includes = []
+ for i in includes:
+ # CMake generator expressions don't seem to like relative paths.
+ # Make them absolute relative to the source dir.
+ if not os.path.isabs(i) and not i.startswith("$"):
+ i = f"${{CMAKE_CURRENT_SOURCE_DIR}}/{i}"
+ i = f"$<BUILD_INTERFACE:{i}>"
+ processed_includes.append(i)
+
+ write_list(cm_fh, processed_includes, cmake_parameter, indent, footer=footer)
+
+
def write_compile_options(
cm_fh: IO[str], scope: Scope, cmake_parameter: str, *, indent: int = 0, footer: str = ""
):
@@ -2051,8 +2086,12 @@ def write_sources_section(
write_defines(cm_fh, scope, "DEFINES", indent=indent + 1)
+ write_3rd_party_defines(cm_fh, scope, "PUBLIC_DEFINES", indent=indent + 1)
+
write_include_paths(cm_fh, scope, "INCLUDE_DIRECTORIES", indent=indent + 1)
+ write_3rd_party_include_paths(cm_fh, scope, "PUBLIC_INCLUDE_DIRECTORIES", indent=indent + 1)
+
write_library_section(cm_fh, scope, indent=indent, known_libraries=known_libraries)
write_compile_options(cm_fh, scope, "COMPILE_OPTIONS", indent=indent + 1)
@@ -2332,6 +2371,11 @@ def write_repc_files(cm_fh: IO[str], target: str, scope: Scope, indent: int = 0)
cm_fh.write(")\n")
+def write_generic_cmake_command(cm_fh: IO[str], command_name: str, arguments: List[str]):
+ arguments_str = " ".join(arguments)
+ cm_fh.write(f"{command_name}({arguments_str})\n")
+
+
def expand_project_requirements(scope: Scope, skip_message: bool = False) -> str:
requirements = ""
for requirement in scope.get("_REQUIREMENTS"):
@@ -2785,6 +2829,12 @@ def write_main_part(
write_wayland_part(cm_fh, name, scopes[0], indent)
+ if "warn_off" in scope.get("CONFIG"):
+ write_generic_cmake_command(cm_fh, "qt_disable_warnings", [name])
+
+ if "hide_symbols" in scope.get("CONFIG"):
+ write_generic_cmake_command(cm_fh, "qt_set_symbol_visibility_hidden", [name])
+
ignored_keys_report = write_ignored_keys(scopes[0], spaces(indent))
if ignored_keys_report:
cm_fh.write(ignored_keys_report)
@@ -2808,14 +2858,18 @@ def write_main_part(
def write_3rdparty_library(cm_fh: IO[str], scope: Scope, *, indent: int = 0) -> str:
-
# Remove default QT libs.
scope._append_operation("QT", RemoveOperation(["core", "gui"]))
target_name = re.sub(r"^qt", "", scope.TARGET)
target_name = target_name.replace("-", "_")
- library_type = ""
+ # Capitalize the first letter for a nicer name.
+ target_name = target_name.title()
+
+ # Prefix with Bundled, to avoid possible duplicate target names
+ # e.g. "BundledFreetype" instead of "freetype".
+ target_name = f"Bundled{target_name}"
if "dll" in scope.get("CONFIG"):
library_type = "SHARED"
@@ -2827,6 +2881,9 @@ def write_3rdparty_library(cm_fh: IO[str], scope: Scope, *, indent: int = 0) ->
if library_type:
extra_lines.append(library_type)
+ if "installed" in scope.get("CONFIG"):
+ extra_lines.append("INSTALL")
+
write_main_part(
cm_fh,
target_name,