From 655395f0b860cb24c7314272e7ffd2684f726efe Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sat, 7 Jan 2023 13:49:27 +0100
Subject: [PATCH] CMake updates for SDL3
---
.editorconfig | 9 +
.github/workflows/main.yml | 45 ++--
.gitmodules | 3 +
CMakeLists.txt | 227 +++++++++---------
SDL3_mixer.pc.in | 13 -
.../pkg-support/cmake/sdl2_mixer-config.cmake | 76 ------
....cmake => sdl3_mixer-config-version.cmake} | 10 +-
.../pkg-support/cmake/sdl3_mixer-config.cmake | 78 ++++++
.../resources/CMake/sdl2_mixer-config.cmake | 64 -----
....cmake => sdl3_mixer-config-version.cmake} | 6 +-
.../resources/CMake/sdl3_mixer-config.cmake | 66 +++++
build-scripts/android-prefab.sh | 42 ++--
cmake/Findgme.cmake | 36 +++
cmake/Findlibxmp-lite.cmake | 1 -
cmake/PrivateSdlFunctions.cmake | 63 ++---
.../SDL3_mixerConfig.cmake.in | 2 +
cmake/sdl3-mixer.pc.in | 13 +
external/libgme | 1 +
.../cmake/sdl2_mixer-config-version.cmake | 19 --
.../pkg-support/cmake/sdl2_mixer-config.cmake | 22 --
.../cmake/sdl3_mixer-config-version.cmake | 19 ++
.../pkg-support/cmake/sdl3_mixer-config.cmake | 22 ++
sdl3_mixer-config-version.cmake.in | 12 -
sdl3_mixer-config.cmake.in | 147 ------------
src/codecs/music_wav.c | 4 +-
25 files changed, 439 insertions(+), 561 deletions(-)
create mode 100644 .editorconfig
delete mode 100644 SDL3_mixer.pc.in
delete mode 100644 VisualC/pkg-support/cmake/sdl2_mixer-config.cmake
rename VisualC/pkg-support/cmake/{sdl2_mixer-config-version.cmake => sdl3_mixer-config-version.cmake} (82%)
create mode 100644 VisualC/pkg-support/cmake/sdl3_mixer-config.cmake
delete mode 100644 Xcode/pkg-support/resources/CMake/sdl2_mixer-config.cmake
rename Xcode/pkg-support/resources/CMake/{sdl2_mixer-config-version.cmake => sdl3_mixer-config-version.cmake} (94%)
create mode 100644 Xcode/pkg-support/resources/CMake/sdl3_mixer-config.cmake
create mode 100644 cmake/Findgme.cmake
rename SDL3_mixerConfig.cmake.in => cmake/SDL3_mixerConfig.cmake.in (98%)
create mode 100644 cmake/sdl3-mixer.pc.in
create mode 160000 external/libgme
delete mode 100644 mingw/pkg-support/cmake/sdl2_mixer-config-version.cmake
delete mode 100644 mingw/pkg-support/cmake/sdl2_mixer-config.cmake
create mode 100644 mingw/pkg-support/cmake/sdl3_mixer-config-version.cmake
create mode 100644 mingw/pkg-support/cmake/sdl3_mixer-config.cmake
delete mode 100644 sdl3_mixer-config-version.cmake.in
delete mode 100644 sdl3_mixer-config.cmake.in
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000..2e270580
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,9 @@
+root = true
+
+[*]
+indent_style = space
+charset = utf-8
+end_of_line = lf
+indent_size = 4
+insert_final_newline = true
+trim_trailing_whitespace = true
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index d794d3e8..709f7864 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -15,15 +15,15 @@ jobs:
fail-fast: false
matrix:
platform:
- - { name: Windows (MSVC+CMake), os: windows-2019, shell: sh, cmake: '-DSDL2MIXER_VENDORED=ON -GNinja', msvc: 1, shared: 1, static: 0 }
+ - { name: Windows (MSVC+CMake), os: windows-2019, shell: sh, cmake: '-DSDL3MIXER_VENDORED=ON -GNinja', msvc: 1, shared: 1, static: 0 }
- { name: Windows (mingw32+autotools), os: windows-latest, shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, shared: 1, static: 1 }
- { name: Windows (mingw64+CMake), os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64, shared: 1, static: 0,
- cmake: '-DSDL2MIXER_VENDORED=OFF -G "Ninja Multi-Config"' }
+ cmake: '-DSDL3MIXER_VENDORED=OFF -G "Ninja Multi-Config"' }
- { name: Linux (autotools), os: ubuntu-20.04, shell: sh, shared: 1, static: 1}
- - { name: Linux (CMake), os: ubuntu-20.04, shell: sh, cmake: '-DSDL2MIXER_VENDORED=ON -GNinja', shared: 1, static: 0 }
- - { name: 'Linux (CMake, static)', os: ubuntu-20.04, shell: sh, cmake: '-DSDL2MIXER_VENDORED=ON -DBUILD_SHARED_LIBS=OFF -GNinja', shared: 0, static: 1 }
+ - { name: Linux (CMake), os: ubuntu-20.04, shell: sh, cmake: '-DSDL3MIXER_VENDORED=ON -GNinja', shared: 1, static: 0 }
+ - { name: 'Linux (CMake, static)', os: ubuntu-20.04, shell: sh, cmake: '-DSDL3MIXER_VENDORED=ON -DBUILD_SHARED_LIBS=OFF -GNinja', shared: 0, static: 1 }
- { name: Macos (autotools), os: macos-latest, shell: sh, shared: 1, static: 1 }
- - { name: Macos (CMake), os: macos-latest, shell: sh, cmake: '-DSDL2MIXER_VENDORED=ON -GNinja', shared: 1, static: 0 }
+ - { name: Macos (CMake), os: macos-latest, shell: sh, cmake: '-DSDL3MIXER_VENDORED=ON -GNinja', shared: 1, static: 0 }
steps:
@@ -33,12 +33,13 @@ jobs:
with:
msystem: ${{ matrix.platform.msystem }}
install: >-
- ${{ matrix.platform.msys-env }}-SDL2
+ ${{ matrix.platform.msys-env }}-SDL3
${{ matrix.platform.msys-env }}-autotools
${{ matrix.platform.msys-env }}-cmake
${{ matrix.platform.msys-env }}-gcc
${{ matrix.platform.msys-env }}-flac
${{ matrix.platform.msys-env }}-fluidsynth
+ ${{ matrix.platform.msys-env }}-libgme
${{ matrix.platform.msys-env }}-libvorbis
${{ matrix.platform.msys-env }}-libxmp
${{ matrix.platform.msys-env }}-mpg123
@@ -50,7 +51,7 @@ jobs:
if: runner.os == 'macOS'
run: |
brew install \
- sdl2 \
+ sdl3 \
autoconf \
automake \
libtool \
@@ -58,6 +59,7 @@ jobs:
pkg-config \
flac \
fluidsynth \
+ game-music-emu \
libvorbis \
libxmp \
mpg123 \
@@ -72,9 +74,10 @@ jobs:
autoconf \
automake \
cmake \
- libsdl2-dev \
+ libsdl3-dev \
libflac-dev \
libfluidsynth-dev \
+ libgme-dev \
libmpg123-dev \
libopusfile-dev \
libvorbis-dev \
@@ -93,7 +96,7 @@ jobs:
run: |
echo "::group::Downloading SDL"
.github/fetch_sdl_vc.ps1
- echo "SDL2_DIR=$Env:GITHUB_WORKSPACE/SDL2-devel-VC" >> $Env:GITHUB_ENV
+ echo "SDL3_DIR=$Env:GITHUB_WORKSPACE/SDL3-devel-VC" >> $Env:GITHUB_ENV
echo "::endgroup::"
echo "::group::Downloading yasm"
.github/fetch_yasm.ps1
@@ -116,7 +119,7 @@ jobs:
- name: Setup (CMake)
if: ${{ matrix.platform.cmake && !matrix.platform.msystem && !matrix.platform.msvc }}
- uses: jwlawson/actions-setup-cmake@v1.12
+ uses: jwlawson/actions-setup-cmake@v1.13.1
with:
cmake-version: '3.16'
- name: Configure (CMake)
@@ -125,15 +128,17 @@ jobs:
set -- \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_BUILD_TYPE=Release \
- -DSDL2MIXER_FLAC=ON \
- -DSDL2MIXER_FLAC_LIBFLAC=ON \
- -DSDL2MIXER_MOD_XMP=ON \
- -DSDL2MIXER_MP3_MPG123=ON \
- -DSDL2MIXER_OPUS=ON \
- -DSDL2MIXER_VORBIS=VORBISFILE \
+ -DSDL3MIXER_FLAC=ON \
+ -DSDL3MIXER_FLAC_LIBFLAC=ON \
+ -DSDL3MIXER_GME=ON \
+ -DSDL3MIXER_MOD_XMP=ON \
+ -DSDL3MIXER_MP3_MPG133=ON \
+ -DSDL3MIXER_OPUS=ON \
+ -DSDL3MIXER_VORBIS=VORBISFILE \
+ -DSDL3MIXER_WERROR=ON \
-DCMAKE_INSTALL_PREFIX=prefix_cmake \
${NULL+}
-
+
cmake -B build \
"$@" \
${{ matrix.platform.cmake }}
@@ -147,7 +152,7 @@ jobs:
set -eu
rm -fr prefix_cmake
cmake --install build/ --config Release
- echo "SDL2_mixer_DIR=$(pwd)/prefix_cmake" >> $GITHUB_ENV
+ echo "SDL3_mixer_DIR=$(pwd)/prefix_cmake" >> $GITHUB_ENV
( cd prefix_cmake; find . ) | LC_ALL=C sort -u
- name: Configure (Autotools)
@@ -173,14 +178,14 @@ jobs:
parallel="$(getconf _NPROCESSORS_ONLN)"
rm -rf prefix_autotools
make -j"${parallel}" -C build-autotools install V=1
- echo "SDL2_mixer_DIR=$(pwd)/prefix_autotools" >> $GITHUB_ENV
+ echo "SDL3_mixer_DIR=$(pwd)/prefix_autotools" >> $GITHUB_ENV
( cd prefix_autotools; find ) | LC_ALL=C sort -u
- name: Verify CMake configuration files
run: |
cmake -S cmake/test -B cmake_config_build \
-DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_PREFIX_PATH="${{ env.SDL2_mixer_DIR }};${{ env.SDL2_DIR }}" \
+ -DCMAKE_PREFIX_PATH="${{ env.SDL3_mixer_DIR }};${{ env.SDL3_DIR }}" \
-DTEST_SHARED=${{ matrix.platform.shared }} \
-DTEST_STATIC=${{ matrix.platform.static }}
cmake --build cmake_config_build --verbose --config Release
diff --git a/.gitmodules b/.gitmodules
index 78669f4b..695951e7 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -34,3 +34,6 @@
path = external/wavpack
url = https://github.com/libsdl-org/wavpack.git
branch = 5.6.0-sdl
+[submodule "external/libgme"]
+ path = external/libgme
+ url = https://github.com/libsdl-org/game-music-emu.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 04e46a5e..d8314a3d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,18 +8,18 @@ set(MINOR_VERSION 0)
set(MICRO_VERSION 0)
set(SDL_REQUIRED_VERSION 3.0.0)
-include(PrivateSdlFunctions)
-sdl_calculate_derived_version_variables()
-
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
message(FATAL_ERROR "Prevented in-tree built. Please create a build directory outside of the SDL_mixer source code and call cmake from there")
endif()
project(SDL3_mixer
LANGUAGES C
- VERSION "${FULL_VERSION}"
+ VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}"
)
+include(PrivateSdlFunctions)
+sdl_calculate_derived_version_variables(${MAJOR_VERSION} ${MINOR_VERSION} ${MICRO_VERSION})
+
message(STATUS "Configuring ${PROJECT_NAME} ${PROJECT_VERSION}")
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
@@ -38,11 +38,6 @@ if(POLICY CMP0112)
cmake_policy(SET CMP0112 NEW)
endif()
-# Set defaults preventing destination file conflicts
-set(SDL3MIXER_DEBUG_POSTFIX "d"
- CACHE STRING "Name suffix for debug builds")
-mark_as_advanced(SDL3MIXER_DEBUG_POSTFIX)
-
# Assume MSVC projects don't have a package manager and need vendored dependencies (by default).
# Most other platforms have some kind of package manager.
# FIXME: consider a package manager such as conan/vcpkg instead of vendoring
@@ -60,12 +55,10 @@ include(GNUInstallDirs)
option(CMAKE_POSITION_INDEPENDENT_CODE "Build static libraries with -fPIC" ON)
option(BUILD_SHARED_LIBS "Build the library as a shared library" ON)
-# Save BUILD_SHARED_LIBS variable as soon as possible
-set(SDL3MIXER_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
-
option(SDL3MIXER_INSTALL "Enable SDL3mixer install target" ${SDL3MIXER_ROOTPROJECT})
option(SDL3MIXER_DEPS_SHARED "Default value for loading dependencies dynamically" ON)
option(SDL3MIXER_VENDORED "Use vendored third-party libraries" ${vendored_default})
+option(SDL3MIXER_WERROR "Treat warnings as errors" OFF)
option(SDL3MIXER_SAMPLES "Build the SDL3_mixer sample program(s)" ${SDL3MIXER_SAMPLES_DEFAULT})
cmake_dependent_option(SDL3MIXER_SAMPLES_INSTALL "Install the SDL3_mixer sample program(s)" OFF "SDL3MIXER_SAMPLES;SDL3MIXER_INSTALL" OFF)
@@ -84,6 +77,9 @@ cmake_dependent_option(SDL3MIXER_FLAC_LIBFLAC_SHARED "Dynamically load LIBFLAC"
cmake_dependent_option(SDL3MIXER_FLAC_DRFLAC "Enable FLAC music using drflac" ON SDL3MIXER_FLAC OFF)
+option(SDL3MIXER_GME "Support loading GME music via game-music-emu" OFF)
+option(SDL3MIXER_GME_SHARED "Dynamically load libgme" "${SDL3MIXER_DEPS_SHARED}")
+
option(SDL3MIXER_MOD "Support loading MOD music" ON)
cmake_dependent_option(SDL3MIXER_MOD_MODPLUG "Support loading MOD music via modplug" OFF SDL3MIXER_MOD OFF)
@@ -172,6 +168,9 @@ else()
set(SDL3MIXER_OGG FALSE)
endif()
+# Save BUILD_SHARED_LIBS variable
+set(SDL3MIXER_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
+
if(SDL3MIXER_BUILD_SHARED_LIBS)
set(sdl3_mixer_export_name SDL3_mixer)
set(sdl3_mixer_install_name_infix shared)
@@ -182,7 +181,23 @@ else()
set(sdl3_target_name SDL3::SDL3-static)
endif()
-sdl_find_sdl3(${sdl3_target_name} ${SDL_REQUIRED_VERSION})
+if(NOT TARGET ${sdl3_target_name})
+ find_package(SDL3 ${SDL_REQUIRED_VERSION} REQUIRED)
+endif()
+
+add_library(sdl3mixer_build_options INTERFACE)
+if(MSVC)
+ target_compile_options(sdl3mixer_build_options INTERFACE /W2)
+else()
+ target_compile_options(sdl3mixer_build_options INTERFACE -Wall -Wextra)
+endif()
+if(SDL3MIXER_WERROR)
+ if(MSVC)
+ target_compile_options(sdl3mixer_build_options INTERFACE /WX)
+ else()
+ target_compile_options(sdl3mixer_build_options INTERFACE -Werror)
+ endif()
+endif()
set(BUILD_SHARED_LIBS ${SDL3MIXER_BUILD_SHARED_LIBS})
add_library(SDL3_mixer
@@ -194,6 +209,7 @@ add_library(SDL3_mixer
src/codecs/music_drmp3.c
src/codecs/music_flac.c
src/codecs/music_fluidsynth.c
+ src/codecs/music_gme.c
src/codecs/music_modplug.c
src/codecs/music_mpg123.c
src/codecs/music_nativemidi.c
@@ -229,6 +245,7 @@ target_compile_definitions(SDL3_mixer PRIVATE
SDL_BUILD_MICRO_VERSION=${MICRO_VERSION}
)
target_link_libraries(SDL3_mixer PRIVATE $<BUILD_INTERFACE:${sdl3_target_name}>)
+target_link_libraries(SDL3_mixer PRIVATE $<BUILD_INTERFACE:sdl3mixer_build_options>)
if(WIN32 AND BUILD_SHARED_LIBS)
target_sources(SDL3_mixer PRIVATE
version.rc
@@ -240,56 +257,36 @@ set_target_properties(SDL3_mixer PROPERTIES
C_VISIBILITY_PRESET "hidden"
)
if(NOT ANDROID)
- set_target_properties(SDL3_mixer PROPERTIES
- DEBUG_POSTFIX "${SDL3MIXER_DEBUG_POSTFIX}"
- )
if(APPLE)
# the SOVERSION property corresponds to the compatibility version and VERSION corresponds to the current version
# https://cmake.org/cmake/help/latest/prop_tgt/SOVERSION.html#mach-o-versions
set_target_properties(SDL3_mixer PROPERTIES
- SOVERSION "${DYLIB_COMPATIBILITY_VERSION}"
+ SOVERSION "${DYLIB_COMPAT_VERSION}"
VERSION "${DYLIB_CURRENT_VERSION}"
)
else()
set_target_properties(SDL3_mixer PROPERTIES
- SOVERSION "${LT_MAJOR}"
- VERSION "${LT_VERSION}"
+ SOVERSION "${SO_VERSION_MAJOR}"
+ VERSION "${SO_VERSION}"
)
endif()
endif()
-if(SDL3MIXER_BUILD_SHARED_LIBS AND (APPLE OR (UNIX AND NOT ANDROID)))
- add_custom_command(TARGET SDL3_mixer POST_BUILD
- COMMAND "${CMAKE_COMMAND}" -E create_symlink "$<TARGET_SONAME_FILE_NAME:SDL3_mixer>" "libSDL3_mixer$<$<CONFIG:Debug>:${SDL3MIXER_DEBUG_POSTFIX}>$<TARGET_FILE_SUFFIX:SDL3_mixer>"
- # BYPRODUCTS "libSDL3_mixer$<$<CONFIG:Debug>:${SDL3MIXER_DEBUG_POSTFIX}>$<TARGET_FILE_SUFFIX:SDL3_mixer>" # Needs CMake 3.20
- WORKING_DIRECTORY "${PROJECT_BINARY_DIR}"
- )
-endif()
if(SDL3MIXER_BUILD_SHARED_LIBS)
- if(WIN32 OR OS2)
+ if(WIN32)
set_target_properties(SDL3_mixer PROPERTIES
PREFIX ""
)
endif()
- if(OS2)
- # OS/2 doesn't support a DLL name longer than 8 characters.
- set_target_properties(SDL3_mixer PROPERTIES
- OUTPUT_NAME "SDL3mix"
- )
- elseif(UNIX AND NOT ANDROID)
- set_target_properties(SDL3_mixer PROPERTIES
- OUTPUT_NAME "SDL3_mixer-${LT_RELEASE}"
- )
- endif()
else()
- if(MSVC OR (WATCOM AND (WIN32 OR OS2)))
+ if(MSVC)
set_target_properties(SDL3_mixer PROPERTIES
OUTPUT_NAME "SDL3_mixer-static"
)
endif()
endif()
+# Use `Compatible Interface Properties` to ensure a shared SDL3_mixer is linked to a shared SDL3 library
if(SDL3MIXER_BUILD_SHARED_LIBS)
- # Use `Compatible Interface Properties` to ensure a shared SDL3_mixer is linked to a shared SDL3 library
set_property(TARGET SDL3_mixer PROPERTY INTERFACE_SDL3_SHARED ${SDL3MIXER_BUILD_SHARED_LIBS})
set_property(TARGET SDL3_mixer APPEND PROPERTY COMPATIBLE_INTERFACE_BOOL SDL3_SHARED)
endif()
@@ -343,7 +340,7 @@ endif()
if(SDL3MIXER_OPUS)
target_compile_definitions(SDL3_mixer PRIVATE MUSIC_OPUS)
if(SDL3MIXER_VENDORED)
- # vendored libogg alread handled
+ # vendored libogg already handled
if(NOT TARGET ogg)
message(FATAL_ERROR "ogg target not present")
endif()
@@ -413,7 +410,7 @@ endif()
if(SDL3MIXER_VORBIS_TREMOR)
target_compile_definitions(SDL3_mixer PRIVATE MUSIC_OGG OGG_USE_TREMOR)
if(SDL3MIXER_VENDORED)
- # vendored libogg alread handled
+ # vendored libogg already handled
if(NOT TARGET ogg)
message(FATAL_ERROR "ogg target not present")
endif()
@@ -464,7 +461,7 @@ endif()
if(SDL3MIXER_VORBIS_VORBISFILE)
target_compile_definitions(SDL3_mixer PRIVATE MUSIC_OGG)
if(SDL3MIXER_VENDORED)
- # vendored libogg alread handled
+ # vendored libogg already handled
if(NOT TARGET ogg)
message(FATAL_ERROR "ogg target not present")
endif()
@@ -508,7 +505,7 @@ endif()
if(SDL3MIXER_FLAC_LIBFLAC)
target_compile_definitions(SDL3_mixer PRIVATE MUSIC_FLAC_LIBFLAC)
if(SDL3MIXER_VENDORED)
- # vendored libogg alread handled
+ # vendored libogg already handled
if(NOT TARGET ogg)
message(FATAL_ERROR "ogg target not present")
endif()
@@ -557,6 +554,47 @@ if(SDL3MIXER_FLAC_DRFLAC)
target_compile_definitions(SDL3_mixer PRIVATE MUSIC_FLAC_DRFLAC)
endif()
+if(SDL3MIXER_GME)
+ target_compile_definitions(SDL3_mixer PRIVATE MUSIC_GME)
+ if(SDL3MIXER_VENDORED)
+ set(BUILD_SHARED_LIBS "${SDL3MIXER_GME_SHARED}")
+ set(ENABLE_UBSAN OFF CACHE BOOL "UB sanitizer")
+ set(BUILD_FRAMEWORK OFF CACHE BOOL "macos framework")
+ set(GME_ZLIB OFF CACHE BOOL "GME supports compressed formats")
+ message(STATUS "Using vendored libgme")
+ sdl_check_project_in_subfolder(external/libgme libgme SDL3MIXER_VENDORED)
+ add_subdirectory(external/libgme EXCLUDE_FROM_ALL)
+ add_library(gme::gme ALIAS gme)
+ if(SDL3MIXER_GME_SHARED)
+ list(APPEND INSTALL_EXTRA_TARGETS gme)
+ endif()
+ if(NOT SDL3MIXER_GME_SHARED)
+ list(APPEND PC_LIBS -l$<TARGET_FILE_BASE_NAME:gme>)
+ endif()
+ else()
+ message(STATUS "Using system libgme")
+ find_package(gme REQUIRED)
+ if(NOT SDL3MIXER_GME_SHARED)
+ list(APPEND PC_REQUIRES libgme)
+ endif()
+ endif()
+ if(SDL3MIXER_GME_SHARED)
+ target_include_directories(SDL3_mixer PRIVATE
+ $<TARGET_PROPERTY:gme::gme,INCLUDE_DIRECTORIES>
+ $<TARGET_PROPERTY:gme::gme,INTERFACE_INCLUDE_DIRECTORIES>
+ $<TARGET_PROPERTY:gme::gme,INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>
+ )
+ target_get_dynamic_library(dynamic_gme gme::gme)
+ message(STATUS "Dynamic libgme: ${dynamic_gme}")
+ target_compile_definitions(SDL3_mixer PRIVATE "GME_DYNAMIC=\"${dynamic_gme}\"")
+ if(SDL3MIXER_VENDORED)
+ add_dependencies(SDL3_mixer gme::gme)
+ endif()
+ else()
+ target_link_libraries(SDL3_mixer PRIVATE gme::gme)
+ endif()
+endif()
+
if(SDL3MIXER_MOD_MODPLUG)
target_compile_definitions(SDL3_mixer PRIVATE MUSIC_MOD_MODPLUG)
if(SDL3MIXER_VENDORED)
@@ -799,6 +837,9 @@ if(SDL3MIXER_WAVPACK)
endif()
endif()
+# Restore BUILD_SHARED_LIBS
+set(BUILD_SHARED_LIBS ${SDL3MIXER_BUILD_SHARED_LIBS})
+
if(SDL3MIXER_INSTALL)
install(
TARGETS SDL3_mixer
@@ -806,7 +847,6 @@ if(SDL3MIXER_INSTALL)
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT devel
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT library
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT library
- PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/SDL3" COMPONENT devel
)
install(FILES
"${CMAKE_CURRENT_SOURCE_DIR}/include/SDL3/SDL_mixer.h"
@@ -823,89 +863,65 @@ if(SDL3MIXER_INSTALL)
)
endif()
- ##### export files #####
if(WIN32 AND NOT MINGW)
- set(SDLMIXER_INSTALL_CMAKEDIR_DEFAULT "cmake")
+ set(SDL3MIXER_INSTALL_CMAKEDIR_ROOT_DEFAULT "cmake")
else()
- set(SDLMIXER_INSTALL_CMAKEDIR_DEFAULT "${CMAKE_INSTALL_LIBDIR}/cmake/SDL3_mixer")
+ set(SDL3MIXER_INSTALL_CMAKEDIR_ROOT_DEFAULT "${CMAKE_INSTALL_LIBDIR}/cmake")
endif()
- set(SDLMIXER_INSTALL_CMAKEDIR "${SDLMIXER_INSTALL_CMAKEDIR_DEFAULT}" CACHE STRING "Location where to install SDL3_mixerConfig.cmake")
+ set(SDL3MIXER_INSTALL_CMAKEDIR_ROOT "${SDL3MIXER_INSTALL_CMAKEDIR_ROOT_DEFAULT}" CACHE STRING "Root folder where to install SDL3Config.cmake related files (SDL3 subfolder for MSVC projects)")
- configure_package_config_file(SDL3_mixerConfig.cmake.in SDL3_mixerConfig.cmake
- INSTALL_DESTINATION "${SDLMIXER_INSTALL_CMAKEDIR}"
+ if(WIN32 AND NOT MINGW)
+ set(SDL3MIXER_INSTALL_CMAKEDIR "${SDL3MIXER_INSTALL_CMAKEDIR_ROOT}")
+ set(LICENSES_PREFIX "licenses/SDL3_mixer")
+ else()
+ set(SDL3MIXER_INSTALL_CMAKEDIR "${SDL3MIXER_INSTALL_CMAKEDIR_ROOT}/SDL3_mixer")
+ set(LICENSES_PREFIX "${CMAKE_INSTALL_DATAROOTDIR}/licenses/SDL3_mixer")
+ endif()
+
+ configure_package_config_file(cmake/SDL3_mixerConfig.cmake.in SDL3_mixerConfig.cmake
+ INSTALL_DESTINATION "${SDL3MIXER_INSTALL_CMAKEDIR}"
)
write_basic_package_version_file("${PROJECT_BINARY_DIR}/SDL3_mixerConfigVersion.cmake"
- VERSION ${FULL_VERSION}
COMPATIBILITY AnyNewerVersion
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/SDL3_mixerConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/SDL3_mixerConfigVersion.cmake"
- DESTINATION "${SDLMIXER_INSTALL_CMAKEDIR}"
+ cmake/FindFLAC.cmake
+ cmake/FindFluidSynth.cmake
+ cmake/Findgme.cmake
+ cmake/Findlibxmp.cmake
+ cmake/Findlibxmp-lite.cmake
+ cmake/Findmodplug.cmake
+ cmake/FindOpusFile.cmake
+ cmake/FindMPG123.cmake
+ cmake/FindVorbis.cmake
+ cmake/Findtremor.cmake
+ cmake/Findwavpack.cmake
+ DESTINATION "${SDL3MIXER_INSTALL_CMAKEDIR}"
COMPONENT devel
)
- if(NOT SDL3MIXER_BUILD_SHARED_LIBS)
- install(
- FILES
- cmake/FindFLAC.cmake
- cmake/FindFluidSynth.cmake
- cmake/Findlibxmp.cmake
- cmake/Findlibxmp-lite.cmake
- cmake/Findmodplug.cmake
- cmake/FindOpusFile.cmake
- cmake/FindMPG123.cmake
- cmake/FindVorbis.cmake
- cmake/Findtremor.cmake
- cmake/Findwavpack.cmake
- DESTINATION "${SDLMIXER_INSTALL_CMAKEDIR}"
- COMPONENT devel
- )
- endif()
install(EXPORT SDL3MixerTargets
FILE SDL3_mixer-${sdl3_mixer_install_name_infix}-targets.cmake
NAMESPACE SDL3_mixer::
- DESTINATION "${SDLMIXER_INSTALL_CMAKEDIR}"
+ DESTINATION "${SDL3MIXER_INSTALL_CMAKEDIR}"
COMPONENT devel
)
- set(VERSION ${FULL_VERSION})
- set(SDL_VERSION ${SDL_REQUIRED_VERSION})
- set(prefix "${CMAKE_INSTALL_PREFIX}")
- set(exec_prefix "\${prefix}")
- set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
- set(bindir "\${exec_prefix}/bin")
- set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
string(JOIN " " PC_REQUIRES ${PC_REQUIRES})
string(JOIN " " PC_LIBS ${PC_LIBS})
- configure_file(SDL3_mixer.pc.in ${CMAKE_CURRENT_BINARY_DIR}/SDL3_mixer.pc.intermediate @ONLY)
- file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/SDL3_mixer-$<CONFIG>.pc" INPUT "${CMAKE_CURRENT_BINARY_DIR}/SDL3_mixer.pc.intermediate")
+ configure_file(cmake/sdl3-mixer.pc.in sdl3-mixer.pc @ONLY)
- set(PC_DESTDIR)
if(CMAKE_SYSTEM_NAME MATCHES FreeBSD)
# FreeBSD uses ${PREFIX}/libdata/pkgconfig
set(PC_DESTDIR "libdata/pkgconfig")
else()
set(PC_DESTDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
endif()
- # Always install SDL3_mixer.pc file: libraries might be different between config modes
- install(CODE "
- # FIXME: use file(COPY_FILE) if minimum CMake version >= 3.21
- execute_process(COMMAND \"\${CMAKE_COMMAND}\" -E copy_if_different
- \"${CMAKE_CURRENT_BINARY_DIR}/SDL3_mixer-$<CONFIG>.pc\"
- \"${CMAKE_CURRENT_BINARY_DIR}/SDL3_mixer.pc\")
- file(INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${PC_DESTDIR}\"
- TYPE FILE
- FILES \"${CMAKE_CURRENT_BINARY_DIR}/SDL3_mixer.pc\")" COMPONENT devel)
-
- if(SDL3MIXER_BUILD_SHARED_LIBS AND (APPLE OR (UNIX AND NOT ANDROID)))
- install(
- FILES
- "${PROJECT_BINARY_DIR}/libSDL3_mixer$<$<CONFIG:Debug>:${SDL3MIXER_DEBUG_POSTFIX}>$<TARGET_FILE_SUFFIX:SDL3_mixer>"
- DESTINATION "${CMAKE_INSTALL_LIBDIR}"
- COMPONENT devel
- )
- endif()
+ # Always install sdl3-mixer.pc file: libraries might be different between config modes
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sdl3-mixer.pc"
+ DESTINATION "${PC_DESTDIR}" COMPONENT devel)
install(FILES "LICENSE.txt"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/${PROJECT_NAME}"
@@ -918,11 +934,6 @@ if(SDL3MIXER_SAMPLES)
add_executable(playwave playwave.c)
foreach(prog playmus playwave)
- # FIXME: mingw should be handled by SDL3::SDL3(-static) target
- if(MINGW)
- target_link_libraries(${prog} PRIVATE mingw32)
- target_link_options(${prog} PRIVATE -mwindows)
- endif()
target_link_libraries(${prog} PRIVATE SDL3_mixer::${sdl3_mixer_export_name})
target_link_libraries(${prog} PRIVATE ${sdl3_target_name})
@@ -933,13 +944,3 @@ if(SDL3MIXER_SAMPLES)
endif()
endforeach()
endif()
-
-add_library(SDL3::mixer INTERFACE IMPORTED GLOBAL)
-set_target_properties(SDL3::mixer PROPERTIES
- INTERFACE_LINK_LIBRARIES "SDL3_mixer"
-)
-if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.17")
- set_target_properties(SDL3::mixer PROPERTIES
- DEPRECATION "Use SDL3_mixer::SDL3_mixer or SDL3_mixer::SDL3_mixer-static instead"
- )
-endif()
diff --git a/SDL3_mixer.pc.in b/SDL3_mixer.pc.in
deleted file mode 100644
index b213c105..00000000
--- a/SDL3_mixer.pc.in
+++ /dev/null
@@ -1,13 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: SDL3_mixer
-Description: mixer library for Simple DirectMedia Layer
-Version: @VERSION@
-Requires: sdl3 >= @SDL_VERSION@
-Libs: -L${libdir} -lSDL3_mixer
-Cflags: -I${includedir}/SDL3
-Requires.private: @PC_REQUIRES@
-Libs.private: @PC_LIBS@
diff --git a/VisualC/pkg-support/cmake/sdl2_mixer-config.cmake b/VisualC/pkg-support/cmake/sdl2_mixer-config.cmake
deleted file mode 100644
index 7cec3cc6..00000000
--- a/VisualC/pkg-support/cmake/sdl2_mixer-config.cmake
+++ /dev/null
@@ -1,76 +0,0 @@
-# SDL2_mixer CMake configuration file:
-# This file is meant to be placed in a cmake subfolder of SDL2_mixer-devel-2.x.y-VC
-
-include(FeatureSummary)
-set_package_properties(SDL2_mixer PROPERTIES
- URL "https://www.libsdl.org/projects/SDL_mixer/"
- DESCRIPTION "SDL_mixer is a sample multi-channel audio mixer library"
-)
-
-cmake_minimum_required(VERSION 3.0)
-
-set(SDL2_mixer_FOUND TRUE)
-
-set(SDL2MIXER_VENDORED TRUE)
-
-set(SDL2MIXER_CMD FALSE)
-
-set(SDL2MIXER_FLAC_LIBFLAC FALSE)
-set(SDL2MIXER_FLAC_DRFLAC TRUE)
-
-set(SDL2MIXER_MOD TRUE)
-set(SDL2MIXER_MOD_MODPLUG TRUE)
-set(SDL2MIXER_MOD_XMP FALSE)
-set(SDL2MIXER_MOD_XMP_LITE FALSE)
-
-set(SDL2MIXER_MP3 TRUE)
-set(SDL2MIXER_MP3_DRMP3 TRUE)
-set(SDL2MIXER_MP3_MPG123 FALSE)
-
-set(SDL2MIXER_MIDI TRUE)
-set(SDL2MIXER_MIDI_FLUIDSYNTH FALSE)
-set(SDL2MIXER_MIDI_NATIVE TRUE)
-set(SDL2MIXER_MIDI_TIMIDITY TRUE)
-
-set(SDL2MIXER_OPUS TRUE)
-
-set(SDL2MIXER_VORBIS STB)
-set(SDL2MIXER_VORBIS_STB TRUE)
-set(SDL2MIXER_VORBIS_TREMOR FALSE)
-set(SDL2MIXER_VORBIS_VORBISFILE FALSE)
-
-set(SDL2MIXER_WAVE TRUE)
-
-if(CMAKE_SIZEOF_VOID_P STREQUAL "4")
- set(_sdl_arch_subdir "x86")
-elseif(CMAKE_SIZEOF_VOID_P STREQUAL "8")
- set(_sdl_arch_subdir "x64")
-else()
- unset(_sdl_arch_subdir)
- set(SDL2_mixer_FOUND FALSE)
- return()
-endif()
-
-set(_sdl2mixer_incdir "${CMAKE_CURRENT_LIST_DIR}/../include")
-set(_sdl2mixer_library "${CMAKE_CURRENT_LIST_DIR}/../lib/${_sdl_arch_subdir}/SDL2_mixer.lib")
-set(_sdl2mixer_dll "${CMAKE_CURRENT_LIST_DIR}/../lib/${_sdl_arch_subdir}/SDL2_mixer.dll")
-
-# All targets are created, even when some might not be requested though COMPONENTS.
-# This is done for compatibility with CMake generated SDL2_mixer-target.cmake files.
-
-if(NOT TARGET SDL2_mixer::SDL2_mixer)
- add_library(SDL2_mixer::SDL2_mixer SHARED IMPORTED)
- set_target_properties(SDL2_mixer::SDL2_mixer
- PROPERTIES
- INTERFACE_INCLUDE_DIRECTORIES "${_sdl2mixer_incdir}"
- IMPORTED_IMPLIB "${_sdl2mixer_library}"
- IMPORTED_LOCATION "${_sdl2mixer_dll}"
- COMPATIBLE_INTERFACE_BOOL "SDL2_SHARED"
- INTERFACE_SDL2_SHARED "ON"
- )
-endif()
-
-unset(_sdl_arch_subdir)
-unset(_sdl2mixer_incdir)
-unset(_sdl2mixer_library)
-unset(_sdl2mixer_dll)
diff --git a/VisualC/pkg-support/cmake/sdl2_mixer-config-version.cmake b/VisualC/pkg-support/cmake/sdl3_mixer-config-version.cmake
similarity index 82%
rename from VisualC/pkg-support/cmake/sdl2_mixer-config-version.cmake
rename to VisualC/pkg-support/cmake/sdl3_mixer-config-version.cmake
index 4f4fea6c..ad998996 100644
--- a/VisualC/pkg-support/cmake/sdl2_mixer-config-version.cmake
+++ b/VisualC/pkg-support/cmake/sdl3_mixer-config-version.cmake
@@ -1,14 +1,14 @@
# based on the files generated by CMake's write_basic_package_version_file
-# SDL2_mixer CMake version configuration file:
-# This file is meant to be placed in a cmake subfolder of SDL2_mixer-devel-2.x.y-VC
+# SDL3_mixer CMake version configuration file:
+# This file is meant to be placed in a cmake subfolder of SDL3_mixer-devel-3.x.y-VC
-if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/../include/SDL_mixer.h")
- message(AUTHOR_WARNING "Could not find SDL_mixer.h. This script is meant to be placed in a CMake subfolder of SDL2_mixer-devel-2.x.y-VC")
+if(NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/../include/SDL3/SDL_mixer.h")
+ message(AUTHOR_WARNING "Could not find SDL3/SDL_mixer.h. This script is meant to be placed in a CMake subfolder of SDL3_mixer-devel-3.x.y-VC")
return()
endif()
-file(READ "${CMA
(Patch may be truncated, please check the link at the top of this post.)