@@ -102,7 +102,7 @@ define_property(TARGET PROPERTY SDL_NONINTERACTIVE_ARGUMENTS BRIEF_DOCS "Argumen
102102define_property (TARGET PROPERTY SDL_NONINTERACTIVE_TIMEOUT BRIEF_DOCS "Timeout for noninteractive executable." FULL_DOCS "Timeout for noninteractive executable." )
103103
104104macro (add_sdl_test_executable TARGET )
105- cmake_parse_arguments (AST "BUILD_DEPENDENT;NONINTERACTIVE;NEEDS_RESOURCES;TESTUTILS;THREADS;NO_C90;MAIN_CALLBACKS;NOTRACKMEM" "" "DISABLE_THREADS_ARGS;NONINTERACTIVE_TIMEOUT;NONINTERACTIVE_ARGS;INSTALLED_ARGS;SOURCES" ${ARGN} )
105+ cmake_parse_arguments (AST "BUILD_DEPENDENT;NONINTERACTIVE;NEEDS_RESOURCES;TESTUTILS;THREADS;NO_C90;MAIN_CALLBACKS;NOTRACKMEM" "" "DEPENDS; DISABLE_THREADS_ARGS;NONINTERACTIVE_TIMEOUT;NONINTERACTIVE_ARGS;INSTALLED_ARGS;SOURCES" ${ARGN} )
106106 if (AST_UNPARSED_ARGUMENTS)
107107 message (FATAL_ERROR "Unknown argument(s): ${AST_UNPARSED_ARGUMENTS} " )
108108 endif ()
@@ -128,6 +128,7 @@ macro(add_sdl_test_executable TARGET)
128128 set_property (TARGET ${TARGET} PROPERTY C_STANDARD 90)
129129 set_property (TARGET ${TARGET} PROPERTY C_EXTENSIONS FALSE )
130130 endif ()
131+ add_dependencies (${TARGET} ${AST_DEPENDS} )
131132
132133 list (APPEND SDL_TEST_EXECUTABLES ${TARGET} )
133134 set_property (TARGET ${TARGET} PROPERTY SDL_NOTRACKMEM ${AST_NOTRACKMEM} )
@@ -208,6 +209,50 @@ if(HAVE_LIBUDEV_H)
208209 add_definitions (-DHAVE_LIBUDEV_H)
209210endif ()
210211
212+ function (files2headers OUTPUT )
213+ set (xxd "${SDL3_SOURCE_DIR} /cmake/xxd.py" )
214+ set (inputs ${ARGN} )
215+ set (outputs )
216+ foreach (input IN LISTS inputs)
217+ get_filename_component (file_we "${input} " NAME_WE )
218+ set (intermediate "${CMAKE_CURRENT_BINARY_DIR} /${file_we} .h" )
219+ set (output "${CMAKE_CURRENT_SOURCE_DIR} /${file_we} .h" )
220+ list (APPEND outputs "${output} " )
221+ if (TARGET Python3::Interpreter AND NOT CMAKE_CROSSCOMPILING )
222+ list (APPEND outputs "${intermediate} " )
223+ # Don't add the 'output' header to the output, to avoid marking them as GENERATED
224+ # (generated files are removed when running the CLEAN target)
225+ add_custom_command (OUTPUT "${intermediate} "
226+ COMMAND Python3::Interpreter "${xxd} " -i "${CMAKE_CURRENT_SOURCE_DIR} /${input} " "-o" "${intermediate} "
227+ COMMAND "${CMAKE_COMMAND} " -E copy_if_different "${intermediate} " "${output} "
228+ DEPENDS "${xxd} " "${bmp} "
229+ )
230+ endif ()
231+ endforeach ()
232+ set (${OUTPUT} "${outputs} " PARENT_SCOPE)
233+ add_custom_target (generate-${OUTPUT} DEPENDS ${ARGN} )
234+ endfunction ()
235+
236+ files2headers(gamepad_image_headers
237+ gamepad_axis_arrow.bmp
238+ gamepad_axis.bmp
239+ gamepad_back.bmp
240+ gamepad_battery.bmp
241+ gamepad_battery_wired.bmp
242+ gamepad_button_background.bmp
243+ gamepad_button.bmp
244+ gamepad_button_small.bmp
245+ gamepad_face_abxy.bmp
246+ gamepad_face_bayx.bmp
247+ gamepad_face_sony.bmp
248+ gamepad_front.bmp
249+ gamepad_touchpad.bmp
250+ gamepad_wired.bmp
251+ gamepad_wireless.bmp
252+ )
253+ files2headers(icon_bmp_header icon.bmp)
254+ files2headers(glass_bmp_header glass.bmp)
255+
211256set (FFmpeg_FIND_COMPONENTS AVCODEC AVFORMAT AVUTIL SWSCALE)
212257include ("${CMAKE_CURRENT_LIST_DIR} /../cmake/FindFFmpeg.cmake" )
213258if (FFmpeg_FOUND)
@@ -219,7 +264,7 @@ if(FFmpeg_FOUND)
219264 cmake_pop_check_state()
220265endif ()
221266if (FFmpeg_FOUND AND LIBAVUTIL_AVFRAME_HAS_CH_LAYOUT)
222- add_sdl_test_executable(testffmpeg NO_C90 SOURCES testffmpeg.c testffmpeg_vulkan.c ${icon_bmp_header} )
267+ add_sdl_test_executable(testffmpeg NO_C90 SOURCES testffmpeg.c testffmpeg_vulkan.c ${icon_bmp_header} DEPENDS generate-icon_bmp_header )
223268 if (LIBAVUTIL_AVFULKANFRAMESCONTEXT_HAS_FORMAT)
224269 target_compile_definitions (testffmpeg PRIVATE FFMPEG_VULKAN_SUPPORT)
225270 endif ()
@@ -290,54 +335,11 @@ elseif(HAVE_X11 OR HAVE_WAYLAND)
290335 endif ()
291336endif ()
292337
293- function (files2headers OUTPUT )
294- set (xxd "${SDL3_SOURCE_DIR} /cmake/xxd.py" )
295- set (inputs ${ARGN} )
296- set (outputs )
297- foreach (input IN LISTS inputs)
298- get_filename_component (file_we "${input} " NAME_WE )
299- set (intermediate "${CMAKE_CURRENT_BINARY_DIR} /${file_we} .h" )
300- set (output "${CMAKE_CURRENT_SOURCE_DIR} /${file_we} .h" )
301- list (APPEND outputs "${output} " )
302- if (TARGET Python3::Interpreter AND NOT CMAKE_CROSSCOMPILING )
303- list (APPEND outputs "${intermediate} " )
304- # Don't add the 'output' header to the output, to avoid marking them as GENERATED
305- # (generated files are removed when running the CLEAN target)
306- add_custom_command (OUTPUT "${intermediate} "
307- COMMAND Python3::Interpreter "${xxd} " -i "${CMAKE_CURRENT_SOURCE_DIR} /${input} " "-o" "${intermediate} "
308- COMMAND "${CMAKE_COMMAND} " -E copy_if_different "${intermediate} " "${output} "
309- DEPENDS "${xxd} " "${bmp} "
310- )
311- endif ()
312- endforeach ()
313- set (${OUTPUT} "${outputs} " PARENT_SCOPE)
314- endfunction ()
315-
316- files2headers(gamepad_image_headers
317- gamepad_axis_arrow.bmp
318- gamepad_axis.bmp
319- gamepad_back.bmp
320- gamepad_battery.bmp
321- gamepad_battery_wired.bmp
322- gamepad_button_background.bmp
323- gamepad_button.bmp
324- gamepad_button_small.bmp
325- gamepad_face_abxy.bmp
326- gamepad_face_bayx.bmp
327- gamepad_face_sony.bmp
328- gamepad_front.bmp
329- gamepad_touchpad.bmp
330- gamepad_wired.bmp
331- gamepad_wireless.bmp
332- )
333- files2headers(icon_bmp_header icon.bmp)
334- files2headers(glass_bmp_header glass.bmp)
335-
336338add_sdl_test_executable(testasyncio MAIN_CALLBACKS NEEDS_RESOURCES TESTUTILS SOURCES testasyncio.c)
337339add_sdl_test_executable(testaudio MAIN_CALLBACKS NEEDS_RESOURCES TESTUTILS SOURCES testaudio.c)
338340add_sdl_test_executable(testcolorspace SOURCES testcolorspace.c)
339341add_sdl_test_executable(testfile NONINTERACTIVE SOURCES testfile.c)
340- add_sdl_test_executable(testcontroller TESTUTILS SOURCES testcontroller.c gamepadutils.c ${gamepad_image_headers} )
342+ add_sdl_test_executable(testcontroller TESTUTILS SOURCES testcontroller.c gamepadutils.c ${gamepad_image_headers} DEPENDS generate-gamepad_image_headers )
341343add_sdl_test_executable(testgeometry TESTUTILS SOURCES testgeometry.c)
342344add_sdl_test_executable(testgl SOURCES testgl.c)
343345add_sdl_test_executable(testgles SOURCES testgles.c)
@@ -383,10 +385,10 @@ add_sdl_test_executable(testshader NEEDS_RESOURCES TESTUTILS SOURCES testshader.
383385if (EMSCRIPTEN)
384386 target_link_options (testshader PRIVATE "-sLEGACY_GL_EMULATION" )
385387endif ()
386- add_sdl_test_executable(testshape NEEDS_RESOURCES SOURCES testshape.c ${glass_bmp_header} )
388+ add_sdl_test_executable(testshape NEEDS_RESOURCES SOURCES testshape.c ${glass_bmp_header} DEPENDS generate-glass_bmp_header )
387389add_sdl_test_executable(testsprite MAIN_CALLBACKS NEEDS_RESOURCES TESTUTILS SOURCES testsprite.c)
388- add_sdl_test_executable(testspriteminimal SOURCES testspriteminimal.c ${icon_bmp_header} )
389- add_sdl_test_executable(testspritesurface SOURCES testspritesurface.c ${icon_bmp_header} )
390+ add_sdl_test_executable(testspriteminimal SOURCES testspriteminimal.c ${icon_bmp_header} DEPENDS generate-icon_bmp_header )
391+ add_sdl_test_executable(testspritesurface SOURCES testspritesurface.c ${icon_bmp_header} DEPENDS generate-icon_bmp_header )
390392add_sdl_test_executable(teststreaming NEEDS_RESOURCES TESTUTILS SOURCES teststreaming.c)
391393add_sdl_test_executable(testtimer NONINTERACTIVE NONINTERACTIVE_ARGS --no -interactive NONINTERACTIVE_TIMEOUT 60 SOURCES testtimer.c)
392394add_sdl_test_executable(testurl SOURCES testurl.c)
0 commit comments