SDL_mixer: cmake: install licenses in vendored build

From 43894cd8f9fd1ac7ffac74c64a535a0c73b3e884 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Wed, 21 Jan 2026 19:40:19 +0100
Subject: [PATCH] cmake: install licenses in vendored build

---
 CMakeLists.txt                  | 20 ++++++++++++++++++++
 build-scripts/release-info.json | 24 ++++++++++++------------
 2 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 698c9e5d..136ef4a4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -199,6 +199,12 @@ if(NOT TARGET SDL3::Headers OR NOT TARGET ${sdl3_target_name})
     find_package(SDL3 ${SDL_REQUIRED_VERSION} REQUIRED COMPONENTS ${sdl_required_components})
 endif()
 
+set(install_license_names)
+macro(register_license NAME FILE)
+    list(APPEND install_license_names ${NAME})
+    set(install_license_${NAME} "${FILE}")
+endmacro()
+
 SDL_DetectTargetCPUArchitectures(SDL_CPU_NAMES)
 SDL_DetectCMakePlatform()
 
@@ -333,6 +339,7 @@ if(SDLMIXER_OGG)
         set(BUILD_TESTING OFF)
         sdl_check_project_in_subfolder(external/ogg ogg SDLMIXER_VENDORED)
         add_subdirectory(external/ogg external/ogg-build EXCLUDE_FROM_ALL)
+        register_license(ogg-vorbis external/ogg/COPYING)
         if(SDLMIXER_OGG_install)
             list(APPEND INSTALL_EXTRA_TARGETS ogg)
         endif()
@@ -353,6 +360,7 @@ if(SDLMIXER_OPUS)
         set(BUILD_PROGRAMS OFF)
         sdl_check_project_in_subfolder(external/opus opus SDLMIXER_VENDORED)
         add_subdirectory(external/opus external/opus-build EXCLUDE_FROM_ALL)
+        register_license(opus external/opus/COPYING)
 
         set(OP_DISABLE_DOCS TRUE)
         set(OP_DISABLE_EXAMPLES TRUE)
@@ -361,6 +369,7 @@ if(SDLMIXER_OPUS)
         set(BUILD_SHARED_LIBS ${SDLMIXER_OPUS_SHARED})
         sdl_check_project_in_subfolder(external/opusfile opusfile SDLMIXER_VENDORED)
         add_subdirectory(external/opusfile external/opusfile-build EXCLUDE_FROM_ALL)
+        register_license(opusfile external/opusfile/COPYING)
         if(MSVC)
             set_property(TARGET opusfile PROPERTY WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
         endif()
@@ -433,6 +442,7 @@ if(SDLMIXER_VORBIS_TREMOR)
         set(BUILD_SHARED_LIBS ${SDLMIXER_VORBIS_TREMOR_SHARED})
         sdl_check_project_in_subfolder(external/tremor tremor SDLMIXER_VENDORED)
         add_subdirectory(external/tremor external/tremor-build EXCLUDE_FROM_ALL)
+        register_license(tremor external/tremor/COPYING)
         if(NOT TARGET tremor::tremor)
             add_library(tremor::tremor ALIAS vorbisidec)
         endif()
@@ -494,6 +504,7 @@ if(SDLMIXER_VORBIS_VORBISFILE)
         set(BUILD_SHARED_LIBS ${SDLMIXER_VORBIS_VORBISFILE_SHARED})
         sdl_check_project_in_subfolder(external/vorbis vorbisfile SDLMIXER_VENDORED)
         add_subdirectory(external/vorbis external/vorbis-build EXCLUDE_FROM_ALL)
+        register_license(vorbis external/vorbis/COPYING)
         if(NOT TARGET Vorbis::vorbisfile)
             add_library(Vorbis::vorbisfile ALIAS vorbisfile)
         endif()
@@ -560,6 +571,7 @@ if(SDLMIXER_FLAC_LIBFLAC)
         message(STATUS "Using vendored libflac")
         sdl_check_project_in_subfolder(external/flac libflac SDLMIXER_VENDORED)
         add_subdirectory(external/flac external/flac-build EXCLUDE_FROM_ALL)
+        register_license(flac external/flac/COPYING.Xiph)
         if(SDLMIXER_FLAC_LIBFLAC_SHARED OR NOT SDLMIXER_BUILD_SHARED_LIBS)
             list(APPEND INSTALL_EXTRA_TARGETS FLAC)
         endif()
@@ -638,6 +650,7 @@ if(SDLMIXER_GME)
         sdl_check_project_in_subfolder(external/libgme libgme SDLMIXER_VENDORED)
         enable_language(CXX)
         add_subdirectory(external/libgme external/libgme-build EXCLUDE_FROM_ALL)
+        register_license(gme external/libgme/license.txt)
         if(SDLMIXER_GME_SHARED OR NOT SDLMIXER_BUILD_SHARED_LIBS)
             list(APPEND INSTALL_EXTRA_TARGETS ${targets_gme})
         endif()
@@ -696,6 +709,7 @@ if(SDLMIXER_MOD_XMP)
         endif()
         set(xmp_name libxmp)
         add_subdirectory(external/libxmp external/libxmp-build EXCLUDE_FROM_ALL)
+        register_license(xmp external/libxmp/docs/COPYING)
         if(SDLMIXER_MOD_XMP_SHARED OR NOT SDLMIXER_BUILD_SHARED_LIBS)
             list(APPEND INSTALL_EXTRA_TARGETS ${tgt_xmp})
         endif()
@@ -780,6 +794,7 @@ if(SDLMIXER_MP3_MPG123)
         set(BUILD_PROGRAMS OFF)
         set(BUILD_SHARED_LIBS "${SDLMIXER_MP3_MPG123_SHARED}")
         add_subdirectory(external/mpg123/ports/cmake external/libmpg123-build/ports/cmake EXCLUDE_FROM_ALL)
+        register_license(mpg123 external/mpg123/README)
         if(NOT TARGET MPG123::libmpg123)
             add_library(MPG123::libmpg123 ALIAS libmpg123)
         endif()
@@ -929,6 +944,7 @@ if(SDLMIXER_WAVPACK)
         set(WAVPACK_BUILD_DOCS OFF)
         set(BUILD_SHARED_LIBS "${SDLMIXER_WAVPACK_SHARED}")
         add_subdirectory(external/wavpack external/wavpack-build EXCLUDE_FROM_ALL)
+        register_license(wavpack external/wavpack/COPYING)
         if(SDLMIXER_WAVPACK_SHARED OR NOT SDLMIXER_BUILD_SHARED_LIBS)
             list(APPEND INSTALL_EXTRA_TARGETS wavpack)
         endif()
@@ -1099,6 +1115,10 @@ if(SDLMIXER_INSTALL)
         COMPONENT library
     )
 
+    foreach(license_name IN LISTS install_license_names)
+        install(FILES "${install_license_${license_name}}" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}/optional" RENAME "LICENSE.${license_name}.txt")
+    endforeach()
+
     if(SDLMIXER_INSTALL_CPACK)
       if(MSVC)
         set(CPACK_GENERATOR "ZIP")
diff --git a/build-scripts/release-info.json b/build-scripts/release-info.json
index c8528415..1aaf57b9 100644
--- a/build-scripts/release-info.json
+++ b/build-scripts/release-info.json
@@ -168,12 +168,12 @@
           "bin/opus-0.dll",
           "bin/opusfile-0.dll",
           "bin/libwavpack-1.dll",
-          "VisualC/external/optional/x86/LICENSE.gme.txt",
-          "VisualC/external/optional/x86/LICENSE.ogg-vorbis.txt",
-          "VisualC/external/optional/x86/LICENSE.opus.txt",
-          "VisualC/external/optional/x86/LICENSE.opusfile.txt",
-          "VisualC/external/optional/x86/LICENSE.wavpack.txt",
-          "VisualC/external/optional/x86/LICENSE.xmp.txt"
+          "share/licenses/SDL3_mixer/optional/LICENSE.gme.txt",
+          "share/licenses/SDL3_mixer/optional/LICENSE.ogg-vorbis.txt",
+          "share/licenses/SDL3_mixer/optional/LICENSE.opus.txt",
+          "share/licenses/SDL3_mixer/optional/LICENSE.opusfile.txt",
+          "share/licenses/SDL3_mixer/optional/LICENSE.wavpack.txt",
+          "share/licenses/SDL3_mixer/optional/LICENSE.xmp.txt"
         ]
       },
       "files-devel": {
@@ -189,12 +189,12 @@
           "bin/opus-0.dll",
           "bin/opusfile-0.dll",
           "bin/libwavpack-1.dll",
-          "VisualC/external/optional/x86/LICENSE.gme.txt",
-          "VisualC/external/optional/x86/LICENSE.ogg-vorbis.txt",
-          "VisualC/external/optional/x86/LICENSE.opus.txt",
-          "VisualC/external/optional/x86/LICENSE.opusfile.txt",
-          "VisualC/external/optional/x86/LICENSE.wavpack.txt",
-          "VisualC/external/optional/x86/LICENSE.xmp.txt"
+          "share/licenses/SDL3_mixer/optional/LICENSE.gme.txt",
+          "share/licenses/SDL3_mixer/optional/LICENSE.ogg-vorbis.txt",
+          "share/licenses/SDL3_mixer/optional/LICENSE.opus.txt",
+          "share/licenses/SDL3_mixer/optional/LICENSE.opusfile.txt",
+          "share/licenses/SDL3_mixer/optional/LICENSE.wavpack.txt",
+          "share/licenses/SDL3_mixer/optional/LICENSE.xmp.txt"
         ]
       }
     },