From 44315d464cce5e5630b21eeafdbbbe272ccccafe Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Wed, 4 Feb 2026 21:24:18 +0100
Subject: [PATCH] cmake: build and install tests+examples by default when
SDL_mixer is the root project
The PR also makes sure all CMake variables have a SDLMIXER_ prefix
---
CMakeLists.txt | 7 +-
examples/CMakeLists.txt | 173 +++-------------------------------------
2 files changed, 16 insertions(+), 164 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 672b1618..d0a30a70 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -115,9 +115,10 @@ if(SDLMIXER_STRICT)
set(fatal_error "FATAL_ERROR")
endif()
-option(SDLMIXER_TESTS "Build unit tests?" OFF)
-option(SDLMIXER_TESTS_INSTALL "Install unit tests?" OFF)
-option(SDLMIXER_EXAMPLES "Build the examples directory" OFF)
+option(SDLMIXER_TESTS "Build unit tests?" ${SDLMIXER_ROOTPROJECT})
+cmake_dependent_option(SDLMIXER_TESTS_INSTALL "Install unit tests?" ${SDLMIXER_ROOTPROJECT} "SDLMIXER_INSTALL;SDLMIXER_TESTS" OFF)
+option(SDLMIXER_EXAMPLES "Build the examples directory" ${SDLMIXER_ROOTPROJECT})
+cmake_dependent_option(SDLMIXER_EXAMPLES_INSTALL "Install SDL3_mixer examples" ${SDLMIXER_ROOTPROJECT} "SDLMIXER_INSTALL;SDLMIXER_EXAMPLES" OFF)
# These are implemented in SDL_mixer itself, not using a third-party library.
option(SDLMIXER_AIFF "Enable AIFF audio" ON)
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 2c749b58..9f877db6 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -7,19 +7,6 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../cmake")
include(CheckIncludeFile)
include(CheckStructHasMember)
include(CMakePushCheckState)
-# !!! FIXME: @madebr, do we need this, or was this only needed in SDL itself?
-#include(sdlcompilers)
-
-set(SDLMIXER_EXAMPLES_LINK_SHARED On) # !!! FIXME: save me, @madebr, this needs plumbing through the main cmake file.
-
-if(SDLMIXER_EXAMPLES_LINK_SHARED)
- set(sdl_name_component SDL3-shared)
- set(sdlmixer_name_component SDL3_mixer-shared)
-else()
- set(sdl_name_component SDL3-static)
- set(sdlmixer_name_component SDL3_mixer-static)
-endif()
-set(HAVE_EXAMPLES_LINK_SHARED "${SDLMIXER_EXAMPLES_LINK_SHARED}" PARENT_SCOPE)
set(SDLMIXER_EXAMPLE_EXECUTABLES)
@@ -54,6 +41,8 @@ add_custom_target(copy-sdlmixer-example-resources
DEPENDS "${RESOURCE_FILES_BINDIR}"
)
+set(SDLMIXER_EXAMPLE_EXECUTABLES)
+
macro(add_sdlmixer_example_executable TARGET)
cmake_parse_arguments(AST "BUILD_DEPENDENT" "" "SOURCES;DATAFILES" ${ARGN})
if(AST_UNPARSED_ARGUMENTS)
@@ -68,9 +57,6 @@ macro(add_sdlmixer_example_executable TARGET)
add_executable(${TARGET} ${AST_SOURCES} ${AST_DATAFILES})
endif()
- # !!! FIXME: @madebr, do we need this, or was this only needed in SDL itself?
- #SDL_AddCommonCompilerFlags(${TARGET})
-
target_compile_definitions(${TARGET}
PRIVATE
$<TARGET_PROPERTY:${sdl3_mixer_target_name},COMPILE_DEFINITIONS>
@@ -79,7 +65,7 @@ macro(add_sdlmixer_example_executable TARGET)
target_link_libraries(${TARGET} PRIVATE SDL3_mixer::SDL3_mixer SDL3::SDL3)
- list(APPEND SDL_EXAMPLE_EXECUTABLES ${TARGET})
+ list(APPEND SDLMIXER_EXAMPLE_EXECUTABLES ${TARGET})
if(AST_DATAFILES)
if(PSP OR PS2)
add_custom_command(TARGET ${TARGET} POST_BUILD
@@ -160,7 +146,7 @@ add_sdlmixer_example_executable(basics-seeking SOURCES basics/06-seeking/seeking
if(PSP)
# Build EBOOT files if building for PSP
- foreach(APP ${SDL_EXAMPLE_EXECUTABLES})
+ foreach(APP ${SDLMIXER_EXAMPLE_EXECUTABLES})
create_pbp_file(
TARGET ${APP}
TITLE SDL-${APP}
@@ -174,7 +160,7 @@ endif()
if(RISCOS)
set(SDL_EXAMPLE_EXECUTABLES_AIF)
- foreach(APP ${SDL_EXAMPLE_EXECUTABLES})
+ foreach(APP ${SDLMIXER_EXAMPLE_EXECUTABLES})
set_property(TARGET ${APP} APPEND_STRING PROPERTY LINK_FLAGS " -static")
add_custom_command(
OUTPUT ${APP},ff8
@@ -186,160 +172,25 @@ if(RISCOS)
endforeach()
endif()
-if(SDL_INSTALL_EXAMPLES)
+if(SDLMIXER_EXAMPLES_INSTALL)
if(RISCOS)
install(
FILES ${SDL_EXAMPLE_EXECUTABLES_AIF}
- DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3
+ DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3_mixer
)
else()
install(
- TARGETS ${SDL_EXAMPLE_EXECUTABLES}
- DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3
+ TARGETS ${SDLMIXER_EXAMPLE_EXECUTABLES}
+ DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3_mixer
)
endif()
if(MSVC)
- foreach(example IN LISTS SDL_EXAMPLE_EXECUTABLES)
- SDL_install_pdb(${example} "${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3")
+ foreach(example IN LISTS SDLMIXER_EXAMPLE_EXECUTABLES)
+ SDL_install_pdb(${example} "${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3_mixer")
endforeach()
endif()
install(
FILES ${RESOURCE_FILES}
- DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3
+ DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-examples/SDL3_mixer
)
endif()
-
-if(ANDROID AND TARGET SDL3::Jar)
- list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../cmake/android")
- find_package(SdlAndroid MODULE)
- if(SdlAndroid_FOUND)
- set(apks "")
- set(packages "")
-
- include(SdlAndroidFunctions)
- sdl_create_android_debug_keystore(SDL_example-debug-keystore)
- sdl_android_compile_resources(SDL_example-resources RESFOLDER ${CMAKE_CURRENT_SOURCE_DIR}/../test/android/res)
- add_custom_target(sdl-example-apks)
- foreach(EXAMPLE ${SDL_EXAMPLE_EXECUTABLES})
- set(ANDROID_MANIFEST_APP_NAME "${EXAMPLE}")
- set(ANDROID_MANIFEST_LABEL "${EXAMPLE}")
- set(ANDROID_MANIFEST_LIB_NAME "$<TARGET_FILE_BASE_NAME:${EXAMPLE}>")
- set(ANDROID_MANIFEST_PACKAGE "org.libsdl.sdl.example.${EXAMPLE}")
- set(generated_manifest_path "${CMAKE_CURRENT_BINARY_DIR}/android/${EXAMPLE}-src/AndroidManifest.xml")
- string(REPLACE "." "/" JAVA_PACKAGE_DIR "${ANDROID_MANIFEST_PACKAGE}")
- set(GENERATED_SRC_FOLDER "${CMAKE_CURRENT_BINARY_DIR}/android/${EXAMPLE}-src")
- set(GENERATED_RES_FOLDER "${GENERATED_SRC_FOLDER}/res")
- set(JAVA_PACKAGE_DIR "${GENERATED_SRC_FOLDER}/${JAVA_PACKAGE_DIR}")
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../test/android/cmake/SDLEntryTestActivity.java.cmake "${JAVA_PACKAGE_DIR}/SDLEntryTestActivity.java" @ONLY)
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../test/android/cmake/SDLTestActivity.java.cmake "${JAVA_PACKAGE_DIR}/SDLTestActivity.java" @ONLY)
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../test/android/cmake/res/values/strings.xml.cmake android/res/values/strings-${EXAMPLE}.xml @ONLY)
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../test/android/cmake/res/xml/shortcuts.xml.cmake "${GENERATED_RES_FOLDER}/xml/shortcuts.xml" @ONLY)
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../test/android/cmake/AndroidManifest.xml.cmake "${generated_manifest_path}" @ONLY)
- file(GENERATE
- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/android/${EXAMPLE}-$<CONFIG>/res/values/strings.xml"
- INPUT "${CMAKE_CURRENT_BINARY_DIR}/android/res/values/strings-${EXAMPLE}.xml"
- )
-
- sdl_android_compile_resources(${EXAMPLE}-resources
- RESOURCES
- "${CMAKE_CURRENT_BINARY_DIR}/android/${EXAMPLE}-$<CONFIG>/res/values/strings.xml"
- "${GENERATED_RES_FOLDER}/xml/shortcuts.xml"
- )
-
- sdl_android_link_resources(${EXAMPLE}-apk-linked
- MANIFEST "${generated_manifest_path}"
- PACKAGE ${ANDROID_MANIFEST_PACKAGE}
- RES_TARGETS SDL_example-resources ${EXAMPLE}-resources
- TARGET_SDK_VERSION 31
- )
-
- set(CMAKE_JAVA_COMPILE_FLAGS "-encoding;utf-8")
- set(classes_path "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${EXAMPLE}-java.dir/classes")
- # Some CMake versions have a slow `cmake -E make_directory` implementation
- if(NOT IS_DIRECTORY "${classes_path}")
- execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${classes_path}")
- endif()
- set(OUT_JAR "${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.jar")
- add_custom_command(
- OUTPUT "${OUT_JAR}"
- COMMAND ${CMAKE_COMMAND} -E rm -rf "${classes_path}"
- COMMAND ${CMAKE_COMMAND} -E make_directory "${classes_path}"
- COMMAND ${Java_JAVAC_EXECUTABLE}
- -source 1.8 -target 1.8
- -bootclasspath "$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>"
- "${JAVA_PACKAGE_DIR}/SDLEntryTestActivity.java"
- "${JAVA_PACKAGE_DIR}/SDLTestActivity.java"
- $<TARGET_PROPERTY:${EXAMPLE}-apk-linked,JAVA_R>
- -cp "$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>:${SDL_ANDROID_PLATFORM_ANDROID_JAR}"
- -d "${classes_path}"
- COMMAND ${Java_JAR_EXECUTABLE} cf "${OUT_JAR}" -C "${classes_path}" .
- DEPENDS $<TARGET_PROPERTY:${EXAMPLE}-apk-linked,OUTPUTS> "$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>" "${JAVA_PACKAGE_DIR}/SDLTestActivity.java" "${JAVA_PACKAGE_DIR}/SDLEntryTestActivity.java"
- )
- add_custom_target(${EXAMPLE}-jar DEPENDS "${OUT_JAR}")
- set_property(TARGET ${EXAMPLE}-jar PROPERTY OUTPUT "${OUT_JAR}")
-
- set(dexworkdir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${EXAMPLE}-dex.dir")
- # Some CMake versions have a slow `cmake -E make_directory` implementation
- if(NOT IS_DIRECTORY "${dexworkdir}")
- execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${dexworkdir}")
- endif()
- set(classes_dex_base_name "classes.dex")
- set(classes_dex "${dexworkdir}/${classes_dex_base_name}")
- add_custom_command(
- OUTPUT "${classes_dex}"
- COMMAND SdlAndroid::d8
- $<TARGET_PROPERTY:${EXAMPLE}-jar,OUTPUT>
- $<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>
- --lib "${SDL_ANDROID_PLATFORM_ANDROID_JAR}"
- --output "${dexworkdir}"
- DEPENDS $<TARGET_PROPERTY:${EXAMPLE}-jar,OUTPUT> $<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>
- )
- add_custom_target(${EXAMPLE}-dex DEPENDS "${classes_dex}")
- set_property(TARGET ${EXAMPLE}-dex PROPERTY OUTPUT "${classes_dex}")
- set_property(TARGET ${EXAMPLE}-dex PROPERTY OUTPUT_BASE_NAME "${classes_dex_base_name}")
-
- sdl_add_to_apk_unaligned(${EXAMPLE}-unaligned-apk
- APK_IN ${EXAMPLE}-apk-linked
- OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/intermediates"
- ASSETS ${RESOURCE_FILES}
- NATIVE_LIBS SDL3::SDL3-shared ${EXAMPLE}
- DEX ${EXAMPLE}-dex
- )
-
- sdl_apk_align(${EXAMPLE}-aligned-apk ${EXAMPLE}-unaligned-apk
- OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/intermediates"
- )
- sdl_apk_sign(${EXAMPLE}-apk ${EXAMPLE}-aligned-apk
- KEYSTORE SDL_example-debug-keystore
- )
- add_dependencies(sdl-example-apks ${EXAMPLE}-apk)
-
- if(TARGET SdlAndroid::adb)
- add_custom_target(install-${EXAMPLE}
- COMMAND "${CMAKE_COMMAND}" -DACTION=install "-DAPKS=$<TARGET_PROPERTY:${EXAMPLE}-apk,OUTPUT>" -P "${SDL3_SOURCE_DIR}/cmake/android/SdlAndroidScript.cmake"
- DEPENDS "${EXAMPLE}-apk"
- )
- add_custom_target(start-${EXAMPLE}
- COMMAND "${ADB_BIN}" shell am start-activity -S "${ANDROID_MANIFEST_PACKAGE}/.SDLTestActivity"
- )
- add_custom_target(build-install-start-${EXAMPLE}
- COMMAND "${CMAKE_COMMAND}" -DACTION=build-install-run "-DEXECUTABLES=${EXAMPLE}" "-DBUILD_FOLDER=${CMAKE_BINARY_DIR}" -P "${SDL3_SOURCE_DIR}/cmake/android/SdlAndroidScript.cmake"
- )
- endif()
-
- list(APPEND packages "${ANDROID_MANIFEST_PACKAGE}")
- list(APPEND install_targets install-${EXAMPLE})
- endforeach()
-
- if(TARGET SdlAndroid::adb)
- add_custom_target(install-sdl-example-apks
- DEPENDS ${install_targets}
- VERBATIM
- )
- add_custom_target(uninstall-sdl-example-apks
- COMMAND "${CMAKE_COMMAND}" "-DADB=$<TARGET_FILE:SdlAndroid::adb>" -DACTION=uninstall "-DPACKAGES=${packages}" -P "${SDL3_SOURCE_DIR}/cmake/android/SdlAndroidScript.cmake"
- VERBATIM
- )
- endif()
- endif()
-endif()