GetFilenameComponentRealpathTest.cmake.in 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. set(bindir ${CMAKE_CURRENT_BINARY_DIR})
  2. #
  3. # Test nonexistent REALPATH & ABSOLUTE resolution
  4. #
  5. get_filename_component(nonexistent1 ${bindir}/THIS_IS_A_NONEXISTENT_FILE REALPATH)
  6. get_filename_component(nonexistent2 ${bindir}/THIS_IS_A_NONEXISTENT_FILE ABSOLUTE)
  7. if(NOT nonexistent1 STREQUAL "${bindir}/THIS_IS_A_NONEXISTENT_FILE")
  8. message(FATAL_ERROR "REALPATH is not preserving nonexistent files")
  9. endif()
  10. if(NOT nonexistent2 STREQUAL "${bindir}/THIS_IS_A_NONEXISTENT_FILE")
  11. message(FATAL_ERROR "ABSOLUTE is not preserving nonexistent files")
  12. endif()
  13. #
  14. # Test symbolic link resolution
  15. #
  16. if(UNIX)
  17. # file1 => file2 => file3 (real)
  18. file(WRITE ${bindir}/file3 "test file")
  19. find_program(LN NAMES "ln")
  20. if(LN)
  21. # Create symlinks using "ln -s"
  22. if(NOT EXISTS ${bindir}/file2)
  23. execute_process(COMMAND ${LN} "-s" "${bindir}/file3" "${bindir}/file2")
  24. endif()
  25. if(NOT EXISTS ${bindir}/file1)
  26. execute_process(COMMAND ${LN} "-s" "${bindir}/file2" "${bindir}/file1")
  27. endif()
  28. get_filename_component(file1 ${bindir}/file1 REALPATH)
  29. get_filename_component(file2 ${bindir}/file2 REALPATH)
  30. get_filename_component(file3 ${bindir}/file3 REALPATH)
  31. if(NOT file3 STREQUAL "${bindir}/file3")
  32. message(FATAL_ERROR "CMake fails resolving REALPATH file file3")
  33. endif()
  34. if(NOT file2 STREQUAL "${bindir}/file3")
  35. message(FATAL_ERROR "CMake fails resolving simple symlink")
  36. endif()
  37. if(NOT file1 STREQUAL "${bindir}/file3")
  38. message(FATAL_ERROR "CMake fails resolving double symlink")
  39. endif()
  40. # cleanup
  41. file(REMOVE ${bindir}/file1)
  42. file(REMOVE ${bindir}/file2)
  43. if(EXISTS file1 OR EXISTS file2)
  44. message(FATAL_ERROR "removal of file1 or file2 failed")
  45. endif()
  46. endif(LN)
  47. file(REMOVE ${bindir}/file3)
  48. endif()