ExternalProject,FetchContent: Avoid CMAKE_DISABLE_SOURCE_CHANGES error

The file(MAKE_DIRECTORY) implementation checks whether a path is
allowed to be written to before it checks if it already exists. For the
scenario where a SOURCE_DIR is an existing directory within the main
project's source directory, this triggers a fatal error if
CMAKE_DISABLE_SOURCE_CHANGES is set to true for ExternalProject,
and some FetchContent scenarios. Therefore, add an explicit check for
existence first to avoid making such error-triggering calls.

Fixes: #21872
This commit is contained in:
Craig Scott
2024-05-31 17:38:10 +10:00
parent 140766867b
commit 0cc1b550dd
6 changed files with 49 additions and 2 deletions

View File

@@ -3,8 +3,13 @@
cmake_minimum_required(VERSION 3.5)
# If CMAKE_DISABLE_SOURCE_CHANGES is set to true and the source directory is an
# existing directory in our source tree, calling file(MAKE_DIRECTORY) on it
# would cause a fatal error, even though it would be a no-op.
if(NOT EXISTS "@source_dir@")
file(MAKE_DIRECTORY "@source_dir@")
endif()
file(MAKE_DIRECTORY
"@source_dir@"
"@binary_dir@"
"@install_dir@"
"@tmp_dir@"