Commit Diff


commit - e26da60a20d19b69c0bafd3005985d2c9965c4f3
commit + 34674849fb1efe5167c457f0dc98ee7fadcc8886
blob - dd7865dd031072630bde52cdb3f06d625ba85dea
blob + 4882c64626c8626ec57729d8adc58b1d7ea8c9a6
--- Makefile
+++ Makefile
@@ -5,7 +5,6 @@ PROG =		amused
 DISTNAME =	${PROG}-${VERSION}
 
 SOURCES =	amused.c \
-		audio_sndio.c \
 		compats.c \
 		control.c \
 		ctl.c \
@@ -18,7 +17,7 @@ SOURCES =	amused.c \
 		playlist.c \
 		xmalloc.c
 
-OBJS =		${SOURCES:.c=.o}
+OBJS =		${SOURCES:.c=.o} audio_${BACKEND}.o
 
 HEADERS =	amused.h \
 		control.h \
@@ -37,7 +36,9 @@ DISTFILES =	CHANGES \
 		queue.h \
 		tests.c \
 		${HEADERS} \
-		${SOURCES}
+		${SOURCES} \
+		audio_alsa.c \
+		audio_sndio.c
 
 all: ${PROG}
 
blob - cd2123ffb8898744b528edcb82d574b5e6350854
blob + 8cbb899af097b32a9eb49518f94071f246702084
--- configure
+++ configure
@@ -2,7 +2,7 @@
 #
 # Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
 # Copyright (c) 2017, 2018 Kristaps Dzonsons <kristaps@bsd.lv>
-# Copyright (c) 2022 Omar Polo <op@omarpolo.com>
+# Copyright (c) 2022, 2023 Omar Polo <op@omarpolo.com>
 #
 # Permission to use, copy, modify, and distribute this software for any
 # purpose with or without fee is hereby granted, provided that the above
@@ -55,8 +55,12 @@ The options are as follows:
     --prefix=path  equivalent to specify the PREFIX variable, supported
                    for compatibility with other common "configure" scripts.
 
+    --backend=name equivalent to specify the BACKEND variable, can be either
+                   "sndio" or "alsa".
+
 Variables available:
 
+    BACKEND                audio backend to use; can be "sndio" or "alsa"
     LDADD                  generic linker flags
     LDADD_IMSG             linker flags for libimsg
     LDADD_LIBEVENT         linker flags for libevent
@@ -127,6 +131,7 @@ fi
 # environment except for CC and CFLAGS, which we might have passed in.
 #----------------------------------------------------------------------
 
+BACKEND=auto
 CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | make ${MAKE_FLAGS} -sf -`
 CFLAGS=`printf "all:\\n\\t@echo \\\$(CFLAGS)\\n" | make ${MAKE_FLAGS} -sf -`
 CFLAGS="${CFLAGS} -g -W -Wall -Wextra -Wmissing-prototypes"
@@ -139,6 +144,7 @@ LDADD_LIBEVENT2=
 LDADD_LIB_FLAC=
 LDADD_LIB_MPG123=
 LDADD_LIB_VORBISFILE=
+LDADD_LIB_ASOUND=
 LDADD_LIB_SNDIO=
 LDADD_LIB_SOCKET=
 LDADD_STATIC=
@@ -201,6 +207,17 @@ while [ $# -gt 0 ]; do
 		if [ "$1" = "--prefix" ]; then
 			if ! shift 2>&1 >/dev/null; then
 				echo "$0: missing value for --prefix" 1>&2
+				exit 1
+			fi
+			val="$1"
+		fi
+	fi
+
+	if [ "$key" = "--backend" ]; then
+		key=BACKEND
+		if [ "$1" = "--backend" ]; then
+			if ! shift 2>&1 >/dev/null; then
+				echo "$0 missing value for --backend" 1>&2
 				exit 1
 			fi
 			val="$1"
@@ -215,6 +232,14 @@ while [ $# -gt 0 ]; do
 	shift
 
 	case "$key" in
+	BACKEND)
+		case "$val" in
+		alsa)	BACKEND=alsa ;;
+		sndio)	BACKEND=sndio ;;
+		*)
+			echo "unknown audio backend: $val" 1>&2
+			exit 1
+		esac ;;
 	LDADD)
 		LDADD="$val" ;;
 	LDADD_IMSG)
@@ -289,6 +314,7 @@ HAVE_LIB_FLAC=
 HAVE_LIB_MPG123=
 HAVE_LIB_OPUSFILE=
 HAVE_LIB_VORBISFILE=
+HAVE_LIB_ASOUND=
 HAVE_LIB_SNDIO=
 HAVE_LIB_SOCKET=
 HAVE_MEMMEM=
@@ -490,7 +516,6 @@ runtest lib_mpg123	LIB_MPG123 "" "" "-lmpg123" "libmpg
 runtest lib_opusfile	LIB_OPUSFILE "" "" "-lopusfile"	"opusfile"  || true
 runtest lib_vorbisfile	LIB_VORBISFILE "" "" "-lvorbisfile" "vorbisfile" || true
 
-runtest lib_sndio	LIB_SNDIO "" "" "-lsndio" "sndio" || true
 runtest lib_socket	LIB_SOCKET "" "" "-lsocket -lnsl" || true
 runtest memmem		MEMMEM			  	  || true
 runtest memrchr		MEMRCHR			  	  || true
@@ -504,7 +529,6 @@ runtest reallocarray	REALLOCARRAY			  || true
 runtest recallocarray	RECALLOCARRAY			  || true
 runtest sandbox_init	SANDBOX_INIT	"-Wno-deprecated" || true
 runtest setproctitle	SETPROCTITLE			  || true
-runtest sio_flush	SIO_FLUSH "" "" "${LDADD_LIB_SNDIO}" || true
 runtest SOCK_NONBLOCK	SOCK_NONBLOCK			  || true
 runtest static		STATIC "" "-static"		  || true
 runtest strlcat		STRLCAT				  || true
@@ -516,7 +540,37 @@ runtest sys_queue	SYS_QUEUE			  || true
 runtest sys_file	SYS_FILE			  || true
 runtest unveil		UNVEIL				  || true
 runtest __progname	__PROGNAME			  || true
+
+if [ $BACKEND != alsa ]; then # auto or sndio
+	runtest lib_sndio LIB_SNDIO "" "" "-lsndio" "sndio" || true
+	runtest sio_flush SIO_FLUSH "" "" "${LDADD_LIB_SNDIO}" || true
+
+	if [ "${HAVE_LIB_SNDIO}" -eq 0 ]; then
+		if [ $BACKEND = sndio ]; then
+			echo "Fatal: missing libsndio" 1>&2
+			echo "Fatal: missing libsndio" 1>&3
+			exit 1
+		fi
+	else
+		BACKEND=sndio
+	fi
+fi
 
+if [ $BACKEND != sndio ]; then # auto or alsa
+	runtest lib_asound LIB_ASOUND "" "" "-lasound" "alsa" || true
+	if [ "${HAVE_LIB_ASOUND}" -eq 0 ]; then
+		if [ $BACKEND = alsa ]; then
+			echo "Fatal: missing libasound" 1>&2
+			echo "Fatal: missing libasound" 1>&3
+		else
+			echo "Fatal: missing libasound or libsndio" 1>&2
+			echo "Fatal: missing libasound or libsndio" 1>&3
+		fi
+		exit 1
+	fi
+	BACKEND=alsa
+fi
+
 if [ "${HAVE_LIBEVENT}" -eq 0 -a "${HAVE_LIBEVENT2}" -eq 0 ]; then
 	echo "Fatal: missing libevent" 1>&2
 	echo "Fatal: missing libevent" 1>&3
@@ -532,12 +586,6 @@ if [ "${HAVE_LIB_FLAC}" -eq 0 -o \
 	exit 1
 fi
 
-if [ "${HAVE_LIB_SNDIO}" -eq 0 ]; then
-	echo "Fatal: missing libsndio" 1>&2
-	echo "Fatal: missing libsndio" 1>&3
-	exit 1
-fi
-
 #----------------------------------------------------------------------
 # Output writing: generate the config.h file.
 # This file contains all of the HAVE_xxxx variables necessary for
@@ -920,12 +968,14 @@ exec > Makefile.configure
 [ -z "${INSTALL_DATA}"    ] && INSTALL_DATA="${INSTALL} -m 0444"
 
 cat << __HEREDOC__
+BACKEND		 = ${BACKEND}
 CC		 = ${CC}
 CFLAGS		 = ${CFLAGS}
 CPPFLAGS	 = ${CPPFLAGS}
 LDADD		 = ${LDADD} ${LDADD_IMSG} ${LDADD_LIB_FLAC} ${LDADD_LIB_MPG123} \
-		   ${LDADD_LIB_OPUSFILE} ${LDADD_LIB_VORBISFILE} ${LDADD_LIB_SOCKET} \
-		   ${LDADD_LIBEVENT} ${LDADD_LIBEVENT2} ${LDADD_LIB_SNDIO}
+		   ${LDADD_LIB_OPUSFILE} ${LDADD_LIB_VORBISFILE} \
+		   ${LDADD_LIB_SOCKET} ${LDADD_LIBEVENT} ${LDADD_LIBEVENT2} \
+		   ${LDADD_LIB_SNDIO} ${LDADD_LIB_ASOUND}
 LDADD_STATIC	 = ${LDADD_STATIC}
 LDFLAGS		 = ${LDFLAGS}
 STATIC		 = ${STATIC}
blob - fb75999b977009afe407604d9871ccf68cdd821f
blob + 89cb73563fbf609ab47ee8ea2843e7755536bb01
--- tests.c
+++ tests.c
@@ -942,6 +942,20 @@ main(void)
 	return 0;
 }
 #endif /* TEST_LIB_VORBISFILE */
+#if TEST_LIB_ASOUND
+#include <alsa/asoundlib.h>
+
+int
+main(void)
+{
+	snd_pcm_t *pcm;
+	int err;
+
+	err = snd_pcm_open(&pcm, "default", SND_PCM_STREAM_PLAYBACK,
+	    SND_PCM_NONBLOCK);
+	return err;
+}
+#endif /* TEST_LIB_ASOUND */
 #if TEST_LIB_SNDIO
 #include <sndio.h>