diff options
| author | Joerg Bornemann <joerg.bornemann@qt.io> | 2025-01-03 17:19:22 +0100 |
|---|---|---|
| committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2025-01-24 18:53:34 +0100 |
| commit | ad7b94e163ac5c3959a7e38d7f48536be288a187 (patch) | |
| tree | 6d92d6cc8853edaccc4441ba7fea74b2b6bc2195 /cmake/QtModuleConfig.cmake.in | |
| parent | cf9c94e85160a9d0f03e284ff92995900076faee (diff) | |
CMake: Only load Qt6FooPrivate automatically when building Qt
[ChangeLog][CMake] CMake packages of public Qt modules don't provide the
targets of their private counterparts anymore. User projects must now
call find_package(Qt6 COMPONENTS FooPrivate) to make use of the
Qt6::FooPrivate target. User projects that rely on the old behavior can
set the CMake variable QT_FIND_PRIVATE_MODULES to ON.
For user projects, the warning message we know from QMake is displayed.
The warning can be disabled by setting the CMake variable
QT_NO_PRIVATE_MODULE_WARNING to ON.
Within Qt itself, find_package(Qt6Foo) will still
find_package(Qt6FooPrivate).
For static Qt builds, we need to wrap usage of private Qt modules in
$<BUILD_INTERFACE> or $<BUILD_LOCAL_INTERFACE> (if CMake's version is >=
3.26). Static builds with CMake < 3.26 will always load the private
modules if the Qt6FooConfig.cmake from Qt's build tree is loaded. This
is the case in non-prefix builds and (in the future) when building
examples as external project.
This amends commit fbbf4ace0188b9718b6d7808021c0b887fd52d9f.
Pick-to: 6.9
Task-number: QTBUG-87776
Change-Id: I78e95248f2b3fa73c3005c61df2fe4f71ad8eeb8
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'cmake/QtModuleConfig.cmake.in')
| -rw-r--r-- | cmake/QtModuleConfig.cmake.in | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/cmake/QtModuleConfig.cmake.in b/cmake/QtModuleConfig.cmake.in index 93185857162..de243aff2b3 100644 --- a/cmake/QtModuleConfig.cmake.in +++ b/cmake/QtModuleConfig.cmake.in @@ -32,26 +32,35 @@ if (NOT QT_NO_CREATE_TARGETS AND @INSTALL_CMAKE_NAMESPACE@@target@_FOUND) endif() # Find the private module counterpart. -if (@INSTALL_CMAKE_NAMESPACE@@target@_FOUND AND NOT @arg_NO_PRIVATE_MODULE@) - if(NOT @INSTALL_CMAKE_NAMESPACE@@target_private@_FOUND) - if("${_qt_cmake_dir}" STREQUAL "") - set(_qt_cmake_dir "${QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR}") - endif() - set(__qt_use_no_default_path_for_qt_packages "NO_DEFAULT_PATH") - if(QT_DISABLE_NO_DEFAULT_PATH_IN_QT_PACKAGES) - set(__qt_use_no_default_path_for_qt_packages "") - endif() - find_package(@INSTALL_CMAKE_NAMESPACE@@target_private@ "@PROJECT_VERSION@" EXACT - QUIET - CONFIG - PATHS - ${QT_BUILD_CMAKE_PREFIX_PATH} - "${CMAKE_CURRENT_LIST_DIR}/.." - "${_qt_cmake_dir}" - ${_qt_additional_packages_prefix_paths} - ${__qt_use_no_default_path_for_qt_packages} +set(__qt_@target@_always_load_private_module OFF) +include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target@-build.cmake" OPTIONAL) +if (@INSTALL_CMAKE_NAMESPACE@@target@_FOUND + AND NOT @INSTALL_CMAKE_NAMESPACE@@target_private@_FOUND + AND NOT @arg_NO_PRIVATE_MODULE@ + AND ( + __qt_@target@_always_load_private_module + OR DEFINED QT_REPO_MODULE_VERSION + OR QT_FIND_PRIVATE_MODULES ) + ) + if("${_qt_cmake_dir}" STREQUAL "") + set(_qt_cmake_dir "${QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR}") endif() + set(__qt_use_no_default_path_for_qt_packages "NO_DEFAULT_PATH") + if(QT_DISABLE_NO_DEFAULT_PATH_IN_QT_PACKAGES) + set(__qt_use_no_default_path_for_qt_packages "") + endif() + find_package(@INSTALL_CMAKE_NAMESPACE@@target_private@ "@PROJECT_VERSION@" EXACT + QUIET + CONFIG + PATHS + ${QT_BUILD_CMAKE_PREFIX_PATH} + "${CMAKE_CURRENT_LIST_DIR}/.." + "${_qt_cmake_dir}" + ${_qt_additional_packages_prefix_paths} + ${__qt_use_no_default_path_for_qt_packages} + ) + if(NOT @INSTALL_CMAKE_NAMESPACE@@target_private@_FOUND) get_property(@INSTALL_CMAKE_NAMESPACE@@target_private@_warning_shown GLOBAL PROPERTY @INSTALL_CMAKE_NAMESPACE@@target_private@_warning_shown @@ -68,6 +77,7 @@ if (@INSTALL_CMAKE_NAMESPACE@@target@_FOUND AND NOT @arg_NO_PRIVATE_MODULE@) endif() endif() endif() +unset(__qt_@target@_always_load_private_module) if (NOT QT_NO_CREATE_TARGETS AND @INSTALL_CMAKE_NAMESPACE@@target@_FOUND) # DEPRECATED |
