Collect resource objects of plugins and their dependencies in finalizer

Resource objects might be linked to plugins. Since some plugins may
be present in LINK_LIBRARIES as the complex genexes, need to collect
them explicitly and iterate over plugin targets to find resource object
libraries that need to be exposed to end-point target executable.

Amends a1fd4f51ada82854f35654158a334454e760a9f7

Change-Id: Icd85f54f7bf9d1b7e3382caa5d9aa62449b6adb8
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
Alexey Edelev 2021-06-02 15:02:03 +02:00
parent 2e02ae9497
commit a25027eecb

View File

@ -33,7 +33,16 @@ endfunction()
function(__qt_internal_collect_dependency_resource_objects target out_var) function(__qt_internal_collect_dependency_resource_objects target out_var)
set_property(GLOBAL PROPERTY _qt_resource_processed_targets "") set_property(GLOBAL PROPERTY _qt_resource_processed_targets "")
__qt_internal_collect_resource_objects_recursively(resource_targets ${target} ${target}) __qt_internal_collect_resource_objects_recursively(resource_targets ${target} ${target})
# Collect resource objects of plugins and plugin dependencies.
__qt_internal_collect_plugin_targets_from_dependencies(${target} plugin_targets)
__qt_internal_collect_dependency_plugin_resource_objects(${target}
"${plugin_targets}"
plugin_resource_objects
)
set_property(GLOBAL PROPERTY _qt_resource_processed_targets "") set_property(GLOBAL PROPERTY _qt_resource_processed_targets "")
list(REMOVE_DUPLICATES resource_targets) list(REMOVE_DUPLICATES resource_targets)
@ -42,7 +51,25 @@ function(__qt_internal_collect_dependency_resource_objects target out_var)
list(PREPEND resource_objects "$<TARGET_OBJECTS:${dep}>") list(PREPEND resource_objects "$<TARGET_OBJECTS:${dep}>")
endforeach() endforeach()
set(${out_var} "${resource_objects}" PARENT_SCOPE) set(${out_var} "${plugin_resource_objects};${resource_objects}" PARENT_SCOPE)
endfunction()
function(__qt_internal_collect_dependency_plugin_resource_objects target plugin_targets out_var)
set(plugin_resource_objects "")
foreach(plugin_target IN LISTS plugin_targets)
__qt_internal_collect_resource_objects_recursively(plugin_resource_targets
"${QT_CMAKE_EXPORT_NAMESPACE}::${plugin_target}"
${target}
)
__qt_internal_get_static_plugin_condition_genex("${plugin_target}" plugin_condition)
foreach(plugin_resource_target IN LISTS plugin_resource_targets)
list(APPEND plugin_resource_objects
"$<${plugin_condition}:$<TARGET_OBJECTS:${plugin_resource_target}>>"
)
endforeach()
endforeach()
set(${out_var} "${plugin_resource_objects}" PARENT_SCOPE)
endfunction() endfunction()
function(__qt_internal_collect_resource_objects_recursively out_var target initial_target) function(__qt_internal_collect_resource_objects_recursively out_var target initial_target)
@ -77,7 +104,10 @@ function(__qt_internal_collect_resource_objects_recursively out_var target initi
if(is_qt_resource) if(is_qt_resource)
list(APPEND resource_targets ${lib}) list(APPEND resource_targets ${lib})
else() else()
__qt_internal_collect_resource_objects_recursively(next_level_resources ${lib} ${initial_target}) __qt_internal_collect_resource_objects_recursively(next_level_resources
${lib}
${initial_target}
)
list(APPEND resource_targets ${next_level_resources}) list(APPEND resource_targets ${next_level_resources})
endif() endif()
endif() endif()