diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2020-09-24 12:02:44 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2020-09-25 06:58:55 +0200 |
commit | dae078e521c3932c66436cbdbfaf5294a1842901 (patch) | |
tree | 0fbe765ea90e7c72a33114706040ed2661a20923 /cmake | |
parent | 1783b048fd4c97e86de4a1122f64eb2afa603cbf (diff) |
CMake: Export 3rdparty dependency find_package calls of private modules
Consider a Qt module with a 3rdparty library target in
PRIVATE_MODULE_INTERFACE, e.g. XKB::XKB in Qt6::GuiPrivate. Consumers of
GuiPrivate automatically depend on XKB::XKB. In order to do that they
must find_package(XKB ...). As all find_package calls for GuiPrivate are
in the same place as the ones for Gui, this package must be marked as
optional. Otherwise all consumers of Qt6::Gui would have to have the
xkbcommon package installed too.
This patch exports find_package calls for every 3rdparty public
dependency of private modules and marks them as optional.
Change-Id: Ia1eeb09c29927fb6634ef08b477684ed6f123267
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/QtPostProcessHelpers.cmake | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/cmake/QtPostProcessHelpers.cmake b/cmake/QtPostProcessHelpers.cmake index 56b2d5e56f..4f8106dfae 100644 --- a/cmake/QtPostProcessHelpers.cmake +++ b/cmake/QtPostProcessHelpers.cmake @@ -25,7 +25,7 @@ macro(qt_collect_third_party_deps target) endif() unset(_target_is_static) - foreach(dep ${${depends_var}}) + foreach(dep ${${depends_var}} ${optional_public_depends}) # Gather third party packages that should be found when using the Qt module. # Also handle nolink target dependencies. string(REGEX REPLACE "_nolink$" "" base_dep "${dep}") @@ -44,6 +44,9 @@ macro(qt_collect_third_party_deps target) if(dep_seen EQUAL -1 AND package_name) list(APPEND third_party_deps_seen ${dep}) get_target_property(package_is_optional ${dep} INTERFACE_QT_PACKAGE_IS_OPTIONAL) + if(NOT package_is_optional AND dep IN_LIST optional_public_depends) + set(package_is_optional TRUE) + endif() get_target_property(package_version ${dep} INTERFACE_QT_PACKAGE_VERSION) if(NOT package_version) set(package_version "") @@ -76,6 +79,11 @@ function(qt_internal_create_module_depends_file target) get_target_property(public_depends "${target}" INTERFACE_LINK_LIBRARIES) + unset(optional_public_depends) + if(TARGET "${target}Private") + get_target_property(optional_public_depends "${target}Private" INTERFACE_LINK_LIBRARIES) + endif() + # Used for collecting Qt module dependencies that should be find_package()'d in # ModuleDependencies.cmake. get_target_property(target_deps "${target}" _qt_target_deps) @@ -227,6 +235,7 @@ function(qt_internal_create_plugin_depends_file target) get_target_property(depends "${target}" LINK_LIBRARIES) get_target_property(public_depends "${target}" INTERFACE_LINK_LIBRARIES) get_target_property(target_deps "${target}" _qt_target_deps) + unset(optional_public_depends) set(target_deps_seen "") qt_collect_third_party_deps(${target}) @@ -288,6 +297,8 @@ function(qt_internal_create_qt6_dependencies_file) # This is the actual target we're querying. set(actual_target Platform) get_target_property(public_depends "${actual_target}" INTERFACE_LINK_LIBRARIES) + unset(depends) + unset(optional_public_depends) # We need to collect third party deps that are set on the public Platform target, # like Threads::Threads. |