SDL_mixer: Use libxmp instead of modplug as the default backend for MOD music

From be9d5dec80de45a0c0aa7e12427d79d8684a621c Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Fri, 15 Jul 2022 14:37:14 -0700
Subject: [PATCH] Use libxmp instead of modplug as the default backend for MOD
 music

---
 .gitmodules                                   |   8 +-
 Android.mk                                    |  18 +-
 CHANGES.txt                                   |   4 +
 CMakeLists.txt                                |   4 +-
 .../external/optional/x64/LICENSE.modplug.txt |   5 -
 .../optional/x64/LICENSE.xmp-lite.txt         |  42 ++
 .../external/optional/x64/libmodplug-1.dll    | Bin 265216 -> 0 bytes
 VisualC/external/optional/x64/libxmp-lite.dll | Bin 0 -> 143360 bytes
 .../external/optional/x86/LICENSE.modplug.txt |   5 -
 .../optional/x86/LICENSE.xmp-lite.txt         |  42 ++
 .../external/optional/x86/libmodplug-1.dll    | Bin 247808 -> 0 bytes
 VisualC/external/optional/x86/libxmp-lite.dll | Bin 0 -> 136192 bytes
 Xcode/SDL_mixer.xcodeproj/project.pbxproj     |  40 +-
 Xcode/config.xcconfig                         |   6 +-
 .../playmus/playmus.xcodeproj/project.pbxproj |  68 +--
 .../playwave.xcodeproj/project.pbxproj        |  68 +--
 .../xmp-lite.xcodeproj/project.pbxproj        | 507 ++++++++++++++++++
 configure                                     |   8 +-
 configure.ac                                  |   8 +-
 external/libmodplug                           |   1 -
 external/libxmp                               |   1 +
 src/codecs/music_xmp.c                        |   2 +-
 22 files changed, 716 insertions(+), 121 deletions(-)
 delete mode 100644 VisualC/external/optional/x64/LICENSE.modplug.txt
 create mode 100644 VisualC/external/optional/x64/LICENSE.xmp-lite.txt
 delete mode 100644 VisualC/external/optional/x64/libmodplug-1.dll
 create mode 100644 VisualC/external/optional/x64/libxmp-lite.dll
 delete mode 100644 VisualC/external/optional/x86/LICENSE.modplug.txt
 create mode 100644 VisualC/external/optional/x86/LICENSE.xmp-lite.txt
 delete mode 100644 VisualC/external/optional/x86/libmodplug-1.dll
 create mode 100644 VisualC/external/optional/x86/libxmp-lite.dll
 create mode 100644 Xcode/xmp-lite/xmp-lite.xcodeproj/project.pbxproj
 delete mode 160000 external/libmodplug
 create mode 160000 external/libxmp

diff --git a/.gitmodules b/.gitmodules
index 82a2c4f0..2b65cdc9 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -22,11 +22,11 @@
 	path = external/tremor
 	url = https://github.com/libsdl-org/tremor.git
 	branch = v1.2.1-SDL
-[submodule "external/libmodplug"]
-	path = external/libmodplug
-	url = https://github.com/libsdl-org/libmodplug.git
-	branch = v0.8.9.0-SDL
 [submodule "external/mpg123"]
 	path = external/mpg123
 	url = https://github.com/libsdl-org/mpg123.git
 	branch = v1.29.3-SDL
+[submodule "libxmp"]
+	path = external/libxmp
+	url = https://github.com/libsdl-org/libxmp.git
+	branch = v4.5.0-SDL
diff --git a/Android.mk b/Android.mk
index 948f5700..dada259a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -26,9 +26,9 @@ SUPPORT_MP3_DRMP3 ?= true
 SUPPORT_MP3_MPG123 ?= false
 MPG123_LIBRARY_PATH := external/mpg123
 
-# Enable this if you want to support loading MOD music via modplug
-SUPPORT_MOD_MODPLUG ?= false
-MODPLUG_LIBRARY_PATH := external/libmodplug
+# Enable this if you want to support loading MOD music via XMP-lite
+SUPPORT_MOD_XMP ?= false
+XMP_LIBRARY_PATH := external/libxmp
 
 # Enable this if you want to support TiMidity
 SUPPORT_MID_TIMIDITY ?= false
@@ -52,8 +52,8 @@ ifeq ($(SUPPORT_MP3_MPG123),true)
 endif
 
 # Build the library
-ifeq ($(SUPPORT_MOD_MODPLUG),true)
-    include $(SDL_MIXER_LOCAL_PATH)/$(MODPLUG_LIBRARY_PATH)/Android.mk
+ifeq ($(SUPPORT_MOD_XMP),true)
+    include $(SDL_MIXER_LOCAL_PATH)/$(XMP_LIBRARY_PATH)/Android.mk
 endif
 
 # Build the library
@@ -122,11 +122,9 @@ ifeq ($(SUPPORT_MP3_MPG123),true)
     LOCAL_SHARED_LIBRARIES += mpg123
 endif
 
-ifeq ($(SUPPORT_MOD_MODPLUG),true)
-    LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(MODPLUG_LIBRARY_PATH)/src
-    LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(MODPLUG_LIBRARY_PATH)/src/libmodplug
-    LOCAL_CFLAGS += -DMUSIC_MOD_MODPLUG -DMODPLUG_HEADER="<modplug.h>"
-    LOCAL_STATIC_LIBRARIES += modplug
+ifeq ($(SUPPORT_MOD_XMP),true)
+    LOCAL_CFLAGS += -DMUSIC_MOD_XMP -DLIBXMP_HEADER=\"../external/libxmp/include/xmp.h\"
+    LOCAL_STATIC_LIBRARIES += xmp
 endif
 
 ifeq ($(SUPPORT_MID_TIMIDITY),true)
diff --git a/CHANGES.txt b/CHANGES.txt
index 48e934cf..44319f7f 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,7 @@
+2.8.0:
+ * Use libxmp instead of modplug as the default backend for MOD music
+   To use libmodplug instead, configure using --enable-music-mod-modplug --disable-music-mod-xmp
+
 2.6.0:
  * Added support for building with CMake
  * Added support for playing Ogg files using stb_vorbis, which is now the default Vorbis backend.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e70c4d0b..dfba021d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -78,10 +78,10 @@ cmake_dependent_option(SDL2MIXER_FLAC_DRFLAC "Enable FLAC music using drflac" ON
 
 option(SDL2MIXER_MOD "Support loading MOD music" ON)
 
-cmake_dependent_option(SDL2MIXER_MOD_MODPLUG "Support loading MOD music via modplug" ON SDL2MIXER_MOD OFF)
+cmake_dependent_option(SDL2MIXER_MOD_MODPLUG "Support loading MOD music via modplug" OFF SDL2MIXER_MOD OFF)
 cmake_dependent_option(SDL2MIXER_MOD_MODPLUG_SHARED "Dynamically load modplug" "${SDL2MIXER_DEPS_SHARED}" SDL2MIXER_MOD_MODPLUG OFF)
 
-cmake_dependent_option(SDL2MIXER_MOD_XMP "Support loading MOD music via libxmp" OFF SDL2MIXER_MOD OFF)
+cmake_dependent_option(SDL2MIXER_MOD_XMP "Support loading MOD music via libxmp" ON SDL2MIXER_MOD OFF)
 cmake_dependent_option(SDL2MIXER_MOD_XMP_LITE "Use libxmp-lite instead of libxmp" OFF SDL2MIXER_MOD_XMP OFF)
 cmake_dependent_option(SDL2MIXER_MOD_XMP_SHARED "Dynamically load libxmp(-lite)" "${SDL2MIXER_DEPS_SHARED}" SDL2MIXER_MOD_XMP OFF)
 
diff --git a/VisualC/external/optional/x64/LICENSE.modplug.txt b/VisualC/external/optional/x64/LICENSE.modplug.txt
deleted file mode 100644
index b7327588..00000000
--- a/VisualC/external/optional/x64/LICENSE.modplug.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-The source code to this library used with SDL_mixer can be found here:
-https://hg.libsdl.org/SDL_mixer/file/default/external
----
-
-ModPlug-XMMS and libmodplug are now in the public domain.
diff --git a/VisualC/external/optional/x64/LICENSE.xmp-lite.txt b/VisualC/external/optional/x64/LICENSE.xmp-lite.txt
new file mode 100644
index 00000000..b47bcdbe
--- /dev/null
+++ b/VisualC/external/optional/x64/LICENSE.xmp-lite.txt
@@ -0,0 +1,42 @@
+   __   _ __                       ___ __     
+  / /  (_) / __ __ __ _  ___  ____/ (_) /____ 
+ / /__/ / _ \\ \ //  ' \/ _ \/___/ / / __/ -_)
+/____/_/_.__/_\_\/_/_/_/ .__/   /_/_/\__/\__/ 
+                      /_/                     
+
+Libxmp-lite is a lean and lightweight subset of Libxmp that plays MOD, S3M,
+XM, and IT modules and retains full compatibility with the original API.
+It's intended for games and small or embedded applications where module
+format diversity and file depacking are not required.
+
+Library size can be further reduced by disabling Impulse Tracker format
+support (configure with --disable-it). This option will also disable IT
+effects and lowpass filtering.
+
+Please refer to http://xmp.sf.net/libxmp.html for details on the current
+Libxmp API.
+
+
+LICENSE
+
+Extended Module Player Lite
+Copyright (C) 1996-2021 Claudio Matsuoka and Hipolito Carraro Jr
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/VisualC/external/optional/x64/libmodplug-1.dll b/VisualC/external/optional/x64/libmodplug-1.dll
deleted file mode 100644
index b6f4f9f60f7d350ddbc445148b56d4b07c93f314..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 265216
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

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