diff options
Diffstat (limited to 'cmake/qt.toolchain.cmake.in')
-rw-r--r-- | cmake/qt.toolchain.cmake.in | 65 |
1 files changed, 60 insertions, 5 deletions
diff --git a/cmake/qt.toolchain.cmake.in b/cmake/qt.toolchain.cmake.in index 923ef36575..5e9acd66b8 100644 --- a/cmake/qt.toolchain.cmake.in +++ b/cmake/qt.toolchain.cmake.in @@ -2,7 +2,10 @@ set(__qt_toolchain_used_variables QT_CHAINLOAD_TOOLCHAIN_FILE QT_TOOLCHAIN_INCLUDE_FILE QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR - QT_TOOLCHAIN_RELOCATABLE_PREFIX) + QT_TOOLCHAIN_RELOCATABLE_PREFIX + QT_HOST_PATH + QT_HOST_PATH_CMAKE_DIR +) @init_additional_used_variables@ # Make cache variables used by this toolchain file available to the @@ -19,8 +22,6 @@ if($ENV{_QT_TOOLCHAIN_VARS_INITIALIZED}) endforeach() endif() -@init_qt_host_path@ -@init_qt_host_path_cmake_dir@ @init_original_toolchain_file@ @init_vcpkg@ @@ -120,8 +121,6 @@ if(__qt_toolchain_additional_packages_prefixes) endif() unset(__qt_toolchain_additional_packages_prefixes) -@init_qt_host_path_checks@ - # Allow customization of the toolchain file by placing an additional file next to it. set(__qt_toolchain_extra_file "${CMAKE_CURRENT_LIST_DIR}/qt.toolchain.extra.cmake") if(EXISTS "${__qt_toolchain_extra_file}") @@ -141,6 +140,62 @@ if(QT_TOOLCHAIN_INCLUDE_FILE) endif() endif() +# Set up QT_HOST_PATH and do sanity checks. +# A host path is required when cross-compiling but optional when doing a native build. +set(__qt_toolchain_host_path_required "@qt_host_path_required@") +set(__qt_toolchain_initial_qt_host_path + "@qt_host_path_absolute@") +set(__qt_toolchain_initial_qt_host_path_cmake_dir + "@qt_host_path_cmake_dir_absolute@") + +# Prefer initially configured path if none was explicitly set. +if(NOT DEFINED QT_HOST_PATH AND __qt_toolchain_initial_qt_host_path + AND EXISTS "${__qt_toolchain_initial_qt_host_path}") + set(QT_HOST_PATH "${__qt_toolchain_initial_qt_host_path}" CACHE PATH "") +endif() + +if(NOT QT_HOST_PATH STREQUAL "") + get_filename_component(__qt_toolchain_host_path_absolute "${QT_HOST_PATH}" ABSOLUTE) +endif() + +if(__qt_toolchain_host_path_required AND + ("${QT_HOST_PATH}" STREQUAL "" OR NOT EXISTS "${__qt_toolchain_host_path_absolute}")) + message(FATAL_ERROR + "To use a cross-compiled Qt, please set the QT_HOST_PATH cache variable to the location " + "of your host Qt installation.") +endif() + +# QT_HOST_PATH_CMAKE_DIR is needed to work around the rerooting issue when looking for host tools +# See REROOT_PATH_ISSUE_MARKER. +# Prefer initially configured path if none was explicitly set. +if(__qt_toolchain_host_path_required AND NOT DEFINED QT_HOST_PATH_CMAKE_DIR) + if(__qt_toolchain_initial_qt_host_path_cmake_dir + AND EXISTS "${__qt_toolchain_initial_qt_host_path_cmake_dir}") + set(QT_HOST_PATH_CMAKE_DIR "${__qt_toolchain_initial_qt_host_path_cmake_dir}" CACHE PATH "") + else() + # First try to auto-compute the location instead of requiring to set QT_HOST_PATH_CMAKE_DIR + # explicitly. + set(__qt_candidate_host_path_cmake_dir "${QT_HOST_PATH}/lib/cmake") + if(__qt_candidate_host_path_cmake_dir AND EXISTS "${__qt_candidate_host_path_cmake_dir}") + set(QT_HOST_PATH_CMAKE_DIR + "${__qt_candidate_host_path_cmake_dir}" CACHE PATH "") + endif() + endif() +endif() + +if(NOT QT_HOST_PATH_CMAKE_DIR STREQUAL "") + get_filename_component(__qt_toolchain_host_path_cmake_dir_absolute + "${QT_HOST_PATH_CMAKE_DIR}" ABSOLUTE) +endif() + +if(__qt_toolchain_host_path_required AND + ("${QT_HOST_PATH_CMAKE_DIR}" STREQUAL "" + OR NOT EXISTS "${__qt_toolchain_host_path_cmake_dir_absolute}")) + message(FATAL_ERROR + "To use a cross-compiled Qt, please set the QT_HOST_PATH_CMAKE_DIR cache variable to " + "the location of your host Qt installation lib/cmake directory.") +endif() + # Compile tests only see a restricted set of variables. # All cache variables, this toolchain file uses, must be made available to project-based # try_compile tests because this toolchain file will be included there too. |