sdl2-compat: test: Added the "test" directory from SDL2.

From 7ed73bdb4a3d903e53d6277815671889f166c4be Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Tue, 22 Nov 2022 15:43:55 -0500
Subject: [PATCH] test: Added the "test" directory from SDL2.

This will likely need trimming down (for example, there's no NaCl
support in SDL3, so why have a "nacl" test directory? Plus things like
SDL2 build system cruft that we can maybe dump, etc).
---
 test/CMakeLists.txt               |   443 +
 test/COPYING                      |     8 +
 test/Makefile.in                  |   453 +
 test/Makefile.os2                 |    18 +
 test/Makefile.w32                 |    21 +
 test/README                       |    50 +
 test/acinclude.m4                 |   337 +
 test/autogen.sh                   |     9 +
 test/axis.bmp                     |   Bin 0 -> 10138 bytes
 test/button.bmp                   |   Bin 0 -> 3746 bytes
 test/checkkeys.c                  |   304 +
 test/checkkeysthreads.c           |   286 +
 test/configure                    |  6106 +++
 test/configure.ac                 |   289 +
 test/controllermap.bmp            |   Bin 0 -> 163450 bytes
 test/controllermap.c              |   826 +
 test/controllermap_back.bmp       |   Bin 0 -> 487034 bytes
 test/emscripten/joystick-pre.js   |    25 +
 test/icon.bmp                     |   Bin 0 -> 578 bytes
 test/loopwave.c                   |   184 +
 test/loopwavequeue.c              |   154 +
 test/moose.dat                    |   Bin 0 -> 56320 bytes
 test/n3ds/logo48x48.png           |   Bin 0 -> 3069 bytes
 test/nacl/Makefile                |    63 +
 test/nacl/background.js           |    40 +
 test/nacl/common.js               |   474 +
 test/nacl/index.html              |    21 +
 test/nacl/manifest.json           |    22 +
 test/picture.xbm                  |    14 +
 test/relative_mode.markdown       |    58 +
 test/sample.bmp                   |   Bin 0 -> 69202 bytes
 test/sample.wav                   |   Bin 0 -> 121946 bytes
 test/shapes/p01_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p01_shape32alpha.bmp  |   Bin 0 -> 1638538 bytes
 test/shapes/p01_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p02_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p02_shape32alpha.bmp  |   Bin 0 -> 1638538 bytes
 test/shapes/p02_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p03_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p03_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p04_shape1.bmp        |   Bin 0 -> 51346 bytes
 test/shapes/p04_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p04_shape32alpha.bmp  |   Bin 0 -> 1638538 bytes
 test/shapes/p04_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p05_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p06_shape1alpha.bmp   |   Bin 0 -> 1638538 bytes
 test/shapes/p06_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p06_shape32alpha.bmp  |   Bin 0 -> 1638538 bytes
 test/shapes/p06_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p07_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p07_shape32alpha.bmp  |   Bin 0 -> 1638538 bytes
 test/shapes/p07_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p08_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p08_shape32alpha.bmp  |   Bin 0 -> 1638538 bytes
 test/shapes/p08_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p09_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p09_shape32alpha.bmp  |   Bin 0 -> 1638538 bytes
 test/shapes/p09_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p10_shape1.bmp        |   Bin 0 -> 51346 bytes
 test/shapes/p10_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p10_shape32alpha.bmp  |   Bin 0 -> 1638538 bytes
 test/shapes/p10_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p11_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p11_shape32alpha.bmp  |   Bin 0 -> 1638538 bytes
 test/shapes/p11_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p12_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p12_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p13_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p13_shape32alpha.bmp  |   Bin 0 -> 1638538 bytes
 test/shapes/p13_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p14_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p14_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p15_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p15_shape32alpha.bmp  |   Bin 0 -> 1638538 bytes
 test/shapes/p15_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/p16_shape1.bmp        |   Bin 0 -> 51346 bytes
 test/shapes/p16_shape24.bmp       |   Bin 0 -> 1228938 bytes
 test/shapes/p16_shape8.bmp        |   Bin 0 -> 410678 bytes
 test/shapes/trollface_24.bmp      |   Bin 0 -> 196662 bytes
 test/shapes/trollface_32alpha.bmp |   Bin 0 -> 262198 bytes
 test/template.test.in             |     3 +
 test/testatomic.c                 |   724 +
 test/testaudiocapture.c           |   165 +
 test/testaudiohotplug.c           |   207 +
 test/testaudioinfo.c              |   104 +
 test/testautomation.c             |   124 +
 test/testautomation_audio.c       |  1040 +
 test/testautomation_clipboard.c   |   336 +
 test/testautomation_events.c      |   201 +
 test/testautomation_guid.c        |   150 +
 test/testautomation_hints.c       |   269 +
 test/testautomation_joystick.c    |    90 +
 test/testautomation_keyboard.c    |   711 +
 test/testautomation_main.c        |   190 +
 test/testautomation_math.c        |  3352 ++
 test/testautomation_mouse.c       |   607 +
 test/testautomation_pixels.c      |   533 +
 test/testautomation_platform.c    |   607 +
 test/testautomation_rect.c        |  1792 +
 test/testautomation_render.c      |  1104 +
 test/testautomation_rwops.c       |   757 +
 test/testautomation_sdltest.c     |  1318 +
 test/testautomation_stdlib.c      |   601 +
 test/testautomation_suites.h      |    60 +
 test/testautomation_surface.c     |   826 +
 test/testautomation_syswm.c       |    61 +
 test/testautomation_timer.c       |   201 +
 test/testautomation_video.c       |  2073 +
 test/testbounds.c                 |    40 +
 test/testcustomcursor.c           |   299 +
 test/testdisplayinfo.c            |    96 +
 test/testdraw2.c                  |   316 +
 test/testdrawchessboard.c         |   147 +
 test/testdropfile.c               |    99 +
 test/testerror.c                  |    82 +
 test/testevdev.c                  |  1041 +
 test/testfile.c                   |   283 +
 test/testfilesystem.c             |    60 +
 test/testgamecontroller.c         |   976 +
 test/testgeometry.c               |   269 +
 test/testgesture.c                |   300 +
 test/testgl2.c                    |   440 +
 test/testgles.c                   |   355 +
 test/testgles2.c                  |   832 +
 test/testgles2_sdf.c              |   817 +
 test/testgles2_sdf_img_normal.bmp |   Bin 0 -> 68122 bytes
 test/testgles2_sdf_img_sdf.bmp    |   Bin 0 -> 72202 bytes
 test/testhaptic.c                 |   365 +
 test/testhittesting.c             |   134 +
 test/testhotplug.c                |   162 +
 test/testiconv.c                  |    97 +
 test/testime.c                    |   810 +
 test/testintersections.c          |   363 +
 test/testjoystick.c               |   340 +
 test/testkeys.c                   |    40 +
 test/testloadso.c                 |    82 +
 test/testlocale.c                 |    67 +
 test/testlock.c                   |   128 +
 test/testmessage.c                |   217 +
 test/testmouse.c                  |   272 +
 test/testmultiaudio.c             |   201 +
 test/testnative.c                 |   210 +
 test/testnative.h                 |    51 +
 test/testnativecocoa.m            |    51 +
 test/testnativeos2.c              |    57 +
 test/testnativew32.c              |    86 +
 test/testnativex11.c              |    53 +
 test/testoffscreen.c              |   174 +
 test/testoverlay2.c               |   417 +
 test/testplatform.c               |   469 +
 test/testpower.c                  |    80 +
 test/testqsort.c                  |   106 +
 test/testrelative.c               |   126 +
 test/testrendercopyex.c           |   175 +
 test/testrendertarget.c           |   285 +
 test/testresample.c               |   120 +
 test/testrumble.c                 |   149 +
 test/testscale.c                  |   167 +
 test/testsem.c                    |   280 +
 test/testsensor.c                 |   121 +
 test/testshader.c                 |   531 +
 test/testshape.c                  |   200 +
 test/testsprite2.c                |   590 +
 test/testspriteminimal.c          |   149 +
 test/teststreaming.c              |   198 +
 test/testsurround.c               |   205 +
 test/testthread.c                 |   136 +
 test/testtimer.c                  |   146 +
 test/testurl.c                    |    44 +
 test/testutils.c                  |   151 +
 test/testutils.h                  |    17 +
 test/testver.c                    |    47 +
 test/testviewport.c               |   232 +
 test/testvulkan.c                 |  1152 +
 test/testwm2.c                    |   301 +
 test/testyuv.bmp                  |   Bin 0 -> 739398 bytes
 test/testyuv.c                    |   455 +
 test/testyuv_cvt.c                |   300 +
 test/testyuv_cvt.h                |    16 +
 test/torturethread.c              |   113 +
 test/unifont-13.0.06-license.txt  |    90 +
 test/unifont-13.0.06.hex          | 57086 ++++++++++++++++++++++++++++
 test/utf8.txt                     |   287 +
 test/watcom.mif                   |   122 +
 184 files changed, 103886 insertions(+)
 create mode 100644 test/CMakeLists.txt
 create mode 100644 test/COPYING
 create mode 100644 test/Makefile.in
 create mode 100644 test/Makefile.os2
 create mode 100644 test/Makefile.w32
 create mode 100644 test/README
 create mode 100644 test/acinclude.m4
 create mode 100755 test/autogen.sh
 create mode 100644 test/axis.bmp
 create mode 100644 test/button.bmp
 create mode 100644 test/checkkeys.c
 create mode 100644 test/checkkeysthreads.c
 create mode 100755 test/configure
 create mode 100644 test/configure.ac
 create mode 100644 test/controllermap.bmp
 create mode 100644 test/controllermap.c
 create mode 100644 test/controllermap_back.bmp
 create mode 100644 test/emscripten/joystick-pre.js
 create mode 100644 test/icon.bmp
 create mode 100644 test/loopwave.c
 create mode 100644 test/loopwavequeue.c
 create mode 100644 test/moose.dat
 create mode 100644 test/n3ds/logo48x48.png
 create mode 100644 test/nacl/Makefile
 create mode 100644 test/nacl/background.js
 create mode 100644 test/nacl/common.js
 create mode 100644 test/nacl/index.html
 create mode 100644 test/nacl/manifest.json
 create mode 100644 test/picture.xbm
 create mode 100644 test/relative_mode.markdown
 create mode 100644 test/sample.bmp
 create mode 100644 test/sample.wav
 create mode 100644 test/shapes/p01_shape24.bmp
 create mode 100644 test/shapes/p01_shape32alpha.bmp
 create mode 100644 test/shapes/p01_shape8.bmp
 create mode 100644 test/shapes/p02_shape24.bmp
 create mode 100644 test/shapes/p02_shape32alpha.bmp
 create mode 100644 test/shapes/p02_shape8.bmp
 create mode 100644 test/shapes/p03_shape24.bmp
 create mode 100644 test/shapes/p03_shape8.bmp
 create mode 100644 test/shapes/p04_shape1.bmp
 create mode 100644 test/shapes/p04_shape24.bmp
 create mode 100644 test/shapes/p04_shape32alpha.bmp
 create mode 100644 test/shapes/p04_shape8.bmp
 create mode 100644 test/shapes/p05_shape8.bmp
 create mode 100644 test/shapes/p06_shape1alpha.bmp
 create mode 100644 test/shapes/p06_shape24.bmp
 create mode 100644 test/shapes/p06_shape32alpha.bmp
 create mode 100644 test/shapes/p06_shape8.bmp
 create mode 100644 test/shapes/p07_shape24.bmp
 create mode 100644 test/shapes/p07_shape32alpha.bmp
 create mode 100644 test/shapes/p07_shape8.bmp
 create mode 100644 test/shapes/p08_shape24.bmp
 create mode 100644 test/shapes/p08_shape32alpha.bmp
 create mode 100644 test/shapes/p08_shape8.bmp
 create mode 100644 test/shapes/p09_shape24.bmp
 create mode 100644 test/shapes/p09_shape32alpha.bmp
 create mode 100644 test/shapes/p09_shape8.bmp
 create mode 100644 test/shapes/p10_shape1.bmp
 create mode 100644 test/shapes/p10_shape24.bmp
 create mode 100644 test/shapes/p10_shape32alpha.bmp
 create mode 100644 test/shapes/p10_shape8.bmp
 create mode 100644 test/shapes/p11_shape24.bmp
 create mode 100644 test/shapes/p11_shape32alpha.bmp
 create mode 100644 test/shapes/p11_shape8.bmp
 create mode 100644 test/shapes/p12_shape24.bmp
 create mode 100644 test/shapes/p12_shape8.bmp
 create mode 100644 test/shapes/p13_shape24.bmp
 create mode 100644 test/shapes/p13_shape32alpha.bmp
 create mode 100644 test/shapes/p13_shape8.bmp
 create mode 100644 test/shapes/p14_shape24.bmp
 create mode 100644 test/shapes/p14_shape8.bmp
 create mode 100644 test/shapes/p15_shape24.bmp
 create mode 100644 test/shapes/p15_shape32alpha.bmp
 create mode 100644 test/shapes/p15_shape8.bmp
 create mode 100644 test/shapes/p16_shape1.bmp
 create mode 100644 test/shapes/p16_shape24.bmp
 create mode 100644 test/shapes/p16_shape8.bmp
 create mode 100644 test/shapes/trollface_24.bmp
 create mode 100644 test/shapes/trollface_32alpha.bmp
 create mode 100644 test/template.test.in
 create mode 100644 test/testatomic.c
 create mode 100644 test/testaudiocapture.c
 create mode 100644 test/testaudiohotplug.c
 create mode 100644 test/testaudioinfo.c
 create mode 100644 test/testautomation.c
 create mode 100644 test/testautomation_audio.c
 create mode 100644 test/testautomation_clipboard.c
 create mode 100644 test/testautomation_events.c
 create mode 100644 test/testautomation_guid.c
 create mode 100644 test/testautomation_hints.c
 create mode 100644 test/testautomation_joystick.c
 create mode 100644 test/testautomation_keyboard.c
 create mode 100644 test/testautomation_main.c
 create mode 100644 test/testautomation_math.c
 create mode 100644 test/testautomation_mouse.c
 create mode 100644 test/testautomation_pixels.c
 create mode 100644 test/testautomation_platform.c
 create mode 100644 test/testautomation_rect.c
 create mode 100644 test/testautomation_render.c
 create mode 100644 test/testautomation_rwops.c
 create mode 100644 test/testautomation_sdltest.c
 create mode 100644 test/testautomation_stdlib.c
 create mode 100644 test/testautomation_suites.h
 create mode 100644 test/testautomation_surface.c
 create mode 100644 test/testautomation_syswm.c
 create mode 100644 test/testautomation_timer.c
 create mode 100644 test/testautomation_video.c
 create mode 100644 test/testbounds.c
 create mode 100644 test/testcustomcursor.c
 create mode 100644 test/testdisplayinfo.c
 create mode 100644 test/testdraw2.c
 create mode 100644 test/testdrawchessboard.c
 create mode 100644 test/testdropfile.c
 create mode 100644 test/testerror.c
 create mode 100644 test/testevdev.c
 create mode 100644 test/testfile.c
 create mode 100644 test/testfilesystem.c
 create mode 100644 test/testgamecontroller.c
 create mode 100644 test/testgeometry.c
 create mode 100644 test/testgesture.c
 create mode 100644 test/testgl2.c
 create mode 100644 test/testgles.c
 create mode 100644 test/testgles2.c
 create mode 100644 test/testgles2_sdf.c
 create mode 100644 test/testgles2_sdf_img_normal.bmp
 create mode 100644 test/testgles2_sdf_img_sdf.bmp
 create mode 100644 test/testhaptic.c
 create mode 100644 test/testhittesting.c
 create mode 100644 test/testhotplug.c
 create mode 100644 test/testiconv.c
 create mode 100644 test/testime.c
 create mode 100644 test/testintersections.c
 create mode 100644 test/testjoystick.c
 create mode 100644 test/testkeys.c
 create mode 100644 test/testloadso.c
 create mode 100644 test/testlocale.c
 create mode 100644 test/testlock.c
 create mode 100644 test/testmessage.c
 create mode 100644 test/testmouse.c
 create mode 100644 test/testmultiaudio.c
 create mode 100644 test/testnative.c
 create mode 100644 test/testnative.h
 create mode 100644 test/testnativecocoa.m
 create mode 100644 test/testnativeos2.c
 create mode 100644 test/testnativew32.c
 create mode 100644 test/testnativex11.c
 create mode 100644 test/testoffscreen.c
 create mode 100644 test/testoverlay2.c
 create mode 100644 test/testplatform.c
 create mode 100644 test/testpower.c
 create mode 100644 test/testqsort.c
 create mode 100644 test/testrelative.c
 create mode 100644 test/testrendercopyex.c
 create mode 100644 test/testrendertarget.c
 create mode 100644 test/testresample.c
 create mode 100644 test/testrumble.c
 create mode 100644 test/testscale.c
 create mode 100644 test/testsem.c
 create mode 100644 test/testsensor.c
 create mode 100644 test/testshader.c
 create mode 100644 test/testshape.c
 create mode 100644 test/testsprite2.c
 create mode 100644 test/testspriteminimal.c
 create mode 100644 test/teststreaming.c
 create mode 100644 test/testsurround.c
 create mode 100644 test/testthread.c
 create mode 100644 test/testtimer.c
 create mode 100644 test/testurl.c
 create mode 100644 test/testutils.c
 create mode 100644 test/testutils.h
 create mode 100644 test/testver.c
 create mode 100644 test/testviewport.c
 create mode 100644 test/testvulkan.c
 create mode 100644 test/testwm2.c
 create mode 100644 test/testyuv.bmp
 create mode 100644 test/testyuv.c
 create mode 100644 test/testyuv_cvt.c
 create mode 100644 test/testyuv_cvt.h
 create mode 100644 test/torturethread.c
 create mode 100644 test/unifont-13.0.06-license.txt
 create mode 100644 test/unifont-13.0.06.hex
 create mode 100644 test/utf8.txt
 create mode 100644 test/watcom.mif

diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644
index 0000000..676a8e7
--- /dev/null
+++ b/test/CMakeLists.txt
@@ -0,0 +1,443 @@
+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()
+
+enable_testing()
+
+if(SDL_INSTALL_TESTS)
+    include(GNUInstallDirs)
+endif()
+
+if(N3DS)
+    link_libraries(SDL2::SDL2main)
+endif()
+
+if(PSP)
+    link_libraries(
+        SDL2::SDL2main
+        SDL2::SDL2test
+        SDL2::SDL2-static
+        GL
+        pspvram
+        pspvfpu
+        pspdisplay
+        pspgu
+        pspge
+        pspaudio
+        pspctrl
+        psphprm
+        psppower
+    )
+elseif(PS2)
+link_libraries(
+        SDL2main
+        SDL2_test
+        SDL2-static
+        patches
+        gskit
+        dmakit
+        ps2_drivers
+)
+else()
+    link_libraries(SDL2::SDL2test SDL2::SDL2-static)
+endif()
+
+if(WINDOWS)
+    # mingw32 must come before SDL2main to link successfully
+    if(MINGW OR CYGWIN)
+        link_libraries(mingw32)
+    endif()
+
+    # CET support was added in VS 16.7
+    if(MSVC_VERSION GREATER 1926 AND CMAKE_GENERATOR_PLATFORM MATCHES "Win32|x64")
+        link_libraries(-CETCOMPAT)
+    endif()
+
+    # FIXME: Parent directory CMakeLists.txt only sets these for mingw/cygwin,
+    # but we need them for VS as well.
+    link_libraries(SDL2main)
+    add_definitions(-Dmain=SDL_main)
+endif()
+
+# CMake incorrectly detects opengl32.lib being present on MSVC ARM64
+if(NOT MSVC OR NOT CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64")
+    # Prefer GLVND, if present
+    set(OpenGL_GL_PREFERENCE GLVND)
+    find_package(OpenGL)
+endif()
+
+if (OPENGL_FOUND)
+add_definitions(-DHAVE_OPENGL)
+endif()
+
+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_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_sdl_test_executable(testevdev NONINTERACTIVE testevdev.c)
+endif()
+
+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_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)
+    cmake_pop_check_state()
+    if(HAVE_WNO_ERROR_DEPRECATED_DECLARATIONS)
+        set_property(SOURCE "testnativecocoa.m" APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-error=deprecated-declarations")
+    endif()
+elseif(WINDOWS)
+    add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativew32.c testutils.c)
+elseif(HAVE_X11)
+    add_sdl_test_executable(testnative NEEDS_RESOURCES testnative.c testnativex11.c testutils.c)
+    target_link_libraries(testnative X11)
+endif()
+
+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)
+
+check_c_compiler_flag(-Wformat-overflow HAVE_WFORMAT_OVERFLOW)
+if(HAVE_WFORMAT_OVERFLOW)
+    target_compile_definitions(testautomation PRIVATE HAVE_WFORMAT_OVERFLOW)
+endif()
+
+check_c_compiler_flag(-Wformat HAVE_WFORMAT)
+if(HAVE_WFORMAT)
+    target_compile_definitions(testautomation PRIVATE HAVE_WFORMAT)
+endif()
+
+check_c_compiler_flag(-Wformat-extra-args HAVE_WFORMAT_EXTRA_ARGS)
+if(HAVE_WFORMAT_EXTRA_ARGS)
+    target_compile_definitions(testautomation PRIVATE HAVE_WFORMAT_EXTRA_ARGS)
+endif()
+
+cmake_pop_check_state()
+
+if(SDL_DUMMYAUDIO)
+  list(APPEND SDL_TESTS_NONINTERACTIVE
+    testaudioinfo
+    testsurround
+  )
+endif()
+
+if(SDL_DUMMYVIDEO)
+  list(APPEND SDL_TESTS_NONINTERACTIVE
+    testkeys
+    testbounds
+    testdisplayinfo
+  )
+endif()
+
+if(OPENGL_FOUND)
+    if(TARGET OpenGL::GL)
+        target_link_libraries(testshader OpenGL::GL)
+        target_link_libraries(testgl2 OpenGL::GL)
+    else()
+        if(EMSCRIPTEN AND OPENGL_gl_LIBRARY STREQUAL "nul")
+            set(OPENGL_gl_LIBRARY GL)
+        endif()
+        # emscripten's FindOpenGL.cmake does not create OpenGL::GL
+        target_link_libraries(testshader ${OPENGL_gl_LIBRARY})
+        target_link_libraries(testgl2 ${OPENGL_gl_LIBRARY})
+    endif()
+endif()
+if(EMSCRIPTEN)
+    target_link_libraries(testshader -sLEGACY_GL_EMULATION)
+endif()
+
+file(GLOB RESOURCE_FILES *.bmp *.wav *.hex moose.dat utf8.txt)
+file(COPY ${RESOURCE_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+
+if(PSP)
+    # Build EBOOT files if building for PSP
+    set(BUILD_EBOOT
+        ${SDL_TESTS_NEEDS_ESOURCES}
+        testatomic
+        testaudiocapture
+        testaudioinfo
+        testbounds
+        testdisplayinfo
+        testdraw2
+        testdrawchessboard
+        testerror
+        testfile
+        testfilesystem
+        testgeometry
+        testgl2
+        testhittesting
+        testiconv
+        testintersections
+        testjoystick
+        testlock
+        testmessage
+        testoverlay2
+        testplatform
+        testpower
+        testqsort
+        testsem
+        teststreaming
+        testsurround
+        testthread
+        testtimer
+        testver
+        testviewport
+        testwm2
+        torturethread
+    )
+    foreach(APP IN LISTS BUILD_EBOOT)
+        create_pbp_file(
+            TARGET          ${APP}
+            TITLE           SDL-${APP}
+            ICON_PATH       NULL
+            BACKGROUND_PATH NULL
+            PREVIEW_PATH    NULL
+        )
+        add_custom_command(
+            TARGET ${APP} POST_BUILD
+            COMMAND ${CMAKE_COMMAND} -E make_directory
+            $<TARGET_FILE_DIR:${ARG_TARGET}>/sdl-${APP}
+        )
+        add_custom_command(
+            TARGET ${APP} POST_BUILD
+            COMMAND ${CMAKE_COMMAND} -E rename
+            $<TARGET_FILE_DIR:${ARG_TARGET}>/EBOOT.PBP
+            $<TARGET_FILE_DIR:${ARG_TARGET}>/sdl-${APP}/EBOOT.PBP
+        )
+        if(${BUILD_PRX})
+            add_custom_command(
+                TARGET ${APP} POST_BUILD
+                COMMAND ${CMAKE_COMMAND} -E copy
+                $<TARGET_FILE_DIR:${ARG_TARGET}>/${APP}
+                $<TARGET_FILE_DIR:${ARG_TARGET}>/sdl-${APP}/${APP}
+            )
+            add_custom_command(
+                TARGET ${APP} POST_BUILD
+                COMMAND ${CMAKE_COMMAND} -E rename
+                $<TARGET_FILE_DIR:${ARG_TARGET}>/${APP}.prx
+                $<TARGET_FILE_DIR:${ARG_TARGET}>/sdl-${APP}/${APP}.prx
+            )
+        endif()
+        add_custom_command(
+            TARGET ${APP} POST_BUILD
+            COMMAND ${CMAKE_COMMAND} -E remove
+            $<TARGET_FILE_DIR:${ARG_TARGET}>/PARAM.SFO
+        )
+    endforeach()
+endif()
+
+if(N3DS)
+    set(ROMFS_DIR "${CMAKE_CURRENT_BINARY_DIR}/romfs")
+    file(COPY ${RESOURCE_FILES} DESTINATION "${ROMFS_DIR}")
+
+    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}" 
+            NAME "SDL-${APP}"
+            DESCRIPTION "SDL2 Test suite"
+            AUTHOR "SDL2 Contributors"
+            ICON "${CMAKE_CURRENT_SOURCE_DIR}/n3ds/logo48x48.png"
+        )
+        ctr_create_3dsx(
+            ${APP}
+            ROMFS "${ROMFS_DIR}"
+            SMDH "${SMDH_FILE}"
+        )
+    endforeach()
+endif()
+
+if(RISCOS)
+    set(SDL_TEST_EXECUTABLES_AIF)
+    foreach(APP IN LISTS SDL_TEST_EXECUTABLES)
+        target_link_options(${APP} PRIVATE -static)
+        add_custom_command(
+            OUTPUT ${APP},ff8
+            COMMAND elf2aif ${APP} ${APP},ff8
+            DEPENDS ${APP}
+        )
+        add_custom_target(${APP}-aif ALL DEPENDS ${APP},ff8)
+        list(APPEND SDL_TEST_EXECUTABLES_AIF ${CMAKE_CURRENT_BINARY_DIR}/${APP},ff8)
+    endforeach()
+endif()
+
+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})
+        else()
+            add_custom_command(TARGET ${APP} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${RESOURCE_FILE} $<TARGET_FILE_DIR:${APP}>)
+        endif()
+    endforeach(RESOURCE_FILE)
+    if(APPLE)
+        # Make sure resource files get installed into macOS/iOS .app bundles.  
+        target_sources(${APP} PRIVATE "${RESOURCE_FILES}")
+        set_target_properties(${APP} PROPERTIES RESOURCE "${RESOURCE_FILES}")
+    endif()
+endforeach()
+
+# Set Apple App ID / Bundle ID.  This is needed to launch apps on some Apple
+# platforms (iOS, for example).
+if(APPLE)
+    if(${CMAKE_VERSION} VERSION_LESS "3.7.0")
+        # CMake's 'BUILDSYSTEM_TARGETS' property is only available in
+        # CMake 3.7 and above.
+        message(WARNING "Unable to set Bundle ID for Apple .app builds due to old CMake (pre 3.7).")
+    else()
+        get_property(TARGETS DIRECTORY ${CMAKE_CURRENT_LIST_DIR} PROPERTY BUILDSYSTEM_TARGETS)
+        foreach(CURRENT_TARGET IN LISTS TARGETS)
+            get_property(TARGET_TYPE TARGET ${CURRENT_TARGET} PROPERTY TYPE)
+            if(TARGET_TYPE STREQUAL "EXECUTABLE")
+                set_target_properties("${CURRENT_TARGET}

(Patch may be truncated, please check the link at the top of this post.)