From 8977feb64789b13f3b25a6e7d2b330cd629d87b4 Mon Sep 17 00:00:00 2001 From: Alexey Edelev Date: Fri, 1 Nov 2024 13:53:31 +0100 Subject: [PATCH] Introduce a new way of collecting plugin targets Use the propagated interface property to collect the plugins for the android deployment. This method allows collecting plugins from the Qt libraries without using walk-libs approach with all its disadvantages. The only limitation is the CMake version, since custom transitive properties support was added in the CMake version 3.30. For now it's only uses in Android deployment, will be spread wider in followup commits. Fixes: QTBUG-129302 Change-Id: I8d5ae7342d57d215021ad02c51dda44f88c9a920 Reviewed-by: Assam Boudjelthia Reviewed-by: Alexandru Croitor --- cmake/QtBuildHelpers.cmake | 1 + cmake/QtPublicPluginHelpers_v2.cmake | 30 ++++++++++++++++++++++++++++ src/corelib/Qt6AndroidMacros.cmake | 4 ++-- 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 cmake/QtPublicPluginHelpers_v2.cmake diff --git a/cmake/QtBuildHelpers.cmake b/cmake/QtBuildHelpers.cmake index e7cd9885adc..5032745034b 100644 --- a/cmake/QtBuildHelpers.cmake +++ b/cmake/QtBuildHelpers.cmake @@ -289,6 +289,7 @@ function(qt_internal_get_qt_build_public_helpers out_var) QtPublicFindPackageHelpers QtPublicGitHelpers QtPublicPluginHelpers + QtPublicPluginHelpers_v2 QtPublicSbomGenerationHelpers QtPublicSbomHelpers QtPublicTargetHelpers diff --git a/cmake/QtPublicPluginHelpers_v2.cmake b/cmake/QtPublicPluginHelpers_v2.cmake new file mode 100644 index 00000000000..7aabce108f2 --- /dev/null +++ b/cmake/QtPublicPluginHelpers_v2.cmake @@ -0,0 +1,30 @@ +# Copyright (C) 2024 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +function(__qt_internal_collect_plugin_targets_from_dependencies_v2 target out_var) + if(CMAKE_VERSION VERSION_LESS 3.30) + __qt_internal_collect_plugin_targets_from_dependencies("${target}" "${out_var}") + set(${out_var} "${${out_var}}" PARENT_SCOPE) + return() + endif() + set("${out_var}" "$" PARENT_SCOPE) +endfunction() + +function(__qt_internal_collect_plugin_library_files_v2 target plugin_targets out_var) + if(CMAKE_VERSION VERSION_LESS 3.30) + __qt_internal_collect_plugin_library_files("${target}" "${plugin_targets}" "${out_var}") + set(${out_var} "${${out_var}}" PARENT_SCOPE) + return() + endif() + + set(plugin_targets "$") + + # Convert the list of plugin targets to a list of plugin files + set(pre_genex "$$<1:") + set(post_genex "$") + set(glue "${post_genex};${pre_genex}") + set("${out_var}" + "$<$:$${post_genex}>>" + PARENT_SCOPE + ) +endfunction() diff --git a/src/corelib/Qt6AndroidMacros.cmake b/src/corelib/Qt6AndroidMacros.cmake index 0d403714de3..484df50e667 100644 --- a/src/corelib/Qt6AndroidMacros.cmake +++ b/src/corelib/Qt6AndroidMacros.cmake @@ -290,8 +290,8 @@ function(qt6_android_generate_deployment_settings target) _qt_internal_add_android_deployment_property(file_contents "android-no-deploy-qt-libs" ${target} "QT_ANDROID_NO_DEPLOY_QT_LIBS") - __qt_internal_collect_plugin_targets_from_dependencies("${target}" plugin_targets) - __qt_internal_collect_plugin_library_files("${target}" "${plugin_targets}" plugin_targets) + __qt_internal_collect_plugin_targets_from_dependencies_v2("${target}" plugin_targets) + __qt_internal_collect_plugin_library_files_v2("${target}" "${plugin_targets}" plugin_targets) string(APPEND file_contents " \"android-deploy-plugins\":\"${plugin_targets}\",\n") _qt_internal_generate_android_permissions_json(permissions_json_array "${target}")