From 146e86fbdea5a7a4c846e7b4a210ee179e1943d5 Mon Sep 17 00:00:00 2001 Message-Id: <146e86fbdea5a7a4c846e7b4a210ee179e1943d5.1714247922.git.mdw@distorted.org.uk> From: Mark Wooding Date: Fri, 5 Oct 2007 14:13:08 +0100 Subject: [PATCH] detect ALSA capability automatically Organization: Straylight/Edgeware From: rjk@greenend.org.uk <> --- clients/playrtp-alsa.c | 2 +- clients/playrtp.c | 8 ++++---- configure.ac | 16 ++++------------ lib/configuration.c | 6 ++++-- server/speaker-alsa.c | 2 +- server/speaker.c | 2 +- 6 files changed, 15 insertions(+), 21 deletions(-) diff --git a/clients/playrtp-alsa.c b/clients/playrtp-alsa.c index ceea87b..263ab40 100644 --- a/clients/playrtp-alsa.c +++ b/clients/playrtp-alsa.c @@ -23,7 +23,7 @@ #include -#if API_ALSA +#if HAVE_ALSA_ASOUNDLIB_H #include "types.h" #include diff --git a/clients/playrtp.c b/clients/playrtp.c index 1be801f..b9f1529 100644 --- a/clients/playrtp.c +++ b/clients/playrtp.c @@ -161,7 +161,7 @@ pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; /** @brief Condition variable signalled whenever @ref packets is changed */ pthread_cond_t cond = PTHREAD_COND_INITIALIZER; -#if API_ALSA +#if HAVE_ALSA_ASOUNDLIB_H # define DEFAULT_BACKEND playrtp_alsa #elif HAVE_SYS_SOUNDCARD_H # define DEFAULT_BACKEND playrtp_oss @@ -189,7 +189,7 @@ static const struct option options[] = { #if HAVE_SYS_SOUNDCARD_H { "oss", no_argument, 0, 'o' }, #endif -#if API_ALSA +#if HAVE_ALSA_ASOUNDLIB_H { "alsa", no_argument, 0, 'a' }, #endif #if HAVE_COREAUDIO_AUDIOHARDWARE_H @@ -407,7 +407,7 @@ static void help(void) { " --max, -x FRAMES Buffer maximum size\n" " --rcvbuf, -R BYTES Socket receive buffer size\n" " --multicast, -M GROUP Join multicast group\n" -#if API_ALSA +#if HAVE_ALSA_ASOUNDLIB_H " --alsa, -a Use ALSA to play audio\n" #endif #if HAVE_SYS_SOUNDCARD_H @@ -466,7 +466,7 @@ int main(int argc, char **argv) { case 'L': logfp = fopen(optarg, "w"); break; case 'R': target_rcvbuf = atoi(optarg); break; case 'M': multicast_group = optarg; break; -#if API_ALSA +#if HAVE_ALSA_ASOUNDLIB_H case 'a': backend = playrtp_alsa; break; #endif #if 0 diff --git a/configure.ac b/configure.ac index 8b07fd8..4976ac1 100644 --- a/configure.ac +++ b/configure.ac @@ -34,16 +34,13 @@ want_python=yes case "$host" in *linux* | *Linux* ) - want_alsa=yes want_server=yes ;; *-apple-darwin* ) - want_alsa=no want_server=no COREAUDIO="-framework CoreAudio" ;; * ) - want_alsa=no want_server=no ;; esac @@ -129,6 +126,8 @@ AC_CHECK_LIB(gcrypt, gcry_md_open, AC_CHECK_LIB(pcre, pcre_compile, [AC_SUBST(LIBPCRE,[-lpcre])], [missing_libraries="$missing_libraries libpcre"]) +AC_CHECK_LIB([asound], [snd_pcm_open], + [AC_SUBST(LIBASOUND,[-lasound])]) if test $want_server = yes; then RJK_CHECK_LIB(db, db_create, [#include ], [AC_SUBST(LIBDB,[-ldb])], @@ -150,12 +149,6 @@ if test $want_server = yes; then [AC_SUBST(LIBFLAC,[-lFLAC])], [missing_libraries="$missing_libraries libFLAC"]) fi -if test $want_alsa = yes; then - AC_CHECK_LIB([asound], [snd_pcm_open], - [AC_SUBST(LIBASOUND,[-lasound])], - [missing_libraries="$missing_libraries libasound"]) - AC_DEFINE([API_ALSA],[1],[define to use the ALSA API]) -fi if test $want_gtk = yes; then AM_PATH_GLIB_2_0([],[],[missing_libraries="$missing_libraries libglib"]) @@ -189,15 +182,14 @@ RJK_REQUIRE_PCRE_UTF8([-lpcre]) # Checks for header files. RJK_FIND_GC_H -AC_CHECK_HEADERS([inttypes.h CoreAudio/AudioHardware.h]) +AC_CHECK_HEADERS([inttypes.h CoreAudio/AudioHardware.h sys/soundcard.h alsa/asoundlib.h]) +# We don't bother checking very standard stuff # Compilation will fail if any of these headers are missing, so we # check for them here and fail early. -# We don't bother checking very standard stuff if test $want_server = yes; then AC_CHECK_HEADERS([db.h],[:],[ missing_headers="$missing_headers $ac_header" ]) - AC_CHECK_HEADERS([sys/soundcard.h]) dnl can cope without fi AC_CHECK_HEADERS([dlfcn.h gcrypt.h \ getopt.h iconv.h langinfo.h \ diff --git a/lib/configuration.c b/lib/configuration.c index 92acce1..a506ee9 100644 --- a/lib/configuration.c +++ b/lib/configuration.c @@ -439,7 +439,7 @@ static int set_backend(const struct config_state *cs, return -1; } if(!strcmp(vec[0], "alsa")) { -#if API_ALSA +#if HAVE_ALSA_ASOUNDLIB_H *valuep = BACKEND_ALSA; #else error(0, "%s:%d: ALSA is not available on this platform", @@ -1084,8 +1084,10 @@ static void config_postdefaults(struct config *c, else if(c->broadcast.n) c->speaker_backend = BACKEND_NETWORK; else { -#if API_ALSA +#if HAVE_ALSA_ASOUNDLIB_H c->speaker_backend = BACKEND_ALSA; +#elif HAVE_SYS_SOUNDCARD_H + c->speaker_backend = BACKEND_OSS; #elif HAVE_COREAUDIO_AUDIOHARDWARE_H c->speaker_backend = BACKEND_COREAUDIO; #else diff --git a/server/speaker-alsa.c b/server/speaker-alsa.c index 80395f3..731c4ff 100644 --- a/server/speaker-alsa.c +++ b/server/speaker-alsa.c @@ -22,7 +22,7 @@ #include -#if API_ALSA +#if HAVE_ALSA_ASOUNDLIB_H #include "types.h" diff --git a/server/speaker.c b/server/speaker.c index 7f4578d..41a12e5 100644 --- a/server/speaker.c +++ b/server/speaker.c @@ -372,7 +372,7 @@ int addfd(int fd, int events) { /** @brief Table of speaker backends */ static const struct speaker_backend *backends[] = { -#if API_ALSA +#if HAVE_ALSA_ASOUNDLIB_H &alsa_backend, #endif &command_backend, -- [mdw]