From 0fd64345fe445797f5b2d89c1371e421d915dc9b Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 30 Nov 2023 14:20:32 -0500 Subject: Tests: Add case covering non-writable CMAKE_BINARY_DIR Issue: #24407 --- Tests/RunCMake/Configure/ReadOnly-result.txt | 1 + Tests/RunCMake/Configure/ReadOnly-stderr.txt | 8 ++++++++ Tests/RunCMake/Configure/ReadOnly.cmake | 1 + Tests/RunCMake/Configure/RunCMakeTest.cmake | 16 ++++++++++++++++ 4 files changed, 26 insertions(+) create mode 100644 Tests/RunCMake/Configure/ReadOnly-result.txt create mode 100644 Tests/RunCMake/Configure/ReadOnly-stderr.txt create mode 100644 Tests/RunCMake/Configure/ReadOnly.cmake diff --git a/Tests/RunCMake/Configure/ReadOnly-result.txt b/Tests/RunCMake/Configure/ReadOnly-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/Configure/ReadOnly-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/Configure/ReadOnly-stderr.txt b/Tests/RunCMake/Configure/ReadOnly-stderr.txt new file mode 100644 index 0000000..fb00ae9 --- /dev/null +++ b/Tests/RunCMake/Configure/ReadOnly-stderr.txt @@ -0,0 +1,8 @@ +CMake Error: Unable to \(re\)create the private pkgRedirects directory: + [^ +]*/Tests/RunCMake/Configure/ReadOnly-build/CMakeFiles/pkgRedirects +This may be caused by not having read/write access to the build directory. +Try specifying a location with read/write access like: + cmake -B build +If using a CMake presets file, ensure that preset parameter +'binaryDir' expands to a writable directory. diff --git a/Tests/RunCMake/Configure/ReadOnly.cmake b/Tests/RunCMake/Configure/ReadOnly.cmake new file mode 100644 index 0000000..2fc38e5 --- /dev/null +++ b/Tests/RunCMake/Configure/ReadOnly.cmake @@ -0,0 +1 @@ +message(FATAL_ERROR "This should not be reached!") diff --git a/Tests/RunCMake/Configure/RunCMakeTest.cmake b/Tests/RunCMake/Configure/RunCMakeTest.cmake index df6849e..842a005 100644 --- a/Tests/RunCMake/Configure/RunCMakeTest.cmake +++ b/Tests/RunCMake/Configure/RunCMakeTest.cmake @@ -55,3 +55,19 @@ if(NOT RunCMake_GENERATOR MATCHES "^Ninja Multi-Config$") run_cmake(NoCMAKE_DEFAULT_BUILD_TYPE) run_cmake(NoCMAKE_DEFAULT_CONFIGS) endif() + +if(NOT CMAKE_HOST_WIN32) + block() + # Test a non-writable build directory. + # Exclude when running as root because directories are always writable. + get_unix_uid(uid) + if(NOT uid STREQUAL "0") + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/ReadOnly-build) + file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + file(CHMOD "${RunCMake_TEST_BINARY_DIR}" PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake(ReadOnly) + endif() + endblock() +endif() -- cgit v0.12