mirror of
https://github.com/reactos/CMake.git
synced 2024-12-04 01:22:28 +00:00
5fbefd66dc
The commit "Fix get_filename_component ABSOLUTE mode" broke REALPATH treatment of relative paths because it stopped storing the absolute path in local variable 'filename'. This commit fixes the call to GetRealPath to use the proper local variable and adds a test.
73 lines
2.3 KiB
CMake
73 lines
2.3 KiB
CMake
set(bindir ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
#
|
|
# Test nonexistent REALPATH & ABSOLUTE resolution
|
|
#
|
|
get_filename_component(nonexistent1 ${bindir}/THIS_IS_A_NONEXISTENT_FILE REALPATH)
|
|
get_filename_component(nonexistent2 ${bindir}/THIS_IS_A_NONEXISTENT_FILE ABSOLUTE)
|
|
if(NOT nonexistent1 STREQUAL "${bindir}/THIS_IS_A_NONEXISTENT_FILE")
|
|
message(FATAL_ERROR "REALPATH is not preserving nonexistent files")
|
|
endif()
|
|
if(NOT nonexistent2 STREQUAL "${bindir}/THIS_IS_A_NONEXISTENT_FILE")
|
|
message(FATAL_ERROR "ABSOLUTE is not preserving nonexistent files")
|
|
endif()
|
|
|
|
#
|
|
# Test treatment of relative paths
|
|
#
|
|
foreach(c REALPATH ABSOLUTE)
|
|
get_filename_component(dir "subdir/THIS_IS_A_NONEXISTENT_FILE" ${c})
|
|
if(NOT "${dir}" STREQUAL "${bindir}/subdir/THIS_IS_A_NONEXISTENT_FILE")
|
|
message(FATAL_ERROR
|
|
"${c} does not handle relative paths. Expected:\n"
|
|
" ${bindir}/subdir/THIS_IS_A_NONEXISTENT_FILE\n"
|
|
"but got:\n"
|
|
" ${nonexistent1}\n"
|
|
)
|
|
endif()
|
|
endforeach()
|
|
|
|
#
|
|
# Test symbolic link resolution
|
|
#
|
|
if(UNIX)
|
|
# file1 => file2 => file3 (real)
|
|
file(WRITE ${bindir}/file3 "test file")
|
|
|
|
find_program(LN NAMES "ln")
|
|
if(LN)
|
|
# Create symlinks using "ln -s"
|
|
if(NOT EXISTS ${bindir}/file2)
|
|
execute_process(COMMAND ${LN} "-s" "${bindir}/file3" "${bindir}/file2")
|
|
endif()
|
|
if(NOT EXISTS ${bindir}/file1)
|
|
execute_process(COMMAND ${LN} "-s" "${bindir}/file2" "${bindir}/file1")
|
|
endif()
|
|
|
|
get_filename_component(file1 ${bindir}/file1 REALPATH)
|
|
get_filename_component(file2 ${bindir}/file2 REALPATH)
|
|
get_filename_component(file3 ${bindir}/file3 REALPATH)
|
|
|
|
if(NOT file3 STREQUAL "${bindir}/file3")
|
|
message(FATAL_ERROR "CMake fails resolving REALPATH file file3")
|
|
endif()
|
|
|
|
if(NOT file2 STREQUAL "${bindir}/file3")
|
|
message(FATAL_ERROR "CMake fails resolving simple symlink")
|
|
endif()
|
|
|
|
if(NOT file1 STREQUAL "${bindir}/file3")
|
|
message(FATAL_ERROR "CMake fails resolving double symlink")
|
|
endif()
|
|
|
|
# cleanup
|
|
file(REMOVE ${bindir}/file1)
|
|
file(REMOVE ${bindir}/file2)
|
|
if(EXISTS file1 OR EXISTS file2)
|
|
message(FATAL_ERROR "removal of file1 or file2 failed")
|
|
endif()
|
|
endif(LN)
|
|
|
|
file(REMOVE ${bindir}/file3)
|
|
endif()
|