aboutsummaryrefslogtreecommitdiff
path: root/audio
diff options
context:
space:
mode:
authorJoe Marcus Clarke <marcus@FreeBSD.org>2008-08-09 20:44:32 +0000
committerJoe Marcus Clarke <marcus@FreeBSD.org>2008-08-09 20:44:32 +0000
commit514d2687901bb6c21fd4e396907688472b3ff30a (patch)
tree5bc5bff4649c933cc8c05fa23bc41b657dfa386e /audio
parent57250968cbe7b7369146782713aab4138b578209 (diff)
downloadports-514d2687901bb6c21fd4e396907688472b3ff30a.tar.gz
ports-514d2687901bb6c21fd4e396907688472b3ff30a.zip
Notes
Diffstat (limited to 'audio')
-rw-r--r--audio/libcanberra/Makefile14
-rw-r--r--audio/libcanberra/files/patch-config.h.in42
-rw-r--r--audio/libcanberra/files/patch-configure711
-rw-r--r--audio/libcanberra/files/patch-configure.ac140
-rw-r--r--audio/libcanberra/files/patch-src_Makefile.am37
-rw-r--r--audio/libcanberra/files/patch-src_Makefile.in225
-rw-r--r--audio/libcanberra/files/patch-src_driver-order.c12
-rw-r--r--audio/libcanberra/files/patch-src_oss.c465
-rw-r--r--audio/libcanberra/pkg-plist3
9 files changed, 1644 insertions, 5 deletions
diff --git a/audio/libcanberra/Makefile b/audio/libcanberra/Makefile
index c0edbb67cf38..9456c9e47101 100644
--- a/audio/libcanberra/Makefile
+++ b/audio/libcanberra/Makefile
@@ -7,7 +7,7 @@
PORTNAME= libcanberra
PORTVERSION= 0.6
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= audio devel
MASTER_SITES= http://0pointer.de/public/
@@ -23,16 +23,20 @@ USE_AUTOTOOLS= libtool:15
CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \
LDFLAGS="-L${LOCALBASE}/lib"
-OPTIONS= PULSE "Enable Pulse Audio support" on
+OPTIONS= PULSE "Enable Pulse Audio support" off
.include <bsd.port.pre.mk>
-.if defined(WITH_PULSE)
+.if !defined(WITHOUT_PULSE)
LIB_DEPENDS+= pulse.0:${PORTSDIR}/audio/pulseaudio
-PLIST_SUB+= PULSE=""
+PLIST_SUB+= PULSE="" OSS="@comment "
+CONFIGURE_ARGS+=--disable-oss
.else
CONFIGURE_ARGS+=--disable-pulse
-PLIST_SUB+= PULSE="@comment "
+PLIST_SUB+= PULSE="@comment " OSS=""
.endif
+post-patch:
+ @${FIND} ${WRKSRC} -type f | ${XARGS} ${TOUCH}
+
.include <bsd.port.post.mk>
diff --git a/audio/libcanberra/files/patch-config.h.in b/audio/libcanberra/files/patch-config.h.in
new file mode 100644
index 000000000000..d1d6b10e84c4
--- /dev/null
+++ b/audio/libcanberra/files/patch-config.h.in
@@ -0,0 +1,42 @@
+--- config.h.in.orig 2008-08-09 15:51:54.000000000 -0400
++++ config.h.in 2008-08-09 15:51:57.000000000 -0400
+@@ -30,6 +30,9 @@
+ /* Define to 1 if you have the `lstat' function. */
+ #undef HAVE_LSTAT
+
++/* Define to 1 if you have the <machine/soundcard.h> header file. */
++#undef HAVE_MACHINE_SOUNDCARD_H
++
+ /* Define to 1 if you have the <memory.h> header file. */
+ #undef HAVE_MEMORY_H
+
+@@ -39,6 +42,9 @@
+ /* Have NULL output? */
+ #undef HAVE_NULL
+
++/* Have OSS? */
++#undef HAVE_OSS
++
+ /* Define to 1 if you have the `posix_memalign' function. */
+ #undef HAVE_POSIX_MEMALIGN
+
+@@ -57,6 +63,9 @@
+ /* Define to 1 if you have the `sleep' function. */
+ #undef HAVE_SLEEP
+
++/* Define to 1 if you have the <soundcard.h> header file. */
++#undef HAVE_SOUNDCARD_H
++
+ /* Define to 1 if the system has the type `ssize_t'. */
+ #undef HAVE_SSIZE_T
+
+@@ -93,6 +102,9 @@
+ /* Define to 1 if you have the <sys/socket.h> header file. */
+ #undef HAVE_SYS_SOCKET_H
+
++/* Define to 1 if you have the <sys/soundcard.h> header file. */
++#undef HAVE_SYS_SOUNDCARD_H
++
+ /* Define to 1 if you have the <sys/stat.h> header file. */
+ #undef HAVE_SYS_STAT_H
+
diff --git a/audio/libcanberra/files/patch-configure b/audio/libcanberra/files/patch-configure
new file mode 100644
index 000000000000..130b110aced1
--- /dev/null
+++ b/audio/libcanberra/files/patch-configure
@@ -0,0 +1,711 @@
+--- configure.orig 2008-08-09 15:27:31.000000000 -0400
++++ configure 2008-08-09 15:28:04.000000000 -0400
+@@ -935,15 +935,19 @@ VORBIS_LIBS
+ HAVE_DSO
+ HAVE_PULSE
+ HAVE_ALSA
++HAVE_OSS
+ HAVE_NULL
+ BUILTIN_DSO
+ BUILTIN_PULSE
+ BUILTIN_ALSA
++BUILTIN_OSS
+ BUILTIN_NULL
+ HAVE_PULSE_TRUE
+ HAVE_PULSE_FALSE
+ HAVE_ALSA_TRUE
+ HAVE_ALSA_FALSE
++HAVE_OSS_TRUE
++HAVE_OSS_FALSE
+ HAVE_NULL_TRUE
+ HAVE_NULL_FALSE
+ BUILTIN_DSO_TRUE
+@@ -952,6 +956,8 @@ BUILTIN_PULSE_TRUE
+ BUILTIN_PULSE_FALSE
+ BUILTIN_ALSA_TRUE
+ BUILTIN_ALSA_FALSE
++BUILTIN_OSS_TRUE
++BUILTIN_OSS_FALSE
+ BUILTIN_NULL_TRUE
+ BUILTIN_NULL_FALSE
+ HTML_DIR
+@@ -978,6 +984,7 @@ enable_largefile
+ enable_rpath
+ with_libiconv_prefix
+ enable_alsa
++enable_oss
+ enable_pulse
+ enable_null
+ enable_gtk
+@@ -1650,6 +1657,7 @@ Optional Features:
+ --disable-largefile omit support for large files
+ --disable-rpath do not hardcode runtime library paths
+ --disable-alsa Disable optional ALSA support
++ --disable-oss Disable optional OSS support
+ --disable-pulse Disable optional PulseAudio support
+ --disable-null Disable optional null output
+ --disable-gtk Disable optional GTK+ support
+@@ -6080,7 +6088,7 @@ ia64-*-hpux*)
+ ;;
+ *-*-irix6*)
+ # Find out which ABI we are using.
+- echo '#line 6083 "configure"' > conftest.$ac_ext
++ echo '#line 6091 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+@@ -8509,11 +8517,11 @@ else
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:8512: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:8520: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:8516: \$? = $ac_status" >&5
++ echo "$as_me:8524: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -8799,11 +8807,11 @@ else
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:8802: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:8810: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:8806: \$? = $ac_status" >&5
++ echo "$as_me:8814: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -8903,11 +8911,11 @@ else
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:8906: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:8914: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:8910: \$? = $ac_status" >&5
++ echo "$as_me:8918: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -11305,7 +11313,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+-#line 11308 "configure"
++#line 11316 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11405,7 +11413,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+-#line 11408 "configure"
++#line 11416 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -13814,11 +13822,11 @@ else
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:13817: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:13825: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:13821: \$? = $ac_status" >&5
++ echo "$as_me:13829: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -13918,11 +13926,11 @@ else
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:13921: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:13929: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:13925: \$? = $ac_status" >&5
++ echo "$as_me:13933: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -15503,11 +15511,11 @@ else
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:15506: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:15514: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:15510: \$? = $ac_status" >&5
++ echo "$as_me:15518: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -15607,11 +15615,11 @@ else
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:15610: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:15618: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:15614: \$? = $ac_status" >&5
++ echo "$as_me:15622: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -17824,11 +17832,11 @@ else
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:17827: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:17835: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:17831: \$? = $ac_status" >&5
++ echo "$as_me:17839: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -18114,11 +18122,11 @@ else
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:18117: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:18125: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:18121: \$? = $ac_status" >&5
++ echo "$as_me:18129: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -18218,11 +18226,11 @@ else
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:18221: $lt_compile\"" >&5)
++ (eval echo "\"\$as_me:18229: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:18225: \$? = $ac_status" >&5
++ echo "$as_me:18233: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -21692,6 +21700,46 @@ if test "${ac_cv_c_bigendian+set}" = set
+ $as_echo_n "(cached) " >&6
+ else
+ ac_cv_c_bigendian=unknown
++ # See if __BIG_ENDIAN__ or __LITTLE_ENDIAN__ is defined.
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#if ! (defined __BIG_ENDIAN__ || defined __LITTLE_ENDIAN__)
++ neither is defined;
++ #endif
++ typedef int dummy;
++
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
++$as_echo "$ac_try_echo") >&5
++ (eval "$ac_compile") 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_cv_c_bigendian=universal
++else
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if sys/param.h defines the BYTE_ORDER macro.
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -23490,7 +23538,7 @@ fi
+
+ # We must check for the threads library under a number of different
+ # names; the ordering is very important because some systems
+-# (e.g. DEC) have both -pthread and -pthreads, where one of the
++# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+ # libraries is broken (non-POSIX).
+
+ # Create a list of thread flags to try. Items starting with a "-" are
+@@ -23503,7 +23551,7 @@ acx_pthread_flags="pthreads none -Kthrea
+ # The ordering *is* (sometimes) important. Some notes on the
+ # individual items follow:
+
+-# pthreads: AIX (must check this before -pthread)
++# pthreads: AIX (must check this before -lpthread)
+ # none: in case threads are in libc; should be tried before -Kthread and
+ # other compiler flags to prevent continual compiler warnings
+ # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+@@ -23526,10 +23574,10 @@ case "${host_cpu}-${host_os}" in
+ # On Solaris (at least, for some versions), libc contains stubbed
+ # (non-functional) versions of the pthreads routines, so link-based
+ # tests will erroneously succeed. (We need to link with -pthreads/-mt/
+- # -pthread.) (The stubs are missing pthread_cleanup_push, or rather
++ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
+ # a function called by this macro, so we could check for that, but
+ # who knows whether they'll stub that too in a future libc.) So,
+- # we'll just look for -pthreads and -pthread first:
++ # we'll just look for -pthreads and -lpthread first:
+
+ acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
+ ;;
+@@ -23609,9 +23657,9 @@ $as_echo_n "checking for the pthreads li
+ # Check for various functions. We must include pthread.h,
+ # since some functions may be macros. (On the Sequent, we
+ # need a special flag -Kthread to make this header compile.)
+- # We check for pthread_join because it is in -pthread on IRIX
++ # We check for pthread_join because it is in -lpthread on IRIX
+ # while pthread_create is in libc. We check for pthread_attr_init
+- # due to DEC craziness with -pthreads. We check for
++ # due to DEC craziness with -lpthreads. We check for
+ # pthread_cleanup_push because it is one of the few pthread
+ # functions on Solaris that doesn't have a non-functional libc stub.
+ # We try pthread_create on general principles.
+@@ -23916,12 +23964,12 @@ $as_echo "no" >&6; }
+
+ #
+ # Linux gcc on some architectures such as mips/mipsel forgets
+- # about -pthread
++ # about -lpthread
+ #
+ if test x"$ok" = xno; then
+- { $as_echo "$as_me:$LINENO: checking whether -pthread fixes that" >&5
+-$as_echo_n "checking whether -pthread fixes that... " >&6; }
+- LIBS="-pthread $PTHREAD_LIBS $save_LIBS"
++ { $as_echo "$as_me:$LINENO: checking whether -lpthread fixes that" >&5
++$as_echo_n "checking whether -lpthread fixes that... " >&6; }
++ LIBS="-lpthread $PTHREAD_LIBS $save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -23975,7 +24023,7 @@ rm -f core conftest.err conftest.$ac_obj
+ if test "x$ok" = xyes; then
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+ $as_echo "yes" >&6; }
+- PTHREAD_LIBS="-pthread $PTHREAD_LIBS"
++ PTHREAD_LIBS="-lpthread $PTHREAD_LIBS"
+ else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+ $as_echo "no" >&6; }
+@@ -25735,6 +25783,197 @@ fi
+
+
+
++### OSS support (optional) ###
++# Check whether --enable-oss was given.
++if test "${enable_oss+set}" = set; then
++ enableval=$enable_oss;
++ case "${enableval}" in
++ yes) alsa=yes ;;
++ no) alsa=no ;;
++ *) { { $as_echo "$as_me:$LINENO: error: bad value ${enableval} for --disable-oss" >&5
++$as_echo "$as_me: error: bad value ${enableval} for --disable-oss" >&2;}
++ { (exit 1); exit 1; }; } ;;
++ esac
++
++else
++ oss=auto
++fi
++
++
++if test "x${oss}" != xno ; then
++
++
++
++for ac_header in soundcard.h sys/soundcard.h machine/soundcard.h
++do
++as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++ { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
++$as_echo_n "checking for $ac_header... " >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++ $as_echo_n "(cached) " >&6
++fi
++ac_res=`eval 'as_val=${'$as_ac_Header'}
++ $as_echo "$as_val"'`
++ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++else
++ # Is the header compilable?
++{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
++$as_echo_n "checking $ac_header usability... " >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++$ac_includes_default
++#include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
++$as_echo "$ac_try_echo") >&5
++ (eval "$ac_compile") 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_header_compiler=yes
++else
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++$as_echo "$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
++$as_echo_n "checking $ac_header presence... " >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
++$as_echo "$ac_try_echo") >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then
++ ac_header_preproc=yes
++else
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++$as_echo "$ac_header_preproc" >&6; }
++
++# So? What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
++ yes:no: )
++ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++ ac_header_preproc=yes
++ ;;
++ no:yes:* )
++ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
++$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
++ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
++$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
++ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++ { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++ ( cat <<\_ASBOX
++## --------------------------------------------------- ##
++## Report this to mzyvopnaoreen (at) 0pointer (dot) de ##
++## --------------------------------------------------- ##
++_ASBOX
++ ) | sed "s/^/$as_me: WARNING: /" >&2
++ ;;
++esac
++{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
++$as_echo_n "checking for $ac_header... " >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++ $as_echo_n "(cached) " >&6
++else
++ eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval 'as_val=${'$as_ac_Header'}
++ $as_echo "$as_val"'`
++ { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++
++fi
++if test `eval 'as_val=${'$as_ac_Header'}
++ $as_echo "$as_val"'` = yes; then
++ cat >>confdefs.h <<_ACEOF
++#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++
++fi
++
++done
++
++ if test "${ac_cv_header_sys_soundcard_h}" = "yes" || \
++ test "${ac_cv_header_soundcard_h}" = "yes" || \
++ test "${ac_cv_header_machine_soundcard_h}" = "yes"; then
++ HAVE_OSS=1
++
++cat >>confdefs.h <<\_ACEOF
++#define HAVE_OSS 1
++_ACEOF
++
++ else
++ HAVE_OSS=0
++ if test "x$oss" = xyes ; then
++ { { $as_echo "$as_me:$LINENO: error: *** OSS not found ***" >&5
++$as_echo "$as_me: error: *** OSS not found ***" >&2;}
++ { (exit 1); exit 1; }; }
++ fi
++ fi
++else
++ HAVE_OSS=0
++fi
++
+ ### PulseAudio (optional) ####
+
+ # Check whether --enable-pulse was given.
+@@ -26143,6 +26382,7 @@ HAVE_DSO=0
+ BUILTIN_DSO=0
+ BUILTIN_PULSE=0
+ BUILTIN_ALSA=0
++BUILTIN_OSS=0
+ BUILTIN_NULL=0
+
+ case "x$with_builtin" in
+@@ -26155,6 +26395,7 @@ $as_echo "$as_me: error: *** PulseAudio
+
+ BUILTIN_PULSE=1
+ HAVE_ALSA=0
++ HAVE_OSS=0
+ HAVE_NULL=0
+ ;;
+
+@@ -26166,10 +26407,24 @@ $as_echo "$as_me: error: *** ALSA select
+ fi
+
+ BUILTIN_ALSA=1
++ HAVE_OSS=0
+ HAVE_PULSE=0
+ HAVE_NULL=0
+ ;;
+
++ xoss)
++ if test "x$HAV_OSS" != x1 ; then
++ { { $as_echo "$as_me:$LINENO: error: *** OSS selected for builtin driver, but not enabled. ***" >&5
++$as_echo "$as_me: error: *** OSS selected for builtin driver, but not enabled. ***" >&2;}
++ { (exit 1); exit 1; }; }
++ fi
++
++ BUILTIN_OSS=1
++ HAVE_ALSA=0
++ HAVE_PULSE=0
++ HAVE_NULL=0
++ ;;
++
+ xnull)
+ if test "x$HAVE_NULL" != x1 ; then
+ { { $as_echo "$as_me:$LINENO: error: *** Null output selected for builtin driver, but not enabled. ***" >&5
+@@ -26180,6 +26435,7 @@ $as_echo "$as_me: error: *** Null output
+ BUILTIN_NULL=1
+ HAVE_PULSE=0
+ HAVE_ALSA=0
++ HAVE_OSS=0
+ ;;
+
+ xdso)
+@@ -26198,7 +26454,7 @@ $as_echo "$as_me: error: *** Unknown dri
+ { (exit 1); exit 1; }; }
+ esac
+
+-if test "x$HAVE_PULSE" != x1 -a "x$HAVE_ALSA" != x1 -a "x$HAVE_NULL" != x1 ; then
++if test "x$HAVE_PULSE" != x1 -a "x$HAVE_ALSA" != x1 -a "x$HAVE_OSS" != x1 -a "x$HAVE_NULL" != x1 ; then
+ { { $as_echo "$as_me:$LINENO: error: *** No backend enabled. ***" >&5
+ $as_echo "$as_me: error: *** No backend enabled. ***" >&2;}
+ { (exit 1); exit 1; }; }
+@@ -26212,6 +26468,8 @@ fi
+
+
+
++
++
+ if test "x$HAVE_PULSE" = x1; then
+ HAVE_PULSE_TRUE=
+ HAVE_PULSE_FALSE='#'
+@@ -26228,6 +26486,14 @@ else
+ HAVE_ALSA_FALSE=
+ fi
+
++ if test "x$HAVE_OSS" = x1; then
++ HAVE_OSS_TRUE=
++ HAVE_OSS_FALSE='#'
++else
++ HAVE_OSS_TRUE='#'
++ HAVE_OSS_FALSE=
++fi
++
+ if test "x$HAVE_NULL" = x1; then
+ HAVE_NULL_TRUE=
+ HAVE_NULL_FALSE='#'
+@@ -26260,6 +26526,14 @@ else
+ BUILTIN_ALSA_FALSE=
+ fi
+
++ if test "x$BUILTIN_OSS" = x1; then
++ BUILTIN_OSS_TRUE=
++ BUILTIN_OSS_FALSE='#'
++else
++ BUILTIN_OSS_TRUE='#'
++ BUILTIN_OSS_FALSE=
++fi
++
+ if test "x$BUILTIN_NULL" = x1; then
+ BUILTIN_NULL_TRUE=
+ BUILTIN_NULL_FALSE='#'
+@@ -26539,6 +26813,13 @@ $as_echo "$as_me: error: conditional \"H
+ Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
++if test -z "${HAVE_OSS_TRUE}" && test -z "${HAVE_OSS_FALSE}"; then
++ { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_OSS\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++$as_echo "$as_me: error: conditional \"HAVE_OSS\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
+ if test -z "${HAVE_NULL_TRUE}" && test -z "${HAVE_NULL_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"HAVE_NULL\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+@@ -26567,6 +26848,13 @@ $as_echo "$as_me: error: conditional \"B
+ Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
++if test -z "${BUILTIN_OSS_TRUE}" && test -z "${BUILTIN_OSS_FALSE}"; then
++ { { $as_echo "$as_me:$LINENO: error: conditional \"BUILTIN_OSS\" was never defined.
++Usually this means the macro was only invoked conditionally." >&5
++$as_echo "$as_me: error: conditional \"BUILTIN_OSS\" was never defined.
++Usually this means the macro was only invoked conditionally." >&2;}
++ { (exit 1); exit 1; }; }
++fi
+ if test -z "${BUILTIN_NULL_TRUE}" && test -z "${BUILTIN_NULL_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"BUILTIN_NULL\" was never defined.
+ Usually this means the macro was only invoked conditionally." >&5
+@@ -26926,9 +27214,9 @@ _ACEOF
+
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ # Files that config.status was made for.
+-config_files="`echo $ac_config_files`"
+-config_headers="`echo $ac_config_headers`"
+-config_commands="`echo $ac_config_commands`"
++config_files="$ac_config_files"
++config_headers="$ac_config_headers"
++config_commands="$ac_config_commands"
+
+ _ACEOF
+
+@@ -27379,9 +27667,9 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_writ
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+- prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
++ prefix = substr(line, 1, index(line, defundef) - 1)
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+@@ -27389,7 +27677,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_writ
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+- print "/*", prefix defundef, macro, "*/"
++ print "/*", line, "*/"
+ next
+ }
+ }
+@@ -28123,6 +28411,15 @@ if test "x$BUILTIN_ALSA" = "x1" ; then
+ ENABLE_BUILTIN_ALSA=yes
+ fi
+
++ENABLE_OSS=no
++if test "x$HAVE_OSS" = "x1" ; then
++ ENABLE_OSS=yes
++fi
++ENABLE_BUILTIN_OSS=no
++if test "x$BUILTIN_OSS" = "x1" ; then
++ ENABLE_BUILTIN_OSS=yes
++fi
++
+ ENABLE_NULL=no
+ if test "x$HAVE_NULL" = "x1" ; then
+ ENABLE_NULL=yes
+@@ -28152,6 +28449,8 @@ echo "
+ Builtin PulseAudio: ${ENABLE_BUILTIN_PULSE}
+ Enable ALSA: ${ENABLE_ALSA}
+ Builtin ALSA: ${ENABLE_BUILTIN_ALSA}
++ Enable OSS: ${ENABLE_OSS}
++ Builtin OSS: ${ENABLE_BUILTIN_OSS}
+ Enable Null Output: ${ENABLE_NULL}
+ Builtin Null Output: ${ENABLE_BUILTIN_NULL}
+ Enable GTK+: ${ENABLE_GTK}
diff --git a/audio/libcanberra/files/patch-configure.ac b/audio/libcanberra/files/patch-configure.ac
new file mode 100644
index 000000000000..324d80d3b668
--- /dev/null
+++ b/audio/libcanberra/files/patch-configure.ac
@@ -0,0 +1,140 @@
+--- configure.ac.orig 2008-08-09 15:27:28.000000000 -0400
++++ configure.ac 2008-08-09 15:27:59.000000000 -0400
+@@ -219,6 +219,35 @@ fi
+ AC_SUBST(ALSA_CFLAGS)
+ AC_SUBST(ALSA_LIBS)
+
++### OSS support (optional) ###
++AC_ARG_ENABLE([oss],
++ AC_HELP_STRING([--disable-oss], [Disable optional OSS support]),
++ [
++ case "${enableval}" in
++ yes) alsa=yes ;;
++ no) alsa=no ;;
++ *) AC_MSG_ERROR(bad value ${enableval} for --disable-oss) ;;
++ esac
++ ],
++ [oss=auto])
++
++if test "x${oss}" != xno ; then
++ AC_CHECK_HEADERS(soundcard.h sys/soundcard.h machine/soundcard.h)
++ if test "${ac_cv_header_sys_soundcard_h}" = "yes" || \
++ test "${ac_cv_header_soundcard_h}" = "yes" || \
++ test "${ac_cv_header_machine_soundcard_h}" = "yes"; then
++ HAVE_OSS=1
++ AC_DEFINE([HAVE_OSS], 1, [Have OSS?])
++ else
++ HAVE_OSS=0
++ if test "x$oss" = xyes ; then
++ AC_MSG_ERROR([*** OSS not found ***])
++ fi
++ fi
++else
++ HAVE_OSS=0
++fi
++
+ ### PulseAudio (optional) ####
+
+ AC_ARG_ENABLE([pulse],
+@@ -333,6 +362,7 @@ HAVE_DSO=0
+ BUILTIN_DSO=0
+ BUILTIN_PULSE=0
+ BUILTIN_ALSA=0
++BUILTIN_OSS=0
+ BUILTIN_NULL=0
+
+ case "x$with_builtin" in
+@@ -343,6 +373,7 @@ case "x$with_builtin" in
+
+ BUILTIN_PULSE=1
+ HAVE_ALSA=0
++ HAVE_OSS=0
+ HAVE_NULL=0
+ ;;
+
+@@ -352,10 +383,22 @@ case "x$with_builtin" in
+ fi
+
+ BUILTIN_ALSA=1
++ HAVE_OSS=0
+ HAVE_PULSE=0
+ HAVE_NULL=0
+ ;;
+
++ xoss)
++ if test "x$HAV_OSS" != x1 ; then
++ AC_MSG_ERROR([*** OSS selected for builtin driver, but not enabled. ***])
++ fi
++
++ BUILTIN_OSS=1
++ HAVE_ALSA=0
++ HAVE_PULSE=0
++ HAVE_NULL=0
++ ;;
++
+ xnull)
+ if test "x$HAVE_NULL" != x1 ; then
+ AC_MSG_ERROR([*** Null output selected for builtin driver, but not enabled. ***])
+@@ -364,6 +407,7 @@ case "x$with_builtin" in
+ BUILTIN_NULL=1
+ HAVE_PULSE=0
+ HAVE_ALSA=0
++ HAVE_OSS=0
+ ;;
+
+ xdso)
+@@ -376,24 +420,28 @@ case "x$with_builtin" in
+ AC_MSG_ERROR([*** Unknown driver $with_builtin selected for builtin ***])
+ esac
+
+-if test "x$HAVE_PULSE" != x1 -a "x$HAVE_ALSA" != x1 -a "x$HAVE_NULL" != x1 ; then
++if test "x$HAVE_PULSE" != x1 -a "x$HAVE_ALSA" != x1 -a "x$HAVE_OSS" != x1 -a "x$HAVE_NULL" != x1 ; then
+ AC_MSG_ERROR([*** No backend enabled. ***])
+ fi
+
+ AC_SUBST(HAVE_DSO)
+ AC_SUBST(HAVE_PULSE)
+ AC_SUBST(HAVE_ALSA)
++AC_SUBST(HAVE_OSS)
+ AC_SUBST(HAVE_NULL)
+ AC_SUBST(BUILTIN_DSO)
+ AC_SUBST(BUILTIN_PULSE)
+ AC_SUBST(BUILTIN_ALSA)
++AC_SUBST(BUILTIN_OSS)
+ AC_SUBST(BUILTIN_NULL)
+ AM_CONDITIONAL([HAVE_PULSE], [test "x$HAVE_PULSE" = x1])
+ AM_CONDITIONAL([HAVE_ALSA], [test "x$HAVE_ALSA" = x1])
++AM_CONDITIONAL([HAVE_OSS], [test "x$HAVE_OSS" = x1])
+ AM_CONDITIONAL([HAVE_NULL], [test "x$HAVE_NULL" = x1])
+ AM_CONDITIONAL([BUILTIN_DSO], [test "x$BUILTIN_DSO" = x1])
+ AM_CONDITIONAL([BUILTIN_PULSE], [test "x$BUILTIN_PULSE" = x1])
+ AM_CONDITIONAL([BUILTIN_ALSA], [test "x$BUILTIN_ALSA" = x1])
++AM_CONDITIONAL([BUILTIN_OSS], [test "x$BUILTIN_OSS" = x1])
+ AM_CONDITIONAL([BUILTIN_NULL], [test "x$BUILTIN_NULL" = x1])
+
+ GTK_DOC_CHECK(1.9)
+@@ -435,6 +483,15 @@ if test "x$BUILTIN_ALSA" = "x1" ; then
+ ENABLE_BUILTIN_ALSA=yes
+ fi
+
++ENABLE_OSS=no
++if test "x$HAVE_OSS" = "x1" ; then
++ ENABLE_OSS=yes
++fi
++ENABLE_BUILTIN_OSS=no
++if test "x$BUILTIN_OSS" = "x1" ; then
++ ENABLE_BUILTIN_OSS=yes
++fi
++
+ ENABLE_NULL=no
+ if test "x$HAVE_NULL" = "x1" ; then
+ ENABLE_NULL=yes
+@@ -464,6 +521,8 @@ echo "
+ Builtin PulseAudio: ${ENABLE_BUILTIN_PULSE}
+ Enable ALSA: ${ENABLE_ALSA}
+ Builtin ALSA: ${ENABLE_BUILTIN_ALSA}
++ Enable OSS: ${ENABLE_OSS}
++ Builtin OSS: ${ENABLE_BUILTIN_OSS}
+ Enable Null Output: ${ENABLE_NULL}
+ Builtin Null Output: ${ENABLE_BUILTIN_NULL}
+ Enable GTK+: ${ENABLE_GTK}
diff --git a/audio/libcanberra/files/patch-src_Makefile.am b/audio/libcanberra/files/patch-src_Makefile.am
new file mode 100644
index 000000000000..444a825f4794
--- /dev/null
+++ b/audio/libcanberra/files/patch-src_Makefile.am
@@ -0,0 +1,37 @@
+--- src/Makefile.am.orig 2008-08-09 15:27:42.000000000 -0400
++++ src/Makefile.am 2008-08-09 15:27:55.000000000 -0400
+@@ -164,6 +164,34 @@ libcanberra_alsa_la_LDFLAGS = \
+ endif
+ endif
+
++if HAVE_OSS
++if BUILTIN_OSS
++
++libcanberra_la_SOURCES += \
++ oss.c
++
++else
++
++plugin_LTLIBRARIES += \
++ libcanberra-oss.la
++
++libcanberra_oss_la_SOURCES = \
++ oss.c
++libcanberra_oss_la_CFLAGS = \
++ -Ddriver_open=oss_driver_open \
++ -Ddriver_destroy=oss_driver_destroy \
++ -Ddriver_change_device=oss_driver_change_device \
++ -Ddriver_change_props=oss_driver_change_props \
++ -Ddriver_play=oss_driver_play \
++ -Ddriver_cancel=oss_driver_cancel \
++ -Ddriver_cache=oss_driver_cache
++libcanberra_oss_la_LIBADD = \
++ libcanberra.la
++libcanberra_oss_la_LDFLAGS = \
++ -avoid-version -module -export-dynamic
++endif
++endif
++
+ if HAVE_NULL
+ if BUILTIN_NULL
+
diff --git a/audio/libcanberra/files/patch-src_Makefile.in b/audio/libcanberra/files/patch-src_Makefile.in
new file mode 100644
index 000000000000..8223a42a4929
--- /dev/null
+++ b/audio/libcanberra/files/patch-src_Makefile.in
@@ -0,0 +1,225 @@
+--- src/Makefile.in.orig 2008-08-09 15:27:46.000000000 -0400
++++ src/Makefile.in 2008-08-09 15:28:08.000000000 -0400
+@@ -92,20 +92,26 @@ noinst_PROGRAMS = test-canberra$(EXEEXT)
+ @BUILTIN_ALSA_FALSE@@HAVE_ALSA_TRUE@am__append_12 = \
+ @BUILTIN_ALSA_FALSE@@HAVE_ALSA_TRUE@ libcanberra-alsa.la
+
+-@BUILTIN_NULL_TRUE@@HAVE_NULL_TRUE@am__append_13 = \
++@BUILTIN_OSS_TRUE@@HAVE_OSS_TRUE@am__append_13 = \
++@BUILTIN_OSS_TRUE@@HAVE_OSS_TRUE@ oss.c
++
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@am__append_14 = \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ libcanberra-oss.la
++
++@BUILTIN_NULL_TRUE@@HAVE_NULL_TRUE@am__append_15 = \
+ @BUILTIN_NULL_TRUE@@HAVE_NULL_TRUE@ null.c
+
+-@BUILTIN_NULL_FALSE@@HAVE_NULL_TRUE@am__append_14 = \
++@BUILTIN_NULL_FALSE@@HAVE_NULL_TRUE@am__append_16 = \
+ @BUILTIN_NULL_FALSE@@HAVE_NULL_TRUE@ libcanberra-null.la
+
+-@HAVE_GTK_TRUE@am__append_15 = \
++@HAVE_GTK_TRUE@am__append_17 = \
+ @HAVE_GTK_TRUE@ libcanberra-gtk.la
+
+-@HAVE_GTK_TRUE@am__append_16 = \
++@HAVE_GTK_TRUE@am__append_18 = \
+ @HAVE_GTK_TRUE@ canberra-gtk.h
+
+ @HAVE_GTK_TRUE@bin_PROGRAMS = canberra-gtk-play$(EXEEXT)
+-@HAVE_GTK_TRUE@am__append_17 = \
++@HAVE_GTK_TRUE@am__append_19 = \
+ @HAVE_GTK_TRUE@ libcanberra-login-sound.desktop.in \
+ @HAVE_GTK_TRUE@ libcanberra-logout-sound.sh.in
+
+@@ -193,6 +199,18 @@ libcanberra_null_la_LINK = $(LIBTOOL) --
+ $(libcanberra_null_la_LDFLAGS) $(LDFLAGS) -o $@
+ @BUILTIN_NULL_FALSE@@HAVE_NULL_TRUE@am_libcanberra_null_la_rpath = \
+ @BUILTIN_NULL_FALSE@@HAVE_NULL_TRUE@ -rpath $(plugindir)
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@libcanberra_oss_la_DEPENDENCIES = \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ libcanberra.la
++am__libcanberra_oss_la_SOURCES_DIST = oss.c
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@am_libcanberra_oss_la_OBJECTS = \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ libcanberra_oss_la-oss.lo
++libcanberra_oss_la_OBJECTS = $(am_libcanberra_oss_la_OBJECTS)
++libcanberra_oss_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
++ $(LIBTOOLFLAGS) --mode=link $(CCLD) \
++ $(libcanberra_oss_la_CFLAGS) $(CFLAGS) \
++ $(libcanberra_oss_la_LDFLAGS) $(LDFLAGS) -o $@
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@am_libcanberra_oss_la_rpath = \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ -rpath $(plugindir)
+ @BUILTIN_PULSE_FALSE@@HAVE_PULSE_TRUE@libcanberra_pulse_la_DEPENDENCIES = \
+ @BUILTIN_PULSE_FALSE@@HAVE_PULSE_TRUE@ $(am__DEPENDENCIES_1) \
+ @BUILTIN_PULSE_FALSE@@HAVE_PULSE_TRUE@ libcanberra.la
+@@ -218,14 +236,17 @@ am__libcanberra_la_SOURCES_DIST = canber
+ read-sound-file.c read-sound-file.h read-vorbis.c \
+ read-vorbis.h read-wav.c read-wav.h sound-theme-spec.c \
+ sound-theme-spec.h llist.h macro.h macro.c malloc.c malloc.h \
+- dso.c driver-order.c driver-order.h pulse.c alsa.c null.c
++ dso.c driver-order.c driver-order.h pulse.c alsa.c oss.c \
++ null.c
+ @BUILTIN_DSO_TRUE@am__objects_1 = libcanberra_la-dso.lo \
+ @BUILTIN_DSO_TRUE@ libcanberra_la-driver-order.lo
+ @BUILTIN_PULSE_TRUE@@HAVE_PULSE_TRUE@am__objects_2 = \
+ @BUILTIN_PULSE_TRUE@@HAVE_PULSE_TRUE@ libcanberra_la-pulse.lo
+ @BUILTIN_ALSA_TRUE@@HAVE_ALSA_TRUE@am__objects_3 = \
+ @BUILTIN_ALSA_TRUE@@HAVE_ALSA_TRUE@ libcanberra_la-alsa.lo
+-@BUILTIN_NULL_TRUE@@HAVE_NULL_TRUE@am__objects_4 = \
++@BUILTIN_OSS_TRUE@@HAVE_OSS_TRUE@am__objects_4 = \
++@BUILTIN_OSS_TRUE@@HAVE_OSS_TRUE@ libcanberra_la-oss.lo
++@BUILTIN_NULL_TRUE@@HAVE_NULL_TRUE@am__objects_5 = \
+ @BUILTIN_NULL_TRUE@@HAVE_NULL_TRUE@ libcanberra_la-null.lo
+ am_libcanberra_la_OBJECTS = libcanberra_la-common.lo \
+ libcanberra_la-mutex-posix.lo libcanberra_la-proplist.lo \
+@@ -233,7 +254,7 @@ am_libcanberra_la_OBJECTS = libcanberra_
+ libcanberra_la-read-vorbis.lo libcanberra_la-read-wav.lo \
+ libcanberra_la-sound-theme-spec.lo libcanberra_la-macro.lo \
+ libcanberra_la-malloc.lo $(am__objects_1) $(am__objects_2) \
+- $(am__objects_3) $(am__objects_4)
++ $(am__objects_3) $(am__objects_4) $(am__objects_5)
+ libcanberra_la_OBJECTS = $(am_libcanberra_la_OBJECTS)
+ libcanberra_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcanberra_la_CFLAGS) \
+@@ -271,14 +292,15 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLF
+ SOURCES = $(libcanberra_alsa_la_SOURCES) \
+ $(libcanberra_gtk_module_la_SOURCES) \
+ $(libcanberra_gtk_la_SOURCES) $(libcanberra_multi_la_SOURCES) \
+- $(libcanberra_null_la_SOURCES) $(libcanberra_pulse_la_SOURCES) \
+- $(libcanberra_la_SOURCES) $(canberra_gtk_play_SOURCES) \
+- $(test_canberra_SOURCES)
++ $(libcanberra_null_la_SOURCES) $(libcanberra_oss_la_SOURCES) \
++ $(libcanberra_pulse_la_SOURCES) $(libcanberra_la_SOURCES) \
++ $(canberra_gtk_play_SOURCES) $(test_canberra_SOURCES)
+ DIST_SOURCES = $(am__libcanberra_alsa_la_SOURCES_DIST) \
+ $(am__libcanberra_gtk_module_la_SOURCES_DIST) \
+ $(am__libcanberra_gtk_la_SOURCES_DIST) \
+ $(am__libcanberra_multi_la_SOURCES_DIST) \
+ $(am__libcanberra_null_la_SOURCES_DIST) \
++ $(am__libcanberra_oss_la_SOURCES_DIST) \
+ $(am__libcanberra_pulse_la_SOURCES_DIST) \
+ $(am__libcanberra_la_SOURCES_DIST) \
+ $(am__canberra_gtk_play_SOURCES_DIST) $(test_canberra_SOURCES)
+@@ -303,6 +325,7 @@ AWK = @AWK@
+ BUILTIN_ALSA = @BUILTIN_ALSA@
+ BUILTIN_DSO = @BUILTIN_DSO@
+ BUILTIN_NULL = @BUILTIN_NULL@
++BUILTIN_OSS = @BUILTIN_OSS@
+ BUILTIN_PULSE = @BUILTIN_PULSE@
+ CC = @CC@
+ CCDEPMODE = @CCDEPMODE@
+@@ -335,6 +358,7 @@ HAVE_ALSA = @HAVE_ALSA@
+ HAVE_DSO = @HAVE_DSO@
+ HAVE_GTK = @HAVE_GTK@
+ HAVE_NULL = @HAVE_NULL@
++HAVE_OSS = @HAVE_OSS@
+ HAVE_PULSE = @HAVE_PULSE@
+ HTML_DIR = @HTML_DIR@
+ INSTALL = @INSTALL@
+@@ -443,15 +467,16 @@ gnomeautostartdir = $(datadir)/gnome/aut
+ AM_CFLAGS = $(PTHREAD_CFLAGS) -DCA_PLUGIN_PATH=\"$(plugindir)\"
+ AM_CXXFLAGS = $(PTHREAD_CFLAGS)
+ AM_LDADD = $(PTHREAD_LIBS)
+-EXTRA_DIST = map-file $(am__append_17)
+-lib_LTLIBRARIES = libcanberra.la $(am__append_15)
+-include_HEADERS = canberra.h $(am__append_16)
++EXTRA_DIST = map-file $(am__append_19)
++lib_LTLIBRARIES = libcanberra.la $(am__append_17)
++include_HEADERS = canberra.h $(am__append_18)
+ libcanberra_la_SOURCES = canberra.h common.c common.h mutex-posix.c \
+ mutex.h proplist.c proplist.h driver.h read-sound-file.c \
+ read-sound-file.h read-vorbis.c read-vorbis.h read-wav.c \
+ read-wav.h sound-theme-spec.c sound-theme-spec.h llist.h \
+ macro.h macro.c malloc.c malloc.h $(am__append_1) \
+- $(am__append_5) $(am__append_9) $(am__append_13)
++ $(am__append_5) $(am__append_9) $(am__append_13) \
++ $(am__append_15)
+ libcanberra_la_CFLAGS = $(AM_CFLAGS) $(VORBIS_CFLAGS) $(am__append_2) \
+ $(am__append_6) $(am__append_10)
+ libcanberra_la_LIBADD = $(VORBIS_LIBS) $(am__append_3) $(am__append_7) \
+@@ -462,7 +487,7 @@ libcanberra_la_LDFLAGS = \
+ -Wl,-version-script=$(srcdir)/map-file
+
+ plugin_LTLIBRARIES = $(am__append_4) $(am__append_8) $(am__append_12) \
+- $(am__append_14)
++ $(am__append_14) $(am__append_16)
+ @BUILTIN_DSO_TRUE@libcanberra_multi_la_SOURCES = \
+ @BUILTIN_DSO_TRUE@ multi.c
+
+@@ -521,6 +546,24 @@ plugin_LTLIBRARIES = $(am__append_4) $(a
+ @BUILTIN_ALSA_FALSE@@HAVE_ALSA_TRUE@libcanberra_alsa_la_LDFLAGS = \
+ @BUILTIN_ALSA_FALSE@@HAVE_ALSA_TRUE@ -avoid-version -module -export-dynamic
+
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@libcanberra_oss_la_SOURCES = \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ oss.c
++
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@libcanberra_oss_la_CFLAGS = \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ -Ddriver_open=oss_driver_open \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ -Ddriver_destroy=oss_driver_destroy \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ -Ddriver_change_device=oss_driver_change_device \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ -Ddriver_change_props=oss_driver_change_props \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ -Ddriver_play=oss_driver_play \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ -Ddriver_cancel=oss_driver_cancel \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ -Ddriver_cache=oss_driver_cache
++
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@libcanberra_oss_la_LIBADD = \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ libcanberra.la
++
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@libcanberra_oss_la_LDFLAGS = \
++@BUILTIN_OSS_FALSE@@HAVE_OSS_TRUE@ -avoid-version -module -export-dynamic
++
+ @BUILTIN_NULL_FALSE@@HAVE_NULL_TRUE@libcanberra_null_la_SOURCES = \
+ @BUILTIN_NULL_FALSE@@HAVE_NULL_TRUE@ null.c
+
+@@ -722,6 +765,8 @@ libcanberra-multi.la: $(libcanberra_mult
+ $(libcanberra_multi_la_LINK) $(am_libcanberra_multi_la_rpath) $(libcanberra_multi_la_OBJECTS) $(libcanberra_multi_la_LIBADD) $(LIBS)
+ libcanberra-null.la: $(libcanberra_null_la_OBJECTS) $(libcanberra_null_la_DEPENDENCIES)
+ $(libcanberra_null_la_LINK) $(am_libcanberra_null_la_rpath) $(libcanberra_null_la_OBJECTS) $(libcanberra_null_la_LIBADD) $(LIBS)
++libcanberra-oss.la: $(libcanberra_oss_la_OBJECTS) $(libcanberra_oss_la_DEPENDENCIES)
++ $(libcanberra_oss_la_LINK) $(am_libcanberra_oss_la_rpath) $(libcanberra_oss_la_OBJECTS) $(libcanberra_oss_la_LIBADD) $(LIBS)
+ libcanberra-pulse.la: $(libcanberra_pulse_la_OBJECTS) $(libcanberra_pulse_la_DEPENDENCIES)
+ $(libcanberra_pulse_la_LINK) $(am_libcanberra_pulse_la_rpath) $(libcanberra_pulse_la_OBJECTS) $(libcanberra_pulse_la_LIBADD) $(LIBS)
+ libcanberra.la: $(libcanberra_la_OBJECTS) $(libcanberra_la_DEPENDENCIES)
+@@ -805,6 +850,7 @@ distclean-compile:
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcanberra_la-malloc.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcanberra_la-mutex-posix.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcanberra_la-null.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcanberra_la-oss.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcanberra_la-proplist.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcanberra_la-pulse.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcanberra_la-read-sound-file.Plo@am__quote@
+@@ -813,6 +859,7 @@ distclean-compile:
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcanberra_la-sound-theme-spec.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcanberra_multi_la-multi.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcanberra_null_la-null.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcanberra_oss_la-oss.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcanberra_pulse_la-pulse.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-canberra.Po@am__quote@
+
+@@ -872,6 +919,13 @@ libcanberra_null_la-null.lo: null.c
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcanberra_null_la_CFLAGS) $(CFLAGS) -c -o libcanberra_null_la-null.lo `test -f 'null.c' || echo '$(srcdir)/'`null.c
+
++libcanberra_oss_la-oss.lo: oss.c
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcanberra_oss_la_CFLAGS) $(CFLAGS) -MT libcanberra_oss_la-oss.lo -MD -MP -MF $(DEPDIR)/libcanberra_oss_la-oss.Tpo -c -o libcanberra_oss_la-oss.lo `test -f 'oss.c' || echo '$(srcdir)/'`oss.c
++@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libcanberra_oss_la-oss.Tpo $(DEPDIR)/libcanberra_oss_la-oss.Plo
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='oss.c' object='libcanberra_oss_la-oss.lo' libtool=yes @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcanberra_oss_la_CFLAGS) $(CFLAGS) -c -o libcanberra_oss_la-oss.lo `test -f 'oss.c' || echo '$(srcdir)/'`oss.c
++
+ libcanberra_pulse_la-pulse.lo: pulse.c
+ @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcanberra_pulse_la_CFLAGS) $(CFLAGS) -MT libcanberra_pulse_la-pulse.lo -MD -MP -MF $(DEPDIR)/libcanberra_pulse_la-pulse.Tpo -c -o libcanberra_pulse_la-pulse.lo `test -f 'pulse.c' || echo '$(srcdir)/'`pulse.c
+ @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libcanberra_pulse_la-pulse.Tpo $(DEPDIR)/libcanberra_pulse_la-pulse.Plo
+@@ -970,6 +1024,13 @@ libcanberra_la-alsa.lo: alsa.c
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcanberra_la_CFLAGS) $(CFLAGS) -c -o libcanberra_la-alsa.lo `test -f 'alsa.c' || echo '$(srcdir)/'`alsa.c
+
++libcanberra_la-oss.lo: oss.c
++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcanberra_la_CFLAGS) $(CFLAGS) -MT libcanberra_la-oss.lo -MD -MP -MF $(DEPDIR)/libcanberra_la-oss.Tpo -c -o libcanberra_la-oss.lo `test -f 'oss.c' || echo '$(srcdir)/'`oss.c
++@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libcanberra_la-oss.Tpo $(DEPDIR)/libcanberra_la-oss.Plo
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='oss.c' object='libcanberra_la-oss.lo' libtool=yes @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcanberra_la_CFLAGS) $(CFLAGS) -c -o libcanberra_la-oss.lo `test -f 'oss.c' || echo '$(srcdir)/'`oss.c
++
+ libcanberra_la-null.lo: null.c
+ @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcanberra_la_CFLAGS) $(CFLAGS) -MT libcanberra_la-null.lo -MD -MP -MF $(DEPDIR)/libcanberra_la-null.Tpo -c -o libcanberra_la-null.lo `test -f 'null.c' || echo '$(srcdir)/'`null.c
+ @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libcanberra_la-null.Tpo $(DEPDIR)/libcanberra_la-null.Plo
diff --git a/audio/libcanberra/files/patch-src_driver-order.c b/audio/libcanberra/files/patch-src_driver-order.c
new file mode 100644
index 000000000000..35a0f474a886
--- /dev/null
+++ b/audio/libcanberra/files/patch-src_driver-order.c
@@ -0,0 +1,12 @@
+--- src/driver-order.c.orig 2008-08-09 16:04:21.964956000 -0400
++++ src/driver-order.c 2008-08-09 16:04:21.964956000 -0400
+@@ -34,6 +34,9 @@ const char* const ca_driver_order[] = {
+ #ifdef HAVE_ALSA
+ "alsa",
+ #endif
++#ifdef HAVE_OSS
++ "oss",
++#endif
+ /* ... */
+ NULL
+ };
diff --git a/audio/libcanberra/files/patch-src_oss.c b/audio/libcanberra/files/patch-src_oss.c
new file mode 100644
index 000000000000..4da6d334793c
--- /dev/null
+++ b/audio/libcanberra/files/patch-src_oss.c
@@ -0,0 +1,465 @@
+--- src/oss.c.orig 2008-08-09 16:04:21.964956000 -0400
++++ src/oss.c 2008-08-09 16:41:45.000000000 -0400
+@@ -0,0 +1,462 @@
++/***
++ This file is part of libcanberra.
++
++ Copyright 2008 Joe Marcus Clarke
++
++ libcanberra is free software; you can redistribute it and/or modify
++ it under the terms of the GNU Lesser General Public License as
++ published by the Free Software Foundation, either version 2.1 of the
++ License, or (at your option) any later version.
++
++ libcanberra is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with libcanberra. If not, If not, see
++ <http://www.gnu.org/licenses/>.
++***/
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#include <sys/types.h>
++#include <sys/ioctl.h>
++#include <sys/uio.h>
++#include <unistd.h>
++
++#ifdef HAVE_MACHINE_SOUNDCARD_H
++# include <machine/soundcard.h>
++#else
++# ifdef HAVE_SOUNDCARD_H
++# include <soundcard.h>
++# else
++# include <sys/soundcard.h>
++# endif
++#endif
++
++#include <errno.h>
++#include <fcntl.h>
++#include <stdlib.h>
++#include <poll.h>
++#include <pthread.h>
++#include <semaphore.h>
++
++#include "canberra.h"
++#include "common.h"
++#include "driver.h"
++#include "llist.h"
++#include "read-sound-file.h"
++#include "sound-theme-spec.h"
++#include "malloc.h"
++
++struct private;
++
++struct outstanding {
++ CA_LLIST_FIELDS(struct outstanding);
++ ca_bool_t dead;
++ uint32_t id;
++ ca_finish_callback_t callback;
++ void *userdata;
++ ca_sound_file *file;
++ int pcm;
++ int pipe_fd[2];
++ ca_context *context;
++};
++
++struct private {
++ ca_theme_data *theme;
++ ca_mutex *outstanding_mutex;
++ ca_bool_t signal_semaphore;
++ sem_t semaphore;
++ ca_bool_t semaphore_allocated;
++ CA_LLIST_HEAD(struct outstanding, outstanding);
++};
++
++#define PRIVATE(c) ((struct private *) ((c)->private))
++
++static void outstanding_free(struct outstanding *o) {
++ ca_assert(o);
++
++ if (o->pipe_fd[1] >= 0)
++ close(o->pipe_fd[1]);
++
++ if (o->pipe_fd[0] >= 0)
++ close(o->pipe_fd[0]);
++
++ if (o->file)
++ ca_sound_file_close(o->file);
++
++ if (o->pcm > -1) {
++ close(o->pcm);
++ o->pcm = -1;
++ }
++
++ ca_free(o);
++}
++
++int driver_open(ca_context *c) {
++ struct private *p;
++
++ ca_return_val_if_fail(c, CA_ERROR_INVALID);
++ ca_return_val_if_fail(!c->driver || ca_streq(c->driver, "oss"), CA_ERROR_NODRIVER);
++ ca_return_val_if_fail(!PRIVATE(c), CA_ERROR_STATE);
++
++ if (!(c->private = p = ca_new0(struct private, 1)))
++ return CA_ERROR_OOM;
++
++ if (!(p->outstanding_mutex = ca_mutex_new())) {
++ driver_destroy(c);
++ return CA_ERROR_OOM;
++ }
++
++ if (sem_init(&p->semaphore, 0, 0) < 0) {
++ driver_destroy(c);
++ return CA_ERROR_OOM;
++ }
++
++ p->semaphore_allocated = TRUE;
++
++ return CA_SUCCESS;
++}
++
++int driver_destroy(ca_context *c) {
++ struct private *p;
++ struct outstanding *out;
++
++ ca_return_val_if_fail(c, CA_ERROR_INVALID);
++ ca_return_val_if_fail(c->private, CA_ERROR_STATE);
++
++ p = PRIVATE(c);
++
++ if (p->outstanding_mutex) {
++ ca_mutex_lock(p->outstanding_mutex);
++
++ /* Tell all player threads to terminate */
++ for (out = p->outstanding; out; out = out->next) {
++
++ if (out->dead)
++ continue;
++
++ out->dead = TRUE;
++
++ if (out->callback)
++ out->callback(c, out->id, CA_ERROR_DESTROYED, out->userdata);
++
++ /* This will cause the thread to wakeup and terminate */
++ if (out->pipe_fd[1] >= 0) {
++ close(out->pipe_fd[1]);
++ out->pipe_fd[1] = -1;
++ }
++ }
++
++ if (p->semaphore_allocated) {
++ /* Now wait until all players are destroyed */
++ p->signal_semaphore = TRUE;
++ while (p->outstanding) {
++ ca_mutex_unlock(p->outstanding_mutex);
++ sem_wait(&p->semaphore);
++ ca_mutex_lock(p->outstanding_mutex);
++ }
++ }
++
++ ca_mutex_unlock(p->outstanding_mutex);
++ ca_mutex_free(p->outstanding_mutex);
++ }
++
++ if (p->theme)
++ ca_theme_data_free(p->theme);
++
++ if (p->semaphore_allocated)
++ sem_destroy(&p->semaphore);
++
++ ca_free(p);
++
++ c->private = NULL;
++
++ return CA_SUCCESS;
++}
++
++int driver_change_device(ca_context *c, char *device) {
++ ca_return_val_if_fail(c, CA_ERROR_INVALID);
++ ca_return_val_if_fail(c->private, CA_ERROR_STATE);
++
++ return CA_SUCCESS;
++}
++
++int driver_change_props(ca_context *c, ca_proplist *changed, ca_proplist *merged) {
++ ca_return_val_if_fail(c, CA_ERROR_INVALID);
++ ca_return_val_if_fail(changed, CA_ERROR_INVALID);
++ ca_return_val_if_fail(merged, CA_ERROR_INVALID);
++
++ return CA_SUCCESS;
++}
++
++int driver_cache(ca_context *c, ca_proplist *proplist) {
++ ca_return_val_if_fail(c, CA_ERROR_INVALID);
++ ca_return_val_if_fail(proplist, CA_ERROR_INVALID);
++
++ return CA_ERROR_NOTSUPPORTED;
++}
++
++static int translate_error(int error) {
++
++ switch (error) {
++ case ENODEV:
++ case ENOENT:
++ return CA_ERROR_NOTFOUND;
++ case EACCES:
++ case EPERM:
++ return CA_ERROR_ACCESS;
++ case ENOMEM:
++ return CA_ERROR_OOM;
++ case EBUSY:
++ return CA_ERROR_NOTAVAILABLE;
++ default:
++ if (ca_debug())
++ fprintf(stderr, "Got unhandled error from OSS: %s\n", strerror(error));
++ return CA_ERROR_IO;
++ }
++}
++
++#define SAMPLE_FORMAT AFMT_S16_NE
++
++static int open_oss(ca_context *c, struct outstanding *out) {
++ struct private *p;
++ int mode;
++ int val;
++ int ret;
++
++ ca_return_val_if_fail(c, CA_ERROR_INVALID);
++ ca_return_val_if_fail(c->private, CA_ERROR_STATE);
++ ca_return_val_if_fail(out, CA_ERROR_INVALID);
++
++ p = PRIVATE(c);
++
++ if ((out->pcm = open(c->device ? c->device : "/dev/dsp", O_WRONLY | O_NONBLOCK, 0)) < 0)
++ goto finish;
++
++ mode = fcntl(out->pcm, F_GETFL);
++ mode &= ~O_NONBLOCK;
++ fcntl(out->pcm, F_SETFL, mode);
++
++ val = SAMPLE_FORMAT;
++ if (ioctl(out->pcm, SNDCTL_DSP_SETFMT, &val) < 0)
++ goto finish;
++
++ val = 1;
++ if (ioctl(out->pcm, SNDCTL_DSP_STEREO, &val) < 0)
++ goto finish;
++
++ val = ca_sound_file_get_rate(out->file);
++ if (ioctl(out->pcm, SNDCTL_DSP_SPEED, &val) < 0)
++ goto finish;
++
++ return CA_SUCCESS;
++
++finish:
++
++ ret = errno;
++ close(out->pcm);
++ out->pcm = -1;
++ return translate_error(ret);
++}
++
++#define BUFSIZE (4*1024)
++
++static void* thread_func(void *userdata) {
++ struct outstanding *out = userdata;
++ int ret;
++ void *data, *d = NULL;
++ ssize_t bytes_written;
++ size_t fs, data_size;
++ size_t nbytes = 0;
++ struct pollfd *pfd = NULL;
++ nfds_t n_pfd;
++ struct private *p;
++
++ p = PRIVATE(out->context);
++
++ pthread_detach(pthread_self());
++
++ fs = ca_sound_file_frame_size(out->file);
++ data_size = (BUFSIZE/fs)*fs;
++
++ if (!(data = ca_malloc(data_size))) {
++ ret = CA_ERROR_OOM;
++ goto finish;
++ }
++
++ n_pfd = 2;
++ if (!(pfd = ca_new(struct pollfd, n_pfd))) {
++ ret = CA_ERROR_OOM;
++ goto finish;
++ }
++
++ pfd[0].fd = out->pipe_fd[0];
++ pfd[0].events = POLLIN;
++ pfd[0].revents = 0;
++ pfd[1].fd = out->pcm;
++ pfd[1].events = POLLOUT;
++ pfd[1].revents = 0;
++
++ for (;;) {
++ if (out->dead)
++ break;
++
++ if (poll(pfd, n_pfd, -1) < 0) {
++ ret = CA_ERROR_SYSTEM;
++ goto finish;
++ }
++
++ /* We have been asked to shut down */
++ if (pfd[0].revents)
++ break;
++
++ if (nbytes <= 0) {
++
++ nbytes = data_size;
++
++ if ((ret = ca_sound_file_read_arbitrary(out->file, data, &nbytes)) < 0)
++ goto finish;
++
++ d = data;
++ }
++
++ if (nbytes <= 0) {
++ break;
++ }
++
++ if ((bytes_written = write(out->pcm, d, nbytes)) <= 0) {
++ ret = errno;
++ goto finish;
++
++ }
++
++ nbytes -= bytes_written;
++ d = (uint8_t*) d + bytes_written;
++ }
++
++ ret = CA_SUCCESS;
++
++finish:
++
++ ca_free(data);
++ ca_free(pfd);
++
++ if (!out->dead)
++ if (out->callback)
++ out->callback(out->context, out->id, ret, out->userdata);
++
++ ca_mutex_lock(p->outstanding_mutex);
++
++ CA_LLIST_REMOVE(struct outstanding, p->outstanding, out);
++
++ if (!p->outstanding && p->signal_semaphore)
++ sem_post(&p->semaphore);
++
++ outstanding_free(out);
++
++ ca_mutex_unlock(p->outstanding_mutex);
++
++ return NULL;
++}
++
++int driver_play(ca_context *c, uint32_t id, ca_proplist *proplist, ca_finish_callback_t cb, void *userdata) {
++ struct private *p;
++ struct outstanding *out = NULL;
++ int ret;
++ pthread_t thread;
++
++ ca_return_val_if_fail(c, CA_ERROR_INVALID);
++ ca_return_val_if_fail(proplist, CA_ERROR_INVALID);
++ ca_return_val_if_fail(!userdata || cb, CA_ERROR_INVALID);
++ ca_return_val_if_fail(c->private, CA_ERROR_STATE);
++
++ p = PRIVATE(c);
++
++ if (!(out = ca_new0(struct outstanding, 1))) {
++ ret = CA_ERROR_OOM;
++ goto finish;
++ }
++
++ out->context = c;
++ out->id = id;
++ out->callback = cb;
++ out->userdata = userdata;
++ out->pipe_fd[0] = out->pipe_fd[1] = -1;
++
++ if (pipe(out->pipe_fd) < 0) {
++ ret = CA_ERROR_SYSTEM;
++ goto finish;
++ }
++
++ if ((ret = ca_lookup_sound(&out->file, &p->theme, c->props, proplist)) < 0)
++ goto finish;
++
++ if ((ret = open_oss(c, out)) < 0)
++ goto finish;
++
++ /* OK, we're ready to go, so let's add this to our list */
++ ca_mutex_lock(p->outstanding_mutex);
++ CA_LLIST_PREPEND(struct outstanding, p->outstanding, out);
++ ca_mutex_unlock(p->outstanding_mutex);
++
++ if (pthread_create(&thread, NULL, thread_func, out) < 0) {
++ ret = CA_ERROR_OOM;
++
++ ca_mutex_lock(p->outstanding_mutex);
++ CA_LLIST_REMOVE(struct outstanding, p->outstanding, out);
++ ca_mutex_unlock(p->outstanding_mutex);
++
++ goto finish;
++ }
++
++ ret = CA_SUCCESS;
++
++finish:
++
++ /* We keep the outstanding struct around if we need clean up later to */
++ if (ret != CA_SUCCESS)
++ outstanding_free(out);
++
++ return ret;
++}
++
++int driver_cancel(ca_context *c, uint32_t id) {
++ struct private *p;
++ struct outstanding *out;
++
++ ca_return_val_if_fail(c, CA_ERROR_INVALID);
++ ca_return_val_if_fail(c->private, CA_ERROR_STATE);
++
++ p = PRIVATE(c);
++
++ ca_mutex_lock(p->outstanding_mutex);
++
++ for (out = p->outstanding; out; out = out->next) {
++
++ if (out->id != id)
++ continue;
++
++ if (out->dead)
++ continue;
++
++ out->dead = TRUE;
++
++ if (out->callback)
++ out->callback(c, out->id, CA_ERROR_CANCELED, out->userdata);
++
++ /* This will cause the thread to wakeup and terminate */
++ if (out->pipe_fd[1] >= 0) {
++ close(out->pipe_fd[1]);
++ out->pipe_fd[1] = -1;
++ }
++ }
++
++ ca_mutex_unlock(p->outstanding_mutex);
++
++ return CA_SUCCESS;
++}
diff --git a/audio/libcanberra/pkg-plist b/audio/libcanberra/pkg-plist
index 649aa73500c5..8a2a4703e878 100644
--- a/audio/libcanberra/pkg-plist
+++ b/audio/libcanberra/pkg-plist
@@ -18,6 +18,9 @@ lib/libcanberra/libcanberra-multi.so
lib/libcanberra/libcanberra-null.a
lib/libcanberra/libcanberra-null.la
lib/libcanberra/libcanberra-null.so
+%%OSS%%lib/libcanberra/libcanberra-oss.a
+%%OSS%%lib/libcanberra/libcanberra-oss.la
+%%OSS%%lib/libcanberra/libcanberra-oss.so
%%PULSE%%lib/libcanberra/libcanberra-pulse.a
%%PULSE%%lib/libcanberra/libcanberra-pulse.la
%%PULSE%%lib/libcanberra/libcanberra-pulse.so