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