RunCMakeTest.cmake 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. include(RunCMake)
  2. run_cmake(CREATE_LINK)
  3. run_cmake(CREATE_LINK-COPY_ON_ERROR)
  4. run_cmake(CREATE_LINK-noarg)
  5. run_cmake(CREATE_LINK-noexist)
  6. run_cmake(TOUCH)
  7. run_cmake(TOUCH-error-in-source-directory)
  8. run_cmake(TOUCH-error-missing-directory)
  9. run_cmake(UPLOAD-unused-argument)
  10. run_cmake(UPLOAD-httpheader-not-set)
  11. run_cmake(UPLOAD-netrc-bad)
  12. run_cmake(UPLOAD-tls-cainfo-not-set)
  13. run_cmake(UPLOAD-tls-verify-not-set)
  14. run_cmake(UPLOAD-TLS_VERSION-missing)
  15. run_cmake(UPLOAD-pass-not-set)
  16. run_cmake(INSTALL-DIRECTORY)
  17. run_cmake(INSTALL-FILES_FROM_DIR)
  18. run_cmake(INSTALL-FILES_FROM_DIR-bad)
  19. run_cmake(INSTALL-MESSAGE-bad)
  20. run_cmake(FileOpenFailRead)
  21. run_cmake(LOCK)
  22. run_cmake(LOCK-error-file-create-fail)
  23. run_cmake(LOCK-error-guard-incorrect)
  24. run_cmake(LOCK-error-incorrect-timeout)
  25. run_cmake(LOCK-error-incorrect-timeout-trail)
  26. run_cmake(LOCK-error-lock-fail)
  27. run_cmake(LOCK-error-negative-timeout)
  28. run_cmake(LOCK-error-no-function)
  29. run_cmake(LOCK-error-no-guard)
  30. run_cmake(LOCK-error-no-path)
  31. run_cmake(LOCK-error-no-result-variable)
  32. run_cmake(LOCK-error-no-timeout)
  33. run_cmake(LOCK-error-timeout)
  34. run_cmake(LOCK-error-unknown-option)
  35. run_cmake(LOCK-lowercase)
  36. run_cmake(READ_ELF)
  37. run_cmake(GLOB)
  38. run_cmake(GLOB_RECURSE)
  39. run_cmake(GLOB_RECURSE-noexp-FOLLOW_SYMLINKS)
  40. run_cmake(SIZE)
  41. run_cmake(SIZE-error-does-not-exist)
  42. run_cmake(TIMESTAMP)
  43. run_cmake(REMOVE-empty)
  44. run_cmake_script(COPY_FILE-file-replace)
  45. run_cmake_script(COPY_FILE-dir-to-file-capture)
  46. run_cmake_script(COPY_FILE-dir-to-file-fail)
  47. run_cmake_script(COPY_FILE-dirlink-to-file-capture)
  48. run_cmake_script(COPY_FILE-dirlink-to-file-fail)
  49. run_cmake_script(COPY_FILE-file-to-file)
  50. run_cmake_script(COPY_FILE-file-to-dir-capture)
  51. run_cmake_script(COPY_FILE-file-to-dir-fail)
  52. run_cmake_script(COPY_FILE-file-INPUT_MAY_BE_RECENT)
  53. run_cmake_script(COPY_FILE-file-ONLY_IF_DIFFERENT-capture)
  54. run_cmake_script(COPY_FILE-file-ONLY_IF_DIFFERENT-fail)
  55. run_cmake_script(COPY_FILE-file-ONLY_IF_DIFFERENT-no-overwrite)
  56. run_cmake_script(COPY_FILE-link-to-file)
  57. run_cmake_script(COPY_FILE-arg-missing)
  58. run_cmake_script(COPY_FILE-arg-unknown)
  59. run_cmake_script(COPY_FILE-input-missing)
  60. run_cmake_script(COPY_FILE-output-missing)
  61. run_cmake_script(MAKE_DIRECTORY-fail)
  62. run_cmake_script(RENAME-file-replace)
  63. run_cmake_script(RENAME-file-to-file)
  64. run_cmake_script(RENAME-file-to-dir-capture)
  65. run_cmake_script(RENAME-file-to-dir-fail)
  66. run_cmake_script(RENAME-file-NO_REPLACE-capture)
  67. run_cmake_script(RENAME-file-NO_REPLACE-fail)
  68. run_cmake_script(RENAME-arg-missing)
  69. run_cmake_script(RENAME-arg-unknown)
  70. # tests are valid both for GLOB and GLOB_RECURSE
  71. run_cmake(GLOB-sort-dedup)
  72. run_cmake(GLOB-error-LIST_DIRECTORIES-not-boolean)
  73. run_cmake(GLOB-error-LIST_DIRECTORIES-no-arg)
  74. run_cmake(GLOB-error-RELATIVE-no-arg)
  75. run_cmake(GLOB-error-CONFIGURE_DEPENDS-modified)
  76. run_cmake(GLOB-noexp-CONFIGURE_DEPENDS)
  77. run_cmake(GLOB-noexp-FOLLOW_SYMLINKS)
  78. run_cmake(GLOB-noexp-LIST_DIRECTORIES)
  79. run_cmake(GLOB-noexp-RELATIVE)
  80. run_cmake_command(GLOB-error-CONFIGURE_DEPENDS-SCRIPT_MODE ${CMAKE_COMMAND} -P
  81. ${RunCMake_SOURCE_DIR}/GLOB-error-CONFIGURE_DEPENDS-SCRIPT_MODE.cmake)
  82. if(NOT WIN32
  83. AND NOT MSYS # FIXME: This works on CYGWIN but not on MSYS
  84. )
  85. run_cmake(CREATE_LINK-SYMBOLIC)
  86. run_cmake(CREATE_LINK-SYMBOLIC-noexist)
  87. run_cmake(GLOB_RECURSE-cyclic-recursion)
  88. run_cmake(INSTALL-SYMLINK)
  89. run_cmake(READ_SYMLINK)
  90. run_cmake(READ_SYMLINK-noexist)
  91. run_cmake(READ_SYMLINK-notsymlink)
  92. if(NOT CYGWIN)
  93. run_cmake(INSTALL-FOLLOW_SYMLINK_CHAIN)
  94. endif()
  95. endif()
  96. run_cmake(REAL_PATH-unexpected-arg)
  97. run_cmake(REAL_PATH-no-base-dir)
  98. run_cmake(REAL_PATH)
  99. if(RunCMake_GENERATOR MATCHES "Ninja")
  100. # Detect ninja version so we know what tests can be supported.
  101. execute_process(
  102. COMMAND "${RunCMake_MAKE_PROGRAM}" --version
  103. OUTPUT_VARIABLE ninja_out
  104. ERROR_VARIABLE ninja_out
  105. RESULT_VARIABLE ninja_res
  106. OUTPUT_STRIP_TRAILING_WHITESPACE
  107. )
  108. if(ninja_res EQUAL 0 AND "x${ninja_out}" MATCHES "^x[0-9]+\\.[0-9]+")
  109. set(ninja_version "${ninja_out}")
  110. message(STATUS "ninja version: ${ninja_version}")
  111. else()
  112. message(FATAL_ERROR "'ninja --version' reported:\n${ninja_out}")
  113. endif()
  114. if("${ninja_version}" VERSION_LESS 1.8)
  115. message(STATUS "Ninja is too old for GLOB CONFIGURE_DEPENDS; expect a warning.")
  116. endif()
  117. endif()
  118. if(RunCMake_GENERATOR MATCHES "Ninja" AND "${ninja_version}" VERSION_LESS 1.8)
  119. run_cmake(GLOB_RECURSE-warn-CONFIGURE_DEPENDS-ninja-version)
  120. else()
  121. run_cmake(GLOB-warn-CONFIGURE_DEPENDS-late)
  122. # Use a single build tree for a few tests without cleaning.
  123. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/GLOB-CONFIGURE_DEPENDS-RerunCMake-build)
  124. set(RunCMake_TEST_NO_CLEAN 1)
  125. set(RunCMake_DEFAULT_stderr ".*")
  126. if(RunCMake_GENERATOR STREQUAL "Borland Makefiles" OR
  127. RunCMake_GENERATOR STREQUAL "Watcom WMake")
  128. set(fs_delay 3)
  129. else()
  130. set(fs_delay 1.125)
  131. endif()
  132. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  133. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/test")
  134. set(tf_1 "${RunCMake_TEST_BINARY_DIR}/test/1.txt")
  135. file(WRITE "${tf_1}" "1")
  136. message(STATUS "GLOB-CONFIGURE_DEPENDS-RerunCMake: first configuration...")
  137. run_cmake(GLOB-CONFIGURE_DEPENDS-RerunCMake)
  138. run_cmake_command(GLOB-CONFIGURE_DEPENDS-RerunCMake-build ${CMAKE_COMMAND} --build .)
  139. execute_process(COMMAND ${CMAKE_COMMAND} -E sleep ${fs_delay})
  140. message(STATUS "GLOB-CONFIGURE_DEPENDS-RerunCMake: add another file...")
  141. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/test/sub")
  142. set(tf_2 "${RunCMake_TEST_BINARY_DIR}/test/sub/2.txt")
  143. file(WRITE "${tf_2}" "2")
  144. run_cmake_command(GLOB-CONFIGURE_DEPENDS-RerunCMake-rebuild_first ${CMAKE_COMMAND} --build .)
  145. run_cmake_command(GLOB-CONFIGURE_DEPENDS-RerunCMake-nowork ${CMAKE_COMMAND} --build .)
  146. execute_process(COMMAND ${CMAKE_COMMAND} -E sleep ${fs_delay})
  147. message(STATUS "GLOB-CONFIGURE_DEPENDS-RerunCMake: remove first test file...")
  148. file(REMOVE "${tf_1}")
  149. run_cmake_command(GLOB-CONFIGURE_DEPENDS-RerunCMake-rebuild_second ${CMAKE_COMMAND} --build .)
  150. run_cmake_command(GLOB-CONFIGURE_DEPENDS-RerunCMake-nowork ${CMAKE_COMMAND} --build .)
  151. if(NOT WIN32
  152. AND NOT MSYS # FIXME: This works on CYGWIN but not on MSYS
  153. )
  154. message(STATUS "GLOB-CONFIGURE_DEPENDS-CMP0009-RerunCMake: link the first test directory into a new directory...")
  155. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/test2")
  156. execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${RunCMake_TEST_BINARY_DIR}/test" "${RunCMake_TEST_BINARY_DIR}/test2/test_folder_symlink")
  157. message(STATUS "GLOB-CONFIGURE_DEPENDS-CMP0009-RerunCMake: first configuration...")
  158. run_cmake(GLOB-CONFIGURE_DEPENDS-CMP0009-RerunCMake)
  159. run_cmake_command(GLOB-CONFIGURE_DEPENDS-CMP0009-RerunCMake-build ${CMAKE_COMMAND} --build .)
  160. message(STATUS "GLOB-CONFIGURE_DEPENDS-CMP0009-RerunCMake: add another file in the linked directory...")
  161. set(tf_3 "${RunCMake_TEST_BINARY_DIR}/test/3.txt")
  162. file(WRITE "${tf_3}" "3")
  163. run_cmake_command(GLOB-CONFIGURE_DEPENDS-CMP0009-RerunCMake-rebuild ${CMAKE_COMMAND} --build .)
  164. endif()
  165. unset(RunCMake_TEST_BINARY_DIR)
  166. unset(RunCMake_TEST_NO_CLEAN)
  167. unset(RunCMake_DEFAULT_stderr)
  168. endif()