SDL_mixer: Added documentation and scripts for SDL3_mixer.dmg

From 4f04890eabe05f48b5e48568e2aa814b03132601 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Tue, 20 Jan 2026 15:29:34 -0800
Subject: [PATCH] Added documentation and scripts for SDL3_mixer.dmg

Fixes https://github.com/libsdl-org/SDL_mixer/issues/638
---
 INSTALL.md                                    |  49 +++++++++++
 README.md                                     |  20 +++--
 Xcode/SDL_mixer.xcodeproj/project.pbxproj     |  28 ++++--
 Xcode/config.xcconfig                         |   7 +-
 Xcode/pkg-support/build.xcconfig              |   3 -
 Xcode/pkg-support/resources/INSTALL.md        |  39 ++++++++
 Xcode/pkg-support/resources/ReadMe.txt        |  28 ------
 Xcode/pkg-support/resources/SDL_DS_Store      | Bin 0 -> 10244 bytes
 Xcode/pkg-support/resources/Welcome.txt       |   3 -
 .../resources/framework/INSTALL.md            |  35 ++++++++
 .../cmake/SDL3_mixer/SDL3_mixerConfig.cmake   |   0
 .../SDL3_mixer/SDL3_mixerConfigVersion.cmake  |   0
 Xcode/pkg-support/sdl_logo.pdf                | Bin 0 -> 163800 bytes
 docs/INTRO-androidstudio.md                   |   8 ++
 docs/INTRO-cmake.md                           |  54 ++++++++++++
 docs/INTRO-emscripten.md                      |  52 +++++++++++
 docs/INTRO-visualstudio.md                    |  18 ++++
 docs/INTRO-xcode.md                           |  18 ++++
 docs/hello.c                                  |  83 ++++++++++++++++++
 19 files changed, 394 insertions(+), 51 deletions(-)
 create mode 100644 INSTALL.md
 create mode 100644 Xcode/pkg-support/resources/INSTALL.md
 delete mode 100644 Xcode/pkg-support/resources/ReadMe.txt
 create mode 100644 Xcode/pkg-support/resources/SDL_DS_Store
 delete mode 100644 Xcode/pkg-support/resources/Welcome.txt
 create mode 100644 Xcode/pkg-support/resources/framework/INSTALL.md
 rename Xcode/pkg-support/{ => resources}/share/cmake/SDL3_mixer/SDL3_mixerConfig.cmake (100%)
 rename Xcode/pkg-support/{ => resources}/share/cmake/SDL3_mixer/SDL3_mixerConfigVersion.cmake (100%)
 create mode 100644 Xcode/pkg-support/sdl_logo.pdf
 create mode 100644 docs/INTRO-androidstudio.md
 create mode 100644 docs/INTRO-cmake.md
 create mode 100644 docs/INTRO-emscripten.md
 create mode 100644 docs/INTRO-visualstudio.md
 create mode 100644 docs/INTRO-xcode.md
 create mode 100644 docs/hello.c

diff --git a/INSTALL.md b/INSTALL.md
new file mode 100644
index 000000000..8194592e0
--- /dev/null
+++ b/INSTALL.md
@@ -0,0 +1,49 @@
+# To build and use SDL_mixer:
+
+SDL_mixer supports a number of development environments:
+- [CMake](docs/INTRO-cmake.md)
+- [Visual Studio on Windows](docs/INTRO-visualstudio.md)
+- [Xcode on Apple platforms](docs/INTRO-xcode.md)
+- [Android Studio](docs/INTRO-androidstudio.md)
+- [Emscripten for web](docs/INTRO-emscripten.md)
+
+SDL_mixer is also usable in other environments. The basic steps are to use CMake to build the library and then use the headers and library that you built in your project. You can search online to see if anyone has specific steps for your setup.
+
+# Documentation
+
+An API reference and additional documentation is available at:
+
+https://wiki.libsdl.org/SDL3_mixer
+
+# Example code
+
+There are simple example programs in the examples directory.
+
+If you're using CMake, you can build them adding `-DSDLMIXER_SAMPLES=ON` to the CMake command line when building SDL_mixer.
+
+If you're using Visual Studio there are separate projects in the VisualC directory.
+
+If you're using Xcode there are separate projects in the Xcode directory.
+
+# Discussions
+
+## Discord
+
+You can join the official Discord server at:
+
+https://discord.com/invite/BwpFGBWsv8
+
+## Forums/mailing lists
+
+You can join SDL development discussions at:
+
+https://discourse.libsdl.org/
+
+Once you sign up, you can use the forum through the website or as a mailing list from your email client.
+
+## Announcement list
+
+You can sign up for the low traffic announcement list at:
+
+https://www.libsdl.org/mailing-list.php
+
diff --git a/README.md b/README.md
index b383f2f29..be790418b 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,8 @@
 
 # SDL_mixer 3.0
 
-The latest version of this library is available from GitHub:
-https://github.com/libsdl-org/SDL_mixer/releases
-
-SDL_mixer 3.0 ("SDL3_mixer") is an audio management library. It provides
-decoding of many popular audio file formats, mixing, various DSP processing
-effects and positional audio.
+This is an audio management library. It provides decoding of many popular audio
+file formats, mixing, various DSP processing effects and positional audio.
 
 Audio data can be preloaded, or streamed on-the-fly into the mixer.
 
@@ -19,5 +15,15 @@ opinion, a significant improvement in power and ease of use. Please refer to
 docs/README-migration.md for details on how to migrate your program to the new
 API.
 
-This library is under the zlib license, see the file LICENSE.txt for details.
+The latest version of this library is available from GitHub:
+https://github.com/libsdl-org/SDL_mixer/releases
+
+Installation instructions and a quick introduction is available in
+[INSTALL.md](INSTALL.md)
+
+This library is distributed under the terms of the zlib license,
+available in [LICENSE.txt](LICENSE.txt).
+
+Enjoy!
 
+Sam Lantinga (slouken@libsdl.org)
diff --git a/Xcode/SDL_mixer.xcodeproj/project.pbxproj b/Xcode/SDL_mixer.xcodeproj/project.pbxproj
index ad54207cd..31cb59850 100644
--- a/Xcode/SDL_mixer.xcodeproj/project.pbxproj
+++ b/Xcode/SDL_mixer.xcodeproj/project.pbxproj
@@ -39,6 +39,9 @@
 
 /* Begin PBXBuildFile section */
 		BE1FA8CD07AF96B2004B6283 /* SDL_mixer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1014BAEA010A4B677F000001 /* SDL_mixer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		F31BA93D2F2039F500646176 /* INSTALL.md in Resources */ = {isa = PBXBuildFile; fileRef = F31BA93B2F2039F500646176 /* INSTALL.md */; };
+		F31BA9422F203ACA00646176 /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = F31BA9402F203ACA00646176 /* LICENSE.txt */; };
+		F31BA9432F203ACA00646176 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = F31BA9412F203ACA00646176 /* README.md */; };
 		F3249B39285C448100DB9B5C /* CMake in Resources */ = {isa = PBXBuildFile; fileRef = F3249B36285C448100DB9B5C /* CMake */; };
 		F3412A412D4C950E00D6C2B7 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3412A402D4C950E00D6C2B7 /* SDL3.framework */; };
 		F382FB962E340BDE004C6137 /* decoder_drmp3.c in Sources */ = {isa = PBXBuildFile; fileRef = F382FB822E340BDE004C6137 /* decoder_drmp3.c */; };
@@ -155,6 +158,10 @@
 		BE1FA90607AF96B2004B6283 /* SDL3_mixer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDL3_mixer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		F307A25D2B542F110012534B /* wavpack.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = wavpack.xcodeproj; path = wavpack/wavpack.xcodeproj; sourceTree = "<group>"; };
 		F307A2732B5431700012534B /* gme.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = gme.xcodeproj; path = gme/gme.xcodeproj; sourceTree = "<group>"; };
+		F31BA93B2F2039F500646176 /* INSTALL.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = INSTALL.md; sourceTree = "<group>"; };
+		F31BA93F2F203AAF00646176 /* INSTALL.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = INSTALL.md; sourceTree = "<group>"; };
+		F31BA9402F203ACA00646176 /* LICENSE.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = LICENSE.txt; path = ../../../LICENSE.txt; sourceTree = "<group>"; };
+		F31BA9412F203ACA00646176 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../../../README.md; sourceTree = "<group>"; };
 		F3249B36285C448100DB9B5C /* CMake */ = {isa = PBXFileReference; lastKnownFileType = folder; path = CMake; sourceTree = "<group>"; };
 		F3412A402D4C950E00D6C2B7 /* SDL3.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL3.framework; path = macOS/SDL3.framework; sourceTree = "<group>"; };
 		F382FB7F2E340BDE004C6137 /* decoder_aiff.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = decoder_aiff.c; path = ../src/decoder_aiff.c; sourceTree = SOURCE_ROOT; };
@@ -187,8 +194,6 @@
 		F3D87C0A281DFAD4005DA540 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; };
 		F3D87C0C281DFADB005DA540 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; };
 		F3E29D022882107B0006D108 /* xmp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = xmp.xcodeproj; path = xmp/xmp.xcodeproj; sourceTree = "<group>"; };
-		F59C710300D5CB5801000001 /* ReadMe.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ReadMe.txt; sourceTree = "<group>"; };
-		F59C710400D5CB5801000001 /* Welcome.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Welcome.txt; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -307,6 +312,14 @@
 			name = Products;
 			sourceTree = "<group>";
 		};
+		F31BA93C2F2039F500646176 /* framework */ = {
+			isa = PBXGroup;
+			children = (
+				F31BA93B2F2039F500646176 /* INSTALL.md */,
+			);
+			path = framework;
+			sourceTree = "<group>";
+		};
 		F3968B91281F817E00661875 /* Products */ = {
 			isa = PBXGroup;
 			children = (
@@ -342,9 +355,11 @@
 		F59C710100D5CB5801000001 /* resources */ = {
 			isa = PBXGroup;
 			children = (
+				F31BA93C2F2039F500646176 /* framework */,
 				F3249B36285C448100DB9B5C /* CMake */,
-				F59C710300D5CB5801000001 /* ReadMe.txt */,
-				F59C710400D5CB5801000001 /* Welcome.txt */,
+				F31BA9402F203ACA00646176 /* LICENSE.txt */,
+				F31BA9412F203ACA00646176 /* README.md */,
+				F31BA93F2F203AAF00646176 /* INSTALL.md */,
 			);
 			path = resources;
 			sourceTree = "<group>";
@@ -487,6 +502,9 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				F31BA93D2F2039F500646176 /* INSTALL.md in Resources */,
+				F31BA9422F203ACA00646176 /* LICENSE.txt in Resources */,
+				F31BA9432F203ACA00646176 /* README.md in Resources */,
 				F3249B39285C448100DB9B5C /* CMake in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -538,7 +556,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "set -ex\n\nPRODUCT_NAME=SDL3_mixer\nOPTIONAL_FRAMEWORKS=\"FLAC gme mpg123 ogg opus vorbis wavpack xmp\"\n\nmkdir -p build/dmg-tmp/share/cmake/$PRODUCT_NAME\ncp -a build/$PRODUCT_NAME.xcframework build/dmg-tmp/\ncp pkg-support/resources/ReadMe.txt build/dmg-tmp\ncp pkg-support/share/cmake/${PRODUCT_NAME}/${PRODUCT_NAME}Config.cmake build/dmg-tmp/share/cmake/${PRODUCT_NAME}\ncp pkg-support/share/cmake/${PRODUCT_NAME}/${PRODUCT_NAME}ConfigVersion.cmake build/dmg-tmp/share/cmake/${PRODUCT_NAME}\nfor i in $OPTIONAL_FRAMEWORKS; do\n    if [ -d build/$i.xcframework ]; then\n        mkdir -p build/dmg-tmp/optional\n        cp -a build/$i.xcframework build/dmg-tmp/optional/\n    fi\ndone\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nrm -rf build/dmg-tmp/.DS_Store\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname $PRODUCT_NAME -srcfolder build/dmg-tmp build/$PRODUCT_NAME.dmg\n\n# clean up\nrm -rf build/dmg-tmp\n";
+			shellScript = "set -ex\n\nPRODUCT_NAME=SDL3_mixer\nOPTIONAL_FRAMEWORKS=\"gme ogg opus wavpack xmp\"\n\nmkdir -p build/dmg-tmp/share/cmake/$PRODUCT_NAME\ncp -a build/$PRODUCT_NAME.xcframework build/dmg-tmp/\n\ncp ../LICENSE.txt build/dmg-tmp\ncp ../README.md build/dmg-tmp\ncp pkg-support/resources/INSTALL.md build/dmg-tmp\ncp pkg-support/resources/share/cmake/${PRODUCT_NAME}/${PRODUCT_NAME}Config.cmake build/dmg-tmp/share/cmake/${PRODUCT_NAME}\ncp pkg-support/resources/share/cmake/${PRODUCT_NAME}/${PRODUCT_NAME}ConfigVersion.cmake build/dmg-tmp/share/cmake/${PRODUCT_NAME}\nfor i in $OPTIONAL_FRAMEWORKS; do\n    if [ -d build/$i.xcframework ]; then\n        mkdir -p build/dmg-tmp/optional\n        cp -a build/$i.xcframework build/dmg-tmp/optional/\n    fi\ndone\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nrm -rf build/dmg-tmp/.DS_Store\n\n# for fancy .dmg\nmkdir -p build/dmg-tmp/.logo\ncp pkg-support/resources/SDL_DS_Store build/dmg-tmp/.DS_Store\ncp pkg-support/sdl_logo.pdf build/dmg-tmp/.logo\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname $PRODUCT_NAME -srcfolder build/dmg-tmp build/$PRODUCT_NAME.dmg\n\n# clean up\nrm -rf build/dmg-tmp\n";
 		};
 /* End PBXShellScriptBuildPhase section */
 
diff --git a/Xcode/config.xcconfig b/Xcode/config.xcconfig
index 0ef634ab3..46443bc20 100644
--- a/Xcode/config.xcconfig
+++ b/Xcode/config.xcconfig
@@ -13,9 +13,6 @@
 //GME_PREPROCESSOR_DEFINITIONS = MUSIC_GME
 //GME_FRAMEWORK_LDFLAGS = -weak_framework gme
 
-// Uncomment these lines to enable native MIDI support on OSX
-//MIDI_PREPROCESSOR_DEFINITIONS[sdk=macosx*] = MUSIC_MID_NATIVE
-
 // Uncomment these lines to enable MOD support
 // If you do this, you should run external/download.sh to download the decode libraries and add xmp.framework to your application bundle.
 //MOD_PREPROCESSOR_DEFINITIONS = MUSIC_MOD_XMP LIBXMP_HEADER=\"../external/libxmp/include/xmp.h\"
@@ -31,5 +28,5 @@
 //WAVPACK_PREPROCESSOR_DEFINITIONS = MUSIC_WAVPACK MUSIC_WAVPACK_DSD
 //WAVPACK_FRAMEWORK_LDFLAGS = -weak_framework wavpack
 
-CONFIG_PREPROCESSOR_DEFINITIONS = $(inherited) $(GME_PREPROCESSOR_DEFINITIONS) $(MIDI_PREPROCESSOR_DEFINITIONS) $(MOD_PREPROCESSOR_DEFINITIONS) $(OPUS_PREPROCESSOR_DEFINITIONS) $(WAVPACK_PREPROCESSOR_DEFINITIONS)
-CONFIG_FRAMEWORK_LDFLAGS = $(inherited) $(GME_FRAMEWORK_LDFLAGS) $(MIDI_FRAMEWORK_LDFLAGS) $(MOD_FRAMEWORK_LDFLAGS) $(OPUS_FRAMEWORK_LDFLAGS) $(WAVPACK_FRAMEWORK_LDFLAGS)
+CONFIG_PREPROCESSOR_DEFINITIONS = $(inherited) $(GME_PREPROCESSOR_DEFINITIONS) $(MOD_PREPROCESSOR_DEFINITIONS) $(OPUS_PREPROCESSOR_DEFINITIONS) $(WAVPACK_PREPROCESSOR_DEFINITIONS)
+CONFIG_FRAMEWORK_LDFLAGS = $(inherited) $(GME_FRAMEWORK_LDFLAGS) $(MOD_FRAMEWORK_LDFLAGS) $(OPUS_FRAMEWORK_LDFLAGS) $(WAVPACK_FRAMEWORK_LDFLAGS)
diff --git a/Xcode/pkg-support/build.xcconfig b/Xcode/pkg-support/build.xcconfig
index f13e1b754..2fdb24f9a 100644
--- a/Xcode/pkg-support/build.xcconfig
+++ b/Xcode/pkg-support/build.xcconfig
@@ -10,9 +10,6 @@
 GME_PREPROCESSOR_DEFINITIONS = MUSIC_GME
 GME_FRAMEWORK_LDFLAGS = -weak_framework gme
 
-// Uncomment these lines to enable native MIDI support on OSX
-MIDI_PREPROCESSOR_DEFINITIONS[sdk=macosx*] = MUSIC_MID_NATIVE
-
 // Uncomment these lines to enable MOD support
 // If you do this, you should run external/download.sh to download the decode libraries and add xmp.framework to your application bundle.
 MOD_PREPROCESSOR_DEFINITIONS = MUSIC_MOD_XMP LIBXMP_HEADER=\"../external/libxmp/include/xmp.h\"
diff --git a/Xcode/pkg-support/resources/INSTALL.md b/Xcode/pkg-support/resources/INSTALL.md
new file mode 100644
index 000000000..3e3b9bb4a
--- /dev/null
+++ b/Xcode/pkg-support/resources/INSTALL.md
@@ -0,0 +1,39 @@
+
+# Using this package
+
+This package contains SDL_mixer built for Xcode, and includes support for macOS, iOS and tvOS.
+
+To use this package in Xcode, drag `SDL3_mixer.xcframework` into your project.
+
+To use this package in a CMake project, copy both `SDL3_mixer.xcframework` and `share` to `~/Library/Frameworks`.
+
+You can include support for additional sound formats by including the frameworks in the optional folder in your application. They will be automatically loaded by SDL_mixer as needed.
+
+# Documentation
+
+An API reference and additional documentation is available at:
+
+https://wiki.libsdl.org/SDL3_mixer
+
+# Discussions
+
+## Discord
+
+You can join the official Discord server at:
+
+https://discord.com/invite/BwpFGBWsv8
+
+## Forums/mailing lists
+
+You can join SDL development discussions at:
+
+https://discourse.libsdl.org/
+
+Once you sign up, you can use the forum through the website or as a mailing list from your email client.
+
+## Announcement list
+
+You can sign up for the low traffic announcement list at:
+
+https://www.libsdl.org/mailing-list.php
+
diff --git a/Xcode/pkg-support/resources/ReadMe.txt b/Xcode/pkg-support/resources/ReadMe.txt
deleted file mode 100644
index a26959dce..000000000
--- a/Xcode/pkg-support/resources/ReadMe.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-SDL_mixer is an example portable sound library for use with SDL.
-
-The source code is available from: http://www.libsdl.org/projects/SDL_mixer
-
-This library is distributed under the terms of the zlib license: http://www.zlib.net/zlib_license.html
-
-This packages contains the SDL3_mixer.framework for OS X. Conforming with Apple guidelines, this framework contains both the SDL runtime component and development header files.
-
-Requirements:
-You must have the SDL3.framework installed.
-
-To Install:
-Copy the SDL3_mixer.framework to /Library/Frameworks
-
-You may alternatively install it in <your home directory>/Library/Frameworks if your access privileges are not high enough. (Be aware that the Xcode templates we provide in the SDL Developer Extras package may require some adjustment for your system if you do this.)
-
-In the optional directory are additional frameworks you can install or include in your application to support more audio formats.
-
-Use in CMake projects:
-SDL3_mixer.framework can be used in CMake projects using the following pattern:
-```
-find_package(SDL3_mixer REQUIRED)
-add_executable(my_game ${MY_SOURCES})
-target_link_libraries(my_game PRIVATE SDL3_mixer::SDL3_mixer)
-```
-If SDL3_mixer.framework is installed in a non-standard location,
-please refer to the following link for ways to configure CMake:
-https://cmake.org/cmake/help/latest/command/find_package.html#config-mode-search-procedure
diff --git a/Xcode/pkg-support/resources/SDL_DS_Store b/Xcode/pkg-support/resources/SDL_DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..73a5f32025b338ec5bb62ad7185d70ccd676f982
GIT binary patch
literal 10244
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
QMDKruK6?NEpT7V91?kezA^-pY

literal 0
HcmV?d00001

diff --git a/Xcode/pkg-support/resources/Welcome.txt b/Xcode/pkg-support/resources/Welcome.txt
deleted file mode 100644
index c650fa490..000000000
--- a/Xcode/pkg-support/resources/Welcome.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This package installs the SDL_mixer library into /Library/Frameworks. You can also install it in 
-<your home directory>/Library/Frameworks if your access privileges are not high enough.
-
diff --git a/Xcode/pkg-support/resources/framework/INSTALL.md b/Xcode/pkg-support/resources/framework/INSTALL.md
new file mode 100644
index 000000000..73308dbe4
--- /dev/null
+++ b/Xcode/pkg-support/resources/framework/INSTALL.md
@@ -0,0 +1,35 @@
+
+# Using this package
+
+This package contains SDL_mixer built for Xcode.
+
+To use this package in Xcode, drag `SDL3_mixer.framework` into your project.
+
+# Documentation
+
+An API reference and additional documentation is available at:
+
+https://wiki.libsdl.org/SDL3_mixer
+
+# Discussions
+
+## Discord
+
+You can join the official Discord server at:
+
+https://discord.com/invite/BwpFGBWsv8
+
+## Forums/mailing lists
+
+You can join SDL development discussions at:
+
+https://discourse.libsdl.org/
+
+Once you sign up, you can use the forum through the website or as a mailing list from your email client.
+
+## Announcement list
+
+You can sign up for the low traffic announcement list at:
+
+https://www.libsdl.org/mailing-list.php
+
diff --git a/Xcode/pkg-support/share/cmake/SDL3_mixer/SDL3_mixerConfig.cmake b/Xcode/pkg-support/resources/share/cmake/SDL3_mixer/SDL3_mixerConfig.cmake
similarity index 100%
rename from Xcode/pkg-support/share/cmake/SDL3_mixer/SDL3_mixerConfig.cmake
rename to Xcode/pkg-support/resources/share/cmake/SDL3_mixer/SDL3_mixerConfig.cmake
diff --git a/Xcode/pkg-support/share/cmake/SDL3_mixer/SDL3_mixerConfigVersion.cmake b/Xcode/pkg-support/resources/share/cmake/SDL3_mixer/SDL3_mixerConfigVersion.cmake
similarity index 100%
rename from Xcode/pkg-support/share/cmake/SDL3_mixer/SDL3_mixerConfigVersion.cmake
rename to Xcode/pkg-support/resources/share/cmake/SDL3_mixer/SDL3_mixerConfigVersion.cmake
diff --git a/Xcode/pkg-support/sdl_logo.pdf b/Xcode/pkg-support/sdl_logo.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..a172f971bf9b8b9b6d9e2299c7257261544c25d0
GIT binary patch
literal 163800
zcmeFZ2T)X9w>H?If`TXl0*XkG9J<LlDmh7PVv`#rHPGaYB9a6oHW|s1bB;>Rk~2t_
zEIGp*^!@I4@6_CyfBvbdnW<l@IDNWzTI*TQT6>?hcQ>`7m;^H`m>q|DVX=P*2aA=Q
zh1}ZETtEP#XkZGrBWDBND??OWY~YYr2KEM))}|17xV?cfa8J(8a#JWIgabzy18s0_
z>i%i_%Gv>8PtFRFH8Zx;=DMi``_sqoPXFD4{XbgBTN{fR*u&|>_}ExjI9S+Nc-dIl
zIoQ}4Sy*XVSZL`XuaIy9doydq|3EEkB%QRSrGuS4(!kytNe@v(S{pkU!I5;LfS7P{
zKx1-CGee{S(uJH0%*93jZ+STX$U}~Bu(bS_RyX4RODlvu9AOWDawGRYsN84-V1)z<
z{sBuKZfs`o(%M;@1q=WL{ByCg0atEb;0gouu(r7=<lqH!u=DbAkh5{HfqA%jd3eY<
zx!Ay*oV=Xe<eWe$D;o<d8w~Q&5)L>1Z+lZknpyp~g`!CN|0^RY!|kjckVbGj!1xl@
z2z%h=6`LLlIV<;#wn9P>jn{_eaHE^grLBOEe_J28WhH0*!xCvLHgZ;u-_S@~v6Hj@
zHayS{z~4v(Zm$gikcX(ko$Y}}0BWyb5OHUFNfmp*?m(ZCDgZ{m8%wINlJoo-QwaF`
zmmzKn{}|#o9si>(L`9U`9_avwyjCPPF|f3QL#%E7xp}Q9PtF1{G9YIKvp`;n{(gBW
z4^gm2S{YbEROAipEPyu%I7C!h<xi7;4|gNM|HN>t|C7V<{uz#(gPWD*UmE|0_>T;7
zaD=J-8}gf4$`A=NOM5sHB4G(2Ck8jNHikp~yZ}73x-s8NGkZHlIP#UXl?|XBz)T*<
zD{D&!D})_64<|QZ5P+gafNzkqa^4hJBkjmJ07I#p83SY7)R2OknZ5y<akBq6eOV(_
zYz&NU#&t9^g1?g2l>Ou2|8NANU|<D@Xh2jP4DD}X$8UoR2>~t%H?YFNk_y-y6TJsw
zx!=?@(zq6Tm!K>0ojdzO5Xig75)%Xh=@^y(*OxTdAP~9n-`l@9{3XF3XE>NBG(rPh
z!&~%fG-6znP?`_~YLdF~5Q*?RAP`G96Hpdr3{?3@1vrmBl_pU1q7xkiBK}+TF9QE7
zAW*E=4$vJ0^0~;TEiPq3|LYHb5%`P1zY*{r|F2UB+TZ!%F9LrN_%{L~n`6Z{6G#)e
z*M{^aQ_$a~)n5euBJiIOAV1pBxN#8uPmPCEj?v<OA2t3W@c$(Q(ry!jYyxjVZ_;T0
zWSsuVP_zD%-X`bd;o<m?EZe{H*8gPLepmaOX8W6b1A^S&B;@~s8CW3AHnvh0#sq3!
zM--vO*Rtb>vR_|kEgQaO;clmpsz>L~o|){lEKzy~=~sz7yGys`?ja7O;zWGJ{s*tW
zdX+zl-%S~hUQSVWDY|L(3+5O$VpiD<ra^GUyZ`if{xl58=w0X;eiUyU3Q+57-D~z+
z|9&n&KnW!FPAIk_zZH#PPvtPIaC1A@Ex#(XSG*~BBbGJuAmYlbZpOW<^zdw=ExH59
zhCFpZx<Avsk70JWYs9IYpHq_apnecS4de~IlMUUGcv(K4Iv!QM>Otbw9yG;&KBxJh
zn1FL;hMWxDKdh<I0_VPl$3Cnd>!<qNs$fQD{&=45LG27rZD@Y4<2jX)>`mISQSSIB
zT|#Jkw%zc9{X=<&Y7K$vaXcUk*#zO<JY47=pv#P0AJ<Y>cd+zur~EUNk3R*$kf(4G
z4krDmSxHcSH!ZIAjV?T2pfasH%?3}Cj|{_JvE~|WtUqf1t<UrK3bmxVA?<5rb_7UL
z?Xe9tU?6C`B;oIN&Wa!Eb=`TNwmQmC5LH(-RA+-%gCz0)l-U^GZ4H_yPdq$7Bo2hZ
zV1=V2%M0`Wbep#b<xhAmu~s%TQ7PM39WzpVh$yD3guDDay!tb6ooFFRzvSXLB13UW
zQMH<3wh%f3C)I|lk-FAjlixriN%29kj`;rI#Ah<2VvBsmNHxuia-C@PAh_DH`_IS6
zzis{HS-IA{yMT-jf_oZ10<)}-hjdMtJN)_sRhp_K)SdTvD<I7hOk>1hKbvWP*<Go3
zbc2D6uHttGZ(4B!iF`!)NbVa>FUxn-wspo^#m@Dvo{yi6@CN`{;2#70=H=f`oe3~!
zbaSltw<9*DCoH*6dkvMC5eQFB%inc6iS285Lw9*9HhxZ4j(Y4(TMDgIj_o5I+~U2C
z9^BZ#SsB2~y4iq_<X{o@YZ_)3*4*13IubwO;8HqqQT9jPh+%-Yt;XT5?d``i`_;KG
zSsOLgtqWF1OlqwJ{>Ymyukd>D^i8B;U@Pi-S4zhXa-$<tr*%xZImO3+gt2JV0GMM2
z@bNhIu=@RaJWL-3CS2C*29UdG-uca<QrpS3_d#pv4#VaiAt{PZYO}rZ$oRRw)e+0`
z0?#GV-!eo0$n45WobH-OvZ3(BZ^r%HOr@^6VHPYrz2fECH|Bo>k>>hyQeX8U>B&UB
zhH1FkIGKTin|6H?3{@H5>(u(&;7R!~+(ewSHGu1F#6sNA-HaUMBa;n>Q%9jfA*;$c
zf<LS}3en2{WzHv`mAI&3s@&(G;QJ})Qpr?BP3_dYIuA?~RFaqD<^H?JDsDl+U`Tr!
zG_ZI(*8?(>?9{3Th3}ep!W#4naxS7wZ$$I<8d9LwNsu2b8p@SroU2s5dl(~3G`wXJ
zuh&0|>YkdqHfO#G55KtEXlZv1*`!&wOS22|6fxCi^|r6^RyN}I4i6p5ClHM-zXv@D
z1Y9Y1t%`H=(6Dd5;WM(KJCCn+J*7*$N(<cWwC|z`jk*aGCwh)yhvs}{88PeWITnmN
zU<bsO1><HrU(vUX2}{PCjfMu%z~ZVHg~6ZcL_7Q&1(lA%o=*aqewQ?Vo(d*19deFT
z?%?%PB!U)0@@6!C$EzRw8N@-tZHpXh$!#8bTkp?@`IZcU&O$XCr-Hqb<c;_<Yb&rc
zZz9NrKY@`gYi#;%r*sZBW6%v4828=kPgW;5ZfN5Dp-ctq#>$^X|KGg+(EHzI3I6WC
z{6*j|0{;bpN9PWJ!vedK9doXD{N0p)_apxz@E3vqgn<7gAF%KT_U4zY1p^Y{kN$4u
z|3%<00{;nt7Ee-Or3V7t->Xb&=_|SW_h`#s1pXrMpAax?3;~`3K_HA%?bn8;nz#QR
z^}0#^8w?Pt{2wI$|2b_=&c(&U#rq%G|C<BL|K*G=>z~uz|91}Aa<H@fpB%EisqxPt
zTUIu1p8v;A*;=VgnV|a`2u8nsPvcA2Vb9+jzQaFsbv-vEKWOD+h5nvfR!h2~v==cY
zA5pd>S73qh;-2QuDZwmN5N`VPF*c})j6w$__6Q70y-NgAdXMc*_w9}d!8|&7pbZ+X
zcooQ>@^A59SpI)U2N}UwRr#seV>eI}Km9e2(5xqGGQ^aKX#GwTZK1o<-tpFzlaqtn
zlwfjyeD_BDc7q-k$W!+8YRR~k!K3<2C+f;>_bg}Y*61uV3LT?~Hp~6`z}SLLb*-)6
z{KWEn5ml&LE}WRiX_ci1a_9TdT0Wv~!SgKV5Sp<)nd!=^$FUz2bd)sv5H!p7-lA5E
zI`?1|R&J&~SG=2d?cm@sbZN(BQGl@Sg@CrzCZ=W*pOHNuJ~SSr%{f@iRUh?&!E^G?
z)e@7ED<OnInPxaFpzZdUFZng#c0a#E)I&14v!Mo^jYG8$%%e`Z_PP5F`toDZtEHz%
zN81!#(8Y2W<n@E+!b$GuBkDsnWO_#VAGXw>wYl1+mUYF~b#?XGNr`>Y>Xnr<f_2=W
z<m|mUqKd2`B+{N|W@bV&Kkra*nW%l{tSVH~!PRs2qDq59-ohL0*Xnt)jTKmEVk+Lf
zv{4ULvOZR$1?Q~$fHs<s*m@XkrE-JjX={cn+OMp$5gRLk@mYq~p&^<4+EYd;&`PI`
zk@6?TYURAn9smF~u9G@*GY*YsBA^qIMv{Wv51zJ{R$hgkgN22MzqF?EimsVTdeuEW
z4|7g!i{DH_8$l;kSJqWr&jp<o6+#|t<kuwSHK;+=)@NJH_VaeTO3ZRhOI=E<>MVs9
z&e4Cxx~<yataqmK3Gu{id+oLwdt@`d`r5@()pn@{9m<^&sIRT6S@Yx(v_foe_dq~G
z<78N4ZDXO&<wG7e6m%Q2MdxgsIYtTT&+t@qofYTC9Qwhuqr4Imna`6eHV&}8kB@cd
zpKe-OMP*4!4$UNP?a_$mmXFlCSYD%SL!xYB)W#~EF3()6>*^YmAfVZ9H$RIDq;P4&
z%v@pe=FUjGMXsZoQ8u*q=^kf6p=~6No|}v3tN?&urj_uoL$s4=cSS&1VRsEc*(~jd
znmp4{;-dNanRuTDyWDFY-5PDKk<y7gO&#4FBGAre+ItI@{EhXcUp8mU+s$l3jvXqR
zv>RL3?5b7?x;~}3V_T&|ns&81SMis8*0L{Tn|a)4Rn)w(s=R*;+77ZNZl7Kyn`G8T
zgh;oO2Z`W5S|8?js7U4LwC7U#QC%oz&W?6<3VY~vQ3#}wr;nPyEpz6K{BX90eD9Vi
zdZKTvvP@~RpI(UN)hGRO=gec|`Gb*APhk+KNXyf?sx0{BTTcYXJ3|5)gZ3zGUAgV=
zI^Bq>qG0RHPR*<|nj!j8A`r-Zu>QSlgxEq=1<@#@TFKY0Yo`Y7O?BeaDQVY3Ll(t+
z`?u5|J<&i-R>y>3Yf}qZq5LuQa8XZ(;$ZbFkE*Hdlr>A5S$ntj=0gYM+|DBqD7wAg
zPnJ>Qk)Q>~x8RpwFOwZ@Z5=Ja=P?8B!C^mxg{Z7+>our<0%J4L>BLdt36Gc?<ZFdd
zjf(|sdRbGp?xUIHWCpc;6A)E-Ol!KOz}9kx4$^SL#zv_#qLw3E1wRdPNSg*8R><hV
z@>XU_hJvO^-~+Wa%GP`^-@`kgq6Wg};Cxm8pPFe;B2%SIcAB=qFb4L9j<)WZR1U+H
z0{<b)L<hc3eF2Gj5NPzf51{|r5?}V%yLu#Vm7Q!TSh#dER*=St{qmK)3#ZKB;bS8Y
zG*BK26Of<~x)h<s9J$tHNJ3xYSAA?ktKn!k7$w9dOVGGxuX>HOfeq4!2>|H#8iplt
zk{D3jKg^!d<kLTD0)rjLr1dCjn>I-Ynr~Dh38mE0BF}K1eDj_^K0X|l!6971<F)r_
zg$HUsy49wk2Lk184ZQERKv;J#*4KafsgOBcGpLUAGb<58q_G}L7<tBHFhR}3tVuv1
z!leOUSw@u1!RF^j5^U+yql3c!I$sdX#hdr|M+V;vXx8E%xBu>PMd^cV(6>(t597W<
zQ@+eC(ke&E5=UriU!}SjWX_JzxeTqfF^D#TK+x7S9F&CELb~q5jggWv+b+kbjyoU4
zu8>#9LybckySYI@&K$AR^*A7q>`x`X?y2A42vY4M?5s8Ym|)Nf*d|6S4DRR`mZ-ay
zII917_7JT04X}I@n|7d$*|KtgLVPdFeRMXo#Yk=Kvv;qfL=%EpxFUMwIFsbETs^Wk
z4i4vq?g1nX&A5jm%oyMke1oxUD7|i{LWYzyQNL%KrN2*9S|*hq6f~!&OS5{}pmhR#
z)yaFOLUn%dpoTAd<lW_#xy{B0Yt&YRV5N`jQZCK3*tv~IZy{uISN_?JU75l%uu+wI
z`CSpN%)=Bzdox`zh%gcz&E^u9=psDREyOfwa5(14U0`1bCz?xV5?U;kh1pw#`+-J`
zX>&S`tU8!lZs3C2XY18UotHyY-M0OLMz*gP2C(nLCrb)u#zMz0L}nlCn$AxL)mj*}
zfvp`=*TyuTZ8%f=>=FZX`SD2m%*ITN>Z-hvY?KjxT5Wnk$lku0N!Uvi%m0|jC&hJY
zE9d>`qStK@==rqF`)>Z}iF+aIZf`jlyAZjXFV=AfF0^WDV#doq&Ma=vciOjkm1*r7
z^N9oOejXczg{r8prcdUMPl=4|j=mSgUpqzV#5~3$4=LbIL`*+_5aC;A3kXZeNCdV@
zQ~a#=;NiEI#IgNO{Mx6<FMAr%kA&&Ss=5bwPIEmT<=(zT2RYw|vgv3M+%~Iw(A=vW
z*5fBfL=gWx3|mtO=2SSIdu92w{i4L-Q7BDBtsTG(LQ8maMkj~nYm#$=e4Vg&<6_-M
z9fy7g6sNDaE2sPOwD)s&TwxBL6Y4?NRKNyezI|0)^GxCo>3l+CyH2tt$~LhH!7j2Q
zn9-3fUh{_S-g;{O0hadgIVQ-vy8JGxLL1y|+AHxzU4tuAtN?b#mL*x)@aQ=G^p)Av
zxLmO&UXXgeqX2Pe#2v5uAn)=@uKB?V8F5!zXJQF9mcy<E_!QM3OU72}rnUj$en+gI
z+{}BgA9Zu;UdOJ1PZj}pRvKlvQTIUhX(5MU`1JUo<!3r8qIkzA)$#i}0h^f(TuE}L
z{ZPh+*j_~l$oq~)t&Lf@RKjzP=9zqEm*b=YLO6a;opBoD@u&K=hI%ULmfRr6X_DaZ
zbFX6%Xv2!RIb-diXNlg!c>bxumag)(($Y?%9uK1iD;k7lMckW*AAop`Py2EA4#-At
zluKuJej8z<JcVtEk_(|jWe6bEPx{0cbPfv;h?9Sd;Z}4sKe!$hcu`$U7Dm<AfL9uK
zF}4`W>y&A+%%$!s!U2g>4secb%N2f3i+w>10$HHVBN<3Y4i<i~V5OH4^>8m@#1yrk
zM)r~|Y<6yzxc#~)DZJWte4GjRZ>W#WvLzwb!N!0Av2WO=?sSLD7y;`XBEsfj)kxGi
z<vydl|JOq*m(#2IIQj#C<B}p(+jQ?K>UsDAxq|M@G5cs-ccQupd##w=L?SWzl4CIC
zChf~Sg}ul^Y4BTs2K*E{$+%MVy3a@@MuKtnFMm!dMn5BATG<S#-yB@tGf9PqI?Rj<
zTvbe|tfEln1Id^m{U~ys<ggH0+eu4_a+wKF$<39BcCh|Y(j{pk!xW<lQpt|=#c|6r
z5aK3k{MEvlj&1>A{qFk>vV>uauLIi%9!PY&W{n)5%689mQM-xZTEywjIIoGGl$?pm
z)uIRE^SS9FAi5O3v+;QAleqO`?aK29<6?Nm3|1(K!S*BevdwCkMFZS5t5~M69#Lt!
zHIF+4sKQ9DqxS`x-LZ;^nUW;8L>oP$!Hdw0)duS>F-TPC?#~rr=Lw#Cx)?#UyB{Y5
z->rH5vZ~?R_Gq-br#-GrI2X+FmIR+{rY4ut_O9jUYIc0qBL{ZOqlJ;)_t)p!0!j3~
zu4tf(Tkkg*)wsESj-{p1-A%WClwm}l|9HUNH!LXJ(arbX9AB8ArGkB#eVs(ay@flV
zUtZ)obNace>2o2WX^I#t2^U?1TZY;>mYNf9me=9hC?NyNXtf@J&V%(-(n`Nq<v&7i
zgNitC3#`kO=)PMEllrx?$Thwq1+!Jl)V7*fJ&L8ztmb)S>UR`1y?|HQOrv%A)^!HK
zC<k~%D22|Ps3c>sdZdKhct(_?zrTBu{TC^{<L*GKA0?X6R?O$ME278N4-4Bb&QH%Z
z^H>@{pgr7z9Rgpp%kvYSNhSjMlJP=XZSv#GxbCI6WpkPyMWe=1%hmV%tSRwrtk<hE
zE&^9%=gZ%w#gM)Oh+e55$Jm|vB;A>Gj-41>wb$2@RF>pL?~6RU+kOy59}@TW+Rsf1
zG8^FGS!zZ%sI-1OV|^8Dnxl|tf)98Z2))JOj+pN|*P1%jgl8m-Hg9a*=rdeHMzto>
zQIBJXNOF5Fp#~ut6Qf>RWM#rhi5Zt(Y`~6#0C@pp>L-_<or6Bkj)s(YE~iLk0e$vm
zW|LNNN_sCGy{O(PPdmaPH%ZCF{N~VmgV-RJbrBtPf7{;0^PpBYm7%s*N7fc3-Fz|?
z9SN@)ko+#NzEtj#26k?iFh`xnpLH`+vV8OlK(iVVow26H^W(+61J$o1;c`>%Ncb{l
zK~p3Nez&{@xX68GbX+_)>Z+j@Wo+6)1bk`nZB;>lWKfi|tqB)$okE-`pS*E1FeZ;E
zo0XAq9U9XY7&JS26u!96cOw-N=)S`>18*)letwVgRNDd%X6tfCqQuCBLabnvu2Fdz
zeJFF0>wyqe`QoC&9NB#k2!ZRr5y!gc$`T)iic-oXA>|25FRyC-7*h8`$C7>^u8wY&
zf~4ncw$s-9wxeb_u%cu^w>^AoUi}Qx+b^!k^hC{U5%R&GlZI<w(xOa98EWN7tnoTv
zG?K4iY^c)BZA&5U==duzKVW!QowcmjyA5=GbI+^$D5Y&x9NN)%FJ4P9BwP?N9B*!t
zGy5jJ(8(#n<lPB6=sq{DI@wwnYAB))U&c1<G&xY+G8|rRA}B73T4R}0WnB9nKQnW*
zDsgKMsLYJ3p4{2;_{m%PtEpqGwmwa_*zFQiO2SAOr`-atTQ-WMxLY+Y@k(>b!b{*h
z;b<ckI5d$gqQl*^cj2ze?B>EM>ey-Rv{bsozMSd&Zu;GV#*q8+%Dh3z{+dcwe<-jl
z7<<s-@QSIwAHJ8<B5HqU-SA0RDJ}$KqvC4`^^_(esVrJ2Lg*ZLQg

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