SDL_mixer: cmake: support libxmp-lite::xmp_lite_(shared|static) targets

From fc6522647412d11c178a29fbaf51f6d9b8b45e36 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Tue, 5 May 2026 23:25:24 +0200
Subject: [PATCH] cmake: support libxmp-lite::xmp_lite_(shared|static) targets

---
 CMakeLists.txt            | 12 ++++++-
 SDL2_mixerConfig.cmake.in | 72 +++++++++++++++++++++------------------
 2 files changed, 50 insertions(+), 34 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1a962e874..55919d336 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -667,6 +667,8 @@ if(SDL2MIXER_MOD_MODPLUG)
     endif()
 endif()
 
+set(tgt_libxmp libxmp::xmp_shared)
+set(tgt_libxmplite libxmp-lite::xmp_lite_shared)
 if(SDL2MIXER_MOD_XMP)
     target_compile_definitions(SDL2_mixer PRIVATE MUSIC_MOD_XMP)
     if(SDL2MIXER_VENDORED)
@@ -695,7 +697,14 @@ if(SDL2MIXER_MOD_XMP)
         if(SDL2MIXER_MOD_XMP_LITE)
             message(STATUS "Using system libxmp-lite")
             find_package(libxmp-lite REQUIRED)
-            set(tgt_xmp libxmp-lite::libxmp-lite)
+            if(TARGET libxmp-lite::xmp_lite_shared)
+              set(tgt_xmp libxmp-lite::xmp_lite_shared)
+            elseif(TARGET libxmp-lite::xmp_lite_static)
+              set(tgt_xmp libxmp-lite::xmp_lite_static)
+            else()
+              set(tgt_xmp libxmp-lite::libxmp-lite)
+            endif()
+            set(tgt_libxmplite ${tgt_xmp})
             set(xmp_name libxmp-lite)
             if(NOT SDL2MIXER_MOD_XMP_SHARED)
                 list(APPEND PC_REQUIRES libxmp-lite)
@@ -710,6 +719,7 @@ if(SDL2MIXER_MOD_XMP)
             else()
                 set(tgt_xmp libxmp::libxmp)
             endif()
+            set(tgt_libxmp ${tgt_xmp})
             set(xmp_name libxmp)
             if(NOT SDL2MIXER_MOD_XMP_SHARED)
                 list(APPEND PC_REQUIRES libxmp)
diff --git a/SDL2_mixerConfig.cmake.in b/SDL2_mixerConfig.cmake.in
index f4d5e3517..ad47ea1e9 100644
--- a/SDL2_mixerConfig.cmake.in
+++ b/SDL2_mixerConfig.cmake.in
@@ -58,48 +58,54 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-static-targets.cmake")
         set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
     endif()
 
-    if(SDL2MIXER_FLAC_LIBFLAC AND NOT SDL2MIXER_VENDORED AND NOT TARGET FLAC::FLAC)
-        find_dependency(FLAC)
-    endif()
-
-    if(SDL2MIXER_GME AND NOT SDL2MIXER_VENDORED AND NOT TARGET gme::gme)
-        find_dependency(gme)
-    endif()
+    if(NOT SDL2MIXER_VENDORED)
+        if(SDL2MIXER_FLAC_LIBFLAC AND NOT TARGET FLAC::FLAC)
+            find_dependency(FLAC)
+        endif()
 
-    if(SDL2MIXER_MOD_MODPLUG AND NOT SDL2MIXER_VENDORED AND NOT TARGET modplug::modplug)
-        find_dependency(modplug)
-    endif()
+        if(SDL2MIXER_GME AND NOT TARGET gme::gme)
+            find_dependency(gme)
+        endif()
 
-    if(SDL2MIXER_MOD_XMP AND NOT SDL2MIXER_VENDORED AND NOT TARGET libxmp::libxmp)
-        find_dependency(libxmp)
-    endif()
+        if(SDL2MIXER_MOD_MODPLUG AND NOT TARGET modplug::modplug)
+            find_dependency(modplug)
+        endif()
 
-    if(SDL2MIXER_MOD_XMP_LITE AND NOT SDL2MIXER_VENDORED AND NOT TARGET libxmp-lite::libxmp-lite)
-        find_dependency(libxmp-lite)
-    endif()
+        if(SDL2MIXER_MOD_XMP)
+            if(SDL2MIXER_MOD_XMP_LITE)
+                if(NOT TARGET @tgt_libxmplite@)
+                    find_dependency(libxmp-lite)
+                endif()
+            else()
+                if(NOT TARGET @tgt_libxmp@)
+                    find_dependency(libxmp)
+                endif()
+            endif()
+        endif()
 
-    if(SDL2MIXER_MP3_MPG123 AND NOT SDL2MIXER_VENDORED AND NOT TARGET MPG123::mpg123)
-        find_dependency(mpg123)
-    endif()
+        if(SDL2MIXER_MP3_MPG123 AND NOT TARGET MPG123::mpg123)
+            find_dependency(mpg123)
+        endif()
 
-    if(SDL2MIXER_MIDI_FLUIDSYNTH AND NOT SDL2MIXER_VENDORED AND NOT TARGET FluidSynth::libfluidsynth)
-        find_dependency(FluidSynth)
-    endif()
+        if(SDL2MIXER_MIDI_FLUIDSYNTH AND NOT TARGET FluidSynth::libfluidsynth)
+            find_dependency(FluidSynth)
+        endif()
 
-    if(SDL2MIXER_VORBIS_TREMOR AND NOT SDL2MIXER_VENDORED AND NOT TARGET tremor::tremor)
-        find_dependency(tremor)
-    endif()
+        if(SDL2MIXER_VORBIS_TREMOR AND NOT TARGET tremor::tremor)
+            find_dependency(tremor)
+        endif()
 
-    if(SDL2MIXER_VORBIS_VORBISFILE AND NOT SDL2MIXER_VENDORED AND NOT TARGET Vorbis::vorbisfile)
-        find_dependency(Vorbis)
-    endif()
+        if(SDL2MIXER_VORBIS_VORBISFILE AND NOT TARGET Vorbis::vorbisfile)
+            find_dependency(Vorbis)
+        endif()
 
-    if(SDL2MIXER_OPUS AND NOT SDL2MIXER_VENDORED AND NOT TARGET OpusFile::opusfile)
-        find_dependency(OpusFile)
-    endif()
+        if(SDL2MIXER_OPUS AND NOT TARGET OpusFile::opusfile)
+            find_dependency(OpusFile)
+        endif()
 
-    if(SDL2MIXER_WAVPACK AND NOT SDL2MIXER_VENDORED AND NOT TARGET WavPack::WavPack)
-        find_dependency(wavpack)
+        if(SDL2MIXER_WAVPACK AND NOT TARGET WavPack::WavPack)
+            find_dependency(wavpack)
+        endif()
     endif()
 
     if((NOT SDL2MIXER_VENDORED AND SDL2MIXER_MOD_MODPLUG) OR (HAIKU AND SDL2MIXER_MIDI_NATIVE))