RunCMakeTest.cmake 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. cmake_minimum_required(VERSION 3.19) # CMP0053
  2. include(RunCMake)
  3. # Fix Visual Studio generator name
  4. if(RunCMake_GENERATOR MATCHES "^(Visual Studio [0-9]+ [0-9]+) ")
  5. set(RunCMake_GENERATOR "${CMAKE_MATCH_1}")
  6. endif()
  7. set(RunCMake-check-file check.cmake)
  8. include("${RunCMake_SOURCE_DIR}/validate_schema.cmake")
  9. function(reset_cmake_presets_directory name)
  10. set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/${name}")
  11. file(REMOVE_RECURSE "${RunCMake_TEST_SOURCE_DIR}")
  12. file(MAKE_DIRECTORY "${RunCMake_TEST_SOURCE_DIR}")
  13. endfunction()
  14. function(run_cmake_presets name)
  15. set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/${name}")
  16. set(_source_arg "${RunCMake_TEST_SOURCE_DIR}")
  17. if(CMakePresets_SOURCE_ARG)
  18. set(_source_arg "${CMakePresets_SOURCE_ARG}")
  19. endif()
  20. if(NOT RunCMake_TEST_SOURCE_DIR_NO_CLEAN)
  21. file(REMOVE_RECURSE "${RunCMake_TEST_SOURCE_DIR}")
  22. file(MAKE_DIRECTORY "${RunCMake_TEST_SOURCE_DIR}")
  23. endif()
  24. configure_file("${RunCMake_SOURCE_DIR}/CMakeLists.txt.in" "${RunCMake_TEST_SOURCE_DIR}/CMakeLists.txt" @ONLY)
  25. if(NOT CMakePresets_FILE)
  26. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/${name}.json.in")
  27. endif()
  28. if(EXISTS "${CMakePresets_FILE}")
  29. configure_file("${CMakePresets_FILE}" "${RunCMake_TEST_SOURCE_DIR}/CMakePresets.json" @ONLY)
  30. endif()
  31. if(NOT CMakeUserPresets_FILE)
  32. set(CMakeUserPresets_FILE "${RunCMake_SOURCE_DIR}/${name}User.json.in")
  33. endif()
  34. if(EXISTS "${CMakeUserPresets_FILE}")
  35. configure_file("${CMakeUserPresets_FILE}" "${RunCMake_TEST_SOURCE_DIR}/CMakeUserPresets.json" @ONLY)
  36. endif()
  37. set(_CMakePresets_EXTRA_FILES_OUT)
  38. set(_CMakePresets_EXTRA_FILES_SCHEMA_EXPECTED_RESULTS)
  39. foreach(_extra_file IN LISTS CMakePresets_EXTRA_FILES)
  40. cmake_path(RELATIVE_PATH _extra_file
  41. BASE_DIRECTORY "${RunCMake_SOURCE_DIR}"
  42. OUTPUT_VARIABLE _extra_file_relative
  43. )
  44. string(REGEX REPLACE "\\.in$" "" _extra_file_out_relative "${_extra_file_relative}")
  45. set(_extra_file_out "${RunCMake_TEST_SOURCE_DIR}/${_extra_file_out_relative}")
  46. configure_file("${_extra_file}" "${_extra_file_out}" @ONLY)
  47. list(APPEND _CMakePresets_EXTRA_FILES_OUT "${_extra_file_out}")
  48. list(APPEND _CMakePresets_EXTRA_FILES_SCHEMA_EXPECTED_RESULTS 0)
  49. endforeach()
  50. set(_s_arg -S)
  51. if(CMakePresets_NO_S_ARG)
  52. set(_s_arg)
  53. endif()
  54. set(_source_args ${_s_arg} ${_source_arg})
  55. if(CMakePresets_NO_SOURCE_ARGS)
  56. set(_source_args)
  57. endif()
  58. set(_unused_cli --no-warn-unused-cli)
  59. if(CMakePresets_WARN_UNUSED_CLI)
  60. set(_unused_cli)
  61. endif()
  62. set(_preset "--preset=${name}")
  63. if(CMakePresets_NO_PRESET)
  64. set(_preset)
  65. endif()
  66. set(RunCMake_TEST_COMMAND ${CMAKE_COMMAND}
  67. ${_source_args}
  68. -DRunCMake_TEST=${name}
  69. -DRunCMake_GENERATOR=${RunCMake_GENERATOR}
  70. -DCMAKE_MAKE_PROGRAM=${RunCMake_MAKE_PROGRAM}
  71. ${_unused_cli}
  72. ${_preset}
  73. ${ARGN}
  74. )
  75. run_cmake(${name})
  76. endfunction()
  77. # Test CMakePresets.json errors
  78. set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
  79. run_cmake_presets(NoCMakePresets)
  80. run_cmake_presets(Comment)
  81. run_cmake_presets(JSONParseError)
  82. run_cmake_presets(InvalidRoot)
  83. run_cmake_presets(NoVersion)
  84. run_cmake_presets(InvalidVersion)
  85. run_cmake_presets(LowVersion)
  86. run_cmake_presets(HighVersion)
  87. run_cmake_presets(InvalidVendor)
  88. set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
  89. run_cmake_presets(NoPresets)
  90. set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
  91. run_cmake_presets(InvalidPresets)
  92. run_cmake_presets(PresetNotObject)
  93. run_cmake_presets(NoPresetName)
  94. run_cmake_presets(InvalidPresetName)
  95. run_cmake_presets(EmptyPresetName)
  96. set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
  97. run_cmake_presets(NoPresetGenerator)
  98. set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
  99. run_cmake_presets(InvalidPresetGenerator)
  100. set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
  101. run_cmake_presets(NoPresetBinaryDir)
  102. set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
  103. run_cmake_presets(InvalidPresetBinaryDir)
  104. run_cmake_presets(InvalidVariables)
  105. run_cmake_presets(VariableNotObject)
  106. run_cmake_presets(NoVariableValue)
  107. run_cmake_presets(InvalidVariableValue)
  108. run_cmake_presets(ExtraRootField)
  109. run_cmake_presets(ExtraPresetField)
  110. run_cmake_presets(ExtraVariableField)
  111. run_cmake_presets(FuturePresetInstallDirField)
  112. run_cmake_presets(FuturePresetToolchainField)
  113. run_cmake_presets(InvalidPresetVendor)
  114. set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
  115. run_cmake_presets(DuplicatePresets)
  116. run_cmake_presets(CyclicInheritance0)
  117. run_cmake_presets(CyclicInheritance1)
  118. run_cmake_presets(CyclicInheritance2)
  119. run_cmake_presets(InvalidInheritance)
  120. run_cmake_presets(ErrorNoWarningDev)
  121. run_cmake_presets(ErrorNoWarningDeprecated)
  122. set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
  123. run_cmake_presets(InvalidArchitectureStrategy)
  124. run_cmake_presets(UnknownArchitectureStrategy)
  125. run_cmake_presets(InvalidToolsetStrategy)
  126. run_cmake_presets(UnknownToolsetStrategy)
  127. run_cmake_presets(EmptyCacheKey)
  128. run_cmake_presets(EmptyEnvKey)
  129. set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
  130. run_cmake_presets(UnclosedMacro)
  131. run_cmake_presets(NoSuchMacro)
  132. run_cmake_presets(EnvCycle)
  133. run_cmake_presets(EmptyEnv)
  134. run_cmake_presets(EmptyPenv)
  135. run_cmake_presets(EmptyPenvInInclude)
  136. run_cmake_presets(InvalidRegex)
  137. set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
  138. run_cmake_presets(ConditionFuture)
  139. run_cmake_presets(SubConditionNull)
  140. run_cmake_presets(TraceNotSupported)
  141. # Test cmakeMinimumRequired field
  142. run_cmake_presets(MinimumRequiredInvalid)
  143. set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
  144. run_cmake_presets(MinimumRequiredEmpty)
  145. run_cmake_presets(MinimumRequiredMajor)
  146. run_cmake_presets(MinimumRequiredMinor)
  147. run_cmake_presets(MinimumRequiredPatch)
  148. # Test properly working CMakePresets.json
  149. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/CMakePresets.json.in")
  150. unset(ENV{TEST_ENV})
  151. unset(ENV{TEST_ENV_REF})
  152. unset(ENV{TEST_D_ENV_REF})
  153. set(ENV{TEST_ENV_OVERRIDE} "This environment variable will be overridden")
  154. set(ENV{TEST_PENV} "Process environment variable")
  155. set(ENV{TEST_ENV_REF_PENV} "suffix")
  156. run_cmake_presets(Good "-DTEST_OVERRIDE_1=Overridden value" "-DTEST_OVERRIDE_2:STRING=Overridden value" -C "${RunCMake_SOURCE_DIR}/CacheOverride.cmake" "-UTEST_UNDEF")
  157. unset(ENV{TEST_ENV_OVERRIDE})
  158. unset(ENV{TEST_PENV})
  159. unset(ENV{TEST_ENV_REF_PENV})
  160. run_cmake_presets(GoodNoArgs)
  161. file(REMOVE_RECURSE ${RunCMake_BINARY_DIR}/GoodBinaryUp-build)
  162. run_cmake_presets(GoodBinaryUp)
  163. set(CMakePresets_SOURCE_ARG "../GoodBinaryRelative")
  164. run_cmake_presets(GoodBinaryRelative)
  165. unset(CMakePresets_SOURCE_ARG)
  166. run_cmake_presets(GoodSpaces "--preset" "Good Spaces")
  167. run_cmake_presets(GoodSpacesEq "--preset=Good Spaces")
  168. if(WIN32)
  169. run_cmake_presets(GoodWindowsBackslash)
  170. endif()
  171. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/GoodBOM.json.in")
  172. run_cmake_presets(GoodBOM)
  173. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/CMakePresets.json.in")
  174. file(REMOVE_RECURSE ${RunCMake_BINARY_DIR}/GoodBinaryCmdLine-build)
  175. run_cmake_presets(GoodBinaryCmdLine -B ${RunCMake_BINARY_DIR}/GoodBinaryCmdLine-build)
  176. run_cmake_presets(GoodGeneratorCmdLine -G ${RunCMake_GENERATOR})
  177. run_cmake_presets(InvalidGeneratorCmdLine -G "Invalid Generator")
  178. set(CMakePresets_NO_S_ARG TRUE)
  179. run_cmake_presets(GoodNoS)
  180. set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/GoodNoSCachePrep-build")
  181. run_cmake_presets(GoodNoSCachePrep)
  182. set(CMakePresets_SOURCE_ARG ".")
  183. set(RunCMake_TEST_NO_CLEAN 1)
  184. run_cmake_presets(GoodNoSCache)
  185. unset(RunCMake_TEST_NO_CLEAN)
  186. unset(CMakePresets_SOURCE_ARG)
  187. unset(RunCMake_TEST_BINARY_DIR)
  188. unset(CMakePresets_NO_S_ARG)
  189. set(CMakePresets_NO_SOURCE_ARGS 1)
  190. set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/GoodNoSourceArg")
  191. set(RunCMake_TEST_NO_CLEAN 1)
  192. run_cmake_presets(GoodNoSourceArg)
  193. unset(RunCMake_TEST_NO_CLEAN)
  194. unset(RunCMake_TEST_BINARY_DIR)
  195. unset(CMakePresets_NO_SOURCE_ARGS)
  196. run_cmake_presets(GoodInheritanceParent)
  197. run_cmake_presets(GoodInheritanceChild)
  198. run_cmake_presets(GoodInheritanceOverride)
  199. run_cmake_presets(GoodInheritanceMulti)
  200. run_cmake_presets(GoodInheritanceMultiSecond)
  201. run_cmake_presets(GoodInheritanceMacro)
  202. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/GoodInstall.json.in")
  203. run_cmake_presets(GoodInstallDefault)
  204. run_cmake_presets(GoodInstallInherit)
  205. run_cmake_presets(GoodInstallOverride)
  206. run_cmake_presets(GoodInstallCommandLine "--install-prefix=${RunCMake_SOURCE_DIR}/path/passed/on/command_line")
  207. set(RunCMake_TEST_SOURCE_DIR_NO_CLEAN 1)
  208. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/GoodToolchain.json.in")
  209. reset_cmake_presets_directory(GoodToolchainInherit)
  210. file(WRITE "${RunCMake_BINARY_DIR}/GoodToolchainDefault/toolchain.cmake" "")
  211. run_cmake_presets(GoodToolchainDefault)
  212. reset_cmake_presets_directory(GoodToolchainInherit)
  213. file(WRITE "${RunCMake_BINARY_DIR}/GoodToolchainInherit/toolchain.cmake" "")
  214. run_cmake_presets(GoodToolchainInherit)
  215. reset_cmake_presets_directory(GoodToolchainOverride)
  216. file(WRITE "${RunCMake_BINARY_DIR}/GoodToolchainOverride/override_toolchain.cmake" "")
  217. run_cmake_presets(GoodToolchainOverride)
  218. reset_cmake_presets_directory(GoodToolchainCommandLine)
  219. file(WRITE "${RunCMake_BINARY_DIR}/GoodToolchainCommandLine/cmd_line_toolchain.cmake" "")
  220. run_cmake_presets(GoodToolchainCommandLine "--toolchain=${RunCMake_BINARY_DIR}/GoodToolchainCommandLine/cmd_line_toolchain.cmake")
  221. unset(RunCMake_TEST_SOURCE_DIR_NO_CLEAN)
  222. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/CMakePresets.json.in")
  223. # Test bad preset arguments
  224. run_cmake_presets(VendorMacro)
  225. run_cmake_presets(InvalidGenerator)
  226. # Test Visual Studio-specific stuff
  227. if(RunCMake_GENERATOR MATCHES "^Visual Studio ")
  228. run_cmake_presets(VisualStudioGeneratorArch)
  229. run_cmake_presets(VisualStudioWin32)
  230. run_cmake_presets(VisualStudioWin64)
  231. run_cmake_presets(VisualStudioWin32Override -A x64)
  232. if(NOT RunCMake_GENERATOR STREQUAL "Visual Studio 9 2008")
  233. run_cmake_presets(VisualStudioToolset)
  234. run_cmake_presets(VisualStudioToolsetOverride -T "Test Toolset")
  235. run_cmake_presets(VisualStudioInheritanceParent)
  236. run_cmake_presets(VisualStudioInheritanceChild)
  237. run_cmake_presets(VisualStudioInheritanceOverride)
  238. run_cmake_presets(VisualStudioInheritanceMulti)
  239. run_cmake_presets(VisualStudioInheritanceMultiSecond)
  240. endif()
  241. else()
  242. run_cmake_presets(ArchToolsetStrategyNone)
  243. run_cmake_presets(ArchToolsetStrategyDefault)
  244. run_cmake_presets(ArchToolsetStrategyIgnore)
  245. endif()
  246. # Test bad command line arguments
  247. run_cmake_presets(NoSuchPreset)
  248. run_cmake_presets(NoPresetArgument --preset)
  249. run_cmake_presets(NoPresetArgumentEq --preset= -DA=B)
  250. run_cmake_presets(UseHiddenPreset)
  251. # Test CMakeUserPresets.json
  252. unset(CMakePresets_FILE)
  253. run_cmake_presets(GoodUserOnly)
  254. run_cmake_presets(GoodUserFromMain)
  255. run_cmake_presets(GoodUserFromUser)
  256. run_cmake_presets(V2InheritV3Optional)
  257. # Test CMakeUserPresets.json errors
  258. run_cmake_presets(UserDuplicateInUser)
  259. run_cmake_presets(UserDuplicateCross)
  260. run_cmake_presets(UserInheritance)
  261. # Test listing presets
  262. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/ListPresets.json.in")
  263. run_cmake_presets(ListPresets --list-presets)
  264. run_cmake_presets(ListPresetsInvalidType --list-presets=invalid-type)
  265. set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/ListPresetsWorkingDir")
  266. set(RunCMake_TEST_NO_CLEAN 1)
  267. set(CMakePresets_NO_SOURCE_ARGS 1)
  268. set(CMakePresets_NO_PRESET 1)
  269. run_cmake_presets(ListPresetsWorkingDir --list-presets)
  270. run_cmake_presets(ListConfigurePresetsWorkingDir --list-presets=configure)
  271. unset(CMakePresets_NO_PRESET)
  272. unset(CMakePresets_NO_SOURCE_ARGS)
  273. unset(RunCMake_TEST_NO_CLEAN)
  274. unset(RunCMake_TEST_BINARY_DIR)
  275. run_cmake_presets(ListPresetsNoSuchPreset)
  276. run_cmake_presets(ListPresetsHidden)
  277. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/ListAllPresetsNoBuild.json.in")
  278. run_cmake_presets(ListAllPresetsNoBuild --list-presets=all)
  279. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/ListAllPresetsNoTest.json.in")
  280. run_cmake_presets(ListAllPresetsNoTest --list-presets=all)
  281. # Test warning and error flags
  282. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/Warnings.json.in")
  283. set(CMakePresets_WARN_UNUSED_CLI 1)
  284. run_cmake_presets(NoWarningFlags)
  285. run_cmake_presets(WarningFlags)
  286. run_cmake_presets(DisableWarningFlags)
  287. run_cmake_presets(ErrorDev)
  288. run_cmake_presets(ErrorDeprecated)
  289. unset(CMakePresets_WARN_UNUSED_CLI)
  290. # Test debug
  291. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/Debug.json.in")
  292. run_cmake_presets(NoDebug)
  293. run_cmake_presets(Debug)
  294. # Test trace
  295. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/Trace.json.in")
  296. run_cmake_presets(NoTrace)
  297. run_cmake_presets(ExplicitNoTrace)
  298. run_cmake_presets(Trace)
  299. run_cmake_presets(TraceExpand)
  300. run_cmake_presets(TraceFormatJSON)
  301. run_cmake_presets(TraceFormatHuman)
  302. run_cmake_presets(TraceSource)
  303. run_cmake_presets(TraceRedirect)
  304. run_cmake_presets(TraceAll)
  305. # Test ${hostSystemName} macro
  306. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/HostSystemName.json.in")
  307. run_cmake_presets(HostSystemName)
  308. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/HostSystemNameFuture.json.in")
  309. run_cmake_presets(HostSystemNameFuture)
  310. # Test ${fileDir} macro
  311. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/FileDir.json.in")
  312. set(CMakePresets_EXTRA_FILES
  313. "${RunCMake_SOURCE_DIR}/subdir/FileDir.json.in"
  314. )
  315. run_cmake_presets(FileDir)
  316. unset(CMakePresets_EXTRA_FILES)
  317. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/FileDirFuture.json.in")
  318. run_cmake_presets(FileDirFuture)
  319. # Test ${pathListSep} macro
  320. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/PathListSep.json.in")
  321. run_cmake_presets(PathListSep)
  322. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/PathListSepFuture.json.in")
  323. run_cmake_presets(PathListSepFuture)
  324. # Test conditions
  325. set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/Conditions.json.in")
  326. run_cmake_presets(ListConditions --list-presets)
  327. run_cmake_presets(SimpleTrue)
  328. run_cmake_presets(SimpleFalse)
  329. unset(CMakePresets_FILE)
  330. # Test optional generator and buildDir fields
  331. run_cmake_presets(OptionalBinaryDirField -B "${RunCMake_BINARY_DIR}/OptionalBinaryDirField/build")
  332. run_cmake_presets(OptionalGeneratorField -G "${RunCMake_GENERATOR}")
  333. set(CMakePresets_NO_S_ARG TRUE)
  334. set(CMakePresets_SOURCE_ARG "../OptionalBinaryDirFieldNoS")
  335. run_cmake_presets(OptionalBinaryDirFieldNoS)
  336. unset(CMakePresets_SOURCE_ARG)
  337. unset(CMakePresets_NO_S_ARG)
  338. # Test include field
  339. set(CMakePresets_SCHEMA_EXPECTED_RESULT 1)
  340. run_cmake_presets(IncludeV3)
  341. set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
  342. set(CMakePresets_EXTRA_FILES
  343. "${RunCMake_SOURCE_DIR}/IncludeV4V3Extra.json.in"
  344. )
  345. set(CMakePresets_EXTRA_FILES_SCHEMA_EXPECTED_RESULTS 1)
  346. run_cmake_presets(IncludeV4V3)
  347. unset(CMakePresets_EXTRA_FILES_SCHEMA_EXPECTED_RESULTS)
  348. set(CMakePresets_EXTRA_FILES
  349. "${RunCMake_SOURCE_DIR}/IncludeCommon.json.in"
  350. "${RunCMake_SOURCE_DIR}/IncludeUserCommon.json.in"
  351. "${RunCMake_SOURCE_DIR}/subdir/CMakePresets.json.in"
  352. )
  353. run_cmake_presets(Include --list-presets)
  354. set(CMakePresets_EXTRA_FILES
  355. "${RunCMake_SOURCE_DIR}/IncludeCommon.json.in"
  356. )
  357. set(ENV{TEST_ENV_INCLUDE_DIR} ${RunCMake_BINARY_DIR}/IncludeExpansion)
  358. run_cmake_presets(IncludeExpansion --list-presets)
  359. unset(ENV{TEST_ENV_INCLUDE_DIR})
  360. unset(CMakePresets_EXTRA_FILES)
  361. run_cmake_presets(IncludeNotFound)
  362. run_cmake_presets(IncludeCycle)
  363. set(CMakePresets_EXTRA_FILES
  364. "${RunCMake_SOURCE_DIR}/IncludeCycle3Files2.json.in"
  365. "${RunCMake_SOURCE_DIR}/IncludeCycle3Files3.json.in"
  366. )
  367. run_cmake_presets(IncludeCycle3Files)
  368. set(CMakePresets_EXTRA_FILES
  369. "${RunCMake_SOURCE_DIR}/IncludeOutsideProjectIntermediate.json.in"
  370. )
  371. run_cmake_presets(IncludeOutsideProject)
  372. unset(CMakePresets_EXTRA_FILES)
  373. run_cmake_presets(IncludeUserOutsideProject)
  374. # Test the example from the documentation
  375. file(READ "${RunCMake_SOURCE_DIR}/../../../Help/manual/presets/example.json" _example)
  376. string(REPLACE "\"generator\": \"Ninja\"" "\"generator\": \"@RunCMake_GENERATOR@\"" _example "${_example}")
  377. if(CMAKE_HOST_WIN32)
  378. string(REPLACE [["PATH": "$env{HOME}/ninja/bin:$penv{PATH}"]] [["PATH": "$env{HOME}/ninja/bin;$penv{PATH}"]] _example "${_example}")
  379. endif()
  380. file(WRITE "${RunCMake_BINARY_DIR}/example.json.in" "${_example}")
  381. set(CMakePresets_FILE "${RunCMake_BINARY_DIR}/example.json.in")
  382. set(CMakePresets_EXTRA_FILES
  383. "${RunCMake_SOURCE_DIR}/otherThings.json.in"
  384. "${RunCMake_SOURCE_DIR}/moreThings.json.in"
  385. )
  386. run_cmake_presets(DocumentationExample --preset=default)
  387. run_cmake_presets(DocumentationExampleListAllPresets --list-presets=all)
  388. unset(CMakePresets_EXTRA_FILES)