From adefaebdbcc1c3137b1c9ce8d995ef25564c7fc8 Mon Sep 17 00:00:00 2001 From: Stephen Sinclair Date: Sat, 14 Jul 2018 11:21:43 -0400 Subject: [PATCH] cmake: Flatten API config logic, complete missing rtaudio.pc fields Closes #106. Fixes #137. --- CMakeLists.txt | 218 ++++++++++++++++++++++++++++--------------------- 1 file changed, 127 insertions(+), 91 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1563091..2856c5f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,15 +4,30 @@ project(RtAudio) include(CTest) include(CheckFunctionExists) +# Check for Jack (any OS) +find_package(PkgConfig) +pkg_check_modules(jack jack) + +# Check for Pulse (any OS) +pkg_check_modules(pulse libpulse-simple) + +# Check for known non-Linux unix-likes +if (CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*") + message(STATUS "NetBSD detected, using OSS") + set(xBSD ON) +elseif(UNIX AND NOT APPLE) + set(LINUX ON) +endif() + option(BUILD_PYTHON "Build PyRtAudio python bindings" OFF) -option(AUDIO_WINDOWS_DS "Build Windows DirectSound API" OFF) -option(AUDIO_WINDOWS_ASIO "Build Windows ASIO API" OFF) -option(AUDIO_WINDOWS_WASAPI "Build Windows WASAPI API" OFF) -option(AUDIO_LINUX_OSS "Build Linux OSS API" OFF) -option(AUDIO_LINUX_ALSA "Build Linux ALSA API" OFF) -option(AUDIO_LINUX_PULSE "Build Linux PulseAudio API" OFF) -option(AUDIO_UNIX_JACK "Build Unix JACK audio server API" OFF) -option(AUDIO_OSX_CORE "Build Mac OSX CoreAudio API" OFF) +option(RTAUDIO_DS "Build DirectSound API" OFF) +option(RTAUDIO_ASIO "Build ASIO API" OFF) +option(RTAUDIO_WASAPI "Build WASAPI API" ${WIN32}) +option(RTAUDIO_OSS "Build OSS4 API" ${xBSD}) +option(RTAUDIO_ALSA "Build ALSA API" ${LINUX}) +option(RTAUDIO_PULSE "Build PulseAudio API" ${pulse_FOUND}) +option(RTAUDIO_JACK "Build JACK audio server API" ${jack_FOUND}) +option(RTAUDIO_CORE "Build CoreAudio API" ${APPLE}) if (CMAKE_BUILD_TYPE STREQUAL "Debug") add_definitions(-D__RTAUDIO_DEBUG__) @@ -31,101 +46,122 @@ endif (CMAKE_COMPILER_IS_GNUCXX) set(rtaudio_SOURCES RtAudio.cpp rtaudio_c.cpp) set(LINKLIBS) -if (CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*") - message(STATUS "NetBSD detected, using OSS") - find_package(Threads REQUIRED CMAKE_THREAD_PREFER_PTHREAD) - list(APPEND LINKLIBS ossaudio ${CMAKE_THREAD_LIBS_INIT}) - set(AUDIO_LINUX_OSS ON) -elseif (UNIX AND NOT APPLE) - if (NOT AUDIO_LINUX_PULSE AND NOT AUDIO_LINUX_ALSA AND NOT AUDIO_LINUX_OSS AND NOT AUDIO_UNIX_JACK) - set(AUDIO_LINUX_ALSA ON) - endif() - - if (AUDIO_LINUX_PULSE) - find_library(PULSE_LIB pulse) - find_library(PULSESIMPLE_LIB pulse-simple) - find_package(Threads REQUIRED CMAKE_THREAD_PREFER_PTHREAD) - list(APPEND LINKLIBS ${PULSE_LIB} ${PULSESIMPLE_LIB} ${CMAKE_THREAD_LIBS_INIT}) - add_definitions(-D__LINUX_PULSE__) - message(STATUS "Using Linux PulseAudio") - endif (AUDIO_LINUX_PULSE) - if (AUDIO_LINUX_ALSA) - find_package(ALSA) - find_package(Threads REQUIRED CMAKE_THREAD_PREFER_PTHREAD) - if (NOT ALSA_FOUND) - message(FATAL_ERROR "ALSA API requested but no ALSA dev libraries found") - endif() - include_directories(${ALSA_INCLUDE_DIR}) - list(APPEND LINKLIBS ${ALSA_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) - add_definitions(-D__LINUX_ALSA__) - message(STATUS "Using Linux ALSA") - endif (AUDIO_LINUX_ALSA) -endif () - -if (APPLE) - if (NOT AUDIO_OSX_CORE AND NOT AUDIO_UNIX_JACK) - set(AUDIO_OSX_CORE ON) - endif() - - if (AUDIO_OSX_CORE) - find_library(COREAUDIO_LIB CoreAudio) - find_library(COREFOUNDATION_LIB CoreFoundation) - list(APPEND LINKLIBS ${COREAUDIO_LIB} ${COREFOUNDATION_LIB}) - add_definitions(-D__MACOSX_CORE__) - message(STATUS "Using OSX CoreAudio") - endif (AUDIO_OSX_CORE) -endif (APPLE) - -# JACK supported on many Unices -if (UNIX) - if (AUDIO_UNIX_JACK) - find_library(JACK_LIB jack) - list(APPEND LINKLIBS ${JACK_LIB}) - add_definitions(-D__UNIX_JACK__) - message(STATUS "Using JACK") - endif (AUDIO_UNIX_JACK) -endif (UNIX) - -if (WIN32) - if (NOT AUDIO_WINDOWS_DS AND NOT AUDIO_WINDOWS_ASIO AND NOT AUDIO_WINDOWS_WASAPI) - set(AUDIO_WINDOWS_WASAPI ON) - endif() - - include_directories(include) - list(APPEND LINKLIBS winmm ole32) - - if (AUDIO_WINDOWS_DS) - add_definitions(-D__WINDOWS_DS__) - message(STATUS "Using Windows DirectSound") - list(APPEND LINKLIBS dsound) - endif (AUDIO_WINDOWS_DS) - if (AUDIO_WINDOWS_WASAPI) - add_definitions(-D__WINDOWS_WASAPI__) - message(STATUS "Using Windows WASAPI") - list(APPEND LINKLIBS uuid ksuser) - endif (AUDIO_WINDOWS_WASAPI) - if (AUDIO_WINDOWS_ASIO) - list(APPEND rtaudio_SOURCES - include/asio.cpp - include/asiodrivers.cpp - include/asiolist.cpp - include/iasiothiscallresolver.cpp) - add_definitions(-D__WINDOWS_ASIO__) - message(STATUS "Using Windows ASIO") - endif (AUDIO_WINDOWS_ASIO) -endif (WIN32) +set(PKGCONFIG_REQUIRES) +set(PKGCONFIG_APIS) + +# OSS +if (RTAUDIO_OSS) + set(NEED_PTHREAD ON) + find_library(OSSAUDIO_LIB ossaudio) + if (OSSAUDIO_LIB) + list(APPEND LINKLIBS ossaudio) + # Note: not an error on some systems + endif() + add_definitions(-D__LINUX_OSS__) +endif() + +# Pulse +if (RTAUDIO_PULSE) + set(NEED_PTHREAD ON) + find_library(PULSE_LIB pulse) + find_library(PULSESIMPLE_LIB pulse-simple) + list(APPEND LINKLIBS ${PULSE_LIB} ${PULSESIMPLE_LIB}) + list(APPEND PKGCONFIG_REQUIRES "libpulse-simple") + list(APPEND PKGCONFIG_APIS "__LINUX_PULSE__") + add_definitions(-D__LINUX_PULSE__) +endif() + +# ALSA +if (RTAUDIO_ALSA) + set(NEED_PTHREAD ON) + find_package(ALSA) + if (NOT ALSA_FOUND) + message(FATAL_ERROR "ALSA API requested but no ALSA dev libraries found") + endif() + include_directories(${ALSA_INCLUDE_DIR}) + list(APPEND LINKLIBS ${ALSA_LIBRARY}) + list(APPEND PKGCONFIG_REQUIRES "alsa") + list(APPEND PKGCONFIG_APIS "__LINUX_ALSA__") + add_definitions(-D__LINUX_ALSA__) +endif() + +# JACK +if (RTAUDIO_JACK) + set(NEED_PTHREAD ON) + find_library(JACK_LIB jack) + list(APPEND LINKLIBS ${JACK_LIB}) + list(APPEND PKGCONFIG_REQUIRES "jack") + list(APPEND PKGCONFIG_APIS "__UNIX_JACK__") + add_definitions(-D__UNIX_JACK__) +endif() + +# CoreAudio +if (RTAUDIO_CORE) + find_library(COREAUDIO_LIB CoreAudio) + find_library(COREFOUNDATION_LIB CoreFoundation) + list(APPEND LINKLIBS ${COREAUDIO_LIB} ${COREFOUNDATION_LIB}) + list(APPEND PKGCONFIG_APIS "__MACOSX_CORE__") + add_definitions(-D__MACOSX_CORE__) +endif() + +# ASIO +if (RTAUDIO_ASIO) + set(NEED_WIN32LIBS ON) + include_directories(include) + list(APPEND rtaudio_SOURCES + include/asio.cpp + include/asiodrivers.cpp + include/asiolist.cpp + include/iasiothiscallresolver.cpp) + add_definitions(-D__WINDOWS_ASIO__) + list(APPEND PKGCONFIG_APIS "__WINDOWS_ASIO__") +endif() + +# DSound +if (RTAUDIO_DS) + set(NEED_WIN32LIBS ON) + add_definitions(-D__WINDOWS_DS__) + message(STATUS "Using Windows DirectSound") + list(APPEND LINKLIBS dsound) + list(APPEND PKGCONFIG_APIS "__WINDOWS_DS__") +endif() + +# WASAPI +if (RTAUDIO_WASAPI) + set(NEED_WIN32LIBS ON) + add_definitions(-D__WINDOWS_WASAPI__) + message(STATUS "Using Windows WASAPI") + list(APPEND LINKLIBS uuid ksuser) + list(APPEND PKGCONFIG_APIS "__WINDOWS_WASAPI__") +endif() cmake_policy(SET CMP0042 OLD) set(PACKAGE_VERSION 5.0.0) add_library(rtaudio SHARED ${rtaudio_SOURCES}) add_library(rtaudio_static STATIC ${rtaudio_SOURCES}) +# Windows libs +if (NEED_WIN32LIBS) + list(APPEND LINKLIBS winmm ole32) +endif() + +# pthread +if (NEED_PTHREAD) + find_package(Threads REQUIRED + CMAKE_THREAD_PREFER_PTHREAD + THREADS_PREFER_PTHREAD_FLAG) + list(APPEND LINKLIBS Threads::Threads) +endif() + target_link_libraries(rtaudio ${LINKLIBS}) if (BUILD_TESTING) add_subdirectory(tests) endif (BUILD_TESTING) +string(REPLACE ";" " " req "${PKGCONFIG_REQUIRES}") +string(REPLACE ";" " -D" api "${PKGCONFIG_APIS}") +string(PREPEND api "-D") configure_file("rtaudio.pc.in" "rtaudio.pc" @ONLY) install(TARGETS rtaudio