You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cmake/Tests/RunCMake/file/INSTALL-FOLLOW_SYMLINK_CHAI...

169 lines
6.2 KiB

file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/dest1")
file(TOUCH "${CMAKE_BINARY_DIR}/file1.txt")
file(CREATE_LINK file1.txt "${CMAKE_BINARY_DIR}/file1.txt.sym" SYMBOLIC)
file(TOUCH "${CMAKE_BINARY_DIR}/dest1/file1.txt.sym")
file(TOUCH "${CMAKE_BINARY_DIR}/file2.txt")
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/file2")
file(CREATE_LINK ../file2.txt "${CMAKE_BINARY_DIR}/file2/file2.txt.sym" SYMBOLIC)
file(TOUCH "${CMAKE_BINARY_DIR}/file3.txt")
file(CREATE_LINK "${CMAKE_BINARY_DIR}/file3.txt" "${CMAKE_BINARY_DIR}/file3.txt.sym" SYMBOLIC)
file(TOUCH "${CMAKE_BINARY_DIR}/file4.txt")
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/file4")
file(CREATE_LINK "${CMAKE_BINARY_DIR}/file4.txt" "${CMAKE_BINARY_DIR}/file4/file4.txt.sym" SYMBOLIC)
file(TOUCH "${CMAKE_BINARY_DIR}/file5.txt")
file(TOUCH "${CMAKE_BINARY_DIR}/file6.txt")
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/file6/file6")
file(CREATE_LINK file6.txt "${CMAKE_BINARY_DIR}/file6.txt.sym.1" SYMBOLIC)
file(CREATE_LINK ../file6.txt.sym.1 "${CMAKE_BINARY_DIR}/file6/file6.txt.sym.2" SYMBOLIC)
file(CREATE_LINK "${CMAKE_BINARY_DIR}/file6/file6.txt.sym.2" "${CMAKE_BINARY_DIR}/file6/file6/file6.txt.sym.3" SYMBOLIC)
file(CREATE_LINK file6.txt.sym.3 "${CMAKE_BINARY_DIR}/file6/file6/file6.txt.sym.4" SYMBOLIC)
file(TOUCH "${CMAKE_BINARY_DIR}/file7.txt")
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/file7")
file(TOUCH "${CMAKE_BINARY_DIR}/file8.txt")
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/file8")
file(CREATE_LINK "${CMAKE_BINARY_DIR}/file8/../file8.txt" "${CMAKE_BINARY_DIR}/file8/file8.txt.sym" SYMBOLIC)
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/file9")
file(TOUCH "${CMAKE_BINARY_DIR}/file9/file9.txt")
file(CREATE_LINK "${CMAKE_BINARY_DIR}/file9" "${CMAKE_BINARY_DIR}/file9.sym" SYMBOLIC)
file(TOUCH "${CMAKE_BINARY_DIR}/file10.txt")
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/file10")
file(CREATE_LINK "." "${CMAKE_BINARY_DIR}/file10/file10" SYMBOLIC)
file(CREATE_LINK "${CMAKE_BINARY_DIR}/file10/file10/../file10.txt" "${CMAKE_BINARY_DIR}/file10/file10.txt.sym" SYMBOLIC)
file(INSTALL
"${CMAKE_BINARY_DIR}/file1.txt.sym"
DESTINATION "${CMAKE_BINARY_DIR}/dest1"
FOLLOW_SYMLINK_CHAIN
)
file(INSTALL
"${CMAKE_BINARY_DIR}/file1.txt.sym"
"${CMAKE_BINARY_DIR}/file2/file2.txt.sym"
"${CMAKE_BINARY_DIR}/file3.txt.sym"
"${CMAKE_BINARY_DIR}/file4/file4.txt.sym"
"${CMAKE_BINARY_DIR}/file5.txt"
"${CMAKE_BINARY_DIR}/file6/file6/file6.txt.sym.4"
"${CMAKE_BINARY_DIR}/file8/file8.txt.sym"
"${CMAKE_BINARY_DIR}/file7/../file7.txt"
"${CMAKE_BINARY_DIR}/file8.txt"
"${CMAKE_BINARY_DIR}/file9.sym/file9.txt"
"${CMAKE_BINARY_DIR}/file10/file10/file10.txt.sym"
DESTINATION "${CMAKE_BINARY_DIR}/dest2"
FOLLOW_SYMLINK_CHAIN
)
set(resolved_file1.txt.sym file1.txt)
set(resolved_file10.txt.sym file10.txt)
set(resolved_file2.txt.sym file2.txt)
set(resolved_file3.txt.sym file3.txt)
set(resolved_file4.txt.sym file4.txt)
set(resolved_file6.txt.sym.1 file6.txt)
set(resolved_file6.txt.sym.2 file6.txt.sym.1)
set(resolved_file6.txt.sym.3 file6.txt.sym.2)
set(resolved_file6.txt.sym.4 file6.txt.sym.3)
set(resolved_file8.txt.sym file8.txt)
set(syms)
foreach(f
file1.txt
file1.txt.sym
file10.txt
file10.txt.sym
file2.txt
file2.txt.sym
file3.txt
file3.txt.sym
file4.txt
file4.txt.sym
file5.txt
file6.txt
file6.txt.sym.1
file6.txt.sym.2
file6.txt.sym.3
file6.txt.sym.4
file7.txt
file8.txt
file8.txt.sym
file9.txt
)
string(REPLACE "." "\\." r "${f}")
list(APPEND syms "[^;]*/Tests/RunCMake/file/INSTALL-FOLLOW_SYMLINK_CHAIN-build/dest2/${r}")
set(filename "${CMAKE_BINARY_DIR}/dest2/${f}")
if(DEFINED resolved_${f})
file(READ_SYMLINK "${filename}" resolved)
if(NOT resolved STREQUAL "${resolved_${f}}")
message(SEND_ERROR "Expected symlink resolution for ${f}: ${resolved_${f}}\nActual resolution: ${resolved}")
endif()
elseif(NOT EXISTS "${filename}" OR IS_SYMLINK "${filename}" OR IS_DIRECTORY "${filename}")
message(SEND_ERROR "${f} should be a regular file")
endif()
endforeach()
file(GLOB_RECURSE actual_syms LIST_DIRECTORIES true "${CMAKE_BINARY_DIR}/dest2/*")
if(NOT actual_syms MATCHES "^${syms}$")
message(SEND_ERROR "Expected files:\n\n ^${syms}$\n\nActual files:\n\n ${actual_syms}")
endif()
file(INSTALL
"${CMAKE_BINARY_DIR}/file1.txt.sym"
"${CMAKE_BINARY_DIR}/file2/file2.txt.sym"
"${CMAKE_BINARY_DIR}/file3.txt.sym"
"${CMAKE_BINARY_DIR}/file4/file4.txt.sym"
"${CMAKE_BINARY_DIR}/file5.txt"
"${CMAKE_BINARY_DIR}/file6/file6/file6.txt.sym.4"
"${CMAKE_BINARY_DIR}/file8/file8.txt.sym"
"${CMAKE_BINARY_DIR}/file7/../file7.txt"
"${CMAKE_BINARY_DIR}/file8.txt"
"${CMAKE_BINARY_DIR}/file9.sym/file9.txt"
"${CMAKE_BINARY_DIR}/file10/file10/file10.txt.sym"
DESTINATION "${CMAKE_BINARY_DIR}/dest3"
)
set(resolved_file1.txt.sym [[^file1\.txt$]])
set(resolved_file10.txt.sym [[/Tests/RunCMake/file/INSTALL-FOLLOW_SYMLINK_CHAIN-build/file10/file10/\.\./file10\.txt$]])
set(resolved_file2.txt.sym [[^\.\./file2\.txt$]])
set(resolved_file3.txt.sym [[/Tests/RunCMake/file/INSTALL-FOLLOW_SYMLINK_CHAIN-build/file3\.txt$]])
set(resolved_file4.txt.sym [[/Tests/RunCMake/file/INSTALL-FOLLOW_SYMLINK_CHAIN-build/file4\.txt$]])
set(resolved_file6.txt.sym.4 [[^file6\.txt\.sym\.3$]])
set(resolved_file8.txt.sym [[/Tests/RunCMake/file/INSTALL-FOLLOW_SYMLINK_CHAIN-build/file8/\.\./file8\.txt$]])
set(syms)
foreach(f
file1.txt.sym
file10.txt.sym
file2.txt.sym
file3.txt.sym
file4.txt.sym
file5.txt
file6.txt.sym.4
file7.txt
file8.txt
file8.txt.sym
file9.txt
)
string(REPLACE "." "\\." r "${f}")
list(APPEND syms "[^;]*/Tests/RunCMake/file/INSTALL-FOLLOW_SYMLINK_CHAIN-build/dest3/${r}")
set(filename "${CMAKE_BINARY_DIR}/dest3/${f}")
if(DEFINED resolved_${f})
file(READ_SYMLINK "${filename}" resolved)
if(NOT resolved MATCHES "${resolved_${f}}")
message(SEND_ERROR "Expected symlink resolution for ${f}: ${resolved_${f}}\nActual resolution: ${resolved}")
endif()
elseif(NOT EXISTS "${filename}" OR IS_SYMLINK "${filename}" OR IS_DIRECTORY "${filename}")
message(SEND_ERROR "${f} should be a regular file")
endif()
endforeach()
file(GLOB_RECURSE actual_syms LIST_DIRECTORIES true "${CMAKE_BINARY_DIR}/dest3/*")
if(NOT actual_syms MATCHES "^${syms}$")
message(SEND_ERROR "Expected files:\n\n ^${syms}$\n\nActual files:\n\n ${actual_syms}")
endif()