foxygit / doom Log in
commit dc054603a1f95f03ea9f6a7b79cda23032c5c2a6
Author:     Alex Mayfield <alexmax2742@gmail.com>
AuthorDate: Thu May 31 19:12:31 2018 -0400
Commit:     Alex Mayfield <alexmax2742@gmail.com>
CommitDate: Thu May 31 19:12:31 2018 -0400

    libsamplerate support

    Works on Linux, at least...
---
 CMakeLists.txt             |  6 ++++
 cmake/Findsamplerate.cmake | 71 ++++++++++++++++++++++++++++++++++++++++++++++
 config.h.cin               |  1 +
 src/CMakeLists.txt         |  3 ++
 4 files changed, 81 insertions(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7f569d61..c304b011 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,6 +29,12 @@ find_package(SDL2 2.0.1)
 find_package(SDL2_mixer 2.0.0)
 find_package(SDL2_net 2.0.0)

+# Check for libsamplerate.
+find_package(samplerate)
+if(SAMPLERATE_FOUND)
+    set(HAVE_LIBSAMPLERATE TRUE)
+endif()
+
 # Check for libpng.
 find_package(PNG)
 if(PNG_FOUND)
diff --git a/cmake/Findsamplerate.cmake b/cmake/Findsamplerate.cmake
new file mode 100644
index 00000000..c7fab93a
--- /dev/null
+++ b/cmake/Findsamplerate.cmake
@@ -0,0 +1,71 @@
+# Findsamplerate.cmake
+#
+# Copyright (c) 2018, Alex Mayfield <alexmax2742@gmail.com>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#     * Redistributions of source code must retain the above copyright
+#       notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above copyright
+#       notice, this list of conditions and the following disclaimer in the
+#       documentation and/or other materials provided with the distribution.
+#     * Neither the name of the <organization> nor the
+#       names of its contributors may be used to endorse or promote products
+#       derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Currently works with the following generators:
+# - Unix Makefiles
+# - Ninja
+# - Visual Studio (TODO)
+
+# Cache variable that allows you to point CMake at a directory containing
+# an extracted development library.
+set(SAMPLERATE_DIR "${SAMPLERATE_DIR}" CACHE PATH "Location of samplerate library directory")
+
+# Use pkg-config to find library locations in *NIX environments.
+find_package(PkgConfig QUIET)
+if(PKG_CONFIG_FOUND)
+    pkg_search_module(PC_SAMPLERATE QUIET samplerate)
+endif()
+
+# Find the include directory.
+find_path(SAMPLERATE_INCLUDE_DIR "samplerate.h"
+    HINTS ${PC_SAMPLERATE_INCLUDE_DIRS})
+
+# Find the version.  I don't know if there is a correct way to find this on
+# Windows - the config.h in the tarball is wrong for 0.1.19.
+if(PC_SAMPLERATE_VERSION)
+    set(SAMPLERATE_VERSION "${PC_SAMPLERATE_VERSION}")
+endif()
+
+# Find the library.
+find_library(SAMPLERATE_LIBRARY "samplerate"
+    HINTS ${PC_SAMPLERATE_LIBRARY_DIRS})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(samplerate
+    FOUND_VAR SAMPLERATE_FOUND
+    REQUIRED_VARS SAMPLERATE_INCLUDE_DIR SAMPLERATE_LIBRARY
+    VERSION_VAR SAMPLERATE_VERSION
+)
+
+if(SAMPLERATE_FOUND)
+    # Imported target.
+    add_library(samplerate::samplerate UNKNOWN IMPORTED)
+    set_target_properties(samplerate::samplerate PROPERTIES
+        INTERFACE_COMPILE_OPTIONS "${PC_SAMPLERATE_CFLAGS_OTHER}"
+        INTERFACE_INCLUDE_DIRECTORIES "${SAMPLERATE_INCLUDE_DIR}"
+        IMPORTED_LOCATION "${SAMPLERATE_LIBRARY}")
+endif()
diff --git a/config.h.cin b/config.h.cin
index 1c875bbe..4a67927e 100644
--- a/config.h.cin
+++ b/config.h.cin
@@ -4,6 +4,7 @@
 #cmakedefine PACKAGE_STRING "@PACKAGE_STRING@"
 #cmakedefine PROGRAM_PREFIX "@PROGRAM_PREFIX@"

+#cmakedefine HAVE_LIBSAMPLERATE
 #cmakedefine HAVE_LIBPNG
 #cmakedefine01 HAVE_DECL_STRCASECMP
 #cmakedefine01 HAVE_DECL_STRNCASECMP
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ca9fc502..00ed3d53 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -106,6 +106,9 @@ set(SOURCE_FILES ${COMMON_SOURCE_FILES} ${GAME_SOURCE_FILES})
 set(SOURCE_FILES_WITH_DEH ${SOURCE_FILES} ${DEHACKED_SOURCE_FILES})

 set(EXTRA_LIBS textscreen pcsound opl SDL2::SDL2main SDL2::SDL2 SDL2::mixer SDL2::net)
+if(SAMPLERATE_FOUND)
+    list(APPEND EXTRA_LIBS samplerate::samplerate)
+endif()
 if(PNG_FOUND)
     list(APPEND EXTRA_LIBS PNG::PNG)
 endif()