detect ALSA capability automatically
authorrjk@greenend.org.uk <>
Fri, 5 Oct 2007 13:13:08 +0000 (14:13 +0100)
committerrjk@greenend.org.uk <>
Fri, 5 Oct 2007 13:13:08 +0000 (14:13 +0100)
clients/playrtp-alsa.c
clients/playrtp.c
configure.ac
lib/configuration.c
server/speaker-alsa.c
server/speaker.c

index ceea87b..263ab40 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <config.h>
 
-#if API_ALSA
+#if HAVE_ALSA_ASOUNDLIB_H 
 #include "types.h"
 
 #include <poll.h>
index 1be801f..b9f1529 100644 (file)
@@ -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
index 8b07fd8..4976ac1 100644 (file)
@@ -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 <db.h>],
               [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 \
index 92acce1..a506ee9 100644 (file)
@@ -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
index 80395f3..731c4ff 100644 (file)
@@ -22,7 +22,7 @@
 
 #include <config.h>
 
-#if API_ALSA
+#if HAVE_ALSA_ASOUNDLIB_H
 
 #include "types.h"
 
index 7f4578d..41a12e5 100644 (file)
@@ -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,