diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b23929c..04553188 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.10) project(miniaudio - VERSION 0.11 + VERSION 0.11.22 ) @@ -634,6 +634,87 @@ if(MINIAUDIO_NO_RUNTIME_LINKING) endif() +function(is_backend_enabled NAME) + if (NOT MINIAUDIO_NO_${NAME} AND (NOT MINIAUDIO_ENABLE_ONLY_SPECIFIC_BACKENDS OR MINIAUDIO_ENABLE_${NAME})) + set(${NAME}_ENABLED TRUE PARENT_SCOPE) + else() + set(${NAME}_ENABLED FALSE PARENT_SCOPE) + endif() +endfunction() + +set(LINKED_LIBS) + +if(MINIAUDIO_NO_RUNTIME_LINKING) + is_backend_enabled(PULSEAUDIO) + if (PULSEAUDIO_ENABLED) + find_package(PulseAudio REQUIRED) + target_link_libraries(miniaudio PRIVATE ${PULSEAUDIO_LIBRARY}) + target_include_directories(miniaudio SYSTEM PRIVATE ${PULSEAUDIO_INCLUDE_DIR}) + list(APPEND LINKED_LIBS libpulse) + endif() + + is_backend_enabled(ALSA) + if (ALSA_ENABLED) + find_package(PkgConfig QUIET) + + if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_ALSA alsa) + endif() + + find_library(ALSA_LIBRARY + NAMES asound + HINTS ${PC_ALSA_LIBRARY_DIRS} + ) + find_path(ALSA_INCLUDE_DIR + NAMES alsa/asoundlib.h + HINTS ${PC_ALSA_INCLUDE_DIRS} + ) + + target_link_libraries(miniaudio PRIVATE ${ALSA_LIBRARY}) + target_include_directories(miniaudio PRIVATE ${ALSA_INCLUDE_DIR}) + list(APPEND LINKED_LIBS alsa) + endif() + + is_backend_enabled(SNDIO) + if (SNDIO_ENABLED) + find_package(PkgConfig QUIET) + + if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_SNDIO sndio) + endif() + + find_library(SNDIO_LIBRARY + NAMES sndio + HINTS ${PC_SNDIO_LIBRARY_DIRS} + ) + target_link_libraries(miniaudio PRIVATE ${SNDIO_LIBRARY}) + list(APPEND LINKED_LIBS sndio) + endif() + + is_backend_enabled(JACK) + if (JACK_ENABLED) + find_package(PkgConfig QUIET) + + if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_JACK jack) + endif() + + find_library(JACK_LIBRARY + NAMES jack + HINTS ${PC_JACK_LIBRARY_DIRS} + ) + + find_path(JACK_INCLUDE_DIR + NAMES jack/jack.h + HINTS ${PC_JACK_INCLUDE_DIRS} + ) + + target_link_libraries(miniaudio PRIVATE ${JACK_LIBRARY}) + target_include_directories(miniaudio PRIVATE ${JACK_INCLUDE_DIR}) + list(APPEND LINKED_LIBS jack) + endif() +endif() + # Tests # # All tests are compiled as a single translation unit. There is no need to add miniaudio as a link library. @@ -760,6 +841,27 @@ if (MINIAUDIO_BUILD_EXAMPLES) add_miniaudio_example(miniaudio_simple_spatialization simple_spatialization.c) endif() +if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}") + set(MINIAUDIO_PC_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}") +else() + set(MINIAUDIO_PC_INCLUDEDIR "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") +endif() +if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}") + set(MINIAUDIO_PC_LIBDIR "${CMAKE_INSTALL_LIBDIR}") +else() + set(MINIAUDIO_PC_LIBDIR "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}") +endif() + +string(JOIN ", " MINIAUDIO_PC_REQUIRES_PRIVATE ${LINKED_LIBS}) +list(TRANSFORM COMMON_LINK_LIBRARIES PREPEND "-l") +string(JOIN " " MINIAUDIO_PC_LIBS_PRIVATE ${COMMON_LINK_LIBRARIES}) +list(TRANSFORM COMPILE_DEFINES PREPEND "-D") +string(JOIN " " MINIAUDIO_PC_CFLAGS ${COMPILE_DEFINES}) + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/miniaudio.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/miniaudio.pc" @ONLY) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/miniaudio.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + message(STATUS "Library list: ${LIBS_TO_INSTALL}") install(TARGETS ${LIBS_TO_INSTALL} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} diff --git a/miniaudio.pc.in b/miniaudio.pc.in new file mode 100644 index 00000000..cae173bd --- /dev/null +++ b/miniaudio.pc.in @@ -0,0 +1,15 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +includedir=@MINIAUDIO_PC_INCLUDEDIR@ +libdir=@MINIAUDIO_PC_LIBDIR@ + +Name: miniaudio +Description: An audio playback and capture library. +URL: https://miniaud.io/ +License: Unlicense OR MIT-0 +Version: @PROJECT_VERSION@ + +Requires.private: @MINIAUDIO_PC_REQUIRES_PRIVATE@ +Cflags: -I${includedir} @MINIAUDIO_PC_CFLAGS@ +Libs: -L${libdir} -lminiaudio +Libs.private: @MINIAUDIO_PC_LIBS_PRIVATE@