SDL_mixer: CMake: Use pkg-config in find modules.

From 9e36ba132d01c3f6b3d4372fda024fdd48106ac7 Mon Sep 17 00:00:00 2001
From: Pierre Wendling <[EMAIL REDACTED]>
Date: Tue, 7 Mar 2023 18:26:41 -0500
Subject: [PATCH] CMake: Use pkg-config in find modules.

This allows capturing more information such as transitive dependencies.
These hints are used as default values for the existing cache
variables, so users can still edit/overwrite them if they wish so.
---
 CMakeLists.txt                  |  9 +++++++++
 cmake/FindFLAC.cmake            | 18 +++++++++++++++---
 cmake/FindFluidSynth.cmake      | 18 +++++++++++++++---
 cmake/FindOpusFile.cmake        | 24 ++++++++++++++++++------
 cmake/FindSndFile.cmake         | 18 +++++++++++++++---
 cmake/FindVorbis.cmake          | 24 ++++++++++++++++++------
 cmake/Findgme.cmake             | 24 ++++++++++++++++++------
 cmake/Findlibxmp-lite.cmake     | 18 +++++++++++++++---
 cmake/Findlibxmp.cmake          | 18 +++++++++++++++---
 cmake/Findmodplug.cmake         | 16 +++++++++++++---
 cmake/Findmpg123.cmake          | 18 +++++++++++++++---
 cmake/Findtremor.cmake          | 18 +++++++++++++++---
 cmake/SDL3_mixerConfig.cmake.in |  1 +
 13 files changed, 182 insertions(+), 42 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 681aa192..0a325abf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,6 +38,13 @@ if(POLICY CMP0112)
     cmake_policy(SET CMP0112 NEW)
 endif()
 
+if(POLICY CMP0099)
+    # Make `INTERFACE_LINK_DIRECTORIES` a transitive usage requirement.
+    # This is needed for static dependencies which have transitive dependencies
+    # outside of compiler default search paths.
+    cmake_policy(SET CMP0099 NEW)
+endif()
+
 # 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
@@ -59,6 +66,8 @@ include(CMakeDependentOption)
 include(CMakePackageConfigHelpers)
 include(GNUInstallDirs)
 
+include(PkgConfigHelper)
+
 option(CMAKE_POSITION_INDEPENDENT_CODE "Build static libraries with -fPIC" ON)
 option(BUILD_SHARED_LIBS "Build the library as a shared library" ON)
 
diff --git a/cmake/FindFLAC.cmake b/cmake/FindFLAC.cmake
index 656ae779..d471fecf 100644
--- a/cmake/FindFLAC.cmake
+++ b/cmake/FindFLAC.cmake
@@ -1,18 +1,29 @@
 include(FindPackageHandleStandardArgs)
 
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_FLAC QUIET flac)
+
 find_library(FLAC_LIBRARY
     NAMES FLAC
+    HINTS ${PC_FLAC_LIBDIR}
 )
 
 find_path(FLAC_INCLUDE_PATH
     NAMES FLAC/all.h
+    HINTS ${PC_FLAC_INCLUDEDIR}
 )
 
-set(FLAC_COMPILE_OPTIONS "" CACHE STRING "Extra compile options of FLAC")
+if(PC_FLAC_FOUND)
+    get_flags_from_pkg_config("${FLAC_LIBRARY}" "PC_FLAC" "_flac")
+endif()
+
+set(FLAC_COMPILE_OPTIONS "${_flac_compile_options}" CACHE STRING "Extra compile options of FLAC")
+
+set(FLAC_LINK_LIBRARIES "${_flac_link_libraries}" CACHE STRING "Extra link libraries of FLAC")
 
-set(FLAC_LINK_LIBRARIES "" CACHE STRING "Extra link libraries of FLAC")
+set(FLAC_LINK_OPTIONS "${_flac_link_options}" CACHE STRING "Extra link flags of FLAC")
 
-set(FLAC_LINK_OPTIONS "" CACHE STRING "Extra link flags of FLAC")
+set(FLAC_LINK_DIRECTORIES "${_flac_link_directories}" CACHE PATH "Extra link directories of FLAC")
 
 find_package_handle_standard_args(FLAC
     REQUIRED_VARS FLAC_LIBRARY FLAC_INCLUDE_PATH
@@ -27,6 +38,7 @@ if(FLAC_FOUND)
             INTERFACE_COMPILE_OPTIONS "${FLAC_COMPILE_OPTIONS}"
             INTERFACE_LINK_LIBRARIES "${FLAC_LINK_LIBRARIES}"
             INTERFACE_LINK_OPTIONS "${FLAC_LINK_OPTIONS}"
+            INTERFACE_LINK_DIRECTORIES "${FLAC_LINK_DIRECTORIES}"
         )
     endif()
 endif()
diff --git a/cmake/FindFluidSynth.cmake b/cmake/FindFluidSynth.cmake
index 643d71e1..012fb1d2 100644
--- a/cmake/FindFluidSynth.cmake
+++ b/cmake/FindFluidSynth.cmake
@@ -1,18 +1,29 @@
 include(FindPackageHandleStandardArgs)
 
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_FLUIDSYNTH QUIET fluidsynth)
+
 find_library(FluidSynth_LIBRARY
     NAMES fluidsynth
+    HINTS ${PC_FLUIDSYNTH_LIBDIR}
 )
 
 find_path(FluidSynth_INCLUDE_PATH
     NAMES fluidsynth.h
+    HINTS ${PC_FLUIDSYNTH_INCLUDEDIR}
 )
 
-set(FluidSynth_COMPILE_OPTIONS "" CACHE STRING "Extra compile options of FluidSynth")
+if(PC_FLUIDSYNTH_FOUND)
+    get_flags_from_pkg_config("${FluidSynth_LIBRARY}" "PC_FLUIDSYNTH" "_fluidsynth")
+endif()
+
+set(FluidSynth_COMPILE_OPTIONS "${_fluidsynth_compile_options}" CACHE STRING "Extra compile options of FluidSynth")
+
+set(FluidSynth_LINK_LIBRARIES "${_fluidsynth_link_libraries}" CACHE STRING "Extra link libraries of FluidSynth")
 
-set(FluidSynth_LINK_LIBRARIES "" CACHE STRING "Extra link libraries of FluidSynth")
+set(FluidSynth_LINK_OPTIONS "${_fluidsynth_link_options}" CACHE STRING "Extra link flags of FluidSynth")
 
-set(FluidSynth_LINK_OPTIONS "" CACHE STRING "Extra link flags of FluidSynth")
+set(FluidSynth_LINK_DIRECTORIES "${_fluidsynth_link_directories}" CACHE PATH "Extra link directories of FluidSynth")
 
 find_package_handle_standard_args(FluidSynth
     REQUIRED_VARS FluidSynth_LIBRARY FluidSynth_INCLUDE_PATH
@@ -27,6 +38,7 @@ if(FluidSynth_FOUND)
             INTERFACE_COMPILE_OPTIONS "${FluidSynth_COMPILE_OPTIONS}"
             INTERFACE_LINK_LIBRARIES "${FluidSynth_LINK_LIBRARIES}"
             INTERFACE_LINK_OPTIONS "${FluidSynth_LINK_OPTIONS}"
+            INTERFACE_LINK_DIRECTORIES "${FluidSynth_LINK_DIRECTORIES}"
         )
     endif()
 endif()
diff --git a/cmake/FindOpusFile.cmake b/cmake/FindOpusFile.cmake
index 9b43392c..93be5993 100644
--- a/cmake/FindOpusFile.cmake
+++ b/cmake/FindOpusFile.cmake
@@ -1,20 +1,31 @@
 include(FindPackageHandleStandardArgs)
 
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_OPUSFILE QUIET opusfile)
+
 find_library(OpusFile_LIBRARY
     NAMES opusfile
+    HINTS ${PC_OPUSFILE_LIBDIR}
 )
 
-set(OpusFile_COMPILE_OPTIONS "" CACHE STRING "Extra compile options of opusfile")
-
-set(OpusFile_LINK_LIBRARIES "" CACHE STRING "Extra link libraries of opusfile")
-
-set(OpusFile_LINK_OPTIONS "" CACHE STRING "Extra link flags of opusfile")
-
 find_path(OpusFile_INCLUDE_PATH
     NAMES opusfile.h
     PATH_SUFFIXES opus
+    HINTS ${PC_OPUSFILE_INCLUDEDIR}
 )
 
+if(PC_OPUSFILE_FOUND)
+    get_flags_from_pkg_config("${OpusFile_LIBRARY}" "PC_OPUSFILE" "_opusfile")
+endif()
+
+set(OpusFile_COMPILE_OPTIONS "${_opusfile_compile_options}" CACHE STRING "Extra compile options of opusfile")
+
+set(OpusFile_LINK_LIBRARIES "${_opusfile_link_libraries}" CACHE STRING "Extra link libraries of opusfile")
+
+set(OpusFile_LINK_OPTIONS "${_opusfile_link_options}" CACHE STRING "Extra link flags of opusfile")
+
+set(OpusFile_LINK_DIRECTORIES "${_opusfile_link_directories}" CACHE PATH "Extra link directories of opusfile")
+
 find_package_handle_standard_args(OpusFile
     REQUIRED_VARS OpusFile_LIBRARY OpusFile_INCLUDE_PATH
 )
@@ -32,6 +43,7 @@ if (OpusFile_FOUND)
             INTERFACE_COMPILE_OPTIONS "${OpusFile_COMPILE_OPTIONS}"
             INTERFACE_LINK_LIBRARIES "${OpusFile_LINK_LIBRARIES}"
             INTERFACE_LINK_OPTIONS "${OpusFile_LINK_OPTIONS}"
+            INTERFACE_LINK_DIRECTORIES "${OpusFile_LINK_DIRECTORIES}"
         )
     endif()
 endif()
diff --git a/cmake/FindSndFile.cmake b/cmake/FindSndFile.cmake
index 1cbbbdf7..4c319165 100644
--- a/cmake/FindSndFile.cmake
+++ b/cmake/FindSndFile.cmake
@@ -1,18 +1,29 @@
 include(FindPackageHandleStandardArgs)
 
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_SNDFILE QUIET sndfile)
+
 find_library(SndFile_LIBRARY
     NAMES sndfile sndfile-1
+    HINTS ${PC_SNDFILE_LIBDIR}
 )
 
 find_path(SndFile_INCLUDE_PATH
     NAMES sndfile.h
+    HINTS ${PC_SNDFILE_INCLUDEDIR}
 )
 
-set(SndFile_COMPILE_OPTIONS "" CACHE STRING "Extra compile options of libsndfile")
+if(PC_SNDFILE_FOUND)
+    get_flags_from_pkg_config("${SndFile_LIBRARY}" "PC_SNDFILE" "_sndfile")
+endif()
+
+set(SndFile_COMPILE_OPTIONS "${_sndfile_compile_options}" CACHE STRING "Extra compile options of libsndfile")
+
+set(SndFile_LINK_LIBRARIES "${_sndfile_link_libraries}" CACHE STRING "Extra link libraries of libsndfile")
 
-set(SndFile_LINK_LIBRARIES "" CACHE STRING "Extra link libraries of libsndfile")
+set(SndFile_LINK_OPTIONS "${_sndfile_link_options}" CACHE STRING "Extra link flags of libsndfile")
 
-set(SndFile_LINK_OPTIONS "" CACHE STRING "Extra link flags of libsndfile")
+set(SndFile_LINK_DIRECTORIES "${_sndfile_link_directories}" CACHE PATH "Extra link directories of libsndfile")
 
 find_package_handle_standard_args(SndFile
     REQUIRED_VARS SndFile_LIBRARY SndFile_INCLUDE_PATH
@@ -27,6 +38,7 @@ if(SndFile_FOUND)
             INTERFACE_COMPILE_OPTIONS "${SndFile_COMPILE_OPTIONS}"
             INTERFACE_LINK_LIBRARIES "${SndFile_LINK_LIBRARIES}"
             INTERFACE_LINK_OPTIONS "${SndFile_LINK_OPTIONS}"
+            INTERFACE_LINK_DIRECTORIES "${SndFile_LINK_DIRECTORIES}"
         )
     endif()
 endif()
diff --git a/cmake/FindVorbis.cmake b/cmake/FindVorbis.cmake
index 7ad2f526..7ebcc5c3 100644
--- a/cmake/FindVorbis.cmake
+++ b/cmake/FindVorbis.cmake
@@ -1,19 +1,30 @@
 include(FindPackageHandleStandardArgs)
 
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_VORBIS QUIET vorbisfile)
+
 find_library(Vorbis_vorbisfile_LIBRARY
     NAMES vorbisfile
+    HINTS ${PC_VORBIS_LIBDIR}
 )
 
-set(Vorbis_vorbisfile_COMPILE_OPTIONS "" CACHE STRING "Extra compile options of vorbisfile")
-
-set(Vorbis_vorbisfile_LINK_LIBRARIES "" CACHE STRING "Extra link libraries of vorbisfile")
-
-set(Vorbis_vorbisfile_LINK_OPTIONS "" CACHE STRING "Extra link flags of vorbisfile")
-
 find_path(Vorbis_vorbisfile_INCLUDE_PATH
     NAMES vorbis/vorbisfile.h
+    HINTS ${PC_VORBIS_INCLUDEDIR}
 )
 
+if(PC_VORBIS_FOUND)
+    get_flags_from_pkg_config("${Vorbis_vorbisfile_LIBRARY}" "PC_VORBIS" "_vorbisfile")
+endif()
+
+set(Vorbis_vorbisfile_COMPILE_OPTIONS "${_vorbisfile_compile_options}" CACHE STRING "Extra compile options of vorbisfile")
+
+set(Vorbis_vorbisfile_LINK_LIBRARIES "${_vorbisfile_link_libraries}" CACHE STRING "Extra link libraries of vorbisfile")
+
+set(Vorbis_vorbisfile_LINK_OPTIONS "${_vorbisfile_link_options}" CACHE STRING "Extra link flags of vorbisfile")
+
+set(Vorbis_vorbisfile_LINK_DIRECTORIES "${_vorbisfile_link_directories}" CACHE PATH "Extra link directories of vorbisfile")
+
 find_package_handle_standard_args(Vorbis
     REQUIRED_VARS Vorbis_vorbisfile_LIBRARY Vorbis_vorbisfile_INCLUDE_PATH
 )
@@ -27,6 +38,7 @@ if (Vorbis_FOUND)
             INTERFACE_COMPILE_OPTIONS "${Vorbis_vorbisfile_COMPILE_OPTIONS}"
             INTERFACE_LINK_LIBRARIES "${Vorbis_vorbisfile_LINK_LIBRARIES}"
             INTERFACE_LINK_OPTIONS "${Vorbis_vorbisfile_LINK_OPTIONS}"
+            INTERFACE_LINK_DIRECTORIES "${Vorbis_vorbisfile_LINK_DIRECTORIES}"
         )
     endif()
 endif()
diff --git a/cmake/Findgme.cmake b/cmake/Findgme.cmake
index 04b338ac..e47c7ed0 100644
--- a/cmake/Findgme.cmake
+++ b/cmake/Findgme.cmake
@@ -1,19 +1,30 @@
 include(FindPackageHandleStandardArgs)
 
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_GME QUIET libgme)
+
 find_library(gme_LIBRARY
     NAMES gme
+    HINTS ${PC_GME_LIBDIR}
 )
 
-set(gme_COMPILE_OPTIONS "" CACHE STRING "Extra compile options of gme")
-
-set(gme_LINK_LIBRARIES "" CACHE STRING "Extra link libraries of gme")
-
-set(gme_LINK_OPTIONS "" CACHE STRING "Extra link flags of gme")
-
 find_path(gme_INCLUDE_PATH
     NAMES gme/gme.h
+    HINTS ${PC_GME_INCLUDEDIR}
 )
 
+if(PC_GME_FOUND)
+    get_flags_from_pkg_config("${gme_LIBRARY}" "PC_GME" "_gme")
+endif()
+
+set(gme_COMPILE_OPTIONS "${_gme_compile_options}" CACHE STRING "Extra compile options of gme")
+
+set(gme_LINK_LIBRARIES "${_gme_link_libraries}" CACHE STRING "Extra link libraries of gme")
+
+set(gme_LINK_OPTIONS "${_gme_link_options}" CACHE STRING "Extra link flags of gme")
+
+set(gme_LINK_DIRECTORIES "${_gme_link_directories}" CACHE PATH "Extra link directories of gme")
+
 find_package_handle_standard_args(gme
     REQUIRED_VARS gme_LIBRARY gme_INCLUDE_PATH
 )
@@ -31,6 +42,7 @@ if(gme_FOUND)
             INTERFACE_COMPILE_OPTIONS "${gme_COMPILE_OPTIONS}"
             INTERFACE_LINK_LIBRARIES "${gme_LINK_LIBRARIES}"
             INTERFACE_LINK_OPTIONS "${gme_LINK_OPTIONS}"
+            INTERFACE_LINK_DIRECTORIES "${gme_LINK_DIRECTORIES}"
         )
     endif()
 endif()
diff --git a/cmake/Findlibxmp-lite.cmake b/cmake/Findlibxmp-lite.cmake
index 28b5645c..b9144301 100644
--- a/cmake/Findlibxmp-lite.cmake
+++ b/cmake/Findlibxmp-lite.cmake
@@ -1,19 +1,30 @@
 include(FindPackageHandleStandardArgs)
 
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_XMPLITE QUIET libxmp-lite)
+
 find_library(libxmp_lite_LIBRARY
     NAMES xmp-lite
+    HINTS ${PC_XMPLITE_LIBDIR}
 )
 
 find_path(libxmp_lite_INCLUDE_PATH
     NAMES xmp.h
     PATH_SUFFIXES libxmp-lite
+    HINTS ${PC_XMPLITE_INCLUDEDIR}
 )
 
-set(libxmp_lite_COMPILE_OPTIONS "" CACHE STRING "Extra compile options of libxmp_lite")
+if(PC_XMPLITE_FOUND)
+    get_flags_from_pkg_config("${libxmp_lite_LIBRARY}" "PC_XMPLITE" "_libxmp_lite")
+endif()
+
+set(libxmp_lite_COMPILE_OPTIONS "${_libxmp_lite_compile_options}" CACHE STRING "Extra compile options of libxmp_lite")
+
+set(libxmp_lite_LINK_LIBRARIES "${_libxmp_lite_link_libraries}" CACHE STRING "Extra link libraries of libxmp_lite")
 
-set(libxmp_lite_LINK_LIBRARIES "" CACHE STRING "Extra link libraries of libxmp_lite")
+set(libxmp_lite_LINK_OPTIONS "${_libxmp_lite_link_options}" CACHE STRING "Extra link flags of libxmp_lite")
 
-set(libxmp_lite_LINK_OPTIONS "" CACHE STRING "Extra link flags of libxmp_lite")
+set(libxmp_lite_LINK_DIRECTORIES "${_libxmp_lite_link_directories}" CACHE PATH "Extra link directories of libxmp_lite")
 
 find_package_handle_standard_args(libxmp-lite
     REQUIRED_VARS libxmp_lite_LIBRARY libxmp_lite_INCLUDE_PATH
@@ -28,6 +39,7 @@ if(libxmp-lite_FOUND)
             INTERFACE_COMPILE_OPTIONS "${libxmp_lite_COMPILE_OPTIONS}"
             INTERFACE_LINK_LIBRARIES "${libxmp_lite_LINK_LIBRARIES}"
             INTERFACE_LINK_OPTIONS "${libxmp_lite_LINK_OPTIONS}"
+            INTERFACE_LINK_DIRECTORIES "${libxmp_lite_LINK_DIRECTORIES}"
         )
     endif()
 endif()
diff --git a/cmake/Findlibxmp.cmake b/cmake/Findlibxmp.cmake
index 56e86622..a4bb175e 100644
--- a/cmake/Findlibxmp.cmake
+++ b/cmake/Findlibxmp.cmake
@@ -1,18 +1,29 @@
 include(FindPackageHandleStandardArgs)
 
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_XMP QUIET libxmp)
+
 find_library(libxmp_LIBRARY
     NAMES xmp
+    HINTS ${PC_XMP_LIBDIR}
 )
 
 find_path(libxmp_INCLUDE_PATH
     NAMES xmp.h
+    HINTS ${PC_XMP_INCLUDEDIR}
 )
 
-set(libxmp_COMPILE_OPTIONS "" CACHE STRING "Extra compile options of libxmp")
+if(PC_XMP_FOUND)
+    get_flags_from_pkg_config("${libxmp_LIBRARY}" "PC_XMP" "_libxmp")
+endif()
+
+set(libxmp_COMPILE_OPTIONS "${_libxmp_compile_options}" CACHE STRING "Extra compile options of libxmp")
+
+set(libxmp_LINK_LIBRARIES "${_libxmp_link_libraries}" CACHE STRING "Extra link libraries of libxmp")
 
-set(libxmp_LINK_LIBRARIES "" CACHE STRING "Extra link libraries of libxmp")
+set(libxmp_LINK_OPTIONS "${_libxmp_link_options}" CACHE STRING "Extra link flags of libxmp")
 
-set(libxmp_LINK_OPTIONS "" CACHE STRING "Extra link flags of libxmp")
+set(libxmp_LINK_DIRECTORIES "${_libxmp_link_directories}" CACHE PATH "Extra link flags of libxmp")
 
 find_package_handle_standard_args(libxmp
     REQUIRED_VARS libxmp_LIBRARY libxmp_INCLUDE_PATH
@@ -27,6 +38,7 @@ if(libxmp_FOUND)
             INTERFACE_COMPILE_OPTIONS "${libxmp_COMPILE_OPTIONS}"
             INTERFACE_LINK_LIBRARIES "${libxmp_LINK_LIBRARIES}"
             INTERFACE_LINK_OPTIONS "${libxmp_LINK_OPTIONS}"
+            INTERFACE_LINK_DIRECTORIES "${libxmp_LINK_DIRECTORIES}"
         )
     endif()
 endif()
diff --git a/cmake/Findmodplug.cmake b/cmake/Findmodplug.cmake
index d453b371..af1e82ea 100644
--- a/cmake/Findmodplug.cmake
+++ b/cmake/Findmodplug.cmake
@@ -1,5 +1,8 @@
 include(FindPackageHandleStandardArgs)
 
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_MODPLUG QUIET libmodplug)
+
 find_library(modplug_LIBRARY
     NAMES modplug
 )
@@ -8,11 +11,17 @@ find_path(modplug_INCLUDE_PATH
     NAMES libmodplug/modplug.h
 )
 
-set(modplug_COMPILE_OPTIONS "" CACHE STRING "Extra compile options of modplug")
+if(PC_MODPLUG_FOUND)
+    get_flags_from_pkg_config("${modplug_LIBRARY}" "PC_MODPLUG" "_modplug")
+endif()
+
+set(modplug_COMPILE_OPTIONS "${_modplug_compile_options}" CACHE STRING "Extra compile options of modplug")
+
+set(modplug_LINK_LIBRARIES "${_modplug_link_libraries}" CACHE STRING "Extra link libraries of modplug")
 
-set(modplug_LINK_LIBRARIES "" CACHE STRING "Extra link libraries of modplug")
+set(modplug_LINK_OPTIONS "${_modplug_link_options}" CACHE STRING "Extra link flags of modplug")
 
-set(modplug_LINK_OPTIONS "" CACHE STRING "Extra link flags of modplug")
+set(modplug_LINK_DIRECTORIES "${_modplug_link_directories}" CACHE PATH "Extra link directories of modplug")
 
 find_package_handle_standard_args(modplug
     REQUIRED_VARS modplug_LIBRARY modplug_INCLUDE_PATH
@@ -28,6 +37,7 @@ if (modplug_FOUND)
             INTERFACE_COMPILE_OPTIONS "${modplug_COMPILE_OPTIONS}"
             INTERFACE_LINK_LIBRARIES "${modplug_LINK_LIBRARIES}"
             INTERFACE_LINK_OPTIONS "${modplug_LINK_OPTIONS}"
+            INTERFACE_LINK_DIRECTORIES "${modplug_LINK_DIRECTORIES}"
         )
     endif()
 endif()
diff --git a/cmake/Findmpg123.cmake b/cmake/Findmpg123.cmake
index d7a441d1..ae4e54df 100644
--- a/cmake/Findmpg123.cmake
+++ b/cmake/Findmpg123.cmake
@@ -1,18 +1,29 @@
 include(FindPackageHandleStandardArgs)
 
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_MPG123 QUIET libmpg123)
+
 find_library(mpg123_LIBRARY
     NAMES mpg123
+    HINTS ${PC_MPG123_LIBDIR}
 )
 
 find_path(mpg123_INCLUDE_PATH
     NAMES mpg123.h
+    HINTS ${PC_MPG123_INCLUDEDIR}
 )
 
-set(mpg123_COMPILE_OPTIONS "" CACHE STRING "Extra compile options of mpg123")
+if(PC_MPG123_FOUND)
+    get_flags_from_pkg_config("${mpg123_LIBRARY}" "PC_MPG123" "_mpg123")
+endif()
+
+set(mpg123_COMPILE_OPTIONS "${_mpg123_compile_options}" CACHE STRING "Extra compile options of mpg123")
+
+set(mpg123_LINK_LIBRARIES "${_mpg123_link_libraries}" CACHE STRING "Extra link libraries of mpg123")
 
-set(mpg123_LINK_LIBRARIES "" CACHE STRING "Extra link libraries of mpg123")
+set(mpg123_LINK_OPTIONS "${_mpg123_link_options}" CACHE STRING "Extra link flags of mpg123")
 
-set(mpg123_LINK_OPTIONS "" CACHE STRING "Extra link flags of mpg123")
+set(mpg123_LINK_DIRECTORIES "${_mpg123_link_directories}" CACHE PATH "Extra link directories of mpg123")
 
 find_package_handle_standard_args(mpg123
     REQUIRED_VARS mpg123_LIBRARY mpg123_INCLUDE_PATH
@@ -27,6 +38,7 @@ if(mpg123_FOUND)
             INTERFACE_COMPILE_OPTIONS "${mpg123_COMPILE_OPTIONS}"
             INTERFACE_LINK_LIBRARIES "${mpg123_LINK_LIBRARIES}"
             INTERFACE_LINK_OPTIONS "${mpg123_LINK_OPTIONS}"
+            INTERFACE_LINK_DIRECTORIES "${mpg123_LINK_DIRECTORIES}"
         )
     endif()
 endif()
diff --git a/cmake/Findtremor.cmake b/cmake/Findtremor.cmake
index 76e9ffef..a3bc256a 100644
--- a/cmake/Findtremor.cmake
+++ b/cmake/Findtremor.cmake
@@ -1,18 +1,29 @@
 include(FindPackageHandleStandardArgs)
 
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_TREMOR QUIET vorbisidec)
+
 find_library(tremor_LIBRARY
     NAMES vorbisidec libvorbisidec
+    HINTS ${PC_TREMOR_LIBDIR}
 )
 
 find_path(tremor_INCLUDE_PATH
     NAMES tremor/ivorbisfile.h
+    HINTS ${PC_TREMOR_INCLUDEDIR}
 )
 
-set(tremor_COMPILE_OPTIONS "" CACHE STRING "Extra compile options of vorbis")
+if(PC_TREMOR_FOUND)
+    get_flags_from_pkg_config("${tremor_LIBRARY}" "PC_TREMOR" "_tremor")
+endif()
+
+set(tremor_COMPILE_OPTIONS "${_tremor_compile_options}" CACHE STRING "Extra compile options of vorbis")
+
+set(tremor_LINK_LIBRARIES "${_tremor_link_libraries}" CACHE STRING "Extra link libraries of vorbis")
 
-set(tremor_LINK_LIBRARIES "" CACHE STRING "Extra link libraries of vorbis")
+set(tremor_LINK_OPTIONS "${_tremor_link_options}" CACHE STRING "Extra link flags of vorbis")
 
-set(tremor_LINK_OPTIONS "" CACHE STRING "Extra link flags of vorbis")
+set(tremor_LINK_DIRECTORIES "${_tremor_link_directories}" CACHE PATH "Extra link directories of vorbis")
 
 find_package_handle_standard_args(tremor
     REQUIRED_VARS tremor_LIBRARY tremor_INCLUDE_PATH
@@ -27,6 +38,7 @@ if (tremor_FOUND)
             INTERFACE_COMPILE_OPTIONS "${tremor_COMPILE_OPTIONS}"
             INTERFACE_LINK_LIBRARIES "${tremor_LINK_LIBRARIES}"
             INTERFACE_LINK_OPTIONS "${tremor_LINK_OPTIONS}"
+            INTERFACE_LINK_DIRECTORIES "${tremor_LINK_DIRECTORIES}"
         )
     endif()
 endif()
diff --git a/cmake/SDL3_mixerConfig.cmake.in b/cmake/SDL3_mixerConfig.cmake.in
index 71e6d752..436dccb6 100644
--- a/cmake/SDL3_mixerConfig.cmake.in
+++ b/cmake/SDL3_mixerConfig.cmake.in
@@ -60,6 +60,7 @@ endif()
 if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL3_mixer-static-targets.cmake")
 
     include(CMakeFindDependencyMacro)
+    include(PkgConfigHelper)
 
     if(SDL3MIXER_SNDFILE AND NOT SDL3MIXER_VENDORED AND NOT TARGET SndFile::sndfile)
         find_dependency(SndFile)