summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarcus <marcus@df743ca5-7f9a-e211-a948-0013205c9059>2009-03-08 09:08:37 +0800
committermarcus <marcus@df743ca5-7f9a-e211-a948-0013205c9059>2009-03-08 09:08:37 +0800
commitd45b1a205548bcdcea5326178b8cb5de9a4ec0fb (patch)
tree0a6bc2385ed27e51227703741fe99e963a8bc8e2
parent21a6621966f65d8a5718724b88ec34bcba65f69c (diff)
downloadmarcuscom-ports-d45b1a205548bcdcea5326178b8cb5de9a4ec0fb.tar
marcuscom-ports-d45b1a205548bcdcea5326178b8cb5de9a4ec0fb.tar.gz
marcuscom-ports-d45b1a205548bcdcea5326178b8cb5de9a4ec0fb.tar.bz2
marcuscom-ports-d45b1a205548bcdcea5326178b8cb5de9a4ec0fb.tar.lz
marcuscom-ports-d45b1a205548bcdcea5326178b8cb5de9a4ec0fb.tar.xz
marcuscom-ports-d45b1a205548bcdcea5326178b8cb5de9a4ec0fb.tar.zst
marcuscom-ports-d45b1a205548bcdcea5326178b8cb5de9a4ec0fb.zip
Attempt to workaround a deadlock which can prevent GNOME from starting
correctly. git-svn-id: svn://creme-brulee.marcuscom.com/ports/trunk@12038 df743ca5-7f9a-e211-a948-0013205c9059
-rw-r--r--audio/pulseaudio/Makefile106
-rw-r--r--audio/pulseaudio/distinfo3
-rw-r--r--audio/pulseaudio/files/patch-configure36
-rw-r--r--audio/pulseaudio/files/patch-src_daemon_default.pa.in17
-rw-r--r--audio/pulseaudio/files/patch-src_daemon_main.c28
-rw-r--r--audio/pulseaudio/files/patch-src_daemon_start-pulseaudio-x11.in11
-rw-r--r--audio/pulseaudio/files/patch-src_modules_oss-util.c37
-rw-r--r--audio/pulseaudio/files/patch-src_pulse_introspect.c11
-rw-r--r--audio/pulseaudio/files/patch-src_pulse_thread-mainloop.c12
-rw-r--r--audio/pulseaudio/files/patch-src_pulse_util.c20
-rw-r--r--audio/pulseaudio/files/patch-src_pulsecore_atomic.h116
-rw-r--r--audio/pulseaudio/files/patch-src_pulsecore_core-util.c49
-rw-r--r--audio/pulseaudio/files/patch-src_pulsecore_pstream.c23
-rw-r--r--audio/pulseaudio/files/patch-src_pulsecore_shm.c11
-rw-r--r--audio/pulseaudio/files/patch-src_tests_rtpoll-test.c18
-rw-r--r--audio/pulseaudio/files/patch-src_tests_rtstutter.c18
-rw-r--r--audio/pulseaudio/pkg-descr8
-rw-r--r--audio/pulseaudio/pkg-install63
-rw-r--r--audio/pulseaudio/pkg-message6
-rw-r--r--audio/pulseaudio/pkg-plist161
20 files changed, 754 insertions, 0 deletions
diff --git a/audio/pulseaudio/Makefile b/audio/pulseaudio/Makefile
new file mode 100644
index 000000000..760dfa932
--- /dev/null
+++ b/audio/pulseaudio/Makefile
@@ -0,0 +1,106 @@
+# New ports collection makefile for: polypaudio
+# Date created: 29 October 2004
+# Whom: Joe Marcus Clarke <marcus@FreeBSD.org>
+#
+# $FreeBSD$
+# $MCom: ports/audio/pulseaudio/Makefile,v 1.10 2008/03/20 16:07:21 mezz Exp $
+#
+
+PORTNAME= pulseaudio
+PORTVERSION= 0.9.14
+PORTREVISION= 1
+CATEGORIES= audio
+MASTER_SITES= http://0pointer.de/lennart/projects/${PORTNAME}/
+
+MAINTAINER= gnome@FreeBSD.org
+COMMENT= Sound server for UNIX
+
+LIB_DEPENDS= samplerate.1:${PORTSDIR}/audio/libsamplerate \
+ oil-0.3.0:${PORTSDIR}/devel/liboil \
+ speexdsp.1:${PORTSDIR}/audio/speex \
+ dbus-1.3:${PORTSDIR}/devel/dbus \
+ gdbm.3:${PORTSDIR}/databases/gdbm
+
+USE_GNOME= gnometarget gnomehack glib20 intltool ltverhack
+USE_XORG= x11 sm
+USE_LDCONFIG= yes
+GNU_CONFIGURE= yes
+USE_AUTOTOOLS= libltdl:15 libtool:15
+USE_GMAKE= yes
+CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \
+ LDFLAGS="-L${LOCALBASE}/lib" \
+ PTHREAD_CFLAGS="${PTHREAD_CFLAGS}" \
+ PTHREAD_LIBS="${PTHREAD_LIBS}" \
+ LIBS="-lm -lintl"
+
+CONFIGURE_ARGS= --localstatedir=/var \
+ --disable-lirc # untested
+
+OPTIONS= JACK "JACK audio support" Off \
+ AVAHI "Enable Avahi mDNS support" On \
+ HAL "Enable HAL support" On \
+ GCONF "Enable GConf support" On
+
+PULSE_VERSION= ${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}
+PLIST_SUB= PULSE_VERSION=${PULSE_VERSION}
+
+MAN1= esdcompat.1 pabrowse.1 pacat.1 pacmd.1 pactl.1 padsp.1 \
+ paplay.1 pasuspender.1 pax11publish.1 pulseaudio.1
+MAN5= default.pa.5 pulse-client.conf.5 pulse-daemon.conf.5
+
+.include <bsd.port.pre.mk>
+
+.if defined(WITH_JACK)
+LIB_DEPENDS+= jack.0:${PORTSDIR}/audio/jack
+PLIST_SUB+= JACK=""
+.else
+PLIST_SUB+= JACK="@comment "
+CONFIGURE_ARGS+=--disable-jack
+.endif
+
+.if !defined(WITHOUT_AVAHI)
+LIB_DEPENDS+= avahi-client.3:${PORTSDIR}/net/avahi-app
+PLIST_SUB+= AVAHI=""
+.else
+CONFIGURE_ARGS+=--disable-avahi
+PLIST_SUB+= AVAHI="@comment "
+.endif
+
+.if !defined(WITHOUT_HAL)
+LIB_DEPENDS+= hal.1:${PORTSDIR}/sysutils/hal
+PLIST_SUB+= HAL=""
+.else
+CONFIGURE_ARGS+=--disable-hal \
+ --disable-polkit
+PLIST_SUB+= HAL="@comment "
+.endif
+
+.if !defined(WITHOUT_GCONF)
+USE_GNOME+= gconf2
+PLIST_SUB+= GCONF=""
+.else
+CONFIGURE_ARGS+=--disable-gconf
+PLIST_SUB+= GCONF="@comment "
+.endif
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \
+ ${WRKSRC}/src/daemon/default.pa.in
+.if ${OSVERSION} < 700042
+ @${REINPLACE_CMD} -e 's|-Wl,-no-undefined||' \
+ ${WRKSRC}/src/Makefile.in
+.endif
+ @${REINPLACE_CMD} -e 's|-Wmissing-include-dirs||g' \
+ ${WRKSRC}/configure
+
+post-install:
+.for ii in default.pa daemon.conf client.conf system.pa
+ ${INSTALL_DATA} ${WRKSRC}/src/${ii} \
+ ${PREFIX}/etc/pulse/${ii}-dist
+.endfor
+.if !defined(PACKAGE_BUILDING)
+ @${SETENV} PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL
+.endif
+ @${CAT} ${PKGMESSAGE}
+
+.include <bsd.port.post.mk>
diff --git a/audio/pulseaudio/distinfo b/audio/pulseaudio/distinfo
new file mode 100644
index 000000000..5594f9d76
--- /dev/null
+++ b/audio/pulseaudio/distinfo
@@ -0,0 +1,3 @@
+MD5 (pulseaudio-0.9.14.tar.gz) = 0ed1115222d1d8c64cc14961cccb2eb0
+SHA256 (pulseaudio-0.9.14.tar.gz) = e6129f9239235981d329de40eeffa55041e6815a93aaa994d1eae242ea7446b5
+SIZE (pulseaudio-0.9.14.tar.gz) = 1303077
diff --git a/audio/pulseaudio/files/patch-configure b/audio/pulseaudio/files/patch-configure
new file mode 100644
index 000000000..513081005
--- /dev/null
+++ b/audio/pulseaudio/files/patch-configure
@@ -0,0 +1,36 @@
+--- configure.orig 2008-07-26 15:15:12.000000000 -0400
++++ configure 2008-07-26 15:15:35.000000000 -0400
+@@ -25321,6 +25321,7 @@ $as_echo_n "checking whether to check fo
+ check_inconsistencies=yes
+ case "${host_cpu}-${host_os}" in
+ *-darwin*) check_inconsistencies=no ;;
++ *-freebsd*) check_inconsistencies=no ;;
+ esac
+ if test x"$GCC" != xyes -o "x$check_inconsistencies" != xyes ; then
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+@@ -32654,9 +32655,9 @@ _ACEOF
+
+ else
+
+- { { $as_echo "$as_me:$LINENO: error: *** libatomic-ops headers not found" >&5
+-$as_echo "$as_me: error: *** libatomic-ops headers not found" >&2;}
+- { (exit 1); exit 1; }; }
++# { { $as_echo "$as_me:$LINENO: error: *** libatomic-ops headers not found" >&5
++#$as_echo "$as_me: error: *** libatomic-ops headers not found" >&2;}
++# { (exit 1); exit 1; }; }
+
+ fi
+
+@@ -32664,9 +32665,9 @@ done
+
+
+ # Win32 does not need the lib and breaks horribly if we try to include it
+- if test "x$os_is_win32" != "x1" ; then
+- LIBS="$LIBS -latomic_ops"
+- fi
++# if test "x$os_is_win32" != "x1" ; then
++# LIBS="$LIBS -latomic_ops"
++# fi
+ else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+ $as_echo "no" >&6; }
diff --git a/audio/pulseaudio/files/patch-src_daemon_default.pa.in b/audio/pulseaudio/files/patch-src_daemon_default.pa.in
new file mode 100644
index 000000000..77ba7306a
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_daemon_default.pa.in
@@ -0,0 +1,17 @@
+--- src/daemon/default.pa.in.orig 2008-08-19 17:25:03.000000000 -0400
++++ src/daemon/default.pa.in 2008-09-28 19:48:14.000000000 -0400
+@@ -22,10 +22,10 @@
+ .nofail
+
+ ### Load something into the sample cache
+-#load-sample-lazy x11-bell /usr/share/sounds/gtk-events/activate.wav
+-#load-sample-lazy pulse-hotplug /usr/share/sounds/startup3.wav
+-#load-sample-lazy pulse-coldplug /usr/share/sounds/startup3.wav
+-#load-sample-lazy pulse-access /usr/share/sounds/generic.wav
++#load-sample-lazy x11-bell %%LOCALBASE%%/sounds/gtk-events/activate.wav
++#load-sample-lazy pulse-hotplug %%LOCALBASE%%/sounds/startup3.wav
++#load-sample-lazy pulse-coldplug %%LOCALBASE%%/sounds/startup3.wav
++#load-sample-lazy pulse-access %%LOCALBASE%%/sounds/generic.wav
+
+ .fail
+
diff --git a/audio/pulseaudio/files/patch-src_daemon_main.c b/audio/pulseaudio/files/patch-src_daemon_main.c
new file mode 100644
index 000000000..27b2c4f1a
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_daemon_main.c
@@ -0,0 +1,28 @@
+--- src/daemon/main.c.orig 2009-01-12 18:11:38.000000000 -0500
++++ src/daemon/main.c 2009-03-07 19:56:16.000000000 -0500
+@@ -37,6 +37,7 @@
+ #include <unistd.h>
+ #include <locale.h>
+ #include <sys/types.h>
++#include <sys/stat.h>
+
+ #include <liboil/liboil.h>
+
+@@ -689,7 +690,7 @@ int main(int argc, char *argv[]) {
+ * first take the autospawn lock to make things
+ * synchronous. */
+
+- if ((autospawn_fd = pa_autospawn_lock_init()) < 0) {
++ /*if ((autospawn_fd = pa_autospawn_lock_init()) < 0) {
+ pa_log("Failed to initialize autospawn lock");
+ goto finish;
+ }
+@@ -699,7 +700,7 @@ int main(int argc, char *argv[]) {
+ goto finish;
+ }
+
+- autospawn_locked = TRUE;
++ autospawn_locked = TRUE;*/
+ }
+
+ if (conf->daemonize) {
diff --git a/audio/pulseaudio/files/patch-src_daemon_start-pulseaudio-x11.in b/audio/pulseaudio/files/patch-src_daemon_start-pulseaudio-x11.in
new file mode 100644
index 000000000..65001b572
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_daemon_start-pulseaudio-x11.in
@@ -0,0 +1,11 @@
+--- src/daemon/start-pulseaudio-x11.in.orig 2009-03-07 19:48:47.000000000 -0500
++++ src/daemon/start-pulseaudio-x11.in 2009-03-07 19:48:56.000000000 -0500
+@@ -19,7 +19,7 @@
+
+ set -e
+
+-@PA_BINARY@ --start "$@"
++@PA_BINARY@ -D "$@"
+
+ if [ x"$DISPLAY" != x ] ; then
+
diff --git a/audio/pulseaudio/files/patch-src_modules_oss-util.c b/audio/pulseaudio/files/patch-src_modules_oss-util.c
new file mode 100644
index 000000000..bf44d4fdd
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_modules_oss-util.c
@@ -0,0 +1,37 @@
+--- src/modules/oss-util.c.orig 2007-11-08 21:45:25.000000000 -0500
++++ src/modules/oss-util.c 2008-01-09 17:00:45.000000000 -0500
+@@ -44,6 +44,22 @@
+
+ #include "oss-util.h"
+
++#ifndef DSP_CAP_COPROC
++#define DSP_CAP_COPROC 0x00000800
++#endif
++#ifndef DSP_CAP_TRIGGER
++#define DSP_CAP_TRIGGER 0x00001000
++#endif
++#ifndef DSP_CAP_MMAP
++#define DSP_CAP_MMAP 0x00002000
++#endif
++#ifndef DSP_CAP_MULTI
++#define DSP_CAP_MULTI 0x00004000
++#endif
++#ifndef DSP_CAP_BIND
++#define DSP_CAP_BIND 0x00008000
++#endif
++
+ int pa_oss_open(const char *device, int *mode, int* pcaps) {
+ int fd = -1;
+ int caps;
+@@ -300,7 +316,11 @@ static int get_device_number(const char
+ int r;
+
+ if (!(p = rp = pa_readlink(dev))) {
++#ifdef ENOLINK
+ if (errno != EINVAL && errno != ENOLINK) {
++#else
++ if (errno != EINVAL) {
++#endif
+ r = -1;
+ goto finish;
+ }
diff --git a/audio/pulseaudio/files/patch-src_pulse_introspect.c b/audio/pulseaudio/files/patch-src_pulse_introspect.c
new file mode 100644
index 000000000..6681f70ca
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_pulse_introspect.c
@@ -0,0 +1,11 @@
+--- src/pulse/introspect.c.orig 2008-01-03 20:01:31.000000000 -0500
++++ src/pulse/introspect.c 2008-01-03 20:01:39.000000000 -0500
+@@ -26,6 +26,8 @@
+ #include <config.h>
+ #endif
+
++#include <string.h>
++
+ #include <pulse/context.h>
+
+ #include <pulsecore/gccmacro.h>
diff --git a/audio/pulseaudio/files/patch-src_pulse_thread-mainloop.c b/audio/pulseaudio/files/patch-src_pulse_thread-mainloop.c
new file mode 100644
index 000000000..72a0965dd
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_pulse_thread-mainloop.c
@@ -0,0 +1,12 @@
+--- src/pulse/thread-mainloop.c.orig 2008-01-01 17:23:28.000000000 -0500
++++ src/pulse/thread-mainloop.c 2008-01-01 17:25:00.000000000 -0500
+@@ -27,6 +27,9 @@
+ #endif
+
+ #include <signal.h>
++#ifndef OS_IS_WIN32
++#include <pthread.h>
++#endif
+ #include <stdio.h>
+
+ #ifdef HAVE_POLL_H
diff --git a/audio/pulseaudio/files/patch-src_pulse_util.c b/audio/pulseaudio/files/patch-src_pulse_util.c
new file mode 100644
index 000000000..2fa4de0bc
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_pulse_util.c
@@ -0,0 +1,20 @@
+--- src/pulse/util.c.orig 2008-01-01 17:29:31.000000000 -0500
++++ src/pulse/util.c 2008-01-01 17:29:00.000000000 -0500
+@@ -184,6 +184,17 @@ char *pa_get_binary_name(char *s, size_t
+ }
+
+ #endif
++#ifdef __FreeBSD__
++ {
++ char *rp;
++
++ if ((rp = pa_readlink("/proc/curproc/file"))) {
++ pa_strlcpy(s, pa_path_get_filename(rp), l);
++ pa_xfree(rp);
++ return s;
++ }
++ }
++#endif
+
+ #if defined(HAVE_SYS_PRCTL_H) && defined(PR_GET_NAME)
+ {
diff --git a/audio/pulseaudio/files/patch-src_pulsecore_atomic.h b/audio/pulseaudio/files/patch-src_pulsecore_atomic.h
new file mode 100644
index 000000000..06515b9f9
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_pulsecore_atomic.h
@@ -0,0 +1,116 @@
+--- src/pulsecore/atomic.h.orig 2008-01-23 19:44:20.000000000 -0500
++++ src/pulsecore/atomic.h 2008-03-15 14:48:41.000000000 -0400
+@@ -106,6 +106,113 @@ static inline int pa_atomic_ptr_cmpxchg(
+ return __sync_bool_compare_and_swap(&a->value, (long) old_p, (long) new_p);
+ }
+
++#elif defined(__FreeBSD__)
++
++#include <sys/cdefs.h>
++#include <sys/types.h>
++#include <sys/param.h>
++#include <machine/atomic.h>
++
++#if __FreeBSD_version < 600000
++#if defined(__i386__) || defined(__amd64__)
++#if defined(__amd64__)
++#define atomic_load_acq_64 atomic_load_acq_long
++#endif
++static inline u_int
++atomic_fetchadd_int(volatile u_int *p, u_int v)
++{
++ __asm __volatile(
++ " " __XSTRING(MPLOCKED) " "
++ " xaddl %0, %1 ; "
++ "# atomic_fetchadd_int"
++ : "+r" (v),
++ "=m" (*p)
++ : "m" (*p));
++
++ return (v);
++}
++#elif defined(__sparc64__)
++#define atomic_load_acq_64 atomic_load_acq_long
++#define atomic_fetchadd_int atomic_add_int
++#elif defined(__ia64__)
++#define atomic_load_acq_64 atomic_load_acq_long
++static inline uint32_t
++atomic_fetchadd_int(volatile uint32_t *p, uint32_t v)
++{
++ uint32_t value;
++
++ do {
++ value = *p;
++ } while (!atomic_cmpset_32(p, value, value + v));
++ return (value);
++}
++#endif
++#endif
++
++typedef struct pa_atomic {
++ volatile unsigned long value;
++} pa_atomic_t;
++
++#define PA_ATOMIC_INIT(v) { .value = (v) }
++
++static inline int pa_atomic_load(const pa_atomic_t *a) {
++ return (int) atomic_load_acq_int((unsigned int *) &a->value);
++}
++
++static inline void pa_atomic_store(pa_atomic_t *a, int i) {
++ atomic_store_rel_int((unsigned int *) &a->value, i);
++}
++
++static inline int pa_atomic_add(pa_atomic_t *a, int i) {
++ return atomic_fetchadd_int((unsigned int *) &a->value, i);
++}
++
++static inline int pa_atomic_sub(pa_atomic_t *a, int i) {
++ return atomic_fetchadd_int((unsigned int *) &a->value, -(i));
++}
++
++static inline int pa_atomic_inc(pa_atomic_t *a) {
++ return atomic_fetchadd_int((unsigned int *) &a->value, 1);
++}
++
++static inline int pa_atomic_dec(pa_atomic_t *a) {
++ return atomic_fetchadd_int((unsigned int *) &a->value, -1);
++}
++
++static inline int pa_atomic_cmpxchg(pa_atomic_t *a, int old_i, int new_i) {
++ return atomic_cmpset_int((unsigned int *) &a->value, old_i, new_i);
++}
++
++typedef struct pa_atomic_ptr {
++ volatile unsigned long value;
++} pa_atomic_ptr_t;
++
++#define PA_ATOMIC_PTR_INIT(v) { .value = (unsigned long) (v) }
++
++static inline void* pa_atomic_ptr_load(const pa_atomic_ptr_t *a) {
++#ifdef atomic_load_acq_64
++ return (void*) atomic_load_acq_ptr((unsigned long *) &a->value);
++#else
++ return (void*) atomic_load_acq_ptr((unsigned int *) &a->value);
++#endif
++}
++
++static inline void pa_atomic_ptr_store(pa_atomic_ptr_t *a, void *p) {
++#ifdef atomic_load_acq_64
++ atomic_store_rel_ptr(&a->value, (unsigned long) p);
++#else
++ atomic_store_rel_ptr((unsigned int *) &a->value, (unsigned int) p);
++#endif
++}
++
++static inline int pa_atomic_ptr_cmpxchg(pa_atomic_ptr_t *a, void *old_p, void* new_p) {
++#ifdef atomic_load_acq_64
++ return atomic_cmpset_ptr(&a->value, (unsigned long) old_p, (unsigned long) new_p);
++#else
++ return atomic_cmpset_ptr((unsigned int *) &a->value, (unsigned int) old_p, (unsigned int) new_p);
++#endif
++}
++
+ #elif defined(__GNUC__) && (defined(__amd64__) || defined(__x86_64__))
+
+ #error "The native atomic operations implementation for AMD64 has not been tested. libatomic_ops is known to not work properly on AMD64 and your gcc version is too old for the gcc-builtin atomic ops support. You have three options now: make the native atomic operations implementation for AMD64 work, fix libatomic_ops, or upgrade your GCC."
diff --git a/audio/pulseaudio/files/patch-src_pulsecore_core-util.c b/audio/pulseaudio/files/patch-src_pulsecore_core-util.c
new file mode 100644
index 000000000..91f369249
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_pulsecore_core-util.c
@@ -0,0 +1,49 @@
+--- src/pulsecore/core-util.c.orig 2008-09-08 19:33:30.000000000 -0400
++++ src/pulsecore/core-util.c 2008-09-28 19:50:24.000000000 -0400
+@@ -37,6 +37,7 @@
+ #include <time.h>
+ #include <ctype.h>
+ #include <sys/types.h>
++#include <sys/socket.h>
+ #include <sys/stat.h>
+ #include <sys/time.h>
+ #include <dirent.h>
+@@ -567,6 +568,7 @@ int pa_make_realtime(int rtprio) {
+ errno = ENOTSUP;
+ return -1;
+ #endif
++ ;
+ }
+
+ /* This is merely used for giving the user a hint. This is not correct
+@@ -1131,22 +1133,22 @@ int pa_check_in_group(gid_t g) {
+ (advisory on UNIX, mandatory on Windows) */
+ int pa_lock_fd(int fd, int b) {
+ #ifdef F_SETLKW
+- struct flock flock;
++ struct flock pa_flock;
+
+ /* Try a R/W lock first */
+
+- flock.l_type = (short) (b ? F_WRLCK : F_UNLCK);
+- flock.l_whence = SEEK_SET;
+- flock.l_start = 0;
+- flock.l_len = 0;
++ pa_flock.l_type = (short) (b ? F_WRLCK : F_UNLCK);
++ pa_flock.l_whence = SEEK_SET;
++ pa_flock.l_start = 0;
++ pa_flock.l_len = 0;
+
+- if (fcntl(fd, F_SETLKW, &flock) >= 0)
++ if (fcntl(fd, F_SETLKW, &pa_flock) >= 0)
+ return 0;
+
+ /* Perhaps the file descriptor qas opened for read only, than try again with a read lock. */
+ if (b && errno == EBADF) {
+- flock.l_type = F_RDLCK;
+- if (fcntl(fd, F_SETLKW, &flock) >= 0)
++ pa_flock.l_type = F_RDLCK;
++ if (fcntl(fd, F_SETLKW, &pa_flock) >= 0)
+ return 0;
+ }
+
diff --git a/audio/pulseaudio/files/patch-src_pulsecore_pstream.c b/audio/pulseaudio/files/patch-src_pulsecore_pstream.c
new file mode 100644
index 000000000..b242e2e41
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_pulsecore_pstream.c
@@ -0,0 +1,23 @@
+--- src/pulsecore/pstream.c.orig 2007-10-28 15:13:53.000000000 -0400
++++ src/pulsecore/pstream.c 2008-01-01 16:14:18.000000000 -0500
+@@ -183,14 +183,17 @@ static void do_something(pa_pstream *p)
+ p->mainloop->defer_enable(p->defer_event, 0);
+
+ if (!p->dead && pa_iochannel_is_readable(p->io)) {
+- if (do_read(p) < 0)
++ if (do_read(p) < 0) {
+ goto fail;
+- } else if (!p->dead && pa_iochannel_is_hungup(p->io))
++ }
++ } else if (!p->dead && pa_iochannel_is_hungup(p->io)) {
+ goto fail;
++ }
+
+ if (!p->dead && pa_iochannel_is_writable(p->io)) {
+- if (do_write(p) < 0)
++ if (do_write(p) < 0) {
+ goto fail;
++ }
+ }
+
+ pa_pstream_unref(p);
diff --git a/audio/pulseaudio/files/patch-src_pulsecore_shm.c b/audio/pulseaudio/files/patch-src_pulsecore_shm.c
new file mode 100644
index 000000000..549091ccc
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_pulsecore_shm.c
@@ -0,0 +1,11 @@
+--- src/pulsecore/shm.c.orig 2007-10-28 15:13:53.000000000 -0400
++++ src/pulsecore/shm.c 2008-01-01 16:19:19.000000000 -0500
+@@ -80,7 +80,7 @@ struct shm_marker {
+ };
+
+ static char *segment_name(char *fn, size_t l, unsigned id) {
+- pa_snprintf(fn, l, "/pulse-shm-%u", id);
++ pa_snprintf(fn, l, "/tmp/pulse-shm-%u", id);
+ return fn;
+ }
+
diff --git a/audio/pulseaudio/files/patch-src_tests_rtpoll-test.c b/audio/pulseaudio/files/patch-src_tests_rtpoll-test.c
new file mode 100644
index 000000000..365ca8d2b
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_tests_rtpoll-test.c
@@ -0,0 +1,18 @@
+--- src/tests/rtpoll-test.c.orig 2008-01-03 20:03:03.000000000 -0500
++++ src/tests/rtpoll-test.c 2008-01-03 20:03:25.000000000 -0500
+@@ -45,6 +45,7 @@ static int worker(pa_rtpoll_item *w) {
+ }
+
+ int main(int argc, char *argv[]) {
++#ifdef SIGRTMIN
+ pa_rtpoll *p;
+ pa_rtpoll_item *i, *w;
+ struct pollfd *pollfd;
+@@ -86,6 +87,7 @@ int main(int argc, char *argv[]) {
+ pa_rtpoll_item_free(w);
+
+ pa_rtpoll_free(p);
++#endif
+
+ return 0;
+ }
diff --git a/audio/pulseaudio/files/patch-src_tests_rtstutter.c b/audio/pulseaudio/files/patch-src_tests_rtstutter.c
new file mode 100644
index 000000000..c8d657481
--- /dev/null
+++ b/audio/pulseaudio/files/patch-src_tests_rtstutter.c
@@ -0,0 +1,18 @@
+--- src/tests/rtstutter.c.orig 2008-07-26 17:10:17.000000000 -0400
++++ src/tests/rtstutter.c 2008-07-26 17:12:26.000000000 -0400
+@@ -42,6 +42,7 @@ static int msec_lower, msec_upper;
+ static void* work(void *p) PA_GCC_NORETURN;
+
+ static void* work(void *p) {
++#ifndef __FreeBSD__
+ cpu_set_t mask;
+ struct sched_param param;
+
+@@ -83,6 +84,7 @@ static void* work(void *p) {
+ } while (now.tv_sec < end.tv_sec ||
+ (now.tv_sec == end.tv_sec && now.tv_nsec < end.tv_nsec));
+ }
++#endif
+ }
+
+ int main(int argc, char*argv[]) {
diff --git a/audio/pulseaudio/pkg-descr b/audio/pulseaudio/pkg-descr
new file mode 100644
index 000000000..45634a1f7
--- /dev/null
+++ b/audio/pulseaudio/pkg-descr
@@ -0,0 +1,8 @@
+PulseAudio, previously known as Polypaudio, is a sound server for POSIX and
+Win32 systems. A sound server is basically a proxy for your sound applications.
+It allows you to do advanced operations on your sound data as it passes between
+your application and your hardware. Things like transferring the audio to a
+different machine, changing the sample format or channel count and mixing
+several sounds into one are easily achieved using a sound server.
+
+WWW: http://pulseaudio.org/
diff --git a/audio/pulseaudio/pkg-install b/audio/pulseaudio/pkg-install
new file mode 100644
index 000000000..118fd3ef2
--- /dev/null
+++ b/audio/pulseaudio/pkg-install
@@ -0,0 +1,63 @@
+#!/bin/sh
+
+case $2 in
+POST-INSTALL)
+ RGROUP=pulse-rt
+ SUSER=pulse
+ SGROUP=${SUSER}
+ AGROUP=pulse-access
+ SUID=563
+ RGID=557
+ SGID=${SUID}
+ AGID=564
+ PW=/usr/sbin/pw
+
+ if ${PW} group show "${RGROUP}" 2>/dev/null; then
+ echo "You already have a group \"${RGROUP}\", so I will use it."
+ else
+ if ${PW} groupadd ${RGROUP} -g ${RGID}; then
+ echo "Added group \"${RGROUP}\"."
+ else
+ echo "Adding group \"${RGROUP}\" failed..."
+ exit 1
+ fi
+ fi
+
+ if ${PW} group show "${SGROUP}" 2>/dev/null; then
+ echo "You already have a group \"${SGROUP}\", so I will use it."
+ else
+ if ${PW} groupadd ${SGROUP} -g ${SGID}; then
+ echo "Added group \"${SGROUP}\"."
+ else
+ echo "Adding group \"${SGROUP}\" failed..."
+ exit 1
+ fi
+ fi
+
+ if ${PW} group show "${AGROUP}" 2>/dev/null; then
+ echo "You already have a group \"${AGROUP}\", so I will use it."
+ else
+ if ${PW} groupadd ${AGROUP} -g ${AGID}; then
+ echo "Added group \"${AGROUP}\"."
+ else
+ echo "Adding group \"${AGROUP}\" failed..."
+ exit 1
+ fi
+ fi
+
+ if ${PW} user show "${SUSER}" 2>/dev/null; then
+ echo "You already have a user \"${SUSER}\", so I will use it."
+ else
+ if ${PW} useradd ${SUSER} -u ${SUID} -g ${SGROUP} -h - \
+ -d "/nonexistent" -s /sbin/nologin -c "PulseAudio System User"
+ then
+ echo "Added user \"${SUSER}\"."
+ else
+ echo "Adding user \"${SUSER}\" failed..."
+ exit 1
+ fi
+ fi
+ echo ""
+ exit 0
+ ;;
+esac
diff --git a/audio/pulseaudio/pkg-message b/audio/pulseaudio/pkg-message
new file mode 100644
index 000000000..83439b120
--- /dev/null
+++ b/audio/pulseaudio/pkg-message
@@ -0,0 +1,6 @@
+===>
+Pulseaudio is designed to run in realtime, to achieve this pulseaudio is
+marked SUID root by default. To take advantage of pulseaudio's realtime
+functionality you must be a member of the 'pulse-rt' group.
+
+ie: 'pw mod group pulse-rt -m [USERNAME]'
diff --git a/audio/pulseaudio/pkg-plist b/audio/pulseaudio/pkg-plist
new file mode 100644
index 000000000..cc1f9da74
--- /dev/null
+++ b/audio/pulseaudio/pkg-plist
@@ -0,0 +1,161 @@
+bin/esdcompat
+%%AVAHI%%bin/pabrowse
+bin/pacat
+bin/pacmd
+bin/pactl
+bin/padsp
+bin/paplay
+bin/parec
+bin/pasuspender
+bin/pax11publish
+bin/pulseaudio
+bin/start-pulseaudio-x11
+@unexec if cmp -s %D/etc/pulse/client.conf %D/etc/pulse/client.conf-dist; then rm -f %D/etc/pulse/client.conf; fi
+etc/pulse/client.conf-dist
+@unexec if cmp -s %D/etc/pulse/daemon.conf %D/etc/pulse/daemon.conf-dist; then rm -f %D/etc/pulse/daemon.conf; fi
+etc/pulse/daemon.conf-dist
+@unexec if cmp -s %D/etc/pulse/default.pa %D/etc/pulse/default.pa-dist; then rm -f %D/etc/pulse/default.pa; fi
+etc/pulse/default.pa-dist
+@unexec if cmp -s %D/etc/pulse/system.pa %D/etc/pulse/system.pa-dist; then rm -f %D/etc/pulse/system.pa; fi
+etc/pulse/system.pa-dist
+etc/xdg/autostart/pulseaudio.desktop
+%%AVAHI%%include/pulse/browser.h
+include/pulse/cdecl.h
+include/pulse/channelmap.h
+include/pulse/context.h
+include/pulse/def.h
+include/pulse/error.h
+include/pulse/ext-stream-restore.h
+include/pulse/gccmacro.h
+include/pulse/glib-mainloop.h
+include/pulse/introspect.h
+include/pulse/mainloop-api.h
+include/pulse/mainloop-signal.h
+include/pulse/mainloop.h
+include/pulse/operation.h
+include/pulse/proplist.h
+include/pulse/pulseaudio.h
+include/pulse/sample.h
+include/pulse/scache.h
+include/pulse/simple.h
+include/pulse/stream.h
+include/pulse/subscribe.h
+include/pulse/thread-mainloop.h
+include/pulse/timeval.h
+include/pulse/utf8.h
+include/pulse/util.h
+include/pulse/version.h
+include/pulse/volume.h
+include/pulse/xmalloc.h
+%%AVAHI%%lib/libpulse-browse.a
+%%AVAHI%%lib/libpulse-browse.la
+%%AVAHI%%lib/libpulse-browse.so
+%%AVAHI%%lib/libpulse-browse.so.0
+lib/libpulse-mainloop-glib.a
+lib/libpulse-mainloop-glib.la
+lib/libpulse-mainloop-glib.so
+lib/libpulse-mainloop-glib.so.0
+lib/libpulse-simple.a
+lib/libpulse-simple.la
+lib/libpulse-simple.so
+lib/libpulse-simple.so.0
+lib/libpulse.a
+lib/libpulse.la
+lib/libpulse.so
+lib/libpulse.so.0
+lib/libpulsecore.a
+lib/libpulsecore.la
+lib/libpulsecore.so
+lib/libpulsecore.so.9
+lib/libpulsedsp.so
+lib/pulse-%%PULSE_VERSION%%/modules/libauth-cookie.so
+lib/pulse-%%PULSE_VERSION%%/modules/libauthkey.so
+%%AVAHI%%lib/pulse-%%PULSE_VERSION%%/modules/libavahi-wrap.so
+lib/pulse-%%PULSE_VERSION%%/modules/libcli.so
+%%HAL%%lib/pulse-%%PULSE_VERSION%%/modules/libdbus-util.so
+lib/pulse-%%PULSE_VERSION%%/modules/libiochannel.so
+lib/pulse-%%PULSE_VERSION%%/modules/libioline.so
+lib/pulse-%%PULSE_VERSION%%/modules/libipacl.so
+lib/pulse-%%PULSE_VERSION%%/modules/liboss-util.so
+lib/pulse-%%PULSE_VERSION%%/modules/libpacket.so
+lib/pulse-%%PULSE_VERSION%%/modules/libparseaddr.so
+lib/pulse-%%PULSE_VERSION%%/modules/libpdispatch.so
+lib/pulse-%%PULSE_VERSION%%/modules/libprotocol-cli.so
+lib/pulse-%%PULSE_VERSION%%/modules/libprotocol-esound.so
+lib/pulse-%%PULSE_VERSION%%/modules/libprotocol-http.so
+lib/pulse-%%PULSE_VERSION%%/modules/libprotocol-native.so
+lib/pulse-%%PULSE_VERSION%%/modules/libprotocol-simple.so
+lib/pulse-%%PULSE_VERSION%%/modules/libpstream-util.so
+lib/pulse-%%PULSE_VERSION%%/modules/libpstream.so
+lib/pulse-%%PULSE_VERSION%%/modules/librtp.so
+lib/pulse-%%PULSE_VERSION%%/modules/libsocket-client.so
+lib/pulse-%%PULSE_VERSION%%/modules/libsocket-server.so
+lib/pulse-%%PULSE_VERSION%%/modules/libsocket-util.so
+lib/pulse-%%PULSE_VERSION%%/modules/libstrlist.so
+lib/pulse-%%PULSE_VERSION%%/modules/libtagstruct.so
+lib/pulse-%%PULSE_VERSION%%/modules/libx11prop.so
+lib/pulse-%%PULSE_VERSION%%/modules/libx11wrap.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-always-sink.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-cli-protocol-tcp.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-cli-protocol-unix.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-cli.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-combine.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-console-kit.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-default-device-restore.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-detect.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-device-restore.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-esound-compat-spawnfd.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-esound-compat-spawnpid.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-esound-protocol-tcp.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-esound-protocol-unix.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-esound-sink.so
+%%GCONF%%lib/pulse-%%PULSE_VERSION%%/modules/module-gconf.so
+%%HAL%%lib/pulse-%%PULSE_VERSION%%/modules/module-hal-detect.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-http-protocol-tcp.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-http-protocol-unix.so
+%%JACK%%lib/pulse-%%PULSE_VERSION%%/modules/module-jack-sink.so
+%%JACK%%lib/pulse-%%PULSE_VERSION%%/modules/module-jack-source.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-ladspa-sink.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-match.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-native-protocol-fd.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-native-protocol-tcp.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-native-protocol-unix.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-null-sink.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-oss.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-pipe-sink.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-pipe-source.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-position-event-sounds.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-remap-sink.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-rescue-streams.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-rtp-recv.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-rtp-send.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-simple-protocol-tcp.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-simple-protocol-unix.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-sine.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-stream-restore.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-suspend-on-idle.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-tunnel-sink.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-tunnel-source.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-volume-restore.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-x11-bell.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-x11-publish.so
+lib/pulse-%%PULSE_VERSION%%/modules/module-x11-xsmp.so
+%%AVAHI%%lib/pulse-%%PULSE_VERSION%%/modules/module-zeroconf-discover.so
+%%AVAHI%%lib/pulse-%%PULSE_VERSION%%/modules/module-zeroconf-publish.so
+%%AVAHI%%libdata/pkgconfig/libpulse-browse.pc
+libdata/pkgconfig/libpulse-mainloop-glib.pc
+libdata/pkgconfig/libpulse-simple.pc
+libdata/pkgconfig/libpulse.pc
+%%GCONF%%libexec/pulse/gconf-helper
+%%HAL%%share/PolicyKit/policy/org.pulseaudio.policy
+share/locale/de/LC_MESSAGES/pulseaudio.mo
+share/locale/el/LC_MESSAGES/pulseaudio.mo
+share/locale/fr/LC_MESSAGES/pulseaudio.mo
+share/locale/sv/LC_MESSAGES/pulseaudio.mo
+%%GCONF%%@dirrm libexec/pulse
+@dirrm lib/pulse-%%PULSE_VERSION%%/modules
+@dirrm lib/pulse-%%PULSE_VERSION%%
+@dirrm include/pulse
+@dirrmtry etc/xdg/autostart
+@dirrmtry etc/xdg
+@dirrm etc/pulse