Files
CMake/Modules/ExternalProject/mkdirs.cmake.in
Craig Scott 0cc1b550dd 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
2024-05-31 18:01:27 +10:00

28 lines
835 B
CMake

# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
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
"@binary_dir@"
"@install_dir@"
"@tmp_dir@"
"@stamp_dir@"
"@download_dir@"
"@log_dir@"
)
set(configSubDirs @CMAKE_CONFIGURATION_TYPES@)
foreach(subDir IN LISTS configSubDirs)
file(MAKE_DIRECTORY "@stamp_dir@/${subDir}")
endforeach()
if(cfgdir)
file(MAKE_DIRECTORY "@stamp_dir@${cfgdir}") # cfgdir has leading slash
endif()