Add CMake find modules for FFTW, LibSampleratae and LibSndFile.

Removes reliance on pkg-config for finding these libraries.
This commit is contained in:
Lukas W
2018-06-13 10:58:48 +02:00
parent 8dab817e13
commit cce730ebff
7 changed files with 127 additions and 28 deletions

View File

@@ -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")

View File

@@ -0,0 +1,47 @@
# FindFFTW.cmake - Try to find FFTW3
# Copyright (c) 2018 Lukas W <lukaswhl/at/gmail.com>
# 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})

View File

@@ -0,0 +1,34 @@
# FindFFTW.cmake - Try to find FFTW3
# Copyright (c) 2018 Lukas W <lukaswhl/at/gmail.com>
# 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})

View File

@@ -0,0 +1,39 @@
# FindSndFile.cmake - Try to find libsndfile
# Copyright (c) 2018 Lukas W <lukaswhl/at/gmail.com>
# 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)

View File

@@ -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)

View File

@@ -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}")

View File

@@ -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)