diff options
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, |