Hi,

Vala uses the name of the *.vapi file to determine the libraries to link
against. Since the pa_glib_mainloop_*() functions are in a separate
library (libpulse-mainloop-glib.so) the corresponding objects in the
Vala bindings have to be in a separate *.vapi file.

Otherwise using PA's GLib main loop with Vala fails with linker errors:

        $ cat test.vala
        class Foo : Object {
                PulseAudio.GLibMainLoop loop;
                static void main(){
                }
        }
        $ valac --vapidir=old/vala/ --pkg=libpulse test.vala 
        test.vala:2.2-2.29: warning: field `Foo.loop' never used
                PulseAudio.GLibMainLoop loop;
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        /tmp/cc61gzd9.o: In function `foo_finalize':
        test.vala.c:(.text+0x160): undefined reference to 
`pa_glib_mainloop_free'
        collect2: ld returned 1 exit status
        error: cc exited with status 256
        Compilation failed: 1 error(s), 1 warning(s)
        $ 

A workaround would be:

        $ valac --vapidir=old/vala/ --pkg=libpulse -Xcc 
-L/usr/lib/libpulse-mainloop-glib.so test.vala 
        test.vala:2.2-2.29: warning: field `Foo.loop' never used
                PulseAudio.GLibMainLoop loop;
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        Compilation succeeded - 1 warning(s)
        $ 

The attached patch fixes the issue for me:

        $ valac --vapidir=new/vala/ --pkg=libpulse --pkg=libpulse-mainloop-glib 
test.vala
        test.vala:2.2-2.29: warning: field `Foo.loop' never used
                PulseAudio.GLibMainLoop loop;
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        Compilation succeeded - 1 warning(s)
        $ 

If you don't have any objections, please merge this patch into master.

Best regards

Alexander Kurtz
diff -Naur old/Makefile.am new/Makefile.am
--- old/Makefile.am	2011-03-25 10:14:45.000000000 +0100
+++ new/Makefile.am	2011-03-25 11:53:22.453308533 +0100
@@ -29,6 +29,8 @@
 	README \
 	todo \
 	vala/libpulse.deps \
+	vala/libpulse-mainloop-glib.deps \
+	vala/libpulse-mainloop-glib.vapi \
 	vala/libpulse.vapi
 
 SUBDIRS = src doxygen man po
@@ -37,7 +39,7 @@
 noinst_DATA =
 
 vapidir = $(datadir)/vala/vapi
-vapi_DATA = vala/libpulse.deps vala/libpulse.vapi
+vapi_DATA = vala/libpulse.deps libpulse-mainloop-glib.deps libpulse-mainloop-glib.vapi vala/libpulse.vapi
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libpulse.pc libpulse-simple.pc
diff -Naur old/vala/libpulse-mainloop-glib.deps new/vala/libpulse-mainloop-glib.deps
--- old/vala/libpulse-mainloop-glib.deps	1970-01-01 01:00:00.000000000 +0100
+++ new/vala/libpulse-mainloop-glib.deps	2011-03-23 17:40:09.000000000 +0100
@@ -0,0 +1 @@
+libpulse
diff -Naur old/vala/libpulse-mainloop-glib.vapi new/vala/libpulse-mainloop-glib.vapi
--- old/vala/libpulse-mainloop-glib.vapi	1970-01-01 01:00:00.000000000 +0100
+++ new/vala/libpulse-mainloop-glib.vapi	2011-03-25 11:53:14.368539085 +0100
@@ -0,0 +1,13 @@
+using GLib;
+
+namespace PulseAudio {
+        [Compact]
+        [CCode (cheader_filename="pulse/glib-mainloop.h", cname="pa_glib_mainloop", cprefix="pa_glib_mainloop_", free_function="pa_glib_mainloop_free")]
+        public class GLibMainLoop {
+
+                [CCode (cname="pa_glib_mainloop_new")]
+                public GLibMainLoop(MainContext? c = null);
+
+                public unowned MainLoopApi get_api();
+        }
+}
diff -Naur old/vala/libpulse.vapi new/vala/libpulse.vapi
--- old/vala/libpulse.vapi	2011-03-25 10:14:45.000000000 +0100
+++ new/vala/libpulse.vapi	2011-03-25 11:09:02.033522130 +0100
@@ -879,16 +879,6 @@
         }
 
         [Compact]
-        [CCode (cheader_filename="pulse/glib-mainloop.h", cname="pa_glib_mainloop", cprefix="pa_glib_mainloop_", free_function="pa_glib_mainloop_free")]
-        public class GLibMainLoop {
-
-                [CCode (cname="pa_glib_mainloop_new")]
-                public GLibMainLoop(MainContext? c = null);
-
-                public unowned MainLoopApi get_api();
-        }
-
-        [Compact]
         [CCode (cname="pa_operation", cprefix="pa_operation_", unref_function="pa_operation_unref", ref_function="pa_operation_ref")]
         public class Operation {
 

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss

Reply via email to