[Libguestfs] [PATCH] gobject: Add Vala binding support

Corentin Noël corentin at elementary.io
Tue Jan 22 13:35:08 UTC 2019


Thanks for the quick review, I addressed the comments but couldn't run
`make dist` because of some issue with `libguestfs.pot` while building.
So please review it carefully (even if I followed the recommended steps
to include Vala support as written here 
https://wiki.gnome.org/Projects/Vala/UpstreamGuide#Autotools_Integration
)

Regards,
Corentin


>From 2e4414fac2b4432c566b78ca7760abd3354cc684 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Corentin=20No=C3=ABl?= <corentin.noel at collabora.com>
Date: Tue, 22 Jan 2019 13:12:57 +0100
Subject: [PATCH] gobject: Add Vala binding support

---
 .gitignore                          |   1 +
 configure.ac                        |   4 ++
 gobject/Makefile.am                 |  17 +++++
 gobject/libguestfs-gobject-1.0.deps |   2 +
 m4/vapigen.m4                       | 101 ++++++++++++++++++++++++++++
 5 files changed, 125 insertions(+)
 create mode 100644 gobject/libguestfs-gobject-1.0.deps
 create mode 100644 m4/vapigen.m4

diff --git a/.gitignore b/.gitignore
index 637bf7765..29d3e3aae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -339,6 +339,7 @@ Makefile.in
 /gobject/Guestfs-1.0.gir
 /gobject/Guestfs-1.0.typelib
 /gobject/guestfs-gobject.3
+/gobject/libguestfs-gobject-1.0.vapi
 /gobject/stamp-guestfs-gobject.pod
 /golang/bindtests.go
 /golang/examples/guestfs-golang.3
diff --git a/configure.ac b/configure.ac
index e18e099b9..dfc7a1af3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -161,6 +161,8 @@ HEADING([Checking for Go])
 m4_include([m4/guestfs-golang.m4])
 HEADING([Checking for GObject Introspection])
 m4_include([m4/guestfs-gobject.m4])
+HEADING([Checking for Vala])
+VAPIGEN_CHECK
 
 dnl virt-v2v, virt-p2v.
 HEADING([Checking the virt-v2v and virt-p2v dependencies])
@@ -421,6 +423,8 @@ AS_ECHO_N(["gobject bindings ....................
"])
 if test "x$HAVE_GOBJECT_TRUE" = "x"; then echo "yes"; else echo "no";
fi
 AS_ECHO_N(["gobject introspection ............... "])
 if test "x$HAVE_INTROSPECTION_TRUE" = "x"; then echo "yes"; else echo
"no"; fi
+AS_ECHO_N(["Vala bindings ....................... "])
+if test "x$ENABLE_VAPIGEN" = "x"; then echo "yes"; else echo "no"; fi
 AS_ECHO_N(["bash completion ..................... "])
 if test "x$HAVE_BASH_COMPLETION_TRUE" = "x"; then echo "yes"; else
echo "no"; fi
 echo
diff --git a/gobject/Makefile.am b/gobject/Makefile.am
index ddedd5b51..43f490a80 100644
--- a/gobject/Makefile.am
+++ b/gobject/Makefile.am
@@ -105,6 +105,23 @@ $(TESTS): $(typelib_DATA)
 
 CLEANFILES += $(gir_DATA) $(typelib_DATA)
 
+if ENABLE_VAPIGEN
+-include $(VAPIGEN_MAKEFILE)
+
+libguestfs-gobject-1.0.vapi: Guestfs-1.0.gir libguestfs-gobject-
1.0.deps
+
+VAPIGEN_VAPIS = libguestfs-gobject-1.0.vapi
+
+libguestfs_gobject_1_0_vapi_DEPS = gobject-2.0 gio-2.0
+libguestfs_gobject_1_0_vapi_METADATADIRS = $(srcdir)
+libguestfs_gobject_1_0_vapi_FILES = Guestfs-1.0.gir
+
+vapidir = $(datadir)/vala/vapi
+vapi_DATA = $(VAPIGEN_VAPIS) $(VAPIGEN_VAPIS:.vapi=.deps)
+
+EXTRA_DIST += libguestfs-gobject-1.0.deps
+endif
+
 endif HAVE_INTROSPECTION
 
 # Documentation.
diff --git a/gobject/libguestfs-gobject-1.0.deps b/gobject/libguestfs-
gobject-1.0.deps
new file mode 100644
index 000000000..d4db05933
--- /dev/null
+++ b/gobject/libguestfs-gobject-1.0.deps
@@ -0,0 +1,2 @@
+gobject-2.0
+gio-2.0
diff --git a/m4/vapigen.m4 b/m4/vapigen.m4
new file mode 100644
index 000000000..2c435e74b
--- /dev/null
+++ b/m4/vapigen.m4
@@ -0,0 +1,101 @@
+dnl vapigen.m4
+dnl
+dnl Copyright 2012 Evan Nemerson
+dnl
+dnl This library is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Lesser General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2.1 of the License, or (at your option) any later version.
+dnl
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+dnl Lesser General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU Lesser General Public
+dnl License along with this library; if not, write to the Free
Software
+dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301  USA
+
+# VAPIGEN_CHECK([VERSION], [API_VERSION], [FOUND_INTROSPECTION],
[DEFAULT])
+# --------------------------------------
+# Check vapigen existence and version
+#
+# See http://live.gnome.org/Vala/UpstreamGuide for detailed
documentation
+AC_DEFUN([VAPIGEN_CHECK],
+[
+  AS_IF([test "x$3" != "xyes"], [
+      m4_provide_if([GOBJECT_INTROSPECTION_CHECK], [], [
+          m4_provide_if([GOBJECT_INTROSPECTION_REQUIRE], [], [
+              AC_MSG_ERROR([[You must call GOBJECT_INTROSPECTION_CHECK
or GOBJECT_INTROSPECTION_REQUIRE before using VAPIGEN_CHECK unless
using the FOUND_INTROSPECTION argument is "yes"]])
+            ])
+        ])
+    ])
+
+  AC_ARG_ENABLE([vala],
+    [AS_HELP_STRING([--enable-vala[=@<:@no/auto/yes@:>@]],[build Vala
bindings @<:@default=]ifelse($4,,auto,$4)[@:>@])],,[
+      AS_IF([test "x$4" = "x"], [
+          enable_vala=auto
+        ], [
+          enable_vala=$4
+        ])
+    ])
+
+  AS_CASE([$enable_vala], [no], [enable_vala=no],
+      [yes], [
+        AS_IF([test "x$3" != "xyes" -a "x$found_introspection" !=
"xyes"], [
+            AC_MSG_ERROR([Vala bindings require GObject
Introspection])
+          ])
+      ], [auto], [
+        AS_IF([test "x$3" != "xyes" -a "x$found_introspection" !=
"xyes"], [
+            enable_vala=no
+          ])
+      ], [
+        AC_MSG_ERROR([Invalid argument passed to --enable-vala, should
be one of @<:@no/auto/yes@:>@])
+      ])
+
+  AS_IF([test "x$2" = "x"], [
+      vapigen_pkg_name=vapigen
+    ], [
+      vapigen_pkg_name=vapigen-$2
+    ])
+  AS_IF([test "x$1" = "x"], [
+      vapigen_pkg="$vapigen_pkg_name"
+    ], [
+      vapigen_pkg="$vapigen_pkg_name >= $1"
+    ])
+
+  PKG_PROG_PKG_CONFIG
+
+  PKG_CHECK_EXISTS([$vapigen_pkg], [
+      AS_IF([test "$enable_vala" = "auto"], [
+          enable_vala=yes
+        ])
+    ], [
+      AS_CASE([$enable_vala], [yes], [
+          AC_MSG_ERROR([$vapigen_pkg not found])
+        ], [auto], [
+          enable_vala=no
+        ])
+    ])
+
+  AC_MSG_CHECKING([for vapigen])
+
+  AS_CASE([$enable_vala],
+    [yes], [
+      VAPIGEN=`$PKG_CONFIG --variable=vapigen $vapigen_pkg_name`
+      VAPIGEN_MAKEFILE=`$PKG_CONFIG --variable=datadir
$vapigen_pkg_name`/vala/Makefile.vapigen
+      AS_IF([test "x$2" = "x"], [
+          VAPIGEN_VAPIDIR=`$PKG_CONFIG --variable=vapidir
$vapigen_pkg_name`
+        ], [
+          VAPIGEN_VAPIDIR=`$PKG_CONFIG --variable=vapidir_versioned
$vapigen_pkg_name`
+        ])
+    ])
+
+  AC_MSG_RESULT([$enable_vala])
+
+  AC_SUBST([VAPIGEN])
+  AC_SUBST([VAPIGEN_VAPIDIR])
+  AC_SUBST([VAPIGEN_MAKEFILE])
+
+  AM_CONDITIONAL(ENABLE_VAPIGEN, test "x$enable_vala" = "xyes")
+])
-- 
2.17.1


Le mardi 22 janvier 2019 à 13:09 +0000, Richard W.M. Jones a écrit :
> On Tue, Jan 22, 2019 at 01:05:41PM +0000, Richard W.M. Jones wrote:
> > From 610c8206ecd991be372650c2914bbffd9af057fb Mon Sep 17 00:00:00
> > 2001
> > From: =?UTF-8?q?Corentin=20No=C3=ABl?= <corentin.noel at collabora.com
> > >
> > Date: Tue, 22 Jan 2019 13:12:57 +0100
> > Subject: [PATCH] gobject: Add Vala binding support
> > 
> > ---
> >  .gitignore                          |   1 +
> >  configure.ac                        |   4 ++
> >  gobject/Makefile.am                 |  17 +++++
> >  gobject/libguestfs-gobject-1.0.deps |   2 +
> >  m4/vapigen.m4                       | 101
> > ++++++++++++++++++++++++++++
> 
> So generally speaking the patch is good.  I have a few comments inlne
> ...
> 
> >  5 files changed, 125 insertions(+)
> >  create mode 100644 gobject/libguestfs-gobject-1.0.deps
> >  create mode 100644 m4/vapigen.m4
> > 
> > diff --git a/.gitignore b/.gitignore
> > index 637bf7765..afe1c0654 100644
> > --- a/.gitignore
> > +++ b/.gitignore
> > @@ -340,6 +340,7 @@ Makefile.in
> >  /gobject/Guestfs-1.0.typelib
> >  /gobject/guestfs-gobject.3
> >  /gobject/stamp-guestfs-gobject.pod
> > +/gobject/libguestfs-gobject-1.0.vapi
> 
> If you could keep the entries in .gitignore sorted.
> 
> >  /golang/bindtests.go
> >  /golang/examples/guestfs-golang.3
> >  /golang/examples/stamp-guestfs-golang.pod
> > diff --git a/configure.ac b/configure.ac
> > index e18e099b9..dfc7a1af3 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -161,6 +161,8 @@ HEADING([Checking for Go])
> >  m4_include([m4/guestfs-golang.m4])
> >  HEADING([Checking for GObject Introspection])
> >  m4_include([m4/guestfs-gobject.m4])
> > +HEADING([Checking for Vala])
> > +VAPIGEN_CHECK
> >  
> >  dnl virt-v2v, virt-p2v.
> >  HEADING([Checking the virt-v2v and virt-p2v dependencies])
> > @@ -421,6 +423,8 @@ AS_ECHO_N(["gobject bindings
> > .................... "])
> >  if test "x$HAVE_GOBJECT_TRUE" = "x"; then echo "yes"; else echo
> > "no"; fi
> >  AS_ECHO_N(["gobject introspection ............... "])
> >  if test "x$HAVE_INTROSPECTION_TRUE" = "x"; then echo "yes"; else
> > echo "no"; fi
> > +AS_ECHO_N(["Vala bindings ....................... "])
> > +if test "x$ENABLE_VAPIGEN" = "x"; then echo "yes"; else echo "no";
> > fi
> >  AS_ECHO_N(["bash completion ..................... "])
> >  if test "x$HAVE_BASH_COMPLETION_TRUE" = "x"; then echo "yes"; else
> > echo "no"; fi
> >  echo
> > diff --git a/gobject/Makefile.am b/gobject/Makefile.am
> > index ddedd5b51..302d54354 100644
> > --- a/gobject/Makefile.am
> > +++ b/gobject/Makefile.am
> > @@ -105,6 +105,23 @@ $(TESTS): $(typelib_DATA)
> >  
> >  CLEANFILES += $(gir_DATA) $(typelib_DATA)
> >  
> > +if ENABLE_VAPIGEN
> > +-include $(VAPIGEN_MAKEFILE)
> > +
> > +libguestfs-gobject-1.0.vapi: Guestfs-1.0.gir libguestfs-gobject-
> > 1.0.deps
> > +
> > +VAPIGEN_VAPIS = libguestfs-gobject-1.0.vapi
> > +
> > +libguestfs_gobject_1_0_vapi_DEPS = gobject-2.0 gio-2.0
> > +libguestfs_gobject_1_0_vapi_METADATADIRS = $(srcdir)
> > +libguestfs_gobject_1_0_vapi_FILES = Guestfs-1.0.gir
> > +
> > +vapidir = $(datadir)/vala/vapi
> > +vapi_DATA = $(VAPIGEN_VAPIS) $(VAPIGEN_VAPIS:.vapi=.deps)
> > +
> > +EXTRA_DIST += foo-1.0.deps
> 
> Is 'foo' right here?
> 
> Also should EXTRA_DIST be outside the 'if ENABLE_VAPIGEN' condition?
> 
> You can try doing:
> 
>   make dist && make maintainer-check-extra-dist
> 
> to see if you're included all the right EXTRA_DIST files.
> 
> Rich.
> 




More information about the Libguestfs mailing list