[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. Task-number: QTBUG-87776 Change-Id: I78e95248f2b3fa73c3005c61df2fe4f71ad8eeb8 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> (cherry picked from commit ad7b94e163ac5c3959a7e38d7f48536be288a187) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
66 lines
3.1 KiB
CMake
66 lines
3.1 KiB
CMake
# Copyright (C) 2024 The Qt Company Ltd.
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
@PACKAGE_INIT@
|
|
|
|
cmake_minimum_required(VERSION @min_new_policy_version@...@max_new_policy_version@)
|
|
|
|
include(CMakeFindDependencyMacro)
|
|
|
|
# Find required dependencies, if any.
|
|
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target_private@Dependencies.cmake")
|
|
include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target_private@Dependencies.cmake")
|
|
_qt_internal_suggest_dependency_debugging(@target_private@
|
|
__qt_@target_private@_pkg ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE)
|
|
endif()
|
|
|
|
# If *ConfigDependencies.cmake exists, the variable value will be defined there.
|
|
# Don't override it in that case.
|
|
if(NOT DEFINED "@INSTALL_CMAKE_NAMESPACE@@target_private@_FOUND")
|
|
set("@INSTALL_CMAKE_NAMESPACE@@target_private@_FOUND" TRUE)
|
|
endif()
|
|
|
|
if(NOT __qt_@target@_always_load_private_module
|
|
AND NOT DEFINED QT_REPO_MODULE_VERSION
|
|
AND NOT QT_NO_PRIVATE_MODULE_WARNING
|
|
AND NOT __qt_private_module_@target_private@_warning_shown)
|
|
message(WARNING
|
|
"This project is using headers of the @target_private@ module and will therefore be tied "
|
|
"to this specific Qt module build version. "
|
|
"Running this project against other versions of the Qt modules may crash at any arbitrary "
|
|
"point. This is not a bug, but a result of using Qt internals. You have been warned! "
|
|
"\nYou can disable this warning by setting QT_NO_PRIVATE_MODULE_WARNING to ON."
|
|
)
|
|
set(__qt_private_module_@target_private@_warning_shown TRUE)
|
|
endif()
|
|
|
|
if(NOT QT_NO_CREATE_TARGETS AND @INSTALL_CMAKE_NAMESPACE@@target_private@_FOUND)
|
|
include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target_private@Targets.cmake")
|
|
include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target_private@AdditionalTargetInfo.cmake")
|
|
include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target_private@ExtraProperties.cmake"
|
|
OPTIONAL)
|
|
endif()
|
|
|
|
if(TARGET @QT_CMAKE_EXPORT_NAMESPACE@::@target_private@)
|
|
if(NOT QT_NO_CREATE_VERSIONLESS_TARGETS)
|
|
if(CMAKE_VERSION VERSION_LESS 3.18 OR QT_USE_OLD_VERSION_LESS_TARGETS)
|
|
include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target_private@VersionlessTargets.cmake")
|
|
else()
|
|
include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target_private@VersionlessAliasTargets.cmake")
|
|
endif()
|
|
endif()
|
|
else()
|
|
set(@INSTALL_CMAKE_NAMESPACE@@target_private@_FOUND FALSE)
|
|
if(NOT DEFINED @INSTALL_CMAKE_NAMESPACE@@target_private@_NOT_FOUND_MESSAGE)
|
|
set(@INSTALL_CMAKE_NAMESPACE@@target_private@_NOT_FOUND_MESSAGE
|
|
"Target \"@QT_CMAKE_EXPORT_NAMESPACE@::@target_private@\" was not found.")
|
|
|
|
if(QT_NO_CREATE_TARGETS)
|
|
string(APPEND @INSTALL_CMAKE_NAMESPACE@@target_private@_NOT_FOUND_MESSAGE
|
|
"Possibly due to QT_NO_CREATE_TARGETS being set to TRUE and thus "
|
|
"${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target_private@Targets.cmake was not "
|
|
"included to define the target.")
|
|
endif()
|
|
endif()
|
|
endif()
|