diff options
author | Kyle Edwards <kyle.edwards@kitware.com> | 2018-10-17 16:03:28 -0400 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-08-12 18:23:58 +0200 |
commit | 63d9cd17d01765f02ede5050c40a554cefa50744 (patch) | |
tree | 4e4de830a06bbb098150b9bc1e9d1cf253d3eb95 /src | |
parent | ef74730a59fcfd4fff5b719c0310e817737e0efb (diff) |
CMake: Add support for auto-importing plugins in CMake
This commit adds transitive dependencies to the plugins, so that a
sane set of default plugins get auto-imported when linking against a
module. It also provides a new function, qt5_import_plugins(), which
allows you to override the set of plugins that get imported. The decision
of whether or not to import a specific plugin is based on several custom
target properties and a very clever generator expression.
Note that this change only imports plugins on static Qt builds. It
does nothing on shared Qt builds, as the shared libraries already have
their own plugin import mechanism.
[ChangeLog][CMake] Added ability to auto-import non-qml plugins on
CMake builds
Task-number: QTBUG-38913
Task-number: QTBUG-76562
Change-Id: I2d6c8908b521cf6ba1ebbbc33a87cb7ddd9935cf
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/Qt5CoreMacros.cmake | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/corelib/Qt5CoreMacros.cmake b/src/corelib/Qt5CoreMacros.cmake index 0f006fe1e3..17cc19fc4e 100644 --- a/src/corelib/Qt5CoreMacros.cmake +++ b/src/corelib/Qt5CoreMacros.cmake @@ -393,3 +393,35 @@ if (NOT CMAKE_VERSION VERSION_LESS 2.8.9) endforeach() endmacro() endif() + +function(QT5_IMPORT_PLUGINS TARGET_NAME) + set(_doing "") + foreach(_arg ${ARGN}) + if(_arg STREQUAL "INCLUDE") + set(_doing "INCLUDE") + elseif(_arg STREQUAL "EXCLUDE") + set(_doing "EXCLUDE") + elseif(_arg STREQUAL "INCLUDE_BY_TYPE") + set(_doing "INCLUDE_BY_TYPE") + elseif(_arg STREQUAL "EXCLUDE_BY_TYPE") + set(_doing "EXCLUDE_BY_TYPE") + else() + if(_doing STREQUAL "INCLUDE") + set_property(TARGET ${TARGET_NAME} APPEND PROPERTY QT_PLUGINS "${_arg}") + elseif(_doing STREQUAL "EXCLUDE") + set_property(TARGET ${TARGET_NAME} APPEND PROPERTY QT_NO_PLUGINS "${_arg}") + elseif(_doing STREQUAL "INCLUDE_BY_TYPE") + string(REGEX REPLACE "[-/]" "_" _plugin_type "${_arg}") + set(_doing "INCLUDE_BY_TYPE_PLUGINS") + elseif(_doing STREQUAL "INCLUDE_BY_TYPE_PLUGINS") + set_property(TARGET ${TARGET_NAME} APPEND PROPERTY "QT_PLUGINS_${_plugin_type}" "${_arg}") + elseif(_doing STREQUAL "EXCLUDE_BY_TYPE") + string(REGEX REPLACE "[-/]" "_" _plugin_type "${_arg}") + set_property(TARGET ${TARGET_NAME} PROPERTY "QT_PLUGINS_${_plugin_type}" -) + set(_doing "") + else() + message(FATAL_ERROR "Unexpected extra argument: \"${_arg}\"") + endif() + endif() + endforeach() +endfunction() |