summaryrefslogtreecommitdiffstats
path: root/cmake/QtModuleConfig.cmake.in
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2025-01-03 17:19:22 +0100
committerJoerg Bornemann <joerg.bornemann@qt.io>2025-01-24 18:53:34 +0100
commitad7b94e163ac5c3959a7e38d7f48536be288a187 (patch)
tree6d92d6cc8853edaccc4441ba7fea74b2b6bc2195 /cmake/QtModuleConfig.cmake.in
parentcf9c94e85160a9d0f03e284ff92995900076faee (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.in46
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