From 7298537c3ebe6cdb138aa5e9754291cd754a7235 Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Tue, 22 Feb 2022 16:57:00 +0100 Subject: [PATCH] CMake: Fix exclusion of QtFoo in QtBarDepends for 3rd party libs When configuring a static Qt with the -qt-zlib option and the build system creates a 3rd party header module QtZlib, syncqt does not generate a QtZlib header file that would include all its public headers. Then when the QtSvgDepends header is generated, it would add an #include which would break compilation of the QtSvg PCH file (which compiles QtSvgDepends). We have logic to exclude addition of headers from regular 3rd party static libraries, but not header only 3rd party libraries. Adjust the code to handle header-only 3rd party libraries, as well as make sure it works across repos by exporting the relevant properties. As a drive-by, also rename and export some other informational properties. Amends af00402d6446c0f8f085a2a482fc83c4318aa457 Amends 6fdeaea24f9035ad53ba2548a9467b3264cf01ad Amends be2745e4788cecb0d3122081e3328e4b66923609 Change-Id: I087f50b193dd845e4a5ec906e8851d63122faf80 Reviewed-by: Alexey Edelev (cherry picked from commit 56abd7e4e0ac4a382df01575446138809d031da5) --- cmake/Qt3rdPartyLibraryHelpers.cmake | 9 +++++-- cmake/QtModuleHelpers.cmake | 4 ++- cmake/QtPostProcessHelpers.cmake | 39 ++++++++++++++-------------- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/cmake/Qt3rdPartyLibraryHelpers.cmake b/cmake/Qt3rdPartyLibraryHelpers.cmake index 1cc5ebea44c..57eab93618c 100644 --- a/cmake/Qt3rdPartyLibraryHelpers.cmake +++ b/cmake/Qt3rdPartyLibraryHelpers.cmake @@ -181,9 +181,14 @@ function(qt_internal_add_3rdparty_library target) ARCHIVE_OUTPUT_DIRECTORY "${QT_BUILD_DIR}/${INSTALL_LIBDIR}" VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} - QT_MODULE_IS_3RDPARTY_LIBRARY TRUE - QT_MODULE_SKIP_DEPENDS_INCLUDE TRUE + _qt_module_is_3rdparty_library TRUE + _qt_module_skip_depends_include TRUE ) + set_property(TARGET "${target}" + APPEND PROPERTY EXPORT_PROPERTIES _qt_module_is_3rdparty_library) + set_property(TARGET "${target}" + APPEND PROPERTY EXPORT_PROPERTIES _qt_module_skip_depends_include) + qt_handle_multi_config_output_dirs("${target}") set_target_properties(${target} PROPERTIES diff --git a/cmake/QtModuleHelpers.cmake b/cmake/QtModuleHelpers.cmake index c6bf6f90110..7053a1f3888 100644 --- a/cmake/QtModuleHelpers.cmake +++ b/cmake/QtModuleHelpers.cmake @@ -255,7 +255,9 @@ function(qt_internal_add_module target) endif() if (arg_SKIP_DEPENDS_INCLUDE) - set_target_properties(${target} PROPERTIES QT_MODULE_SKIP_DEPENDS_INCLUDE TRUE) + set_target_properties(${target} PROPERTIES _qt_module_skip_depends_include TRUE) + set_property(TARGET "${target}" APPEND PROPERTY + EXPORT_PROPERTIES _qt_module_skip_depends_include) endif() if(is_framework) set_target_properties(${target} PROPERTIES diff --git a/cmake/QtPostProcessHelpers.cmake b/cmake/QtPostProcessHelpers.cmake index 12e44113b29..83155cd97d9 100644 --- a/cmake/QtPostProcessHelpers.cmake +++ b/cmake/QtPostProcessHelpers.cmake @@ -178,24 +178,25 @@ function(qt_internal_create_module_depends_file target) # Normalize module by stripping leading "Qt::" and trailing "Private" if (dep MATCHES "(Qt|${QT_CMAKE_EXPORT_NAMESPACE})::([-_A-Za-z0-9]+)") set(dep "${CMAKE_MATCH_2}") - if (TARGET Qt::${dep}) - get_target_property(dep_type Qt::${dep} TYPE) - if (NOT dep_type STREQUAL "INTERFACE_LIBRARY") - get_target_property(skip_module_depends_include Qt::${dep} QT_MODULE_SKIP_DEPENDS_INCLUDE) - if (skip_module_depends_include) - continue() - endif() - else() - get_target_property(is_versionless_target Qt::${dep} _qt_is_versionless_target) - if(is_versionless_target) - get_target_property(module_has_headers ${QT_CMAKE_EXPORT_NAMESPACE}::${dep} - _qt_module_has_headers) - else() - get_target_property(module_has_headers Qt::${dep} _qt_module_has_headers) - endif() - if (NOT module_has_headers) - continue() - endif() + set(real_dep_target "Qt::${dep}") + + if(TARGET "${real_dep_target}") + get_target_property(is_versionless_target "${real_dep_target}" + _qt_is_versionless_target) + if(is_versionless_target) + set(real_dep_target "${QT_CMAKE_EXPORT_NAMESPACE}::${dep}") + endif() + + get_target_property(skip_module_depends_include "${real_dep_target}" + _qt_module_skip_depends_include) + if(skip_module_depends_include) + continue() + endif() + + get_target_property(module_has_headers "${real_dep_target}" + _qt_module_has_headers) + if(NOT module_has_headers) + continue() endif() endif() endif() @@ -742,7 +743,7 @@ function(qt_internal_create_config_file_for_standalone_tests) continue() endif() - get_target_property(is_3rd_party "${m}" QT_MODULE_IS_3RDPARTY_LIBRARY) + get_target_property(is_3rd_party "${m}" _qt_module_is_3rdparty_library) if(NOT is_3rd_party) list(APPEND modules "${m}") endif()