diff --git a/Tests/RunCMake/CommandLineTar/roundtrip.cmake b/Tests/RunCMake/CommandLineTar/roundtrip.cmake index eeafcdbf1c..53bbbc6bc4 100644 --- a/Tests/RunCMake/CommandLineTar/roundtrip.cmake +++ b/Tests/RunCMake/CommandLineTar/roundtrip.cmake @@ -37,17 +37,29 @@ foreach(file ${CHECK_FILES}) configure_file(${CMAKE_CURRENT_LIST_FILE} ${FULL_COMPRESS_DIR}/${file} COPYONLY) endforeach() -if(UNIX) - execute_process(COMMAND ln -sf f1.txt ${FULL_COMPRESS_DIR}/d1/f2.txt) +# Test a (file) symlink inside the archive on platforms which support it. +execute_process( + COMMAND ${CMAKE_COMMAND} -E create_symlink f1.txt ${FULL_COMPRESS_DIR}/d1/f2.txt + OUTPUT_VARIABLE create_symlink_stdout + ERROR_VARIABLE create_symlink_stderr + RESULT_VARIABLE create_symlink_result +) +if(create_symlink_result EQUAL 0 AND EXISTS "${FULL_COMPRESS_DIR}/d1/f2.txt") list(APPEND CHECK_FILES "d1/f2.txt") endif() file(REMOVE ${FULL_OUTPUT_NAME}) file(REMOVE_RECURSE ${FULL_DECOMPRESS_DIR}) -if(DESTINATION_SYMLINK AND UNIX) +if(DESTINATION_SYMLINK) + # If specified, test extraction to a directory symlink on platforms which + # support it, but fall back to a plain directory otherwise. + cmake_policy(SET CMP0205 NEW) file(MAKE_DIRECTORY ${FULL_DECOMPRESS_DIR}-dir) - execute_process(COMMAND ln -sf - ${FULL_DECOMPRESS_DIR}-dir ${FULL_DECOMPRESS_DIR}) + file(CREATE_LINK + ${FULL_DECOMPRESS_DIR}-dir ${FULL_DECOMPRESS_DIR} + COPY_ON_ERROR + SYMBOLIC + ) else() file(MAKE_DIRECTORY ${FULL_DECOMPRESS_DIR}) endif() diff --git a/Tests/RunCMake/File_Archive/argument-validation-compression-level-1-stderr.txt b/Tests/RunCMake/File_Archive/argument-validation-compression-level-1-stderr.txt index 53cd7f59c4..41501a5c4b 100644 --- a/Tests/RunCMake/File_Archive/argument-validation-compression-level-1-stderr.txt +++ b/Tests/RunCMake/File_Archive/argument-validation-compression-level-1-stderr.txt @@ -1,4 +1,4 @@ -^CMake Error at compression-level\.cmake:39 \(file\): +^CMake Error at compression-level\.cmake:[0-9]+ \(file\): file compression level 100 for GZip should be in range 0 to 9 Call Stack \(most recent call first\): argument-validation-compression-level-1\.cmake:8 \(check_compression_level\) diff --git a/Tests/RunCMake/File_Archive/argument-validation-compression-level-2-stderr.txt b/Tests/RunCMake/File_Archive/argument-validation-compression-level-2-stderr.txt index 4a8bc0c9e8..d1220122a2 100644 --- a/Tests/RunCMake/File_Archive/argument-validation-compression-level-2-stderr.txt +++ b/Tests/RunCMake/File_Archive/argument-validation-compression-level-2-stderr.txt @@ -1,4 +1,4 @@ -^CMake Error at compression-level\.cmake:39 \(file\): +^CMake Error at compression-level\.cmake:[0-9]+ \(file\): file compression level high for GZip should be in range 0 to 9 Call Stack \(most recent call first\): argument-validation-compression-level-2\.cmake:8 \(check_compression_level\) diff --git a/Tests/RunCMake/File_Archive/argument-validation-threads-stderr.txt b/Tests/RunCMake/File_Archive/argument-validation-threads-stderr.txt index efbeb0c1a1..61d38f5978 100644 --- a/Tests/RunCMake/File_Archive/argument-validation-threads-stderr.txt +++ b/Tests/RunCMake/File_Archive/argument-validation-threads-stderr.txt @@ -1,4 +1,4 @@ -^CMake Error at threads\.cmake:39 \(file\): +^CMake Error at threads\.cmake:[0-9]+ \(file\): file number of threads -1 should be at least 0 Call Stack \(most recent call first\): argument-validation-threads\.cmake:8 \(check_threads\) diff --git a/Tests/RunCMake/File_Archive/compression-level.cmake b/Tests/RunCMake/File_Archive/compression-level.cmake index 2f5141df18..4d5a6178ab 100644 --- a/Tests/RunCMake/File_Archive/compression-level.cmake +++ b/Tests/RunCMake/File_Archive/compression-level.cmake @@ -27,8 +27,14 @@ function(check_compression_level COMPRESSION_LEVEL) configure_file(${CMAKE_CURRENT_LIST_FILE} ${FULL_COMPRESS_DIR}/${file} COPYONLY) endforeach() - if(UNIX) - execute_process(COMMAND ln -sf f1.txt ${FULL_COMPRESS_DIR}/d1/f2.txt) + # Test a (file) symlink inside the archive on platforms which support it. + execute_process( + COMMAND ${CMAKE_COMMAND} -E create_symlink f1.txt ${FULL_COMPRESS_DIR}/d1/f2.txt + OUTPUT_VARIABLE create_symlink_stdout + ERROR_VARIABLE create_symlink_stderr + RESULT_VARIABLE create_symlink_result + ) + if(create_symlink_result EQUAL 0 AND EXISTS "${FULL_COMPRESS_DIR}/d1/f2.txt") list(APPEND CHECK_FILES "d1/f2.txt") endif() diff --git a/Tests/RunCMake/File_Archive/roundtrip.cmake b/Tests/RunCMake/File_Archive/roundtrip.cmake index a2048930de..78a138db94 100644 --- a/Tests/RunCMake/File_Archive/roundtrip.cmake +++ b/Tests/RunCMake/File_Archive/roundtrip.cmake @@ -26,17 +26,29 @@ foreach(file ${CHECK_FILES}) configure_file(${CMAKE_CURRENT_LIST_FILE} ${FULL_COMPRESS_DIR}/${file} COPYONLY) endforeach() -if(UNIX) - execute_process(COMMAND ln -sf f1.txt ${FULL_COMPRESS_DIR}/d1/f2.txt) +# Test a (file) symlink inside the archive on platforms which support it. +execute_process( + COMMAND ${CMAKE_COMMAND} -E create_symlink f1.txt ${FULL_COMPRESS_DIR}/d1/f2.txt + OUTPUT_VARIABLE create_symlink_stdout + ERROR_VARIABLE create_symlink_stderr + RESULT_VARIABLE create_symlink_result +) +if(create_symlink_result EQUAL 0 AND EXISTS "${FULL_COMPRESS_DIR}/d1/f2.txt") list(APPEND CHECK_FILES "d1/f2.txt") endif() file(REMOVE ${FULL_OUTPUT_NAME}) file(REMOVE_RECURSE ${FULL_DECOMPRESS_DIR}) -if(DESTINATION_SYMLINK AND UNIX) +if(DESTINATION_SYMLINK) + # If specified, test extraction to a directory symlink on platforms which + # support it, but fall back to a plain directory otherwise. + cmake_policy(SET CMP0205 NEW) file(MAKE_DIRECTORY ${FULL_DECOMPRESS_DIR}-dir) - execute_process(COMMAND ln -sf - ${FULL_DECOMPRESS_DIR}-dir ${FULL_DECOMPRESS_DIR}) + file(CREATE_LINK + ${FULL_DECOMPRESS_DIR}-dir ${FULL_DECOMPRESS_DIR} + COPY_ON_ERROR + SYMBOLIC + ) else() file(MAKE_DIRECTORY ${FULL_DECOMPRESS_DIR}) endif() diff --git a/Tests/RunCMake/File_Archive/threads.cmake b/Tests/RunCMake/File_Archive/threads.cmake index 6a44ab77fa..2376e2077d 100644 --- a/Tests/RunCMake/File_Archive/threads.cmake +++ b/Tests/RunCMake/File_Archive/threads.cmake @@ -27,8 +27,14 @@ function(check_threads THREADS) configure_file(${CMAKE_CURRENT_LIST_FILE} ${FULL_COMPRESS_DIR}/${file} COPYONLY) endforeach() - if(UNIX) - execute_process(COMMAND ln -sf f1.txt ${FULL_COMPRESS_DIR}/d1/f2.txt) + # Test a (file) symlink inside the archive on platforms which support it. + execute_process( + COMMAND ${CMAKE_COMMAND} -E create_symlink f1.txt ${FULL_COMPRESS_DIR}/d1/f2.txt + OUTPUT_VARIABLE create_symlink_stdout + ERROR_VARIABLE create_symlink_stderr + RESULT_VARIABLE create_symlink_result + ) + if(create_symlink_result EQUAL 0 AND EXISTS "${FULL_COMPRESS_DIR}/d1/f2.txt") list(APPEND CHECK_FILES "d1/f2.txt") endif() diff --git a/Tests/RunCMake/File_Archive/unsupported-compression-level-stderr.txt b/Tests/RunCMake/File_Archive/unsupported-compression-level-stderr.txt index 9c3678d753..b43fc1ff84 100644 --- a/Tests/RunCMake/File_Archive/unsupported-compression-level-stderr.txt +++ b/Tests/RunCMake/File_Archive/unsupported-compression-level-stderr.txt @@ -1,4 +1,4 @@ -CMake Error at compression-level\.cmake:39 \(file\): +CMake Error at compression-level\.cmake:[0-9]+ \(file\): file compression level is not supported for compression "None"\. Provided compression level: 1 Call Stack \(most recent call first\):