Skip to content

Commit

Permalink
Add CMake find modules for FFTW, LibSampleratae and LibSndFile.
Browse files Browse the repository at this point in the history
Removes reliance on pkg-config for finding these libraries.
  • Loading branch information
lukas-w committed Jul 7, 2018
1 parent 846a2af commit ab6b3df
Show file tree
Hide file tree
Showing 7 changed files with 127 additions and 28 deletions.
28 changes: 5 additions & 23 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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")
Expand Down
47 changes: 47 additions & 0 deletions cmake/modules/FindFFTW.cmake
Original file line number Diff line number Diff line change
@@ -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})
34 changes: 34 additions & 0 deletions cmake/modules/FindSamplerate.cmake
Original file line number Diff line number Diff line change
@@ -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})
39 changes: 39 additions & 0 deletions cmake/modules/FindSndFile.cmake
Original file line number Diff line number Diff line change
@@ -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)
1 change: 0 additions & 1 deletion plugins/Eq/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
5 changes: 2 additions & 3 deletions plugins/LadspaEffect/swh/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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}")
Expand Down
1 change: 0 additions & 1 deletion plugins/SpectrumAnalyzer/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit ab6b3df

Please sign in to comment.