From b56dc55c3a5c4164ad84fd61c44638a3cb196978 Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Wed, 27 May 2020 17:36:11 +0200 Subject: [PATCH] CMake: Fix qmake .depends info generated for module_private.pri files Previously we checked the LINK_LIBRARIES property of the main module target, but we should instead use the values of INTERFACE_LINK_LIBRARIES set on the FooPrivate module. Because both versionless targets and private targets are interface libraries, we need to properly differentiate between them when following versionless targets to their main associated target. To do that, instead of using string comparison, export an additional private _qt_is_versionless_target property, and query that. Also make sure to set and export the _qt_config_module_name property on the FooPrivate targets. Also make sure to APPEND to EXPORT_PROPERTIES rather than override (looking at you QtFeature.cmake). Task-number: QTBUG-75666 Change-Id: Ia3261e218840e9f5217ab49755e8c876560e294d Reviewed-by: Cristian Adam --- cmake/QtBuild.cmake | 19 +++++++++++++------ cmake/QtFeature.cmake | 2 +- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index f5c97abf9b..ebd3d40abd 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -708,9 +708,11 @@ function(qt_get_direct_module_dependencies target out_var) continue() endif() get_target_property(lib_type ${lib} TYPE) - if (lib_type STREQUAL "INTERFACE_LIBRARY" AND "${lib}" MATCHES "^Qt::(.*)") + get_target_property(is_versionless_target ${lib} _qt_is_versionless_target) + if (lib_type STREQUAL "INTERFACE_LIBRARY" AND is_versionless_target) # Found a version-less target like Qt::Core outside of qtbase. # Skip this one and use what this target points to, e.g. Qt6::Core. + # Make sure to process Private interface libraries as-is. get_target_property(ifacelibs ${lib} INTERFACE_LINK_LIBRARIES) list(PREPEND libs ${ifacelibs}) continue() @@ -849,9 +851,8 @@ QT_MODULES += ${config_module_name} set(private_dependencies "") if(NOT arg_HEADER_MODULE) - qt_get_direct_module_dependencies(${target} private_dependencies) + qt_get_direct_module_dependencies(${target}Private private_dependencies PUBLIC) endif() - list(APPEND private_dependencies "${config_module_name}") list(JOIN private_dependencies " " private_dependencies) file(GENERATE @@ -1189,7 +1190,12 @@ function(qt_internal_export_modern_cmake_config_targets_file) add_library("${target}Versionless" INTERFACE) target_link_libraries("${target}Versionless" INTERFACE "${target}") - set_target_properties("${target}Versionless" PROPERTIES EXPORT_NAME "${target}") + set_target_properties("${target}Versionless" PROPERTIES + EXPORT_NAME "${target}" + _qt_is_versionless_target "TRUE") + set_property(TARGET "${target}Versionless" + APPEND PROPERTY EXPORT_PROPERTIES _qt_is_versionless_target) + qt_install(TARGETS "${target}Versionless" EXPORT ${export_name}) endforeach() qt_install(EXPORT ${export_name} NAMESPACE Qt:: DESTINATION "${__arg_CONFIG_INSTALL_DIR}") @@ -2239,6 +2245,7 @@ function(qt_add_module target) set_target_properties(${target} PROPERTIES _qt_config_module_name "${arg_CONFIG_MODULE_NAME}" ${property_prefix}QT_QMAKE_MODULE_CONFIG "${arg_QMAKE_MODULE_CONFIG}") + set_property(TARGET "${target}" APPEND PROPERTY EXPORT_PROPERTIES _qt_config_module_name) set(is_framework 0) if(QT_FEATURE_framework AND NOT ${arg_HEADER_MODULE} AND NOT ${arg_STATIC}) @@ -2282,6 +2289,8 @@ function(qt_add_module target) qt_internal_add_target_aliases("${target_private}") set_target_properties(${target_private} PROPERTIES _qt_config_module_name ${arg_CONFIG_MODULE_NAME}_private) + set_property(TARGET "${target_private}" APPEND PROPERTY + EXPORT_PROPERTIES _qt_config_module_name) endif() if(NOT arg_HEADER_MODULE) @@ -2509,8 +2518,6 @@ function(qt_add_module target) set_property(TARGET "${target}" APPEND PROPERTY PRIVATE_HEADER "${CMAKE_CURRENT_BINARY_DIR}/qt${arg_CONFIG_MODULE_NAME}-config_p.h") endif() - set_property(TARGET ${target} APPEND PROPERTY EXPORT_PROPERTIES _qt_config_module_name) - if(NOT arg_HEADER_MODULE) if(DEFINED module_headers_private) qt_internal_add_linker_version_script("${target}" PRIVATE_HEADERS ${module_headers_private} ${module_headers_qpa}) diff --git a/cmake/QtFeature.cmake b/cmake/QtFeature.cmake index 52475dfa85..dbe3553a5f 100644 --- a/cmake/QtFeature.cmake +++ b/cmake/QtFeature.cmake @@ -539,7 +539,7 @@ function(qt_feature_module_end) set(propertyPrefix "INTERFACE_") else() set(propertyPrefix "") - set_target_properties("${target}" PROPERTIES EXPORT_PROPERTIES "QT_ENABLED_PUBLIC_FEATURES;QT_DISABLED_PUBLIC_FEATURES;QT_ENABLED_PRIVATE_FEATURES;QT_DISABLED_PRIVATE_FEATURES;MODULE_PLUGIN_TYPES;QT_PLUGINS;QT_QMAKE_PUBLIC_CONFIG;QT_QMAKE_PRIVATE_CONFIG;QT_QMAKE_PUBLIC_QT_CONFIG") + set_property(TARGET "${target}" APPEND PROPERTY EXPORT_PROPERTIES "QT_ENABLED_PUBLIC_FEATURES;QT_DISABLED_PUBLIC_FEATURES;QT_ENABLED_PRIVATE_FEATURES;QT_DISABLED_PRIVATE_FEATURES;MODULE_PLUGIN_TYPES;QT_PLUGINS;QT_QMAKE_PUBLIC_CONFIG;QT_QMAKE_PRIVATE_CONFIG;QT_QMAKE_PUBLIC_QT_CONFIG") endif() foreach(visibility public private) string(TOUPPER "${visibility}" capitalVisibility)