diff options
-rw-r--r-- | cmake/QtPublicTargetHelpers.cmake | 33 | ||||
-rw-r--r-- | src/corelib/Qt6CoreMacros.cmake | 2 |
2 files changed, 34 insertions, 1 deletions
diff --git a/cmake/QtPublicTargetHelpers.cmake b/cmake/QtPublicTargetHelpers.cmake index e0be0b740e7..27f7c3acf79 100644 --- a/cmake/QtPublicTargetHelpers.cmake +++ b/cmake/QtPublicTargetHelpers.cmake @@ -61,10 +61,41 @@ function(_qt_internal_work_around_autogen_discarded_dependencies target) endif() endforeach() if(final_libraries) - set_property(TARGET ${target} APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "${final_libraries}") + _qt_internal_append_to_target_property_without_duplicates("${target}" + AUTOGEN_TARGET_DEPENDS ${final_libraries}) endif() endfunction() +# This function is similar to _qt_internal_work_around_autogen_discarded_dependencies +# but it instead queries the libs to process from the target's LINK_LIBRARIES and +# INTERFACE_LINK_LIBRARIES. +# It only applies the logic while building Qt itself. +# It's meant to be used in public API like qt_finalize_target, so that the workaround is applied +# to examples that are built as part of the qt build tree. +function(_qt_internal_work_around_autogen_discarded_dependencies_from_target_libs target) + if(NOT QT_BUILDING_QT) + return() + endif() + + set(libraries "") + + get_target_property(link_libs "${target}" LINK_LIBRARIES) + if(link_libs) + list(APPEND libraries "${link_libs}") + endif() + get_target_property(interface_link_libs "${target}" INTERFACE_LINK_LIBRARIES) + + if(interface_link_libs) + list(APPEND libraries "${interface_link_libs}") + endif() + + if(NOT libraries) + return() + endif() + + _qt_internal_work_around_autogen_discarded_dependencies("${target}" ${libraries}) +endfunction() + # Tests if linker could resolve circular dependencies between object files and static libraries. function(__qt_internal_static_link_order_public_test result) # We could trust iOS linker diff --git a/src/corelib/Qt6CoreMacros.cmake b/src/corelib/Qt6CoreMacros.cmake index fd938f0b1c2..3f5f9180805 100644 --- a/src/corelib/Qt6CoreMacros.cmake +++ b/src/corelib/Qt6CoreMacros.cmake @@ -831,6 +831,8 @@ function(qt6_finalize_target target) endif() endif() + _qt_internal_work_around_autogen_discarded_dependencies_from_target_libs("${target}") + get_target_property(is_immediately_finalized "${target}" _qt_is_immediately_finalized) get_target_property(uses_automoc ${target} AUTOMOC) if(uses_automoc) |