From bc29555e6e2335e4079a9fd2f1a7e2991da87e46 Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Tue, 14 Jul 2020 11:25:47 +0200 Subject: [PATCH] CMake: Fix old style find_package(Qt6Foo) to work Each module package needs to first find the Qt6 package to ensure that all the necessary info is setup for further depedencies to be found. Task-number: QTBUG-81672 Change-Id: I3ee608d24c1efbb63a063261fb36341bf52fb78d Reviewed-by: Joerg Bornemann --- cmake/QtModuleDependencies.cmake.in | 9 +++++++++ cmake/QtPostProcess.cmake | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/cmake/QtModuleDependencies.cmake.in b/cmake/QtModuleDependencies.cmake.in index 5d94eb9a5d3..4fdeb33c46c 100644 --- a/cmake/QtModuleDependencies.cmake.in +++ b/cmake/QtModuleDependencies.cmake.in @@ -1,3 +1,12 @@ +# Make sure @INSTALL_CMAKE_NAMESPACE@ is found before anything else. +find_dependency(@INSTALL_CMAKE_NAMESPACE@ @PROJECT_VERSION@ + PATHS "${CMAKE_CURRENT_LIST_DIR}/.." ${QT_EXAMPLES_CMAKE_PREFIX_PATH} NO_DEFAULT_PATH +) +if (NOT @INSTALL_CMAKE_NAMESPACE@_FOUND) + set(@INSTALL_CMAKE_NAMESPACE@@target@_FOUND FALSE) + return() +endif() + # note: _third_party_deps example: "ICU\\;1.0\\;i18n uc data;ZLIB\\;\\;" set(_third_party_deps "@third_party_deps@") diff --git a/cmake/QtPostProcess.cmake b/cmake/QtPostProcess.cmake index b6cbe57d410..49bb5c268d2 100644 --- a/cmake/QtPostProcess.cmake +++ b/cmake/QtPostProcess.cmake @@ -145,7 +145,7 @@ function(qt_internal_create_module_depends_file target) "${INSTALL_CMAKE_NAMESPACE}${target}Tools\;${PROJECT_VERSION}") endif() - # Dirty hack because https://gitlab.kitware.com/cmake/cmake/issues/19200 + # Dirty deduplication hack because of https://gitlab.kitware.com/cmake/cmake/issues/19200 foreach(dep ${target_deps}) if(dep) list(FIND target_deps_seen "${dep}" dep_seen) @@ -157,6 +157,12 @@ function(qt_internal_create_module_depends_file target) list(GET dep 0 dep_name) list(GET dep 1 dep_ver) + # Skip over Qt6 dependency, because we will manually handle it in the Dependencies + # file before everything else, to ensure that find_package(Qt6Core)-style works. + if(dep_name STREQUAL INSTALL_CMAKE_NAMESPACE) + continue() + endif() + list(APPEND target_deps_seen "${dep_name}\;${dep_ver}") endif() endif()