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 <cristian.adam@qt.io>bb10
parent
e189126f1a
commit
b56dc55c3a
|
|
@ -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})
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue