FetchContent: Reject CMAKE_TOOLCHAIN_FILE env var in sub-build

The sub-build should never try to use a toolchain file. The toolchain file
may itself be getting downloaded by FetchContent. If the
CMAKE_TOOLCHAIN_FILE environment variable is set, CMake uses it to
initialize the CMake variable of the same name. We need to explicitly
clear them before the first project call of the sub-build.

Fixes: #24535
stage/master/nightly/2023/02/26
Craig Scott 2023-02-24 17:10:38 +11:00
parent 31ef93f19f
commit c15674a9cb
No known key found for this signature in database
GPG Key ID: 6FF37CBDCCADED9F
3 changed files with 9 additions and 0 deletions

View File

@ -3,6 +3,12 @@
cmake_minimum_required(VERSION @CMAKE_VERSION@)
# Reject any attempt to use a toolchain file. We must not use one because
# we could be downloading it here. If the CMAKE_TOOLCHAIN_FILE environment
# variable is set, the cache variable will have been initialized from it.
unset(CMAKE_TOOLCHAIN_FILE CACHE)
unset(ENV{CMAKE_TOOLCHAIN_FILE})
# We name the project and the target for the ExternalProject_Add() call
# to something that will highlight to the user what we are working on if
# something goes wrong and an error message is produced.

View File

@ -0,0 +1,2 @@
set(ENV{CMAKE_TOOLCHAIN_FILE} path/to/somewhere/iDoNotExist.cmake)
include(DownloadFile.cmake)

View File

@ -7,6 +7,7 @@ run_cmake(DirectIgnoresDetails)
run_cmake(FirstDetailsWin)
run_cmake(DownloadTwice)
run_cmake(DownloadFile)
run_cmake(IgnoreToolchainFile)
run_cmake(SameGenerator)
run_cmake(System)
run_cmake(VarDefinitions)