RunCMakeTest.cmake 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552
  1. cmake_minimum_required(VERSION 3.16)
  2. include(RunCMake)
  3. set(RunCMake_GENERATOR "Ninja Multi-Config")
  4. set(RunCMake_GENERATOR_IS_MULTI_CONFIG 1)
  5. # Sanitize NINJA_STATUS since we expect default behavior.
  6. unset(ENV{NINJA_STATUS})
  7. function(check_files dir)
  8. cmake_parse_arguments(_check_files "" "" "INCLUDE;EXCLUDE" ${ARGN})
  9. set(expected ${_check_files_INCLUDE})
  10. list(FILTER expected EXCLUDE REGEX "^$")
  11. list(REMOVE_DUPLICATES expected)
  12. list(SORT expected)
  13. file(GLOB_RECURSE actual "${dir}/*")
  14. list(FILTER actual EXCLUDE REGEX "/CMakeFiles/|\\.ninja$|/CMakeCache\\.txt$|/target_files[^/]*\\.cmake$|/\\.ninja_[^/]*$|/cmake_install\\.cmake$|\\.ilk$|\\.manifest$|\\.odx$|\\.pdb$|\\.exp$|/install_manifest\\.txt$|/\\.qt/QtDeploySupport[^/]*\\.cmake$")
  15. foreach(f IN LISTS _check_files_INCLUDE _check_files_EXCLUDE)
  16. if(EXISTS ${f})
  17. list(APPEND actual ${f})
  18. endif()
  19. endforeach()
  20. list(REMOVE_DUPLICATES actual)
  21. list(SORT actual)
  22. if(NOT "${expected}" STREQUAL "${actual}")
  23. string(REPLACE ";" "\n " expected_formatted "${expected}")
  24. string(REPLACE ";" "\n " actual_formatted "${actual}")
  25. string(APPEND RunCMake_TEST_FAILED "Actual files did not match expected\nExpected:\n ${expected_formatted}\nActual:\n ${actual_formatted}\n")
  26. endif()
  27. set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
  28. endfunction()
  29. function(check_file_contents filename expected)
  30. if(NOT EXISTS "${filename}")
  31. string(APPEND RunCMake_TEST_FAILED "File ${filename} does not exist\n")
  32. else()
  33. file(READ "${filename}" actual)
  34. if(NOT actual MATCHES "${expected}")
  35. string(REPLACE "\n" "\n " expected_formatted "${expected}")
  36. string(REPLACE "\n" "\n " actual_formatted "${actual}")
  37. string(APPEND RunCMake_TEST_FAILED "Contents of ${filename} do not match expected\nExpected:\n ${expected_formatted}\nActual:\n ${actual_formatted}\n")
  38. endif()
  39. endif()
  40. set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
  41. endfunction()
  42. function(run_cmake_configure case)
  43. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
  44. set(RunCMake_TEST_NO_CLEAN 1)
  45. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  46. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  47. run_cmake(${case})
  48. endfunction()
  49. function(run_cmake_build case suffix config)
  50. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
  51. set(RunCMake_TEST_NO_CLEAN 1)
  52. set(tgts)
  53. foreach(tgt IN LISTS ARGN)
  54. list(APPEND tgts --target ${tgt})
  55. endforeach()
  56. if(config)
  57. set(config_arg --config ${config})
  58. else()
  59. set(config_arg)
  60. endif()
  61. run_cmake_command(${case}-${suffix}-build "${CMAKE_COMMAND}" --build . ${config_arg} ${tgts})
  62. endfunction()
  63. function(run_ninja case suffix file)
  64. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
  65. set(RunCMake_TEST_NO_CLEAN 1)
  66. run_cmake_command(${case}-${suffix}-ninja "${RunCMake_MAKE_PROGRAM}" -f "${file}" ${ARGN})
  67. endfunction()
  68. ###############################################################################
  69. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Simple-build)
  70. # IMPORTANT: Setting RelWithDebInfo as the first item in CMAKE_CONFIGURATION_TYPES
  71. # generates a build.ninja file with that configuration
  72. set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=RelWithDebInfo\\;Debug\\;Release\\;MinSizeRel;-DCMAKE_CROSS_CONFIGS=all")
  73. run_cmake_configure(Simple)
  74. unset(RunCMake_TEST_OPTIONS)
  75. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  76. run_ninja(Simple targets-default build.ninja -t targets)
  77. run_ninja(Simple targets-debug build-Debug.ninja -t targets)
  78. run_ninja(Simple targets-release build-Debug.ninja -t targets)
  79. run_cmake_build(Simple debug-target Debug simpleexe)
  80. run_ninja(Simple debug-target build-Debug.ninja simplestatic)
  81. get_filename_component(simpleshared_Release "${TARGET_FILE_simpleshared_Release}" NAME)
  82. run_cmake_build(Simple release-filename Release ${simpleshared_Release})
  83. file(RELATIVE_PATH simpleexe_Release "${RunCMake_TEST_BINARY_DIR}" "${TARGET_FILE_simpleexe_Release}")
  84. run_ninja(Simple release-file build-Release.ninja ${simpleexe_Release})
  85. run_cmake_build(Simple all-configs Release simplestatic:all)
  86. run_ninja(Simple default-build-file build.ninja simpleexe)
  87. run_cmake_build(Simple all-clean Release clean:all)
  88. run_cmake_build(Simple debug-subdir Debug SimpleSubdir/all)
  89. run_ninja(Simple debug-in-release-graph-target build-Release.ninja simpleexe2:Debug)
  90. run_ninja(Simple release-in-minsizerel-graph-subdir build-MinSizeRel.ninja SimpleSubdir/all:Release)
  91. run_cmake_build(Simple all-subdir Release SimpleSubdir/all:all)
  92. run_ninja(Simple minsizerel-top build-MinSizeRel.ninja all)
  93. run_cmake_build(Simple debug-in-release-graph-top Release all:Debug)
  94. run_ninja(Simple all-clean-again build-Debug.ninja clean:all)
  95. run_ninja(Simple all-top build-RelWithDebInfo.ninja all:all)
  96. # Leave enough time for the timestamp to change on second-resolution systems
  97. execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1)
  98. file(TOUCH "${RunCMake_TEST_BINARY_DIR}/empty.cmake")
  99. run_ninja(Simple reconfigure-config build-Release.ninja simpleexe)
  100. execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1)
  101. file(TOUCH "${RunCMake_TEST_BINARY_DIR}/empty.cmake")
  102. run_ninja(Simple reconfigure-noconfig build.ninja simpleexe)
  103. run_ninja(Simple default-build-file-clean build.ninja clean)
  104. run_ninja(Simple default-build-file-clean-minsizerel build.ninja clean:MinSizeRel)
  105. run_ninja(Simple default-build-file-all build.ninja all)
  106. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SimpleDefaultBuildAlias-build)
  107. set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release\\;MinSizeRel\\;RelWithDebInfo;-DCMAKE_DEFAULT_BUILD_TYPE=Release;-DCMAKE_DEFAULT_CONFIGS=all;-DCMAKE_CROSS_CONFIGS=all")
  108. run_cmake_configure(SimpleDefaultBuildAlias)
  109. unset(RunCMake_TEST_OPTIONS)
  110. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  111. run_ninja(SimpleDefaultBuildAlias target build.ninja simpleexe)
  112. run_ninja(SimpleDefaultBuildAlias all build.ninja all)
  113. run_ninja(SimpleDefaultBuildAlias clean build.ninja clean)
  114. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SimpleDefaultBuildAliasList-build)
  115. set(RunCMake_TEST_OPTIONS "-DCMAKE_DEFAULT_BUILD_TYPE=Release;-DCMAKE_DEFAULT_CONFIGS=Debug\\;Release;-DCMAKE_CROSS_CONFIGS=all")
  116. run_cmake_configure(SimpleDefaultBuildAliasList)
  117. unset(RunCMake_TEST_OPTIONS)
  118. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  119. run_ninja(SimpleDefaultBuildAliasList target-configs build.ninja simpleexe)
  120. # IMPORTANT: This tests cmake --build . with no config using build.ninja
  121. run_cmake_build(SimpleDefaultBuildAliasList all-configs "" all)
  122. run_ninja(SimpleDefaultBuildAliasList all-relwithdebinfo build.ninja all:RelWithDebInfo)
  123. run_ninja(SimpleDefaultBuildAliasList clean-configs build.ninja clean)
  124. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SimpleDefaultBuildAliasListCross-build)
  125. set(RunCMake_TEST_OPTIONS "-DCMAKE_DEFAULT_BUILD_TYPE=RelWithDebInfo;-DCMAKE_DEFAULT_CONFIGS=all;-DCMAKE_CROSS_CONFIGS=Debug\\;Release")
  126. run_cmake_configure(SimpleDefaultBuildAliasListCross)
  127. unset(RunCMake_TEST_OPTIONS)
  128. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  129. run_ninja(SimpleDefaultBuildAliasListCross target-configs build.ninja simpleexe)
  130. unset(RunCMake_TEST_BINARY_DIR)
  131. set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release;-DCMAKE_CROSS_CONFIGS=Debug\\;Release\\;RelWithDebInfo")
  132. run_cmake(InvalidCrossConfigs)
  133. unset(RunCMake_TEST_OPTIONS)
  134. set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release;-DCMAKE_DEFAULT_BUILD_TYPE=RelWithDebInfo")
  135. run_cmake(InvalidDefaultBuildFileConfig)
  136. unset(RunCMake_TEST_OPTIONS)
  137. set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=Debug\\;Release;-DCMAKE_DEFAULT_BUILD_TYPE=Release;-DCMAKE_DEFAULT_CONFIGS=Debug\\;Release\\;RelWithDebInfo")
  138. run_cmake(InvalidDefaultConfigsCross)
  139. unset(RunCMake_TEST_OPTIONS)
  140. set(RunCMake_TEST_OPTIONS "-DCMAKE_DEFAULT_BUILD_TYPE=Release;-DCMAKE_DEFAULT_CONFIGS=all")
  141. run_cmake(InvalidDefaultConfigsNoCross)
  142. unset(RunCMake_TEST_OPTIONS)
  143. set(RunCMake_TEST_OPTIONS "-DCMAKE_DEFAULT_BUILD_TYPE=Release")
  144. run_cmake(DefaultBuildFileConfig)
  145. unset(RunCMake_TEST_OPTIONS)
  146. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SimpleNoCross-build)
  147. run_cmake_configure(SimpleNoCross)
  148. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  149. run_cmake_build(SimpleNoCross debug-target Debug simpleexe)
  150. run_ninja(SimpleNoCross debug-target build-Debug.ninja simplestatic:Debug)
  151. run_ninja(SimpleNoCross relwithdebinfo-in-release-graph-target build-Release.ninja simplestatic:RelWithDebInfo)
  152. run_cmake_build(SimpleNoCross relwithdebinfo-in-release-graph-all Release all:RelWithDebInfo)
  153. run_cmake_build(SimpleNoCross relwithdebinfo-in-release-graph-clean Release clean:RelWithDebInfo)
  154. run_ninja(SimpleNoCross all-target build-Debug.ninja simplestatic:all)
  155. run_ninja(SimpleNoCross all-all build-Debug.ninja all:all)
  156. run_cmake_build(SimpleNoCross all-clean Debug clean:all)
  157. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SimpleCrossConfigs-build)
  158. set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=Debug\\;Release")
  159. run_cmake_configure(SimpleCrossConfigs)
  160. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  161. run_ninja(SimpleCrossConfigs release-in-release-graph build-Release.ninja simpleexe)
  162. run_cmake_build(SimpleCrossConfigs debug-in-release-graph Release simpleexe:Debug)
  163. run_cmake_build(SimpleCrossConfigs relwithdebinfo-in-release-graph Release simpleexe:RelWithDebInfo)
  164. run_ninja(SimpleCrossConfigs relwithdebinfo-in-relwithdebinfo-graph build-RelWithDebInfo.ninja simpleexe:RelWithDebInfo)
  165. run_ninja(SimpleCrossConfigs release-in-relwithdebinfo-graph build-RelWithDebInfo.ninja simplestatic:Release)
  166. run_cmake_build(SimpleCrossConfigs all-in-relwithdebinfo-graph RelWithDebInfo simplestatic:all)
  167. run_ninja(SimpleCrossConfigs clean-all-in-release-graph build-Release.ninja clean:all)
  168. run_cmake_build(SimpleCrossConfigs all-all-in-release-graph Release all:all)
  169. run_cmake_build(SimpleCrossConfigs all-relwithdebinfo-in-release-graph Release all:RelWithDebInfo)
  170. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/PostBuild-build)
  171. set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all")
  172. run_cmake_configure(PostBuild)
  173. unset(RunCMake_TEST_OPTIONS)
  174. run_cmake_build(PostBuild release Release Exe)
  175. run_cmake_build(PostBuild debug-in-release-graph Release Exe:Debug)
  176. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/LongCommandLine-build)
  177. set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all")
  178. run_cmake_configure(LongCommandLine)
  179. unset(RunCMake_TEST_OPTIONS)
  180. run_cmake_build(LongCommandLine release Release custom)
  181. run_cmake_build(LongCommandLine release-config Release exe:Debug)
  182. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Framework-build)
  183. set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all")
  184. run_cmake_configure(Framework)
  185. unset(RunCMake_TEST_OPTIONS)
  186. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  187. run_cmake_build(Framework framework Debug all)
  188. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/FrameworkDependencyAutogen-build)
  189. set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all")
  190. run_cmake_configure(FrameworkDependencyAutogen)
  191. unset(RunCMake_TEST_OPTIONS)
  192. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  193. run_cmake_build(FrameworkDependencyAutogen framework Release test2:Debug)
  194. set(RunCMake_TEST_NO_CLEAN 1)
  195. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CustomCommandGenerator-build)
  196. set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release\\;MinSizeRel\\;RelWithDebInfo;-DCMAKE_CROSS_CONFIGS=all")
  197. run_cmake_configure(CustomCommandGenerator)
  198. unset(RunCMake_TEST_OPTIONS)
  199. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  200. run_cmake_build(CustomCommandGenerator debug Debug generated)
  201. run_cmake_command(CustomCommandGenerator-debug-generated "${TARGET_FILE_generated_Debug}")
  202. run_ninja(CustomCommandGenerator release build-Release.ninja generated)
  203. run_cmake_command(CustomCommandGenerator-release-generated "${TARGET_FILE_generated_Release}")
  204. run_ninja(CustomCommandGenerator debug-clean build-Debug.ninja clean)
  205. run_cmake_build(CustomCommandGenerator release-clean Release clean)
  206. run_cmake_build(CustomCommandGenerator debug-in-release-graph Release generated:Debug)
  207. run_cmake_command(CustomCommandGenerator-debug-in-release-graph-generated "${TARGET_FILE_generated_Debug}")
  208. run_ninja(CustomCommandGenerator debug-clean-again build-Debug.ninja clean:Debug)
  209. run_ninja(CustomCommandGenerator release-in-debug-graph build-Debug.ninja generated:Release)
  210. run_cmake_command(CustomCommandGenerator-release-in-debug-graph-generated "${TARGET_FILE_generated_Release}")
  211. unset(RunCMake_TEST_NO_CLEAN)
  212. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CustomCommandsAndTargets-build)
  213. set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all")
  214. run_cmake_configure(CustomCommandsAndTargets)
  215. unset(RunCMake_TEST_OPTIONS)
  216. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  217. run_cmake_build(CustomCommandsAndTargets release-command Release SubdirCommand)
  218. #FIXME Get this working
  219. #run_ninja(CustomCommandsAndTargets minsizerel-command build-MinSizeRel.ninja CustomCommandsAndTargetsSubdir/SubdirCommand)
  220. run_ninja(CustomCommandsAndTargets debug-command build-Debug.ninja TopCommand)
  221. run_ninja(CustomCommandsAndTargets release-target build-Release.ninja SubdirTarget)
  222. run_cmake_build(CustomCommandsAndTargets debug-target Debug TopTarget)
  223. run_cmake_build(CustomCommandsAndTargets debug-in-release-graph-postbuild Release SubdirPostBuild:Debug)
  224. run_ninja(CustomCommandsAndTargets release-postbuild build-Release.ninja SubdirPostBuild)
  225. run_cmake_build(CustomCommandsAndTargets debug-targetpostbuild Debug TopTargetPostBuild)
  226. run_ninja(CustomCommandsAndTargets release-targetpostbuild build-Release.ninja SubdirTargetPostBuild)
  227. run_cmake_build(CustomCommandsAndTargets release-clean Release clean:all)
  228. run_ninja(CustomCommandsAndTargets release-leaf-custom build-Release.ninja LeafCustom.txt)
  229. run_cmake_build(CustomCommandsAndTargets release-clean Release clean:all)
  230. run_ninja(CustomCommandsAndTargets release-leaf-exe build-Release.ninja LeafExe)
  231. run_cmake_build(CustomCommandsAndTargets release-clean Release clean:all)
  232. run_ninja(CustomCommandsAndTargets release-leaf-byproduct build-Release.ninja main.c)
  233. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CustomCommandOutputGenex-build)
  234. set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release\\;MinSizeRel\\;RelWithDebInfo;-DCMAKE_CROSS_CONFIGS=all")
  235. run_cmake_configure(CustomCommandOutputGenex)
  236. set(RunCMake_TEST_NO_CLEAN 1)
  237. unset(RunCMake_TEST_OPTIONS)
  238. # echo_raw
  239. run_ninja(CustomCommandOutputGenex echo_raw-debug build-Debug.ninja echo_raw:Debug)
  240. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  241. run_ninja(CustomCommandOutputGenex echo_raw-debug-in-release-graph build-Release.ninja echo_raw:Debug)
  242. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  243. # echo_genex
  244. run_ninja(CustomCommandOutputGenex echo_genex-debug build-Debug.ninja echo_genex:Debug)
  245. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  246. run_ninja(CustomCommandOutputGenex echo_genex-debug-in-release-graph build-Release.ninja echo_genex:Debug)
  247. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  248. # echo_genex_out
  249. run_ninja(CustomCommandOutputGenex echo_genex_out-debug build-Debug.ninja echo_genex_out:Debug)
  250. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  251. run_ninja(CustomCommandOutputGenex echo_genex_out-debug-in-release-graph build-Release.ninja echo_genex_out:Debug)
  252. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  253. # echo_depend*
  254. run_ninja(CustomCommandOutputGenex echo_depend-debug build-Debug.ninja echo_depend:Debug)
  255. run_ninja(CustomCommandOutputGenex echo_depend_out-debug build-Debug.ninja echo_depend_out_Debug.txt)
  256. run_ninja(CustomCommandOutputGenex echo_depend_cmd-debug build-Debug.ninja echo_depend_cmd_Debug.txt)
  257. run_ninja(CustomCommandOutputGenex echo_depend-debug-in-release-graph build-Release.ninja echo_depend:Debug)
  258. run_ninja(CustomCommandOutputGenex echo_depend_out-debug-in-release-graph build-Release.ninja echo_depend_out_Debug.txt)
  259. run_ninja(CustomCommandOutputGenex echo_depend_cmd-debug-in-release-graph build-Release.ninja echo_depend_cmd_Debug.txt)
  260. # depend_echo_raw
  261. run_ninja(CustomCommandOutputGenex depend_echo_raw-debug build-Debug.ninja depend_echo_raw:Debug)
  262. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  263. run_ninja(CustomCommandOutputGenex depend_echo_raw-debug-in-release-graph build-Release.ninja depend_echo_raw:Debug)
  264. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  265. # depend_echo_genex
  266. run_ninja(CustomCommandOutputGenex depend_echo_genex-debug build-Debug.ninja depend_echo_genex:Debug)
  267. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  268. run_ninja(CustomCommandOutputGenex depend_echo_genex-debug-in-release-graph build-Release.ninja depend_echo_genex:Debug)
  269. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  270. # depend_echo_genex_out
  271. run_ninja(CustomCommandOutputGenex depend_echo_genex_out-debug build-Debug.ninja depend_echo_genex_out:Debug)
  272. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  273. run_ninja(CustomCommandOutputGenex depend_echo_genex_out-debug-in-release-graph build-Release.ninja depend_echo_genex_out:Debug)
  274. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  275. # depend_echo_genex_cmd
  276. run_ninja(CustomCommandOutputGenex depend_echo_genex_cmd-debug build-Debug.ninja depend_echo_genex_cmd:Debug)
  277. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  278. run_ninja(CustomCommandOutputGenex depend_echo_genex_cmd-debug-in-release-graph build-Release.ninja depend_echo_genex_cmd:Debug)
  279. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  280. # no_cross_output
  281. run_ninja(CustomCommandOutputGenex echo_no_cross_output-debug build-Debug.ninja echo_no_cross_output:Debug)
  282. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  283. run_ninja(CustomCommandOutputGenex echo_no_cross_output-debug-in-release-graph build-Release.ninja echo_no_cross_output:Debug)
  284. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  285. # no_cross_output_if
  286. run_ninja(CustomCommandOutputGenex echo_no_cross_output_if-debug build-Debug.ninja echo_no_cross_output_if:Debug)
  287. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  288. run_ninja(CustomCommandOutputGenex echo_no_cross_output_if-debug-in-release-graph build-Release.ninja echo_no_cross_output_if:Debug)
  289. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  290. # no_cross_byproduct
  291. run_ninja(CustomCommandOutputGenex echo_no_cross_byproduct-debug build-Debug.ninja echo_no_cross_byproduct:Debug)
  292. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  293. run_ninja(CustomCommandOutputGenex echo_no_cross_byproduct-debug-in-release-graph build-Release.ninja echo_no_cross_byproduct:Debug)
  294. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  295. # no_cross_byproduct_if
  296. run_ninja(CustomCommandOutputGenex echo_no_cross_byproduct_if-debug build-Debug.ninja echo_no_cross_byproduct_if:Debug)
  297. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  298. run_ninja(CustomCommandOutputGenex echo_no_cross_byproduct_if-debug-in-release-graph build-Release.ninja echo_no_cross_byproduct_if:Debug)
  299. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  300. # echo_dbg
  301. run_ninja(CustomCommandOutputGenex echo_dbg-debug build-Debug.ninja echo_dbg)
  302. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  303. run_ninja(CustomCommandOutputGenex echo_dbg-release build-Release.ninja echo_dbg)
  304. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  305. run_ninja(CustomCommandOutputGenex echo_dbg-debug-in-release-graph build-Release.ninja echo_dbg:Debug)
  306. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  307. # echo_dbgx
  308. run_ninja(CustomCommandOutputGenex echo_dbgx-debug build-Debug.ninja echo_dbgx)
  309. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  310. run_ninja(CustomCommandOutputGenex echo_dbgx-release build-Release.ninja echo_dbgx)
  311. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  312. run_ninja(CustomCommandOutputGenex echo_dbgx-debug-in-release-graph build-Release.ninja echo_dbgx:Debug)
  313. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  314. # echo_depend_target
  315. run_ninja(CustomCommandOutputGenex echo_depend_target-debug-prep build-Debug.ninja echo:Debug)
  316. run_ninja(CustomCommandOutputGenex echo_depend_target-debug build-Debug.ninja echo_depend_target)
  317. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  318. run_ninja(CustomCommandOutputGenex echo_depend_target-release-prep build-Release.ninja echo:Release)
  319. run_ninja(CustomCommandOutputGenex echo_depend_target-release build-Release.ninja echo_depend_target)
  320. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  321. run_ninja(CustomCommandOutputGenex echo_depend_target-debug-in-release-graph-prep build-Release.ninja echo:Release)
  322. run_ninja(CustomCommandOutputGenex echo_depend_target-debug-in-release-graph build-Release.ninja echo_depend_target:Debug)
  323. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  324. # echo_target_raw
  325. run_ninja(CustomCommandOutputGenex echo_target_raw-debug build-Debug.ninja echo_target_raw:Debug)
  326. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  327. run_ninja(CustomCommandOutputGenex echo_target_raw-debug-in-release-graph build-Release.ninja echo_target_raw:Debug)
  328. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  329. # echo_target_genex
  330. run_ninja(CustomCommandOutputGenex echo_target_genex-debug build-Debug.ninja echo_target_genex:Debug)
  331. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  332. run_ninja(CustomCommandOutputGenex echo_target_genex-debug-in-release-graph build-Release.ninja echo_target_genex:Debug)
  333. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  334. # echo_target_genex_out
  335. run_ninja(CustomCommandOutputGenex echo_target_genex_out-debug build-Debug.ninja echo_target_genex_out:Debug)
  336. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  337. run_ninja(CustomCommandOutputGenex echo_target_genex_out-debug-in-release-graph build-Release.ninja echo_target_genex_out:Debug)
  338. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  339. # echo_target_depend*
  340. run_ninja(CustomCommandOutputGenex echo_target_depend-debug build-Debug.ninja echo_target_depend:Debug)
  341. run_ninja(CustomCommandOutputGenex echo_target_depend_out-debug build-Debug.ninja echo_target_depend_out:Debug)
  342. run_ninja(CustomCommandOutputGenex echo_target_depend_cmd-debug build-Debug.ninja CMakeFiles/echo_target_depend_cmd-Debug) # undocumented
  343. run_ninja(CustomCommandOutputGenex echo_target_depend-debug-in-release-graph build-Release.ninja echo_target_depend:Debug)
  344. run_ninja(CustomCommandOutputGenex echo_target_depend_out-debug-in-release-graph build-Release.ninja echo_target_depend_out:Debug)
  345. run_ninja(CustomCommandOutputGenex echo_target_depend_cmd-debug-in-release-graph build-Release.ninja CMakeFiles/echo_target_depend_cmd-Debug) # undocumented
  346. # target_no_cross_*
  347. run_ninja(CustomCommandOutputGenex target_no_cross_byproduct-debug build-Debug.ninja target_no_cross_byproduct:Debug)
  348. run_ninja(CustomCommandOutputGenex clean-debug-graph build-Debug.ninja -t clean)
  349. run_ninja(CustomCommandOutputGenex target_no_cross_byproduct-debug-in-release-graph build-Release.ninja target_no_cross_byproduct:Debug)
  350. run_ninja(CustomCommandOutputGenex clean-release-graph build-Release.ninja -t clean)
  351. # target_post_build
  352. run_ninja(CustomCommandOutputGenex target_post_build-debug build-Debug.ninja target_post_build)
  353. unset(RunCMake_TEST_NO_CLEAN)
  354. unset(RunCMake_TEST_BINARY_DIR)
  355. run_cmake(CustomCommandDepfile)
  356. run_cmake(CustomCommandDepfileAsOutput)
  357. run_cmake(CustomCommandDepfileAsByproduct)
  358. set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all")
  359. run_cmake(PerConfigSources)
  360. unset(RunCMake_TEST_OPTIONS)
  361. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/PostfixAndLocation-build)
  362. set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release;-DCMAKE_CROSS_CONFIGS=all")
  363. run_cmake_configure(PostfixAndLocation)
  364. unset(RunCMake_TEST_OPTIONS)
  365. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  366. run_cmake_build(PostfixAndLocation release-in-release-graph Release mylib:Release)
  367. run_cmake_build(PostfixAndLocation debug-in-release-graph Release mylib:Debug)
  368. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Clean-build)
  369. run_cmake_configure(Clean)
  370. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  371. run_cmake_build(Clean release Release)
  372. run_ninja(Clean release-notall build-Release.ninja exenotall)
  373. run_cmake_build(Clean release-clean Release clean)
  374. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AdditionalCleanFiles-build)
  375. set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release\\;MinSizeRel\\;RelWithDebInfo;-DCMAKE_CROSS_CONFIGS=all")
  376. run_cmake_configure(AdditionalCleanFiles)
  377. unset(RunCMake_TEST_OPTIONS)
  378. run_cmake_build(AdditionalCleanFiles release-clean Release clean)
  379. run_ninja(AdditionalCleanFiles all-clean build-Debug.ninja clean:all)
  380. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Install-build)
  381. set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_TEST_BINARY_DIR}/install;-DCMAKE_CROSS_CONFIGS=all;-DCMAKE_DEFAULT_CONFIGS=Debug\\;Release")
  382. run_cmake_configure(Install)
  383. unset(RunCMake_TEST_OPTIONS)
  384. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  385. run_cmake_build(Install release-install Release install)
  386. run_ninja(Install debug-in-release-graph-install build-Release.ninja install:Debug)
  387. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}/install")
  388. run_ninja(Install default-install build.ninja install)
  389. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}/install")
  390. run_ninja(Install all-install build.ninja install:all)
  391. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/ExcludeFromAll-build)
  392. run_cmake_configure(ExcludeFromAll)
  393. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  394. run_cmake_build(ExcludeFromAll all "" all:all)
  395. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/ExternalProject-build)
  396. set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all;-DCMAKE_DEFAULT_CONFIGS=Debug\\;Release")
  397. run_cmake_configure(ExternalProject)
  398. unset(RunCMake_TEST_OPTIONS)
  399. run_cmake_build(ExternalProject release-in-debug-graph "Debug" all:Release)
  400. run_cmake_build(ExternalProject debug-in-release-graph "Release" all:Debug)
  401. # FIXME Get this working
  402. #set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/AutoMocExecutable-build)
  403. #run_cmake_configure(AutoMocExecutable)
  404. #run_cmake_build(AutoMocExecutable debug-in-release-graph Release exe)
  405. # Need to test this manually because run_cmake() adds --no-warn-unused-cli
  406. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/NoUnusedVariables-build)
  407. run_cmake_command(NoUnusedVariables ${CMAKE_COMMAND} ${CMAKE_CURRENT_LIST_DIR}
  408. -G "Ninja Multi-Config"
  409. "-DRunCMake_TEST=NoUnusedVariables"
  410. "-DCMAKE_CROSS_CONFIGS=all"
  411. "-DCMAKE_DEFAULT_BUILD_TYPE=Debug"
  412. "-DCMAKE_DEFAULT_CONFIGS=all"
  413. )
  414. unset(RunCMake_TEST_BINARY_DIR)
  415. set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release;-DCMAKE_CROSS_CONFIGS=all;-DCMAKE_EXPORT_COMPILE_COMMANDS=ON")
  416. run_cmake(CompileCommands)
  417. unset(RunCMake_TEST_OPTIONS)
  418. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/OutputPathPrefix-build)
  419. run_cmake_with_options(OutputPathPrefix "-DCMAKE_NINJA_OUTPUT_PATH_PREFIX=OutputPathPrefix-build")
  420. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR})
  421. set(RunCMake_TEST_NO_CLEAN 1)
  422. run_cmake_command(OutputPathPrefix-all-ninja "${RunCMake_MAKE_PROGRAM}" -f OutputPathPrefix-build/build.ninja OutputPathPrefix-build/all)
  423. run_cmake_command(OutputPathPrefix-clean-ninja "${RunCMake_MAKE_PROGRAM}" -f OutputPathPrefix-build/build.ninja OutputPathPrefix-build/clean)
  424. unset(RunCMake_TEST_NO_CLEAN)
  425. unset(RunCMake_TEST_BINARY_DIR)
  426. # CudaSimple uses separable compilation, which is currently only supported on NVCC.
  427. if(CMake_TEST_CUDA)
  428. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CudaSimple-build)
  429. run_cmake_configure(CudaSimple)
  430. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  431. run_cmake_build(CudaSimple debug-target Debug simplecudaexe)
  432. run_ninja(CudaSimple all-clean build-Debug.ninja clean:Debug)
  433. endif()
  434. if(CMake_TEST_Qt_version)
  435. set(QtX Qt${CMake_TEST_Qt_version})
  436. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/QtX-build)
  437. set(RunCMake_TEST_OPTIONS
  438. "-DCMAKE_CROSS_CONFIGS=all"
  439. "-Dwith_qt_version:STRING=${CMake_TEST_Qt_version}"
  440. "-D${QtX}Core_DIR=${${QtX}Core_DIR}"
  441. "-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
  442. )
  443. foreach(use_better_graph IN ITEMS ON OFF)
  444. foreach(target_config IN ITEMS Debug Release RelWithDebInfo)
  445. foreach(ninja_config IN ITEMS Debug Release RelWithDebInfo)
  446. block()
  447. set(target_config_suffix "_${target_config}")
  448. if (use_better_graph)
  449. set(autogen_files_config_suffix "${target_config_suffix}")
  450. else()
  451. set(autogen_files_config_suffix "")
  452. endif()
  453. set(prefix "QtX")
  454. set(case "${target_config}-in-${ninja_config}-better-graph-${use_better_graph}")
  455. set(test_path "${prefix}-${case}")
  456. set(RunCMake_TEST_VARIANT_DESCRIPTION "-${case}-configure")
  457. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test_path}-build)
  458. run_cmake_with_options(QtX ${RunCMake_TEST_OPTIONS}
  459. "-DCMAKE_AUTOGEN_BETTER_GRAPH_MULTI_CONFIG=${use_better_graph}")
  460. unset(RunCMake_TEST_VARIANT_DESCRIPTION)
  461. include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
  462. run_cmake_build(${test_path} "" ${ninja_config} exe:${target_config})
  463. check_files("${RunCMake_TEST_BINARY_DIR}"
  464. INCLUDE
  465. "${AUTOGEN_FILES${target_config_suffix}}"
  466. "${TARGET_FILE_exe${target_config_suffix}}"
  467. "${TARGET_OBJECT_FILES_exe${target_config_suffix}}"
  468. )
  469. if (DEFINED RunCMake_TEST_FAILED AND NOT RunCMake_TEST_FAILED STREQUAL "")
  470. message(FATAL_ERROR "RunCMake_TEST_FAILED:${RunCMake_TEST_FAILED}")
  471. else()
  472. message(STATUS "${test_path}-check-files - PASSED")
  473. endif()
  474. check_file_contents("${RunCMake_TEST_BINARY_DIR}/exe_autogen/deps${autogen_files_config_suffix}"
  475. "exe_autogen/timestamp${autogen_files_config_suffix}")
  476. if (DEFINED RunCMake_TEST_FAILED AND NOT RunCMake_TEST_FAILED STREQUAL "")
  477. message(FATAL_ERROR "RunCMake_TEST_FAILED:${RunCMake_TEST_FAILED}")
  478. endif()
  479. endblock()
  480. endforeach()
  481. endforeach()
  482. endforeach()
  483. if(CMake_TEST_${QtX}Core_Version VERSION_GREATER_EQUAL 5.15.0)
  484. foreach(use_better_graph IN ITEMS ON OFF)
  485. foreach(target_config IN ITEMS Debug Release RelWithDebInfo)
  486. foreach(ninja_config IN ITEMS Debug Release RelWithDebInfo)
  487. set(prefix "QtX")
  488. set(case "${target_config}-in-${ninja_config}-better-graph-${use_better_graph}")
  489. set(test_path "${prefix}-${case}")
  490. if (use_better_graph)
  491. set(autogen_files_config_suffix "_${target_config}")
  492. else()
  493. set(autogen_files_config_suffix "")
  494. endif()
  495. set(RunCMake_TEST_VARIANT_DESCRIPTION "-automoc-check")
  496. run_ninja(${test_path} "" build-${ninja_config}.ninja -t query exe_autogen/timestamp${autogen_files_config_suffix})
  497. endforeach()
  498. endforeach()
  499. endforeach()
  500. endif()
  501. endif()