[gtk-vnc] Introduce pulse audio bridge for GVnc



commit 1814f6c54b8a5ee2e5daeb80a5b2d7fe5403250f
Author: Daniel P. Berrange <berrange redhat com>
Date:   Fri Dec 9 15:23:42 2011 +0000

    Introduce pulse audio bridge for GVnc
    
    Introduce a new library libgvncpulse-1.0.so which provides an
    implementation of VncAudio that uses Pulse Audio for output
    
    * Makefile.am, gvncpulse-1.0.pc.in: Add pkgconfig file for
      libgvncpulse
    * gtk-vnc.spec.in: Add gvncpulse & gvncpulse-devel sub-RPMS
    * src/Makefile.am, src/gvncpulse.h, src/libgvncpulse_sym.version
      Add gvncpulse-1.0 library
    * src/vncaudiopulse.c, src/vncaudiopulse.h: Pulse audio
      impl of VncAudio
    * vapi/Makefile.am: Build vala binding for pulse audio

 Makefile.am                  |    5 +
 configure.ac                 |    2 +
 gtk-vnc.spec.in              |   50 +++++++++++++
 gvncpulse-1.0.pc.in          |   11 +++
 src/Makefile.am              |   60 +++++++++++++++-
 src/gvncpulse.h              |   27 +++++++
 src/libgvncpulse_sym.version |    8 ++
 src/vncaudiopulse.c          |  167 ++++++++++++++++++++++++++++++++++++++++++
 src/vncaudiopulse.h          |   70 ++++++++++++++++++
 vapi/Makefile.am             |   15 ++++
 10 files changed, 414 insertions(+), 1 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index e67c84e..4f1ee00 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,8 +4,13 @@ ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS}
 pkgconfig_DATA = @PACKAGE -$(GTK_VNC_API_VERSION).pc gvnc-1.0.pc
 pkgconfigdir = $(libdir)/pkgconfig
 
+if HAVE_PULSEAUDIO
+pkgconfig_DATA += gvncpulse-1.0.pc
+endif
+
 EXTRA_DIST =				\
 	gvnc-1.0.pc.in			\
+	gvncpulse-1.0.pc.in		\
 	$(PACKAGE)-1.0.pc.in		\
 	$(PACKAGE)-2.0.pc.in		\
 	$(PACKAGE).spec.in		\
diff --git a/configure.ac b/configure.ac
index 26a0d8f..831fce9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -209,6 +209,7 @@ PKG_CHECK_MODULES(PULSEAUDIO, libpulse-simple, WANT_PULSEAUDIO="yes", AC_MSG_NOT
 if test "x$WANT_PULSEAUDIO" = xyes; then
     AC_DEFINE_UNQUOTED([HAVE_PULSEAUDIO], 1,[Define if we have and want pulseaudio.])
 fi
+AM_CONDITIONAL([HAVE_PULSEAUDIO], [test "x$WANT_PULSEAUDIO" = "xyes"])
 AC_SUBST(PULSEAUDIO_CFLAGS)
 AC_SUBST(PULSEAUDIO_LIBS)
 
@@ -444,6 +445,7 @@ AC_CONFIG_FILES(
   po/Makefile.in
   vapi/Makefile
   gvnc-1.0.pc
+  gvncpulse-1.0.pc
   gtk-vnc-1.0.pc
   gtk-vnc-2.0.pc
   gtk-vnc.spec
diff --git a/gtk-vnc.spec.in b/gtk-vnc.spec.in
index d7c7898..097e4f5 100644
--- a/gtk-vnc.spec.in
+++ b/gtk-vnc.spec.in
@@ -19,6 +19,8 @@
 %define with_vala 1
 %endif
 
+%define with_pulse 1
+
 Summary: A GTK2 widget for VNC clients
 Name: gtk-vnc
 Version: @VERSION@
@@ -50,6 +52,9 @@ BuildRequires: gtk3-devel
 %if %{with_vala}
 BuildRequires: vala-tools
 %endif
+%if %{with_pulse}
+BuildRequires: pulseaudio-libs-devel
+%endif
 
 %description
 gtk-vnc is a VNC viewer widget for GTK2. It is built using coroutines
@@ -114,6 +119,29 @@ with the raw protocol itself.
 
 Libraries, includes, etc. to compile with the gvnc library
 
+%if %{with_pulse}
+%package -n gvncpulse
+Summary: A Pulse Audio bridge for VNC connections
+
+%description -n gvncpulse
+gvncpulse is a bridge to the Pulse Audio system for VNC.
+It allows VNC clients to play back audio on the local
+system
+
+%package -n gvncpulse-devel
+Summary: Libraries, includes, etc. to compile with the gvncpulse library
+Group: Development/Libraries
+Requires: gvncpulse = %{version}-%{release}
+Requires: pkgconfig
+
+%description -n gvncpulse-devel
+gvncpulse is a bridge to the Pulse Audio system for VNC.
+It allows VNC clients to play back audio on the local
+system
+
+Libraries, includes, etc. to compile with the gvnc library
+%endif
+
 %package -n gvnc-tools
 Summary: Command line VNC tools
 Group: Applications/Internet
@@ -259,6 +287,28 @@ rm -fr %{buildroot}
 %{_datadir}/gir-1.0/GVnc-1.0.gir
 %endif
 
+%if %{with_pulse}
+%files -n gvncpulse -f %{name}.lang
+%defattr(-, root, root)
+%{_libdir}/libgvncpulse-1.0.so.*
+%if %{with_gir}
+%{_libdir}/girepository-1.0/GVncPulse-1.0.typelib
+%endif
+%if %{with_vala}
+%{_datadir}/vala/vapi/gvncpulse-1.0.vapi
+%endif
+
+%files -n gvncpulse-devel
+%defattr(-, root, root)
+%{_libdir}/libgvncpulse-1.0.so
+%dir %{_includedir}/gvncpulse-1.0/
+%{_includedir}/gvncpulse-1.0/*.h
+%{_libdir}/pkgconfig/gvncpulse-1.0.pc
+%if %{with_gir}
+%{_datadir}/gir-1.0/GVncPulse-1.0.gir
+%endif
+%endif
+
 %files -n gvnc-tools
 %defattr(-, root, root)
 %doc gtk-vnc-%{version}/AUTHORS
diff --git a/gvncpulse-1.0.pc.in b/gvncpulse-1.0.pc.in
new file mode 100644
index 0000000..4768d7c
--- /dev/null
+++ b/gvncpulse-1.0.pc.in
@@ -0,0 +1,11 @@
+prefix= prefix@
+exec_prefix= exec_prefix@
+libdir= libdir@
+includedir= includedir@
+
+Name: GVNC Pulse
+Description: Pulse audio bridge for VNC client connections
+Requires: gvnc-1.0 = @VERSION@
+Version: @VERSION@
+Libs: -L${libdir} -lgvncpulse-1.0
+Cflags: -I${includedir}/gvncpulse-1.0
diff --git a/src/Makefile.am b/src/Makefile.am
index 0f25863..e63f366 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,15 +1,17 @@
 
-EXTRA_DIST = libgvnc_sym.version libgtk-vnc_sym.version vncmarshal.txt
+EXTRA_DIST = libgvnc_sym.version libgvncpulse_sym.version libgtk-vnc_sym.version vncmarshal.txt
 
 lib_LTLIBRARIES = libgvnc-1.0.la
 
 BUILT_SOURCES =
 if USE_VERSION_DEFS
 GVNC_VERSION_FILE = $(builddir)/libgvnc_sym.def
+GVNCPULSE_VERSION_FILE = $(builddir)/libgvncpulse_sym.def
 GTK_VNC_VERSION_FILE = $(builddir)/libgtk-vnc_sym.def
 BUILT_SOURCES += $(GVNC_VERSION_FILE) $(GTK_VNC_VERSION_FILE)
 else
 GVNC_VERSION_FILE = $(srcdir)/libgvnc_sym.version
+GVNCPULSE_VERSION_FILE = $(srcdir)/libgvncpulse_sym.version
 GTK_VNC_VERSION_FILE = $(srcdir)/libgtk-vnc_sym.version
 endif
 
@@ -87,6 +89,32 @@ libgvnc_1_0_la_SOURCES = \
 			vncmarshal.h vncmarshal.c \
 			vncutil.h vncutil.c
 
+if HAVE_PULSEAUDIO
+lib_LTLIBRARIES += libgvncpulse-1.0.la
+
+gvncpulse_includedir = $(includedir)/gvncpulse-1.0/
+gvncpulse_include_HEADERS = \
+		       gvncpulse.h \
+                       vncaudiopulse.h
+
+libgvncpulse_1_0_la_SOURCES = \
+                       vncaudiopulse.h vncaudiopulse.c
+libgvncpulse_1_0_la_LIBADD = \
+                       @GOBJECT_LIBS@ \
+                       @PULSEAUDIO_LIBS@ \
+                       libgvnc-1.0.la
+libgvncpulse_1_0_la_CFLAGS = \
+                       @GOBJECT_CFLAGS@ \
+                       @PULSEAUDIO_CFLAGS@ \
+                       @WARNING_CFLAGS@ \
+                       -DSYSCONFDIR=\""$(sysconfdir)"\" \
+                       -DPACKAGE_LOCALE_DIR=\""$(datadir)/locale"\" \
+                       -DG_LOG_DOMAIN=\"pulse-vnc\"
+libgvncpulse_1_0_la_LDFLAGS = \
+                       $(VERSION_SCRIPT_FLAGS)$(GVNCPULSE_VERSION_FILE) \
+                       -version-info 0:1:0 $(NO_UNDEFINED_FLAGS)
+endif
+
 if WITH_UCONTEXT
 libgvnc_1_0_la_SOURCES += continuation.h continuation.c coroutine_ucontext.c
 EXTRA_DIST += coroutine_gthread.c
@@ -306,6 +334,9 @@ GVNC_INTROSPECTION_SRCS = \
 			$(builddir)/vncconnectionenums.h $(builddir)/vncconnectionenums.c \
 			$(srcdir)/vncutil.h $(srcdir)/vncutil.c
 
+GVNCPULSE_INTROSPECTION_SRCS = \
+			$(srcdir)/vncaudiopulse.h $(srcdir)/vncaudiopulse.c
+
 GTK_VNC_INTROSPECTION_SRCS = \
 			$(srcdir)/vnccairoframebuffer.h $(srcdir)/vnccairoframebuffer.c \
 			$(srcdir)/vncdisplay.h $(srcdir)/vncdisplay.c \
@@ -341,6 +372,25 @@ GVnc-1.0.gir: libgvnc-1.0.la $(G_IR_SCANNER) Makefile.am
                 --pkg=gvnc-1.0 \
                 $(GVNC_INTROSPECTION_SRCS)
 
+GVncPulse-1.0.gir: libgvncpulse-1.0.la $(G_IR_SCANNER) Makefile.am
+	$(AM_V_GEN)PKG_CONFIG_PATH=$(top_builddir) $(G_IR_SCANNER) -v \
+                --namespace GVncPulse \
+                --nsversion 1.0 \
+		--include GObject-2.0 \
+		--include GVnc-1.0 \
+		$(PREFIX_ARGS) \
+                --library=$(builddir)/libgvncpulse-1.0.la \
+                --add-include-path=$(top_srcdir) \
+                --add-include-path=$(srcdir) \
+                --add-include-path=$(builddir) \
+		--c-include="gvncpulse.h" \
+                --output $@ \
+                -I$(top_srcdir) \
+                -I$(srcdir) \
+		--verbose \
+                --pkg=gvncpulse-1.0 \
+                $(GVNCPULSE_INTROSPECTION_SRCS)
+
 GtkVnc-$(GTK_VNC_API_VERSION).gir: GVnc-1.0.gir libgtk-vnc-$(GTK_VNC_API_VERSION).la $(G_IR_SCANNER) Makefile.am
 	$(AM_V_GEN)PKG_CONFIG_PATH=$(top_builddir) $(G_IR_SCANNER) -v \
                 --namespace GtkVnc \
@@ -364,9 +414,17 @@ GtkVnc-$(GTK_VNC_API_VERSION).gir: GVnc-1.0.gir libgtk-vnc-$(GTK_VNC_API_VERSION
 girdir = $(datadir)/gir-1.0
 gir_DATA = GVnc-1.0.gir GtkVnc-$(GTK_VNC_API_VERSION).gir
 
+if HAVE_PULSEAUDIO
+gir_DATA += GVncPulse-1.0.gir
+endif
+
 typelibsdir = $(libdir)/girepository-1.0
 typelibs_DATA = GVnc-1.0.typelib GtkVnc-$(GTK_VNC_API_VERSION).typelib
 
+if HAVE_PULSEAUDIO
+typelibs_DATA += GVncPulse-1.0.typelib
+endif
+
 %.typelib: %.gir
 	$(AM_V_GEN)$(G_IR_COMPILER) \
 		--includedir=$(srcdir) \
diff --git a/src/gvncpulse.h b/src/gvncpulse.h
new file mode 100644
index 0000000..de70663
--- /dev/null
+++ b/src/gvncpulse.h
@@ -0,0 +1,27 @@
+/*
+ * GTK VNC Widget
+ *
+ * Copyright (C) 2009-2010 Daniel P. Berrange <dan berrange com>
+ *
+ * This library 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.0 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#ifndef GVNCPULSE_H
+#define GVNCPULSE_H
+
+#include <gvnc.h>
+#include <vncaudiopulse.h>
+
+#endif
diff --git a/src/libgvncpulse_sym.version b/src/libgvncpulse_sym.version
new file mode 100644
index 0000000..f720239
--- /dev/null
+++ b/src/libgvncpulse_sym.version
@@ -0,0 +1,8 @@
+{
+    global:
+	vnc_audio_pulse_get_type;
+	vnc_audio_pulse_new;
+
+    local:
+        *;
+};
diff --git a/src/vncaudiopulse.c b/src/vncaudiopulse.c
new file mode 100644
index 0000000..b97a0e0
--- /dev/null
+++ b/src/vncaudiopulse.c
@@ -0,0 +1,167 @@
+/*
+ * GTK VNC Widget
+ *
+ * Copyright (C) 2010 Daniel P. Berrange <dan berrange com>
+ *
+ * This library 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.0 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <pulse/simple.h>
+#include <pulse/pulseaudio.h>
+
+#include "vncaudiopulse.h"
+#include "vncutil.h"
+
+#define VNC_AUDIO_PULSE_GET_PRIVATE(obj)				\
+	(G_TYPE_INSTANCE_GET_PRIVATE((obj), VNC_TYPE_AUDIO_PULSE, VncAudioPulsePrivate))
+
+struct _VncAudioPulsePrivate {
+	pa_simple *pa;
+};
+
+
+G_DEFINE_TYPE(VncAudioPulse, vnc_audio_pulse, VNC_TYPE_BASE_AUDIO);
+
+
+static gboolean vnc_audio_pulse_playback_start(VncAudio *audio,
+					       VncAudioFormat *format)
+{
+	VncAudioPulse *pulse = VNC_AUDIO_PULSE(audio);
+	VncAudioPulsePrivate *priv = pulse->priv;
+	pa_sample_spec pulse_spec;
+	pa_buffer_attr buffer_attr;
+
+	if (priv->pa)
+		return FALSE;
+
+	switch (format->format) {
+	case VNC_AUDIO_FORMAT_RAW_U8:
+		pulse_spec.format = PA_SAMPLE_U8;
+		break;
+	case VNC_AUDIO_FORMAT_RAW_S16:
+		pulse_spec.format = PA_SAMPLE_S16LE;
+		break;
+	case VNC_AUDIO_FORMAT_RAW_S32:
+		pulse_spec.format = PA_SAMPLE_S32LE;
+		break;
+
+	case VNC_AUDIO_FORMAT_RAW_S8:
+	case VNC_AUDIO_FORMAT_RAW_U16:
+	case VNC_AUDIO_FORMAT_RAW_U32:
+	default:
+		return FALSE;
+	}
+	pulse_spec.channels = format->nchannels;
+	pulse_spec.rate = format->frequency;
+
+	/* FIXME: we might want customizable latency */
+	memset(&buffer_attr, 0, sizeof(buffer_attr));
+	buffer_attr.maxlength = -1;
+	buffer_attr.tlength = pa_usec_to_bytes(100 * PA_USEC_PER_MSEC, &pulse_spec);
+	buffer_attr.prebuf = -1;
+	buffer_attr.minreq = -1;
+
+	priv->pa = pa_simple_new(NULL, "gvnc", PA_STREAM_PLAYBACK,
+				 NULL, "VNC Remote Desktop",
+				 &pulse_spec, NULL, &buffer_attr, NULL);
+	return TRUE;
+}
+
+static gboolean vnc_audio_pulse_playback_stop(VncAudio *audio)
+{
+	VncAudioPulse *pulse = VNC_AUDIO_PULSE(audio);
+	VncAudioPulsePrivate *priv = pulse->priv;
+
+	if (!priv->pa)
+		return FALSE;
+
+	pa_simple_drain(priv->pa, NULL);
+	pa_simple_free(priv->pa);
+        priv->pa = NULL;
+
+	return TRUE;
+}
+
+static gboolean vnc_audio_pulse_playback_data(VncAudio *audio,
+					      VncAudioSample *sample)
+{
+	VncAudioPulse *pulse = VNC_AUDIO_PULSE(audio);
+	VncAudioPulsePrivate *priv = pulse->priv;
+
+	if (pa_simple_write(priv->pa, sample->data, sample->length, NULL) < 0)
+		return FALSE;
+
+	return TRUE;
+}
+
+static void vnc_audio_pulse_finalize(GObject *object)
+{
+	VncAudioPulse *ab = VNC_AUDIO_PULSE(object);
+	VncAudioPulsePrivate *priv = ab->priv;
+
+	VNC_DEBUG("Finalize VncAudioPulse=%p", ab);
+
+	if (priv->pa)
+		pa_simple_free(priv->pa);
+
+	G_OBJECT_CLASS(vnc_audio_pulse_parent_class)->finalize (object);
+}
+
+
+static void vnc_audio_pulse_class_init(VncAudioPulseClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	object_class->finalize = vnc_audio_pulse_finalize;
+
+	g_type_class_add_private(klass, sizeof(VncAudioPulsePrivate));
+}
+
+
+void vnc_audio_pulse_init(VncAudioPulse *fb)
+{
+	VncAudioPulsePrivate *priv;
+
+	priv = fb->priv = VNC_AUDIO_PULSE_GET_PRIVATE(fb);
+
+	memset(priv, 0, sizeof(*priv));
+
+	g_signal_connect(G_OBJECT(fb), "vnc-audio-playback-start",
+			 G_CALLBACK(vnc_audio_pulse_playback_start), NULL);
+	g_signal_connect(G_OBJECT(fb), "vnc-audio-playback-stop",
+			 G_CALLBACK(vnc_audio_pulse_playback_stop), NULL);
+	g_signal_connect(G_OBJECT(fb), "vnc-audio-playback-data",
+			 G_CALLBACK(vnc_audio_pulse_playback_data), NULL);
+}
+
+
+VncAudioPulse *vnc_audio_pulse_new(void)
+{
+	return VNC_AUDIO_PULSE(g_object_new(VNC_TYPE_AUDIO_PULSE,
+					   NULL));
+}
+
+
+/*
+ * Local variables:
+ *  c-indent-level: 8
+ *  c-basic-offset: 8
+ *  tab-width: 8
+ * End:
+ */
diff --git a/src/vncaudiopulse.h b/src/vncaudiopulse.h
new file mode 100644
index 0000000..3543bd4
--- /dev/null
+++ b/src/vncaudiopulse.h
@@ -0,0 +1,70 @@
+/*
+ * GTK VNC Widget
+ *
+ * Copyright (C) 2010 Daniel P. Berrange <dan berrange com>
+ *
+ * This library 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.0 of the License, or (at your option) any later version.
+ *
+ * This library 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 this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#ifndef VNC_AUDIO_PULSE_H
+#define VNC_AUDIO_PULSE_H
+
+#include <glib-object.h>
+
+#include <vncbaseaudio.h>
+
+G_BEGIN_DECLS
+
+#define VNC_TYPE_AUDIO_PULSE            (vnc_audio_pulse_get_type ())
+#define VNC_AUDIO_PULSE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), VNC_TYPE_AUDIO_PULSE, VncAudioPulse))
+#define VNC_AUDIO_PULSE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), VNC_TYPE_AUDIO_PULSE, VncAudioPulseClass))
+#define VNC_IS_AUDIO_PULSE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VNC_TYPE_AUDIO_PULSE))
+#define VNC_IS_AUDIO_PULSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VNC_TYPE_AUDIO_PULSE))
+#define VNC_AUDIO_PULSE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), VNC_TYPE_AUDIO_PULSE, VncAudioPulseClass))
+
+
+typedef struct _VncAudioPulse VncAudioPulse;
+typedef struct _VncAudioPulsePrivate VncAudioPulsePrivate;
+typedef struct _VncAudioPulseClass VncAudioPulseClass;
+
+struct _VncAudioPulse
+{
+	VncBaseAudio parent;
+
+	VncAudioPulsePrivate *priv;
+};
+
+struct _VncAudioPulseClass
+{
+	VncBaseAudioClass parent_class;
+
+};
+
+
+GType vnc_audio_pulse_get_type(void) G_GNUC_CONST;
+
+VncAudioPulse *vnc_audio_pulse_new(void);
+
+G_END_DECLS
+
+#endif /* VNC_AUDIO_PULSE_H */
+
+/*
+ * Local variables:
+ *  c-indent-level: 8
+ *  c-basic-offset: 8
+ *  tab-width: 8
+ * End:
+ */
diff --git a/vapi/Makefile.am b/vapi/Makefile.am
index 780e071..f91264b 100644
--- a/vapi/Makefile.am
+++ b/vapi/Makefile.am
@@ -8,11 +8,26 @@ vapi_DATA =					\
 	gvnc-1.0.vapi				\
 	$(NULL)
 
+if HAVE_PULSEAUDIO
+vapi_DATA += \
+	gvncpulse-1.0.vapi
+endif
+
 gvnc-1.0.vapi: $(top_builddir)/src/GVnc-1.0.gir
 	$(AM_V_GEN)$(VAPIGEN)			\
 		--library gvnc-1.0		\
 		$<
 
+if HAVE_PULSEAUDIO
+gvncpulse-1.0.vapi: $(top_builddir)/src/GVncPulse-1.0.gir gvnc-1.0.vapi
+	$(AM_V_GEN)$(VAPIGEN)			\
+		--vapidir=$(builddir)				\
+		--pkg gvnc-1.0					\
+		--library gvncpulse-1.0				\
+		--girdir=$(top_builddir)/src			\
+		$<
+endif
+
 gtk-vnc-$(GTK_VNC_API_VERSION).vapi: $(top_builddir)/src/GtkVnc-$(GTK_VNC_API_VERSION).gir gvnc-1.0.vapi
 	$(AM_V_GEN)$(VAPIGEN)					\
 		--vapidir=$(builddir)				\



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]