diff --git a/cmake/QtFindPackageHelpers.cmake b/cmake/QtFindPackageHelpers.cmake index ad8c2327857..b07db7a5989 100644 --- a/cmake/QtFindPackageHelpers.cmake +++ b/cmake/QtFindPackageHelpers.cmake @@ -378,6 +378,41 @@ function(qt_internal_get_package_version_of_target target package_version_out_va set(${package_version_out_var} "${package_version}" PARENT_SCOPE) endfunction() +# Get the CMake package name that contains / exported the Qt module target. +function(qt_internal_get_package_name_of_target target package_name_out_var) + qt_internal_is_lib_part_of_qt6_package("${target}" is_part_of_qt6) + + if(is_part_of_qt6) + set(package_name "${INSTALL_CMAKE_NAMESPACE}") + else() + # Get the package name from the module's target property. + # If not set, fallback to a name based on the target name. + # + # TODO: Remove fallback once sufficient time has passed, aka all developers updated + # their builds not to contain stale FooDependencies.cmakes files without the + # _qt_package_name property. + set(package_name "") + set(package_name_default "${INSTALL_CMAKE_NAMESPACE}${target}") + set(target_namespaced "${QT_CMAKE_EXPORT_NAMESPACE}::${target}") + if(TARGET "${target_namespaced}") + get_target_property(package_name_from_prop "${target_namespaced}" _qt_package_name) + if(package_name_from_prop) + set(package_name "${package_name_from_prop}") + endif() + endif() + if(NOT package_name) + message(WARNING + "Could not find target ${target_namespaced} to query its package name. " + "Defaulting to package name ${package_name_default}. Consider re-arranging the " + "project structure to ensure the target exists by this point." + ) + set(package_name "${package_name_default}") + endif() + endif() + + set(${package_name_out_var} "${package_name}" PARENT_SCOPE) +endfunction() + # This function stores the list of Qt targets a library depend on, # along with their version info, for usage in ${target}Depends.cmake file function(qt_register_target_dependencies target public_libs private_libs) @@ -409,14 +444,9 @@ function(qt_register_target_dependencies target public_libs private_libs) foreach(lib IN LISTS lib_list) if ("${lib}" MATCHES "^Qt::(.*)") set(lib "${CMAKE_MATCH_1}") - qt_internal_is_lib_part_of_qt6_package("${lib}" is_part_of_qt6) - + qt_internal_get_package_name_of_target("${lib}" package_name) qt_internal_get_package_version_of_target("${lib}" package_version) - if (is_part_of_qt6) - list(APPEND target_deps "Qt6\;${package_version}") - else() - list(APPEND target_deps "${INSTALL_CMAKE_NAMESPACE}${lib}\;${package_version}") - endif() + list(APPEND target_deps "${package_name}\;${package_version}") endif() endforeach() @@ -436,8 +466,9 @@ function(qt_register_target_dependencies target public_libs private_libs) qt_internal_is_lib_part_of_qt6_package("${lib}" is_part_of_qt6) get_target_property(lib_type "${lib_namespaced}" TYPE) if(NOT lib_type STREQUAL "STATIC_LIBRARY" AND NOT is_part_of_qt6) + qt_internal_get_package_name_of_target("${lib}" package_name) qt_internal_get_package_version_of_target("${lib}" package_version) - list(APPEND target_deps "${INSTALL_CMAKE_NAMESPACE}${lib}\;${package_version}") + list(APPEND target_deps "${package_name}\;${package_version}") endif() endif() endforeach() diff --git a/cmake/QtPostProcessHelpers.cmake b/cmake/QtPostProcessHelpers.cmake index b6cbb2c4b9f..bbdec47d82f 100644 --- a/cmake/QtPostProcessHelpers.cmake +++ b/cmake/QtPostProcessHelpers.cmake @@ -80,11 +80,6 @@ function(qt_internal_remove_qt_dependency_duplicates out_deps deps) if(dep) list(FIND ${out_deps} "${dep}" dep_seen) - # If the library depends on the Private and non-Private targets, - # we only need to 'find_dependency' for one of them. - if(dep_seen EQUAL -1 AND "${dep}" MATCHES "(.+)Private\;(.+)") - list(FIND ${out_deps} "${CMAKE_MATCH_1};${CMAKE_MATCH_2}" dep_seen) - endif() if(dep_seen EQUAL -1) list(LENGTH dep len) if(NOT (len EQUAL 2)) diff --git a/cmake/QtPublicDependencyHelpers.cmake b/cmake/QtPublicDependencyHelpers.cmake index abd1de235c4..803cb73e637 100644 --- a/cmake/QtPublicDependencyHelpers.cmake +++ b/cmake/QtPublicDependencyHelpers.cmake @@ -94,6 +94,10 @@ macro(_qt_internal_find_qt_dependencies target target_dep_list find_dependency_p list(GET __qt_${target}_target_dep 1 __qt_${target}_version) if (NOT ${__qt_${target}_pkg}_FOUND) + + # TODO: Remove Private handling once sufficient time has passed, aka all developers + # updated their builds not to contain stale FooDependencies.cmake files without the + # _qt_package_name property. set(__qt_${target}_pkg_names ${__qt_${target}_pkg}) if(__qt_${target}_pkg MATCHES "(.*)Private$") set(__qt_${target}_pkg_names "${CMAKE_MATCH_1};${__qt_${target}_pkg}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1c36da60223..0e10078bf45 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -58,11 +58,13 @@ endif() if (QT_FEATURE_xml) add_subdirectory(xml) endif() -add_subdirectory(tools) if (QT_FEATURE_dbus) add_subdirectory(dbus) endif() + +add_subdirectory(tools) + if(QT_FEATURE_gui) add_subdirectory(gui)