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 _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://www.redhat.com/mailman/listinfo/libguestfs