summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt7
-rw-r--r--cmake/QtAutoDetect.cmake11
-rw-r--r--cmake/QtBaseGlobalTargets.cmake2
-rw-r--r--cmake/qt.toolchain.cmake.in16
4 files changed, 30 insertions, 6 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 97fbfac421..1a92f3dc03 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,8 +1,11 @@
# special case skip regeneration
cmake_minimum_required(VERSION 3.15.0)
-# Run auto detection routines
-include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/QtAutoDetect.cmake)
+# Run auto detection routines, but not when doing stnadalone tests. In that case the detection
+# results are takend from either QtBuildInternals or the qt.toolchain.cmake file.
+if(NOT QT_BUILD_STANDALONE_TESTS)
+ include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/QtAutoDetect.cmake)
+endif()
if (CMAKE_CROSSCOMPILING AND CMAKE_SYSROOT)
# When cross compiling with CMake any calls to pkg_check_modules() will
diff --git a/cmake/QtAutoDetect.cmake b/cmake/QtAutoDetect.cmake
index 2fa103963a..5c72bf39d8 100644
--- a/cmake/QtAutoDetect.cmake
+++ b/cmake/QtAutoDetect.cmake
@@ -185,6 +185,16 @@ function(qt_auto_detect_cmake_config)
endif()
endfunction()
+function(qt_auto_detect_cyclic_toolchain)
+ if(CMAKE_TOOLCHAIN_FILE AND CMAKE_TOOLCHAIN_FILE MATCHES "/qt.toolchain.cmake$")
+ message(FATAL_ERROR
+ "Woah there! You can't use the Qt generated qt.toolchain.cmake file to configure "
+ "qtbase, because that will create a toolchain file that includes itself!\n"
+ "Did you accidentally use qt-cmake to configure qtbase? Make sure to remove the "
+ "CMakeCache.txt file, and configure qtbase with 'cmake' instead of 'qt-cmake'.")
+ endif()
+endfunction()
+
function(qt_auto_detect_darwin)
if(APPLE)
# If no CMAKE_OSX_DEPLOYMENT_TARGET is provided, default to a value that Qt defines.
@@ -230,6 +240,7 @@ function(qt_auto_detect_pch)
option(BUILD_WITH_PCH "Build Qt using precompiled headers?" "${default_value}")
endfunction()
+qt_auto_detect_cyclic_toolchain()
qt_auto_detect_cmake_config()
qt_auto_detect_darwin()
qt_auto_detect_ios()
diff --git a/cmake/QtBaseGlobalTargets.cmake b/cmake/QtBaseGlobalTargets.cmake
index d37c7f1cc0..5e97f0e66b 100644
--- a/cmake/QtBaseGlobalTargets.cmake
+++ b/cmake/QtBaseGlobalTargets.cmake
@@ -116,7 +116,7 @@ if(QT_HOST_PATH)
endif()
if(CMAKE_TOOLCHAIN_FILE)
- set(init_original_toolchain_file "set(qt_chainload_toolchain_file \"${CMAKE_TOOLCHAIN_FILE}\")")
+ set(init_original_toolchain_file "set(__qt_chainload_toolchain_file \"${CMAKE_TOOLCHAIN_FILE}\")")
endif()
if(VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
diff --git a/cmake/qt.toolchain.cmake.in b/cmake/qt.toolchain.cmake.in
index d623d9c0fb..e7af642c05 100644
--- a/cmake/qt.toolchain.cmake.in
+++ b/cmake/qt.toolchain.cmake.in
@@ -6,9 +6,19 @@
@init_vcpkg@
-if(qt_chainload_toolchain_file)
- include("${qt_chainload_toolchain_file}")
- unset(qt_chainload_toolchain_file)
+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."
+ )
+ 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