From cce730ebffa9f211ce55b40e35dbc9cd2c05d87f Mon Sep 17 00:00:00 2001 From: Lukas W Date: Wed, 13 Jun 2018 10:58:48 +0200 Subject: [PATCH] Add CMake find modules for FFTW, LibSampleratae and LibSndFile. Removes reliance on pkg-config for finding these libraries. --- CMakeLists.txt | 28 +++------------ cmake/modules/FindFFTW.cmake | 47 +++++++++++++++++++++++++ cmake/modules/FindSamplerate.cmake | 34 ++++++++++++++++++ cmake/modules/FindSndFile.cmake | 39 ++++++++++++++++++++ plugins/Eq/CMakeLists.txt | 1 - plugins/LadspaEffect/swh/CMakeLists.txt | 5 ++- plugins/SpectrumAnalyzer/CMakeLists.txt | 1 - 7 files changed, 127 insertions(+), 28 deletions(-) create mode 100644 cmake/modules/FindFFTW.cmake create mode 100644 cmake/modules/FindSamplerate.cmake create mode 100644 cmake/modules/FindSndFile.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 503237cd4..467c7585a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -165,14 +165,9 @@ FIND_PACKAGE(Qt5Test) SET(QT_QTTEST_LIBRARY Qt5::Test) # check for libsndfile -IF(PKG_CONFIG_FOUND) - PKG_CHECK_MODULES(SNDFILE REQUIRED sndfile>=1.0.18) - IF(NOT SNDFILE_FOUND) - MESSAGE(FATAL_ERROR "LMMS requires libsndfile1 and libsndfile1-dev >= 1.0.18 - please install, remove CMakeCache.txt and try again!") - ENDIF() -ELSE() - FIND_PACKAGE(LibSndFile 1.0.18 REQUIRED) - SET(SNDFILE_LIBRARIES sndfile-shared) +FIND_PACKAGE(SndFile REQUIRED) +IF(NOT SNDFILE_FOUND) + MESSAGE(FATAL_ERROR "LMMS requires libsndfile1 and libsndfile1-dev >= 1.0.18 - please install, remove CMakeCache.txt and try again!") ENDIF() # check if we can use SF_SET_COMPRESSION_LEVEL IF(NOT SNDFILE_VERSION VERSION_LESS 1.0.26) @@ -396,15 +391,8 @@ IF(WANT_JACK) ENDIF(JACK_FOUND) ENDIF(WANT_JACK) - # check for FFTW3F-library -IF(PKG_CONFIG_FOUND) - PKG_CHECK_MODULES(FFTW3F REQUIRED fftw3f>=3.0.0) -ELSE() - #currently find_package for fftw is broken in vcpkg. Replace this when fixed - FIND_PATH(FFTW3F_INCLUDE_DIRS fftw3.h) - FIND_LIBRARY(FFTW3F_LIBRARIES fftw3f) -ENDIF() +FIND_PACKAGE(FFTW COMPONENTS fftw3f REQUIRED) # check for FLTK FIND_PACKAGE(FLTK) @@ -486,13 +474,7 @@ ELSE() ENDIF(WANT_DEBUG_FPE) # check for libsamplerate -IF(PKG_CONFIG_FOUND) - PKG_CHECK_MODULES(SAMPLERATE REQUIRED samplerate>=0.1.8) -ELSE() - #TODO no cmake config support. Can we check the version some other way? - FIND_FILE(SAMPLERATE_INCLUDE_DIRS samplerate.h) - FIND_LIBRARY(SAMPLERATE_LIBRARIES libsamplerate-0) -ENDIF() +FIND_PACKAGE(Samplerate 0.1.8 REQUIRED) # set compiler flags IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") diff --git a/cmake/modules/FindFFTW.cmake b/cmake/modules/FindFFTW.cmake new file mode 100644 index 000000000..9421c86cc --- /dev/null +++ b/cmake/modules/FindFFTW.cmake @@ -0,0 +1,47 @@ +# FindFFTW.cmake - Try to find FFTW3 +# Copyright (c) 2018 Lukas W +# This file is MIT licensed. +# See http://opensource.org/licenses/MIT + +# Try pkgconfig for hints +find_package(PkgConfig QUIET) + +if(NOT FFTW_FIND_COMPONENTS) + set(FFTW_FIND_COMPONENTS fftw3f fftw3 fftwl) +endif() + +if(PKG_CONFIG_FOUND) + pkg_check_modules(FFTW_PKG fftw>=3.0.0) + pkg_check_modules(FFTW3_PKG fftw3>=3.0.0) +endif() + +find_path(FFTW_INCLUDE_DIR + NAMES fftw3.h + PATHS ${FFTW_PKG_INCLUDE_DIRS} ${FFTW3_PKG_INCLUDE_DIRS} +) + +set(check_list) + +foreach(comp ${FFTW_FIND_COMPONENTS}) + string(TOUPPER ${comp} COMP) + if(PKG_CONFIG_FOUND) + pkg_check_modules(${COMP}_PKG REQUIRED ${comp}>=3.0.0) + endif() + + find_library(${COMP}_LIBRARY + NAMES ${comp} + PATHS ${comp}_PKG_LIBRARY_DIRS + ) + list(APPEND check_list ${COMP}_LIBRARY) + + set(${COMP}_LIBRARIES ${${COMP}_LIBRARY} CACHE FILEPATH "${COMP} library path") + set(${COMP}_INCLUDE_DIRS ${FFTW_INCLUDE_DIR} CACHE PATH "${COMP} include path") + mark_as_advanced(${COMP}_LIBRARIES ${COMP}_INCLUDE_DIRS) +endforeach() + +find_package(PackageHandleStandardArgs) +find_package_handle_standard_args(FFTW DEFAULT_MSG FFTW_INCLUDE_DIR ${check_list}) + +set(FFTW_INCLUDE_DIRS ${FFTW_INCLUDE_DIR}) + +mark_as_advanced(FFTW_LIBRARY FFTW_LIBRARIES FFTW_INCLUDE_DIR FFTW_INCLUDE_DIRS ${check_list}) diff --git a/cmake/modules/FindSamplerate.cmake b/cmake/modules/FindSamplerate.cmake new file mode 100644 index 000000000..53b69f6c7 --- /dev/null +++ b/cmake/modules/FindSamplerate.cmake @@ -0,0 +1,34 @@ +# FindFFTW.cmake - Try to find FFTW3 +# Copyright (c) 2018 Lukas W +# This file is MIT licensed. +# See http://opensource.org/licenses/MIT + +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_check_modules(SAMPLERATE_PKG samplerate) +endif() + +find_path(SAMPLERATE_INCLUDE_DIR + NAMES samplerate.h + PATHS ${SAMPLERATE_PKG_INCLUDE_DIRS} +) + +set(SAMPLERATE_NAMES samplerate libsamplerate) +if(Samplerate_FIND_VERSION_MAJOR) + list(APPEND SAMPLERATE_NAMES libsamplerate-${Samplerate_FIND_VERSION_MAJOR}) +else() + list(APPEND SAMPLERATE_NAMES libsamplerate-0) +endif() + +find_library(SAMPLERATE_LIBRARY + NAMES ${SAMPLERATE_NAMES} + PATHS ${SAMPLERATE_PKG_LIBRARY_DIRS} +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(SAMPLERATE DEFAULT_MSG SAMPLERATE_LIBRARY SAMPLERATE_INCLUDE_DIR) + +mark_as_advanced(SAMPLERATE_INCLUDE_DIR SAMPLERATE_LIBRARY ) + +set(SAMPLERATE_LIBRARIES ${SAMPLERATE_LIBRARY} ) +set(SAMPLERATE_INCLUDE_DIRS ${SAMPLERATE_INCLUDE_DIR}) diff --git a/cmake/modules/FindSndFile.cmake b/cmake/modules/FindSndFile.cmake new file mode 100644 index 000000000..28ebb7bb7 --- /dev/null +++ b/cmake/modules/FindSndFile.cmake @@ -0,0 +1,39 @@ +# FindSndFile.cmake - Try to find libsndfile +# Copyright (c) 2018 Lukas W +# This file is MIT licensed. +# See http://opensource.org/licenses/MIT + +# Try pkgconfig for hints +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_check_modules(SNDFILE_PKG sndfile) +endif(PKG_CONFIG_FOUND) +set(SndFile_DEFINITIONS ${SNDFILE_PKG_CFLAGS_OTHER}) + +if(WIN32) + # Try Vcpkg + find_package(LibSndFile ${SndFile_FIND_VERSION} CONFIG QUIET) + if(LibSndFile_FOUND) + get_target_property(LibSndFile_Location sndfile-shared LOCATION) + get_target_property(LibSndFile_Include_Path sndfile-shared INTERFACE_INCLUDE_DIRECTORIES) + get_filename_component(LibSndFile_Path LibSndFile_Location PATH) + endif() +endif() + +find_path(SNDFILE_INCLUDE_DIR + NAMES sndfile.h + PATHS ${SNDFILE_PKG_INCLUDE_DIRS} ${LibSndFile_Include_Path} +) + +find_library(SNDFILE_LIBRARY + NAMES sndfile libsndfile libsndfile-1 + PATHS ${SNDFILE_PKG_LIBRARY_DIRS} ${LibSndFile_Path} +) + +find_package(PackageHandleStandardArgs) +find_package_handle_standard_args(SndFile DEFAULT_MSG SNDFILE_LIBRARY SNDFILE_INCLUDE_DIR) + +set(SNDFILE_LIBRARIES ${SNDFILE_LIBRARY}) +set(SNDFILE_INCLUDE_DIRS ${SNDFILE_INCLUDE_DIR}) + +mark_as_advanced(SNDFILE_LIBRARY SNDFILE_LIBRARIES SNDFILE_INCLUDE_DIR SNDFILE_INCLUDE_DIRS) diff --git a/plugins/Eq/CMakeLists.txt b/plugins/Eq/CMakeLists.txt index 36109cb3c..899dde5ec 100644 --- a/plugins/Eq/CMakeLists.txt +++ b/plugins/Eq/CMakeLists.txt @@ -1,6 +1,5 @@ INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${FFTW3F_INCLUDE_DIRS}) -LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) LINK_LIBRARIES(${FFTW3F_LIBRARIES}) BUILD_PLUGIN(eq EqEffect.cpp EqCurve.cpp EqCurve.h EqControls.cpp EqControlsDialog.cpp EqFilter.h EqParameterWidget.cpp EqFader.h EqSpectrumView.h EqSpectrumView.cpp MOCFILES EqControls.h EqControlsDialog.h EqCurve.h EqParameterWidget.h EqFader.h EqSpectrumView.h EMBEDDED_RESOURCES *.png) diff --git a/plugins/LadspaEffect/swh/CMakeLists.txt b/plugins/LadspaEffect/swh/CMakeLists.txt index 7703aaa6d..131e60373 100644 --- a/plugins/LadspaEffect/swh/CMakeLists.txt +++ b/plugins/LadspaEffect/swh/CMakeLists.txt @@ -35,7 +35,7 @@ FOREACH(_item ${XML_SOURCES}) # Vocoder does not use fftw IF(NOT ("${_plugin}" STREQUAL "vocoder_1337")) - TARGET_LINK_LIBRARIES("${_plugin}" -lfftw3f) + TARGET_LINK_LIBRARIES("${_plugin}" ${FFTW3F_LIBRARIES}) ENDIF() IF(NOT MSVC) TARGET_LINK_LIBRARIES("${_plugin}" m) @@ -51,10 +51,9 @@ ADD_DEFINITIONS(-DFFTW3) INCLUDE_DIRECTORIES( "${CMAKE_SOURCE_DIR}/include" "${CMAKE_CURRENT_SOURCE_DIR}/ladspa" - ${FFTW3F_INCLUDE_DIRS} + "${FFTW3F_INCLUDE_DIRS}" "${CMAKE_BINARY_DIR}" ) -LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) ADD_LIBRARY(iir STATIC ladspa/util/iir.c) SET_TARGET_PROPERTIES(iir PROPERTIES COMPILE_FLAGS "${PIC_FLAGS}") diff --git a/plugins/SpectrumAnalyzer/CMakeLists.txt b/plugins/SpectrumAnalyzer/CMakeLists.txt index c2aec0d43..29187b39d 100644 --- a/plugins/SpectrumAnalyzer/CMakeLists.txt +++ b/plugins/SpectrumAnalyzer/CMakeLists.txt @@ -1,5 +1,4 @@ INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${FFTW3F_INCLUDE_DIRS}) -LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) LINK_LIBRARIES(${FFTW3F_LIBRARIES}) BUILD_PLUGIN(spectrumanalyzer SpectrumAnalyzer.cpp SpectrumAnalyzerControls.cpp SpectrumAnalyzerControlDialog.cpp SpectrumAnalyzer.h SpectrumAnalyzerControls.h SpectrumAnalyzerControlDialog.h MOCFILES SpectrumAnalyzerControlDialog.h SpectrumAnalyzerControls.h EMBEDDED_RESOURCES *.png)