From 9718c312b60e294603c3c352970be3b4c5011877 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 28 Nov 2023 09:03:56 -0500 Subject: Tests: Avoid leaving behind non-readable directories Since commit 337bc5662c (if(): add operators IS_READABLE, IS_WRITABLE and IS_EXECUTABLE., 2023-10-21) we create some non-readable directories. CMake 3.28 and below do not know how to delete them, so some nightly builds fail ctest_empty_binary_directory. Add read permission to those directories when we are finished with them. --- Tests/RunCMake/if/FilePermissions.cmake | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Tests/RunCMake/if/FilePermissions.cmake b/Tests/RunCMake/if/FilePermissions.cmake index f62b107..9edbddb 100644 --- a/Tests/RunCMake/if/FilePermissions.cmake +++ b/Tests/RunCMake/if/FilePermissions.cmake @@ -29,34 +29,47 @@ if(NOT WIN32) file(CHMOD "${CMAKE_CURRENT_BINARY_DIR}/executable-dir" PERMISSIONS OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE) endif() +function(cleanup) + if(NOT WIN32) + # CMake versions prior to 3.29 did not know how to remove non-readable directories. + file(CHMOD "${CMAKE_CURRENT_BINARY_DIR}/writable-dir" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_WRITE) + file(CHMOD "${CMAKE_CURRENT_BINARY_DIR}/executable-dir" PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE) + endif() +endfunction() + if(WIN32) # files are always readable and executable # directories are always, readable, writable and executable if(NOT IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/readable.txt" OR IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/readable.txt") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/readable.txt\" failed") endif() if(NOT IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/executable.txt" OR IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/executable.txt") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/executable.txt\" failed") endif() else() if(NOT IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/readable.txt" OR IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/readable.txt" OR IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/readable.txt") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/readable.txt\" failed") endif() if(NOT IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/writable.txt" OR IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/writable.txt" OR IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/writable.txt") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/writable.txt\" failed") endif() if(NOT IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/executable.txt" OR IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/executable.txt" OR IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/executable.txt") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/executable.txt\" failed") endif() @@ -64,18 +77,21 @@ else() if(NOT IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/readable-dir" OR IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/readable-dir" OR IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/readable-dir") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/readable-dir\" failed") endif() if(NOT IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/writable-dir" OR IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/writable-dir" OR IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/writable-dir") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/writable-dir\" failed") endif() if(NOT IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/executable-dir" OR IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/executable-dir" OR IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/executable-dir") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/executable.txt\" failed") endif() endif() @@ -119,18 +135,21 @@ if(UNIX) if(NOT IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-readable.txt" OR IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-readable.txt" OR IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-readable.txt") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/link-to-readable.txt\" failed") endif() if(NOT IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-writable.txt" OR IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-writable.txt" OR IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-writable.txt") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/link-to-writable.txt\" failed") endif() if(NOT IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-executable.txt" OR IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-executable.txt" OR IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-executable.txt") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/link-to-executable.txt\" failed") endif() @@ -138,18 +157,23 @@ if(UNIX) if(NOT IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-readable-dir" OR IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-readable-dir" OR IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-readable-dir") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/link-to-readable-dir\" failed") endif() if(NOT IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-writable-dir" OR IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-writable-dir" OR IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-writable-dir") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/link-to-writable-dir\" failed") endif() if(NOT IS_EXECUTABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-executable-dir" OR IS_READABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-executable-dir" OR IS_WRITABLE "${CMAKE_CURRENT_BINARY_DIR}/link-to-executable-dir") + cleanup() message(FATAL_ERROR "checks on \"${CMAKE_CURRENT_BINARY_DIR}/link-to-executable-dir\" failed") endif() endif() + +cleanup() -- cgit v0.12