CMake: Add a way to mark modules as "load the private module too"

Add FIND_PRIVATE_MODULE argument to qt_internal_add_module. If this
argument is set for Qt6Foo, then find_package(Qt6Foo) will also
find_package(Qt6FooPrivate). This should only be necessary in
exceptional cases like Qt6Qml where Qt6QmlPrivate is used
unconditionally.

Task-number: QTBUG-87776
Change-Id: I8d6fbd0624c0008fc42294ff2d2ed36848963508
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
Joerg Bornemann 2025-01-27 10:02:23 +01:00
parent befce757fa
commit 61c6e90401
2 changed files with 18 additions and 1 deletions

View File

@ -32,7 +32,7 @@ if (NOT QT_NO_CREATE_TARGETS AND @INSTALL_CMAKE_NAMESPACE@@target@_FOUND)
endif()
# Find the private module counterpart.
set(__qt_@target@_always_load_private_module OFF)
set(__qt_@target@_always_load_private_module @always_load_private_module@)
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

View File

@ -5,6 +5,7 @@ macro(qt_internal_get_internal_add_module_keywords option_args single_args multi
set(${option_args}
STATIC
EXCEPTIONS
FIND_PRIVATE_MODULE
INTERNAL_MODULE
HEADER_MODULE
DISABLE_TOOLS_EXPORT
@ -131,6 +132,9 @@ endfunction()
# ignored by syncqt. The specifying this directory allows to skip the parsing of the whole
# CMAKE_CURRENT_SOURCE_DIR for the header files that needs to be synced and only parse the
# single subdirectory, that meanwhile can be outside the CMAKE_CURRENT_SOURCE_DIR tree.
#
# FIND_PRIVATE_MODULE
# A call to find_package(Qt6Foo) will imply a call to find_package(Qt6FooPrivate).
function(qt_internal_add_module target)
qt_internal_get_internal_add_module_keywords(
module_option_args
@ -796,8 +800,16 @@ set(QT_ALLOW_MISSING_TOOLS_PACKAGES TRUE)")
else()
set(write_basic_module_package_args "")
endif()
if(arg_FIND_PRIVATE_MODULE)
set(write_basic_public_module_package_args FIND_PRIVATE_MODULE)
else()
set(write_basic_public_module_package_args "")
endif()
qt_internal_write_basic_module_package("${target}" "${target_private}"
${write_basic_module_package_args}
${write_basic_public_module_package_args}
CONFIG_BUILD_DIR ${config_build_dir}
CONFIG_INSTALL_DIR ${config_install_dir}
)
@ -991,6 +1003,7 @@ endfunction()
# Otherwise write its public counterpart.
function(qt_internal_write_basic_module_package target target_private)
set(no_value_options
FIND_PRIVATE_MODULE
IS_STATIC_LIB
PRIVATE
)
@ -1003,12 +1016,16 @@ function(qt_internal_write_basic_module_package target target_private)
"${no_value_options}" "${single_value_options}" "${multi_value_options}"
)
set(always_load_private_module OFF)
if(arg_PRIVATE)
set(package_name "${INSTALL_CMAKE_NAMESPACE}${target_private}")
set(module_config_input_file "QtModuleConfigPrivate.cmake.in")
else()
set(package_name "${INSTALL_CMAKE_NAMESPACE}${target}")
set(module_config_input_file "QtModuleConfig.cmake.in")
if(arg_FIND_PRIVATE_MODULE)
set(always_load_private_module ON)
endif()
endif()
if(arg_IS_STATIC_LIB AND NOT arg_PRIVATE AND CMAKE_VERSION VERSION_LESS "3.26")