From a5b78a3660d9b92d12c950eddb4cb3ccc43893b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Micha=C3=ABl=20Celerier?= Date: Fri, 5 Jul 2019 11:55:05 +0200 Subject: cmake: implement default qpa plugin behavior for static builds This is done by adding a DEFAULT_IF argument to add_qt_plugin, which accepts if-evaluated expressions. e.g. add_qt_plugin(myplugin DEFAULT_IF ${foo} STREQUAL ${bar} ... ) so that this mechanism can be reused later if necessary. Change-Id: I7eba9adaaa28e55a4f0f94cf206e868b990027e6 Reviewed-by: Alexandru Croitor --- cmake/QtBuild.cmake | 12 ++++++++++-- cmake/QtPlugins.cmake.in | 16 ++++++++-------- cmake/QtProperties.cmake | 12 ++++++++++++ 3 files changed, 30 insertions(+), 10 deletions(-) (limited to 'cmake') diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index b2c25b5ef6..df9e9008ce 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -1449,7 +1449,7 @@ function(add_qt_plugin target) qt_parse_all_arguments(arg "add_qt_plugin" "STATIC;EXCEPTIONS" "TYPE;CLASS_NAME;OUTPUT_DIRECTORY;INSTALL_DIRECTORY;ARCHIVE_INSTALL_DIRECTORY" - "${__default_private_args};${__default_public_args}" ${ARGN}) + "${__default_private_args};${__default_public_args};DEFAULT_IF" ${ARGN}) set(output_directory_default "${QT_BUILD_DIR}/${INSTALL_PLUGINSDIR}/${arg_TYPE}") @@ -1501,7 +1501,15 @@ function(add_qt_plugin target) set_property(TARGET "${qt_module}" APPEND PROPERTY QT_PLUGINS "${target}") endif() - set_property(TARGET "${target}" APPEND PROPERTY EXPORT_PROPERTIES "QT_PLUGIN_CLASS_NAME;QT_MODULE") + set(_default_plugin 1) + if (DEFINED arg_DEFAULT_IF) + if (NOT ${arg_DEFAULT_IF}) + set(_default_plugin 0) + endif() + endif() + + set_property(TARGET "${target}" PROPERTY QT_DEFAULT_PLUGIN "${_default_plugin}") + set_property(TARGET "${target}" APPEND PROPERTY EXPORT_PROPERTIES "QT_PLUGIN_CLASS_NAME;QT_MODULE;QT_DEFAULT_PLUGIN") extend_target("${target}" SOURCES ${arg_SOURCES} diff --git a/cmake/QtPlugins.cmake.in b/cmake/QtPlugins.cmake.in index b51c7cec29..e6547508a7 100644 --- a/cmake/QtPlugins.cmake.in +++ b/cmake/QtPlugins.cmake.in @@ -3,7 +3,7 @@ if(NOT @BUILD_SHARED_LIBS@) set(_module_target "@INSTALL_CMAKE_NAMESPACE@::@QT_MODULE@") - set(_default_plugins_genex "$>") + set(_default_plugins_are_enabled "$>") set(_manual_plugins_genex "$>") set(_no_plugins_genex "$>") @@ -15,17 +15,17 @@ if(NOT @BUILD_SHARED_LIBS@) continue() endif() - set(_user_specified_genex "$") + set(_plugin_is_default "$") + set(_plugin_is_not_blacklisted "$>") + set(_plugin_is_whitelisted "$") string(CONCAT _plugin_condition "$>" + "${_default_plugins_are_enabled}," + "${_plugin_is_default}," + "${_plugin_is_not_blacklisted}" ">" ">>" ) diff --git a/cmake/QtProperties.cmake b/cmake/QtProperties.cmake index e8b1fbf4f0..0c3507b953 100644 --- a/cmake/QtProperties.cmake +++ b/cmake/QtProperties.cmake @@ -38,6 +38,18 @@ define_property(TARGET For instance, Sql for qsqlite" ) +define_property(TARGET + PROPERTY + QT_DEFAULT_PLUGIN + BRIEF_DOCS + "Indicates whether a plug-in is added by default." + FULL_DOCS + "This is a property on Qt plug-ins. + It is mainly used to indicate if a plug-in should be added + to the default set of plug-ins when building a static app - + for instance, which QPA should be linked." +) + define_property(GLOBAL PROPERTY QT_KNOWN_PLUGINS -- cgit v1.2.3