From eb005518b0085244630ccfb41977f818af45d2ea Mon Sep 17 00:00:00 2001
From: Pierre Wendling <[EMAIL REDACTED]>
Date: Mon, 5 Jun 2023 22:53:12 -0400
Subject: [PATCH] Backport dependency search improvements to SDL2.
---
CMakeLists.txt | 26 ++++++++++++++++++++------
SDL2_mixerConfig.cmake.in | 11 ++++++++---
cmake/FindFLAC.cmake | 20 ++++++++++++++++----
cmake/FindFluidSynth.cmake | 28 ++++++++++++++++++++--------
cmake/FindOpusFile.cmake | 26 +++++++++++++++++++-------
cmake/FindVorbis.cmake | 26 +++++++++++++++++++-------
cmake/Findgme.cmake | 28 ++++++++++++++++++++--------
cmake/Findlibxmp-lite.cmake | 22 +++++++++++++++++-----
cmake/Findlibxmp.cmake | 20 ++++++++++++++++----
cmake/Findmodplug.cmake | 18 ++++++++++++++----
cmake/Findmpg123.cmake | 20 ++++++++++++++++----
cmake/Findtremor.cmake | 20 ++++++++++++++++----
cmake/Findwavpack.cmake | 6 +++---
cmake/PkgConfigHelper.cmake | 34 ++++++++++++++++++++++++++++++++++
14 files changed, 238 insertions(+), 67 deletions(-)
create mode 100644 cmake/PkgConfigHelper.cmake
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f6217751..ed723262 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,6 +43,13 @@ set(SDL2MIXER_DEBUG_POSTFIX "d"
CACHE STRING "Name suffix for debug builds")
mark_as_advanced(SDL2MIXER_DEBUG_POSTFIX)
+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
@@ -58,12 +65,18 @@ if ((TARGET SDL2 OR TARGET SDL2-static) AND SDL2_DISABLE_INSTALL)
set(sdl2mixer_install_enableable OFF)
endif()
+if(NOT DEFINED CMAKE_FIND_PACKAGE_PREFER_CONFIG)
+ set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
+endif()
+
include(CheckIncludeFile)
include(CheckSymbolExists)
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)
@@ -758,18 +771,18 @@ if(SDL2MIXER_MIDI_FLUIDSYNTH)
endif()
if(SDL2MIXER_MIDI_FLUIDSYNTH_SHARED)
target_include_directories(SDL2_mixer PRIVATE
- $<TARGET_PROPERTY:FluidSynth::FluidSynth,INCLUDE_DIRECTORIES>
- $<TARGET_PROPERTY:FluidSynth::FluidSynth,INTERFACE_INCLUDE_DIRECTORIES>
- $<TARGET_PROPERTY:FluidSynth::FluidSynth,INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>
+ $<TARGET_PROPERTY:FluidSynth::libfluidsynth,INCLUDE_DIRECTORIES>
+ $<TARGET_PROPERTY:FluidSynth::libfluidsynth,INTERFACE_INCLUDE_DIRECTORIES>
+ $<TARGET_PROPERTY:FluidSynth::libfluidsynth,INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>
)
- target_get_dynamic_library(dynamic_fluidsynth FluidSynth::FluidSynth)
+ target_get_dynamic_library(dynamic_fluidsynth FluidSynth::libfluidsynth)
message(STATUS "Dynamic fluidsynth: ${dynamic_fluidsynth}")
target_compile_definitions(SDL2_mixer PRIVATE "FLUIDSYNTH_DYNAMIC=\"${dynamic_fluidsynth}\"")
if(SDL2MIXER_VENDORED)
- add_dependencies(SDL2_mixer FluidSynth::FluidSynth)
+ add_dependencies(SDL2_mixer FluidSynth::libfluidsynth)
endif()
else()
- target_link_libraries(SDL2_mixer PRIVATE FluidSynth::FluidSynth)
+ target_link_libraries(SDL2_mixer PRIVATE FluidSynth::libfluidsynth)
endif()
endif()
@@ -902,6 +915,7 @@ if(SDL2MIXER_INSTALL)
if(NOT SDL2MIXER_BUILD_SHARED_LIBS)
install(
FILES
+ cmake/PkgConfigHelper.cmake
cmake/FindFLAC.cmake
cmake/FindFluidSynth.cmake
cmake/Findgme.cmake
diff --git a/SDL2_mixerConfig.cmake.in b/SDL2_mixerConfig.cmake.in
index 990d935d..4bdd9f8a 100644
--- a/SDL2_mixerConfig.cmake.in
+++ b/SDL2_mixerConfig.cmake.in
@@ -56,6 +56,11 @@ endif()
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-static-targets.cmake")
include(CMakeFindDependencyMacro)
+ include(PkgConfigHelper)
+
+ if(NOT DEFINED CMAKE_FIND_PACKAGE_PREFER_CONFIG)
+ set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
+ endif()
if(SDL2MIXER_FLAC_LIBFLAC AND NOT SDL2MIXER_VENDORED AND NOT TARGET FLAC::FLAC)
find_dependency(FLAC)
@@ -78,10 +83,10 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-static-targets.cmake")
endif()
if(SDL2MIXER_MP3_MPG123 AND NOT SDL2MIXER_VENDORED AND NOT TARGET MPG123::mpg123)
- find_dependency(MPG123)
+ find_dependency(mpg123)
endif()
- if(SDL2MIXER_MIDI_FLUIDSYNTH AND NOT SDL2MIXER_VENDORED AND NOT TARGET FluidSynth::FluidSynth)
+ if(SDL2MIXER_MIDI_FLUIDSYNTH AND NOT SDL2MIXER_VENDORED AND NOT TARGET FluidSynth::libfluidsynth)
find_dependency(FluidSynth)
endif()
@@ -93,7 +98,7 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-static-targets.cmake")
find_dependency(Vorbis)
endif()
- if(SDL2MIXER_OPUS AND NOT SDL2MIXER_VENDORED AND NOT TARGET opusfile::opusfile)
+ if(SDL2MIXER_OPUS AND NOT SDL2MIXER_VENDORED AND NOT TARGET OpusFile::opusfile)
find_dependency(OpusFile)
endif()
diff --git a/cmake/FindFLAC.cmake b/cmake/FindFLAC.cmake
index b5ad76eb..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_FLAGS "" 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
@@ -26,7 +37,8 @@ if(FLAC_FOUND)
INTERFACE_INCLUDE_DIRECTORIES "${FLAC_INCLUDE_PATH}"
INTERFACE_COMPILE_OPTIONS "${FLAC_COMPILE_OPTIONS}"
INTERFACE_LINK_LIBRARIES "${FLAC_LINK_LIBRARIES}"
- INTERFACE_LINK_FLAGS "${FLAC_LINK_FLAGS}"
+ 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 435840b6..4e97ad01 100644
--- a/cmake/FindFluidSynth.cmake
+++ b/cmake/FindFluidSynth.cmake
@@ -1,32 +1,44 @@
include(FindPackageHandleStandardArgs)
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_FLUIDSYNTH QUIET fluidsynth)
+
find_library(FluidSynth_LIBRARY
- NAMES fluidsynth
+ NAMES fluidsynth libfluidsynth
+ 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_FLAGS "" 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
)
if(FluidSynth_FOUND)
- if(NOT TARGET FluidSynth::FluidSynth)
- add_library(FluidSynth::FluidSynth UNKNOWN IMPORTED)
- set_target_properties(FluidSynth::FluidSynth PROPERTIES
+ if(NOT TARGET FluidSynth::libfluidsynth)
+ add_library(FluidSynth::libfluidsynth UNKNOWN IMPORTED)
+ set_target_properties(FluidSynth::libfluidsynth PROPERTIES
IMPORTED_LOCATION "${FluidSynth_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${FluidSynth_INCLUDE_PATH}"
INTERFACE_COMPILE_OPTIONS "${FluidSynth_COMPILE_OPTIONS}"
INTERFACE_LINK_LIBRARIES "${FluidSynth_LINK_LIBRARIES}"
- INTERFACE_LINK_FLAGS "${FluidSynth_LINK_FLAGS}"
+ 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 835390d4..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_FLAGS "" 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
)
@@ -31,7 +42,8 @@ if (OpusFile_FOUND)
INTERFACE_INCLUDE_DIRECTORIES "${OpusFile_dirs}"
INTERFACE_COMPILE_OPTIONS "${OpusFile_COMPILE_OPTIONS}"
INTERFACE_LINK_LIBRARIES "${OpusFile_LINK_LIBRARIES}"
- INTERFACE_LINK_FLAGS "${OpusFile_LINK_FLAGS}"
+ INTERFACE_LINK_OPTIONS "${OpusFile_LINK_OPTIONS}"
+ INTERFACE_LINK_DIRECTORIES "${OpusFile_LINK_DIRECTORIES}"
)
endif()
endif()
diff --git a/cmake/FindVorbis.cmake b/cmake/FindVorbis.cmake
index cd6c7909..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_FLAGS "" 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
)
@@ -26,7 +37,8 @@ if (Vorbis_FOUND)
INTERFACE_INCLUDE_DIRECTORIES "${Vorbis_vorbisfile_INCLUDE_PATH}"
INTERFACE_COMPILE_OPTIONS "${Vorbis_vorbisfile_COMPILE_OPTIONS}"
INTERFACE_LINK_LIBRARIES "${Vorbis_vorbisfile_LINK_LIBRARIES}"
- INTERFACE_LINK_FLAGS "${Vorbis_vorbisfile_LINK_FLAGS}"
+ 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 c74e0aab..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_FLAGS "" 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
)
@@ -23,14 +34,15 @@ if(gme_FOUND)
if(EXISTS "${gme_INCLUDE_PATH}/gme")
list(APPEND gme_dirs "${gme_INCLUDE_PATH}/gme")
endif()
- if (NOT TARGET gme::gme)
+ if(NOT TARGET gme::gme)
add_library(gme::gme UNKNOWN IMPORTED)
set_target_properties(gme::gme PROPERTIES
IMPORTED_LOCATION "${gme_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${gme_dirs}"
INTERFACE_COMPILE_OPTIONS "${gme_COMPILE_OPTIONS}"
INTERFACE_LINK_LIBRARIES "${gme_LINK_LIBRARIES}"
- INTERFACE_LINK_FLAGS "${gme_LINK_FLAGS}"
+ 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 b54d2b21..a9b6018b 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
+ NAMES xmp-lite libxmp-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_FLAGS "" 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
@@ -27,7 +38,8 @@ if(libxmp-lite_FOUND)
INTERFACE_INCLUDE_DIRECTORIES "${libxmp_lite_INCLUDE_PATH}"
INTERFACE_COMPILE_OPTIONS "${libxmp_lite_COMPILE_OPTIONS}"
INTERFACE_LINK_LIBRARIES "${libxmp_lite_LINK_LIBRARIES}"
- INTERFACE_LINK_FLAGS "${libxmp_lite_LINK_FLAGS}"
+ 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 e81d0fa0..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_FLAGS "" 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
@@ -26,7 +37,8 @@ if(libxmp_FOUND)
INTERFACE_INCLUDE_DIRECTORIES "${libxmp_INCLUDE_PATH}"
INTERFACE_COMPILE_OPTIONS "${libxmp_COMPILE_OPTIONS}"
INTERFACE_LINK_LIBRARIES "${libxmp_LINK_LIBRARIES}"
- INTERFACE_LINK_FLAGS "${libxmp_LINK_FLAGS}"
+ 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 3a74546a..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_FLAGS "" 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
@@ -27,7 +36,8 @@ if (modplug_FOUND)
INTERFACE_INCLUDE_DIRECTORIES "${modplug_INCLUDE_PATH}"
INTERFACE_COMPILE_OPTIONS "${modplug_COMPILE_OPTIONS}"
INTERFACE_LINK_LIBRARIES "${modplug_LINK_LIBRARIES}"
- INTERFACE_LINK_FLAGS "${modplug_LINK_FLAGS}"
+ 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 3e75bac3..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_FLAGS "" 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
@@ -26,7 +37,8 @@ if(mpg123_FOUND)
INTERFACE_INCLUDE_DIRECTORIES "${mpg123_INCLUDE_PATH}"
INTERFACE_COMPILE_OPTIONS "${mpg123_COMPILE_OPTIONS}"
INTERFACE_LINK_LIBRARIES "${mpg123_LINK_LIBRARIES}"
- INTERFACE_LINK_FLAGS "${mpg123_LINK_FLAGS}"
+ 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 8bdacfd1..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_FLAGS "" 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
@@ -26,7 +37,8 @@ if (tremor_FOUND)
INTERFACE_INCLUDE_DIRECTORIES "${tremor_INCLUDE_PATH}"
INTERFACE_COMPILE_OPTIONS "${tremor_COMPILE_OPTIONS}"
INTERFACE_LINK_LIBRARIES "${tremor_LINK_LIBRARIES}"
- INTERFACE_LINK_FLAGS "${tremor_LINK_FLAGS}"
+ INTERFACE_LINK_OPTIONS "${tremor_LINK_OPTIONS}"
+ INTERFACE_LINK_DIRECTORIES "${tremor_LINK_DIRECTORIES}"
)
endif()
endif()
diff --git a/cmake/Findwavpack.cmake b/cmake/Findwavpack.cmake
index 7fc0672d..71c0f87c 100644
--- a/cmake/Findwavpack.cmake
+++ b/cmake/Findwavpack.cmake
@@ -1,7 +1,7 @@
include(FindPackageHandleStandardArgs)
if(WIN32)
- set(wavpack_find_names wavpack wavpackdll)
+ set(wavpack_find_names wavpack libwavpack wavpackdll)
else()
set(wavpack_find_names wavpack)
endif()
@@ -17,7 +17,7 @@ set(wavpack_COMPILE_OPTIONS "" CACHE STRING "Extra compile options of wavpack")
set(wavpack_LINK_LIBRARIES "" CACHE STRING "Extra link libraries of wavpack")
-set(wavpack_LINK_FLAGS "" CACHE STRING "Extra link flags of wavpack")
+set(wavpack_LINK_OPTIONS "" CACHE STRING "Extra link flags of wavpack")
find_package_handle_standard_args(wavpack
REQUIRED_VARS wavpack_LIBRARY wavpack_INCLUDE_PATH
@@ -31,7 +31,7 @@ if (wavpack_FOUND)
INTERFACE_INCLUDE_DIRECTORIES "${wavpack_INCLUDE_PATH}"
INTERFACE_COMPILE_OPTIONS "${wavpack_COMPILE_OPTIONS}"
INTERFACE_LINK_LIBRARIES "${wavpack_LINK_LIBRARIES}"
- INTERFACE_LINK_FLAGS "${wavpack_LINK_FLAGS}"
+ INTERFACE_LINK_OPTIONS "${wavpack_LINK_OPTIONS}"
)
endif()
endif()
diff --git a/cmake/PkgConfigHelper.cmake b/cmake/PkgConfigHelper.cmake
new file mode 100644
index 00000000..7070fac7
--- /dev/null
+++ b/cmake/PkgConfigHelper.cmake
@@ -0,0 +1,34 @@
+# Helper for Find modules
+
+function(get_flags_from_pkg_config _library _pc_prefix _out_prefix)
+ if("${_library}" MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$")
+ set(_cflags ${_pc_prefix}_STATIC_CFLAGS_OTHER)
+ set(_link_libraries ${_pc_prefix}_STATIC_LIBRARIES)
+ set(_link_options ${_pc_prefix}_STATIC_LDFLAGS_OTHER)
+ set(_library_dirs ${_pc_prefix}_STATIC_LIBRARY_DIRS)
+ else()
+ set(_cflags ${_pc_prefix}_CFLAGS_OTHER)
+ set(_link_libraries ${_pc_prefix}_LIBRARIES)
+ set(_link_options ${_pc_prefix}_LDFLAGS_OTHER)
+ set(_library_dirs ${_pc_prefix}_LIBRARY_DIRS)
+ endif()
+
+ # The *_LIBRARIES lists always start with the library itself
+ list(POP_FRONT "${_link_libraries}")
+
+ # Work around CMake's flag deduplication when pc files use `-framework A` instead of `-Wl,-framework,A`
+ string(REPLACE "-framework;" "-Wl,-framework," "_filtered_link_options" "${${_link_options}}")
+
+ set(${_out_prefix}_compile_options
+ "${${_cflags}}"
+ PARENT_SCOPE)
+ set(${_out_prefix}_link_libraries
+ "${${_link_libraries}}"
+ PARENT_SCOPE)
+ set(${_out_prefix}_link_options
+ "${_filtered_link_options}"
+ PARENT_SCOPE)
+ set(${_out_prefix}_link_directories
+ "${${_library_dirs}}"
+ PARENT_SCOPE)
+endfunction()