Commit 76e3cf384021a986007c653a56f31bb89ca7fb27

Anonymous Maarten 2022-11-01T11:04:45

cmake: use custom add_sdl_test_executable macro to add test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 578a422..d89be52 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -2,8 +2,26 @@ cmake_minimum_required(VERSION 3.0)
 project(SDL2_test)
 
 include(CheckCCompilerFlag)
+include(CMakeParseArguments)
 include(CMakePushCheckState)
 
+set(SDL_TEST_EXECUTABLES)
+set(SDL_TESTS_NONINTERACTIVE)
+set(SDL_TESTS_NEEDS_ESOURCES)
+
+macro(add_sdl_test_executable TARGET)
+    cmake_parse_arguments(AST "NONINTERACTIVE;NEEDS_RESOURCES" "" "" ${ARGN})
+    add_executable(${TARGET} ${AST_UNPARSED_ARGUMENTS})
+
+    list(APPEND SDL_TEST_EXECUTABLES ${TARGET})
+    if(AST_NONINTERACTIVE)
+        list(APPEND SDL_TESTS_NONINTERACTIVE ${TARGET})
+    endif()
+    if(AST_NEEDS_RESOURCES)
+        list(APPEND SDL_TESTS_NEEDS_ESOURCES ${TARGET})
+    endif()
+endmacro()
+
 if(NOT TARGET SDL2::SDL2-static)
     find_package(SDL2 2.0.23 REQUIRED COMPONENTS SDL2-static SDL2test)
 endif()
@@ -76,57 +94,59 @@ if (OPENGL_FOUND)
 add_definitions(-DHAVE_OPENGL)
 endif()
 
-add_executable(checkkeys checkkeys.c)
-add_executable(checkkeysthreads checkkeysthreads.c)
-add_executable(loopwave loopwave.c testutils.c)
-add_executable(loopwavequeue loopwavequeue.c testutils.c)
-add_executable(testsurround testsurround.c)
-add_executable(testresample testresample.c)
-add_executable(testaudioinfo testaudioinfo.c)
+add_sdl_test_executable(checkkeys checkkeys.c)
+add_sdl_test_executable(checkkeysthreads checkkeysthreads.c)
+add_sdl_test_executable(loopwave NEEDS_RESOURCES loopwave.c testutils.c)
+add_sdl_test_executable(loopwavequeue NEEDS_RESOURCES loopwavequeue.c testutils.c)
+add_sdl_test_executable(testsurround testsurround.c)
+add_sdl_test_executable(testresample NEEDS_RESOURCES testresample.c)
+add_sdl_test_executable(testaudioinfo testaudioinfo.c)
 
 file(GLOB TESTAUTOMATION_SOURCE_FILES testautomation*.c)
-add_executable(testautomation ${TESTAUTOMATION_SOURCE_FILES})
-add_executable(testmultiaudio testmultiaudio.c testutils.c)
-add_executable(testaudiohotplug testaudiohotplug.c testutils.c)
-add_executable(testaudiocapture testaudiocapture.c)
-add_executable(testatomic testatomic.c)
-add_executable(testintersections testintersections.c)
-add_executable(testrelative testrelative.c)
-add_executable(testhittesting testhittesting.c)
-add_executable(testdraw2 testdraw2.c)
-add_executable(testdrawchessboard testdrawchessboard.c)
-add_executable(testdropfile testdropfile.c)
-add_executable(testerror testerror.c)
+add_sdl_test_executable(testautomation NEEDS_RESOURCES ${TESTAUTOMATION_SOURCE_FILES})
+add_sdl_test_executable(testmultiaudio NEEDS_RESOURCES testmultiaudio.c testutils.c)
+add_sdl_test_executable(testaudiohotplug NEEDS_RESOURCES testaudiohotplug.c testutils.c)
+add_sdl_test_executable(testaudiocapture testaudiocapture.c)
+add_sdl_test_executable(testatomic NONINTERACTIVE testatomic.c)
+add_sdl_test_executable(testintersections testintersections.c)
+add_sdl_test_executable(testrelative testrelative.c)
+add_sdl_test_executable(testhittesting testhittesting.c)
+add_sdl_test_executable(testdraw2 testdraw2.c)
+add_sdl_test_executable(testdrawchessboard testdrawchessboard.c)
+add_sdl_test_executable(testdropfile testdropfile.c)
+add_sdl_test_executable(testerror NONINTERACTIVE testerror.c)
 
 if(LINUX)
-    add_executable(testevdev testevdev.c)
+    add_sdl_test_executable(testevdev NONINTERACTIVE testevdev.c)
 endif()
 
-add_executable(testfile testfile.c)
-add_executable(testgamecontroller testgamecontroller.c testutils.c)
-add_executable(testgeometry testgeometry.c testutils.c)
-add_executable(testgesture testgesture.c)
-add_executable(testgl2 testgl2.c)
-add_executable(testgles testgles.c)
-add_executable(testgles2 testgles2.c)
-add_executable(testhaptic testhaptic.c)
-add_executable(testhotplug testhotplug.c)
-add_executable(testrumble testrumble.c)
-add_executable(testthread testthread.c)
-add_executable(testiconv testiconv.c testutils.c)
-add_executable(testime testime.c testutils.c)
-add_executable(testjoystick testjoystick.c)
-add_executable(testkeys testkeys.c)
-add_executable(testloadso testloadso.c)
-add_executable(testlocale testlocale.c)
-add_executable(testlock testlock.c)
-add_executable(testmouse testmouse.c)
+add_sdl_test_executable(testfile testfile.c)
+add_sdl_test_executable(testgamecontroller NEEDS_RESOURCES testgamecontroller.c testutils.c)
+add_sdl_test_executable(testgeometry testgeometry.c testutils.c)
+add_sdl_test_executable(testgesture testgesture.c)
+add_sdl_test_executable(testgl2 testgl2.c)
+add_sdl_test_executable(testgles testgles.c)
+add_sdl_test_executable(testgles2 testgles2.c)
+add_sdl_test_executable(testhaptic testhaptic.c)
+add_sdl_test_executable(testhotplug testhotplug.c)
+add_sdl_test_executable(testrumble testrumble.c)
+add_sdl_test_executable(testthread NONINTERACTIVE testthread.c)
+add_sdl_test_executable(testiconv NEEDS_RESOURCES testiconv.c testutils.c)
+add_sdl_test_executable(testime NEEDS_RESOURCES testime.c testutils.c)
+add_sdl_test_executable(testjoystick testjoystick.c)
+add_sdl_test_executable(testkeys testkeys.c)
+add_sdl_test_executable(testloadso testloadso.c)
+add_sdl_test_executable(testlocale NONINTERACTIVE testlocale.c)
+add_sdl_test_executable(testlock testlock.c)
+add_sdl_test_executable(testmouse testmouse.c)
 
 if(APPLE)
-    add_executable(testnative testnative.c
-                              testnativecocoa.m
-                              testnativex11.c
-                              testutils.c)
+    add_sdl_test_executable(testnative NEEDS_RESOURCES
+        testnative.c
+        testnativecocoa.m
+        testnativex11.c
+        testutils.c
+    )
 
     cmake_push_check_state(RESET)
     check_c_compiler_flag(-Wno-error=deprecated-declarations HAVE_WNO_ERROR_DEPRECATED_DECLARATIONS)
@@ -135,41 +155,41 @@ if(APPLE)
         set_property(SOURCE "testnativecocoa.m" APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-error=deprecated-declarations")
     endif()
 elseif(WINDOWS)
-    add_executable(testnative testnative.c testnativew32.c testutils.c)
+    add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativew32.c testutils.c)
 elseif(HAVE_X11)
-    add_executable(testnative testnative.c testnativex11.c testutils.c)
+    add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativex11.c testutils.c)
     target_link_libraries(testnative X11)
 endif()
 
-add_executable(testoverlay2 testoverlay2.c testyuv_cvt.c testutils.c)
-add_executable(testplatform testplatform.c)
-add_executable(testpower testpower.c)
-add_executable(testfilesystem testfilesystem.c)
-add_executable(testrendertarget testrendertarget.c testutils.c)
-add_executable(testscale testscale.c testutils.c)
-add_executable(testsem testsem.c)
-add_executable(testsensor testsensor.c)
-add_executable(testshader testshader.c)
-add_executable(testshape testshape.c)
-add_executable(testsprite2 testsprite2.c testutils.c)
-add_executable(testspriteminimal testspriteminimal.c testutils.c)
-add_executable(teststreaming teststreaming.c testutils.c)
-add_executable(testtimer testtimer.c)
-add_executable(testurl testurl.c)
-add_executable(testver testver.c)
-add_executable(testviewport testviewport.c testutils.c)
-add_executable(testwm2 testwm2.c)
-add_executable(testyuv testyuv.c testyuv_cvt.c)
-add_executable(torturethread torturethread.c)
-add_executable(testrendercopyex testrendercopyex.c testutils.c)
-add_executable(testmessage testmessage.c)
-add_executable(testdisplayinfo testdisplayinfo.c)
-add_executable(testqsort testqsort.c)
-add_executable(testbounds testbounds.c)
-add_executable(testcustomcursor testcustomcursor.c)
-add_executable(controllermap controllermap.c testutils.c)
-add_executable(testvulkan testvulkan.c)
-add_executable(testoffscreen testoffscreen.c)
+add_sdl_test_executable(testoverlay2 NEEDS_RESOURCES testoverlay2.c testyuv_cvt.c testutils.c)
+add_sdl_test_executable(testplatform NONINTERACTIVE testplatform.c)
+add_sdl_test_executable(testpower NONINTERACTIVE testpower.c)
+add_sdl_test_executable(testfilesystem NONINTERACTIVE testfilesystem.c)
+add_sdl_test_executable(testrendertarget NEEDS_RESOURCES testrendertarget.c testutils.c)
+add_sdl_test_executable(testscale NEEDS_RESOURCES testscale.c testutils.c)
+add_sdl_test_executable(testsem testsem.c)
+add_sdl_test_executable(testsensor testsensor.c)
+add_sdl_test_executable(testshader NEEDS_RESOURCES testshader.c)
+add_sdl_test_executable(testshape NEEDS_RESOURCES testshape.c)
+add_sdl_test_executable(testsprite2 NEEDS_RESOURCES testsprite2.c testutils.c)
+add_sdl_test_executable(testspriteminimal NEEDS_RESOURCES testspriteminimal.c testutils.c)
+add_sdl_test_executable(teststreaming NEEDS_RESOURCES teststreaming.c testutils.c)
+add_sdl_test_executable(testtimer NONINTERACTIVE testtimer.c)
+add_sdl_test_executable(testurl testurl.c)
+add_sdl_test_executable(testver NONINTERACTIVE testver.c)
+add_sdl_test_executable(testviewport NEEDS_RESOURCES testviewport.c testutils.c)
+add_sdl_test_executable(testwm2 testwm2.c)
+add_sdl_test_executable(testyuv NEEDS_RESOURCES testyuv.c testyuv_cvt.c)
+add_sdl_test_executable(torturethread torturethread.c)
+add_sdl_test_executable(testrendercopyex NEEDS_RESOURCES testrendercopyex.c testutils.c)
+add_sdl_test_executable(testmessage testmessage.c)
+add_sdl_test_executable(testdisplayinfo testdisplayinfo.c)
+add_sdl_test_executable(testqsort NONINTERACTIVE testqsort.c)
+add_sdl_test_executable(testbounds testbounds.c)
+add_sdl_test_executable(testcustomcursor testcustomcursor.c)
+add_sdl_test_executable(controllermap NEEDS_RESOURCES controllermap.c testutils.c)
+add_sdl_test_executable(testvulkan testvulkan.c)
+add_sdl_test_executable(testoffscreen testoffscreen.c)
 
 cmake_push_check_state(RESET)
 
@@ -190,107 +210,15 @@ endif()
 
 cmake_pop_check_state()
 
-SET(ALL_TESTS
-    checkkeys
-    checkkeysthreads
-    controllermap
-    loopwave
-    loopwavequeue
-    testatomic
-    testaudiocapture
-    testaudiohotplug
-    testaudioinfo
-    testautomation
-    testbounds
-    testcustomcursor
-    testdisplayinfo
-    testdraw2
-    testdrawchessboard
-    testdropfile
-    testerror
-    testfile
-    testfilesystem
-    testgamecontroller
-    testgeometry
-    testgesture
-    testgl2
-    testgles
-    testgles2
-    testhaptic
-    testhittesting
-    testhotplug
-    testiconv
-    testime
-    testintersections
-    testjoystick
-    testkeys
-    testloadso
-    testlocale
-    testlock
-    testmessage
-    testmouse
-    testmultiaudio
-    testoffscreen
-    testoverlay2
-    testplatform
-    testpower
-    testqsort
-    testrelative
-    testrendercopyex
-    testrendertarget
-    testresample
-    testrumble
-    testscale
-    testsem
-    testsensor
-    testshader
-    testshape
-    testsprite2
-    testspriteminimal
-    teststreaming
-    testsurround
-    testthread
-    testtimer
-    testurl
-    testver
-    testviewport
-    testvulkan
-    testwm2
-    testyuv
-    torturethread
-)
-
-set(NONINTERACTIVE
-    testatomic
-    testerror
-    testfilesystem
-    testlocale
-    testplatform
-    testpower
-    testqsort
-    testthread
-    testtimer
-    testver
-)
-
-if(WINDOWS OR APPLE OR SDL_X11)
-    list(APPEND ALL_TESTS testnative)
-endif()
-
-if(LINUX)
-    list(APPEND ALL_TESTS testevdev)
-    list(APPEND NONINTERACTIVE testevdev)
-endif()
-
 if(SDL_DUMMYAUDIO)
-  set(NEEDS_AUDIO
+  list(APPEND SDL_TESTS_NONINTERACTIVE
     testaudioinfo
     testsurround
   )
 endif()
 
 if(SDL_DUMMYVIDEO)
-  set(NEEDS_DISPLAY
+  list(APPEND SDL_TESTS_NONINTERACTIVE
     testkeys
     testbounds
     testdisplayinfo
@@ -304,63 +232,11 @@ endif()
 
 file(GLOB RESOURCE_FILES *.bmp *.wav *.hex moose.dat utf8.txt)
 file(COPY ${RESOURCE_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
-if(PSP OR PS2)
-    set(NEEDS_RESOURCES
-        testscale
-        testrendercopyex
-        controllermap
-        testyuv
-        testgamecontroller
-        testshape
-        testshader
-        testspriteminimal
-        testautomation
-        testrendertarget
-        testsprite2
-        loopwave
-        loopwavequeue
-        testresample
-        testaudiohotplug
-        testmultiaudio
-        testiconv
-        testoverlay2
-        teststreaming
-        testviewport
-    )
-else()
-    set(NEEDS_RESOURCES
-        testscale
-        testrendercopyex
-        controllermap
-        testyuv
-        testgamecontroller
-        testshape
-        testshader
-        testspriteminimal
-        testautomation
-        testcustomcursor
-        testrendertarget
-        testsprite2
-        loopwave
-        loopwavequeue
-        testresample
-        testaudiohotplug
-        testmultiaudio
-        testime
-        testiconv
-        testoverlay2
-        teststreaming
-        testviewport
-    )
-    if(WINDOWS OR APPLE OR HAVE_X11)
-        list(APPEND NEEDS_RESOURCES testnative)
-    endif()
-endif()
 
 if(PSP)
     # Build EBOOT files if building for PSP
     set(BUILD_EBOOT
-        ${NEEDS_RESOURCES}
+        ${SDL_TESTS_NEEDS_ESOURCES}
         testatomic
         testaudiocapture
         testaudioinfo
@@ -438,7 +314,7 @@ if(N3DS)
     set(ROMFS_DIR "${CMAKE_CURRENT_BINARY_DIR}/romfs")
     file(COPY ${RESOURCE_FILES} DESTINATION "${ROMFS_DIR}")
 
-    foreach(APP IN LISTS ALL_TESTS)
+    foreach(APP IN LISTS SDL_TEST_EXECUTABLES)
         get_target_property(TARGET_BINARY_DIR ${APP} BINARY_DIR)
         set(SMDH_FILE "${TARGET_BINARY_DIR}/${APP}.smdh")
         ctr_generate_smdh("${SMDH_FILE}" 
@@ -456,8 +332,8 @@ if(N3DS)
 endif()
 
 if(RISCOS)
-    set(ALL_TESTS_AIF "")
-    foreach(APP IN LISTS ALL_TESTS)
+    set(SDL_TEST_EXECUTABLES_AIF)
+    foreach(APP IN LISTS SDL_TEST_EXECUTABLES)
         target_link_options(${APP} PRIVATE -static)
         add_custom_command(
             OUTPUT ${APP},ff8
@@ -465,11 +341,11 @@ if(RISCOS)
             DEPENDS ${APP}
         )
         add_custom_target(${APP}-aif ALL DEPENDS ${APP},ff8)
-        list(APPEND ALL_TESTS_AIF ${CMAKE_CURRENT_BINARY_DIR}/${APP},ff8)
+        list(APPEND SDL_TEST_EXECUTABLES_AIF ${CMAKE_CURRENT_BINARY_DIR}/${APP},ff8)
     endforeach()
 endif()
 
-foreach(APP IN LISTS NEEDS_RESOURCES)
+foreach(APP IN LISTS SDL_TESTS_NEEDS_RESOURCES)
     foreach(RESOURCE_FILE ${RESOURCE_FILES})
         if(PSP OR PS2)
             add_custom_command(TARGET ${APP} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${RESOURCE_FILE} $<TARGET_FILE_DIR:${APP}>/sdl-${APP})
@@ -511,7 +387,7 @@ set(TESTS_ENVIRONMENT
     SDL_VIDEODRIVER=dummy
 )
 
-foreach(TESTCASE ${NONINTERACTIVE} ${NEEDS_AUDIO} ${NEEDS_DISPLAY})
+foreach(TESTCASE ${SDL_TESTS_NONINTERACTIVE})
     add_test(
         NAME ${TESTCASE}
         COMMAND ${TESTCASE}
@@ -535,12 +411,12 @@ endforeach()
 if(SDL_INSTALL_TESTS)
     if(RISCOS)
         install(
-            FILES ${ALL_TESTS_AIF}
+            FILES ${SDL_TEST_EXECUTABLES_AIF}
             DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/SDL2
         )
     else()
         install(
-            TARGETS ${ALL_TESTS}
+            TARGETS ${SDL_TEST_EXECUTABLES}
             DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/SDL2
         )
     endif()