SDL_mixer: cmake: build examples as shared library on Android

From d2ddf28d9ffd16ae15741edcb7b4c26e5ec9a544 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sat, 12 Apr 2025 18:28:24 +0200
Subject: [PATCH] cmake: build examples as shared library on Android

These examples won't be useful without accompanying Java classes
or Android manifest, but they will at least successfully link.
---
 CMakeLists.txt | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9f6abff9..5220b3c5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1212,27 +1212,33 @@ if(SDLMIXER_SAMPLES)
     check_include_file("signal.h" HAVE_SIGNAL_H)
     check_symbol_exists("setbuf" "stdio.h" HAVE_SETBUF)
 
-    add_executable(playmus examples/playmus.c)
-    add_executable(playwave examples/playwave.c)
-
-    foreach(prog playmus playwave)
-        sdl_add_warning_options(${prog} WARNING_AS_ERROR ${SDLMIXER_WERROR})
-        target_link_libraries(${prog} PRIVATE SDL3::SDL3_test)
-        target_link_libraries(${prog} PRIVATE SDL3_mixer::${sdl3_mixer_target_name})
-        target_link_libraries(${prog} PRIVATE ${sdl3_target_name})
+    function(add_sdl_mixer_example_executable TARGET)
+        if(ANDROID)
+            add_library(${TARGET} SHARED ${ARGN})
+        else()
+            add_executable(${TARGET} ${ARGN})
+        endif()
+        sdl_add_warning_options(${TARGET} WARNING_AS_ERROR ${SDLMIXER_WERROR})
+        sdl_target_link_options_no_undefined(${TARGET})
+        target_link_libraries(${TARGET} PRIVATE SDL3::SDL3_test)
+        target_link_libraries(${TARGET} PRIVATE SDL3_mixer::${sdl3_mixer_target_name})
+        target_link_libraries(${TARGET} PRIVATE ${sdl3_target_name})
         if(HAVE_SIGNAL_H)
-            target_compile_definitions(${prog} PRIVATE HAVE_SIGNAL_H)
+          target_compile_definitions(${TARGET} PRIVATE HAVE_SIGNAL_H)
         endif()
         if(HAVE_SETBUF)
-            target_compile_definitions(${prog} PRIVATE HAVE_SETBUF)
+          target_compile_definitions(${TARGET} PRIVATE HAVE_SETBUF)
         endif()
 
         if(SDLMIXER_SAMPLES_INSTALL)
-            install(TARGETS ${prog}
+            install(TARGETS ${TARGET}
                 RUNTIME DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/SDL3_mixer"
             )
         endif()
-    endforeach()
+    endfunction()
+
+    add_sdl_mixer_example_executable(playmus examples/playmus.c)
+    add_sdl_mixer_example_executable(playwave examples/playwave.c)
 endif()
 
 set(available_deps)