c457e65bf4
list(PREPEND) command was added in CMake 3.15+, but so far we claim
support for CMake 3.14 in user projects.
Use set command instead.
This is not the only place where we use list PREPEND in public API,
but it's the first immediate issue that comes up when using CMake
3.14.
Amends 963017f588
Pick-to: 6.1
Change-Id: I7ba4507fc7da2dc550317848751502b8b46c298c
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
99 lines
4.4 KiB
CMake
99 lines
4.4 KiB
CMake
set(__qt_toolchain_used_variables
|
|
QT_CHAINLOAD_TOOLCHAIN_FILE
|
|
QT_TOOLCHAIN_INCLUDE_FILE
|
|
QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR
|
|
QT_TOOLCHAIN_RELOCATABLE_PREFIX)
|
|
@init_additional_used_variables@
|
|
|
|
# Make cache variables used by this toolchain file available to the
|
|
# try_compile command that operates on sources files.
|
|
list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES ${__qt_toolchain_used_variables})
|
|
list(REMOVE_DUPLICATES CMAKE_TRY_COMPILE_PLATFORM_VARIABLES)
|
|
|
|
# Turn the environment variables that are created at the end of this
|
|
# file into proper variables. This is needed for try_compile calls
|
|
# that operate on whole projects.
|
|
if($ENV{_QT_TOOLCHAIN_VARS_INITIALIZED})
|
|
foreach(var ${__qt_toolchain_used_variables})
|
|
set(${var} "$ENV{_QT_TOOLCHAIN_${var}}")
|
|
endforeach()
|
|
endif()
|
|
|
|
@init_qt_host_path@
|
|
@init_qt_host_path_cmake_dir@
|
|
@init_original_toolchain_file@
|
|
@init_vcpkg@
|
|
|
|
@init_platform@
|
|
|
|
if(NOT "${QT_CHAINLOAD_TOOLCHAIN_FILE}" STREQUAL "")
|
|
set(__qt_chainload_toolchain_file "${QT_CHAINLOAD_TOOLCHAIN_FILE}")
|
|
endif()
|
|
if(__qt_chainload_toolchain_file)
|
|
get_filename_component(__qt_chainload_toolchain_file_real_path
|
|
"${__qt_chainload_toolchain_file}" REALPATH)
|
|
if(__qt_chainload_toolchain_file_real_path STREQUAL CMAKE_CURRENT_LIST_FILE)
|
|
message(FATAL_ERROR
|
|
"Woah, the Qt toolchain file tried to include itself recusively! '${__qt_chainload_toolchain_file}' "
|
|
"Make sure to remove qtbase/CMakeCache.txt and reconfigure qtbase with 'cmake' "
|
|
"rather than 'qt-cmake', and then you can reconfigure your own project."
|
|
)
|
|
elseif(NOT EXISTS "${__qt_chainload_toolchain_file_real_path}")
|
|
message(WARNING "The toolchain file to be chainloaded "
|
|
"'${__qt_chainload_toolchain_file}' does not exist.")
|
|
else()
|
|
include("${__qt_chainload_toolchain_file}")
|
|
endif()
|
|
unset(__qt_chainload_toolchain_file)
|
|
endif()
|
|
|
|
# Compute dynamically the Qt installation prefix from the location of this file. This allows
|
|
# the usage of the toolchain file when the Qt installation is relocated.
|
|
get_filename_component(QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX
|
|
${CMAKE_CURRENT_LIST_DIR}/../@qt_path_from_cmake_config_dir_to_prefix@
|
|
ABSOLUTE)
|
|
|
|
# Compute the path to the installed Qt lib/cmake folder.
|
|
# We assume that the Qt toolchain location is inside the CMake Qt6 package, and thus the directory
|
|
# one level higher is what we're looking for.
|
|
get_filename_component(QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)
|
|
|
|
# There's a subdirectory check in cmake's cmFindCommon::RerootPaths() function, that doesn't handle
|
|
# the case of CMAKE_PREFIX_PATH == CMAKE_FIND_ROOT_PATH for a particular pair of entries.
|
|
# Instead of collapsing the search prefix (which is the case when one is a subdir of the other),
|
|
# it concatenates them creating an invalid path. Workaround it by setting the root path to the
|
|
# Qt install prefix, and the prefix path to the lib/cmake subdir.
|
|
set(CMAKE_PREFIX_PATH "${QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR};${CMAKE_PREFIX_PATH}")
|
|
set(CMAKE_FIND_ROOT_PATH "${QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX};${CMAKE_FIND_ROOT_PATH}")
|
|
|
|
@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}")
|
|
include("${__qt_toolchain_extra_file}")
|
|
endif()
|
|
|
|
# Allow customization of the toolchain file by passing a path to an additional CMake file to be
|
|
# included.
|
|
if(QT_TOOLCHAIN_INCLUDE_FILE)
|
|
get_filename_component(__qt_toolchain_include_file_real_path
|
|
"${QT_TOOLCHAIN_INCLUDE_FILE}" REALPATH)
|
|
if(EXISTS "${__qt_toolchain_include_file_real_path}")
|
|
include("${__qt_toolchain_include_file_real_path}")
|
|
else()
|
|
message(WARNING "The passed extra toolchain file to be included does not exist: "
|
|
"${__qt_toolchain_include_file_real_path}")
|
|
endif()
|
|
endif()
|
|
|
|
# Compile tests only see a restricted set of variables.
|
|
# All cache variables, this toolchain file uses, must be made available to compile tests,
|
|
# because this toolchain file will be included there too.
|
|
if(NOT ENV{_QT_TOOLCHAIN_VARS_INITIALIZED})
|
|
set(ENV{_QT_TOOLCHAIN_VARS_INITIALIZED} ON)
|
|
foreach(var ${__qt_toolchain_used_variables})
|
|
set(ENV{_QT_TOOLCHAIN_${var}} "${${var}}")
|
|
endforeach()
|
|
endif()
|