Sfoglia il codice sorgente

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.
Brad King 2 anni fa
parent
commit
9718c312b6
1 ha cambiato i file con 24 aggiunte e 0 eliminazioni
  1. 24 0
      Tests/RunCMake/if/FilePermissions.cmake

+ 24 - 0
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()