| |
| file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/readable.txt" |
| "${CMAKE_CURRENT_BINARY_DIR}/writable.txt" |
| "${CMAKE_CURRENT_BINARY_DIR}/executable.txt") |
| |
| file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/readable.txt" "foo") |
| file(CHMOD "${CMAKE_CURRENT_BINARY_DIR}/readable.txt" PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) |
| |
| file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/writable.txt" "foo") |
| file(CHMOD "${CMAKE_CURRENT_BINARY_DIR}/writable.txt" PERMISSIONS OWNER_WRITE GROUP_WRITE) |
| |
| file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/executable.txt" "foo") |
| file(CHMOD "${CMAKE_CURRENT_BINARY_DIR}/executable.txt" PERMISSIONS OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE) |
| |
| if(NOT WIN32) |
| file(REMOVE_RECURSE |
| "${CMAKE_CURRENT_BINARY_DIR}/readable-dir" |
| "${CMAKE_CURRENT_BINARY_DIR}/writable-dir" |
| "${CMAKE_CURRENT_BINARY_DIR}/executable-dir" |
| ) |
| |
| file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/readable-dir") |
| file(CHMOD "${CMAKE_CURRENT_BINARY_DIR}/readable-dir" PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) |
| |
| file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/writable-dir") |
| file(CHMOD "${CMAKE_CURRENT_BINARY_DIR}/writable-dir" PERMISSIONS OWNER_WRITE GROUP_WRITE) |
| |
| file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/executable-dir") |
| 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() |
| |
| |
| 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() |
| |
| if(UNIX) |
| # |
| # Check that file permissions are on the real file, not the symbolic link |
| # |
| file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/link-to-readable.txt" |
| "${CMAKE_CURRENT_BINARY_DIR}/link-to-writable.txt" |
| "${CMAKE_CURRENT_BINARY_DIR}/link-to-executable.txt" |
| "${CMAKE_CURRENT_BINARY_DIR}/link-to-readable-dir" |
| "${CMAKE_CURRENT_BINARY_DIR}/link-to-writable-dir" |
| "${CMAKE_CURRENT_BINARY_DIR}/link-to-executable-dir") |
| |
| file(CREATE_LINK "${CMAKE_CURRENT_BINARY_DIR}/readable.txt" |
| "${CMAKE_CURRENT_BINARY_DIR}/link-to-readable.txt" |
| SYMBOLIC) |
| |
| file(CREATE_LINK "${CMAKE_CURRENT_BINARY_DIR}/writable.txt" |
| "${CMAKE_CURRENT_BINARY_DIR}/link-to-writable.txt" |
| SYMBOLIC) |
| |
| file(CREATE_LINK "${CMAKE_CURRENT_BINARY_DIR}/executable.txt" |
| "${CMAKE_CURRENT_BINARY_DIR}/link-to-executable.txt" |
| SYMBOLIC) |
| |
| |
| file(CREATE_LINK "${CMAKE_CURRENT_BINARY_DIR}/readable-dir" |
| "${CMAKE_CURRENT_BINARY_DIR}/link-to-readable-dir" |
| SYMBOLIC) |
| |
| file(CREATE_LINK "${CMAKE_CURRENT_BINARY_DIR}/writable-dir" |
| "${CMAKE_CURRENT_BINARY_DIR}/link-to-writable-dir" |
| SYMBOLIC) |
| |
| file(CREATE_LINK "${CMAKE_CURRENT_BINARY_DIR}/executable-dir" |
| "${CMAKE_CURRENT_BINARY_DIR}/link-to-executable-dir" |
| SYMBOLIC) |
| |
| 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() |
| |
| |
| 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() |