chiark / gitweb /
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 ceea87b8df9a76fcc54c8f50ed297a63f1ee2b0b..263ab40045186ec7ddaeda7ff0bfac0ed8646c1e 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <config.h>
 
-#if API_ALSA
+#if HAVE_ALSA_ASOUNDLIB_H 
 #include "types.h"
 
 #include <poll.h>
index 1be801f53153bdf93054c7c7cb08cf79f632c6f9..b9f15298cdbc11f225cadcab1a18d2118d8de537 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 8b07fd83b1c23a9773fc312e978b1722a9097415..4976ac156e857a43add682f932cd688fb637d351 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 92acce183f8b75eec4b70d2aa3a28e78483ca4cd..a506ee948fe8439167324c928017c341aca36d93 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 80395f3bcc0abfcf939350295490c2ceecb6bd10..731c4ff4c3dddd07db298de5bf8fdc51d7cac20c 100644 (file)
@@ -22,7 +22,7 @@
 
 #include <config.h>
 
-#if API_ALSA
+#if HAVE_ALSA_ASOUNDLIB_H
 
 #include "types.h"
 
index 7f4578de7a69b71f835dcc272020cce046cb5275..41a12e507dc60d680d76cc55de7ded744f47c315 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,