From dc054603a1f95f03ea9f6a7b79cda23032c5c2a6 Mon Sep 17 00:00:00 2001 From: Alex Mayfield Date: Thu, 31 May 2018 19:12:31 -0400 Subject: [PATCH] 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(+) create mode 100644 cmake/Findsamplerate.cmake 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 +# 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 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 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()