From e14e134d862daf2eb9ccc50f80189f276bea187f Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Fri, 15 Jul 2022 18:14:20 +0200 Subject: [PATCH] CMake: Move Qt6HostInfo lookup into a function Also replace the duplicate call in QtSetup using the new function. To do that, we have to actually the call it in QtBuild after QtPublicDependencyHelpers.cmake is available. That call is needed so that Qt6_HOST_INFO_foo variables are available in qt_generate_qmake_and_qtpaths_wrapper_for_target. Task-number: QTBUG-104998 Change-Id: Ic5776c214bee6bedcea714b213b0e5a42c1bae06 Reviewed-by: Alexey Edelev (cherry picked from commit a41bef8edeffe7b77970968533793a587215d977) Reviewed-by: Qt Cherry-pick Bot --- cmake/QtBuild.cmake | 8 ++++++++ cmake/QtConfig.cmake.in | 10 ---------- cmake/QtConfigDependencies.cmake.in | 2 ++ cmake/QtPublicDependencyHelpers.cmake | 12 ++++++++++++ cmake/QtSetup.cmake | 19 ++----------------- 5 files changed, 24 insertions(+), 27 deletions(-) diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index f338ec63d31..d3d41dbd07d 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -552,6 +552,14 @@ include(QtPublicFindPackageHelpers) include(QtPublicDependencyHelpers) include(QtPublicToolHelpers) +if(CMAKE_CROSSCOMPILING) + if(NOT IS_DIRECTORY "${QT_HOST_PATH}") + message(FATAL_ERROR "You need to set QT_HOST_PATH to cross compile Qt.") + endif() +endif() + +_qt_internal_find_host_info_package() + # TODO: This block provides support for old variables. It should be removed once # we remove all references to these variables in other Qt module repos. # Prefer to use the provided commands to retrieve the relevant things instead. diff --git a/cmake/QtConfig.cmake.in b/cmake/QtConfig.cmake.in index b8db0c8da3c..b9cf5e09642 100644 --- a/cmake/QtConfig.cmake.in +++ b/cmake/QtConfig.cmake.in @@ -23,16 +23,6 @@ else() QT_VERSION_PATCH @PROJECT_VERSION_PATCH@) endif() -if(NOT "${QT_HOST_PATH}" STREQUAL "") - find_package(Qt@PROJECT_VERSION_MAJOR@HostInfo - CONFIG - REQUIRED - PATHS "${QT_HOST_PATH}" - "${QT_HOST_PATH_CMAKE_DIR}" - NO_CMAKE_FIND_ROOT_PATH - NO_DEFAULT_PATH) -endif() - get_filename_component(_qt_import_prefix "${CMAKE_CURRENT_LIST_FILE}" PATH) get_filename_component(_qt_import_prefix "${_qt_import_prefix}" REALPATH) list(APPEND CMAKE_MODULE_PATH "${_qt_import_prefix}") diff --git a/cmake/QtConfigDependencies.cmake.in b/cmake/QtConfigDependencies.cmake.in index d7176435e7a..aabfa90328e 100644 --- a/cmake/QtConfigDependencies.cmake.in +++ b/cmake/QtConfigDependencies.cmake.in @@ -1,5 +1,7 @@ set(@INSTALL_CMAKE_NAMESPACE@_FOUND FALSE) +_qt_internal_find_host_info_package() + # note: _third_party_deps example: "ICU\\;FALSE\\;1.0\\;i18n uc data;ZLIB\\;FALSE\\;\\;" set(__qt_third_party_deps "@third_party_deps@") diff --git a/cmake/QtPublicDependencyHelpers.cmake b/cmake/QtPublicDependencyHelpers.cmake index 9a61eafed46..5abd9cff384 100644 --- a/cmake/QtPublicDependencyHelpers.cmake +++ b/cmake/QtPublicDependencyHelpers.cmake @@ -191,3 +191,15 @@ macro(_qt_internal_save_find_package_context_for_debugging infix) set(_qt_${infix}_qt_cmake_dir "${_qt_cmake_dir}") endif() endmacro() + +macro(_qt_internal_find_host_info_package) + if(NOT "${QT_HOST_PATH}" STREQUAL "") + find_package(Qt6HostInfo + CONFIG + REQUIRED + PATHS "${QT_HOST_PATH}" + "${QT_HOST_PATH_CMAKE_DIR}" + NO_CMAKE_FIND_ROOT_PATH + NO_DEFAULT_PATH) + endif() +endmacro() diff --git a/cmake/QtSetup.cmake b/cmake/QtSetup.cmake index 60b0bd02097..c9d2655bd98 100644 --- a/cmake/QtSetup.cmake +++ b/cmake/QtSetup.cmake @@ -254,26 +254,11 @@ unset(_qt_build_examples_as_external) option(QT_BUILD_MANUAL_TESTS "Build Qt manual tests" OFF) option(QT_BUILD_MINIMAL_STATIC_TESTS "Build minimal subset of tests for static Qt builds" OFF) -## Find host tools (if non native): +## Path used to find host tools, either when cross-compiling or just when using the tools from +## a different host build. set(QT_HOST_PATH "$ENV{QT_HOST_PATH}" CACHE PATH "Installed Qt host directory path, used for cross compiling.") -if (CMAKE_CROSSCOMPILING) - if(NOT IS_DIRECTORY "${QT_HOST_PATH}") - message(FATAL_ERROR "You need to set QT_HOST_PATH to cross compile Qt.") - endif() -endif() - -if(NOT "${QT_HOST_PATH}" STREQUAL "") - find_package(${INSTALL_CMAKE_NAMESPACE}HostInfo - CONFIG - REQUIRED - PATHS "${QT_HOST_PATH}" - "${QT_HOST_PATH_CMAKE_DIR}" - NO_CMAKE_FIND_ROOT_PATH - NO_DEFAULT_PATH) -endif() - ## Android platform settings if(ANDROID) include(QtPlatformAndroid)