diff options
author | Cristian Le <[email protected]> | 2025-03-05 11:27:25 +0100 |
---|---|---|
committer | Cristian Le <[email protected]> | 2025-06-27 20:29:16 +0200 |
commit | 2f9795aba2f1f9ca5fbcca4581b2d89fc468cf07 (patch) | |
tree | 11bf3605e84fec3b4f32f4201a149ea1f8d429b2 | |
parent | 055985ec8373b8a1bd325468b5ba4f1c1de4eaed (diff) |
Replace `QT_NO_CREATE_TARGETS` with an automated and scoped logic
Effectively check if we are importing while still building the current
project
Task-number: QTBUG-135233
Change-Id: If172617463157e84e1b16fc2354147fabae41084
Reviewed-by: Alexandru Croitor <[email protected]>
Reviewed-by: Alexey Edelev <[email protected]>
-rw-r--r-- | cmake/Qt3rdPartyLibraryConfig.cmake.in | 6 | ||||
-rw-r--r-- | cmake/Qt3rdPartyLibraryHelpers.cmake | 12 | ||||
-rw-r--r-- | cmake/QtBaseGlobalTargets.cmake | 12 | ||||
-rw-r--r-- | cmake/QtConfig.cmake.in | 7 | ||||
-rw-r--r-- | cmake/QtModuleConfig.cmake.in | 12 | ||||
-rw-r--r-- | cmake/QtModuleConfigPrivate.cmake.in | 10 | ||||
-rw-r--r-- | cmake/QtModuleHelpers.cmake | 21 | ||||
-rw-r--r-- | cmake/QtModuleToolsConfig.cmake.in | 6 | ||||
-rw-r--r-- | cmake/QtPluginConfig.cmake.in | 6 | ||||
-rw-r--r-- | cmake/QtPluginHelpers.cmake | 14 | ||||
-rw-r--r-- | cmake/QtPlugins.cmake.in | 2 | ||||
-rw-r--r-- | cmake/QtPublicCMakeHelpers.cmake | 20 | ||||
-rw-r--r-- | cmake/QtToolHelpers.cmake | 20 | ||||
-rw-r--r-- | src/corelib/Qt6CoreConfigExtras.cmake.in | 6 | ||||
-rw-r--r-- | tests/auto/cmake/CMakeLists.txt | 6 |
15 files changed, 136 insertions, 24 deletions
diff --git a/cmake/Qt3rdPartyLibraryConfig.cmake.in b/cmake/Qt3rdPartyLibraryConfig.cmake.in index 9c51350821f..b91cd8a06c0 100644 --- a/cmake/Qt3rdPartyLibraryConfig.cmake.in +++ b/cmake/Qt3rdPartyLibraryConfig.cmake.in @@ -16,7 +16,10 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target@Dependenci include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") endif() -if (NOT QT_NO_CREATE_TARGETS) +# Do the checks inside Targets.cmake even when the file is still being generated +include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") + +if(NOT __qt_@target@_skip_include_targets_file) include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") if(NOT QT_NO_CREATE_VERSIONLESS_TARGETS) @@ -26,6 +29,7 @@ if (NOT QT_NO_CREATE_TARGETS) include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") endif() endif() + set(__qt_@target@_targets_file_included ON) endif() foreach(extra_cmake_include @extra_cmake_includes@) diff --git a/cmake/Qt3rdPartyLibraryHelpers.cmake b/cmake/Qt3rdPartyLibraryHelpers.cmake index 33bfc3e8348..fb41ded3150 100644 --- a/cmake/Qt3rdPartyLibraryHelpers.cmake +++ b/cmake/Qt3rdPartyLibraryHelpers.cmake @@ -283,6 +283,17 @@ function(qt_internal_add_3rdparty_library target) INSTALL_DESTINATION "${config_install_dir}" ) + qt_configure_file( + OUTPUT "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}TargetsPrecheck.cmake" + CONTENT +" +_qt_internal_should_include_targets( + TARGETS ${target} + NAMESPACE ${INSTALL_CMAKE_NAMESPACE}:: + OUT_VAR_SHOULD_SKIP __qt_${target}_skip_include_targets_file +) +") + write_basic_package_version_file( "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersionImpl.cmake" VERSION ${PROJECT_VERSION} @@ -297,6 +308,7 @@ function(qt_internal_add_3rdparty_library target) "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake" "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersion.cmake" "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersionImpl.cmake" + "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}TargetsPrecheck.cmake" DESTINATION "${config_install_dir}" COMPONENT Devel ) diff --git a/cmake/QtBaseGlobalTargets.cmake b/cmake/QtBaseGlobalTargets.cmake index afee7b94c5d..405b5e22635 100644 --- a/cmake/QtBaseGlobalTargets.cmake +++ b/cmake/QtBaseGlobalTargets.cmake @@ -217,6 +217,17 @@ configure_file( @ONLY ) +qt_configure_file( + OUTPUT "${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}TargetsPrecheck.cmake" + CONTENT +" +_qt_internal_should_include_targets( + TARGETS ${__export_targets} + NAMESPACE ${INSTALL_CMAKE_NAMESPACE}:: + OUT_VAR_SHOULD_SKIP __qt_skip_include_targets_file +) +") + write_basic_package_version_file( "${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}ConfigVersionImpl.cmake" VERSION ${PROJECT_VERSION} @@ -248,6 +259,7 @@ qt_install(FILES "${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}ConfigExtras.cmake" "${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}ConfigVersion.cmake" "${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}ConfigVersionImpl.cmake" + "${__GlobalConfig_build_dir}/${INSTALL_CMAKE_NAMESPACE}TargetsPrecheck.cmake" "${__GlobalConfig_build_dir}/QtInstallPaths.cmake" DESTINATION "${__GlobalConfig_install_dir}" COMPONENT Devel diff --git a/cmake/QtConfig.cmake.in b/cmake/QtConfig.cmake.in index 2c34af97713..10b483c1e9b 100644 --- a/cmake/QtConfig.cmake.in +++ b/cmake/QtConfig.cmake.in @@ -19,7 +19,11 @@ __qt_internal_require_suitable_cmake_version_for_using_qt() get_filename_component(_qt_cmake_dir "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) set(_qt_@PROJECT_VERSION_MAJOR@_config_cmake_dir "${CMAKE_CURRENT_LIST_DIR}") -if (NOT QT_NO_CREATE_TARGETS) +# Do the checks inside Targets.cmake even when the file is still being generated +include("${CMAKE_CURRENT_LIST_DIR}/@[email protected]") + +# Create the targets unless we are generating the @[email protected] +if(NOT __qt_skip_include_targets_file) include("${CMAKE_CURRENT_LIST_DIR}/@[email protected]") if(NOT QT_NO_CREATE_VERSIONLESS_TARGETS) if(CMAKE_VERSION VERSION_LESS 3.18 OR QT_USE_OLD_VERSION_LESS_TARGETS) @@ -28,6 +32,7 @@ if (NOT QT_NO_CREATE_TARGETS) include("${CMAKE_CURRENT_LIST_DIR}/@[email protected]") endif() endif() + set(__qt_targets_file_included ON) else() # For examples using `find_package(...)` inside their CMakeLists.txt files: # Make CMake's AUTOGEN detect this Qt version properly diff --git a/cmake/QtModuleConfig.cmake.in b/cmake/QtModuleConfig.cmake.in index e3af0299c57..73e83d44e19 100644 --- a/cmake/QtModuleConfig.cmake.in +++ b/cmake/QtModuleConfig.cmake.in @@ -24,12 +24,16 @@ if(NOT DEFINED "@INSTALL_CMAKE_NAMESPACE@@target@_FOUND") set("@INSTALL_CMAKE_NAMESPACE@@target@_FOUND" TRUE) endif() -if (NOT QT_NO_CREATE_TARGETS AND @INSTALL_CMAKE_NAMESPACE@@target@_FOUND) +# Do the checks inside Targets.cmake even when the file is still being generated +include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") + +if(NOT __qt_@target@_skip_include_targets_file AND @INSTALL_CMAKE_NAMESPACE@@target@_FOUND) include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]" OPTIONAL) include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]" OPTIONAL) + set(__qt_@target@_targets_file_included ON) endif() # Find the private module counterpart. @@ -80,7 +84,7 @@ if (@INSTALL_CMAKE_NAMESPACE@@target@_FOUND endif() unset(__qt_@target@_always_load_private_module) -if (NOT QT_NO_CREATE_TARGETS AND @INSTALL_CMAKE_NAMESPACE@@target@_FOUND) +if(__qt_@target@_targets_file_included) # DEPRECATED # Provide old style variables for includes, compile definitions, etc. # These variables are deprecated and only provided on a best-effort basis to facilitate porting. @@ -210,9 +214,9 @@ else() set(@INSTALL_CMAKE_NAMESPACE@@target@_NOT_FOUND_MESSAGE "Target \"@QT_CMAKE_EXPORT_NAMESPACE@::@target@\" was not found.") - if(QT_NO_CREATE_TARGETS) + if(__qt_@target@_skip_include_targets_file) string(APPEND @INSTALL_CMAKE_NAMESPACE@@target@_NOT_FOUND_MESSAGE - "Possibly due to QT_NO_CREATE_TARGETS being set to TRUE and thus " + "Possibly due to __qt_@target@_skip_include_targets_file being set to TRUE and thus " "${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected] was not " "included to define the target.") endif() diff --git a/cmake/QtModuleConfigPrivate.cmake.in b/cmake/QtModuleConfigPrivate.cmake.in index 6c16eae2ef6..4846fc740ae 100644 --- a/cmake/QtModuleConfigPrivate.cmake.in +++ b/cmake/QtModuleConfigPrivate.cmake.in @@ -24,11 +24,15 @@ if(NOT __qt_@target@_always_load_private_module) _qt_internal_show_private_module_warning(@target_private@) endif() -if(NOT QT_NO_CREATE_TARGETS AND @INSTALL_CMAKE_NAMESPACE@@target_private@_FOUND) +# Do the checks inside Targets.cmake even when the file is still being generated +include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") + +if(NOT __qt_@target_private@_skip_include_targets_file AND @INSTALL_CMAKE_NAMESPACE@@target_private@_FOUND) include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]" OPTIONAL) + set(__qt_@target_private@_targets_file_included ON) endif() if(TARGET @QT_CMAKE_EXPORT_NAMESPACE@::@target_private@) @@ -45,9 +49,9 @@ else() set(@INSTALL_CMAKE_NAMESPACE@@target_private@_NOT_FOUND_MESSAGE "Target \"@QT_CMAKE_EXPORT_NAMESPACE@::@target_private@\" was not found.") - if(QT_NO_CREATE_TARGETS) + if(__qt_@target_private@_skip_include_targets_file) string(APPEND @INSTALL_CMAKE_NAMESPACE@@target_private@_NOT_FOUND_MESSAGE - "Possibly due to QT_NO_CREATE_TARGETS being set to TRUE and thus " + "Possibly due to __qt_@target_private@_skip_include_targets_file being set to TRUE and thus " "${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected] was not " "included to define the target.") endif() diff --git a/cmake/QtModuleHelpers.cmake b/cmake/QtModuleHelpers.cmake index d9f377a2baa..ecfdb740d71 100644 --- a/cmake/QtModuleHelpers.cmake +++ b/cmake/QtModuleHelpers.cmake @@ -1064,9 +1064,29 @@ function(qt_internal_write_basic_module_package target target_private) if(arg_PRIVATE) set(package_name "${INSTALL_CMAKE_NAMESPACE}${target_private}") set(module_config_input_file "QtModuleConfigPrivate.cmake.in") + qt_configure_file( + OUTPUT "${arg_CONFIG_BUILD_DIR}/${package_name}TargetsPrecheck.cmake" + CONTENT +" +_qt_internal_should_include_targets( + TARGETS ${target_private} + NAMESPACE ${INSTALL_CMAKE_NAMESPACE}:: + OUT_VAR_SHOULD_SKIP __qt_${target_private}_skip_include_targets_file +) +") else() set(package_name "${INSTALL_CMAKE_NAMESPACE}${target}") set(module_config_input_file "QtModuleConfig.cmake.in") + qt_configure_file( + OUTPUT "${arg_CONFIG_BUILD_DIR}/${package_name}TargetsPrecheck.cmake" + CONTENT +" +_qt_internal_should_include_targets( + TARGETS ${target} + NAMESPACE ${INSTALL_CMAKE_NAMESPACE}:: + OUT_VAR_SHOULD_SKIP __qt_${target}_skip_include_targets_file +) +") if(arg_FIND_PRIVATE_MODULE) set(always_load_private_module ON) endif() @@ -1110,6 +1130,7 @@ set(__qt_${target}_always_load_private_module ON) "${arg_CONFIG_BUILD_DIR}/${package_name}Config.cmake" "${arg_CONFIG_BUILD_DIR}/${package_name}ConfigVersion.cmake" "${arg_CONFIG_BUILD_DIR}/${package_name}ConfigVersionImpl.cmake" + "${arg_CONFIG_BUILD_DIR}/${package_name}TargetsPrecheck.cmake" DESTINATION "${arg_CONFIG_INSTALL_DIR}" COMPONENT Devel ) diff --git a/cmake/QtModuleToolsConfig.cmake.in b/cmake/QtModuleToolsConfig.cmake.in index ec447aa55b4..43b826c2060 100644 --- a/cmake/QtModuleToolsConfig.cmake.in +++ b/cmake/QtModuleToolsConfig.cmake.in @@ -18,12 +18,16 @@ if(NOT DEFINED "@INSTALL_CMAKE_NAMESPACE@@target@_FOUND") set("@INSTALL_CMAKE_NAMESPACE@@target@_FOUND" TRUE) endif() -if (NOT QT_NO_CREATE_TARGETS AND @INSTALL_CMAKE_NAMESPACE@@target@_FOUND) +# Do the checks inside Targets.cmake even when the file is still being generated +include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") + +if(NOT __qt_@target@_skip_include_targets_file AND @INSTALL_CMAKE_NAMESPACE@@target@_FOUND) include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") if(NOT QT_NO_CREATE_VERSIONLESS_TARGETS) include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") endif() + set(__qt_@target@_targets_file_included ON) endif() foreach(extra_cmake_include @extra_cmake_includes@) diff --git a/cmake/QtPluginConfig.cmake.in b/cmake/QtPluginConfig.cmake.in index 1ec7663ac6f..9222742d1ac 100644 --- a/cmake/QtPluginConfig.cmake.in +++ b/cmake/QtPluginConfig.cmake.in @@ -22,7 +22,10 @@ cmake_minimum_required(VERSION @min_new_policy_version@...@max_new_policy_versio include(CMakeFindDependencyMacro) -if (NOT QT_NO_CREATE_TARGETS) +# Do the checks inside Targets.cmake even when the file is still being generated +include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") + +if(NOT __qt_@target@_skip_include_targets_file) # Find required dependencies, if any. if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") @@ -33,5 +36,6 @@ if (NOT QT_NO_CREATE_TARGETS) if(@target@_FOUND) include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@[email protected]") + set(__qt_@target@_targets_file_included ON) endif() endif() diff --git a/cmake/QtPluginHelpers.cmake b/cmake/QtPluginHelpers.cmake index e0c6e2f1e1a..e5fa1ea2e2f 100644 --- a/cmake/QtPluginHelpers.cmake +++ b/cmake/QtPluginHelpers.cmake @@ -401,6 +401,19 @@ endif()" "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake" INSTALL_DESTINATION "${config_install_dir}" ) + + qt_configure_file( + OUTPUT "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}TargetsPrecheck.cmake" + CONTENT +# TODO: Remove the CHECK_QT_NO_CREATE_TARGETS once a better approach is developed +" +_qt_internal_should_include_targets( + TARGETS ${target} + NAMESPACE ${INSTALL_CMAKE_NAMESPACE}:: + OUT_VAR_SHOULD_SKIP __qt_${target}_skip_include_targets_file + CHECK_QT_NO_CREATE_TARGETS +) +") write_basic_package_version_file( "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersionImpl.cmake" VERSION ${PROJECT_VERSION} @@ -415,6 +428,7 @@ endif()" "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake" "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersion.cmake" "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersionImpl.cmake" + "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}TargetsPrecheck.cmake" DESTINATION "${config_install_dir}" COMPONENT Devel ) diff --git a/cmake/QtPlugins.cmake.in b/cmake/QtPlugins.cmake.in index e668a4cbefe..a6ca60bbd12 100644 --- a/cmake/QtPlugins.cmake.in +++ b/cmake/QtPlugins.cmake.in @@ -9,6 +9,6 @@ if(NOT DEFINED QT_SKIP_AUTO_PLUGIN_INCLUSION) set(QT_SKIP_AUTO_PLUGIN_INCLUSION OFF) endif() -if(NOT QT_NO_CREATE_TARGETS AND NOT QT_SKIP_AUTO_PLUGIN_INCLUSION) +if(__qt_@QT_MODULE@_targets_file_included AND NOT QT_SKIP_AUTO_PLUGIN_INCLUSION) __qt_internal_include_plugin_packages(@QT_MODULE@) endif() diff --git a/cmake/QtPublicCMakeHelpers.cmake b/cmake/QtPublicCMakeHelpers.cmake index 866baee0b7f..543fa4c1aab 100644 --- a/cmake/QtPublicCMakeHelpers.cmake +++ b/cmake/QtPublicCMakeHelpers.cmake @@ -1012,6 +1012,7 @@ endfunction() # TARGETS <target1> ... # NAMESPACE <str> # OUT_VAR_SHOULD_SKIP <var> +# [CHECK_QT_NO_CREATE_TARGETS] # ) # # Arguments @@ -1024,8 +1025,13 @@ endfunction() # # `OUT_VAR_SHOULD_SKIP` # Output variable indicating if the `include(*Targets.cmake)` should be skipped +# +# `CHECK_QT_NO_CREATE_TARGETS` +# Whether to check `QT_NO_CREATE_TARGETS` as a compatibility step function(_qt_internal_should_include_targets) - set(option_args "") + set(option_args + CHECK_QT_NO_CREATE_TARGETS + ) set(single_args NAMESPACE OUT_VAR_SHOULD_SKIP @@ -1079,6 +1085,18 @@ function(_qt_internal_should_include_targets) endif() endforeach() + # Compatibility using the old global `QT_NO_CREATE_TARGETS` + # Currently needed for top-level builds because when a module has plugins, + # the plugins are included from the Config.cmake, before the plugin project + # is processed, so the build-time targets are not used in the + # `_qt_internal_check_multiple_inclusion` step. + # TODO: Use another method to detect if we have a project that need + # TODO: Remove these once developers have reconfigured their project. + if(arg_CHECK_QT_NO_CREATE_TARGETS AND QT_NO_CREATE_TARGETS) + set(${arg_OUT_VAR_SHOULD_SKIP} ON PARENT_SCOPE) + return() + endif() + # We might still be generating the Targets.cmake file, so we do the same # checks as in the Targets.cmake, but with the targets that were defined # in the current build tree. diff --git a/cmake/QtToolHelpers.cmake b/cmake/QtToolHelpers.cmake index 082717ab046..1954e6d85a2 100644 --- a/cmake/QtToolHelpers.cmake +++ b/cmake/QtToolHelpers.cmake @@ -395,7 +395,9 @@ function(qt_export_tools module_name) set(first_tool_package_version "") - foreach(tool_name ${QT_KNOWN_MODULE_${module_name}_TOOLS}) + set(known_tools ${QT_KNOWN_MODULE_${module_name}_TOOLS}) + + foreach(tool_name IN LISTS known_tools) # Specific tools can have package dependencies. # e.g. qtwaylandscanner depends on WaylandScanner (non-qt package). get_target_property(extra_packages "${tool_name}" QT_EXTRA_PACKAGE_DEPENDENCIES) @@ -427,8 +429,9 @@ function(qt_export_tools module_name) if (QT_WILL_RENAME_TOOL_TARGETS) string(REGEX REPLACE "_native$" "" tool_name ${tool_name}) endif() + # `__qt_${target}_targets_file_included` is defined in the QtModuleToolsConfig.cmake.in set(extra_cmake_statements "${extra_cmake_statements} -if(NOT QT_NO_CREATE_TARGETS AND ${INSTALL_CMAKE_NAMESPACE}${target}_FOUND) +if(__qt_${target}_targets_file_included AND ${INSTALL_CMAKE_NAMESPACE}${target}_FOUND) __qt_internal_promote_target_to_global(${INSTALL_CMAKE_NAMESPACE}::${tool_name}) endif() ") @@ -487,6 +490,16 @@ endif() INSTALL_DESTINATION "${config_install_dir}" ) + qt_configure_file( + OUTPUT "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}TargetsPrecheck.cmake" + CONTENT +"_qt_internal_should_include_targets( + TARGETS ${known_tools} + NAMESPACE ${INSTALL_CMAKE_NAMESPACE}:: + OUT_VAR_SHOULD_SKIP __qt_${target}_skip_include_targets_file +) +") + # There might be Tools packages which don't have a corresponding real module_name target, like # WaylandScannerTools. # In that case we'll use the package version of the first tool that belongs to that package. @@ -522,6 +535,7 @@ endif() "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake" "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersion.cmake" "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersionImpl.cmake" + "${config_build_dir}/${INSTALL_CMAKE_NAMESPACE}${target}TargetsPrecheck.cmake" DESTINATION "${config_install_dir}" COMPONENT Devel ) @@ -685,6 +699,7 @@ function(qt_internal_find_tool out_var target_name tools_target) set(tools_package_name "${INSTALL_CMAKE_NAMESPACE}${tools_target}Tools") message(STATUS "Searching for tool '${full_name}' in package ${tools_package_name}.") + # TODO: Remove these once developers have reconfigured their project. # Create the tool targets, even if QT_NO_CREATE_TARGETS is set. # Otherwise targets like Qt6::moc are not available in a top-level cross-build. set(BACKUP_QT_NO_CREATE_TARGETS ${QT_NO_CREATE_TARGETS}) @@ -750,6 +765,7 @@ function(qt_internal_find_tool out_var target_name tools_target) # Restore backups. set(CMAKE_FIND_ROOT_PATH "${${tools_package_name}_BACKUP_CMAKE_FIND_ROOT_PATH}") set(CMAKE_PREFIX_PATH "${${tools_package_name}_BACKUP_CMAKE_PREFIX_PATH}") + # TODO: Remove these once developers have reconfigured their project. set(QT_NO_CREATE_TARGETS ${BACKUP_QT_NO_CREATE_TARGETS}) if(${${tools_package_name}_FOUND} AND TARGET ${full_name}) diff --git a/src/corelib/Qt6CoreConfigExtras.cmake.in b/src/corelib/Qt6CoreConfigExtras.cmake.in index ce53b89a7b8..15405197a61 100644 --- a/src/corelib/Qt6CoreConfigExtras.cmake.in +++ b/src/corelib/Qt6CoreConfigExtras.cmake.in @@ -4,7 +4,7 @@ if(NOT DEFINED QT_DEFAULT_MAJOR_VERSION) set(QT_DEFAULT_MAJOR_VERSION 6) endif() -if (NOT QT_NO_CREATE_TARGETS) +if(__qt_Core_targets_file_included) set(__qt_core_target @QT_CMAKE_EXPORT_NAMESPACE@::Core) get_property(__qt_core_aliased_target TARGET ${__qt_core_target} PROPERTY ALIASED_TARGET) if(__qt_core_aliased_target) @@ -32,13 +32,13 @@ if(ANDROID_PLATFORM) include("${CMAKE_CURRENT_LIST_DIR}/@[email protected]") _qt_internal_create_global_android_targets() _qt_internal_collect_default_android_abis() - if(NOT QT_NO_CREATE_TARGETS) + if(__qt_Core_targets_file_included) _qt_internal_add_android_executable_finalizer(${__qt_core_target}) endif() endif() if(QT_FEATURE_permissions AND APPLE) - if(NOT QT_NO_CREATE_TARGETS) + if(__qt_Core_targets_file_included) set_property(TARGET ${__qt_core_target} APPEND PROPERTY INTERFACE_QT_EXECUTABLE_FINALIZERS _qt_internal_darwin_permission_finalizer diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt index 4028fc2c1bb..7c4f33cddb6 100644 --- a/tests/auto/cmake/CMakeLists.txt +++ b/tests/auto/cmake/CMakeLists.txt @@ -86,12 +86,6 @@ endif() set(required_packages Core Network Xml Sql Test TestInternalsPrivate) set(optional_packages DBus Gui Widgets PrintSupport OpenGL Concurrent) -# Setup the test when called as a completely standalone project. -if(TARGET Qt6::Core) - # Tests are built as part of the qtbase build tree. - # Setup paths so that the Qt packages are found, similar to examples. - qt_internal_set_up_build_dir_package_paths() -endif() find_package(Qt6 REQUIRED COMPONENTS ${required_packages}) find_package(Qt6 OPTIONAL_COMPONENTS ${optional_packages}) |