On Fri, Jan 20, 2012 at 11:07:45AM +0000, Matthew Booth wrote:
---
.gitignore | 4 +
Makefile.am | 3 +
configure.ac | 37 ++
generator/Makefile.am | 1 +
generator/generator_gobject.ml | 878 ++++++++++++++++++++++++++++++++++++++++
generator/generator_main.ml | 3 +
gobject/Makefile.am | 41 ++
m4/introspection.m4 | 94 +++++
po/POTFILES.in | 1 +
9 files changed, 1062 insertions(+), 0 deletions(-)
create mode 100644 generator/generator_gobject.ml
create mode 100644 gobject/Makefile.am
create mode 100644 m4/introspection.m4
diff --git a/.gitignore b/.gitignore
index 36411aa..b970108 100644
--- a/.gitignore
+++ b/.gitignore
@@ -120,6 +120,10 @@ generator/stamp-generator
.git-module-status
/gnulib
/GNUmakefile
+gobject/Guestfs-1.0.gir
+gobject/Guestfs-1.0.typelib
+gobject/guestfs-gobject.c
+gobject/guestfs-gobject.h
.guestfs-*
guestfs.*
guestfsd-in-wine.log
diff --git a/Makefile.am b/Makefile.am
index f925529..839379a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -79,6 +79,9 @@ endif
if HAVE_ERLANG
SUBDIRS += erlang erlang/examples
endif
+if HAVE_GOBJECT
+SUBDIRS += gobject
+endif
# Unconditional because nothing is built yet.
SUBDIRS += csharp
diff --git a/configure.ac b/configure.ac
index ce0f6e8..2ca0c47 100644
--- a/configure.ac
+++ b/configure.ac
@@ -996,6 +996,38 @@ AS_IF([test "x$PERL" != "xno"],
AM_CONDITIONAL([HAVE_TOOLS],
[test "x$PERL" != "xno" && test
"x$missing_perl_modules" != "xyes"])
+dnl gobject library
+AC_ARG_ENABLE([gobject],
+ AS_HELP_STRING([--disable-gobject], [Disable GObject bindings]),
+ [],
+ [enable_gobject=yes])
+AS_IF(
+ [test "x$enable_gobject" != "xno"],
+ [
+ PKG_CHECK_MODULES([GOBJECT], [gobject-2.0],
+ [
+ AC_SUBST([GOBJECT_CFLAGS])
+ AC_SUBST([GOBJECT_LIBS])
+ AC_DEFINE([HAVE_GOBJECT],[1],
+ [gobject library found at compile time.])
+ ],
+ [AC_MSG_WARN([gobject library not found, gobject binding will be disabled])]
+ )
+ ]
+)
+AM_CONDITIONAL([HAVE_GOBJECT],[test "x$GOBJECT_LIBS" != "x"])
+
+dnl gobject introspection
+GOBJECT_INTROSPECTION_CHECK([1.30.0])
./autogen.sh gives me the following hard error:
./configure: line 51409: syntax error near unexpected token `1.30.0'
./configure: line 51409: `GOBJECT_INTROSPECTION_CHECK(1.30.0)'
I had to comment out this line in order to continue with my tests.
+dnl The above check automatically sets HAVE_INTROSPECTION, but we
want this to
+dnl be conditional on gobject also being available. We can't move the above
+dnl check inside the gobject if block above or HAVE_INTROSPECTION ends up
+dnl undefined, so we recheck it here.
+AM_CONDITIONAL([HAVE_INTROSPECTION],
+ [test "x$HAVE_INTROSPECTION_TRUE" = "x" &&
+ test "x$HAVE_GOBJECT_TRUE" = "x"])
Is it not possible to put AM_CONDITIONAL([HAVE_INTROSPECTION],[false])
in the else-clause of the conditional? I know that automake
conditionals are a hack though so this might not work ...
Unless 'gjs' is a dependency of GObject (everywhere, including on
Debian etc), we need to check inside the conditional that gjs is
installed, because it is used in the tests.
diff --git a/generator/generator_gobject.ml
b/generator/generator_gobject.ml
new file mode 100644
index 0000000..b01cdb3
--- /dev/null
+++ b/generator/generator_gobject.ml
@@ -0,0 +1,878 @@
+(* libguestfs
+ * Copyright (C) 2012 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *)
+
+(* Please read generator/README first. *)
+
+open Str
+
+open Generator_actions
+open Generator_docstrings
+open Generator_pr
+open Generator_structs
+open Generator_types
+open Generator_utils
+
+let rec camel_of_name flags name =
+ "Guestfs" ^
+ try
+ find_map (function CamelName n -> Some n | _ -> None) flags
+ with Not_found ->
+ List.fold_left (
+ fun a b ->
+ a ^ String.uppercase (Str.first_chars b 1) ^ Str.string_after b 1
+ ) "" (Str.split (regexp "_") name)
This function isn't recursive, so you can just use 'let' here. (I
know that the whole file is one large 'let rec ... and' but that's not
good style).
+and returns_error (ret:Generator_types.ret) = match ret with
+ | RConstOptString _ -> false
+ | _ -> true
You can write this as:
let returns_error = function
| RConstOptString _ -> false
| _ -> true
There shouldn't be any need for a type annotation, but if there was,
since Generator_types is 'open', you could have written (ret : ret).
diff --git a/gobject/Makefile.am b/gobject/Makefile.am
new file mode 100644
index 0000000..6543ca8
--- /dev/null
+++ b/gobject/Makefile.am
@@ -0,0 +1,41 @@
This Makefile.am (and every file) needs a copyright header. See
*/Makefile.am for an example to copy.
diff --git a/m4/introspection.m4 b/m4/introspection.m4
new file mode 100644
index 0000000..bfc52be
--- /dev/null
+++ b/m4/introspection.m4
I'm guessing this bit is supposed to define GOBJECT_INTROSPECTION_CHECK
but for some reason it didn't work for me ...
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
virt-top is 'top' for virtual machines. Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://et.redhat.com/~rjones/virt-top