cmake: Flatten API config logic, complete missing rtaudio.pc fields
authorStephen Sinclair <radarsat1@gmail.com>
Sat, 14 Jul 2018 15:21:43 +0000 (11:21 -0400)
committerStephen Sinclair <radarsat1@gmail.com>
Sat, 14 Jul 2018 15:21:43 +0000 (11:21 -0400)
Closes #106.
Fixes #137.

CMakeLists.txt

index 1563091770de6d55a3395255e48afb29c1ae7f6b..2856c5fc78774930a742a1dae28bb9848444fc38 100644 (file)
@@ -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