]> git.draconx.ca Git - gob-dx.git/commitdiff
Release 1.99.2 v1.99.2
authorGeorge Lebl <jirka@5z.com>
Sat, 2 Feb 2002 08:11:00 +0000 (00:11 -0800)
committerNick Bowler <nbowler@draconx.ca>
Tue, 19 Feb 2019 17:33:02 +0000 (12:33 -0500)
25 files changed:
ChangeLog
Makefile.in
NEWS
aclocal.m4
configure
configure.in
doc/Makefile.in
examples/Makefile.in
examples/foo-some-interface.gob
gob2.m4
gob2.spec
missing
src/Makefile.am
src/Makefile.in
src/lexer.c
src/lexer.l
src/main.c
src/parse.c
src/parse.h
src/parse.y
src/test.gob
src/treefuncs.c
src/treefuncs.def
src/treefuncs.h
stamp-h.in

index 99e9511bd9546f03ba55f2eea9f46a55287f2a40..fbb99bf039f33c92c19907f59e2c792b9003bd8e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,109 @@
+Fri Feb 01 15:19:07 2002  George Lebl <jirka@5z.com>
+
+       * Release 1.99.2
+
+Fri Feb 01 01:42:09 2002  George Lebl <jirka@5z.com>
+
+       * src/main.c: get rid of the old way of doing typesafe signal
+         connection and make a new way where there are full connect
+         macros for connect, connect_after and connect_data for each
+         signal.  A bit more heavy weight (only at compile time), but
+         it actually works, and is cleaner really.
+
+2002-01-22  Bastien Nocera  <hadess@hadess.net>
+
+       * src/main.c: (make_arguments): move the get_ and set_property before
+       parameters settings to work with latest glib
+
+Fri Jan 18 14:21:22 2002  George Lebl <jirka@5z.com>
+
+       * src/treefuncs.(def|c|h), src/parse.y, src/lexer.l, src/main.c:
+         Implement GError definitions.
+
+Thu Jan 17 02:39:02 2002  George Lebl <jirka@5z.com>
+
+       * gob2.m4: fix version check
+
+       * configure.in, src/Makefile.am: some build fixes and raise version
+
+Thu Jan 10 22:05:42 2002  George Lebl <jirka@5z.com>
+
+       * src/parser.y, src/lexer.l, src/main.c, src/Makefile.am,
+         src/test.gob, src/treefuncs.(def|c|h):  Implement using of
+         interfaces.  That is, you can now implement interfaces on your
+         objects.  You still can't define interfaces, that's step two.
+
+Sun Dec 30 18:25:25 2001  George Lebl <jirka@5z.com>
+
+       * src/main.c: Apply patch from Josh Parsons <jp30@st-andrews.ac.uk>,
+         to fix some code generation
+
+       * src/parse.y: Be anal in linking string properties.
+
+Thu Dec 20 17:39:32 2001  George Lebl <jirka@5z.com>
+
+       * src/main.c: Apply patch from Josh Parsons <jp30@st-andrews.ac.uk>
+         to enhance the m4 support, fix init function generation and
+         correctly include glib-object.h.  Massage it a bit further as
+         well.
+
+Mon Nov 05 11:45:46 2001  George Lebl <jirka@5z.com>
+
+       * src/lexer.l, src/parser.y, src/main.c, src/treefuncs.def:
+         Add flags and enum creation code, so you can do things in
+         a more gob like manner rather then the glib-mkenums setup.
+
+2001-10-27  Seth Nickell  <snickell@stanford.edu>
+
+       Make BonoboObject stuff work, almost as much fun as
+       blowing goats and twice as messy. Built code still
+       requires a patch to libbonobo to run (changing the
+       name of the TYPE macro to fit w/ GNOME standards),
+       so retaining a warning that BonoboObject doesn't
+       really work (oh, but it does :-)
+
+       * configure.in:
+
+       Make sure to substitute YFLAGS so you don't get undefined
+       crap when you use @YFLAGS@ in Makefile.am.
+       
+       * src/main.c: (add_bonobo_object_get_type)
+
+       Add a GObject type function for BonoboObject stuff.
+       
+       * src/main.c: (make_bonobo_object_epv)
+
+       Append self_ to function call as per gob2.
+       
+       * src/main.c: (add_inits), (print_class_block)
+       * src/parse.y:
+       * src/treefuncs.c: (ensure_quarks), (copy_class), (copy_method),
+       (free_class), (setv_class), (setv_method):
+       * src/treefuncs.def:
+       * src/treefuncs.h:
+
+       Change to using BonoboObject rather than BonoboXObject.
+
+       * examples/foo-some-interface.c
+
+       Update to work with GOB2 with BonoboObjectTechnology(TM).
+       
+2001-10-26  Seth Nickell  <snickell@stanford.edu>
+
+       * src/Makefile.am:
+
+       Add top_srcdir to the include flags to pick up config.h
+       on my system.
+
+Sat Oct 20 17:40:58 2001  George Lebl <jirka@5z.com>
+
+       * src/Makefile.am: a few fixes
+
+Sat Oct 20 16:59:19 2001  George Lebl <jirka@5z.com>
+
+       * src/lexer.l, src/main.c, src/Makefile.am: Apply m4 preprocessing
+         patch by Josh Parsons <jp30@st-andrews.ac.uk>
+
 Sat Sep 29 17:00:39 2001  George Lebl <jirka@5z.com>
 
        * doc/Makefile.am: update
index 7385530df0ac0f247fe3ae274b86ec96c9452f74..3bbea2854a7d53b805fbdf038f83a79671a40e8c 100644 (file)
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -63,10 +63,7 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 DOINSTGOB = @DOINSTGOB@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
 LDFLAGS = @LDFLAGS@
 LEX = @LEX@
 MAINT = @MAINT@
@@ -79,6 +76,7 @@ RM = @RM@
 TAR = @TAR@
 VERSION = @VERSION@
 YACC = @YACC@
+YFLAGS = @YFLAGS@
 
 SUBDIRS = @SUBDIRS@
 DIST_SUBDIRS = src doc examples
@@ -113,7 +111,7 @@ Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in 
        cd $(srcdir) && $(ACLOCAL)
 
-config.status: $(srcdir)/configure.in $(CONFIG_STATUS_DEPENDENCIES)
+config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        $(SHELL) ./config.status --recheck
 $(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
        cd $(srcdir) && $(AUTOCONF)
@@ -203,7 +201,7 @@ maintainer-clean-recursive:
        dot_seen=no; \
        rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
          rev="$$subdir $$rev"; \
-         test "$$subdir" = "." && dot_seen=yes; \
+         test "$$subdir" != "." || dot_seen=yes; \
        done; \
        test "$$dot_seen" = "no" && rev=". $$rev"; \
        target=`echo $@ | sed s/-recursive//`; \
diff --git a/NEWS b/NEWS
index 045c60fcbe336ce399ce484ef109c178d6a15fc8..bfd0075e2e1ddb19a46dafc4af1e2bd6e6045e26 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,182 +1,8 @@
-1.0.7
-       * allow overriding of get_type (allows BonoboXObject)
-
-1.0.6
-       * works with new gcc better
-       * signal connection typesafety macros
-
-1.0.5
-       * gob.m4 defaults to WARN (Eskil)
-       * fix argumentless methods
-       * cleanup
-       * _get_type function is now G_GNUC_CONST
-
-1.0.4
-       * Fix segfault in finalize
-       * Minor fixes and improvements
-
-       NOTE: Everyone should update due to the segfault fix!
-
-1.0.3
-       * Add "const self", and a _CONST cast macro (Bas van der Linden)
-       * Objects should compile with Glib/GTK+ 1.3 (to become 2.0)
-       * Parent handler is properly called for destroy and finalize
-       * Fixes in documentation and examples
-
-1.0.2
-       * Fix "const" handeling
-       * Allow use of chunks for new object allocation (Bas van der Linden)
-       * Add __GOB_FUNCTION__ define for each function (Bas van der Linden)
-       * Add --always-private-struct option
-       * stringlink strdups on get
-       * Minor fixes
-
-       NOTE: if you are using stringlink, you might notice a memory leak
-       since from 1.0.2 stringlink strdups the string instead of just
-       returning it
-
-1.0.1
-       * documentation fixes
-       * fix the behaviour of the private header switches
-
-1.0.0
-       * accept an identifier such as a constant in array dimensions
-       * updated manpage with build instructions
-
-0.93.5
-       * destructors run after destroy, not before finalize, 
-       * zero out data after destruction
-       * added Self typedef to complement the SELF macros
-       * initial underscore removal from full names, to help to avoid
-         name conflicts
-       
-0.93.4
-       * classwide (global) datamembers
-       * private header file always generated by default
-
-0.93.3
-       * fix signals with return values but no arguments
-       * more input file checking
-
-0.93.2
-       * defreturn for default return values on signals/virtuals
-       * code reorganisation
-
-0.93.1
-       * accept 1 word types
-       * gob.m4 improvements (Eskil)
-       * minor fixes, and improvements
-
-0.93.0
-       * data member initialization
-       * pointer data member destruction
-       * automatic argument to data member linking for simple cases
-       * other minor fixes/improvements
-
-0.92.4
-       * -n flag (Dave Dunkin)
-       * all and alltop code sections (Dave Dunkin)
-       * GTK_RUN_ flags for signals
-       * self casting macros
-       * other small fixes
-       
-0.92.3
-       * inline documentation support
-       * standard m4 autoconf macro (thanks to Eskil Heyn Olsen)
-       * cleanups
-
-0.92.2
-       * more header code sections
-       * some code restructuring
-       * always extern "C" the header (unless --no-extern-c is used)
-       * object typedef protecting define for avoiding circular includes
-
-0.92.1
-       * typesafe macros for argument setting/getting
-       * generated code will take advantage of GNU C extentions if compiled
-         under GNU C
-       * move _priv structure freeing into finalize
-       * more gob file compilation checks
-       * other improvements and fixes
-
-       NOTE: The generated files with this version will be larger because
-       of some more preprocessor magic that is done to make the thing saner,
-       and faster.  Don't worry about it as the resulting object file should
-       not get larger.
-
-0.92.0
-       * added protected methods and datamembers.
-       * better handeling of empty methods
-       * allow scope keywords before the virutal or signal keyword
-       * merge signal marshallers that are the same to reduce code size
-       * various small fixes and improvements
-
-0.91.2
-       * PARENT_HANDLER can now return a value for non-void overrides
-       * allow empty classes and empty function bodies
-       * allow public keyword around signals and virtuals for consistency
-       * small bugfixes
-
-0.91.1
-       * WARNING! slight change in the private stuff again, private
-         structure definition (_priv) is now in a private header file,
-         which you must include explicitly if you include the public
-         header file explicitly in your .gob file.  0.91.0 behaviour
-         is obtainable with the --no-private-header option
-       * added support for array data members and function arguments
-
-0.91.0
-       * WARNING! change the way private data members are done, now you need
-         to access them through a private structure only available in the
-         C file, object->member becomes object->_priv->member
-       * add support for placing the object header anywhere in the C file
-       * bunch of further sanity checks added
-       * add some simple examples
-
-0.90.5
-       * added PARENT_HANDLER macro for overrides
-       * added _TYPE_ macro for _get_type method
-       * warn if signal parameter lists seem mismatched
-
-0.90.4
-       * fix buggy class structure generation
-       * can generate C++ friendly code
-       * function aliases are now done by static pointers rather then defines
-       * more...
-
-0.90.3
-       * does not require popt
-       * don't kill comments from C code blocks
-       * support for being "embedded" inside other projects to avoid
-         dependencies (look at README)
-       * a bunch of fixes
-
-0.90.2
-       * add support for private signals and virtuals
-       * fix bug with varargs
-
-0.90.1
-       * accept 'const' in argument lists
-       * accept '...' in public and private method argument lists
-
-0.90.0
-       * changed "this" to "self" but recognize "this" as well
-       * warn if "new" is not public
-       * check symbols/arguments/signals for duplicates
-
-0.0.4
-       * you can have tokens inside check statements
-       * avoid warnings when no overrides, signals and arguments
-
-0.0.3
-       * "type", "check", "first", "last" and "null" no longer reserved
-         words in method prototypes
-       * GET_NEW defined for the entire file
-       * added #line's to the .c files so that errors get reported on the
-         .gob file, there are no #line's in .h file however!
-       * bug fixes
-
-0.0.2
-       * bug fixes
-       * autoconf/automake setup
-       * man page
+1.99.2:
+       * allow implementation (but not definition yet) of interfaces
+       * enum, flags and GError creation code
+       * BonoboObject stuff (Seth)
+       * build fixes (me, Seth)
+       * m4 preprocessing stuff (Josh Parsons)
+       * Code generation fixes (Josh Parsons, Bastien Nocera, me)
+       * New way of doing typesafe signal connections
index 05af4e49417214de7671fde770d6c0c58ef73d10..f7f73efd1ebab1cb385d903cd8b8692334a74d4d 100644 (file)
@@ -1,6 +1,6 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4-p4
+dnl aclocal.m4 generated automatically by aclocal 1.4-p5
 
-dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -12,7 +12,7 @@ dnl PARTICULAR PURPOSE.
 
 # Like AC_CONFIG_HEADER, but automatically create stamp file.
 
-AC_DEFUN(AM_CONFIG_HEADER,
+AC_DEFUN([AM_CONFIG_HEADER],
 [AC_PREREQ([2.12])
 AC_CONFIG_HEADER([$1])
 dnl When config.status generates a header, we must update the stamp-h file.
@@ -42,7 +42,7 @@ changequote([,]))])
 dnl Usage:
 dnl AM_INIT_AUTOMAKE(package,version, [no-define])
 
-AC_DEFUN(AM_INIT_AUTOMAKE,
+AC_DEFUN([AM_INIT_AUTOMAKE],
 [AC_REQUIRE([AC_PROG_INSTALL])
 PACKAGE=[$1]
 AC_SUBST(PACKAGE)
@@ -70,7 +70,7 @@ AC_REQUIRE([AC_PROG_MAKE_SET])])
 # Check to make sure that the build environment is sane.
 #
 
-AC_DEFUN(AM_SANITY_CHECK,
+AC_DEFUN([AM_SANITY_CHECK],
 [AC_MSG_CHECKING([whether build environment is sane])
 # Just in case
 sleep 1
@@ -111,7 +111,7 @@ AC_MSG_RESULT(yes)])
 
 dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
 dnl The program must properly implement --version.
-AC_DEFUN(AM_MISSING_PROG,
+AC_DEFUN([AM_MISSING_PROG],
 [AC_MSG_CHECKING(for working $2)
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
@@ -125,230 +125,12 @@ else
 fi
 AC_SUBST($1)])
 
-
-dnl AM_PROG_LEX
-dnl Look for flex, lex or missing, then run AC_PROG_LEX and AC_DECL_YYTEXT
-AC_DEFUN(AM_PROG_LEX,
-[missing_dir=ifelse([$1],,`cd $ac_aux_dir && pwd`,$1)
-AC_CHECK_PROGS(LEX, flex lex, "$missing_dir/missing flex")
-AC_PROG_LEX
-AC_DECL_YYTEXT])
-
-# Configure paths for GLIB
-# Owen Taylor     1997-2001
-
-dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
-dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject or 
-dnl gthread is specified in MODULES, pass to pkg-config
-dnl
-AC_DEFUN(AM_PATH_GLIB_2_0,
-[dnl 
-dnl Get the cflags and libraries from pkg-config
-dnl
-AC_ARG_ENABLE(glibtest, [  --disable-glibtest       Do not try to compile and run a test GLIB program],
-                   , enable_glibtest=yes)
-
-  pkg_config_args=glib-2.0
-  for module in . $4
-  do
-      case "$module" in
-         gmodule) 
-             pkg_config_args="$pkg_config_args gmodule-2.0"
-         ;;
-         gobject) 
-             pkg_config_args="$pkg_config_args gobject-2.0"
-         ;;
-         gthread) 
-             pkg_config_args="$pkg_config_args gthread-2.0"
-         ;;
-      esac
-  done
-
-  AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-
-  no_glib=""
-
-  if test x$PKG_CONFIG != xno ; then
-    if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
-      :
-    else
-      echo *** pkg-config too old; version 0.7 or better required.
-      no_glib=yes
-      PKG_CONFIG=no
-    fi
-  fi
-
-  ## don't try to run the test against uninstalled libtool libs
-  if $PKG_CONFIG --uninstalled $pkg_config_args; then
-        echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
-        enable_glibtest=no
-  fi
-
-  min_glib_version=ifelse([$1], ,1.3.3,$1)
-  AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
-
-  if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
-        :
-  else
-        no_glib = yes
-  fi
-
-  if test x"$no_glib" = x ; then
-    GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
-    GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
-    GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
-
-    GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
-    GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
-    glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
-           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-    glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
-           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-    glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
-           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
-    if test "x$enable_glibtest" = "xyes" ; then
-      ac_save_CFLAGS="$CFLAGS"
-      ac_save_LIBS="$LIBS"
-      CFLAGS="$CFLAGS $GLIB_CFLAGS"
-      LIBS="$GLIB_LIBS $LIBS"
-dnl
-dnl Now check if the installed GLIB is sufficiently new. (Also sanity
-dnl checks the results of pkg-config to some extent)
-dnl
-      rm -f conf.glibtest
-      AC_TRY_RUN([
-#include <glib.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-int 
-main ()
-{
-  int major, minor, micro;
-  char *tmp_version;
-
-  system ("touch conf.glibtest");
-
-  /* HP/UX 9 (%@#!) writes to sscanf strings */
-  tmp_version = g_strdup("$min_glib_version");
-  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-     printf("%s, bad version string\n", "$min_glib_version");
-     exit(1);
-   }
-
-  if ((glib_major_version != $glib_config_major_version) ||
-      (glib_minor_version != $glib_config_minor_version) ||
-      (glib_micro_version != $glib_config_micro_version))
-    {
-      printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", 
-             $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
-             glib_major_version, glib_minor_version, glib_micro_version);
-      printf ("*** was found! If pkg-config was correct, then it is best\n");
-      printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
-      printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
-      printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
-      printf("*** required on your system.\n");
-      printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
-      printf("*** to point to the correct configuration files\n");
-    } 
-  else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
-          (glib_minor_version != GLIB_MINOR_VERSION) ||
-           (glib_micro_version != GLIB_MICRO_VERSION))
-    {
-      printf("*** GLIB header files (version %d.%d.%d) do not match\n",
-            GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
-      printf("*** library (version %d.%d.%d)\n",
-            glib_major_version, glib_minor_version, glib_micro_version);
-    }
-  else
-    {
-      if ((glib_major_version > major) ||
-        ((glib_major_version == major) && (glib_minor_version > minor)) ||
-        ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
-      {
-        return 0;
-       }
-     else
-      {
-        printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
-               glib_major_version, glib_minor_version, glib_micro_version);
-        printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
-              major, minor, micro);
-        printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
-        printf("***\n");
-        printf("*** If you have already installed a sufficiently new version, this error\n");
-        printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
-        printf("*** being found. The easiest way to fix this is to remove the old version\n");
-        printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
-        printf("*** correct copy of pkg-config. (In this case, you will have to\n");
-        printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
-        printf("*** so that the correct libraries are found at run-time))\n");
-      }
-    }
-  return 1;
-}
-],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
-       CFLAGS="$ac_save_CFLAGS"
-       LIBS="$ac_save_LIBS"
-     fi
-  fi
-  if test "x$no_glib" = x ; then
-     AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version))
-     ifelse([$2], , :, [$2])     
-  else
-     AC_MSG_RESULT(no)
-     if test "$PKG_CONFIG" = "no" ; then
-       echo "*** A new enough version of pkg-config was not found."
-       echo "*** See http://www.freedesktop.org/software/pkgconfig/"
-     else
-       if test -f conf.glibtest ; then
-        :
-       else
-          echo "*** Could not run GLIB test program, checking why..."
-          CFLAGS="$CFLAGS $GLIB_CFLAGS"
-          LIBS="$LIBS $GLIB_LIBS"
-          AC_TRY_LINK([
-#include <glib.h>
-#include <stdio.h>
-],      [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
-        [ echo "*** The test program compiled, but did not run. This usually means"
-          echo "*** that the run-time linker is not finding GLIB or finding the wrong"
-          echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
-          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
-          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
-          echo "*** is required on your system"
-         echo "***"
-          echo "*** If you have an old version installed, it is best to remove it, although"
-          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
-        [ echo "*** The test program failed to compile or link. See the file config.log for the"
-          echo "*** exact error that occured. This usually means GLIB was incorrectly installed"
-          echo "*** or that you have moved GLIB since it was installed. In the latter case, you"
-          echo "*** may want to edit the pkg-config script: $PKG_CONFIG" ])
-          CFLAGS="$ac_save_CFLAGS"
-          LIBS="$ac_save_LIBS"
-       fi
-     fi
-     GLIB_CFLAGS=""
-     GLIB_LIBS=""
-     GLIB_GENMARSHAL=""
-     GOBJECT_QUERY=""
-     GLIB_MKENUMS=""
-     ifelse([$3], , :, [$3])
-  fi
-  AC_SUBST(GLIB_CFLAGS)
-  AC_SUBST(GLIB_LIBS)
-  AC_SUBST(GLIB_GENMARSHAL)
-  AC_SUBST(GOBJECT_QUERY)
-  AC_SUBST(GLIB_MKENUMS)
-  rm -f conf.glibtest
-])
-
 # Add --enable-maintainer-mode option to configure.
 # From Jim Meyering
 
 # serial 1
 
-AC_DEFUN(AM_MAINTAINER_MODE,
+AC_DEFUN([AM_MAINTAINER_MODE],
 [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
   dnl maintainer-mode is disabled by default
   AC_ARG_ENABLE(maintainer-mode,
@@ -365,7 +147,7 @@ AC_DEFUN(AM_MAINTAINER_MODE,
 
 # Define a conditional.
 
-AC_DEFUN(AM_CONDITIONAL,
+AC_DEFUN([AM_CONDITIONAL],
 [AC_SUBST($1_TRUE)
 AC_SUBST($1_FALSE)
 if $2; then
@@ -376,3 +158,87 @@ else
   $1_FALSE=
 fi])
 
+#serial 1
+# This test replaces the one in autoconf.
+# Currently this macro should have the same name as the autoconf macro
+# because gettext's gettext.m4 (distributed in the automake package)
+# still uses it.  Otherwise, the use in gettext.m4 makes autoheader
+# give these diagnostics:
+#   configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
+#   configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
+
+undefine([AC_ISC_POSIX])
+
+AC_DEFUN([AC_ISC_POSIX],
+  [
+    dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
+    AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
+  ]
+)
+
+
+dnl AM_PROG_LEX
+dnl Look for flex, lex or missing, then run AC_PROG_LEX and AC_DECL_YYTEXT
+AC_DEFUN([AM_PROG_LEX],
+[missing_dir=ifelse([$1],,`cd $ac_aux_dir && pwd`,$1)
+AC_CHECK_PROGS(LEX, flex lex, "$missing_dir/missing flex")
+AC_PROG_LEX
+AC_DECL_YYTEXT])
+
+
+dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
+dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
+dnl also defines GSTUFF_PKG_ERRORS on error
+AC_DEFUN(PKG_CHECK_MODULES, [
+  succeeded=no
+
+  if test -z "$PKG_CONFIG"; then
+    AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+  fi
+
+  if test "$PKG_CONFIG" = "no" ; then
+     echo "*** The pkg-config script could not be found. Make sure it is"
+     echo "*** in your path, or set the PKG_CONFIG environment variable"
+     echo "*** to the full path to pkg-config."
+     echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+  else
+     if ! $PKG_CONFIG --atleast-pkgconfig-version 0.7.0; then
+        echo "*** Your version of pkg-config is too old. You need version 0.7.0 or newer."
+        echo "*** See http://www.freedesktop.org/software/pkgconfig"
+     else
+        AC_MSG_CHECKING(for $2)
+
+        if $PKG_CONFIG --exists "$2" ; then
+            AC_MSG_RESULT(yes)
+            succeeded=yes
+
+            AC_MSG_CHECKING($1_CFLAGS)
+            $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
+            AC_MSG_RESULT($$1_CFLAGS)
+
+            AC_MSG_CHECKING($1_LIBS)
+            $1_LIBS=`$PKG_CONFIG --libs "$2"`
+            AC_MSG_RESULT($$1_LIBS)
+        else
+            $1_CFLAGS=""
+            $1_LIBS=""
+            ## If we have a custom action on failure, don't print errors, but 
+            ## do set a variable so people can do so.
+            $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+            ifelse([$4], ,echo $$1_PKG_ERRORS,)
+        fi
+
+        AC_SUBST($1_CFLAGS)
+        AC_SUBST($1_LIBS)
+     fi
+  fi
+
+  if test $succeeded = yes; then
+     ifelse([$3], , :, [$3])
+  else
+     ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
+  fi
+])
+
+
+
index 59e47ec0828bd9a158c846ce53b9fd502555ea4b..1018214251979bb9190b67332226c96beea4a0a9 100755 (executable)
--- a/configure
+++ b/configure
@@ -632,7 +632,6 @@ if test -n "$ac_init_help"; then
 Optional Features:
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --disable-glibtest       Do not try to compile and run a test GLIB program
   --enable-maintainer-mode enable make rules and dependencies not useful
                           (and sometimes confusing) to the casual installer
 
@@ -828,7 +827,7 @@ if test -z "$CONFIG_SITE"; then
 fi
 for ac_site_file in $CONFIG_SITE; do
   if test -r "$ac_site_file"; then
-    { echo "$as_me:831: loading site script $ac_site_file" >&5
+    { echo "$as_me:830: loading site script $ac_site_file" >&5
 echo "$as_me: loading site script $ac_site_file" >&6;}
     cat "$ac_site_file" >&5
     . "$ac_site_file"
@@ -839,7 +838,7 @@ if test -r "$cache_file"; then
   # Some versions of bash will fail to source /dev/null (special
   # files actually), so we avoid doing that.
   if test -f "$cache_file"; then
-    { echo "$as_me:842: loading cache $cache_file" >&5
+    { echo "$as_me:841: loading cache $cache_file" >&5
 echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
       [\\/]* | ?:[\\/]* ) . $cache_file;;
@@ -847,7 +846,7 @@ echo "$as_me: loading cache $cache_file" >&6;}
     esac
   fi
 else
-  { echo "$as_me:850: creating cache $cache_file" >&5
+  { echo "$as_me:849: creating cache $cache_file" >&5
 echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
@@ -863,21 +862,21 @@ for ac_var in `(set) 2>&1 |
   eval ac_new_val="\$ac_env_${ac_var}_value"
   case $ac_old_set,$ac_new_set in
     set,)
-      { echo "$as_me:866: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+      { echo "$as_me:865: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,set)
-      { echo "$as_me:870: error: \`$ac_var' was not set in the previous run" >&5
+      { echo "$as_me:869: error: \`$ac_var' was not set in the previous run" >&5
 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,);;
     *)
       if test "x$ac_old_val" != "x$ac_new_val"; then
-        { echo "$as_me:876: error: \`$ac_var' has changed since the previous run:" >&5
+        { echo "$as_me:875: error: \`$ac_var' has changed since the previous run:" >&5
 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-        { echo "$as_me:878:   former value:  $ac_old_val" >&5
+        { echo "$as_me:877:   former value:  $ac_old_val" >&5
 echo "$as_me:   former value:  $ac_old_val" >&2;}
-        { echo "$as_me:880:   current value: $ac_new_val" >&5
+        { echo "$as_me:879:   current value: $ac_new_val" >&5
 echo "$as_me:   current value: $ac_new_val" >&2;}
         ac_cache_corrupted=:
       fi;;
@@ -896,9 +895,9 @@ echo "$as_me:   current value: $ac_new_val" >&2;}
   fi
 done
 if $ac_cache_corrupted; then
-  { echo "$as_me:899: error: changes in the environment can compromise the build" >&5
+  { echo "$as_me:898: error: changes in the environment can compromise the build" >&5
 echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:901: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+  { { echo "$as_me:900: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -918,10 +917,10 @@ esac
 echo "#! $SHELL" >conftest.sh
 echo  "exit 0"   >>conftest.sh
 chmod +x conftest.sh
-if { (echo "$as_me:921: PATH=\".;.\"; conftest.sh") >&5
+if { (echo "$as_me:920: PATH=\".;.\"; conftest.sh") >&5
   (PATH=".;."; conftest.sh) 2>&5
   ac_status=$?
-  echo "$as_me:924: \$? = $ac_status" >&5
+  echo "$as_me:923: \$? = $ac_status" >&5
   (exit $ac_status); }; then
   ac_path_separator=';'
 else
@@ -951,7 +950,7 @@ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
   fi
 done
 if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:954: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+  { { echo "$as_me:953: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -971,7 +970,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
 # AFS /usr/afsws/bin/install, which mishandles nonexistent args
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:974: checking for a BSD compatible install" >&5
+echo "$as_me:973: checking for a BSD compatible install" >&5
 echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6
 if test -z "$INSTALL"; then
 if test "${ac_cv_path_install+set}" = set; then
@@ -1020,7 +1019,7 @@ fi
     INSTALL=$ac_install_sh
   fi
 fi
-echo "$as_me:1023: result: $INSTALL" >&5
+echo "$as_me:1022: result: $INSTALL" >&5
 echo "${ECHO_T}$INSTALL" >&6
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
@@ -1031,7 +1030,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
-echo "$as_me:1034: checking whether build environment is sane" >&5
+echo "$as_me:1033: checking whether build environment is sane" >&5
 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
 # Just in case
 sleep 1
@@ -1054,7 +1053,7 @@ if (
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      { { echo "$as_me:1057: error: ls -t appears to fail.  Make sure there is not a broken
+      { { echo "$as_me:1056: error: ls -t appears to fail.  Make sure there is not a broken
 alias in your environment" >&5
 echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
 alias in your environment" >&2;}
@@ -1067,14 +1066,14 @@ then
    # Ok.
    :
 else
-   { { echo "$as_me:1070: error: newly created file is older than distributed files!
+   { { echo "$as_me:1069: error: newly created file is older than distributed files!
 Check your system clock" >&5
 echo "$as_me: error: newly created file is older than distributed files!
 Check your system clock" >&2;}
    { (exit 1); exit 1; }; }
 fi
 rm -f conftest*
-echo "$as_me:1077: result: yes" >&5
+echo "$as_me:1076: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 test "$program_prefix" != NONE &&
   program_transform_name="s,^,$program_prefix,;$program_transform_name"
@@ -1089,7 +1088,7 @@ _ACEOF
 program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
 rm conftest.sed
 
-echo "$as_me:1092: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "$as_me:1091: checking whether ${MAKE-make} sets \${MAKE}" >&5
 echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
 if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
@@ -1109,21 +1108,21 @@ fi
 rm -f conftest.make
 fi
 if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
-  echo "$as_me:1112: result: yes" >&5
+  echo "$as_me:1111: result: yes" >&5
 echo "${ECHO_T}yes" >&6
   SET_MAKE=
 else
-  echo "$as_me:1116: result: no" >&5
+  echo "$as_me:1115: result: no" >&5
 echo "${ECHO_T}no" >&6
   SET_MAKE="MAKE=${MAKE-make}"
 fi
 
 PACKAGE=gob2
 
-VERSION=1.99.1
+VERSION=1.99.2
 
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
-  { { echo "$as_me:1126: error: source directory already configured; run \"make distclean\" there first" >&5
+  { { echo "$as_me:1125: error: source directory already configured; run \"make distclean\" there first" >&5
 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -1137,85 +1136,108 @@ cat >>confdefs.h <<EOF
 EOF
 
 missing_dir=`cd $ac_aux_dir && pwd`
-echo "$as_me:1140: checking for working aclocal" >&5
+echo "$as_me:1139: checking for working aclocal" >&5
 echo $ECHO_N "checking for working aclocal... $ECHO_C" >&6
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
 if (aclocal --version) < /dev/null > /dev/null 2>&1; then
    ACLOCAL=aclocal
-   echo "$as_me:1147: result: found" >&5
+   echo "$as_me:1146: result: found" >&5
 echo "${ECHO_T}found" >&6
 else
    ACLOCAL="$missing_dir/missing aclocal"
-   echo "$as_me:1151: result: missing" >&5
+   echo "$as_me:1150: result: missing" >&5
 echo "${ECHO_T}missing" >&6
 fi
 
-echo "$as_me:1155: checking for working autoconf" >&5
+echo "$as_me:1154: checking for working autoconf" >&5
 echo $ECHO_N "checking for working autoconf... $ECHO_C" >&6
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
 if (autoconf --version) < /dev/null > /dev/null 2>&1; then
    AUTOCONF=autoconf
-   echo "$as_me:1162: result: found" >&5
+   echo "$as_me:1161: result: found" >&5
 echo "${ECHO_T}found" >&6
 else
    AUTOCONF="$missing_dir/missing autoconf"
-   echo "$as_me:1166: result: missing" >&5
+   echo "$as_me:1165: result: missing" >&5
 echo "${ECHO_T}missing" >&6
 fi
 
-echo "$as_me:1170: checking for working automake" >&5
+echo "$as_me:1169: checking for working automake" >&5
 echo $ECHO_N "checking for working automake... $ECHO_C" >&6
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
 if (automake --version) < /dev/null > /dev/null 2>&1; then
    AUTOMAKE=automake
-   echo "$as_me:1177: result: found" >&5
+   echo "$as_me:1176: result: found" >&5
 echo "${ECHO_T}found" >&6
 else
    AUTOMAKE="$missing_dir/missing automake"
-   echo "$as_me:1181: result: missing" >&5
+   echo "$as_me:1180: result: missing" >&5
 echo "${ECHO_T}missing" >&6
 fi
 
-echo "$as_me:1185: checking for working autoheader" >&5
+echo "$as_me:1184: checking for working autoheader" >&5
 echo $ECHO_N "checking for working autoheader... $ECHO_C" >&6
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
 if (autoheader --version) < /dev/null > /dev/null 2>&1; then
    AUTOHEADER=autoheader
-   echo "$as_me:1192: result: found" >&5
+   echo "$as_me:1191: result: found" >&5
 echo "${ECHO_T}found" >&6
 else
    AUTOHEADER="$missing_dir/missing autoheader"
-   echo "$as_me:1196: result: missing" >&5
+   echo "$as_me:1195: result: missing" >&5
 echo "${ECHO_T}missing" >&6
 fi
 
-echo "$as_me:1200: checking for working makeinfo" >&5
+echo "$as_me:1199: checking for working makeinfo" >&5
 echo $ECHO_N "checking for working makeinfo... $ECHO_C" >&6
 # Run test in a subshell; some versions of sh will print an error if
 # an executable is not found, even if stderr is redirected.
 # Redirect stdin to placate older versions of autoconf.  Sigh.
 if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
    MAKEINFO=makeinfo
-   echo "$as_me:1207: result: found" >&5
+   echo "$as_me:1206: result: found" >&5
 echo "${ECHO_T}found" >&6
 else
    MAKEINFO="$missing_dir/missing makeinfo"
-   echo "$as_me:1211: result: missing" >&5
+   echo "$as_me:1210: result: missing" >&5
 echo "${ECHO_T}missing" >&6
 fi
 
+echo "$as_me:1214: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
+    # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+  enableval="$enable_maintainer_mode"
+  USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi;
+  echo "$as_me:1223: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+
+if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+  MAINT=$MAINTAINER_MODE_TRUE
+
+GLIB_REQUIRED=1.3.12
+
 if test -f ../NOINST_GOB ; then
   DOINSTGOB=
   NOINSTGOB=gob2
-  echo "$as_me:1218: result: *** NOT Going to install GOB ***" >&5
+  echo "$as_me:1240: result: *** NOT Going to install GOB ***" >&5
 echo "${ECHO_T}*** NOT Going to install GOB ***" >&6
   SUBDIRS="src examples"
 
@@ -1234,7 +1256,756 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:1237: checking for $ac_word" >&5
+echo "$as_me:1259: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="${ac_tool_prefix}gcc"
+echo "$as_me:1274: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1282: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1285: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:1294: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="gcc"
+echo "$as_me:1309: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:1317: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:1320: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:1333: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="${ac_tool_prefix}cc"
+echo "$as_me:1348: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1356: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1359: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:1368: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="cc"
+echo "$as_me:1383: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:1391: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:1394: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:1407: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+  ac_prog_rejected=yes
+  continue
+fi
+ac_cv_prog_CC="cc"
+echo "$as_me:1427: found $ac_dir/$ac_word" >&5
+break
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" ${1+"$@"}
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1449: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1452: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:1463: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+echo "$as_me:1478: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1486: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1489: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1502: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="$ac_prog"
+echo "$as_me:1517: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:1525: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:1528: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+test -z "$CC" && { { echo "$as_me:1540: error: no acceptable cc found in \$PATH" >&5
+echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:1545:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:1548: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:1551: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:1553: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:1556: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:1558: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:1561: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 1565 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:1581: checking for C compiler default output" >&5
+echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:1584: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:1587: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+for ac_file in `ls a.exe conftest.exe 2>/dev/null;
+                ls a.out conftest 2>/dev/null;
+                ls a.* conftest.* 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+    a.out ) # We found the default executable, but exeext='' is most
+            # certainly right.
+            break;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+          # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
+          export ac_cv_exeext
+          break;;
+    * ) break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:1610: error: C compiler cannot create executables" >&5
+echo "$as_me: error: C compiler cannot create executables" >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:1616: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:1621: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:1627: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1630: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { echo "$as_me:1637: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:1645: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:1652: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:1654: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:1657: checking for executable suffix" >&5
+echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
+if { (eval echo "$as_me:1659: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:1662: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+          export ac_cv_exeext
+          break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:1678: error: cannot compute EXEEXT: cannot compile and link" >&5
+echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:1684: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:1690: checking for object suffix" >&5
+echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1696 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:1708: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1711: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:1723: error: cannot compute OBJEXT: cannot compile" >&5
+echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:1730: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:1734: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1740 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1755: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1758: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1761: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1764: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:1776: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:1782: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1788 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1800: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1803: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1806: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1809: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:1819: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1846: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1849: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1852: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1855: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   ''\
+   '#include <stdlib.h>' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1867 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1880: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1883: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1886: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1889: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1899 "configure"
+#include "confdefs.h"
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1911: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1914: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1917: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1920: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+        echo "$as_me:1947: checking for strerror in -lcposix" >&5
+echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6
+if test "${ac_cv_lib_cposix_strerror+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcposix  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line 1955 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char strerror ();
+int
+main ()
+{
+strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:1974: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:1977: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:1980: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1983: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_cposix_strerror=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_cposix_strerror=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:1994: result: $ac_cv_lib_cposix_strerror" >&5
+echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6
+if test $ac_cv_lib_cposix_strerror = yes; then
+  LIBS="$LIBS -lcposix"
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:2008: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_CC+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1249,7 +2020,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_CC="${ac_tool_prefix}gcc"
-echo "$as_me:1252: found $ac_dir/$ac_word" >&5
+echo "$as_me:2023: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -1257,10 +2028,10 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:1260: result: $CC" >&5
+  echo "$as_me:2031: result: $CC" >&5
 echo "${ECHO_T}$CC" >&6
 else
-  echo "$as_me:1263: result: no" >&5
+  echo "$as_me:2034: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -1269,7 +2040,7 @@ if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-echo "$as_me:1272: checking for $ac_word" >&5
+echo "$as_me:2043: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1284,7 +2055,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_CC="gcc"
-echo "$as_me:1287: found $ac_dir/$ac_word" >&5
+echo "$as_me:2058: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -1292,10 +2063,10 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  echo "$as_me:1295: result: $ac_ct_CC" >&5
+  echo "$as_me:2066: result: $ac_ct_CC" >&5
 echo "${ECHO_T}$ac_ct_CC" >&6
 else
-  echo "$as_me:1298: result: no" >&5
+  echo "$as_me:2069: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -1308,7 +2079,7 @@ if test -z "$CC"; then
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:1311: checking for $ac_word" >&5
+echo "$as_me:2082: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_CC+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1323,7 +2094,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_CC="${ac_tool_prefix}cc"
-echo "$as_me:1326: found $ac_dir/$ac_word" >&5
+echo "$as_me:2097: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -1331,10 +2102,10 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:1334: result: $CC" >&5
+  echo "$as_me:2105: result: $CC" >&5
 echo "${ECHO_T}$CC" >&6
 else
-  echo "$as_me:1337: result: no" >&5
+  echo "$as_me:2108: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -1343,7 +2114,7 @@ if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-echo "$as_me:1346: checking for $ac_word" >&5
+echo "$as_me:2117: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1358,7 +2129,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_CC="cc"
-echo "$as_me:1361: found $ac_dir/$ac_word" >&5
+echo "$as_me:2132: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -1366,10 +2137,10 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  echo "$as_me:1369: result: $ac_ct_CC" >&5
+  echo "$as_me:2140: result: $ac_ct_CC" >&5
 echo "${ECHO_T}$ac_ct_CC" >&6
 else
-  echo "$as_me:1372: result: no" >&5
+  echo "$as_me:2143: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -1382,7 +2153,7 @@ fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-echo "$as_me:1385: checking for $ac_word" >&5
+echo "$as_me:2156: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_CC+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1402,7 +2173,7 @@ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
   continue
 fi
 ac_cv_prog_CC="cc"
-echo "$as_me:1405: found $ac_dir/$ac_word" >&5
+echo "$as_me:2176: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -1424,10 +2195,10 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:1427: result: $CC" >&5
+  echo "$as_me:2198: result: $CC" >&5
 echo "${ECHO_T}$CC" >&6
 else
-  echo "$as_me:1430: result: no" >&5
+  echo "$as_me:2201: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -1438,7 +2209,7 @@ if test -z "$CC"; then
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:1441: checking for $ac_word" >&5
+echo "$as_me:2212: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_CC+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1453,7 +2224,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-echo "$as_me:1456: found $ac_dir/$ac_word" >&5
+echo "$as_me:2227: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -1461,10 +2232,10 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:1464: result: $CC" >&5
+  echo "$as_me:2235: result: $CC" >&5
 echo "${ECHO_T}$CC" >&6
 else
-  echo "$as_me:1467: result: no" >&5
+  echo "$as_me:2238: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -1477,7 +2248,7 @@ if test -z "$CC"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:1480: checking for $ac_word" >&5
+echo "$as_me:2251: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1492,7 +2263,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_CC="$ac_prog"
-echo "$as_me:1495: found $ac_dir/$ac_word" >&5
+echo "$as_me:2266: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -1500,10 +2271,10 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  echo "$as_me:1503: result: $ac_ct_CC" >&5
+  echo "$as_me:2274: result: $ac_ct_CC" >&5
 echo "${ECHO_T}$ac_ct_CC" >&6
 else
-  echo "$as_me:1506: result: no" >&5
+  echo "$as_me:2277: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
 
 fi
 
-test -z "$CC" && { { echo "$as_me:1518: error: no acceptable cc found in \$PATH" >&5
+test -z "$CC" && { { echo "$as_me:2289: error: no acceptable cc found in \$PATH" >&5
 echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
    { (exit 1); exit 1; }; }
 
 # Provide some information about the compiler.
-echo "$as_me:1523:" \
+echo "$as_me:2294:" \
      "checking for C compiler version" >&5
 ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:1526: \"$ac_compiler --version </dev/null >&5\"") >&5
+{ (eval echo "$as_me:2297: \"$ac_compiler --version </dev/null >&5\"") >&5
   (eval $ac_compiler --version </dev/null >&5) 2>&5
   ac_status=$?
-  echo "$as_me:1529: \$? = $ac_status" >&5
+  echo "$as_me:2300: \$? = $ac_status" >&5
   (exit $ac_status); }
-{ (eval echo "$as_me:1531: \"$ac_compiler -v </dev/null >&5\"") >&5
+{ (eval echo "$as_me:2302: \"$ac_compiler -v </dev/null >&5\"") >&5
   (eval $ac_compiler -v </dev/null >&5) 2>&5
   ac_status=$?
-  echo "$as_me:1534: \$? = $ac_status" >&5
+  echo "$as_me:2305: \$? = $ac_status" >&5
   (exit $ac_status); }
-{ (eval echo "$as_me:1536: \"$ac_compiler -V </dev/null >&5\"") >&5
+{ (eval echo "$as_me:2307: \"$ac_compiler -V </dev/null >&5\"") >&5
   (eval $ac_compiler -V </dev/null >&5) 2>&5
   ac_status=$?
-  echo "$as_me:1539: \$? = $ac_status" >&5
+  echo "$as_me:2310: \$? = $ac_status" >&5
   (exit $ac_status); }
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 1543 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-echo "$as_me:1559: checking for C compiler default output" >&5
-echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:1562: \"$ac_link_default\"") >&5
-  (eval $ac_link_default) 2>&5
-  ac_status=$?
-  echo "$as_me:1565: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # Find the output, starting from the most likely.  This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-for ac_file in `ls a.exe conftest.exe 2>/dev/null;
-                ls a.out conftest 2>/dev/null;
-                ls a.* conftest.* 2>/dev/null`; do
-  case $ac_file in
-    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
-    a.out ) # We found the default executable, but exeext='' is most
-            # certainly right.
-            break;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-          # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
-          export ac_cv_exeext
-          break;;
-    * ) break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-{ { echo "$as_me:1588: error: C compiler cannot create executables" >&5
-echo "$as_me: error: C compiler cannot create executables" >&2;}
-   { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-echo "$as_me:1594: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:1599: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { (eval echo "$as_me:1605: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:1608: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-       cross_compiling=yes
-    else
-       { { echo "$as_me:1615: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'." >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-  fi
-fi
-echo "$as_me:1623: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:1630: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:1632: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:1635: checking for executable suffix" >&5
-echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
-if { (eval echo "$as_me:1637: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:1640: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
-  case $ac_file in
-    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-          export ac_cv_exeext
-          break;;
-    * ) break;;
-  esac
-done
-else
-  { { echo "$as_me:1656: error: cannot compute EXEEXT: cannot compile and link" >&5
-echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:1662: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-echo "$as_me:1668: checking for object suffix" >&5
-echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 1674 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:1686: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:1689: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-{ { echo "$as_me:1701: error: cannot compute OBJEXT: cannot compile" >&5
-echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-echo "$as_me:1708: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-echo "$as_me:1712: checking whether we are using the GNU C compiler" >&5
+echo "$as_me:2313: checking whether we are using the GNU C compiler" >&5
 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
 if test "${ac_cv_c_compiler_gnu+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 1718 "configure"
+#line 2319 "configure"
 #include "confdefs.h"
 
 int
@@ -1730,16 +2331,16 @@ main ()
 }
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1733: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:2334: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:1736: \$? = $ac_status" >&5
+  echo "$as_me:2337: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:1739: \"$ac_try\"") >&5
+  { (eval echo "$as_me:2340: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:1742: \$? = $ac_status" >&5
+  echo "$as_me:2343: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_compiler_gnu=yes
 else
@@ -1751,19 +2352,19 @@ rm -f conftest.$ac_objext conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-echo "$as_me:1754: result: $ac_cv_c_compiler_gnu" >&5
+echo "$as_me:2355: result: $ac_cv_c_compiler_gnu" >&5
 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
 GCC=`test $ac_compiler_gnu = yes && echo yes`
 ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 CFLAGS="-g"
-echo "$as_me:1760: checking whether $CC accepts -g" >&5
+echo "$as_me:2361: checking whether $CC accepts -g" >&5
 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
 if test "${ac_cv_prog_cc_g+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 1766 "configure"
+#line 2367 "configure"
 #include "confdefs.h"
 
 int
@@ -1775,16 +2376,16 @@ main ()
 }
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1778: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:2379: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:1781: \$? = $ac_status" >&5
+  echo "$as_me:2382: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:1784: \"$ac_try\"") >&5
+  { (eval echo "$as_me:2385: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:1787: \$? = $ac_status" >&5
+  echo "$as_me:2388: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_prog_cc_g=yes
 else
@@ -1794,7 +2395,7 @@ ac_cv_prog_cc_g=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 fi
-echo "$as_me:1797: result: $ac_cv_prog_cc_g" >&5
+echo "$as_me:2398: result: $ac_cv_prog_cc_g" >&5
 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
 if test "$ac_test_CFLAGS" = set; then
   CFLAGS=$ac_save_CFLAGS
@@ -1821,16 +2422,16 @@ cat >conftest.$ac_ext <<_ACEOF
 #endif
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1824: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:2425: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:1827: \$? = $ac_status" >&5
+  echo "$as_me:2428: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:1830: \"$ac_try\"") >&5
+  { (eval echo "$as_me:2431: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:1833: \$? = $ac_status" >&5
+  echo "$as_me:2434: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   for ac_declaration in \
    ''\
@@ -1842,7 +2443,7 @@ if { (eval echo "$as_me:1824: \"$ac_compile\"") >&5
    'void exit (int);'
 do
   cat >conftest.$ac_ext <<_ACEOF
-#line 1845 "configure"
+#line 2446 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 $ac_declaration
@@ -1855,16 +2456,16 @@ exit (42);
 }
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1858: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:2459: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:1861: \$? = $ac_status" >&5
+  echo "$as_me:2462: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:1864: \"$ac_try\"") >&5
+  { (eval echo "$as_me:2465: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:1867: \$? = $ac_status" >&5
+  echo "$as_me:2468: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   :
 else
@@ -1874,7 +2475,7 @@ continue
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
   cat >conftest.$ac_ext <<_ACEOF
-#line 1877 "configure"
+#line 2478 "configure"
 #include "confdefs.h"
 $ac_declaration
 int
@@ -1886,16 +2487,16 @@ exit (42);
 }
 _ACEOF
 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1889: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:2490: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:1892: \$? = $ac_status" >&5
+  echo "$as_me:2493: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:1895: \"$ac_try\"") >&5
+  { (eval echo "$as_me:2496: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:1898: \$? = $ac_status" >&5
+  echo "$as_me:2499: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   break
 else
@@ -1927,7 +2528,7 @@ ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:1930: checking how to run the C preprocessor" >&5
+echo "$as_me:2531: checking how to run the C preprocessor" >&5
 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
@@ -1948,18 +2549,18 @@ do
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
   cat >conftest.$ac_ext <<_ACEOF
-#line 1951 "configure"
+#line 2552 "configure"
 #include "confdefs.h"
 #include <assert.h>
                      Syntax error
 _ACEOF
-if { (eval echo "$as_me:1956: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:2557: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
   egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:1962: \$? = $ac_status" >&5
+  echo "$as_me:2563: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
@@ -1982,17 +2583,17 @@ rm -f conftest.err conftest.$ac_ext
   # OK, works on sane cases.  Now check whether non-existent headers
   # can be detected and how.
   cat >conftest.$ac_ext <<_ACEOF
-#line 1985 "configure"
+#line 2586 "configure"
 #include "confdefs.h"
 #include <ac_nonexistent.h>
 _ACEOF
-if { (eval echo "$as_me:1989: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:2590: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
   egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:1995: \$? = $ac_status" >&5
+  echo "$as_me:2596: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2029,7 +2630,7 @@ fi
 else
   ac_cv_prog_CPP=$CPP
 fi
-echo "$as_me:2032: result: $CPP" >&5
+echo "$as_me:2633: result: $CPP" >&5
 echo "${ECHO_T}$CPP" >&6
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
@@ -2039,18 +2640,18 @@ do
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
   cat >conftest.$ac_ext <<_ACEOF
-#line 2042 "configure"
+#line 2643 "configure"
 #include "confdefs.h"
 #include <assert.h>
                      Syntax error
 _ACEOF
-if { (eval echo "$as_me:2047: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:2648: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
   egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:2053: \$? = $ac_status" >&5
+  echo "$as_me:2654: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2073,17 +2674,17 @@ rm -f conftest.err conftest.$ac_ext
   # OK, works on sane cases.  Now check whether non-existent headers
   # can be detected and how.
   cat >conftest.$ac_ext <<_ACEOF
-#line 2076 "configure"
+#line 2677 "configure"
 #include "confdefs.h"
 #include <ac_nonexistent.h>
 _ACEOF
-if { (eval echo "$as_me:2080: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:2681: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
   egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:2086: \$? = $ac_status" >&5
+  echo "$as_me:2687: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2111,7 +2712,7 @@ rm -f conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then
   :
 else
-  { { echo "$as_me:2114: error: C preprocessor \"$CPP\" fails sanity check" >&5
+  { { echo "$as_me:2715: error: C preprocessor \"$CPP\" fails sanity check" >&5
 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -2122,13 +2723,13 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-echo "$as_me:2125: checking for ANSI C header files" >&5
+echo "$as_me:2726: checking for ANSI C header files" >&5
 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
 if test "${ac_cv_header_stdc+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 2131 "configure"
+#line 2732 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -2136,13 +2737,13 @@ else
 #include <float.h>
 
 _ACEOF
-if { (eval echo "$as_me:2139: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:2740: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
   egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:2145: \$? = $ac_status" >&5
+  echo "$as_me:2746: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2164,7 +2765,7 @@ rm -f conftest.err conftest.$ac_ext
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
   cat >conftest.$ac_ext <<_ACEOF
-#line 2167 "configure"
+#line 2768 "configure"
 #include "confdefs.h"
 #include <string.h>
 
@@ -2182,7 +2783,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
   cat >conftest.$ac_ext <<_ACEOF
-#line 2185 "configure"
+#line 2786 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 
@@ -2203,7 +2804,7 @@ if test $ac_cv_header_stdc = yes; then
   :
 else
   cat >conftest.$ac_ext <<_ACEOF
-#line 2206 "configure"
+#line 2807 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #if ((' ' & 0x0FF) == 0x020)
@@ -2229,15 +2830,15 @@ main ()
 }
 _ACEOF
 rm -f conftest$ac_exeext
-if { (eval echo "$as_me:2232: \"$ac_link\"") >&5
+if { (eval echo "$as_me:2833: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:2235: \$? = $ac_status" >&5
+  echo "$as_me:2836: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:2237: \"$ac_try\"") >&5
+  { (eval echo "$as_me:2838: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2240: \$? = $ac_status" >&5
+  echo "$as_me:2841: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   :
 else
@@ -2250,7 +2851,7 @@ rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 fi
-echo "$as_me:2253: result: $ac_cv_header_stdc" >&5
+echo "$as_me:2854: result: $ac_cv_header_stdc" >&5
 echo "${ECHO_T}$ac_cv_header_stdc" >&6
 if test $ac_cv_header_stdc = yes; then
 
@@ -2264,7 +2865,7 @@ for ac_prog in 'bison -y' byacc
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:2267: checking for $ac_word" >&5
+echo "$as_me:2868: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_YACC+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2279,7 +2880,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_YACC="$ac_prog"
-echo "$as_me:2282: found $ac_dir/$ac_word" >&5
+echo "$as_me:2883: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -2287,10 +2888,10 @@ fi
 fi
 YACC=$ac_cv_prog_YACC
 if test -n "$YACC"; then
-  echo "$as_me:2290: result: $YACC" >&5
+  echo "$as_me:2891: result: $YACC" >&5
 echo "${ECHO_T}$YACC" >&6
 else
-  echo "$as_me:2293: result: no" >&5
+  echo "$as_me:2894: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -2303,7 +2904,7 @@ for ac_prog in flex lex
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:2306: checking for $ac_word" >&5
+echo "$as_me:2907: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_LEX+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2318,7 +2919,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_LEX="$ac_prog"
-echo "$as_me:2321: found $ac_dir/$ac_word" >&5
+echo "$as_me:2922: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -2326,10 +2927,10 @@ fi
 fi
 LEX=$ac_cv_prog_LEX
 if test -n "$LEX"; then
-  echo "$as_me:2329: result: $LEX" >&5
+  echo "$as_me:2930: result: $LEX" >&5
 echo "${ECHO_T}$LEX" >&6
 else
-  echo "$as_me:2332: result: no" >&5
+  echo "$as_me:2933: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -2341,7 +2942,7 @@ for ac_prog in flex lex
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:2344: checking for $ac_word" >&5
+echo "$as_me:2945: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_LEX+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2356,7 +2957,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_LEX="$ac_prog"
-echo "$as_me:2359: found $ac_dir/$ac_word" >&5
+echo "$as_me:2960: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -2364,10 +2965,10 @@ fi
 fi
 LEX=$ac_cv_prog_LEX
 if test -n "$LEX"; then
-  echo "$as_me:2367: result: $LEX" >&5
+  echo "$as_me:2968: result: $LEX" >&5
 echo "${ECHO_T}$LEX" >&6
 else
-  echo "$as_me:2370: result: no" >&5
+  echo "$as_me:2971: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -2377,7 +2978,7 @@ test -n "$LEX" || LEX=":"
 
 if test -z "$LEXLIB"
 then
-  echo "$as_me:2380: checking for yywrap in -lfl" >&5
+  echo "$as_me:2981: checking for yywrap in -lfl" >&5
 echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6
 if test "${ac_cv_lib_fl_yywrap+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2385,7 +2986,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lfl  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 2388 "configure"
+#line 2989 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -2404,16 +3005,16 @@ yywrap ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:2407: \"$ac_link\"") >&5
+if { (eval echo "$as_me:3008: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:2410: \$? = $ac_status" >&5
+  echo "$as_me:3011: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:2413: \"$ac_try\"") >&5
+  { (eval echo "$as_me:3014: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2416: \$? = $ac_status" >&5
+  echo "$as_me:3017: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_fl_yywrap=yes
 else
@@ -2424,12 +3025,12 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:2427: result: $ac_cv_lib_fl_yywrap" >&5
+echo "$as_me:3028: result: $ac_cv_lib_fl_yywrap" >&5
 echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6
 if test $ac_cv_lib_fl_yywrap = yes; then
   LEXLIB="-lfl"
 else
-  echo "$as_me:2432: checking for yywrap in -ll" >&5
+  echo "$as_me:3033: checking for yywrap in -ll" >&5
 echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6
 if test "${ac_cv_lib_l_yywrap+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2437,7 +3038,7 @@ else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ll  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
-#line 2440 "configure"
+#line 3041 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -2456,16 +3057,16 @@ yywrap ();
 }
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:2459: \"$ac_link\"") >&5
+if { (eval echo "$as_me:3060: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:2462: \$? = $ac_status" >&5
+  echo "$as_me:3063: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:2465: \"$ac_try\"") >&5
+  { (eval echo "$as_me:3066: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2468: \$? = $ac_status" >&5
+  echo "$as_me:3069: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_lib_l_yywrap=yes
 else
@@ -2476,7 +3077,7 @@ fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:2479: result: $ac_cv_lib_l_yywrap" >&5
+echo "$as_me:3080: result: $ac_cv_lib_l_yywrap" >&5
 echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6
 if test $ac_cv_lib_l_yywrap = yes; then
   LEXLIB="-ll"
@@ -2487,7 +3088,7 @@ fi
 fi
 
 if test "x$LEX" != "x:"; then
-  echo "$as_me:2490: checking lex output file root" >&5
+  echo "$as_me:3091: checking lex output file root" >&5
 echo $ECHO_N "checking lex output file root... $ECHO_C" >&6
 if test "${ac_cv_prog_lex_root+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2501,16 +3102,16 @@ if test -f lex.yy.c; then
 elif test -f lexyy.c; then
   ac_cv_prog_lex_root=lexyy
 else
-  { { echo "$as_me:2504: error: cannot find output from $LEX; giving up" >&5
+  { { echo "$as_me:3105: error: cannot find output from $LEX; giving up" >&5
 echo "$as_me: error: cannot find output from $LEX; giving up" >&2;}
    { (exit 1); exit 1; }; }
 fi
 fi
-echo "$as_me:2509: result: $ac_cv_prog_lex_root" >&5
+echo "$as_me:3110: result: $ac_cv_prog_lex_root" >&5
 echo "${ECHO_T}$ac_cv_prog_lex_root" >&6
 LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
 
-echo "$as_me:2513: checking whether yytext is a pointer" >&5
+echo "$as_me:3114: checking whether yytext is a pointer" >&5
 echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6
 if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2526,16 +3127,16 @@ cat >conftest.$ac_ext <<_ACEOF
 `cat $LEX_OUTPUT_ROOT.c`
 _ACEOF
 rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:2529: \"$ac_link\"") >&5
+if { (eval echo "$as_me:3130: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:2532: \$? = $ac_status" >&5
+  echo "$as_me:3133: \$? = $ac_status" >&5
   (exit $ac_status); } &&
          { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:2535: \"$ac_try\"") >&5
+  { (eval echo "$as_me:3136: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2538: \$? = $ac_status" >&5
+  echo "$as_me:3139: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_prog_lex_yytext_pointer=yes
 else
@@ -2547,7 +3148,7 @@ LIBS=$ac_save_LIBS
 rm -f "${LEX_OUTPUT_ROOT}.c"
 
 fi
-echo "$as_me:2550: result: $ac_cv_prog_lex_yytext_pointer" >&5
+echo "$as_me:3151: result: $ac_cv_prog_lex_yytext_pointer" >&5
 echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6
 if test $ac_cv_prog_lex_yytext_pointer = yes; then
 
@@ -2571,7 +3172,7 @@ fi
 # AFS /usr/afsws/bin/install, which mishandles nonexistent args
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:2574: checking for a BSD compatible install" >&5
+echo "$as_me:3175: checking for a BSD compatible install" >&5
 echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6
 if test -z "$INSTALL"; then
 if test "${ac_cv_path_install+set}" = set; then
@@ -2620,7 +3221,7 @@ fi
     INSTALL=$ac_install_sh
   fi
 fi
-echo "$as_me:2623: result: $INSTALL" >&5
+echo "$as_me:3224: result: $INSTALL" >&5
 echo "${ECHO_T}$INSTALL" >&6
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
@@ -2636,7 +3237,7 @@ ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:2639: checking how to run the C preprocessor" >&5
+echo "$as_me:3240: checking how to run the C preprocessor" >&5
 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
@@ -2657,18 +3258,18 @@ do
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
   cat >conftest.$ac_ext <<_ACEOF
-#line 2660 "configure"
+#line 3261 "configure"
 #include "confdefs.h"
 #include <assert.h>
                      Syntax error
 _ACEOF
-if { (eval echo "$as_me:2665: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:3266: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
   egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:2671: \$? = $ac_status" >&5
+  echo "$as_me:3272: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2691,17 +3292,17 @@ rm -f conftest.err conftest.$ac_ext
   # OK, works on sane cases.  Now check whether non-existent headers
   # can be detected and how.
   cat >conftest.$ac_ext <<_ACEOF
-#line 2694 "configure"
+#line 3295 "configure"
 #include "confdefs.h"
 #include <ac_nonexistent.h>
 _ACEOF
-if { (eval echo "$as_me:2698: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:3299: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
   egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:2704: \$? = $ac_status" >&5
+  echo "$as_me:3305: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2738,7 +3339,7 @@ fi
 else
   ac_cv_prog_CPP=$CPP
 fi
-echo "$as_me:2741: result: $CPP" >&5
+echo "$as_me:3342: result: $CPP" >&5
 echo "${ECHO_T}$CPP" >&6
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
@@ -2748,18 +3349,18 @@ do
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
   cat >conftest.$ac_ext <<_ACEOF
-#line 2751 "configure"
+#line 3352 "configure"
 #include "confdefs.h"
 #include <assert.h>
                      Syntax error
 _ACEOF
-if { (eval echo "$as_me:2756: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:3357: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
   egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:2762: \$? = $ac_status" >&5
+  echo "$as_me:3363: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2782,17 +3383,17 @@ rm -f conftest.err conftest.$ac_ext
   # OK, works on sane cases.  Now check whether non-existent headers
   # can be detected and how.
   cat >conftest.$ac_ext <<_ACEOF
-#line 2785 "configure"
+#line 3386 "configure"
 #include "confdefs.h"
 #include <ac_nonexistent.h>
 _ACEOF
-if { (eval echo "$as_me:2789: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:3390: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
   egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:2795: \$? = $ac_status" >&5
+  echo "$as_me:3396: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2820,7 +3421,7 @@ rm -f conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then
   :
 else
-  { { echo "$as_me:2823: error: C preprocessor \"$CPP\" fails sanity check" >&5
+  { { echo "$as_me:3424: error: C preprocessor \"$CPP\" fails sanity check" >&5
 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -2833,7 +3434,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 # Extract the first word of "rm", so it can be a program name with args.
 set dummy rm; ac_word=$2
-echo "$as_me:2836: checking for $ac_word" >&5
+echo "$as_me:3437: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_RM+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2850,7 +3451,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   if $as_executable_p "$ac_dir/$ac_word"; then
    ac_cv_path_RM="$ac_dir/$ac_word"
-   echo "$as_me:2853: found $ac_dir/$ac_word" >&5
+   echo "$as_me:3454: found $ac_dir/$ac_word" >&5
    break
 fi
 done
@@ -2862,16 +3463,16 @@ fi
 RM=$ac_cv_path_RM
 
 if test -n "$RM"; then
-  echo "$as_me:2865: result: $RM" >&5
+  echo "$as_me:3466: result: $RM" >&5
 echo "${ECHO_T}$RM" >&6
 else
-  echo "$as_me:2868: result: no" >&5
+  echo "$as_me:3469: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
 # Extract the first word of "mv", so it can be a program name with args.
 set dummy mv; ac_word=$2
-echo "$as_me:2874: checking for $ac_word" >&5
+echo "$as_me:3475: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_MV+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2888,7 +3489,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   if $as_executable_p "$ac_dir/$ac_word"; then
    ac_cv_path_MV="$ac_dir/$ac_word"
-   echo "$as_me:2891: found $ac_dir/$ac_word" >&5
+   echo "$as_me:3492: found $ac_dir/$ac_word" >&5
    break
 fi
 done
@@ -2900,16 +3501,16 @@ fi
 MV=$ac_cv_path_MV
 
 if test -n "$MV"; then
-  echo "$as_me:2903: result: $MV" >&5
+  echo "$as_me:3504: result: $MV" >&5
 echo "${ECHO_T}$MV" >&6
 else
-  echo "$as_me:2906: result: no" >&5
+  echo "$as_me:3507: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
 # Extract the first word of "tar", so it can be a program name with args.
 set dummy tar; ac_word=$2
-echo "$as_me:2912: checking for $ac_word" >&5
+echo "$as_me:3513: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_TAR+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2926,7 +3527,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   if $as_executable_p "$ac_dir/$ac_word"; then
    ac_cv_path_TAR="$ac_dir/$ac_word"
-   echo "$as_me:2929: found $ac_dir/$ac_word" >&5
+   echo "$as_me:3530: found $ac_dir/$ac_word" >&5
    break
 fi
 done
@@ -2938,40 +3539,19 @@ fi
 TAR=$ac_cv_path_TAR
 
 if test -n "$TAR"; then
-  echo "$as_me:2941: result: $TAR" >&5
+  echo "$as_me:3542: result: $TAR" >&5
 echo "${ECHO_T}$TAR" >&6
 else
-  echo "$as_me:2944: result: no" >&5
+  echo "$as_me:3545: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
-# Check whether --enable-glibtest or --disable-glibtest was given.
-if test "${enable_glibtest+set}" = set; then
-  enableval="$enable_glibtest"
-
-else
-  enable_glibtest=yes
-fi;
-
-  pkg_config_args=glib-2.0
-  for module in .
-  do
-      case "$module" in
-         gmodule)
-             pkg_config_args="$pkg_config_args gmodule-2.0"
-         ;;
-         gobject)
-             pkg_config_args="$pkg_config_args gobject-2.0"
-         ;;
-         gthread)
-             pkg_config_args="$pkg_config_args gthread-2.0"
-         ;;
-      esac
-  done
+  succeeded=no
 
-  # Extract the first word of "pkg-config", so it can be a program name with args.
+  if test -z "$PKG_CONFIG"; then
+    # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
-echo "$as_me:2974: checking for $ac_word" >&5
+echo "$as_me:3554: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2988,7 +3568,7 @@ for ac_dir in $ac_dummy; do
   test -z "$ac_dir" && ac_dir=.
   if $as_executable_p "$ac_dir/$ac_word"; then
    ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word"
-   echo "$as_me:2991: found $ac_dir/$ac_word" >&5
+   echo "$as_me:3571: found $ac_dir/$ac_word" >&5
    break
 fi
 done
 PKG_CONFIG=$ac_cv_path_PKG_CONFIG
 
 if test -n "$PKG_CONFIG"; then
-  echo "$as_me:3003: result: $PKG_CONFIG" >&5
+  echo "$as_me:3583: result: $PKG_CONFIG" >&5
 echo "${ECHO_T}$PKG_CONFIG" >&6
 else
-  echo "$as_me:3006: result: no" >&5
+  echo "$as_me:3586: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
-  no_glib=""
-
-  if test x$PKG_CONFIG != xno ; then
-    if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
-      :
-    else
-      echo *** pkg-config too old; version 0.7 or better required.
-      no_glib=yes
-      PKG_CONFIG=no
-    fi
-  fi
-
-  ## don't try to run the test against uninstalled libtool libs
-  if $PKG_CONFIG --uninstalled $pkg_config_args; then
-        echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
-        enable_glibtest=no
-  fi
-
-  min_glib_version=1.3.3
-  echo "$as_me:3029: checking for GLIB - version >= $min_glib_version" >&5
-echo $ECHO_N "checking for GLIB - version >= $min_glib_version... $ECHO_C" >&6
-
-  if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
-        :
-  else
-        no_glib = yes
   fi
 
-  if test x"$no_glib" = x ; then
-    GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
-    GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
-    GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
-
-    GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
-    GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
-    glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
-           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
-    glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
-           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
-    glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
-           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
-    if test "x$enable_glibtest" = "xyes" ; then
-      ac_save_CFLAGS="$CFLAGS"
-      ac_save_LIBS="$LIBS"
-      CFLAGS="$CFLAGS $GLIB_CFLAGS"
-      LIBS="$GLIB_LIBS $LIBS"
-      rm -f conf.glibtest
-      if test "$cross_compiling" = yes; then
-  echo $ac_n "cross compiling; assumed OK... $ac_c"
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 3061 "configure"
-#include "confdefs.h"
-
-#include <glib.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-int
-main ()
-{
-  int major, minor, micro;
-  char *tmp_version;
-
-  system ("touch conf.glibtest");
-
-  /* HP/UX 9 (%@#!) writes to sscanf strings */
-  tmp_version = g_strdup("$min_glib_version");
-  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-     printf("%s, bad version string\n", "$min_glib_version");
-     exit(1);
-   }
-
-  if ((glib_major_version != $glib_config_major_version) ||
-      (glib_minor_version != $glib_config_minor_version) ||
-      (glib_micro_version != $glib_config_micro_version))
-    {
-      printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n",
-             $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
-             glib_major_version, glib_minor_version, glib_micro_version);
-      printf ("*** was found! If pkg-config was correct, then it is best\n");
-      printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
-      printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
-      printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
-      printf("*** required on your system.\n");
-      printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
-      printf("*** to point to the correct configuration files\n");
-    }
-  else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
-          (glib_minor_version != GLIB_MINOR_VERSION) ||
-           (glib_micro_version != GLIB_MICRO_VERSION))
-    {
-      printf("*** GLIB header files (version %d.%d.%d) do not match\n",
-            GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
-      printf("*** library (version %d.%d.%d)\n",
-            glib_major_version, glib_minor_version, glib_micro_version);
-    }
+  if test "$PKG_CONFIG" = "no" ; then
+     echo "*** The pkg-config script could not be found. Make sure it is"
+     echo "*** in your path, or set the PKG_CONFIG environment variable"
+     echo "*** to the full path to pkg-config."
+     echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
   else
-    {
-      if ((glib_major_version > major) ||
-        ((glib_major_version == major) && (glib_minor_version > minor)) ||
-        ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
-      {
-        return 0;
-       }
+     if ! $PKG_CONFIG --atleast-pkgconfig-version 0.7.0; then
+        echo "*** Your version of pkg-config is too old. You need version 0.7.0 or newer."
+        echo "*** See http://www.freedesktop.org/software/pkgconfig"
      else
-      {
-        printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
-               glib_major_version, glib_minor_version, glib_micro_version);
-        printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
-              major, minor, micro);
-        printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
-        printf("***\n");
-        printf("*** If you have already installed a sufficiently new version, this error\n");
-        printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
-        printf("*** being found. The easiest way to fix this is to remove the old version\n");
-        printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
-        printf("*** correct copy of pkg-config. (In this case, you will have to\n");
-        printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
-        printf("*** so that the correct libraries are found at run-time))\n");
-      }
-    }
-  return 1;
-}
+        echo "$as_me:3602: checking for glib-2.0 >= $GLIB_REQUIRED" >&5
+echo $ECHO_N "checking for glib-2.0 >= $GLIB_REQUIRED... $ECHO_C" >&6
+
+        if $PKG_CONFIG --exists "glib-2.0 >= $GLIB_REQUIRED" ; then
+            echo "$as_me:3606: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+            succeeded=yes
+
+            echo "$as_me:3610: checking GLIB_CFLAGS" >&5
+echo $ECHO_N "checking GLIB_CFLAGS... $ECHO_C" >&6
+            GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= $GLIB_REQUIRED"`
+            echo "$as_me:3613: result: $GLIB_CFLAGS" >&5
+echo "${ECHO_T}$GLIB_CFLAGS" >&6
+
+            echo "$as_me:3616: checking GLIB_LIBS" >&5
+echo $ECHO_N "checking GLIB_LIBS... $ECHO_C" >&6
+            GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= $GLIB_REQUIRED"`
+            echo "$as_me:3619: result: $GLIB_LIBS" >&5
+echo "${ECHO_T}$GLIB_LIBS" >&6
+        else
+            GLIB_CFLAGS=""
+            GLIB_LIBS=""
+            ## If we have a custom action on failure, don't print errors, but
+            ## do set a variable so people can do so.
+            GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glib-2.0 >= $GLIB_REQUIRED"`
+            echo $GLIB_PKG_ERRORS
+        fi
 
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:3137: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:3140: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:3142: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:3145: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-no_glib=yes
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-       CFLAGS="$ac_save_CFLAGS"
-       LIBS="$ac_save_LIBS"
      fi
   fi
-  if test "x$no_glib" = x ; then
-     echo "$as_me:3161: result: yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&5
-echo "${ECHO_T}yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&6
-     :
-  else
-     echo "$as_me:3165: result: no" >&5
-echo "${ECHO_T}no" >&6
-     if test "$PKG_CONFIG" = "no" ; then
-       echo "*** A new enough version of pkg-config was not found."
-       echo "*** See http://www.freedesktop.org/software/pkgconfig/"
-     else
-       if test -f conf.glibtest ; then
-        :
-       else
-          echo "*** Could not run GLIB test program, checking why..."
-          CFLAGS="$CFLAGS $GLIB_CFLAGS"
-          LIBS="$LIBS $GLIB_LIBS"
-          cat >conftest.$ac_ext <<_ACEOF
-#line 3178 "configure"
-#include "confdefs.h"
 
-#include <glib.h>
-#include <stdio.h>
-
-int
-main ()
-{
- return ((glib_major_version) || (glib_minor_version) || (glib_micro_version));
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:3193: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:3196: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:3199: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:3202: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-   echo "*** The test program compiled, but did not run. This usually means"
-          echo "*** that the run-time linker is not finding GLIB or finding the wrong"
-          echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
-          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
-          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
-          echo "*** is required on your system"
-         echo "***"
-          echo "*** If you have an old version installed, it is best to remove it, although"
-          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
- echo "*** The test program failed to compile or link. See the file config.log for the"
-          echo "*** exact error that occured. This usually means GLIB was incorrectly installed"
-          echo "*** or that you have moved GLIB since it was installed. In the latter case, you"
-          echo "*** may want to edit the pkg-config script: $PKG_CONFIG"
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-          CFLAGS="$ac_save_CFLAGS"
-          LIBS="$ac_save_LIBS"
-       fi
-     fi
-     GLIB_CFLAGS=""
-     GLIB_LIBS=""
-     GLIB_GENMARSHAL=""
-     GOBJECT_QUERY=""
-     GLIB_MKENUMS=""
+  if test $succeeded = yes; then
      :
+  else
+     { { echo "$as_me:3636: error: Library requirements (glib-2.0 >= $GLIB_REQUIRED) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5
+echo "$as_me: error: Library requirements (glib-2.0 >= $GLIB_REQUIRED) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;}
+   { (exit 1); exit 1; }; }
   fi
 
-  rm -f conf.glibtest
-
-echo "$as_me:3236: checking whether to enable maintainer-specific portions of Makefiles" >&5
-echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
-    # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then
-  enableval="$enable_maintainer_mode"
-  USE_MAINTAINER_MODE=$enableval
-else
-  USE_MAINTAINER_MODE=no
-fi;
-  echo "$as_me:3245: result: $USE_MAINTAINER_MODE" >&5
-echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
-
-if test $USE_MAINTAINER_MODE = yes; then
-  MAINTAINER_MODE_TRUE=
-  MAINTAINER_MODE_FALSE='#'
-else
-  MAINTAINER_MODE_TRUE='#'
-  MAINTAINER_MODE_FALSE=
-fi
-  MAINT=$MAINTAINER_MODE_TRUE
-
 ac_config_files="$ac_config_files gob2.spec Makefile src/Makefile doc/Makefile examples/Makefile doc/gob2.1"
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -3334,7 +3718,7 @@ DEFS=-DHAVE_CONFIG_H
 : ${CONFIG_STATUS=./config.status}
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:3337: creating $CONFIG_STATUS" >&5
+{ echo "$as_me:3721: creating $CONFIG_STATUS" >&5
 echo "$as_me: creating $CONFIG_STATUS" >&6;}
 cat >$CONFIG_STATUS <<_ACEOF
 #! $SHELL
@@ -3510,7 +3894,7 @@ cat >>$CONFIG_STATUS <<\EOF
     echo "$ac_cs_version"; exit 0 ;;
   --he | --h)
     # Conflict between --help and --header
-    { { echo "$as_me:3513: error: ambiguous option: $1
+    { { echo "$as_me:3897: error: ambiguous option: $1
 Try \`$0 --help' for more information." >&5
 echo "$as_me: error: ambiguous option: $1
 Try \`$0 --help' for more information." >&2;}
@@ -3529,7 +3913,7 @@ Try \`$0 --help' for more information." >&2;}
     ac_need_defaults=false;;
 
   # This is an error.
-  -*) { { echo "$as_me:3532: error: unrecognized option: $1
+  -*) { { echo "$as_me:3916: error: unrecognized option: $1
 Try \`$0 --help' for more information." >&5
 echo "$as_me: error: unrecognized option: $1
 Try \`$0 --help' for more information." >&2;}
@@ -3579,7 +3963,7 @@ do
   "doc/gob2.1" ) CONFIG_FILES="$CONFIG_FILES doc/gob2.1" ;;
   "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
   "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-  *) { { echo "$as_me:3582: error: invalid argument: $ac_config_target" >&5
+  *) { { echo "$as_me:3966: error: invalid argument: $ac_config_target" >&5
 echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
    { (exit 1); exit 1; }; };;
   esac
@@ -3672,6 +4056,9 @@ s,@AUTOMAKE@,$AUTOMAKE,;t t
 s,@AUTOHEADER@,$AUTOHEADER,;t t
 s,@MAKEINFO@,$MAKEINFO,;t t
 s,@SET_MAKE@,$SET_MAKE,;t t
+s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
+s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
+s,@MAINT@,$MAINT,;t t
 s,@SUBDIRS@,$SUBDIRS,;t t
 s,@DOINSTGOB@,$DOINSTGOB,;t t
 s,@NOINSTGOB@,$NOINSTGOB,;t t
@@ -3693,12 +4080,7 @@ s,@TAR@,$TAR,;t t
 s,@PKG_CONFIG@,$PKG_CONFIG,;t t
 s,@GLIB_CFLAGS@,$GLIB_CFLAGS,;t t
 s,@GLIB_LIBS@,$GLIB_LIBS,;t t
-s,@GLIB_GENMARSHAL@,$GLIB_GENMARSHAL,;t t
-s,@GOBJECT_QUERY@,$GOBJECT_QUERY,;t t
-s,@GLIB_MKENUMS@,$GLIB_MKENUMS,;t t
-s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
-s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
-s,@MAINT@,$MAINT,;t t
+s,@YFLAGS@,$YFLAGS,;t t
 CEOF
 
 EOF
@@ -3813,7 +4195,7 @@ done; }
   esac
 
   if test x"$ac_file" != x-; then
-    { echo "$as_me:3816: creating $ac_file" >&5
+    { echo "$as_me:4198: creating $ac_file" >&5
 echo "$as_me: creating $ac_file" >&6;}
     rm -f "$ac_file"
   fi
@@ -3831,7 +4213,7 @@ echo "$as_me: creating $ac_file" >&6;}
       -) echo $tmp/stdin ;;
       [\\/$]*)
          # Absolute (can't be DOS-style, as IFS=:)
-         test -f "$f" || { { echo "$as_me:3834: error: cannot find input file: $f" >&5
+         test -f "$f" || { { echo "$as_me:4216: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
          echo $f;;
@@ -3844,7 +4226,7 @@ echo "$as_me: error: cannot find input file: $f" >&2;}
            echo $srcdir/$f
          else
            # /dev/null tree
-           { { echo "$as_me:3847: error: cannot find input file: $f" >&5
+           { { echo "$as_me:4229: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
          fi;;
@@ -3905,7 +4287,7 @@ for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
   * )   ac_file_in=$ac_file.in ;;
   esac
 
-  test x"$ac_file" != x- && { echo "$as_me:3908: creating $ac_file" >&5
+  test x"$ac_file" != x- && { echo "$as_me:4290: creating $ac_file" >&5
 echo "$as_me: creating $ac_file" >&6;}
 
   # First look for the input files in the build tree, otherwise in the
@@ -3916,7 +4298,7 @@ echo "$as_me: creating $ac_file" >&6;}
       -) echo $tmp/stdin ;;
       [\\/$]*)
          # Absolute (can't be DOS-style, as IFS=:)
-         test -f "$f" || { { echo "$as_me:3919: error: cannot find input file: $f" >&5
+         test -f "$f" || { { echo "$as_me:4301: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
          echo $f;;
@@ -3929,7 +4311,7 @@ echo "$as_me: error: cannot find input file: $f" >&2;}
            echo $srcdir/$f
          else
            # /dev/null tree
-           { { echo "$as_me:3932: error: cannot find input file: $f" >&5
+           { { echo "$as_me:4314: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
          fi;;
@@ -4046,7 +4428,7 @@ cat >>$CONFIG_STATUS <<\EOF
   rm -f $tmp/in
   if test x"$ac_file" != x-; then
     if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
-      { echo "$as_me:4049: $ac_file is unchanged" >&5
+      { echo "$as_me:4431: $ac_file is unchanged" >&5
 echo "$as_me: $ac_file is unchanged" >&6;}
     else
       ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
index caebd1b5804cb1d89255ab5ce04aa162abdeea5b..52fc52303aa8f7b44cc6e3fbf27a2ecbb32a50eb 100644 (file)
@@ -2,7 +2,10 @@ dnl Process this file with autoconf to produce a configure script.
 AC_PREREQ(2.2)
 AC_INIT(src/treefuncs.h)
 AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(gob2,1.99.1)
+AM_INIT_AUTOMAKE(gob2,1.99.2)
+AM_MAINTAINER_MODE
+
+GLIB_REQUIRED=1.3.12
 
 dnl
 dnl  An utter hack to allow embedding of gob inside other packages.
@@ -25,6 +28,7 @@ AC_SUBST(DOINSTGOB)
 AC_SUBST(NOINSTGOB)
 
 dnl Checks for programs.
+AC_ISC_POSIX
 AC_PROG_CC
 AC_STDC_HEADERS
 AC_PROG_YACC
@@ -34,7 +38,9 @@ AC_PROG_CPP
 AC_PATH_PROG(RM, rm, /bin/rm)
 AC_PATH_PROG(MV, mv, /bin/mv)
 AC_PATH_PROG(TAR, tar, /bin/tar)
-AM_PATH_GLIB_2_0(1.3.3,,,)
+PKG_CHECK_MODULES(GLIB, glib-2.0 >= $GLIB_REQUIRED)
+AC_SUBST(GLIB_CFLAGS)
+AC_SUBST(GLIB_LIBS)
 dnl We don't check popt since we're not using it at the moment, but
 dnl We just might use it later
 dnl AC_CHECK_LIB(popt,poptGetContext, [POPT_LIB="-lpopt"],
@@ -44,11 +50,10 @@ dnl AC_SUBST(POPT_LIB)
 
 dnl AM_PROG_LIBTOOL
 
-AM_MAINTAINER_MODE
-
 AC_SUBST(CFLAGS)
 AC_SUBST(CPPFLAGS)
 AC_SUBST(LDFLAGS)
+AC_SUBST(YFLAGS)
 
 AC_OUTPUT([
 gob2.spec
index e162ae12fe55ed39038790e5b6bc1bbb78622c35..46de52bde26dd12923dcc998a0aa7d11be573fb2 100644 (file)
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -63,10 +63,7 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 DOINSTGOB = @DOINSTGOB@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
 LDFLAGS = @LDFLAGS@
 LEX = @LEX@
 MAINT = @MAINT@
@@ -79,6 +76,7 @@ RM = @RM@
 TAR = @TAR@
 VERSION = @VERSION@
 YACC = @YACC@
+YFLAGS = @YFLAGS@
 
 man_MANS = gob2.1
 SUBDIRS = 
@@ -184,7 +182,7 @@ maintainer-clean-recursive:
        dot_seen=no; \
        rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
          rev="$$subdir $$rev"; \
-         test "$$subdir" = "." && dot_seen=yes; \
+         test "$$subdir" != "." || dot_seen=yes; \
        done; \
        test "$$dot_seen" = "no" && rev=". $$rev"; \
        target=`echo $@ | sed s/-recursive//`; \
index 43b648c0fa16ee3a0f86d5683ebe67eb0d2829be..efc432067acf73b0c70943ef65e0e47fba6a3c4e 100644 (file)
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -63,10 +63,7 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 DOINSTGOB = @DOINSTGOB@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
 LDFLAGS = @LDFLAGS@
 LEX = @LEX@
 MAINT = @MAINT@
@@ -79,6 +76,7 @@ RM = @RM@
 TAR = @TAR@
 VERSION = @VERSION@
 YACC = @YACC@
+YFLAGS = @YFLAGS@
 
 EXTRA_DIST =   README                          gtk-button-count.gob            my-person.gob                   my-person2.gob                  GNOME_Foo_SomeInterface.idl     foo-some-interface.gob
 
@@ -139,7 +137,7 @@ maintainer-clean-recursive:
        dot_seen=no; \
        rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
          rev="$$subdir $$rev"; \
-         test "$$subdir" = "." && dot_seen=yes; \
+         test "$$subdir" != "." || dot_seen=yes; \
        done; \
        test "$$dot_seen" = "no" && rev=". $$rev"; \
        target=`echo $@ | sed s/-recursive//`; \
index 15aa928c8e9580d9feab4097ffb3e69da1436ca5..40a94731024d0955f19b352753dbe30d2c359cbb 100644 (file)
@@ -3,7 +3,7 @@
  *
  * see GNOME_Foo_SomeInterface.idl
  */
-requires 1.0.9
+requires 1.99.0
 
 %{
 /* some standard includes */
@@ -17,11 +17,11 @@ requires 1.0.9
 #include "foo-some-interface-private.h"
 %}
 
-class Foo:Some:Interface from Bonobo:X:Object
-       (BonoboX GNOME_Foo_SomeInterface)
+class Foo:Some:Interface from Bonobo:Object
+       (BonoboObject GNOME_Foo_SomeInterface)
 {
 
-       BonoboX
+       BonoboObject
        private void
        fooBar (PortableServer_Servant servant,
                const CORBA_char *string,
diff --git a/gob2.m4 b/gob2.m4
index 70a78bb061ba3766d9d444db8753d95cb22f6168..7aca8066555d04b1d8b2a9774b8fb6aafe43d4c4 100644 (file)
--- a/gob2.m4
+++ b/gob2.m4
@@ -12,9 +12,9 @@ AC_DEFUN(GOB2_HOOK,[
                        g_r_ve=`echo $1|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
                        g_r_ma=`echo $1|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
                        g_r_mi=`echo $1|sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
-                       g_ve=`$GOB --version 2>&1|sed 's/Gob version \([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-                       g_ma=`$GOB --version 2>&1|sed 's/Gob version \([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-                       g_mi=`$GOB --version 2>&1|sed 's/Gob version \([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+                       g_ve=`$GOB2 --version 2>&1|sed 's/Gob version \([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+                       g_ma=`$GOB2 --version 2>&1|sed 's/Gob version \([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+                       g_mi=`$GOB2 --version 2>&1|sed 's/Gob version \([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
 
                        if test $g_ve -eq $g_r_ve; then
                                if test $g_ma -ge $g_r_ma; then
index 592628bd174119fe68e63d591105f94dc76a6751..8270b5876b4d8b4d908d52c8e88c9a555e6bfbc8 100644 (file)
--- a/gob2.spec
+++ b/gob2.spec
@@ -1,5 +1,5 @@
-%define  ver     1.99.1
-%define  rel     SNAP
+%define  ver     1.99.2
+%define  rel     1
 %define  prefix  /usr
 
 Summary: GOB2, The GObject Builder
diff --git a/missing b/missing
index 7789652e877fbc83c770377691249820eebea1f2..d46f79f64da74e24a68d2ec91f952f695afc0e8c 100755 (executable)
--- a/missing
+++ b/missing
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
-# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc.
 # Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -23,6 +23,14 @@ if test $# -eq 0; then
   exit 1
 fi
 
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.in; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
 case "$1" in
 
   -h|--h|--he|--hel|--help)
@@ -61,7 +69,7 @@ Supported PROGRAM values:
   aclocal)
     echo 1>&2 "\
 WARNING: \`$1' is missing on your system.  You should only need it if
-         you modified \`acinclude.m4' or \`configure.in'.  You might want
+         you modified \`acinclude.m4' or \`$configure_ac'.  You might want
          to install the \`Automake' and \`Perl' packages.  Grab them from
          any GNU archive site."
     touch aclocal.m4
@@ -70,7 +78,7 @@ WARNING: \`$1' is missing on your system.  You should only need it if
   autoconf)
     echo 1>&2 "\
 WARNING: \`$1' is missing on your system.  You should only need it if
-         you modified \`configure.in'.  You might want to install the
+         you modified \`$configure_ac'.  You might want to install the
          \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
          archive site."
     touch configure
@@ -79,10 +87,10 @@ WARNING: \`$1' is missing on your system.  You should only need it if
   autoheader)
     echo 1>&2 "\
 WARNING: \`$1' is missing on your system.  You should only need it if
-         you modified \`acconfig.h' or \`configure.in'.  You might want
+         you modified \`acconfig.h' or \`$configure_ac'.  You might want
          to install the \`Autoconf' and \`GNU m4' packages.  Grab them
          from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in`
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' $configure_ac`
     test -z "$files" && files="config.h"
     touch_files=
     for f in $files; do
@@ -98,7 +106,7 @@ WARNING: \`$1' is missing on your system.  You should only need it if
   automake)
     echo 1>&2 "\
 WARNING: \`$1' is missing on your system.  You should only need it if
-         you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
+         you modified \`Makefile.am', \`acinclude.m4' or \`$configure_ac'.
          You might want to install the \`Automake' and \`Perl' packages.
          Grab them from any GNU archive site."
     find . -type f -name Makefile.am -print |
index 769bfc84979b0faa8c6f259192f82712de83562a..6a8b8297ba4c196a8f6ad3b47587e56cc142b038 100644 (file)
@@ -1,10 +1,21 @@
 #YACCFLAGS += -d -t
-YFLAGS += -d -t
+YFLAGS = -d -t
 SUBDIRS =
 
-CFLAGS += -Wall -Wpointer-arith -Wmissing-prototypes -Wmissing-declarations
+CFLAGS = @CFLAGS@ \
+       -Wall                   \
+       -Wpointer-arith         \
+       -Wmissing-prototypes    \
+       -Wmissing-declarations
 
-INCLUDES = @GLIB_CFLAGS@ -I$(includedir)
+DEFS = @DEFS@ \
+       -DPKGDATADIR=\"$(pkgdatadir)\"
+
+INCLUDES = \
+       $(GLIB_CFLAGS)          \
+       -I$(top_builddir)       \
+       -I$(top_srcdir)         \
+       -I$(includedir)
 
 bin_PROGRAMS = @DOINSTGOB@
 noinst_PROGRAMS = @NOINSTGOB@
@@ -34,7 +45,7 @@ gob2_LDADD = \
 # we might want popt back in the future
 #      @POPT_LIB@
 
-CLEANFILES += $(BUILT_SOURCES) test-object.* test-object-private.h
+CLEANFILES = @CLEANFILES@ $(BUILT_SOURCES) test-object.* test-object-private.h
 
 EXTRA_DIST = $(BUILT_SOURCES) test.gob generate_treefuncs.pl treefuncs.def
 
@@ -44,7 +55,7 @@ parse.h parse.c: parse.y
        test -f y.tab.h && mv -f y.tab.h parse.h
 
 test: test-object.c test-object.h
-       $(CC) -g -Wall `pkg-config --cflags gobject-2.0` -c test-object.c
+       $(CC) -g -Wall `pkg-config --cflags gobject-2.0 gtk+-2.0` -c test-object.c
 
 test-object.c test-object.h: test.gob gob2
        ./gob2 test.gob
@@ -52,7 +63,7 @@ test-object.c test-object.h: test.gob gob2
 # can't depend on the header file as that would break the above rule
 # since it's just for testing, who cares
 testcpp: test-object.cc
-       g++ -g -Wall `pkg-config --cflags gobject-2.0` -c test-object.cc
+       g++ -g -Wall `pkg-config --cflags gobject-2.0 gtk+-2.0` -c test-object.cc
 
 test-object.cc: test.gob gob2
        ./gob2 --for-cpp test.gob
index fc33b67a5c003cc52bafa7001c9851180aecab0c..f6bbb5b2149fef79a921a75023992a352c6178e0 100644 (file)
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -64,10 +64,7 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 DOINSTGOB = @DOINSTGOB@
 GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
 GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
 LDFLAGS = @LDFLAGS@
 LEX = @LEX@
 MAINT = @MAINT@
@@ -81,12 +78,17 @@ TAR = @TAR@
 VERSION = @VERSION@
 YACC = @YACC@
 
-YFLAGS =  -d -t
+YFLAGS = -d -t
 SUBDIRS = 
 
-CFLAGS = @CFLAGS@ -Wall -Wpointer-arith -Wmissing-prototypes -Wmissing-declarations
+CFLAGS = @CFLAGS@      -Wall                           -Wpointer-arith                 -Wmissing-prototypes            -Wmissing-declarations
+
+
+DEFS = @DEFS@  -DPKGDATADIR=\"$(pkgdatadir)\"
+
+
+INCLUDES =     $(GLIB_CFLAGS)                  -I$(top_builddir)               -I$(top_srcdir)                 -I$(includedir)
 
-INCLUDES = @GLIB_CFLAGS@ -I$(includedir)
 
 bin_PROGRAMS = @DOINSTGOB@
 noinst_PROGRAMS = @NOINSTGOB@
@@ -103,7 +105,7 @@ gob2_LDADD =        -lm     $(GLIB_LIBS)    @LEXLIB@
 # we might want popt back in the future
 #      @POPT_LIB@
 
-CLEANFILES =  $(BUILT_SOURCES) test-object.* test-object-private.h
+CLEANFILES = @CLEANFILES@ $(BUILT_SOURCES) test-object.* test-object-private.h
 
 EXTRA_DIST = $(BUILT_SOURCES) test.gob generate_treefuncs.pl treefuncs.def
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -111,8 +113,6 @@ CONFIG_HEADER = ../config.h
 CONFIG_CLEAN_FILES = 
 PROGRAMS =  $(bin_PROGRAMS) $(noinst_PROGRAMS)
 
-
-DEFS = @DEFS@ -I. -I$(srcdir) -I..
 LIBS = @LIBS@
 gob2_OBJECTS =  main.o treefuncs.o out.o util.o checks.o parse.o lexer.o
 gob2_DEPENDENCIES = 
@@ -244,7 +244,7 @@ maintainer-clean-recursive:
        dot_seen=no; \
        rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
          rev="$$subdir $$rev"; \
-         test "$$subdir" = "." && dot_seen=yes; \
+         test "$$subdir" != "." || dot_seen=yes; \
        done; \
        test "$$dot_seen" = "no" && rev=". $$rev"; \
        target=`echo $@ | sed s/-recursive//`; \
@@ -322,6 +322,14 @@ distdir: $(DISTFILES)
              || exit 1; \
          fi; \
        done
+checks.o: checks.c ../config.h treefuncs.h main.h util.h checks.h
+lexer.o: lexer.c ../config.h treefuncs.h parse.h main.h util.h
+main.o: main.c ../config.h treefuncs.h parse.h out.h util.h checks.h \
+       main.h
+out.o: out.c main.h out.h
+parse.o: parse.c ../config.h treefuncs.h main.h util.h
+treefuncs.o: treefuncs.c treefuncs.h
+util.o: util.c ../config.h treefuncs.h main.h util.h
 
 info-am:
 info: info-recursive
@@ -413,7 +421,7 @@ parse.h parse.c: parse.y
        test -f y.tab.h && mv -f y.tab.h parse.h
 
 test: test-object.c test-object.h
-       $(CC) -g -Wall `pkg-config --cflags gobject-2.0` -c test-object.c
+       $(CC) -g -Wall `pkg-config --cflags gobject-2.0 gtk+-2.0` -c test-object.c
 
 test-object.c test-object.h: test.gob gob2
        ./gob2 test.gob
@@ -421,7 +429,7 @@ test-object.c test-object.h: test.gob gob2
 # can't depend on the header file as that would break the above rule
 # since it's just for testing, who cares
 testcpp: test-object.cc
-       g++ -g -Wall `pkg-config --cflags gobject-2.0` -c test-object.cc
+       g++ -g -Wall `pkg-config --cflags gobject-2.0 gtk+-2.0` -c test-object.cc
 
 test-object.cc: test.gob gob2
        ./gob2 --for-cpp test.gob
index 8c57c6e86e20c3f9c18844315a577333de746965..dd2c64f68dc2bcfe9ec75a14e57ee3837ca2510c 100644 (file)
@@ -9,6 +9,7 @@
 #define YY_FLEX_MINOR_VERSION 5
 
 #include <stdio.h>
+#include <unistd.h>
 
 
 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
@@ -22,7 +23,6 @@
 #ifdef __cplusplus
 
 #include <stdlib.h>
-#include <unistd.h>
 
 /* Use prototypes in function declarations. */
 #define YY_USE_PROTOS
@@ -284,145 +284,155 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
        *yy_cp = '\0'; \
        yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 106
-#define YY_END_OF_BUFFER 107
-static yyconst short int yy_acclist[554] =
+#define YY_NUM_RULES 110
+#define YY_END_OF_BUFFER 111
+static yyconst short int yy_acclist[606] =
     {   0,
-      107,  104,  106,  103,  104,  106,    1,  105,  106,  104,
-      105,  106,  104,  106,  104,  106,  103,  104,  106,  104,
-      106,  104,  106,   26,  104,  106,    1,   27,  105,  106,
-       26,  104,  105,  106,   26,  104,  106,   26,  104,  106,
-       50,  104,  106,    1,   51,  105,  106,   50,  104,  105,
-      106,   42,   50,  104,  106,   50,  104,  106,   50,  104,
-      106,   50,  104,  106,   48,   50,  104,  106,   49,   50,
-      104,  106,   50,  104,  106,   50,  104,  106,   46,  104,
-      106,    1,   47,  105,  106,   46,  104,  105,  106,   45,
-       46,  104,  106,   46,  104,  106,  104,  106,  104,  106,
-
-      104,  106,   94,  104,  106,   94,  104,  106,  104,  106,
-       97,  104,  106,   97,  104,  106,   97,  104,  106,   97,
-      104,  106,  100,  104,  106,  104,  106,  104,  106,  104,
-      106,   97,  104,  106,   97,  104,  106,   97,  104,  106,
-       97,  104,  106,   97,  104,  106,   97,  104,  106,   97,
-      104,  106,   97,  104,  106,   97,  104,  106,   97,  104,
-      106,   97,  104,  106,   97,  104,  106,  101,  104,  106,
-      102,  104,  106,   91,  104,  106,   43,  104,  106,   92,
-      104,  106,   93,  104,  106,   97,  104,  106,   97,  104,
-      106,   97,  104,  106,   97,  104,  106,   97,  104,  106,
-
-       97,  104,  106,   97,  104,  106,   97,  104,  106,   97,
-      104,  106,   97,  104,  106,   97,  104,  106,   97,  104,
-      106,    9,  104,  106,    9,  104,  105,  106,    9,  104,
-      106,    9,  104,  106,    9,  104,  106,   14,  104,  106,
-       14,  104,  105,  106,   14,  104,  106,   14,  104,  106,
-       14,  104,  106,   17,  104,  106,   17,  104,  105,  106,
-       17,  104,  106,   21,   33,   25,   22,   41,   34,   44,
-       94,   23,   94,   94,   96,   97,   95,   97,   97,   97,
-       24,   99,   97,   97,   97,   97,   97,   97,   97,   97,
-       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
-
-       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
-       97,   97,    8,    6,   13,   10,   12,   11,   13,   16,
-       15,    3,   28,   32,   39,   35,   37,   18,   98,   98,
-       94,   19,   94,   94,   96,   96,   95,   97,   97,   97,
-       69,   20,   97,   97,   97,   97,   97,   97,   97,   64,
-       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
-       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
-       97,   97,   97,   97,   97,   11,   29,   30,   31,   40,
-       36,   38,   96,   97,   55,   97,   54,   97,    5,   97,
-       67,   97,   97,   97,   97,   59,   97,   97,   62,   97,
-
-       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
-       97,   56,   97,   97,   97,   97,   59,   97,   97,   97,
-       97,   79,   97,   97,   97,   97,   85,   97,    7,   52,
-       97,   54,   97,   68,   97,   97,   65,   97,   97,   97,
-       97,   97,   97,   63,   97,   97,   97,   97,   58,   97,
-       97,   97,   80,   97,   97,   97,   97,   84,   97,   97,
-       97,   97,   97,   97,   97,   66,   97,   97,   97,   97,
-       97,   70,   97,   76,   97,   60,   97,   57,   97,   97,
-       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
-       97,   97,   71,   97,   97,   97,   97,   75,   97,   97,
-
-       97,   97,   97,   81,   97,   82,   97,   97,   97,   74,
-       97,   97,   77,   97,   78,   97,   97,   61,   97,   97,
-       97,   97,   97,   97,   97,   73,   97,   72,   97,   97,
-       97,   87,   97,   97,   97,   97,    2,   89,   97,   97,
-       86,   97,   97,   88,   97,    4,   97,   90,   97,   97,
-       83,   97,   53
+      111,  108,  110,  107,  108,  110,    1,  109,  110,  108,
+      109,  110,  108,  110,  108,  110,  108,  110,   98,  108,
+      110,   98,  108,  110,  108,  110,  101,  108,  110,  101,
+      108,  110,  101,  108,  110,  101,  108,  110,  107,  108,
+      110,  108,  110,  108,  110,  101,  108,  110,   27,  108,
+      110,    1,   28,  109,  110,   27,  108,  109,  110,   27,
+      108,  110,   27,  108,  110,   27,  108,  110,   51,  108,
+      110,    1,   52,  109,  110,   51,  108,  109,  110,   43,
+       51,  108,  110,   51,  108,  110,   51,  108,  110,   51,
+      108,  110,   49,   51,  108,  110,   50,   51,  108,  110,
+
+       51,  108,  110,   51,  108,  110,   47,  108,  110,    1,
+       48,  109,  110,   47,  108,  109,  110,   46,   47,  108,
+      110,   47,  108,  110,   47,  108,  110,  108,  110,  101,
+      108,  110,  101,  108,  110,  101,  108,  110,  104,  108,
+      110,  108,  110,  108,  110,  108,  110,  101,  108,  110,
+      101,  108,  110,  101,  108,  110,  101,  108,  110,  101,
+      108,  110,  101,  108,  110,  101,  108,  110,  101,  108,
+      110,  101,  108,  110,  101,  108,  110,  101,  108,  110,
+      101,  108,  110,  105,  108,  110,  106,  108,  110,   95,
+      108,  110,   44,  108,  110,   96,  108,  110,   97,  108,
+
+      110,  101,  108,  110,  101,  108,  110,  101,  108,  110,
+      101,  108,  110,  101,  108,  110,  101,  108,  110,  101,
+      108,  110,  101,  108,  110,  101,  108,  110,  101,  108,
+      110,  101,  108,  110,  101,  108,  110,   10,  108,  110,
+       10,  108,  109,  110,   10,  108,  110,   10,  108,  110,
+       10,  108,  110,   10,  108,  110,   15,  108,  110,   15,
+      108,  109,  110,   15,  108,  110,   15,  108,  110,   15,
+      108,  110,   15,  108,  110,   18,  108,  110,   18,  108,
+      109,  110,   18,  108,  110,   18,  108,  110,   98,   22,
+       98,   98,  100,  101,   99,  101,  101,  101,  101,   34,
+
+      101,   26,   23,   42,   35,   45,   24,  101,  101,  101,
+       25,  103,  101,  101,  101,  101,  101,  101,  101,  101,
+      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
+      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
+      101,  101,    9,    7,   14,   11,   13,   12,   14,   17,
+       16,  102,  102,   98,    3,   98,   98,  100,  100,   99,
+      101,  101,  101,  101,   29,   33,  101,   40,   36,   38,
+       19,   20,  101,  101,  101,   73,   21,  101,  101,  101,
+      101,  101,  101,  101,   68,  101,  101,  101,  101,  101,
+      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
+
+      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
+       12,  100,  101,   55,  101,  101,  101,   30,   31,   32,
+      101,   41,   37,   39,  101,   59,  101,   58,  101,    6,
+      101,   71,  101,  101,  101,  101,   63,  101,  101,   66,
+      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
+      101,  101,   60,  101,  101,  101,  101,   63,  101,  101,
+      101,  101,   83,  101,  101,  101,  101,   89,  101,    8,
+       53,  101,   54,  101,   56,  101,  101,  101,   58,  101,
+       72,  101,  101,   69,  101,  101,  101,  101,  101,  101,
+       67,  101,  101,  101,  101,   62,  101,  101,  101,   84,
+
+      101,  101,  101,  101,   88,  101,  101,  101,  101,  101,
+      101,  101,  101,   70,  101,  101,  101,  101,  101,   74,
+      101,   80,  101,   64,  101,   61,  101,  101,  101,  101,
+      101,  101,  101,  101,  101,  101,  101,    4,  101,  101,
+      101,  101,   75,  101,  101,  101,  101,   79,  101,  101,
+      101,  101,  101,   85,  101,   86,  101,  101,  101,  101,
+       78,  101,  101,   81,  101,   82,  101,  101,   65,  101,
+      101,  101,  101,  101,  101,  101,   77,  101,   76,  101,
+      101,  101,   91,  101,  101,  101,  101,    4,    2,   93,
+      101,  101,   90,  101,  101,   92,  101,    5,  101,   94,
+
+      101,  101,   87,  101,   57
     } ;
 
-static yyconst short int yy_accept[472] =
+static yyconst short int yy_accept[509] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    2,    4,    7,   10,   13,   15,   17,
-       20,   22,   24,   27,   31,   35,   38,   41,   44,   48,
-       52,   56,   59,   62,   65,   69,   73,   76,   79,   82,
-       86,   90,   94,   97,   99,  101,  103,  106,  109,  111,
-      114,  117,  120,  123,  126,  128,  130,  132,  135,  138,
-      141,  144,  147,  150,  153,  156,  159,  162,  165,  168,
-      171,  174,  177,  180,  183,  186,  189,  192,  195,  198,
-      201,  204,  207,  210,  213,  216,  219,  222,  225,  229,
-
-      232,  235,  238,  241,  245,  248,  251,  254,  257,  261,
-      264,  265,  265,  265,  265,  265,  265,  265,  265,  266,
-      266,  267,  267,  267,  267,  267,  267,  268,  268,  269,
-      269,  269,  270,  271,  271,  271,  272,  273,  273,  273,
-      274,  274,  274,  275,  276,  277,  278,  279,  280,  281,
-      281,  282,  282,  282,  282,  283,  284,  285,  286,  287,
-      288,  289,  290,  291,  292,  293,  294,  295,  296,  297,
-      298,  299,  300,  301,  302,  303,  304,  305,  306,  307,
-      308,  309,  310,  311,  312,  313,  314,  314,  314,  314,
-      315,  315,  316,  316,  316,  316,  317,  318,  318,  320,
-
-      321,  322,  322,  323,  323,  323,  323,  324,  324,  324,
-      325,  325,  325,  325,  325,  326,  326,  326,  326,  327,
-      328,  328,  329,  329,  330,  330,  331,  332,  332,  333,
-      334,  335,  336,  337,  338,  339,  340,  341,  342,  342,
-      342,  343,  343,  343,  344,  345,  346,  347,  348,  349,
-      350,  352,  353,  354,  355,  356,  357,  358,  359,  360,
-      361,  362,  363,  364,  365,  366,  367,  368,  369,  370,
-      371,  372,  373,  374,  375,  376,  376,  377,  377,  377,
-      378,  378,  379,  380,  380,  380,  380,  381,  382,  383,
-      383,  384,  385,  387,  389,  389,  390,  391,  393,  394,
-
-      395,  396,  398,  399,  401,  402,  403,  404,  405,  406,
-      407,  408,  409,  410,  411,  412,  414,  415,  416,  417,
-      419,  420,  421,  422,  424,  425,  426,  427,  429,  429,
-      430,  430,  430,  431,  431,  431,  431,  431,  431,  431,
-      432,  434,  436,  437,  439,  440,  441,  442,  443,  444,
-      446,  447,  448,  449,  451,  452,  453,  455,  456,  457,
-      458,  460,  461,  462,  463,  464,  464,  464,  464,  464,
-      464,  464,  465,  466,  468,  469,  470,  471,  472,  474,
-      476,  478,  480,  481,  482,  483,  484,  485,  486,  487,
-      488,  489,  490,  490,  490,  490,  490,  490,  491,  492,
-
-      493,  495,  496,  497,  498,  500,  501,  502,  503,  504,
-      506,  508,  509,  510,  510,  510,  510,  510,  510,  512,
-      513,  515,  517,  518,  520,  521,  522,  523,  524,  525,
-      526,  526,  526,  526,  526,  526,  526,  528,  530,  531,
-      532,  534,  535,  536,  537,  537,  537,  537,  538,  538,
-      540,  541,  543,  544,  546,  546,  546,  546,  547,  548,
-      550,  550,  550,  551,  551,  551,  553,  553,  553,  554,
-      554
+       19,   22,   25,   27,   30,   33,   36,   39,   42,   44,
+       46,   49,   52,   56,   60,   63,   66,   69,   72,   76,
+       80,   84,   87,   90,   93,   97,  101,  104,  107,  110,
+      114,  118,  122,  125,  128,  130,  133,  136,  139,  142,
+      144,  146,  148,  151,  154,  157,  160,  163,  166,  169,
+      172,  175,  178,  181,  184,  187,  190,  193,  196,  199,
+      202,  205,  208,  211,  214,  217,  220,  223,  226,  229,
+
+      232,  235,  238,  241,  245,  248,  251,  254,  257,  260,
+      264,  267,  270,  273,  276,  279,  283,  286,  289,  289,
+      289,  290,  291,  291,  291,  292,  292,  292,  293,  294,
+      295,  296,  297,  298,  299,  300,  300,  300,  300,  300,
+      300,  300,  300,  301,  302,  303,  303,  303,  303,  303,
+      303,  304,  304,  305,  305,  305,  306,  307,  308,  308,
+      309,  310,  311,  311,  312,  312,  312,  312,  313,  314,
+      315,  316,  317,  318,  319,  320,  321,  322,  323,  324,
+      325,  326,  327,  328,  329,  330,  331,  332,  333,  334,
+      335,  336,  337,  338,  339,  340,  341,  342,  343,  344,
+
+      344,  344,  344,  345,  345,  346,  346,  346,  346,  347,
+      348,  348,  350,  351,  352,  353,  353,  354,  355,  355,
+      356,  357,  358,  359,  360,  361,  362,  363,  364,  365,
+      365,  365,  365,  365,  366,  366,  366,  367,  367,  367,
+      368,  368,  369,  369,  369,  369,  370,  371,  371,  372,
+      372,  372,  373,  374,  375,  376,  377,  377,  377,  378,
+      378,  378,  379,  380,  381,  382,  383,  384,  385,  387,
+      388,  389,  390,  391,  392,  393,  394,  395,  396,  397,
+      398,  399,  400,  401,  402,  403,  404,  405,  406,  407,
+      408,  409,  410,  411,  411,  412,  413,  414,  416,  417,
+
+      418,  418,  418,  418,  419,  419,  420,  421,  421,  422,
+      422,  423,  424,  425,  425,  426,  428,  430,  430,  431,
+      432,  434,  435,  436,  437,  439,  440,  442,  443,  444,
+      445,  446,  447,  448,  449,  450,  451,  452,  453,  455,
+      456,  457,  458,  460,  461,  462,  463,  465,  466,  467,
+      468,  470,  470,  471,  471,  471,  473,  475,  477,  477,
+      477,  477,  477,  477,  478,  478,  478,  479,  481,  483,
+      484,  486,  487,  488,  489,  490,  491,  493,  494,  495,
+      496,  498,  499,  500,  502,  503,  504,  505,  507,  508,
+      509,  510,  511,  511,  511,  511,  511,  511,  512,  512,
+
+      512,  513,  514,  516,  517,  518,  519,  520,  522,  524,
+      526,  528,  529,  530,  531,  532,  533,  534,  535,  536,
+      537,  538,  538,  539,  539,  539,  540,  540,  540,  541,
+      542,  543,  545,  546,  547,  548,  550,  551,  552,  553,
+      554,  556,  558,  559,  560,  560,  560,  560,  560,  561,
+      561,  561,  563,  564,  566,  568,  569,  571,  572,  573,
+      574,  575,  576,  577,  577,  577,  577,  577,  577,  577,
+      577,  577,  579,  581,  582,  583,  585,  586,  587,  588,
+      588,  589,  589,  589,  589,  590,  590,  592,  593,  595,
+      596,  598,  598,  598,  598,  599,  600,  602,  602,  602,
+
+      603,  603,  603,  605,  605,  605,  606,  606
     } ;
 
 static yyconst int yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
+        1,    4,    5,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    5,    1,    6,    7,    1,    8,    1,    9,   10,
-       11,   12,    1,    1,    1,   13,   14,   15,   16,   17,
-       17,   17,   17,   17,   17,   18,   18,   19,    1,   20,
-        1,   21,    1,    1,   22,   22,   22,   22,   23,   22,
-       24,   24,   25,   24,   24,   24,   24,   24,   24,   24,
-       24,   26,   27,   24,   24,   24,   24,   24,   24,   24,
-       28,   29,   30,    1,   31,    1,   32,   33,   34,   35,
-
-       36,   37,   38,   39,   40,   41,   42,   43,   44,   45,
-       46,   47,   48,   49,   50,   51,   52,   53,   54,   55,
-       56,   24,   57,    1,   58,    1,    1,    1,    1,    1,
+        1,    6,    1,    7,    8,    1,    9,    1,   10,   11,
+       12,   13,    1,    1,    1,   14,   15,   16,   17,   18,
+       18,   18,   18,   18,   18,   19,   19,   20,    1,   21,
+        1,   22,    1,    1,   23,   23,   23,   23,   24,   23,
+       25,   25,   26,   25,   25,   25,   25,   25,   25,   25,
+       25,   27,   28,   25,   25,   25,   25,   25,   25,   25,
+       29,   30,   31,    1,   32,    1,   33,   34,   35,   36,
+
+       37,   38,   39,   40,   41,   42,   43,   44,   45,   46,
+       47,   48,   49,   50,   51,   52,   53,   54,   55,   56,
+       57,   25,   58,    1,   59,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -439,394 +449,428 @@ static yyconst int yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst int yy_meta[59] =
+static yyconst int yy_meta[60] =
     {   0,
-        1,    2,    3,    1,    2,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    4,    4,    4,    4,    5,    1,
-        1,    6,    6,    7,    7,    7,    7,    1,    1,    8,
-        7,    6,    6,    6,    6,    6,    6,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    1,    1
+        1,    2,    3,    4,    4,    2,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    5,    5,    5,    5,    6,
+        1,    1,    7,    7,    8,    8,    8,    8,    1,    1,
+        9,    8,    7,    7,    7,    7,    7,    7,    8,    8,
+        8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
+        8,    8,    8,    8,    8,    8,    8,    1,    1
     } ;
 
-static yyconst short int yy_base[499] =
+static yyconst short int yy_base[536] =
     {   0,
-        0,    4,    7,   12,   17,   73,   26,   36,  131,    0,
-      177,    0,   33,   34,  230,    0,   24,   47,   54,   91,
-       57,   60, 1099, 1100, 1100, 1100, 1100,   21, 1055,  190,
-       60, 1061, 1100, 1100, 1100, 1082, 1068, 1100, 1100, 1100,
-     1100,  190,   42,    0, 1100, 1100,   81, 1036, 1100, 1100,
-     1100, 1100,    0, 1064,   93,   86,  236,  107,    0, 1073,
-       54,   69,    6, 1100,  184,   92,   97,   70,  179,   59,
-      187,  185,  188,   82,  184,  207,  239,  197,  175, 1100,
-     1100, 1100, 1100, 1100, 1100,  226,  249,  265,  212,  219,
-      266,   22,  227,   97,  270,  236,  267, 1100, 1100, 1077,
-
-      291,  302, 1100, 1100, 1076,  310,  315, 1086, 1085,  247,
-     1100, 1084, 1054,  292, 1049,  257,  283,  284, 1100, 1036,
-     1100,    0, 1074,  293, 1073, 1072, 1100, 1077, 1100,  323,
-     1034, 1100, 1100, 1069, 1068,  320, 1100, 1073,  327,  339,
-      349,    0,  355, 1056, 1055, 1054,  307,  312,  313, 1059,
-     1059, 1067,  331, 1039, 1040,  340,  350,  355,  341,  191,
-      356,  357,  358,  360,  361,  364,  362,  365,  369,  366,
-      372,  370,  373,  371,  374,  377,  375,  398,  379,  380,
-      174,  283,  382,  383,  381, 1100,  430,  434,  438, 1100,
-      443, 1100,  445,  449,  453, 1100,  457, 1053, 1100, 1100,
-
-     1100, 1063, 1100, 1015, 1021, 1006, 1100, 1030, 1004, 1100,
-     1003, 1019, 1006, 1031, 1100, 1047, 1046, 1045, 1100, 1100,
-     1050, 1100, 1018, 1100, 1042, 1041,  449, 1046, 1100,  453,
-        0, 1029, 1028, 1027,  399,  434,  453, 1100,  471, 1042,
-     1100, 1014,  464,  456,  458,  464,  465,  387,  466,  467,
-     1024,  468,  469,  470,  473,  474,  472,  471,  476,  479,
-      482,  478,  477,  481,  397,  494,  483,  500,  492,  512,
-      514,  515,  516,  517,  518,  538, 1100,  992,  488, 1100,
-     1006, 1100, 1100,  987,  999, 1013, 1100, 1100, 1100,  994,
-     1017,  523, 1016, 1015,  544, 1100,  525, 1014,  531,  534,
-
-      536, 1013,  539, 1012,  540,  542,  541,  544,  546,  545,
-      551,  548,  547,  553,  549, 1011,  405,  559,  552,  557,
-      556,  565,  574, 1010,  576,  578,  579, 1009,  597, 1100,
-      609,  614, 1100,  981,  990,  993,  975,    0,  971,  584,
-      586, 1003,  588, 1002,  589,  594,  602,  604,  607, 1001,
-      606,  608,  611, 1000,  612,  614,  999,  613,  615,  616,
-      617,  618,  620,  623,  628,  970,  967,  964,  978,  990,
-      977,  631,  633,  992,  634,  635,  636,  637,  991,  990,
-      984,  976,  641,  642,  644,  645,  646,  647,  649,  656,
-      659,  660,  629,  944,  929,  963,  918,  662,  664,  665,
-
-      920,  663,  670,  672,  904,  673,  678,  675,  684,  890,
-      877,  685,  686,  842,  841,  710,  700,  718,  798,  689,
-      797,  791,  691,  790,  702,  695,  705,  708,  709,  711,
-      753,  756,  729,  735,  745,  737,  772,  761,  718,  740,
-      760,  745,  719,  748,  707,  758,  771, 1100,  762,  490,
-      750,  486,  758,  485,  391,  780,  764, 1100,  759,  311,
-      235,  786,  771,   77,  797,    3,  803,  730, 1100, 1100,
-      821,  829,  837,  845,  853,  861,  869,  877,  885,  893,
-      896,  900,  904,  912,  920,  928,  936,  944,  949,  952,
-      956,  963,  968,  975,  979,  985,  992, 1000
-
+        0,   58,   58,   65,   69,  126,   80,   85,   60,   86,
+      172, 1204,  102,  111,  225, 1203,  101,  149,  140,  158,
+      162,  165, 1210, 1213, 1213, 1213, 1213, 1179,  163,   67,
+      177,  225,    0, 1188,   42,   57,   45,  196,  103,  164,
+      105, 1213, 1213, 1213, 1192,  114, 1178, 1213, 1213, 1213,
+     1213,  169,   87,    0, 1213, 1213,  209, 1146, 1213, 1213,
+     1213, 1213,    0,  212,  117,  130,   61,  149, 1213,  266,
+      175,  270,  197,  255,   49,  157,  139,  209,  201,  152,
+      214,  270,  245,  272, 1213, 1213, 1213, 1213, 1213, 1213,
+      261,  274,  278,  254,  273,  283,  277,  215,  218,  286,
+
+      276,  284, 1213, 1213, 1189,  326,  328,  334, 1213, 1213,
+     1188,  339,  340,  341, 1199, 1198,  242,  355, 1190, 1189,
+      346, 1213, 1195,  350,  357,  363,    0,  369, 1177, 1176,
+     1175,  287,  339,  303,  315,  387, 1157,  388, 1152,  351,
+      354,  218, 1213,  358, 1213,    0, 1182,  343, 1181, 1180,
+     1213, 1186, 1213,  394, 1142, 1213, 1213, 1213, 1184,  377,
+      378,  385, 1172, 1172, 1181,  397, 1152, 1153,  331,  384,
+      388,  309,  391,  398,  399,  400,  402,  403,  409,  407,
+      410,  404,  411,  413,  416,  414,  419,  422,  425,  427,
+      429,  433,  438,  439,  440,  445,  447,  448, 1213,  475,
+
+      467,  488, 1213,  495, 1213,  497,  502,  510, 1213,  516,
+     1166, 1213, 1213, 1213, 1213, 1170, 1169,  507, 1175, 1213,
+      511,    0, 1157, 1156, 1155,  451,  455,  459,  472, 1125,
+     1127, 1128, 1113, 1213, 1137, 1111, 1213, 1110, 1126,  467,
+     1139, 1213, 1155, 1154, 1153, 1213, 1213, 1159, 1213, 1126,
+     1157, 1213,  463,  487,  489, 1213,  531, 1156, 1213, 1127,
+      525,  501,  511,  515,  516,  518,  519,  525, 1137,  526,
+      527,  528,  531,  529,  530,  535,  533,  537,  548,  539,
+      540,  542,  550,  552,  543,  551,  554,  555,  558,  573,
+      574,  577,  578,  597, 1213, 1136,  582, 1135,  584,  585,
+
+     1101, 1116,  554, 1213, 1116, 1213, 1213, 1097,  588, 1124,
+     1213, 1213, 1213, 1105,  589, 1128, 1127,  616, 1213,  593,
+     1126,  591,  594,  600, 1125,  596, 1124,  601,  604,  606,
+      608,  611,  605,  621,  612,  607,  610,  615, 1123,  630,
+      619,  636,  639,  640,  641,  642, 1122,  643,  645,  646,
+     1121,  667, 1213,  673,  678, 1120, 1119, 1118, 1096,  686,
+     1089, 1098, 1101,  647,    0, 1080,  657,  652, 1112,  662,
+     1111,  654,  665,  676,  678,  680, 1110,  681,  682,  683,
+     1109,  684,  686, 1108,  688,  685,  689,  690,  691,  692,
+      694,  696, 1077,  721, 1078, 1075, 1072,  711, 1099, 1086,
+
+      701,  712, 1095,  713,  714,  704,  716, 1087, 1086, 1077,
+     1070,  722,  723,  730,  732,  734,  735,  738,  740,  737,
+      741, 1044,  760,  712, 1043,  743, 1068, 1036,  745,  752,
+      753, 1018,  751,  755,  760, 1006,  754,  766,  761,  769,
+      989,  983,  775,  779,  944,  979,  924,  870,  798,  784,
+      804,  889,  785,  888,  886,  787,  885,  792,  793,  794,
+      795,  796,  797,  818,  897,  838,  838,  832,  838,  846,
+      812,  819,  810,  805,  808,  801,  809,  812,  815,  562,
+     1213,  460,  852,  860, 1213,  837,  465,  817,  340,  847,
+      292,  273,  864,  866, 1213,  854,  234,  215,  873,  865,
+
+      150,  877,  172,  895,  897, 1213, 1213,  914,  923,  932,
+      941,  950,  959,  968,  971,  975,  983,  992,  997, 1006,
+     1015, 1020, 1023, 1027, 1035, 1044, 1053, 1062, 1067, 1075,
+     1079, 1086, 1094, 1103, 1112
     } ;
 
-static yyconst short int yy_def[499] =
+static yyconst short int yy_def[536] =
     {   0,
-      471,  471,  472,  472,  473,  473,  474,  474,  470,    9,
-        9,   11,    9,    9,    9,   15,  475,  475,  476,  476,
-      477,  477,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  478,  470,  470,  470,  470,  470,  470,
-      470,  470,  479,  480,  470,  470,  470,  470,  481,  482,
-      482,  482,  482,  470,  470,  470,  483,  482,  482,  482,
-      482,  482,  482,  482,  482,  482,  482,  482,  482,  470,
-      470,  470,  470,  470,  470,  482,  482,  482,  482,  482,
-      482,  482,  482,  482,  482,  482,  482,  470,  470,  470,
-
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  484,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  485,  470,  470,  470,  470,  470,  486,  470,  470,
-      470,  470,  470,  470,  487,  470,  470,  488,  470,  470,
-      470,  489,  470,  490,  482,  491,  482,  482,  482,  470,
-      470,  492,  470,  493,  470,  482,  482,  482,  482,  482,
-      482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
-      482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
-      482,  482,  482,  482,  482,  470,  470,  470,  470,  470,
-      494,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-
-      470,  484,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      486,  470,  470,  470,  470,  470,  470,  488,  470,  470,
-      489,  490,  495,  491,  482,  482,  482,  470,  470,  492,
-      470,  493,  483,  482,  482,  482,  482,  482,  482,  482,
-      482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
-      482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
-      482,  482,  482,  482,  482,  496,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      495,  482,  482,  482,  470,  470,  482,  482,  482,  482,
-
-      482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
-      482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
-      482,  482,  482,  482,  482,  482,  482,  482,  470,  470,
-      496,  470,  470,  470,  470,  470,  470,  497,  470,  482,
-      482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
-      482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
-      482,  482,  482,  482,  482,  470,  470,  470,  470,  470,
-      470,  482,  482,  482,  482,  482,  482,  482,  482,  482,
-      482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
-      482,  482,  470,  470,  470,  470,  470,  482,  482,  482,
-
-      482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
-      482,  482,  482,  470,  470,  470,  470,  470,  482,  482,
-      482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
-      470,  470,  470,  470,  470,  470,  482,  482,  482,  482,
-      482,  482,  482,  482,  470,  470,  470,  470,  498,  482,
-      482,  482,  482,  482,  470,  470,  498,  470,  482,  482,
-      470,  470,  482,  470,  470,  482,  470,  470,  470,    0,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470
-
+      507,    1,  508,  508,  509,  509,  510,  510,    1,    1,
+        1,   11,    1,    1,    1,   15,  511,  511,  512,  512,
+      513,  513,  507,  507,  507,  507,  507,  514,  507,  507,
+      507,  507,  515,  516,  516,  516,  516,  507,  507,  507,
+      516,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  517,  507,  507,  507,  507,  507,  507,
+      507,  507,  518,  507,  507,  516,  516,  516,  507,  507,
+      507,  519,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  507,  507,  507,  507,  507,  507,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+
+      516,  516,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  520,
+      507,  507,  521,  507,  507,  507,  522,  507,  523,  516,
+      524,  516,  516,  516,  516,  507,  507,  507,  507,  507,
+      507,  507,  507,  516,  507,  525,  507,  507,  507,  507,
+      507,  526,  507,  507,  507,  507,  507,  507,  527,  516,
+      516,  516,  507,  507,  528,  507,  529,  507,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  507,  507,
+
+      507,  507,  507,  530,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  521,  507,
+      507,  522,  523,  531,  524,  516,  516,  516,  516,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  516,
+      507,  507,  507,  507,  507,  507,  507,  526,  507,  507,
+      527,  507,  516,  516,  516,  507,  507,  528,  507,  529,
+      519,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  532,  507,  531,  516,  516,  516,  516,
+
+      507,  507,  507,  507,  507,  507,  507,  507,  516,  507,
+      507,  507,  507,  507,  516,  516,  516,  507,  507,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  507,  507,  532,  507,  516,  516,  516,  507,  507,
+      507,  507,  507,  516,  533,  507,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  507,  507,  507,  507,  507,  516,  507,  507,
+
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  507,  507,  507,  507,  516,  507,  507,  516,  516,
+      516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  516,  507,  507,  507,  507,  516,  507,
+      507,  516,  516,  516,  516,  516,  516,  516,  516,  516,
+      516,  516,  516,  507,  534,  507,  507,  507,  507,  507,
+      507,  516,  516,  516,  516,  516,  516,  516,  516,  534,
+      507,  507,  507,  507,  507,  535,  516,  516,  516,  516,
+      516,  507,  507,  535,  507,  516,  516,  507,  507,  516,
+
+      507,  507,  516,  507,  507,  507,    0,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507
     } ;
 
-static yyconst short int yy_nxt[1159] =
+static yyconst short int yy_nxt[1273] =
     {   0,
-      470,   25,   26,   27,   25,   30,   26,   27,   30,   34,
-       35,   31,  470,   28,   34,   35,  470,   28,   36,   39,
-       40,  146,   41,   36,  146,   42,   26,   99,   50,   51,
-       43,   52,  111,   29,  112,  100,   37,   29,   50,   51,
-      146,   52,   82,   82,  149,   44,   24,   24,  101,   26,
-       99,  101,   32,  127,   53,  128,   26,  104,  102,   26,
-      109,  181,   26,  109,   53,  105,   60,   60,  110,   60,
-       60,  110,  146,   45,   46,   39,   40,  146,   41,   47,
-       48,   42,  130,   60,   60,  130,   43,  146,  146,   24,
-       24,  116,  106,   26,  104,  106,  147,  137,  117,  138,
-
-      146,   44,  107,  151,  160,  152,  118,  136,  136,  136,
-      136,  153,  153,  153,  153,  146,  119,  148,  156,  139,
-      131,  143,  143,  143,  143,  211,  155,  164,  183,   45,
-       46,   24,   25,   26,   27,   25,   24,   24,   24,   54,
-       24,   24,   24,   55,   56,   57,   58,   58,   58,   59,
-       24,   24,   60,   60,   60,   60,   60,   60,   24,   24,
-       24,   60,   60,   60,   61,   60,   60,   62,   60,   60,
-       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
-       60,   63,   60,   60,   60,   60,   60,   64,   24,   65,
-       66,  114,  146,  146,  114,  123,  150,  146,  136,  136,
-
-      136,  136,  146,  146,   67,  146,  146,  271,   68,  146,
-       69,   70,   71,   72,  172,  146,   73,  157,  124,   74,
-      173,  158,   75,   76,  159,  146,   77,  162,   78,   79,
-      146,  161,  163,   80,   81,   83,  165,  146,  115,   84,
-       85,  171,  248,   24,  146,  146,  125,  126,  139,  200,
-      140,  140,  140,  141,  146,  166,  177,  146,  167,  182,
-      201,  178,   86,   87,   88,   89,   90,  146,  174,   73,
-      464,  175,   74,   91,   92,   93,   94,  168,  169,   95,
-       96,   78,   97,  146,  146,  146,   24,  157,  146,  170,
-      142,  185,  187,  114,  159,  187,  114,  179,  216,  205,
-
-      176,  146,  188,  189,  190,  180,  191,  206,  168,  184,
-      160,  193,  173,  207,  193,  186,  195,  196,  208,  197,
-      170,  194,  211,  272,  130,  146,  198,  130,  199,  146,
-      146,  146,  212,  209,  227,  227,  227,  227,  235,  210,
-      115,  230,  230,  230,  230,  153,  153,  153,  153,  217,
-      218,  139,  237,  140,  140,  140,  141,  236,  146,  146,
-      155,  139,  131,  141,  141,  141,  141,  139,  146,  143,
-      143,  143,  143,  146,  146,  146,  146,  244,  146,  146,
-      146,  245,  146,  146,  146,  247,  246,  146,  146,  146,
-      146,  146,  146,  146,  256,  146,  253,  146,  146,  146,
-
-      146,  146,  250,  254,  252,  146,  258,  249,  251,  255,
-      257,  260,  263,  266,  259,  146,  146,  146,  262,  301,
-      274,  261,  264,  146,  270,  461,  267,  275,  265,  268,
-      273,  187,  318,  269,  187,  189,  190,  357,  191,  189,
-      190,  188,  189,  250,  189,  190,  193,  189,  292,  193,
-      195,  196,  146,  197,  195,  196,  194,  195,  195,  196,
-      198,  195,  277,  227,  227,  227,  227,  230,  230,  230,
-      230,  146,  295,  296,  146,  295,  146,  293,  153,  153,
-      153,  153,  146,  146,  146,  146,  146,  146,  146,  146,
-      146,  146,  146,  155,  146,  146,  146,  146,  303,  146,
-
-      146,  146,  294,  146,  146,  304,  298,  297,  146,  302,
-      146,  316,  146,  299,  300,  311,  309,  305,  146,  307,
-      310,  314,  306,  308,  313,  319,  320,  312,  315,  317,
-      146,  322,  146,  146,  146,  146,  146,  321,  334,  329,
-      330,  146,  329,  146,  207,  295,  296,  326,  295,  146,
-      325,  323,  146,  328,  146,  324,  332,  146,  146,  146,
-      146,  327,  146,  146,  146,  146,  146,  146,  340,  146,
-      146,  146,  294,  346,  146,  146,  347,  146,  343,  348,
-      341,  353,  351,  146,  342,  349,  352,  360,  345,  344,
-      355,  354,  146,  358,  146,  350,  146,  146,  329,  330,
-
-      356,  329,  146,  359,  146,  361,  146,  146,  362,  364,
-      329,  330,  146,  329,  352,  329,  330,  363,  329,  372,
-      146,  365,  146,  374,  146,  146,  146,  332,  375,  146,
-      146,  146,  146,  146,  146,  146,  146,  378,  146,  373,
-      379,  146,  381,  385,  376,  384,  146,  388,  380,  146,
-      377,  146,  146,  146,  146,  146,  383,  386,  392,  146,
-      146,  382,  146,  146,  146,  146,  387,  146,  400,  389,
-      401,  390,  399,  391,  146,  398,  404,  146,  146,  414,
-      146,  146,  146,  146,  405,  210,  402,  403,  146,  412,
-      146,  146,  410,  146,  406,  407,  146,  409,  420,  411,
-
-      421,  408,  146,  146,  146,  423,  424,  146,  426,  146,
-      413,  433,  419,  146,  433,  434,  435,  435,  422,  436,
-      146,  427,  436,  146,  437,  438,  146,  146,  425,  146,
-      433,  468,  469,  433,  468,  429,  146,  146,  455,  428,
-      441,  430,  449,  446,  446,  446,  446,  440,  439,  447,
-      447,  447,  447,  450,  442,  448,  449,  444,  146,  447,
-      447,  447,  447,  146,  443,  453,  146,  458,  146,  458,
-      456,  451,  446,  446,  446,  446,  146,  146,  146,  146,
-      452,  448,  458,  454,  458,  447,  447,  447,  447,  146,
-      146,  445,  459,  460,  462,  462,  462,  462,  465,  209,
-
-      462,  462,  462,  462,  468,  469,  466,  468,  146,  146,
-      463,  467,  467,  467,  467,  146,  146,  467,  467,  467,
-      467,   24,   24,   24,   24,   24,   24,   24,   24,   33,
-       33,   33,   33,   33,   33,   33,   33,   38,   38,   38,
-       38,   38,   38,   38,   38,   49,   49,   49,   49,   49,
-       49,   49,   49,   98,   98,   98,   98,   98,   98,   98,
-       98,  103,  103,  103,  103,  103,  103,  103,  103,  108,
-      108,  108,  108,  108,  108,  108,  108,  129,  129,  432,
-      129,  129,  129,  129,  129,  133,  133,  431,  133,  133,
-      133,  133,  133,  134,  134,  146,  134,  134,  134,  134,
-
-      134,  144,  144,  145,  145,  145,  145,  154,  146,  154,
-      154,  154,  202,  202,  202,  202,  202,  202,  202,  202,
-      214,  214,  146,  214,  214,  214,  214,  214,  221,  221,
-      221,  221,  221,  221,  221,  221,  225,  225,  146,  225,
-      225,  225,  225,  225,  228,  228,  228,  228,  228,  228,
-      228,  228,  231,  418,  231,  232,  232,  232,  232,  234,
-      234,  234,  234,  240,  240,  240,  240,  240,  240,  240,
-      240,  242,  417,  242,  242,  242,  276,  276,  416,  415,
-      276,  276,  291,  291,  291,  291,  331,  331,  331,  331,
-      331,  331,  370,  370,  146,  370,  370,  370,  370,  370,
-
-      457,  457,  146,  457,  457,  457,  457,  457,  146,  146,
-      146,  397,  396,  395,  394,  393,  206,  146,  146,  146,
-      146,  146,  371,  369,  368,  367,  366,  146,  146,  146,
-      146,  146,  146,  146,  146,  233,  339,  338,  337,  336,
-      335,  333,  146,  155,  241,  146,  233,  233,  229,  224,
-      224,  290,  222,  289,  288,  287,  286,  285,  284,  283,
-      282,  281,  280,  279,  278,  203,  277,  243,  155,  241,
-      239,  238,  146,  146,  233,  229,  226,  224,  223,  222,
-      220,  219,  215,  213,  120,  204,  203,  200,  200,  192,
-      186,  146,  135,  132,  122,  121,  120,  113,  470,   23,
-
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470
+       24,   25,   26,   25,   27,   25,   24,   24,   24,   28,
+       24,   24,   24,   29,   30,   31,   32,   32,   32,   33,
+       24,   24,   34,   34,   34,   34,   34,   34,   24,   24,
+       24,   34,   34,   34,   35,   34,   36,   37,   34,   34,
+       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
+       34,   34,   34,   34,   34,   34,   34,   24,   24,   38,
+       43,  131,   44,   38,  131,   39,   40,   43,  131,   44,
+       45,   49,   46,   50,   65,   51,  131,   45,   52,  122,
+      131,  123,   60,   53,   61,  132,   62,   60,  135,   61,
+       47,   62,   64,   39,   66,  173,   34,   67,   54,  151,
+
+       65,  152,  133,   26,  138,  104,  134,   41,  138,   63,
+      161,   68,   87,  105,   63,  138,   24,   69,   39,  138,
+       66,   87,   34,   67,  131,   24,   55,   56,   49,  158,
+       50,  159,   51,   57,   58,   52,   34,   68,   34,   34,
+       53,  144,   26,   69,  110,   34,  139,   34,   34,  131,
+      106,   26,  111,  104,  106,   54,  107,  139,  131,  112,
+       26,  108,  110,  112,   26,  113,  116,   26,  131,  116,
+      114,  131,  118,  160,  117,  147,  131,  117,  121,  121,
+      121,  121,  175,   55,   56,   70,   71,  164,  162,  165,
+      124,  131,  125,  125,  125,  126,  140,  136,  148,  238,
+
+       72,  136,  174,  141,   73,  178,   74,   75,   76,   77,
+      154,  142,   78,  138,  154,   79,  131,  138,   80,   81,
+      131,  143,   82,   68,   83,   84,  149,  150,  131,   85,
+       86,   88,  127,  131,  131,   89,   90,  131,  124,   24,
+      128,  128,  128,  128,  213,  137,  169,  177,  195,  155,
+      196,  501,  139,  131,  176,  139,  214,  238,   91,   92,
+       93,   94,   95,  179,  131,   78,  180,  239,   79,   96,
+       97,   98,   99,  131,  131,  100,  101,   83,  102,  163,
+      131,  121,  121,  121,  121,  166,  166,  166,  166,  131,
+      184,  131,  131,  131,  170,  131,  131,  131,  171,  190,
+
+      168,  172,  131,  131,  187,  131,  131,  188,  498,  181,
+      182,  131,  185,  170,  189,  192,  191,  194,  186,  226,
+      172,  183,  131,  193,  173,  181,  197,  200,  131,  138,
+      186,  200,  198,  138,  131,  202,  203,  183,  201,  204,
+      206,  138,  208,  209,  206,  138,  210,  229,  199,  243,
+      131,  207,  228,  211,  265,  212,  138,  213,  131,  131,
+      138,  218,  218,  218,  218,  221,  221,  221,  221,  262,
+      124,  139,  125,  125,  125,  126,  124,  131,  126,  126,
+      126,  126,  124,  139,  128,  128,  128,  128,  136,  138,
+      235,  227,  136,  138,  232,  154,  131,  131,  139,  154,
+
+      244,  245,  233,  131,  131,  236,  240,  131,  234,  253,
+      131,  237,  166,  166,  166,  166,  263,  131,  131,  131,
+      264,  131,  131,  131,  254,  255,  131,  168,  131,  131,
+      131,  139,  131,  131,  155,  131,  137,  139,  131,  271,
+      274,  131,  276,  266,  131,  268,  131,  270,  131,  272,
+      267,  269,  131,  278,  281,  273,  275,  131,  131,  131,
+      277,  286,  284,  279,  131,  280,  131,  131,  202,  203,
+      131,  282,  204,  289,  131,  268,  200,  283,  131,  285,
+      200,  290,  131,  288,  131,  292,  131,  201,  287,  202,
+      203,  131,  492,  202,  291,  293,  202,  203,  206,  298,
+
+      202,  297,  206,  208,  209,  299,  131,  210,  131,  207,
+      300,  208,  209,  315,  211,  208,  295,  208,  209,  309,
+      131,  208,  218,  218,  218,  218,  221,  221,  221,  221,
+      131,  316,  318,  319,  131,  131,  318,  131,  131,  317,
+      166,  166,  166,  166,  131,  131,  131,  131,  131,  131,
+      131,  324,  131,  320,  131,  168,  131,  326,  131,  131,
+      321,  131,  131,  325,  327,  322,  323,  131,  481,  131,
+      131,  131,  332,  131,  131,  339,  328,  131,  330,  333,
+      334,  329,  331,  336,  342,  335,  341,  343,  337,  344,
+      338,  340,  131,  131,  345,  346,  131,  131,  352,  353,
+
+      347,  131,  352,  131,  131,  361,  349,  131,  131,  348,
+      131,  234,  131,  131,  351,  131,  355,  318,  319,  131,
+      131,  318,  350,  131,  131,  131,  131,  131,  364,  131,
+      131,  131,  356,  357,  131,  358,  373,  367,  131,  317,
+      131,  368,  374,  370,  375,  369,  380,  371,  382,  131,
+      372,  376,  381,  378,  385,  131,  377,  379,  131,  131,
+      131,  131,  131,  384,  131,  131,  131,  383,  352,  353,
+      387,  131,  352,  131,  352,  353,  131,  391,  352,  352,
+      353,  131,  379,  352,  131,  389,  390,  394,  386,  392,
+      388,  394,  355,  401,  404,  131,  398,  131,  403,  131,
+
+      131,  131,  131,  131,  131,  131,  402,  131,  131,  131,
+      131,  131,  407,  131,  408,  131,  405,  410,  413,  414,
+      131,  417,  394,  131,  409,  406,  394,  421,  415,  412,
+      131,  131,  131,  131,  411,  131,  423,  423,  423,  423,
+      416,  131,  131,  418,  419,  420,  429,  426,  431,  131,
+      432,  131,  430,  131,  131,  433,  131,  131,  435,  131,
+      131,  446,  131,  447,  131,  446,  436,  434,  443,  237,
+      131,  131,  131,  131,  131,  423,  423,  423,  423,  131,
+      131,  437,  441,  438,  442,  131,  440,  453,  131,  454,
+      439,  456,  444,  449,  131,  457,  452,  459,  131,  468,
+
+      469,  470,  470,  468,  131,  471,  131,  455,  460,  471,
+      458,  131,  131,  131,  131,  131,  131,  131,  486,  468,
+      131,  472,  473,  468,  131,  461,  462,  131,  131,  131,
+      476,  131,  486,  468,  131,  463,  131,  468,  131,  474,
+      488,  487,  477,  495,  479,  489,  475,  483,  483,  483,
+      483,  491,  478,  484,  484,  484,  484,  485,  495,  490,
+      496,  484,  484,  484,  484,  493,  131,  483,  483,  483,
+      483,  485,  495,  131,  482,  484,  484,  484,  484,  499,
+      499,  499,  499,  497,  131,  236,  502,  495,  499,  499,
+      499,  499,  504,  504,  504,  504,  505,  506,  505,  506,
+
+      505,  503,  505,  481,  131,  131,  500,  131,  131,  467,
+      504,  504,  504,  504,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   48,   48,   48,   48,   48,   48,   48,
+       48,   48,   59,   59,   59,   59,   59,   59,   59,   59,
+       59,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      109,  109,  109,  109,  109,  109,  109,  109,  109,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  119,  119,
+      466,  119,  119,  119,  119,  119,  119,  129,  129,  130,
+      130,  130,  130,  153,  153,  465,  153,  153,  153,  153,
+      153,  153,  157,  157,  464,  157,  157,  157,  157,  157,
+
+      157,  167,  131,  167,  167,  167,  216,  216,  131,  216,
+      216,  216,  216,  216,  216,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  222,  131,  222,  223,  223,  223,
+      223,  225,  225,  225,  225,  241,  241,  131,  241,  241,
+      241,  241,  241,  241,  248,  248,  248,  248,  248,  248,
+      248,  248,  248,  251,  251,  251,  251,  251,  251,  251,
+      251,  251,  258,  258,  258,  258,  258,  258,  258,  258,
+      258,  260,  451,  260,  260,  260,  294,  294,  450,  448,
+      445,  294,  294,  296,  296,  296,  296,  354,  354,  131,
+      354,  354,  354,  354,  399,  399,  131,  399,  399,  399,
+
+      399,  399,  399,  480,  480,  131,  131,  480,  480,  480,
+      480,  480,  494,  494,  131,  494,  494,  494,  494,  494,
+      494,  428,  427,  425,  424,  233,  422,  131,  131,  131,
+      131,  131,  400,  397,  396,  395,  393,  131,  131,  131,
+      131,  131,  131,  131,  131,  131,  131,  131,  366,  365,
+      363,  362,  360,  359,  131,  224,  131,  168,  259,  252,
+      314,  249,  313,  312,  311,  310,  308,  307,  306,  305,
+      304,  303,  302,  301,  131,  224,  224,  220,  215,  215,
+      295,  261,  168,  259,  257,  256,  252,  250,  249,  247,
+      246,  242,  231,  230,  131,  131,  224,  220,  217,  215,
+
+      213,  213,  205,  199,  156,  146,  145,  131,  120,  507,
+       39,   39,   23,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507
     } ;
 
-static yyconst short int yy_chk[1159] =
+static yyconst short int yy_chk[1273] =
     {   0,
-        0,    1,    1,    1,    1,    2,    2,    2,    2,    3,
-        3,    2,    0,    1,    4,    4,    0,    2,    3,    5,
-        5,  466,    5,    4,   63,    5,   17,   17,    7,    7,
-        5,    7,   28,    1,   28,   17,    4,    2,    8,    8,
-       92,    8,   13,   14,   63,    5,   13,   14,   18,   18,
-       18,   18,    2,   43,    7,   43,   19,   19,   18,   21,
-       21,   92,   22,   22,    8,   19,   13,   14,   21,   13,
-       14,   22,   61,    5,    5,    6,    6,   70,    6,    6,
-        6,    6,   47,   13,   14,   47,    6,   62,   68,   13,
-       14,   31,   20,   20,   20,   20,   61,   56,   31,   56,
-
-       74,    6,   20,   66,   70,   66,   31,   55,   55,   55,
-       55,   67,   67,   67,   67,   94,   31,   62,   68,   58,
-       47,   58,   58,   58,   58,  464,   67,   74,   94,    6,
-        6,    9,    9,    9,    9,    9,    9,    9,    9,    9,
-        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
-        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
-        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
-        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
-        9,    9,    9,    9,    9,    9,    9,    9,    9,   11,
-       11,   30,  181,   79,   30,   42,   65,   69,   65,   65,
-
-       65,   65,   75,   72,   11,   71,   73,  181,   11,  160,
-       11,   11,   11,   11,   79,   78,   11,   69,   42,   11,
-       79,   69,   11,   11,   69,   76,   11,   72,   11,   11,
-       89,   71,   73,   11,   11,   15,   75,   90,   30,   15,
-       15,   78,  160,   15,   86,   93,   42,   42,   57,  110,
-       57,   57,   57,   57,   96,   76,   89,   77,   76,   93,
-      110,   90,   15,   15,   15,   15,   15,   87,   86,   15,
-      461,   86,   15,   15,   15,   15,   15,   77,   77,   15,
-       15,   15,   15,   88,   91,   97,   15,   87,   95,   77,
-       57,   96,  101,  114,   87,  101,  114,   91,  124,  116,
-
-       88,  182,  101,  102,  102,   91,  102,  116,   95,   95,
-       88,  106,   97,  116,  106,  102,  107,  107,  117,  107,
-       95,  106,  118,  182,  130,  147,  107,  130,  107,  460,
-      148,  149,  118,  117,  136,  136,  136,  136,  147,  117,
-      114,  139,  139,  139,  139,  153,  153,  153,  153,  124,
-      124,  140,  149,  140,  140,  140,  140,  148,  156,  159,
-      153,  141,  130,  141,  141,  141,  141,  143,  157,  143,
-      143,  143,  143,  158,  161,  162,  163,  156,  164,  165,
-      167,  157,  166,  168,  170,  159,  158,  169,  172,  174,
-      171,  173,  175,  177,  167,  176,  165,  179,  180,  185,
-
-      183,  184,  162,  166,  164,  248,  169,  161,  163,  166,
-      168,  171,  173,  176,  170,  265,  178,  235,  172,  248,
-      184,  171,  174,  317,  180,  455,  177,  185,  175,  178,
-      183,  187,  265,  179,  187,  188,  188,  317,  188,  189,
-      189,  187,  189,  178,  191,  191,  193,  191,  235,  193,
-      194,  194,  236,  194,  195,  195,  193,  195,  197,  197,
-      194,  197,  194,  227,  227,  227,  227,  230,  230,  230,
-      230,  237,  239,  239,  244,  239,  245,  236,  243,  243,
-      243,  243,  246,  247,  249,  250,  252,  253,  254,  258,
-      257,  255,  256,  243,  259,  263,  262,  260,  250,  264,
-
-      261,  267,  237,  454,  452,  252,  245,  244,  450,  249,
-      269,  263,  266,  246,  247,  258,  256,  253,  268,  255,
-      257,  261,  254,  255,  260,  266,  267,  259,  262,  264,
-      270,  269,  271,  272,  273,  274,  275,  268,  279,  276,
-      276,  292,  276,  297,  279,  295,  295,  273,  295,  299,
-      272,  270,  300,  275,  301,  271,  276,  303,  305,  307,
-      306,  274,  308,  310,  309,  313,  312,  315,  297,  311,
-      319,  314,  292,  306,  321,  320,  307,  318,  301,  308,
-      299,  312,  311,  322,  300,  309,  311,  320,  305,  303,
-      314,  313,  323,  318,  325,  310,  326,  327,  329,  329,
-
-      315,  329,  340,  319,  341,  321,  343,  345,  322,  325,
-      331,  331,  346,  331,  327,  332,  332,  323,  332,  340,
-      347,  326,  348,  343,  351,  349,  352,  331,  345,  353,
-      355,  358,  356,  359,  360,  361,  362,  348,  363,  341,
-      349,  364,  352,  358,  346,  356,  365,  361,  351,  372,
-      347,  373,  375,  376,  377,  378,  355,  359,  365,  383,
-      384,  353,  385,  386,  387,  388,  360,  389,  375,  362,
-      376,  363,  373,  364,  390,  372,  383,  391,  392,  393,
-      398,  402,  399,  400,  384,  393,  377,  378,  403,  391,
-      404,  406,  389,  408,  385,  386,  407,  388,  399,  390,
-
-      400,  387,  409,  412,  413,  403,  404,  420,  407,  423,
-      392,  416,  398,  426,  416,  417,  417,  417,  402,  418,
-      425,  408,  418,  427,  420,  423,  428,  429,  406,  430,
-      433,  468,  468,  433,  468,  412,  439,  443,  445,  409,
-      427,  413,  436,  433,  433,  433,  433,  426,  425,  434,
-      434,  434,  434,  439,  428,  435,  436,  430,  440,  435,
-      435,  435,  435,  442,  429,  443,  444,  449,  451,  457,
-      446,  440,  446,  446,  446,  446,  453,  459,  441,  438,
-      442,  447,  449,  444,  457,  447,  447,  447,  447,  463,
-      437,  432,  451,  453,  456,  456,  456,  456,  462,  431,
-
-      462,  462,  462,  462,  467,  467,  463,  467,  424,  422,
-      459,  465,  465,  465,  465,  421,  419,  467,  467,  467,
-      467,  471,  471,  471,  471,  471,  471,  471,  471,  472,
-      472,  472,  472,  472,  472,  472,  472,  473,  473,  473,
-      473,  473,  473,  473,  473,  474,  474,  474,  474,  474,
-      474,  474,  474,  475,  475,  475,  475,  475,  475,  475,
-      475,  476,  476,  476,  476,  476,  476,  476,  476,  477,
-      477,  477,  477,  477,  477,  477,  477,  478,  478,  415,
-      478,  478,  478,  478,  478,  479,  479,  414,  479,  479,
-      479,  479,  479,  480,  480,  411,  480,  480,  480,  480,
-
-      480,  481,  481,  482,  482,  482,  482,  483,  410,  483,
-      483,  483,  484,  484,  484,  484,  484,  484,  484,  484,
-      485,  485,  405,  485,  485,  485,  485,  485,  486,  486,
-      486,  486,  486,  486,  486,  486,  487,  487,  401,  487,
-      487,  487,  487,  487,  488,  488,  488,  488,  488,  488,
-      488,  488,  489,  397,  489,  490,  490,  490,  490,  491,
-      491,  491,  491,  492,  492,  492,  492,  492,  492,  492,
-      492,  493,  396,  493,  493,  493,  494,  494,  395,  394,
-      494,  494,  495,  495,  495,  495,  496,  496,  496,  496,
-      496,  496,  497,  497,  382,  497,  497,  497,  497,  497,
-
-      498,  498,  381,  498,  498,  498,  498,  498,  380,  379,
-      374,  371,  370,  369,  368,  367,  366,  357,  354,  350,
-      344,  342,  339,  337,  336,  335,  334,  328,  324,  316,
-      304,  302,  298,  294,  293,  291,  290,  286,  285,  284,
-      281,  278,  251,  242,  240,  234,  233,  232,  228,  226,
-      225,  223,  221,  218,  217,  216,  214,  213,  212,  211,
-      209,  208,  206,  205,  204,  202,  198,  155,  154,  152,
-      151,  150,  146,  145,  144,  138,  135,  134,  131,  128,
-      126,  125,  123,  120,  115,  113,  112,  109,  108,  105,
-      100,   60,   54,   48,   37,   36,   32,   29,   23,  470,
-
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470,  470,  470,
-      470,  470,  470,  470,  470,  470,  470,  470
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
+        3,   35,    3,    2,   37,    2,    2,    4,   75,    4,
+        3,    5,    4,    5,    9,    5,   36,    4,    5,   30,
+       67,   30,    7,    5,    7,   35,    7,    8,   37,    8,
+        4,    8,    8,   10,    9,   75,    9,    9,    5,   53,
+
+       10,   53,   36,   17,   39,   17,   36,    2,   39,    7,
+       67,    9,   13,   17,    8,   46,   13,    9,   14,   46,
+       10,   14,   10,   10,   41,   14,    5,    5,    6,   65,
+        6,   65,    6,    6,    6,    6,   13,   10,   13,   13,
+        6,   41,   19,   10,   19,   14,   39,   14,   14,   66,
+       18,   18,   19,   18,   18,    6,   18,   46,   77,   20,
+       20,   18,   20,   20,   21,   20,   21,   22,   68,   22,
+       20,   80,   22,   66,   21,   52,   76,   22,   29,   29,
+       29,   29,   77,    6,    6,   11,   11,   71,   68,   71,
+       31,  503,   31,   31,   31,   31,   40,   38,   52,  501,
+
+       11,   38,   76,   40,   11,   80,   11,   11,   11,   11,
+       57,   40,   11,   64,   57,   11,   73,   64,   11,   11,
+       79,   40,   11,   11,   11,   11,   52,   52,   78,   11,
+       11,   15,   31,   81,   98,   15,   15,   99,   32,   15,
+       32,   32,   32,   32,  117,   38,   73,   79,   98,   57,
+       99,  498,   57,  497,   78,   64,  117,  142,   15,   15,
+       15,   15,   15,   81,   83,   15,   81,  142,   15,   15,
+       15,   15,   15,   94,   74,   15,   15,   15,   15,   70,
+       91,   70,   70,   70,   70,   72,   72,   72,   72,   82,
+       83,   84,   95,   92,   74,  101,   97,   93,   74,   94,
+
+       72,   74,   96,  102,   91,  100,  132,   91,  492,   82,
+       82,  491,   84,   92,   93,   96,   95,   97,   84,  132,
+       92,   82,  134,   96,   93,  100,  100,  106,  172,  107,
+      102,  106,  101,  107,  135,  108,  108,  100,  106,  108,
+      112,  113,  114,  114,  112,  113,  114,  135,  108,  148,
+      169,  112,  134,  114,  172,  114,  118,  118,  133,  489,
+      118,  121,  121,  121,  121,  124,  124,  124,  124,  169,
+      125,  107,  125,  125,  125,  125,  126,  144,  126,  126,
+      126,  126,  128,  113,  128,  128,  128,  128,  136,  138,
+      141,  133,  136,  138,  140,  154,  160,  161,  118,  154,
+
+      148,  148,  140,  170,  162,  141,  144,  171,  140,  160,
+      173,  141,  166,  166,  166,  166,  170,  174,  175,  176,
+      171,  177,  178,  182,  161,  162,  180,  166,  179,  181,
+      183,  138,  184,  186,  154,  185,  136,  154,  187,  178,
+      180,  188,  182,  173,  189,  175,  190,  177,  191,  179,
+      174,  176,  192,  184,  186,  179,  181,  193,  194,  195,
+      183,  191,  189,  184,  196,  185,  197,  198,  201,  201,
+      226,  187,  201,  194,  227,  191,  200,  188,  228,  190,
+      200,  195,  253,  193,  487,  197,  240,  200,  192,  202,
+      202,  229,  482,  202,  196,  198,  204,  204,  206,  227,
+
+      204,  226,  206,  207,  207,  228,  254,  207,  255,  206,
+      229,  208,  208,  253,  207,  208,  207,  210,  210,  240,
+      262,  210,  218,  218,  218,  218,  221,  221,  221,  221,
+      263,  254,  257,  257,  264,  265,  257,  266,  267,  255,
+      261,  261,  261,  261,  268,  270,  271,  272,  274,  275,
+      273,  266,  277,  262,  276,  261,  278,  268,  280,  281,
+      263,  282,  285,  267,  270,  264,  265,  279,  480,  283,
+      286,  284,  274,  287,  288,  281,  271,  289,  273,  275,
+      276,  272,  273,  278,  284,  277,  283,  285,  279,  286,
+      280,  282,  290,  291,  287,  288,  292,  293,  294,  294,
+
+      289,  297,  294,  299,  300,  303,  291,  309,  315,  290,
+      322,  303,  320,  323,  293,  326,  294,  318,  318,  324,
+      328,  318,  292,  329,  333,  330,  336,  331,  309,  337,
+      332,  335,  297,  299,  338,  300,  329,  320,  341,  315,
+      334,  322,  330,  324,  331,  323,  335,  326,  337,  340,
+      328,  332,  336,  334,  341,  342,  333,  334,  343,  344,
+      345,  346,  348,  340,  349,  350,  364,  338,  352,  352,
+      343,  368,  352,  372,  354,  354,  367,  348,  354,  355,
+      355,  370,  350,  355,  373,  345,  346,  360,  342,  349,
+      344,  360,  354,  367,  372,  374,  364,  375,  370,  376,
+
+      378,  379,  380,  382,  386,  383,  368,  385,  387,  388,
+      389,  390,  375,  391,  376,  392,  373,  379,  383,  385,
+      401,  388,  394,  406,  378,  374,  394,  392,  386,  382,
+      398,  402,  404,  405,  380,  407,  394,  394,  394,  394,
+      387,  412,  413,  389,  390,  391,  401,  398,  404,  414,
+      405,  415,  402,  416,  417,  406,  420,  418,  412,  419,
+      421,  423,  426,  424,  429,  423,  413,  407,  420,  424,
+      433,  430,  431,  437,  434,  423,  423,  423,  423,  435,
+      439,  414,  418,  415,  419,  438,  417,  430,  440,  431,
+      416,  434,  421,  426,  443,  435,  429,  438,  444,  449,
+
+      450,  450,  450,  449,  453,  451,  456,  433,  439,  451,
+      437,  458,  459,  460,  461,  462,  463,  449,  471,  464,
+      476,  453,  456,  464,  474,  440,  443,  475,  477,  473,
+      460,  478,  471,  468,  479,  444,  488,  468,  472,  458,
+      475,  474,  461,  486,  463,  477,  459,  468,  468,  468,
+      468,  479,  462,  469,  469,  469,  469,  470,  486,  478,
+      488,  470,  470,  470,  470,  483,  490,  483,  483,  483,
+      483,  484,  494,  496,  467,  484,  484,  484,  484,  493,
+      493,  493,  493,  490,  500,  466,  499,  494,  499,  499,
+      499,  499,  502,  502,  502,  502,  504,  504,  505,  505,
+
+      504,  500,  505,  465,  457,  455,  496,  454,  452,  448,
+      504,  504,  504,  504,  508,  508,  508,  508,  508,  508,
+      508,  508,  508,  509,  509,  509,  509,  509,  509,  509,
+      509,  509,  510,  510,  510,  510,  510,  510,  510,  510,
+      510,  511,  511,  511,  511,  511,  511,  511,  511,  511,
+      512,  512,  512,  512,  512,  512,  512,  512,  512,  513,
+      513,  513,  513,  513,  513,  513,  513,  513,  514,  514,
+      447,  514,  514,  514,  514,  514,  514,  515,  515,  516,
+      516,  516,  516,  517,  517,  446,  517,  517,  517,  517,
+      517,  517,  518,  518,  445,  518,  518,  518,  518,  518,
+
+      518,  519,  442,  519,  519,  519,  520,  520,  441,  520,
+      520,  520,  520,  520,  520,  521,  521,  521,  521,  521,
+      521,  521,  521,  521,  522,  436,  522,  523,  523,  523,
+      523,  524,  524,  524,  524,  525,  525,  432,  525,  525,
+      525,  525,  525,  525,  526,  526,  526,  526,  526,  526,
+      526,  526,  526,  527,  527,  527,  527,  527,  527,  527,
+      527,  527,  528,  528,  528,  528,  528,  528,  528,  528,
+      528,  529,  428,  529,  529,  529,  530,  530,  427,  425,
+      422,  530,  530,  531,  531,  531,  531,  532,  532,  411,
+      532,  532,  532,  532,  533,  533,  410,  533,  533,  533,
+
+      533,  533,  533,  534,  534,  409,  408,  534,  534,  534,
+      534,  534,  535,  535,  403,  535,  535,  535,  535,  535,
+      535,  400,  399,  397,  396,  395,  393,  384,  381,  377,
+      371,  369,  366,  363,  362,  361,  359,  358,  357,  356,
+      351,  347,  339,  327,  325,  321,  317,  316,  314,  310,
+      308,  305,  302,  301,  298,  296,  269,  260,  258,  251,
+      250,  248,  245,  244,  243,  241,  239,  238,  236,  235,
+      233,  232,  231,  230,  225,  224,  223,  219,  217,  216,
+      211,  168,  167,  165,  164,  163,  159,  155,  152,  150,
+      149,  147,  139,  137,  131,  130,  129,  123,  120,  119,
+
+      116,  115,  111,  105,   58,   47,   45,   34,   28,   23,
+       16,   12,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507,  507,  507,  507,  507,  507,  507,  507,  507,
+      507,  507
     } ;
 
 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
@@ -870,6 +914,7 @@ char *yytext;
 #include "config.h"
 #include <glib.h>
 #include <string.h>
+#include <ctype.h>
 
 #include "treefuncs.h"
 #include "parse.h"
@@ -895,6 +940,8 @@ GList *include_files = NULL;
 static int look_for_includes = 0;
 
 int line_no = 1;
+/* last filename parsed from a #line directive */
+char *hline_filename = NULL;
 
 static void
 clear_cbuf(void)
@@ -955,7 +1002,7 @@ int yylex(void);
 
 #define GTK_DOC_LINE 10
 
-#line 959 "lex.yy.c"
+#line 1006 "lex.yy.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1109,7 +1156,7 @@ YY_DECL
        register char *yy_cp = NULL, *yy_bp = NULL;
        register int yy_act;
 
-#line 106 "lexer.l"
+#line 109 "lexer.l"
 
 
 
@@ -1120,7 +1167,7 @@ yy_current_state = 0;
 
 
 
-#line 1124 "lex.yy.c"
+#line 1171 "lex.yy.c"
 
        if ( yy_init )
                {
@@ -1169,14 +1216,14 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 471 )
+                               if ( yy_current_state >= 508 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        *yy_state_ptr++ = yy_current_state;
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 1100 );
+               while ( yy_base[yy_current_state] != 1213 );
 
 yy_find_action:
                yy_current_state = *--yy_state_ptr;
@@ -1207,7 +1254,7 @@ do_action:        /* This label is used only to access EOF actions. */
        { /* beginning of action switch */
 case 1:
 YY_RULE_SETUP
-#line 116 "lexer.l"
+#line 119 "lexer.l"
 { line_no++; REJECT; }
        YY_BREAK
 case 2:
@@ -1215,7 +1262,7 @@ case 2:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 118 "lexer.l"
+#line 121 "lexer.l"
 {
 /* Thy evil easter egg */
 #define QQ(x) long x
@@ -1243,12 +1290,52 @@ case 3:
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 140 "lexer.l"
+#line 143 "lexer.l"
 { ; /*comment, ignore*/ }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 141 "lexer.l"
+#line 145 "lexer.l"
+{
+       char *p;
+       char *number;
+       char *filename;
+       char *str=g_strdup(yytext);
+
+       /* find first digit of line number */
+       p=str;
+       while(*p&&!isdigit(*p)) p++;
+       number=p;
+  
+       /* find end of line number */
+       while(*p&&isdigit(*p)) p++;
+       if(*p) *p++=0;
+
+       /* find beginning of filename */
+       p=strchr(p,'"');
+       if(p) p++;
+       filename=p;
+
+       /* find end of filename */
+       if(p) p=strchr(p,'"');
+       if(p) *p=0;
+
+       /* stash number (minus one because we don't count this line) */  
+       if(number) line_no=atoi(number)-1;
+
+       /* stash filename */
+       if(filename) {
+               if(hline_filename) g_free(hline_filename);
+               hline_filename=g_strdup(filename);
+       }
+  
+       /* clean up */
+       g_free(str);
+}
+       YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 182 "lexer.l"
 {
        if(look_for_includes==1) {
                char *p;
@@ -1266,35 +1353,35 @@ YY_RULE_SETUP
        REJECT;
 }
        YY_BREAK
-case 5:
+case 6:
 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 158 "lexer.l"
+#line 199 "lexer.l"
 {
                        /* eat out gtk doc stuff */
                        BEGIN(GTK_DOC_BEFORE_NAME);
                        clear_cbuf();
                }
        YY_BREAK
-case 6:
+case 7:
 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 163 "lexer.l"
+#line 204 "lexer.l"
 {
                        /* empty doc lines */
                        ;
                }       
        YY_BREAK
-case 7:
+case 8:
 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 167 "lexer.l"
+#line 208 "lexer.l"
 {
                        char *p;
                        BEGIN(GTK_DOC);
@@ -1306,168 +1393,168 @@ YY_RULE_SETUP
                        g_strstrip(gtk_doc_func);
                }
        YY_BREAK
-case 8:
+case 9:
 YY_RULE_SETUP
-#line 177 "lexer.l"
+#line 218 "lexer.l"
 {
                        BEGIN(CLASS_CODE_I);
                }
        YY_BREAK
-case 9:
+case 10:
 YY_RULE_SETUP
-#line 180 "lexer.l"
+#line 221 "lexer.l"
 {
                        BEGIN(COMMENT);
                        before_comment = CLASS_CODE_I;
                }
        YY_BREAK
-case 10:
+case 11:
 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 184 "lexer.l"
+#line 225 "lexer.l"
 {
                        /* empty doc lines */
                        add_to_cbuf(" *\n");
                }       
        YY_BREAK
-case 11:
+case 12:
 YY_RULE_SETUP
-#line 188 "lexer.l"
+#line 229 "lexer.l"
 {
                        BEGIN(CLASS_CODE_I);
                        add_gtk_doc_func();
                }
        YY_BREAK
-case 12:
+case 13:
 YY_RULE_SETUP
-#line 192 "lexer.l"
+#line 233 "lexer.l"
 {
                        fflush(stdout);
                        add_to_cbuf(" * ");
                        BEGIN(GTK_DOC_LINE);
                }
        YY_BREAK
-case 13:
+case 14:
 YY_RULE_SETUP
-#line 197 "lexer.l"
+#line 238 "lexer.l"
 {
                        BEGIN(CLASS_CODE_I);
                }
        YY_BREAK
-case 14:
+case 15:
 YY_RULE_SETUP
-#line 200 "lexer.l"
+#line 241 "lexer.l"
 {
                        BEGIN(COMMENT);
                        before_comment = CLASS_CODE_I;
                }
        YY_BREAK
-case 15:
+case 16:
 YY_RULE_SETUP
-#line 204 "lexer.l"
+#line 245 "lexer.l"
 {
                        BEGIN(CLASS_CODE_I);
                        add_to_cbuf("\n");
                        add_gtk_doc_func();
                }
        YY_BREAK
-case 16:
+case 17:
 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 209 "lexer.l"
+#line 250 "lexer.l"
 {
                        BEGIN(GTK_DOC);
                        add_to_cbuf(yytext);
                        add_to_cbuf("\n");
                }
        YY_BREAK
-case 17:
+case 18:
 YY_RULE_SETUP
-#line 214 "lexer.l"
+#line 255 "lexer.l"
 {
                        fflush(stdout);
                        add_to_cbuf(yytext);
                }
        YY_BREAK
-case 18:
+case 19:
 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 219 "lexer.l"
+#line 260 "lexer.l"
 { add_to_cbuf(yytext); /*comment, ignore*/ }
        YY_BREAK
-case 19:
+case 20:
 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 220 "lexer.l"
+#line 261 "lexer.l"
 { ; /*comment, ignore*/ }
        YY_BREAK
-case 20:
+case 21:
 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 221 "lexer.l"
+#line 262 "lexer.l"
 { ; /*comment, ignore*/ }
        YY_BREAK
-case 21:
+case 22:
 YY_RULE_SETUP
-#line 222 "lexer.l"
+#line 263 "lexer.l"
 {BEGIN(COMMENT); before_comment = INITIAL; }
        YY_BREAK
-case 22:
+case 23:
 YY_RULE_SETUP
-#line 223 "lexer.l"
+#line 264 "lexer.l"
 {
        add_to_cbuf(yytext);
        BEGIN(COMMENT);
        before_comment = C_CODE;
 }
        YY_BREAK
-case 23:
+case 24:
 YY_RULE_SETUP
-#line 228 "lexer.l"
+#line 269 "lexer.l"
 {BEGIN(COMMENT); before_comment = CLASS_CODE; }
        YY_BREAK
-case 24:
+case 25:
 YY_RULE_SETUP
-#line 229 "lexer.l"
+#line 270 "lexer.l"
 {BEGIN(COMMENT); before_comment = CLASS_CODE_I; }
        YY_BREAK
-case 25:
+case 26:
 YY_RULE_SETUP
-#line 230 "lexer.l"
+#line 271 "lexer.l"
 {
        if(before_comment == C_CODE) add_to_cbuf(yytext);
        BEGIN(before_comment);
                }
        YY_BREAK
-case 26:
+case 27:
 YY_RULE_SETUP
-#line 234 "lexer.l"
+#line 275 "lexer.l"
 {
        /* comment, ignore */
        if(before_comment == C_CODE) add_to_cbuf(yytext);
                }
        YY_BREAK
-case 27:
+case 28:
 YY_RULE_SETUP
-#line 238 "lexer.l"
+#line 279 "lexer.l"
 {
        /* comment, ignore */
        if(before_comment == C_CODE) add_to_cbuf(yytext);
                }
        YY_BREAK
-case 28:
+case 29:
 YY_RULE_SETUP
-#line 243 "lexer.l"
+#line 284 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1477,9 +1564,9 @@ YY_RULE_SETUP
                        ccode_line = line_no;
                }
        YY_BREAK
-case 29:
+case 30:
 YY_RULE_SETUP
-#line 251 "lexer.l"
+#line 292 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1489,9 +1576,9 @@ YY_RULE_SETUP
                        ccode_line = line_no;
                }
        YY_BREAK
-case 30:
+case 31:
 YY_RULE_SETUP
-#line 260 "lexer.l"
+#line 301 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1501,9 +1588,9 @@ YY_RULE_SETUP
                        ccode_line = line_no;
                }
        YY_BREAK
-case 31:
+case 32:
 YY_RULE_SETUP
-#line 268 "lexer.l"
+#line 309 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1513,9 +1600,9 @@ YY_RULE_SETUP
                        ccode_line = line_no;
                }
        YY_BREAK
-case 32:
+case 33:
 YY_RULE_SETUP
-#line 276 "lexer.l"
+#line 317 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1525,9 +1612,9 @@ YY_RULE_SETUP
                        ccode_line = line_no;
                }
        YY_BREAK
-case 33:
+case 34:
 YY_RULE_SETUP
-#line 284 "lexer.l"
+#line 325 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth = 1;
@@ -1539,9 +1626,9 @@ YY_RULE_SETUP
                                look_for_includes=1;
                }
        YY_BREAK
-case 34:
+case 35:
 YY_RULE_SETUP
-#line 294 "lexer.l"
+#line 335 "lexer.l"
 {
                        BEGIN(INITIAL);
                        yylval.cbuf = cbuf;
@@ -1551,67 +1638,67 @@ YY_RULE_SETUP
                        return code_type;
                }
        YY_BREAK
-case 35:
-YY_RULE_SETUP
-#line 303 "lexer.l"
-{ add_to_cbuf(yytext); }
-       YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 304 "lexer.l"
+#line 344 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 305 "lexer.l"
+#line 345 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 306 "lexer.l"
+#line 346 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 307 "lexer.l"
+#line 347 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 308 "lexer.l"
+#line 348 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 310 "lexer.l"
+#line 349 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 313 "lexer.l"
+#line 351 "lexer.l"
+{ add_to_cbuf(yytext); }
+       YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 354 "lexer.l"
 {
                        BEGIN(CODE_STRING);
                        before_string = C_CODE;
                        add_to_cbuf(yytext);
                }
        YY_BREAK
-case 43:
+case 44:
 YY_RULE_SETUP
-#line 318 "lexer.l"
+#line 359 "lexer.l"
 {
                        BEGIN(CODE_STRING);
                        before_string = PROPERTY_CODE_I;
                        add_to_cbuf(yytext);
                }
        YY_BREAK
-case 44:
+case 45:
 YY_RULE_SETUP
-#line 323 "lexer.l"
+#line 364 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
-case 45:
+case 46:
 YY_RULE_SETUP
-#line 324 "lexer.l"
+#line 365 "lexer.l"
 {
                        BEGIN(before_string);
                        add_to_cbuf(yytext);
@@ -1623,27 +1710,27 @@ YY_RULE_SETUP
                        }
                }
        YY_BREAK
-case 46:
+case 47:
 YY_RULE_SETUP
-#line 334 "lexer.l"
+#line 375 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
-case 47:
+case 48:
 YY_RULE_SETUP
-#line 335 "lexer.l"
+#line 376 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
-case 48:
+case 49:
 YY_RULE_SETUP
-#line 337 "lexer.l"
+#line 378 "lexer.l"
 {
                        parenth_depth++;
                        add_to_cbuf(yytext);
                }
        YY_BREAK
-case 49:
+case 50:
 YY_RULE_SETUP
-#line 341 "lexer.l"
+#line 382 "lexer.l"
 {
                        parenth_depth--;
                        if(parenth_depth<0) {
@@ -1657,19 +1744,19 @@ YY_RULE_SETUP
                        add_to_cbuf(yytext);
                }
        YY_BREAK
-case 50:
+case 51:
 YY_RULE_SETUP
-#line 354 "lexer.l"
+#line 395 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
-case 51:
+case 52:
 YY_RULE_SETUP
-#line 355 "lexer.l"
+#line 396 "lexer.l"
 { add_to_cbuf(yytext); }
        YY_BREAK
-case 52:
+case 53:
 YY_RULE_SETUP
-#line 357 "lexer.l"
+#line 398 "lexer.l"
 {
                        static int found_classes = 0;
                        look_for_includes = 2;
@@ -1683,12 +1770,27 @@ YY_RULE_SETUP
                        return CLASS;
                }
        YY_BREAK
-case 53:
+case 54:
+YY_RULE_SETUP
+#line 411 "lexer.l"
+{ return ERROR; }
+       YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 412 "lexer.l"
+{ return ENUM; }
+       YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 413 "lexer.l"
+{ return FLAGS; }
+       YY_BREAK
+case 57:
 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
 yy_c_buf_p = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 370 "lexer.l"
+#line 415 "lexer.l"
 {
                        int maj = 0, min = 0, pl = 0;
                        int rmaj = 0, rmin = 0, rpl = 0;
@@ -1725,14 +1827,14 @@ YY_RULE_SETUP
                                             "(this is %s)\n"
                                             "To upgrade your gob, see: "
                                             "http://www.5z.com/jirka/gob.html",
-                                            maj, VERSION);
+                                            effective_maj, VERSION);
                        }
 
                }
        YY_BREAK
-case 54:
+case 58:
 YY_RULE_SETUP
-#line 411 "lexer.l"
+#line 456 "lexer.l"
 {
                        if(for_cpp) {
                                error_printf(GOB_WARN, line_no,
@@ -1743,193 +1845,193 @@ YY_RULE_SETUP
                        REJECT;
                }
        YY_BREAK
-case 55:
+case 59:
 YY_RULE_SETUP
-#line 421 "lexer.l"
+#line 466 "lexer.l"
 {return FROM;}
        YY_BREAK
-case 56:
+case 60:
 YY_RULE_SETUP
-#line 423 "lexer.l"
+#line 468 "lexer.l"
 {return VOID;}
        YY_BREAK
-case 57:
+case 61:
 YY_RULE_SETUP
-#line 424 "lexer.l"
+#line 469 "lexer.l"
 {return STRUCT;}
        YY_BREAK
-case 58:
+case 62:
 YY_RULE_SETUP
-#line 425 "lexer.l"
+#line 470 "lexer.l"
 {return UNION;}
        YY_BREAK
-case 59:
+case 63:
 YY_RULE_SETUP
-#line 426 "lexer.l"
+#line 471 "lexer.l"
 {return ENUM;}
        YY_BREAK
-case 60:
+case 64:
 YY_RULE_SETUP
-#line 427 "lexer.l"
+#line 472 "lexer.l"
 {return SIGNED;}
        YY_BREAK
-case 61:
+case 65:
 YY_RULE_SETUP
-#line 428 "lexer.l"
+#line 473 "lexer.l"
 {return UNSIGNED;}
        YY_BREAK
-case 62:
+case 66:
 YY_RULE_SETUP
-#line 429 "lexer.l"
+#line 474 "lexer.l"
 {return LONG;}
        YY_BREAK
-case 63:
+case 67:
 YY_RULE_SETUP
-#line 430 "lexer.l"
+#line 475 "lexer.l"
 {return SHORT;}
        YY_BREAK
-case 64:
+case 68:
 YY_RULE_SETUP
-#line 431 "lexer.l"
+#line 476 "lexer.l"
 {return INT;}
        YY_BREAK
-case 65:
+case 69:
 YY_RULE_SETUP
-#line 432 "lexer.l"
+#line 477 "lexer.l"
 {return FLOAT;}
        YY_BREAK
-case 66:
+case 70:
 YY_RULE_SETUP
-#line 433 "lexer.l"
+#line 478 "lexer.l"
 {return DOUBLE;}
        YY_BREAK
-case 67:
+case 71:
 YY_RULE_SETUP
-#line 434 "lexer.l"
+#line 479 "lexer.l"
 {return CHAR;}
        YY_BREAK
-case 68:
+case 72:
 YY_RULE_SETUP
-#line 435 "lexer.l"
+#line 480 "lexer.l"
 {return CONST;}
        YY_BREAK
-case 69:
+case 73:
 YY_RULE_SETUP
-#line 437 "lexer.l"
+#line 482 "lexer.l"
 {return THREEDOTS;}
        YY_BREAK
-case 70:
+case 74:
 YY_RULE_SETUP
-#line 439 "lexer.l"
+#line 484 "lexer.l"
 {yylval.line = line_no; return PUBLIC;}
        YY_BREAK
-case 71:
+case 75:
 YY_RULE_SETUP
-#line 440 "lexer.l"
+#line 485 "lexer.l"
 {yylval.line = line_no; return PRIVATE;}
        YY_BREAK
-case 72:
+case 76:
 YY_RULE_SETUP
-#line 441 "lexer.l"
+#line 486 "lexer.l"
 {yylval.line = line_no; return PROTECTED;}
        YY_BREAK
-case 73:
+case 77:
 YY_RULE_SETUP
-#line 442 "lexer.l"
+#line 487 "lexer.l"
 {yylval.line = line_no; return CLASSWIDE;}
        YY_BREAK
-case 74:
+case 78:
 YY_RULE_SETUP
-#line 443 "lexer.l"
+#line 488 "lexer.l"
 {yylval.line = line_no; return ARGUMENT;}
        YY_BREAK
-case 75:
+case 79:
 YY_RULE_SETUP
-#line 444 "lexer.l"
+#line 489 "lexer.l"
 {yylval.line = line_no; return VIRTUAL;}
        YY_BREAK
-case 76:
+case 80:
 YY_RULE_SETUP
-#line 445 "lexer.l"
+#line 490 "lexer.l"
 {yylval.line = line_no; return SIGNAL;}
        YY_BREAK
-case 77:
+case 81:
 YY_RULE_SETUP
-#line 446 "lexer.l"
+#line 491 "lexer.l"
 {yylval.line = line_no; return OVERRIDE;}
        YY_BREAK
-case 78:
+case 82:
 YY_RULE_SETUP
-#line 447 "lexer.l"
+#line 492 "lexer.l"
 {
                                yylval.line = line_no;
                                BEGIN(PROPERTY_CODE);
                                return PROPERTY;
                        }
        YY_BREAK
-case 79:
+case 83:
 YY_RULE_SETUP
-#line 452 "lexer.l"
+#line 497 "lexer.l"
 { yylval.line = line_no; return NICK; }
        YY_BREAK
-case 80:
+case 84:
 YY_RULE_SETUP
-#line 453 "lexer.l"
+#line 498 "lexer.l"
 { yylval.line = line_no; return BLURB; }
        YY_BREAK
-case 81:
+case 85:
 YY_RULE_SETUP
-#line 454 "lexer.l"
+#line 499 "lexer.l"
 { yylval.line = line_no; return MAXIMUM; }
        YY_BREAK
-case 82:
+case 86:
 YY_RULE_SETUP
-#line 455 "lexer.l"
+#line 500 "lexer.l"
 { yylval.line = line_no; return MINIMUM; }
        YY_BREAK
-case 83:
+case 87:
 YY_RULE_SETUP
-#line 456 "lexer.l"
+#line 501 "lexer.l"
 { yylval.line = line_no; return DEFAULT_VALUE; }
        YY_BREAK
-case 84:
+case 88:
 YY_RULE_SETUP
-#line 457 "lexer.l"
+#line 502 "lexer.l"
 { yylval.line = line_no; return FLAGS; }
        YY_BREAK
-case 85:
+case 89:
 YY_RULE_SETUP
-#line 458 "lexer.l"
+#line 503 "lexer.l"
 { yylval.line = line_no; return TYPE; }
        YY_BREAK
-case 86:
+case 90:
 YY_RULE_SETUP
-#line 459 "lexer.l"
+#line 504 "lexer.l"
 { yylval.line = line_no; return FLAGS_TYPE; }
        YY_BREAK
-case 87:
+case 91:
 YY_RULE_SETUP
-#line 460 "lexer.l"
+#line 505 "lexer.l"
 { yylval.line = line_no; return ENUM_TYPE; }
        YY_BREAK
-case 88:
+case 92:
 YY_RULE_SETUP
-#line 461 "lexer.l"
+#line 506 "lexer.l"
 { yylval.line = line_no; return PARAM_TYPE; }
        YY_BREAK
-case 89:
+case 93:
 YY_RULE_SETUP
-#line 462 "lexer.l"
+#line 507 "lexer.l"
 { yylval.line = line_no; return BOXED_TYPE; }
        YY_BREAK
-case 90:
+case 94:
 YY_RULE_SETUP
-#line 463 "lexer.l"
+#line 508 "lexer.l"
 { yylval.line = line_no; return OBJECT_TYPE; }
        YY_BREAK
-case 91:
+case 95:
 YY_RULE_SETUP
-#line 464 "lexer.l"
+#line 509 "lexer.l"
 {
                yylval.line = line_no;
                property_paren_depth = 1;
@@ -1937,18 +2039,18 @@ YY_RULE_SETUP
                return '(';
                        }
        YY_BREAK
-case 92:
+case 96:
 YY_RULE_SETUP
-#line 470 "lexer.l"
+#line 515 "lexer.l"
 {
                yylval.line = line_no;
                property_paren_depth++;
                return '(';
                        }
        YY_BREAK
-case 93:
+case 97:
 YY_RULE_SETUP
-#line 475 "lexer.l"
+#line 520 "lexer.l"
 {
                yylval.line = line_no;
                property_paren_depth--;
@@ -1958,67 +2060,67 @@ YY_RULE_SETUP
                return ')';
                        }
        YY_BREAK
-case 94:
+case 98:
 YY_RULE_SETUP
-#line 484 "lexer.l"
+#line 529 "lexer.l"
 {
                        yylval.id = g_strdup(yytext);
                        return NUMBER;
                }
        YY_BREAK
-case 95:
+case 99:
 YY_RULE_SETUP
-#line 488 "lexer.l"
+#line 533 "lexer.l"
 {
                        /* this one is for a classname with a namespace */
                        yylval.id = g_strdup(yytext);
                        return TYPETOKEN;
                }
        YY_BREAK
-case 96:
+case 100:
 YY_RULE_SETUP
-#line 493 "lexer.l"
+#line 538 "lexer.l"
 {
                        /* this is for a classname with an empty namespace */
                        yylval.id = g_strdup(yytext);
                        return TYPETOKEN;
                }
        YY_BREAK
-case 97:
+case 101:
 YY_RULE_SETUP
-#line 498 "lexer.l"
+#line 543 "lexer.l"
 {
                        yylval.id = g_strdup(yytext);
                        return TOKEN;
                }
        YY_BREAK
-case 98:
+case 102:
 YY_RULE_SETUP
-#line 502 "lexer.l"
+#line 547 "lexer.l"
 {
                        yylval.id = g_strdup(yytext);
                        return SINGLE_CHAR;
                }
        YY_BREAK
-case 99:
+case 103:
 YY_RULE_SETUP
-#line 507 "lexer.l"
+#line 552 "lexer.l"
 {
                        yylval.id = g_strdup(yytext);
                        return ARRAY_DIM;
                }
        YY_BREAK
-case 100:
+case 104:
 YY_RULE_SETUP
-#line 512 "lexer.l"
+#line 557 "lexer.l"
 {
                        BEGIN(CLASS_CODE_I);
                        return '{';
                }
        YY_BREAK
-case 101:
+case 105:
 YY_RULE_SETUP
-#line 516 "lexer.l"
+#line 561 "lexer.l"
 {
                        BEGIN(C_CODE);
                        parenth_depth=1;
@@ -2029,38 +2131,38 @@ YY_RULE_SETUP
                        return '{';
                }
        YY_BREAK
-case 102:
+case 106:
 YY_RULE_SETUP
-#line 525 "lexer.l"
+#line 570 "lexer.l"
 {
                                BEGIN(INITIAL);
                                return '}';
                        }
        YY_BREAK
-case 103:
+case 107:
 YY_RULE_SETUP
-#line 530 "lexer.l"
+#line 575 "lexer.l"
 ;  /*ignore*/
        YY_BREAK
-case 104:
+case 108:
 YY_RULE_SETUP
-#line 532 "lexer.l"
+#line 577 "lexer.l"
 {
                        yylval.line = line_no;
                        return yytext[0];
                }
        YY_BREAK
-case 105:
+case 109:
 YY_RULE_SETUP
-#line 537 "lexer.l"
+#line 582 "lexer.l"
 ;  /*ignore*/
        YY_BREAK
-case 106:
+case 110:
 YY_RULE_SETUP
-#line 539 "lexer.l"
+#line 584 "lexer.l"
 ECHO;
        YY_BREAK
-#line 2064 "lex.yy.c"
+#line 2166 "lex.yy.c"
                        case YY_STATE_EOF(INITIAL):
                        case YY_STATE_EOF(COMMENT):
                        case YY_STATE_EOF(C_CODE):
@@ -2360,7 +2462,7 @@ static yy_state_type yy_get_previous_state()
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 471 )
+                       if ( yy_current_state >= 508 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2390,11 +2492,11 @@ yy_state_type yy_current_state;
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 471 )
+               if ( yy_current_state >= 508 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 470);
+       yy_is_jam = (yy_current_state == 507);
        if ( ! yy_is_jam )
                *yy_state_ptr++ = yy_current_state;
 
@@ -2630,11 +2732,6 @@ YY_BUFFER_STATE b;
        }
 
 
-#ifndef YY_ALWAYS_INTERACTIVE
-#ifndef YY_NEVER_INTERACTIVE
-extern int isatty YY_PROTO(( int ));
-#endif
-#endif
 
 #ifdef YY_USE_PROTOS
 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
@@ -2952,7 +3049,7 @@ int main()
        return 0;
        }
 #endif
-#line 539 "lexer.l"
+#line 584 "lexer.l"
 
 
 /* Ugly warning avoiding */
index e102286510e0a8c4c4d993e78f9b48ca69ba5d80..08326211214b03f1e41a212a8f2b28bc13625b26 100644 (file)
@@ -23,6 +23,7 @@
 #include "config.h"
 #include <glib.h>
 #include <string.h>
+#include <ctype.h>
 
 #include "treefuncs.h"
 #include "parse.h"
@@ -48,6 +49,8 @@ GList *include_files = NULL;
 static int look_for_includes = 0;
 
 int line_no = 1;
+/* last filename parsed from a #line directive */
+char *hline_filename = NULL;
 
 static void
 clear_cbuf(void)
@@ -138,6 +141,44 @@ REJECT;
 }
 
 \/\/.*$                        { ; /*comment, ignore*/ }
+
+<*>^#[ \t]*line[ \t]+[0-9]+([ \t]\"[^\n\r\f\"]*\")? {
+       char *p;
+       char *number;
+       char *filename;
+       char *str=g_strdup(yytext);
+
+       /* find first digit of line number */
+       p=str;
+       while(*p&&!isdigit(*p)) p++;
+       number=p;
+  
+       /* find end of line number */
+       while(*p&&isdigit(*p)) p++;
+       if(*p) *p++=0;
+
+       /* find beginning of filename */
+       p=strchr(p,'"');
+       if(p) p++;
+       filename=p;
+
+       /* find end of filename */
+       if(p) p=strchr(p,'"');
+       if(p) *p=0;
+
+       /* stash number (minus one because we don't count this line) */  
+       if(number) line_no=atoi(number)-1;
+
+       /* stash filename */
+       if(filename) {
+               if(hline_filename) g_free(hline_filename);
+               hline_filename=g_strdup(filename);
+       }
+  
+       /* clean up */
+       g_free(str);
+}
+
 <C_CODE>^#[ \t]*include[ \t][<"][^\n">]*[>"] {
        if(look_for_includes==1) {
                char *p;
@@ -367,6 +408,10 @@ class              {
                        return CLASS;
                }
 
+error          { return ERROR; }
+enum           { return ENUM; }
+flags          { return FLAGS; }
+
 ^[ \t]*requires[ \t]+[0-9]+\.[0-9]+\.[0-9]+[\t ]*$     {
                        int maj = 0, min = 0, pl = 0;
                        int rmaj = 0, rmin = 0, rpl = 0;
@@ -403,7 +448,7 @@ class               {
                                             "(this is %s)\n"
                                             "To upgrade your gob, see: "
                                             "http://www.5z.com/jirka/gob.html",
-                                            maj, VERSION);
+                                            effective_maj, VERSION);
                        }
 
                }
@@ -481,25 +526,25 @@ class             {
                return ')';
                        }
 
-<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I>0|[1-9][0-9]*|0x[0-9a-fA-F]+|0[0-7]+|[0-9]*\.[0-9]+|\.[0-9][0-9]*       {
+<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>0|[1-9][0-9]*|0x[0-9a-fA-F]+|0[0-7]+|[0-9]*\.[0-9]+|\.[0-9][0-9]*       {
                        yylval.id = g_strdup(yytext);
                        return NUMBER;
                }
-<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I>[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z0-9_]*)+ {
+<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z0-9_]*)+ {
                        /* this one is for a classname with a namespace */
                        yylval.id = g_strdup(yytext);
                        return TYPETOKEN;
                }
-<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I>:[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z0-9_]*)*        {
+<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>:[A-Za-z_][A-Za-z0-9_]*(:[A-Za-z0-9_]*)*        {
                        /* this is for a classname with an empty namespace */
                        yylval.id = g_strdup(yytext);
                        return TYPETOKEN;
                }
-<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I>[A-Za-z_][A-Za-z0-9_]*  {
+<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>[A-Za-z_][A-Za-z0-9_]*  {
                        yylval.id = g_strdup(yytext);
                        return TOKEN;
                }
-<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I>\'\\.\'|\'.\'   {
+<CLASS_CODE,CLASS_CODE_I,PROPERTY_CODE,PROPERTY_CODE_I,INITIAL>\'\\.\'|\'.\'   {
                        yylval.id = g_strdup(yytext);
                        return SINGLE_CHAR;
                }
@@ -527,7 +572,7 @@ class               {
                                return '}';
                        }
 
-<CLASS_CODE,CLASS_CODE_I,INITIAL,PROPERTY_CODE,PROPERTY_CODE_I>[\t ]   ;  /*ignore*/
+<CLASS_CODE,CLASS_CODE_I,INITIAL,PROPERTY_CODE,PROPERTY_CODE_I>[\f\t ] ;  /*ignore*/
 
 <*>.           {
                        yylval.line = line_no;
index fe74942e634ff0f2db725ca6e4261adfed2dfb07..7613bc090bf8fda44806689646600a526789f291 100644 (file)
@@ -46,6 +46,7 @@ extern int yydebug;
 extern FILE * yyin;
 extern Node *class;
 extern GList *nodes;
+extern GList *enums;
 
 extern GList *include_files;
 
@@ -105,6 +106,14 @@ gboolean no_lines = FALSE;
 gboolean no_self_alias = FALSE;
 gboolean always_private_struct = FALSE;
 
+gboolean use_m4 = FALSE; /* preprocess sources with m4 */
+gboolean use_m4_clean = FALSE; /* preprocess sources with m4, no m4 flags */
+char *m4_commandline = NULL;
+#define M4_INCLUDE_DIR  PKGDATADIR "/m4"
+#define M4_BASE_FILENAME "gobm4.m4"
+#define M4_FLAGS "-P -s -I" M4_INCLUDE_DIR  " -DGOBM4_GOB_VERSION=" VERSION " " M4_BASE_FILENAME
+#define M4_COMMANDLINE "m4"
+
 int method_unique_id = 1;
 
 static void
@@ -424,29 +433,64 @@ put_pub_method(const Method *m)
 static void
 put_signal_macro (const Method *m, gboolean gnu)
 {
-       char *id;
-
        if(m->method != SIGNAL_LAST_METHOD &&
           m->method != SIGNAL_FIRST_METHOD)
                return;
 
-       id = g_strdup (m->id);
-       g_strup (id);
-
        if ( ! gnu) {
-               out_printf (outh, "#define %s_SIGNAL_%s(func)\t"
-                           "\"%s\",(GCallback)(func)\n",
-                           macrobase, id, m->id);
+               /* connect */
+               out_printf (outh, "#define %s_connect__%s(object,func,data)\t"
+                           "g_signal_connect(%s(object),\"%s\","
+                           "(GCallback)(func),(data))\n",
+                           funcbase, m->id, macrobase, m->id);
+
+               /* connect_after */
+               out_printf (outh, "#define %s_connect_after__%s(object,func,data)\t"
+                           "g_signal_connect_after(%s(object),\"%s\","
+                           "(GCallback)(func),(data))\n",
+                           funcbase, m->id, macrobase, m->id);
+
+               /* connect_data */
+               out_printf (outh, "#define %s_connect_data__%s"
+                           "(object,func,data,destroy_data,flags)\t"
+                           "g_signal_connect_data(%s(object),\"%s\","
+                           "(GCallback)(func),(data),(destroy_data),(flags))\n",
+                           funcbase, m->id, macrobase, m->id);
        } else {
-               out_printf (outh, "#define %s_SIGNAL_%s(func)\t"
-                           "\"%s\",(GCallback)(({",
-                           macrobase, id, m->id);
-               print_method (outh, "", "(* ___", "", ") ", ", gpointer data ",
-                             " = func; ", m, FALSE, TRUE, TRUE);
-               out_printf (outh, "___%s; }))\n", m->id);
-
+               /* connect */
+               out_printf (outh, "#define %s_connect__%s(object,func,data)\t"
+                           "g_signal_connect("
+                           "%s(({%s *___object = (object); ___object; })),"
+                           "\"%s\","
+                           "(GCallback)({",
+                           funcbase, m->id, macrobase, typebase, m->id);
+               print_method (outh, "", "(* ___", "", ") ", ", gpointer ___data ",
+                             " = (func); ", m, FALSE, TRUE, TRUE);
+               out_printf (outh, "___%s; }), (data))\n", m->id);
+
+               /* connect_after */
+               out_printf (outh, "#define %s_connect_after__%s(object,func,data)\t"
+                           "g_signal_connect_after("
+                           "%s(({%s *___object = (object); ___object; })),"
+                           "\"%s\","
+                           "(GCallback)({",
+                           funcbase, m->id, macrobase, typebase, m->id);
+               print_method (outh, "", "(* ___", "", ") ", ", gpointer ___data ",
+                             " = (func); ", m, FALSE, TRUE, TRUE);
+               out_printf (outh, "___%s; }), (data))\n", m->id);
+
+               /* connect_data */
+               out_printf (outh, "#define %s_connect_data__%s"
+                           "(object,func,data,destroy_data,flags)\t"
+                           "g_signal_connect_data("
+                           "%s(({%s *___object = (object); ___object; })),"
+                           "\"%s\","
+                           "(GCallback)({",
+                           funcbase, m->id, macrobase, typebase, m->id);
+               print_method (outh, "", "(* ___", "", ") ", ", gpointer ___data ",
+                             " = (func); ", m, FALSE, TRUE, TRUE);
+               out_printf (outh, "___%s; }), (data), (destroy_data), (flags))\n", m->id);
        }
-       g_free (id);
 }
 
 static void
@@ -464,6 +508,44 @@ put_signal_macros (const Class *c, gboolean gnu)
        }
 }
 
+static void
+put_local_signal_macro (const Method *m)
+{
+       if(m->method != SIGNAL_LAST_METHOD &&
+          m->method != SIGNAL_FIRST_METHOD)
+               return;
+
+       /* connect */
+       out_printf (out, "#define self_connect__%s(object,func,data)\t"
+                   "%s_connect__%s((object),(func),(data))\n",
+                   m->id, funcbase, m->id);
+
+       /* connect_after */
+       out_printf (out, "#define self_connect_after__%s(object,func,data)\t"
+                   "%s_connect_after__%s((object),(func),(data))\n",
+                   m->id, funcbase, m->id);
+
+       /* connect_data */
+       out_printf (out, "#define self_connect_data__%s(object,func,data,destroy_data,flags)\t"
+                   "%s_connect_data__%s((object),(func),(data),(destroy_data),(flags))\n",
+                   m->id, funcbase, m->id);
+}
+
+static void
+put_local_signal_macros (const Class *c)
+{
+       const GList *li;
+
+       if (signals < 0)
+               return;
+
+       for (li = c->nodes; li != NULL; li = li->next) {
+               const Node *n = li->data;
+               if (n->type == METHOD_NODE)
+                       put_local_signal_macro ((Method *)n);
+       }
+}
+
 
 static void
 put_prot_method(const Method *m)
@@ -511,16 +593,16 @@ put_priv_method_prot(Method *m)
 }
 
 static GList *
-make_func_arg(char *typename, int is_class, char *name)
+make_func_arg (const char *typename, gboolean is_class, const char *name)
 {
        Node *node;
        Node *type;
        char *tn;
        
-       if(is_class)
-               tn = g_strconcat(typename, ":Class", NULL);
+       if (is_class)
+               tn = g_strconcat (typename, ":Class", NULL);
        else
-               tn = g_strdup(typename);
+               tn = g_strdup (typename);
 
        type = node_new (TYPE_NODE,
                         "name:steal", tn,
@@ -528,9 +610,9 @@ make_func_arg(char *typename, int is_class, char *name)
                         NULL);
        node = node_new (FUNCARG_NODE,
                         "atype:steal", (Type *)type,
-                        "name:steal", name,
+                        "name", name,
                         NULL);
-       return g_list_prepend(NULL, node);
+       return g_list_prepend (NULL, node);
 }
 
 static void
@@ -564,7 +646,9 @@ make_inits(Class *cl)
                                 "method", CLASS_INIT_METHOD,
                                 "mtype:steal", type,
                                 "id", "class_init",
-                                "args:steal", make_func_arg (cl->otype, TRUE, g_strdup("c")),
+                                "args:steal", make_func_arg (cl->otype,
+                                                             TRUE /* is_class */,
+                                                             "c" /* name */),
                                 "unique_id", method_unique_id++,
                                 NULL);
                cl->nodes = g_list_prepend(cl->nodes, node);
@@ -578,7 +662,9 @@ make_inits(Class *cl)
                                 "method", INIT_METHOD,
                                 "mtype:steal", type,
                                 "id", "init",
-                                "args:steal", make_func_arg (cl->otype, TRUE, g_strdup("o")),
+                                "args:steal", make_func_arg (cl->otype,
+                                                             FALSE /* is_class */,
+                                                             "o" /* name */),
                                 "unique_id", method_unique_id++,
                                 NULL);
                cl->nodes = g_list_prepend(cl->nodes, node);
@@ -873,6 +959,106 @@ add_enums(Class *c)
        out_printf(out, "static %sClass *parent_class = NULL;\n\n", ptypebase);
 }
 
+static void
+add_interface_methods (Class *c, const char *interface)
+{
+       GList *li;
+       gboolean added_line = FALSE;
+
+       for (li = c->nodes; li != NULL; li = li->next) {
+               Node *n = li->data;
+               Method *m = (Method *)n;
+               if (n->type != METHOD_NODE ||
+                   m->method == OVERRIDE_METHOD ||
+                   m->interface == NULL ||
+                   strcmp (m->interface, interface) != 0)
+                       continue;
+
+               if (m->line_no > 0) {
+                       out_addline_infile (out, m->line_no);
+                       added_line = TRUE;
+               } else if (m->line_no == 0 &&
+                          added_line) {
+                       out_addline_outfile (out);
+                       added_line = FALSE;
+               }
+               out_printf (out, "\tiface->%s = self_%s;\n",
+                           m->id, m->id);
+       }
+       if (added_line)
+               out_addline_outfile (out);
+}
+
+static void
+add_interface_inits (Class *c)
+{
+       GList *li;
+
+       if (c->interfaces == NULL)
+               return;
+
+       out_printf(out, "\n");
+
+       for (li = c->interfaces; li != NULL; li = li->next) {
+               const char *interface = li->data;
+               char *name = replace_sep (interface, '_');
+               char *type = remove_sep (interface);
+
+               out_printf (out, "\nstatic void\n"
+                           "___%s_init (%sIface *iface)\n"
+                           "{\n",
+                           name, type);
+
+               add_interface_methods (c, interface);
+
+               out_printf (out, "}\n\n");
+
+               g_free (name);
+               g_free (type);
+       }
+}
+
+static void
+add_interface_infos (void)
+{
+       GList *li;
+       for (li = ((Class *)class)->interfaces;
+            li != NULL;
+            li = li->next) {
+               char *name = replace_sep (li->data, '_');
+               out_printf (out,
+                           "\t\tstatic const GInterfaceInfo %s_info = {\n"
+                           "\t\t\t(GInterfaceInitFunc) ___%s_init,\n"
+                           "\t\t\tNULL,\n"
+                           "\t\t\tNULL\n"
+                           "\t\t};\n\n",
+                           name, name);
+               g_free (name);
+       }
+}
+
+static void
+add_interfaces (void)
+{
+       GList *li;
+       for (li = ((Class *)class)->interfaces;
+            li != NULL;
+            li = li->next) {
+               char *name = replace_sep (li->data, '_');
+               char *type = make_pre_macro (li->data, "TYPE");
+
+               out_printf (out,
+                           "\t\tg_type_add_interface_static (type,\n"
+                           "\t\t\t%s,\n"
+                           "\t\t\t&%s_info);\n",
+                           type,
+                           name);
+
+               g_free (type);
+               g_free (name);
+       }
+}
+
 static void
 add_get_type(void)
 {
@@ -894,10 +1080,17 @@ add_get_type(void)
                   "\t\t\tsizeof (%s),\n"
                   "\t\t\t0 /* n_preallocs */,\n"
                   "\t\t\t(GInstanceInitFunc) %s_init,\n"
-                  "\t\t};\n\n"
-                  "\t\ttype = g_type_register_static (%s, \"%s\", &info, (GTypeFlags)0);\n",
-                  funcbase, typebase, funcbase, typebase, funcbase,
-                  pmacrotype, typebase);
+                  "\t\t};\n\n",
+                  funcbase, typebase, funcbase, typebase, funcbase);
+
+       add_interface_infos ();
+
+       out_printf (out,
+                   "\t\ttype = g_type_register_static (%s, \"%s\", &info, (GTypeFlags)0);\n",
+                   pmacrotype, typebase);
+
+       add_interfaces ();
+
        /*
        if(chunk_size)  {
                out_printf(out,
@@ -914,39 +1107,54 @@ add_get_type(void)
 }
 
 static void
-add_bonobo_x_get_type (void)
+add_bonobo_object_get_type (void)
 {
        /* char *chunk_size = ((Class*)class)->chunk_size; */
+       /* _vicious_ spanks seth with a rusty nail
+        out_printf(out,
+                  "\n#warning \"Bonobo isn't fully ported to glib 2.0 and "
+                  "gob2 doesn't officially support it yet. It'd be safer "
+                   "and a lot more fun to blow goats.\"\n");
+                  */
+
+       out_printf (out,
+                   "GType\n"
+                   "%s_get_type (void)\n" /* 1 */
+                   "{\n"
+                   "\tstatic GType type = 0;\n\n"
+                   "\tif (type == 0) {\n"
+                   "\t\tstatic const GTypeInfo info = {\n"
+                   "\t\t\tsizeof (%sClass),\n" /* 2 */
+                   "\t\t\t(GBaseInitFunc) NULL,\n"
+                   "\t\t\t(GBaseFinalizeFunc) NULL,\n"
+                   "\t\t\t(GClassInitFunc) %s_class_init,\n" /* 3 */
+                   "\t\t\tNULL, /* class_finalize */\n"
+                   "\t\t\tNULL, /* class_data */\n"
+                   "\t\t\tsizeof (%s),\n" /* 4 */
+                   "\t\t\t0, /* n_preallocs */\n"
+                   "\t\t\t(GInstanceInitFunc)  %s_init,\n" /* 5 */
+                   "\t\t\tNULL\n"
+                   "\t\t};\n\n",
+                   funcbase /* 1 */,
+                   typebase /* 2 */,
+                   funcbase /* 3 */,
+                   typebase /* 4 */,
+                   funcbase /* 5 */);
+
+       add_interface_infos ();
+
+       out_printf (out,
+                  "\t\ttype = bonobo_type_unique (\n"
+                  "\t\t\tBONOBO_OBJECT_TYPE,\n"
+                  "\t\t\tPOA_%s__init, NULL,\n" /* 1 */
+                  "\t\t\tG_STRUCT_OFFSET (%sClass, _epv),\n" /* 2 */
+                  "\t\t\t&info, \"%s\");\n", /* 3 */
+                  ((Class*)class)->bonobo_object_class /* 1 */,
+                  typebase /* 2 */,
+                  typebase /* 3 */);
+
+       add_interfaces ();
 
-       out_printf(out,
-                  "\n#error \"BonoboX isn't ported to glib 2.0 and "
-                  "gob2 doesn't support it yet\"");
-       
-       out_printf(out,
-                  "GtkType\n"
-                  "%s_get_type (void)\n"
-                  "{\n"
-                  "\tstatic GtkType type = 0;\n\n"
-                  "\tif (type == 0) {\n"
-                  "\t\tstatic const GtkTypeInfo info = {\n"
-                  "\t\t\t\"%s\",\n"
-                  "\t\t\tsizeof (%s),\n"
-                  "\t\t\tsizeof (%sClass),\n"
-                  "\t\t\t(GtkClassInitFunc) %s_class_init,\n"
-                  "\t\t\t(GtkObjectInitFunc) %s_init,\n"
-                  "\t\t\t/* reserved_1 */ NULL,\n"
-                  "\t\t\t/* reserved_2 */ NULL,\n"
-                  "\t\t\t(GtkClassInitFunc) NULL\n"
-                  "\t\t};\n\n"
-                  "\t\ttype = bonobo_x_type_unique\n"
-                  "\t\t\t(%s_get_type (),\n"
-                  "\t\t\tPOA_%s__init, NULL,\n"
-                  "\t\t\tGTK_STRUCT_OFFSET (%sClass, _epv),\n"
-                  "\t\t\t&info);\n",
-                  funcbase, typebase, typebase, typebase,
-                  funcbase, funcbase, pfuncbase,
-                  ((Class*)class)->bonobo_x_class,
-                  typebase);
        /*if(chunk_size)  {
                out_printf(out,
                           "#if %s > 0\n"
@@ -1693,6 +1901,10 @@ static void
 make_arguments(Class *c)
 {
        GList *li;
+       if (get_properties > 0)
+               out_printf(out, "\tg_object_class->get_property = ___object_get_property;\n");
+       if (set_properties > 0)
+               out_printf(out, "\tg_object_class->set_property = ___object_set_property;\n");
        out_printf (out, "    {\n"
                    "\tGParamSpec   *param_spec;\n\n");
 
@@ -1704,11 +1916,6 @@ make_arguments(Class *c)
                        make_argument ((Argument *)n);
        }
        out_printf(out, "    }\n");
-       
-       if (get_properties > 0)
-               out_printf(out, "\tg_object_class->get_property = ___object_get_property;\n");
-       if (set_properties > 0)
-               out_printf(out, "\tg_object_class->set_property = ___object_set_property;\n");
 }
 
 static void
@@ -1891,7 +2098,7 @@ add_finalize (Class *c)
 }
 
 static void
-make_bonobo_x_epv (Class *c, const char *classname)
+make_bonobo_object_epv (Class *c, const char *classname)
 {
        GList *li;
        gboolean added_line = FALSE;
@@ -1903,7 +2110,7 @@ make_bonobo_x_epv (Class *c, const char *classname)
                   m->method == OVERRIDE_METHOD)
                        continue;
 
-               if (m->bonobo_x_func) {
+               if (m->bonobo_object_func) {
                        if(m->line_no > 0) {
                                out_addline_infile(out, m->line_no);
                                added_line = TRUE;
@@ -1912,7 +2119,7 @@ make_bonobo_x_epv (Class *c, const char *classname)
                                out_addline_outfile(out);
                                added_line = FALSE;
                        }
-                       out_printf (out, "\t%s->_epv.%s = %s;\n",
+                       out_printf (out, "\t%s->_epv.%s = self_%s;\n",
                                    classname, m->id, m->id);
                }
        }
@@ -2032,8 +2239,8 @@ add_inits(Class *c)
                        if(get_properties > 0 || set_properties > 0)
                                make_arguments(c);
 
-                       if (c->bonobo_x_class != NULL) {
-                               make_bonobo_x_epv (c, ((FuncArg *)m->args->data)->name);
+                       if (c->bonobo_object_class != NULL) {
+                               make_bonobo_object_epv (c, ((FuncArg *)m->args->data)->name);
                        }
                } else
                        continue;
@@ -2116,7 +2323,7 @@ add_argument (Argument *a, gboolean is_set)
        out_printf (out, "\t\t}\n");
        if ( ! is_set) {
                if (strcmp (a->gtktype, "OBJECT") == 0)
-                       out_printf (out, "\t\tg_value_set_%s (VAL, G_OBJECT (ARG))\n",
+                       out_printf (out, "\t\tg_value_set_%s (VAL, G_OBJECT (ARG));\n",
                                    the_type_lower);
                else
                        out_printf (out, "\t\t"
@@ -2932,11 +3139,11 @@ print_class_block(Class *c)
                        put_vs_method((Method *)n);
        }
        /* If BonoboX type class put down the epv */
-       if (c->bonobo_x_class != NULL) {
+       if (c->bonobo_object_class != NULL) {
                out_printf (outh,
                            "\t/* Bonobo object epv */\n"
                            "\tPOA_%s__epv _epv;\n",
-                           c->bonobo_x_class);
+                           c->bonobo_object_class);
        }
        /* put class scope variables */
        for (li = c->nodes; li != NULL; li = li->next) {
@@ -2992,10 +3199,17 @@ print_class_block(Class *c)
                        put_signal_macros (c, TRUE);
                        out_printf(outh, "#else /* __GNUC__ && !__STRICT_ANSI__ */\n");
                        put_signal_macros (c, FALSE);
-                       out_printf(outh, "#endif /* __GNUC__ && !__STRICT_ANSI__ */\n\n");
+                       out_printf(outh, "#endif /* __GNUC__ && !__STRICT_ANSI__ */\n");
                } else {
                        put_signal_macros (c, FALSE);
+                       out_printf(outh, "\n");
                }
+
+               out_printf (out, "\n/*\n"
+                           " * Signal connection wrapper macro shortcuts\n"
+                           " */\n");
+               put_local_signal_macros (c);
+               out_printf(outh, "\n");
        }
 
        /* argument wrapping macros */
@@ -3022,14 +3236,7 @@ print_class_block(Class *c)
                }
        }
 
-       add_enums(c);
-
-       if ( ! overrode_get_type) {
-               if (c->bonobo_x_class != NULL)
-                       add_bonobo_x_get_type ();
-               else
-                       add_get_type ();
-       }
+       add_enums (c);
 
        if(any_method_to_alias(c)) {
                if( ! no_gnu) {
@@ -3041,6 +3248,15 @@ print_class_block(Class *c)
                make_method_nongnu_aliases(c);
        }
 
+       add_interface_inits (c);
+
+       if ( ! overrode_get_type) {
+               if (c->bonobo_object_class != NULL)
+                       add_bonobo_object_get_type ();
+               else
+                       add_get_type ();
+       }
+
        out_printf (out, "/* a macro for creating a new object of our type */\n");
        out_printf (out,
                    "#define GET_NEW ((%s *)g_object_new(%s_get_type(), NULL))\n\n",
@@ -3226,24 +3442,231 @@ print_header_top(void)
        GList *li;
 
        /* mandatory includes */
-       out_printf(outh, "#include <glib.h>\n");
-       out_printf(outh, "#include <gobject/gobject.h>\n");
-       out_printf(outh, "#include <gobject/gvaluetypes.h>\n");
-       out_printf(outh, "#include <gobject/genums.h>\n");
-       out_printf(outh, "#include <gobject/gboxed.h>\n");
-       out_printf(outh, "#include <gobject/gparamspecs.h>\n\n");
+       out_printf (outh, "#include <glib.h>\n");
+       out_printf (outh, "#include <glib-object.h>\n");
 
        /* print the HT_CCODE blocks */
        for (li = nodes; li != NULL; li = li->next) {
                Node *node = li->data;
-               if(node->type == CCODE_NODE) {
+               if (node->type == CCODE_NODE) {
                        CCode *cc = (CCode *)node;
-                       if(cc->cctype == HT_CCODE)
-                               print_ccode_block((CCode *)node);
+                       if (cc->cctype == HT_CCODE)
+                               print_ccode_block ((CCode *)node);
                }
        }
 }
 
+static void
+print_enum (EnumDef *enode)
+{
+       GList *li;
+       char *funcprefix;
+       char *type;
+       char *str;
+
+       funcprefix = replace_sep (enode->etype, '_');
+       g_strdown (funcprefix);
+       out_printf (out, "static const GEnumValue _%s_values[] = {\n",
+                   funcprefix);
+       type = remove_sep (enode->etype);
+
+       out_printf (outh, "\ntypedef enum {\n");
+
+       for (li = enode->values; li != NULL; li = li->next) {
+               EnumValue *value = li->data; 
+               char *p;
+               char *sname = g_strdown (g_strdup (value->name));
+
+               while ((p = strchr (sname, '_')) != NULL)
+                       *p = '-';
+
+               out_printf (outh, "\t%s_%s", enode->prefix, value->name);
+               if (value->value != NULL)
+                       out_printf (outh, " = %s", value->value);
+               if (li->next != NULL)
+                       out_printf (outh, ",\n");
+               else
+                       out_printf (outh, "\n");
+
+               out_printf (out, "\t{ %s_%s, \"%s_%s\", \"%s\" },\n",
+                           enode->prefix, value->name,
+                           enode->prefix, value->name,
+                           sname);
+
+               g_free (sname);
+       }
+
+       out_printf (out, "\t{ 0, NULL, NULL }\n};\n\n");
+
+       out_printf (outh, "} %s;\n", type);
+
+       str = make_pre_macro (enode->etype, "TYPE");
+       out_printf (outh, "#define %s ", str);
+       g_free (str);
+
+       out_printf (outh, "%s_get_type()\n", funcprefix);
+       out_printf (outh, "GType %s_get_type (void);\n\n", funcprefix);
+
+       out_printf (out,
+                   "GType\n%s_get_type (void)\n"
+                   "{\n"
+                   "\tstatic GType type = 0;\n"
+                   "\tif (type == 0)\n"
+                   "\t\ttype = g_enum_register_static (\"%s\", _%s_values);\n"
+                   "\treturn type;\n"
+                   "}\n\n",
+                   funcprefix, type, funcprefix);
+
+       g_free (funcprefix);
+       g_free (type);
+}
+
+static void
+print_flags (Flags *fnode)
+{
+       GList *li;
+       char *funcprefix;
+       char *type;
+       char *str;
+       int i;
+
+       funcprefix = replace_sep (fnode->ftype, '_');
+       g_strdown (funcprefix);
+       out_printf (out, "static const GFlagsValue _%s_values[] = {\n",
+                   funcprefix);
+       type = remove_sep (fnode->ftype);
+
+       out_printf (outh, "\ntypedef enum {\n");
+
+       for (i = 0, li = fnode->values; li != NULL; i++, li = li->next) {
+               const char *name = li->data; 
+               char *p;
+               char *sname = g_strdown (g_strdup (name));
+
+               while ((p = strchr (sname, '_')) != NULL)
+                       *p = '-';
+
+               out_printf (outh, "\t%s_%s = 1<<%d",
+                           fnode->prefix, name, i);
+               if (li->next != NULL)
+                       out_printf (outh, ",\n");
+               else
+                       out_printf (outh, "\n");
+
+               out_printf (out, "\t{ %s_%s, \"%s_%s\", \"%s\" },\n",
+                           fnode->prefix, name,
+                           fnode->prefix, name,
+                           sname);
+
+               g_free (sname);
+       }
+
+       out_printf (out, "\t{ 0, NULL, NULL }\n};\n\n");
+
+       out_printf (outh, "} %s;\n", type);
+
+       str = make_pre_macro (fnode->ftype, "TYPE");
+       out_printf (outh, "#define %s ", str);
+       g_free (str);
+
+       out_printf (outh, "%s_get_type()\n", funcprefix);
+       out_printf (outh, "GType %s_get_type (void);\n\n", funcprefix);
+
+       out_printf (out,
+                   "GType\n%s_get_type (void)\n"
+                   "{\n"
+                   "\tstatic GType type = 0;\n"
+                   "\tif (type == 0)\n"
+                   "\t\ttype = g_flags_register_static (\"%s\", _%s_values);\n"
+                   "\treturn type;\n"
+                   "}\n\n",
+                   funcprefix, type, funcprefix);
+
+       g_free (funcprefix);
+       g_free (type);
+}
+
+static void
+print_error (Error *enode)
+{
+       GList *li;
+       char *funcprefix;
+       char *type;
+       char *str;
+
+       funcprefix = replace_sep (enode->etype, '_');
+       g_strdown (funcprefix);
+       out_printf (out, "static const GEnumValue _%s_values[] = {\n",
+                   funcprefix);
+       type = remove_sep (enode->etype);
+
+       out_printf (outh, "\ntypedef enum {\n");
+
+       for (li = enode->values; li != NULL; li = li->next) {
+               const char *name = li->data;
+               char *p;
+               char *sname = g_strdown (g_strdup (name));
+
+               while ((p = strchr (sname, '_')) != NULL)
+                       *p = '-';
+
+               out_printf (outh, "\t%s_%s", enode->prefix, name);
+               if (li->next != NULL)
+                       out_printf (outh, ",\n");
+               else
+                       out_printf (outh, "\n");
+
+               out_printf (out, "\t{ %s_%s, \"%s_%s\", \"%s\" },\n",
+                           enode->prefix, name,
+                           enode->prefix, name,
+                           sname);
+
+               g_free (sname);
+       }
+
+       out_printf (out, "\t{ 0, NULL, NULL }\n};\n\n");
+
+       out_printf (outh, "} %s;\n", type);
+
+       str = make_pre_macro (enode->etype, "TYPE");
+       out_printf (outh, "#define %s ", str);
+       g_free (str);
+
+       out_printf (outh, "%s_get_type ()\n", funcprefix);
+       out_printf (outh, "GType %s_get_type (void);\n\n", funcprefix);
+
+       out_printf (out,
+                   "GType\n%s_get_type (void)\n"
+                   "{\n"
+                   "\tstatic GType type = 0;\n"
+                   "\tif (type == 0)\n"
+                   "\t\ttype = g_enum_register_static (\"%s\", _%s_values);\n"
+                   "\treturn type;\n"
+                   "}\n\n",
+                   funcprefix, type, funcprefix);
+
+       out_printf (outh, "#define %s %s_quark ()\n", enode->prefix, funcprefix);
+       out_printf (outh, "GQuark %s_quark (void);\n\n", funcprefix);
+
+       str = replace_sep (enode->etype, '-');
+       g_strdown (str);
+
+       out_printf (out,
+                   "GQuark\n%s_quark (void)\n"
+                   "{\n"
+                   "\tstatic GQuark q = 0;\n"
+                   "\tif (q == 0)\n"
+                   "\t\tq = g_quark_from_static_string (\"%s\");\n"
+                   "\treturn q;\n"
+                   "}\n\n",
+                   funcprefix, str);
+
+       g_free (str);
+
+       g_free (funcprefix);
+       g_free (type);
+}
+
 static void
 generate_outfiles(void)
 {
@@ -3261,17 +3684,24 @@ generate_outfiles(void)
 
        print_includes();
 
-       for(li=nodes;li;li=g_list_next(li)) {
+       for (li = nodes; li != NULL; li = li->next) {
                Node *node = li->data;
-               if(node->type == CCODE_NODE) {
+               if (node->type == CCODE_NODE) {
                        CCode *cc = (CCode *)node;
-                       if(cc->cctype != HT_CCODE &&
-                          cc->cctype != AT_CCODE)
-                               print_ccode_block((CCode *)node);
-               } else if(node->type == CLASS_NODE) {
-                       print_class_block((Class *)node);
-               } else
+                       if (cc->cctype != HT_CCODE &&
+                           cc->cctype != AT_CCODE)
+                               print_ccode_block ((CCode *)node);
+               } else if (node->type == CLASS_NODE) {
+                       print_class_block ((Class *)node);
+               } else if (node->type == ENUMDEF_NODE) {
+                       print_enum ((EnumDef *)node);
+               } else if (node->type == FLAGS_NODE) {
+                       print_flags ((Flags *)node);
+               } else if (node->type == ERROR_NODE) {
+                       print_error ((Error *)node);
+               } else {
                        g_assert_not_reached();
+               }
        }
 
        print_header_postfixes();
@@ -3306,6 +3736,12 @@ print_help(void)
                "\t--always-private-struct Always create a private pointer "
                                          "in\n"
                "\t                        the object structure\n"
+               "\t--m4                    Preprocess source with m4. "
+                                         "Following args will\n"
+               "\t                        be passed to m4\n"
+               "\t--m4-dir                Print directory that will be "
+                                         "searched for m4\n"
+               "\t                        files\n"
                "\t--no-write,-n           Don't write output files, just "
                                          "check syntax\n"
                "\t--no-lines              Don't print '#line' to output\n"
@@ -3320,11 +3756,43 @@ parse_options(int argc, char *argv[])
        int i;
        int got_file = FALSE;
        int no_opts = FALSE;
+       int m4_opts = FALSE; /* if we are just passing on args to m4 */
 
        filename = NULL;
 
        for(i = 1 ; i < argc; i++) {
-               if(no_opts ||
+               if(m4_opts) {
+                       char *new_commandline;
+                       g_assert(m4_commandline!=NULL);
+
+                       /* check whether this one looks like the filename */
+                       if((!strcmp(argv[i],"-") || argv[i][0] != '-') 
+                          && !got_file) {
+                               const gchar *m4_flags=use_m4_clean?"":M4_FLAGS;
+                               filename = argv[i];
+                               got_file = TRUE;
+                               
+                               /* insert flags before the filename */
+                               new_commandline=g_strconcat(m4_commandline,
+                                                           " ",
+                                                           m4_flags, 
+                                                           " ",
+                                                           argv[i],
+                                                           NULL);
+                       }
+
+                       /* just an ordinary option */
+                       else                      
+                         new_commandline=g_strconcat(m4_commandline,
+                                                     " ",
+                                                     argv[i],
+                                                     NULL);
+
+                       /* free old commandline */
+                       g_free(m4_commandline);
+                       m4_commandline=new_commandline;
+
+               } else if(no_opts ||
                   argv[i][0] != '-') {
                        /*must be a file*/
                        if(got_file) {
@@ -3368,6 +3836,19 @@ parse_options(int argc, char *argv[])
                        /* no op */;
                } else if(strcmp(argv[i], "--always-private-struct")==0) {
                        always_private_struct = TRUE;
+               } else if(strcmp(argv[i], "--m4-dir")==0) {
+                       printf("%s\n",M4_INCLUDE_DIR);
+                       exit(0);
+               } else if(strcmp(argv[i], "--m4")==0) {
+                       use_m4 = TRUE;
+                       use_m4_clean=FALSE;
+                       m4_opts = TRUE;
+                       m4_commandline=g_strdup(M4_COMMANDLINE);
+               } else if(strcmp(argv[i], "--m4-clean")==0) {
+                       use_m4 = TRUE;
+                       use_m4_clean=TRUE;
+                       m4_opts = TRUE;
+                       m4_commandline=g_strdup(M4_COMMANDLINE);
                } else if(strcmp(argv[i], "--")==0) {
                        /*further arguments are files*/
                        no_opts = TRUE;
@@ -3401,6 +3882,19 @@ parse_options(int argc, char *argv[])
                        }
                }
        }
+
+#if 0
+       /* if we are using m4, and got no filename, append m4 flags now */
+       if(!got_file && use_m4 && !use_m4_clean) {
+               char *new_commandline;
+               new_commandline=g_strconcat(m4_commandline,
+                                           " ",
+                                           M4_FLAGS,
+                                           NULL);
+               g_free(m4_commandline);
+               m4_commandline=new_commandline;
+       }
+#endif
 }
 
 /* this is a somewhat ugly hack, but it appears to work */
@@ -3439,14 +3933,23 @@ main(int argc, char *argv[])
 {
        parse_options(argc, argv);
        
-       if(filename) {
+       if(use_m4) {
+               yyin = popen(m4_commandline, "r");
+               if(!yyin) {
+                       fprintf(stderr, "Error: can't open pipe from '%s'\n",
+                               m4_commandline);
+                       exit(1);
+               }
+       } else if(filename) {
                yyin = fopen(filename, "r");
                if(!yyin) {
                        fprintf(stderr, "Error: can't open file '%s'\n",
                                filename);
                        exit(1);
                }
-       } else
+       }
+
+       if(filename==NULL)
                filename = "stdin";
 
        /* This is where parsing is done */
@@ -3454,6 +3957,11 @@ main(int argc, char *argv[])
        if(yyparse() != 0)
                g_error("Parsing errors, quitting");
 
+       /* close input file */
+       if(use_m4) pclose(yyin);
+       else fclose(yyin);
+       yyin=stdin;
+
        if( ! class)
                error_print(GOB_ERROR, 0, " no class defined");
        
index 8a806d818b80921f2fd543ce093fc141c820f7d3..b9f0a27c8fafc3f21b2356b59b6225289b2b3890 100644 (file)
 #define        MAXIMUM 296
 #define        MINIMUM 297
 #define        DEFAULT_VALUE   298
-#define        FLAGS   299
-#define        TYPE    300
-#define        FLAGS_TYPE      301
-#define        ENUM_TYPE       302
-#define        PARAM_TYPE      303
-#define        BOXED_TYPE      304
-#define        OBJECT_TYPE     305
+#define        ERROR   299
+#define        FLAGS   300
+#define        TYPE    301
+#define        FLAGS_TYPE      302
+#define        ENUM_TYPE       303
+#define        PARAM_TYPE      304
+#define        BOXED_TYPE      305
+#define        OBJECT_TYPE     306
 
 #line 22 "parse.y"
 
 #include "main.h"
 #include "util.h"
 
+/* FIXME: add gettext support */
 #define _(x) (x)
        
 GList *nodes = NULL;
 
 static GList *class_nodes = NULL;
 Node *class = NULL;
+GList *enums = NULL;
+static GList *enum_vals = NULL;
+static GList *flag_vals = NULL;
+static GList *error_vals = NULL;
 
 static char *chunk_size = NULL;
-static char *bonobo_x_class = NULL;
+static char *bonobo_object_class = NULL;
+static GList *interfaces = NULL;
 static GList *typestack = NULL;
 static GList *funcargs = NULL;
 static GList *checks = NULL;
@@ -498,8 +505,8 @@ property_link_and_export (Node *node)
                }
 
                if (strcmp (prop->gtktype, "STRING") == 0) {
-                       set = g_strdup_printf("g_free (%s->%s); "
-                                             "%s->%s = g_value_dup_string (VAL);",
+                       set = g_strdup_printf("{ char *old = %s->%s; "
+                                             "%s->%s = g_value_dup_string (VAL); g_free (old); }",
                                              root, prop->name,
                                              root, prop->name);
                        get = g_strdup_printf("g_value_set_string (VAL, %s->%s);",
@@ -602,7 +609,7 @@ ensure_property (void)
 }
 
 
-#line 570 "parse.y"
+#line 576 "parse.y"
 typedef union {
        char *id;
        GString *cbuf;
@@ -624,26 +631,26 @@ typedef union {
 
 
 
-#define        YYFINAL         340
+#define        YYFINAL         393
 #define        YYFLAG          -32768
-#define        YYNTBASE        65
+#define        YYNTBASE        66
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 305 ? yytranslate[x] : 110)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 306 ? yytranslate[x] : 118)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,    63,     2,     2,     2,     2,     2,     2,    54,
-    55,    60,     2,    58,    64,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,    56,    62,
-    57,    61,     2,     2,     2,     2,     2,     2,     2,     2,
+     2,     2,    64,     2,     2,     2,     2,     2,     2,    55,
+    56,    61,     2,    59,    65,     2,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,     2,    57,    63,
+    58,    62,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,    52,    59,    53,     2,     2,     2,     2,     2,
+     2,     2,    53,    60,    54,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -661,112 +668,126 @@ static const char yytranslate[] = {     0,
     17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
     37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-    47,    48,    49,    50,    51
+    47,    48,    49,    50,    51,    52
 };
 
 #if YYDEBUG != 0
 static const short yyprhs[] = {     0,
      0,     4,     7,    10,    12,    14,    16,    18,    20,    22,
-    24,    27,    29,    34,    38,    44,    45,    51,    57,    60,
-    62,    64,    67,    69,    71,    73,    75,    77,    79,    81,
-    83,    86,    90,    93,    97,   100,   103,   105,   107,   108,
-   114,   121,   134,   144,   151,   155,   156,   168,   177,   183,
-   187,   188,   192,   194,   196,   201,   203,   205,   209,   213,
-   217,   221,   225,   229,   233,   237,   241,   245,   249,   253,
-   255,   261,   263,   267,   268,   272,   274,   277,   279,   281,
-   283,   286,   289,   292,   296,   300,   303,   306,   309,   311,
-   314,   316,   319,   321,   323,   325,   327,   329,   331,   333,
-   335,   337,   339,   341,   343,   345,   348,   351,   355,   358,
-   360,   364,   368,   371,   373,   378,   382,   384,   387,   389,
-   400,   412,   422,   432,   441,   453,   462,   468,   471,   476,
-   477,   479,   482,   484,   486,   489,   492,   496,   501,   506,
-   508,   512,   514,   518,   520,   523,   527,   534,   542,   545,
-   547,   549,   552,   555,   559,   563,   567,   571,   573,   576,
-   578
+    24,    27,    30,    33,    36,    38,    40,    42,    44,    49,
+    53,    59,    60,    66,    72,    78,    81,    83,    85,    88,
+    92,    94,    96,    98,   100,   102,   104,   106,   108,   111,
+   115,   118,   122,   125,   128,   130,   132,   133,   139,   146,
+   159,   169,   176,   180,   181,   193,   202,   208,   212,   213,
+   217,   219,   221,   226,   228,   230,   234,   238,   242,   246,
+   250,   254,   258,   262,   266,   270,   274,   278,   280,   286,
+   288,   292,   293,   297,   299,   302,   304,   306,   308,   311,
+   314,   317,   321,   325,   328,   331,   334,   336,   339,   341,
+   344,   346,   348,   350,   352,   354,   356,   358,   360,   362,
+   364,   366,   368,   370,   373,   376,   380,   383,   385,   389,
+   393,   396,   398,   403,   407,   409,   412,   414,   425,   437,
+   447,   457,   466,   478,   487,   493,   496,   501,   502,   504,
+   507,   509,   511,   514,   517,   521,   526,   531,   533,   537,
+   539,   543,   545,   548,   552,   559,   567,   570,   572,   574,
+   577,   580,   584,   588,   592,   596,   604,   613,   617,   619,
+   623,   625,   633,   642,   646,   648,   656,   665,   669,   671,
+   673,   676,   678
 };
 
-static const short yyrhs[] = {    67,
-    68,    67,     0,    68,    67,     0,    67,    68,     0,    68,
+static const short yyrhs[] = {    68,
+    69,    68,     0,    69,    68,     0,    68,    69,     0,    69,
      0,    24,     0,    27,     0,    25,     0,    26,     0,    28,
-     0,    29,     0,    67,    66,     0,    66,     0,    69,    52,
-    71,    53,     0,    69,    52,    53,     0,     3,    21,     4,
-    21,    70,     0,     0,    54,    19,    19,    55,    70,     0,
-    54,    19,    20,    55,    70,     0,    71,    72,     0,    72,
-     0,   100,     0,    19,   100,     0,    77,     0,    78,     0,
-    80,     0,    56,     0,    31,     0,    32,     0,    33,     0,
-    34,     0,    19,    19,     0,    19,    52,    24,     0,    57,
-   109,     0,    57,    52,    24,     0,    74,    75,     0,    75,
-    74,     0,    75,     0,    74,     0,     0,    73,    89,    19,
-    76,    56,     0,    73,    89,    19,    22,    76,    56,     0,
-    36,    87,    86,    19,    79,    19,    52,    24,    19,    52,
-    24,    56,     0,    36,    87,    86,    19,    79,    19,    52,
-    24,    56,     0,    36,    87,    86,    19,    79,    19,     0,
-    54,    19,    55,     0,     0,    35,    19,    19,    81,    19,
-    52,    24,    19,    52,    24,    56,     0,    35,    19,    19,
-    81,    19,    52,    24,    56,     0,    35,    19,    19,    81,
-    56,     0,    54,    82,    55,     0,     0,    82,    58,    85,
-     0,    85,     0,    30,     0,    19,    54,    30,    55,     0,
-   109,     0,    83,     0,    40,    57,    83,     0,    41,    57,
-    83,     0,    42,    57,   109,     0,    43,    57,   109,     0,
-    44,    57,    84,     0,    45,    57,    88,     0,    46,    57,
-    89,     0,    47,    57,    19,     0,    48,    57,    19,     0,
-    49,    57,    19,     0,    50,    57,    19,     0,    51,    57,
-    19,     0,    19,     0,    19,    54,    19,    89,    55,     0,
-    19,     0,    54,    88,    55,     0,     0,    19,    59,    88,
-     0,    19,     0,    90,    94,     0,    90,     0,    91,     0,
-    19,     0,     5,    19,     0,    19,     5,     0,    93,    19,
-     0,     5,    93,    19,     0,    93,    19,     5,     0,    92,
-    91,     0,    21,    91,     0,     5,    91,     0,    21,     0,
-    21,     5,     0,    92,     0,    92,     5,     0,     6,     0,
-    18,     0,    14,     0,    15,     0,    13,     0,    16,     0,
-    17,     0,    11,     0,    12,     0,     7,     0,     8,     0,
-     9,     0,    60,     0,    60,     5,     0,    60,    94,     0,
-    60,     5,    94,     0,    19,    97,     0,    97,     0,    73,
-    19,    97,     0,    19,    73,    97,     0,    73,    97,     0,
-    95,     0,    19,    54,    98,    55,     0,    98,    58,    19,
-     0,    19,     0,    52,    24,     0,    56,     0,    38,    87,
-    96,    89,    19,    54,   103,    55,   101,    99,     0,    73,
-    38,    87,    95,    89,    19,    54,   103,    55,   101,    99,
-     0,    37,    73,    89,    19,    54,   103,    55,   101,    99,
-     0,    73,    37,    89,    19,    54,   103,    55,   101,    99,
-     0,    37,    89,    19,    54,   103,    55,   101,    99,     0,
-    39,    54,    21,    55,    89,    19,    54,   103,    55,   101,
-    99,     0,    73,    89,    19,    54,   103,    55,   101,    99,
-     0,    19,    54,    19,    55,    99,     0,    19,   102,     0,
-    19,   102,    19,   102,     0,     0,   109,     0,    52,    24,
-     0,     6,     0,    19,     0,    19,     5,     0,     5,    19,
-     0,    19,    58,   104,     0,    19,     5,    58,   104,     0,
-     5,    19,    58,   104,     0,   104,     0,   105,    58,    10,
-     0,   105,     0,   105,    58,   106,     0,   106,     0,    89,
-    19,     0,    89,    19,    22,     0,    89,    19,    54,    19,
-   107,    55,     0,    89,    19,    22,    54,    19,   107,    55,
-     0,   107,   108,     0,   108,     0,    19,     0,    61,   109,
-     0,    62,   109,     0,    61,    57,   109,     0,    62,    57,
-   109,     0,    57,    57,   109,     0,    63,    57,   109,     0,
-    20,     0,    64,    20,     0,    23,     0,    19,     0
+     0,    29,     0,    68,    67,     0,    68,   110,     0,    68,
+   113,     0,    68,   115,     0,    67,     0,   110,     0,   113,
+     0,   115,     0,    70,    53,    72,    54,     0,    70,    53,
+    54,     0,     3,    21,     4,    21,    71,     0,     0,    55,
+    19,    19,    56,    71,     0,    55,    19,    21,    56,    71,
+     0,    55,    19,    20,    56,    71,     0,    72,    73,     0,
+    73,     0,   101,     0,    19,   101,     0,    19,    21,   101,
+     0,    78,     0,    79,     0,    81,     0,    57,     0,    31,
+     0,    32,     0,    33,     0,    34,     0,    19,    19,     0,
+    19,    53,    24,     0,    58,   117,     0,    58,    53,    24,
+     0,    75,    76,     0,    76,    75,     0,    76,     0,    75,
+     0,     0,    74,    90,    19,    77,    57,     0,    74,    90,
+    19,    22,    77,    57,     0,    36,    88,    87,    19,    80,
+    19,    53,    24,    19,    53,    24,    57,     0,    36,    88,
+    87,    19,    80,    19,    53,    24,    57,     0,    36,    88,
+    87,    19,    80,    19,     0,    55,    19,    56,     0,     0,
+    35,    19,    19,    82,    19,    53,    24,    19,    53,    24,
+    57,     0,    35,    19,    19,    82,    19,    53,    24,    57,
+     0,    35,    19,    19,    82,    57,     0,    55,    83,    56,
+     0,     0,    83,    59,    86,     0,    86,     0,    30,     0,
+    19,    55,    30,    56,     0,   117,     0,    84,     0,    40,
+    58,    84,     0,    41,    58,    84,     0,    42,    58,   117,
+     0,    43,    58,   117,     0,    44,    58,    85,     0,    46,
+    58,    89,     0,    47,    58,    90,     0,    48,    58,    19,
+     0,    49,    58,    19,     0,    50,    58,    19,     0,    51,
+    58,    19,     0,    52,    58,    19,     0,    19,     0,    19,
+    55,    19,    90,    56,     0,    19,     0,    55,    89,    56,
+     0,     0,    19,    60,    89,     0,    19,     0,    91,    95,
+     0,    91,     0,    92,     0,    19,     0,     5,    19,     0,
+    19,     5,     0,    94,    19,     0,     5,    94,    19,     0,
+    94,    19,     5,     0,    93,    92,     0,    21,    92,     0,
+     5,    92,     0,    21,     0,    21,     5,     0,    93,     0,
+    93,     5,     0,     6,     0,    18,     0,    14,     0,    15,
+     0,    13,     0,    16,     0,    17,     0,    11,     0,    12,
+     0,     7,     0,     8,     0,     9,     0,    61,     0,    61,
+     5,     0,    61,    95,     0,    61,     5,    95,     0,    19,
+    98,     0,    98,     0,    74,    19,    98,     0,    19,    74,
+    98,     0,    74,    98,     0,    96,     0,    19,    55,    99,
+    56,     0,    99,    59,    19,     0,    19,     0,    53,    24,
+     0,    57,     0,    38,    88,    97,    90,    19,    55,   104,
+    56,   102,   100,     0,    74,    38,    88,    96,    90,    19,
+    55,   104,    56,   102,   100,     0,    37,    74,    90,    19,
+    55,   104,    56,   102,   100,     0,    74,    37,    90,    19,
+    55,   104,    56,   102,   100,     0,    37,    90,    19,    55,
+   104,    56,   102,   100,     0,    39,    55,    21,    56,    90,
+    19,    55,   104,    56,   102,   100,     0,    74,    90,    19,
+    55,   104,    56,   102,   100,     0,    19,    55,    19,    56,
+   100,     0,    19,   103,     0,    19,   103,    19,   103,     0,
+     0,   117,     0,    53,    24,     0,     6,     0,    19,     0,
+    19,     5,     0,     5,    19,     0,    19,    59,   105,     0,
+    19,     5,    59,   105,     0,     5,    19,    59,   105,     0,
+   105,     0,   106,    59,    10,     0,   106,     0,   106,    59,
+   107,     0,   107,     0,    90,    19,     0,    90,    19,    22,
+     0,    90,    19,    55,    19,   108,    56,     0,    90,    19,
+    22,    55,    19,   108,    56,     0,   108,   109,     0,   109,
+     0,    19,     0,    62,   117,     0,    63,   117,     0,    62,
+    58,   117,     0,    63,    58,   117,     0,    58,    58,   117,
+     0,    64,    58,   117,     0,     9,    19,    53,   111,    54,
+    21,    57,     0,     9,    19,    53,   111,    59,    54,    21,
+    57,     0,   111,    59,   112,     0,   112,     0,    19,    58,
+   117,     0,    19,     0,    46,    19,    53,   114,    54,    21,
+    57,     0,    46,    19,    53,   114,    59,    54,    21,    57,
+     0,   114,    59,    19,     0,    19,     0,    45,    19,    53,
+   116,    54,    21,    57,     0,    45,    19,    53,   116,    59,
+    54,    21,    57,     0,   116,    59,    19,     0,    19,     0,
+    20,     0,    65,    20,     0,    23,     0,    19,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   591,   592,   593,   594,   597,   606,   615,   624,   633,   642,
-   653,   654,   657,   662,   669,   679,   680,   692,   706,   707,
-   710,   711,   719,   720,   721,   722,   725,   726,   727,   728,
-   731,   751,   775,   779,   787,   788,   789,   790,   791,   797,
-   800,   805,   873,   927,  1015,  1023,  1028,  1076,  1112,  1128,
-  1129,  1132,  1133,  1136,  1137,  1149,  1150,  1153,  1159,  1165,
-  1171,  1177,  1183,  1189,  1196,  1202,  1208,  1214,  1220,  1226,
-  1246,  1255,  1261,  1262,  1265,  1268,  1274,  1281,  1290,  1293,
-  1296,  1300,  1304,  1308,  1313,  1321,  1325,  1330,  1334,  1337,
-  1341,  1344,  1349,  1350,  1351,  1352,  1353,  1354,  1355,  1356,
-  1357,  1360,  1361,  1362,  1365,  1366,  1367,  1371,  1378,  1390,
-  1396,  1408,  1420,  1423,  1429,  1434,  1437,  1442,  1443,  1447,
-  1463,  1479,  1495,  1511,  1522,  1528,  1538,  1561,  1572,  1591,
-  1597,  1598,  1604,  1605,  1616,  1627,  1638,  1648,  1658,  1668,
-  1671,  1672,  1675,  1676,  1679,  1682,  1685,  1693,  1703,  1704,
-  1707,  1724,  1731,  1738,  1745,  1752,  1759,  1768,  1769,  1773,
-  1774
+   597,   598,   599,   600,   603,   612,   621,   630,   639,   648,
+   659,   660,   661,   662,   663,   664,   665,   666,   669,   674,
+   681,   695,   696,   708,   717,   731,   732,   735,   736,   745,
+   757,   758,   759,   760,   763,   764,   765,   766,   769,   789,
+   813,   817,   825,   826,   827,   828,   829,   835,   838,   843,
+   911,   965,  1053,  1061,  1066,  1114,  1150,  1166,  1167,  1170,
+  1171,  1174,  1175,  1187,  1188,  1191,  1197,  1203,  1209,  1215,
+  1221,  1227,  1234,  1240,  1246,  1252,  1258,  1264,  1284,  1293,
+  1299,  1300,  1303,  1306,  1312,  1319,  1328,  1331,  1334,  1338,
+  1342,  1346,  1351,  1359,  1363,  1368,  1372,  1375,  1379,  1382,
+  1387,  1388,  1389,  1390,  1391,  1392,  1393,  1394,  1395,  1398,
+  1399,  1400,  1403,  1404,  1405,  1409,  1416,  1428,  1434,  1446,
+  1458,  1461,  1467,  1472,  1475,  1480,  1481,  1485,  1501,  1517,
+  1533,  1549,  1560,  1566,  1576,  1599,  1610,  1629,  1635,  1636,
+  1642,  1643,  1654,  1665,  1676,  1686,  1696,  1706,  1709,  1710,
+  1713,  1714,  1717,  1720,  1723,  1731,  1741,  1742,  1745,  1762,
+  1769,  1776,  1783,  1790,  1797,  1806,  1815,  1826,  1827,  1830,
+  1850,  1860,  1869,  1880,  1883,  1888,  1897,  1908,  1911,  1917,
+  1918,  1922,  1923
 };
 #endif
 
@@ -778,7 +799,7 @@ static const char * const yytname[] = {   "$","error","$undefined.","CLASS",
 "LONG","SHORT","INT","FLOAT","DOUBLE","CHAR","TOKEN","NUMBER","TYPETOKEN","ARRAY_DIM",
 "SINGLE_CHAR","CCODE","HTCODE","PHCODE","HCODE","ACODE","ATCODE","STRING","PUBLIC",
 "PRIVATE","PROTECTED","CLASSWIDE","PROPERTY","ARGUMENT","VIRTUAL","SIGNAL","OVERRIDE",
-"NICK","BLURB","MAXIMUM","MINIMUM","DEFAULT_VALUE","FLAGS","TYPE","FLAGS_TYPE",
+"NICK","BLURB","MAXIMUM","MINIMUM","DEFAULT_VALUE","ERROR","FLAGS","TYPE","FLAGS_TYPE",
 "ENUM_TYPE","PARAM_TYPE","BOXED_TYPE","OBJECT_TYPE","'{'","'}'","'('","')'",
 "';'","'='","','","'|'","'*'","'>'","'<'","'!'","'-'","prog","ccode","ccodes",
 "class","classdec","classflags","classcode","thing","scope","destructor","initializer",
@@ -786,248 +807,285 @@ static const char * const yytname[] = {   "$","error","$undefined.","CLASS",
 "string","anyval","param_spec_value","argtype","flags","flaglist","type","specifier_list",
 "spec_list","specifier","strunionenum","pointer","simplesigtype","fullsigtype",
 "sigtype","tokenlist","codenocode","method","returnvals","retcode","funcargs",
-"arglist","arglist1","arg","checklist","check","numtok", NULL
+"arglist","arglist1","arg","checklist","check","enumcode","enumvals","enumval",
+"flagcode","flagvals","errorcode","errorvals","numtok", NULL
 };
 #endif
 
 static const short yyr1[] = {     0,
-    65,    65,    65,    65,    66,    66,    66,    66,    66,    66,
-    67,    67,    68,    68,    69,    70,    70,    70,    71,    71,
-    72,    72,    72,    72,    72,    72,    73,    73,    73,    73,
-    74,    74,    75,    75,    76,    76,    76,    76,    76,    77,
-    77,    78,    78,    78,    79,    79,    80,    80,    80,    81,
-    81,    82,    82,    83,    83,    84,    84,    85,    85,    85,
-    85,    85,    85,    85,    85,    85,    85,    85,    85,    85,
-    86,    86,    87,    87,    88,    88,    89,    89,    90,    90,
-    90,    90,    90,    90,    90,    91,    91,    91,    91,    91,
-    91,    91,    92,    92,    92,    92,    92,    92,    92,    92,
-    92,    93,    93,    93,    94,    94,    94,    94,    95,    95,
-    96,    96,    96,    96,    97,    98,    98,    99,    99,   100,
-   100,   100,   100,   100,   100,   100,   100,   101,   101,   101,
-   102,   102,   103,   103,   103,   103,   103,   103,   103,   103,
-   104,   104,   105,   105,   106,   106,   106,   106,   107,   107,
-   108,   108,   108,   108,   108,   108,   108,   109,   109,   109,
-   109
+    66,    66,    66,    66,    67,    67,    67,    67,    67,    67,
+    68,    68,    68,    68,    68,    68,    68,    68,    69,    69,
+    70,    71,    71,    71,    71,    72,    72,    73,    73,    73,
+    73,    73,    73,    73,    74,    74,    74,    74,    75,    75,
+    76,    76,    77,    77,    77,    77,    77,    78,    78,    79,
+    79,    79,    80,    80,    81,    81,    81,    82,    82,    83,
+    83,    84,    84,    85,    85,    86,    86,    86,    86,    86,
+    86,    86,    86,    86,    86,    86,    86,    86,    87,    87,
+    88,    88,    89,    89,    90,    90,    91,    91,    91,    91,
+    91,    91,    91,    92,    92,    92,    92,    92,    92,    92,
+    93,    93,    93,    93,    93,    93,    93,    93,    93,    94,
+    94,    94,    95,    95,    95,    95,    96,    96,    97,    97,
+    97,    97,    98,    99,    99,   100,   100,   101,   101,   101,
+   101,   101,   101,   101,   101,   102,   102,   102,   103,   103,
+   104,   104,   104,   104,   104,   104,   104,   104,   105,   105,
+   106,   106,   107,   107,   107,   107,   108,   108,   109,   109,
+   109,   109,   109,   109,   109,   110,   110,   111,   111,   112,
+   112,   113,   113,   114,   114,   115,   115,   116,   116,   117,
+   117,   117,   117
 };
 
 static const short yyr2[] = {     0,
      3,     2,     2,     1,     1,     1,     1,     1,     1,     1,
-     2,     1,     4,     3,     5,     0,     5,     5,     2,     1,
-     1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-     2,     3,     2,     3,     2,     2,     1,     1,     0,     5,
-     6,    12,     9,     6,     3,     0,    11,     8,     5,     3,
-     0,     3,     1,     1,     4,     1,     1,     3,     3,     3,
-     3,     3,     3,     3,     3,     3,     3,     3,     3,     1,
-     5,     1,     3,     0,     3,     1,     2,     1,     1,     1,
-     2,     2,     2,     3,     3,     2,     2,     2,     1,     2,
-     1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     2,     2,     3,     2,     1,
-     3,     3,     2,     1,     4,     3,     1,     2,     1,    10,
-    11,     9,     9,     8,    11,     8,     5,     2,     4,     0,
-     1,     2,     1,     1,     2,     2,     3,     4,     4,     1,
-     3,     1,     3,     1,     2,     3,     6,     7,     2,     1,
-     1,     2,     2,     3,     3,     3,     3,     1,     2,     1,
-     1
+     2,     2,     2,     2,     1,     1,     1,     1,     4,     3,
+     5,     0,     5,     5,     5,     2,     1,     1,     2,     3,
+     1,     1,     1,     1,     1,     1,     1,     1,     2,     3,
+     2,     3,     2,     2,     1,     1,     0,     5,     6,    12,
+     9,     6,     3,     0,    11,     8,     5,     3,     0,     3,
+     1,     1,     4,     1,     1,     3,     3,     3,     3,     3,
+     3,     3,     3,     3,     3,     3,     3,     1,     5,     1,
+     3,     0,     3,     1,     2,     1,     1,     1,     2,     2,
+     2,     3,     3,     2,     2,     2,     1,     2,     1,     2,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     2,     2,     3,     2,     1,     3,     3,
+     2,     1,     4,     3,     1,     2,     1,    10,    11,     9,
+     9,     8,    11,     8,     5,     2,     4,     0,     1,     2,
+     1,     1,     2,     2,     3,     4,     4,     1,     3,     1,
+     3,     1,     2,     3,     6,     7,     2,     1,     1,     2,
+     2,     3,     3,     3,     3,     7,     8,     3,     1,     3,
+     1,     7,     8,     3,     1,     7,     8,     3,     1,     1,
+     2,     1,     1
 };
 
 static const short yydefact[] = {     0,
-     0,     5,     7,     8,     6,     9,    10,    12,     0,     4,
-     0,     0,    11,     3,     2,     0,     0,     1,     0,    27,
-    28,    29,    30,     0,    74,     0,    74,     0,    14,    26,
-     0,    20,     0,    23,    24,    25,    21,    16,     0,     0,
-     0,    22,     0,     0,     0,     0,    93,   102,   103,   104,
-   100,   101,    97,    95,    96,    98,    99,    94,    80,    89,
-     0,     0,    78,    79,    91,     0,     0,     0,    13,    19,
-     0,    74,     0,     0,    15,     0,     0,    51,    76,     0,
-    72,     0,     0,    81,    88,     0,    82,    90,    87,     0,
-     0,   105,    77,    92,    86,    83,     0,     0,   114,     0,
-   110,     0,     0,     0,    39,     0,     0,     0,     0,     0,
-     0,    73,     0,    46,    84,     0,     0,   106,   107,    85,
-     0,     0,     0,   109,     0,   113,     0,     0,     0,     0,
-     0,     0,    39,     0,     0,    38,    37,     0,     0,     0,
-     0,   119,   127,    70,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    53,     0,    49,
-    75,     0,     0,     0,     0,     0,    93,    80,     0,     0,
-   140,   142,   144,   108,   117,     0,   112,   111,     0,     0,
-     0,     0,    31,     0,     0,     0,   161,   158,   160,     0,
-     0,    33,    35,    36,    40,    16,    16,   118,     0,     0,
+     0,     0,     5,     7,     8,     6,     9,    10,     0,     0,
+    15,     0,     4,     0,    16,    17,    18,     0,     0,     0,
+     0,    11,     3,    12,    13,    14,     2,     0,     0,     0,
+     0,     0,     1,     0,    35,    36,    37,    38,     0,    82,
+     0,    82,     0,    20,    34,     0,    27,     0,    31,    32,
+    33,    28,    22,   171,     0,   169,   179,     0,   175,     0,
+     0,     0,     0,     0,    29,     0,     0,     0,     0,   101,
+   110,   111,   112,   108,   109,   105,   103,   104,   106,   107,
+   102,    88,    97,     0,     0,    86,    87,    99,     0,     0,
+     0,    19,    26,     0,    82,     0,     0,    21,     0,     0,
+     0,     0,     0,     0,     0,    30,     0,     0,    59,    84,
+     0,    80,     0,     0,    89,    96,     0,    90,    98,    95,
+     0,     0,   113,    85,   100,    94,    91,     0,     0,   122,
+     0,   118,     0,     0,     0,    47,     0,   183,   180,   182,
+     0,   170,     0,     0,   168,     0,   178,     0,     0,   174,
+     0,     0,     0,     0,     0,     0,    81,     0,    54,    92,
+     0,     0,   114,   115,    93,     0,     0,     0,   117,     0,
+   121,     0,     0,     0,     0,     0,     0,    47,     0,     0,
+    46,    45,     0,     0,     0,     0,   181,   166,     0,   176,
+     0,   172,     0,     0,   127,   135,    78,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    50,     0,     0,     0,     0,    44,     0,    81,    82,     0,
-   145,   130,     0,   115,     0,     0,     0,     0,     0,    32,
-    41,   130,    34,   159,    17,    18,     0,    54,    58,    59,
-    60,    61,   161,    57,    62,    56,    63,    64,    65,    66,
-    67,    68,    69,    52,     0,    71,    45,     0,   130,     0,
-     0,   137,   146,     0,     0,     0,   141,   143,   116,     0,
-     0,   130,     0,     0,     0,     0,    48,     0,     0,   139,
-   138,     0,     0,     0,   128,   131,   124,   130,     0,     0,
-     0,   126,     0,     0,     0,    43,   122,     0,   151,     0,
-     0,     0,     0,     0,   150,   132,     0,     0,   130,   123,
-   130,    55,     0,     0,     0,     0,     0,   152,     0,   153,
-     0,   147,   149,   129,   120,     0,     0,    47,     0,   148,
-   156,   154,   155,   157,   125,   121,    42,     0,     0,     0
+    61,     0,    57,    83,     0,     0,     0,     0,     0,   101,
+    88,     0,     0,   148,   150,   152,   116,   125,     0,   120,
+   119,     0,     0,     0,     0,    39,     0,     0,     0,     0,
+    41,    43,    44,    48,    22,    22,    22,   167,   177,   173,
+   126,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    58,     0,     0,     0,     0,    52,     0,
+    89,    90,     0,   153,   138,     0,   123,     0,     0,     0,
+     0,     0,    40,    49,   138,    42,    23,    25,    24,     0,
+    62,    66,    67,    68,    69,   183,    65,    70,    64,    71,
+    72,    73,    74,    75,    76,    77,    60,     0,    79,    53,
+     0,   138,     0,     0,   145,   154,     0,     0,     0,   149,
+   151,   124,     0,     0,   138,     0,     0,     0,     0,    56,
+     0,     0,   147,   146,     0,     0,     0,   136,   139,   132,
+   138,     0,     0,     0,   134,     0,     0,     0,    51,   130,
+     0,   159,     0,     0,     0,     0,     0,   158,   140,     0,
+     0,   138,   131,   138,    63,     0,     0,     0,     0,     0,
+   160,     0,   161,     0,   155,   157,   137,   128,     0,     0,
+    55,     0,   156,   164,   162,   163,   165,   133,   129,    50,
+     0,     0,     0
 };
 
-static const short yydefgoto[] = {   338,
-     8,     9,    10,    11,    75,    31,    32,    33,   136,   137,
-   138,    34,    35,   164,    36,   110,   157,   239,   245,   158,
-    82,    45,    80,   169,    63,    64,    65,    66,    93,    99,
-   100,   101,   176,   143,    37,   266,   285,   170,   171,   172,
-   173,   304,   305,   286
+static const short yydefgoto[] = {   391,
+    11,    12,    13,    14,    98,    46,    47,    48,   181,   182,
+   183,    49,    50,   217,    51,   155,   210,   292,   298,   211,
+   113,    68,   111,   222,    86,    87,    88,    89,   124,   130,
+   131,   132,   229,   196,    52,   319,   338,   223,   224,   225,
+   226,   357,   358,    15,    55,    56,    16,    60,    17,    58,
+   339
 };
 
-static const short yypact[] = {   144,
-    -7,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   144,   407,
-   -21,    40,-32768,   407,   407,   121,    71,   407,   166,-32768,
--32768,-32768,-32768,    78,    45,   266,    45,    54,-32768,-32768,
-   156,-32768,   216,-32768,-32768,-32768,-32768,    92,    94,    97,
-   216,-32768,   157,   159,   160,   313,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   158,   381,
-   330,   164,   136,-32768,   395,   183,   257,   185,-32768,-32768,
-   330,    45,   200,   207,-32768,   184,   221,   187,   188,   189,
-   192,   223,   409,-32768,-32768,   229,-32768,   409,-32768,   230,
-   197,     1,-32768,   409,-32768,   247,   182,   236,-32768,   330,
--32768,   201,   238,   239,    68,    10,    61,   232,   219,    22,
-   159,-32768,   273,   240,-32768,   241,   347,   136,-32768,-32768,
-   242,   274,   297,-32768,    -4,-32768,   304,   330,   279,    -4,
-   330,    60,    -9,   347,     0,   283,   331,   301,   312,   319,
-   360,-32768,-32768,-32768,   332,   333,   334,   346,   348,   361,
-   362,   371,   372,   380,   382,   383,   106,-32768,   336,-32768,
--32768,   330,   385,   398,   347,   364,   386,     7,   419,   387,
--32768,   388,-32768,-32768,-32768,   107,-32768,-32768,   389,   425,
-   347,   426,-32768,   423,   392,   394,-32768,-32768,-32768,   427,
-   430,-32768,-32768,-32768,-32768,    92,    92,-32768,    13,    13,
-    37,    37,     5,   159,   330,   433,   434,   435,   436,   437,
--32768,   219,   438,   402,   403,   408,   404,   152,   153,   330,
-    66,   442,   296,-32768,   444,   347,   410,   411,   413,-32768,
--32768,   442,-32768,-32768,-32768,-32768,   414,-32768,-32768,-32768,
--32768,-32768,   414,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,    39,-32768,-32768,   441,   442,   330,
-   330,-32768,   415,   451,    19,    61,-32768,-32768,-32768,   416,
-   347,   442,   347,    61,   443,   420,-32768,    53,    61,-32768,
--32768,   455,    88,   452,   456,-32768,-32768,   442,   422,    61,
-   424,-32768,   428,   454,   429,-32768,-32768,    88,-32768,   431,
-    57,    62,   432,    72,-32768,-32768,    19,    61,   442,-32768,
-   442,-32768,   439,   458,    81,    37,    37,-32768,    37,-32768,
-    37,-32768,-32768,-32768,-32768,    61,    61,-32768,   440,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   480,   484,-32768
+static const short yypact[] = {   168,
+    18,    21,-32768,-32768,-32768,-32768,-32768,-32768,    41,    89,
+-32768,   168,   213,    56,-32768,-32768,-32768,   138,    77,   109,
+   110,-32768,   213,-32768,-32768,-32768,   213,   167,   123,   153,
+   155,   189,   213,   230,-32768,-32768,-32768,-32768,   190,   156,
+   309,   156,   161,-32768,-32768,   196,-32768,   275,-32768,-32768,
+-32768,-32768,   162,   165,   -17,-32768,-32768,   -13,-32768,    91,
+   164,   300,   201,   275,-32768,   206,   207,   217,   356,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   247,   424,   373,   235,   199,-32768,   438,   238,   443,
+   244,-32768,-32768,   373,   156,   253,   255,-32768,     6,   245,
+    -1,   256,    26,   258,    73,-32768,   222,   276,   274,   242,
+   254,   280,   292,   452,-32768,-32768,   317,-32768,   452,-32768,
+   340,   311,     2,-32768,   452,-32768,   371,   157,   364,-32768,
+   373,-32768,   337,   381,   391,    88,   224,-32768,-32768,-32768,
+   397,-32768,   370,   410,-32768,   375,-32768,   412,   377,-32768,
+   425,   -34,   392,   257,    -7,   207,-32768,   429,   405,-32768,
+   406,   390,   199,-32768,-32768,   416,   453,   459,-32768,    14,
+-32768,   460,   373,   426,    14,   373,    13,     9,   390,    59,
+   422,   463,   427,   430,   431,   432,-32768,-32768,   428,-32768,
+   433,-32768,   434,   465,-32768,-32768,-32768,   435,   436,   437,
+   439,   440,   441,   442,   444,   445,   446,   447,   448,   122,
+-32768,   454,-32768,-32768,   373,   464,   473,   390,   407,   455,
+     5,   477,   456,-32768,   449,-32768,-32768,-32768,   124,-32768,
+-32768,   458,   482,   390,   490,-32768,   486,   457,   461,   491,
+-32768,-32768,-32768,-32768,   162,   162,   162,-32768,-32768,-32768,
+-32768,    84,    84,     6,     6,    64,   207,   373,   497,   499,
+   500,   501,   502,-32768,   257,   498,   467,   468,   472,   470,
+   126,   128,   373,    63,   508,   339,-32768,   509,   390,   474,
+   475,   478,-32768,-32768,   508,-32768,-32768,-32768,-32768,   479,
+-32768,-32768,-32768,-32768,-32768,   479,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,    -2,-32768,-32768,
+   506,   508,   373,   373,-32768,   480,   513,    70,   -34,-32768,
+-32768,-32768,   481,   390,   508,   390,   -34,   510,   483,-32768,
+    16,   -34,-32768,-32768,   519,   106,   515,   522,-32768,-32768,
+   508,   487,   -34,   488,-32768,   489,   518,   493,-32768,-32768,
+   106,-32768,   492,    76,    82,   494,    57,-32768,-32768,    70,
+   -34,   508,-32768,   508,-32768,   496,   523,   103,     6,     6,
+-32768,     6,-32768,     6,-32768,-32768,-32768,-32768,   -34,   -34,
+-32768,   503,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   548,   549,-32768
 };
 
 static const short yypgoto[] = {-32768,
-    87,   118,   476,-32768,   -66,-32768,   459,    -8,   349,   351,
-   358,-32768,-32768,-32768,-32768,-32768,-32768,   -85,-32768,   280,
--32768,   -18,  -106,   -25,-32768,   -43,-32768,   -42,   -65,   390,
--32768,   120,-32768,  -253,   474,  -225,   190,  -132,  -150,-32768,
-   275,   202,  -211,  -135
+    99,   125,   539,-32768,     1,-32768,   511,   -28,   372,   374,
+   378,-32768,-32768,-32768,-32768,-32768,-32768,   -46,-32768,   293,
+-32768,   -27,  -151,   -40,-32768,   -67,-32768,   -66,  -112,   450,
+-32768,   -98,-32768,  -305,   -14,  -276,   202,  -175,  -216,-32768,
+   283,   210,  -240,   104,-32768,   462,   127,-32768,   146,-32768,
+   -99
 };
 
 
-#define        YYLAST          500
-
-
-static const short yytable[] = {   192,
-    62,   186,    85,    86,   161,   118,   274,    73,    67,   132,
-    41,   219,   287,    12,   121,    77,    89,    61,   187,   188,
-   292,    95,   189,   243,   188,   297,   119,   189,   139,   140,
-    16,   237,   217,   279,   238,    90,   310,   187,   188,    85,
-   159,   189,   238,    17,    85,   103,   290,   135,   228,   122,
-    85,   190,   174,   104,   325,   187,   188,   276,    98,   189,
-    92,  -134,   308,   191,   220,   241,   242,   246,   191,   262,
-   284,   295,   335,   336,   127,   187,   188,   160,   183,   189,
-   187,   188,   191,   326,   189,   327,   132,   263,   123,   133,
-   299,    38,   323,   270,   277,    13,    43,   247,    44,   299,
-   191,    13,   180,   323,    13,   182,   299,    68,   296,   280,
-   281,   184,   141,   317,   240,    76,   142,   244,   319,   264,
-   191,   134,    85,    86,   135,   191,   322,    15,   300,   235,
-   236,    18,   301,   302,   303,   330,   214,   300,   289,    19,
-   291,   301,   302,   303,   300,    74,     1,    40,   301,   302,
-   303,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-   211,   224,    87,   212,   225,   318,   320,     2,     3,     4,
-     5,     6,     7,    29,    19,    78,    30,    79,    81,   248,
-   331,   332,    91,   333,    39,   334,    20,    21,    22,    23,
-    24,    25,    26,    27,    28,    92,    20,    21,    22,    23,
-   121,    96,    26,    27,    28,   102,  -136,  -135,    69,   260,
-   261,    30,    20,    21,    22,    23,   124,   126,   105,    40,
-    46,    47,    48,    49,    50,   106,    51,    52,    53,    54,
-    55,    56,    57,    58,    59,   122,    60,   144,   107,   108,
-   109,   114,   177,   112,   178,   113,   111,   115,   116,   124,
-   117,   120,    71,    72,   125,   128,   129,   130,   145,   146,
-   147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-    46,    47,    48,    49,    50,    97,    51,    52,    53,    54,
-    55,    56,    57,    58,    59,   134,    60,    20,    21,    22,
-    23,   162,   175,   163,   165,   122,    20,    21,    22,    23,
-    46,    47,    48,    49,    50,   267,    51,    52,    53,    54,
-    55,    56,    57,    58,    59,   121,    60,    83,    47,    48,
-    49,    50,   179,    51,    52,    53,    54,    55,    56,    57,
-    58,    84,   181,    60,    46,    47,    48,    49,    50,   135,
-    51,    52,    53,    54,    55,    56,    57,    58,    59,   132,
-    60,   166,   167,    48,    49,    50,   195,    51,    52,    53,
-    54,    55,    56,    57,    58,   168,   196,    60,    83,    47,
-    48,    49,    50,   197,    51,    52,    53,    54,    55,    56,
-    57,    58,   218,   198,    60,    88,    47,   213,   199,   200,
-   201,    51,    52,    53,    54,    55,    56,    57,    58,    94,
-    47,    60,   202,   215,   203,    51,    52,    53,    54,    55,
-    56,    57,    58,    83,    47,    60,   216,   204,   205,    51,
-    52,    53,    54,    55,    56,    57,    58,   206,   207,    60,
-     2,     3,     4,     5,     6,     7,   208,   221,   209,   210,
-  -133,   222,   226,   227,   229,   223,   230,   231,   232,   234,
-   233,   249,   250,   251,   252,   253,   256,   257,   259,   258,
-   265,   255,   269,   271,   278,   272,   273,   275,   282,   283,
-   288,   294,   293,   298,   307,   306,   309,   313,   311,   339,
-   314,   329,   312,   340,    14,   194,   193,   316,   321,    70,
-   185,   254,    42,   131,   328,   337,   324,   268,     0,   315
+#define        YYLAST          585
+
+
+static const short yytable[] = {   142,
+    85,   116,   117,   239,   214,    64,   163,    96,   327,   272,
+   164,   212,    84,   340,    90,   120,   329,    54,   194,    65,
+   126,   345,   195,   108,   138,   139,   350,   177,   140,   169,
+   171,   236,   166,    64,   348,   332,   100,   363,    18,    19,
+   102,   101,   270,   121,   147,   103,   116,   106,   343,   213,
+   227,   116,   144,   134,   330,   378,   315,   116,   281,    20,
+  -142,   129,   123,   273,   361,   237,   180,   135,   167,   230,
+   141,   231,   349,   388,   389,   352,   169,   138,   139,   148,
+   241,   140,   296,   139,   316,   379,   140,   380,   138,   139,
+   172,   150,   140,   291,   138,   139,   333,   334,   140,   168,
+   138,   139,   290,   323,   140,   300,   177,    21,    28,   178,
+    22,   240,   375,   291,   353,    24,   376,   317,   354,   355,
+   356,   352,   337,   141,   352,    22,   151,   376,   141,    30,
+    24,    22,   233,   370,   141,   235,    24,    27,    25,   372,
+   141,    29,   179,    53,   104,   180,   141,    33,   342,   105,
+   344,   116,   117,    25,   294,   295,   299,    26,   383,    25,
+   353,    31,    32,   353,   354,   355,   356,   354,   355,   356,
+     1,    54,    26,    57,   267,   166,     2,   264,    26,   277,
+   265,  -144,   278,  -143,   313,    34,   314,    35,    36,    37,
+    38,     3,     4,     5,     6,     7,     8,    35,    36,    37,
+    38,    39,    40,    41,    42,    43,   293,    59,    66,   297,
+    67,   167,     9,    10,    34,    91,    97,   301,    63,   107,
+    44,     2,    99,    45,   109,   110,    35,    36,    37,    38,
+    39,    40,    41,    42,    43,   112,     3,     4,     5,     6,
+     7,     8,   184,   185,   186,   287,   288,   289,    61,    92,
+    62,   118,    45,   122,   371,   373,   127,     9,    10,   123,
+    35,    36,    37,    38,   133,   143,    41,    42,    43,   384,
+   385,   136,   386,   137,   387,   197,   146,   152,   149,    69,
+    70,    71,    72,    73,    63,    74,    75,    76,    77,    78,
+    79,    80,    81,    82,   153,    83,   198,   199,   200,   201,
+   202,   156,   203,   204,   205,   206,   207,   208,   209,   157,
+   159,    94,    95,    69,    70,    71,    72,    73,    61,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,   154,    83,
+    35,    36,    37,    38,   158,   160,    41,    42,    43,    35,
+    36,    37,    38,    69,    70,    71,    72,    73,   320,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,   161,    83,
+   114,    70,    71,    72,    73,   162,    74,    75,    76,    77,
+    78,    79,    80,    81,   115,   165,    83,    69,    70,    71,
+    72,    73,   170,    74,    75,    76,    77,    78,    79,    80,
+    81,    82,   173,    83,   219,   220,    71,    72,    73,   174,
+    74,    75,    76,    77,    78,    79,    80,    81,   221,   175,
+    83,   114,    70,    71,    72,    73,   187,    74,    75,    76,
+    77,    78,    79,    80,    81,   271,   188,    83,   119,    70,
+   189,   190,   191,   192,    74,    75,    76,    77,    78,    79,
+    80,    81,   125,    70,    83,   193,   179,   215,    74,    75,
+    76,    77,    78,    79,    80,    81,   114,    70,    83,   216,
+   218,   128,    74,    75,    76,    77,    78,    79,    80,    81,
+   167,   228,    83,    35,    36,    37,    38,   166,   232,   180,
+   234,   177,   268,   244,   248,   245,   246,   247,   251,   249,
+   250,   269,   252,   253,   254,   274,   255,   256,   257,   258,
+   280,   259,   260,   261,   262,   263,   266,   276,   282,   283,
+  -141,   275,   279,   284,   286,   302,   285,   303,   304,   305,
+   306,   308,   309,   310,   311,   312,   318,   322,   324,   331,
+   325,   336,   326,   328,   335,   347,   341,   351,   359,   346,
+   360,   366,   362,   364,   365,   367,   382,   392,   393,   369,
+    23,   374,   381,   243,   242,   238,    93,   307,   321,   390,
+   368,   377,   145,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   176
 };
 
-static const short yycheck[] = {   135,
-    26,   134,    46,    46,   111,     5,   232,    33,    27,    19,
-    19,     5,   266,    21,    19,    41,    60,    26,    19,    20,
-   274,    65,    23,    19,    20,   279,    92,    23,    19,    20,
-    52,    19,   165,   259,    30,    61,   290,    19,    20,    83,
-    19,    23,    30,     4,    88,    71,   272,    57,   181,    54,
-    94,    52,   118,    72,   308,    19,    20,    19,    67,    23,
-    60,    55,   288,    64,    58,   201,   202,   203,    64,   220,
-    52,    19,   326,   327,   100,    19,    20,    56,    19,    23,
-    19,    20,    64,   309,    23,   311,    19,    22,    97,    22,
-    19,    21,   304,   226,    56,     9,    19,   204,    54,    19,
-    64,    15,   128,   315,    18,   131,    19,    54,    56,   260,
-   261,    52,    52,    57,   200,    19,    56,   203,    57,    54,
-    64,    54,   166,   166,    57,    64,    55,    10,    57,   196,
-   197,    14,    61,    62,    63,    55,   162,    57,   271,    19,
-   273,    61,    62,    63,    57,    54,     3,    54,    61,    62,
-    63,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-    55,    55,     5,    58,    58,   301,   302,    24,    25,    26,
-    27,    28,    29,    53,    19,    19,    56,    19,    19,   205,
-   316,   317,    19,   319,    19,   321,    31,    32,    33,    34,
-    35,    36,    37,    38,    39,    60,    31,    32,    33,    34,
-    19,    19,    37,    38,    39,    21,    55,    55,    53,    58,
-    58,    56,    31,    32,    33,    34,    97,    98,    19,    54,
-     5,     6,     7,     8,     9,    19,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    54,    21,    19,    55,    19,
-    54,    19,   123,    55,   125,    54,    59,    19,    19,   130,
-    54,     5,    37,    38,    19,    55,    19,    19,    40,    41,
-    42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-     5,     6,     7,     8,     9,    19,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    54,    21,    31,    32,    33,
-    34,    19,    19,    54,    54,    54,    31,    32,    33,    34,
-     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    19,    21,     5,     6,     7,
+static const short yycheck[] = {    99,
+    41,    69,    69,   179,   156,    34,     5,    48,   285,     5,
+   123,    19,    41,   319,    42,    83,    19,    19,    53,    34,
+    88,   327,    57,    64,    19,    20,   332,    19,    23,   128,
+   129,    19,    19,    62,    19,   312,    54,   343,    21,    19,
+    54,    59,   218,    84,    19,    59,   114,    62,   325,    57,
+   163,   119,    54,    94,    57,   361,   273,   125,   234,    19,
+    56,    90,    61,    59,   341,    53,    58,    95,    55,   168,
+    65,   170,    57,   379,   380,    19,   175,    19,    20,    54,
+   180,    23,    19,    20,    22,   362,    23,   364,    19,    20,
+   131,    19,    23,    30,    19,    20,   313,   314,    23,   128,
+    19,    20,    19,   279,    23,   257,    19,    19,    53,    22,
+    12,    53,    56,    30,    58,    12,   357,    55,    62,    63,
+    64,    19,    53,    65,    19,    27,    54,   368,    65,    53,
+    27,    33,   173,    58,    65,   176,    33,    13,    12,    58,
+    65,     4,    55,    21,    54,    58,    65,    23,   324,    59,
+   326,   219,   219,    27,   254,   255,   256,    12,    56,    33,
+    58,    53,    53,    58,    62,    63,    64,    62,    63,    64,
+     3,    19,    27,    19,   215,    19,     9,    56,    33,    56,
+    59,    56,    59,    56,    59,    19,    59,    31,    32,    33,
+    34,    24,    25,    26,    27,    28,    29,    31,    32,    33,
+    34,    35,    36,    37,    38,    39,   253,    19,    19,   256,
+    55,    55,    45,    46,    19,    55,    55,   258,    55,    19,
+    54,     9,    58,    57,    19,    19,    31,    32,    33,    34,
+    35,    36,    37,    38,    39,    19,    24,    25,    26,    27,
+    28,    29,    19,    20,    21,   245,   246,   247,    19,    54,
+    21,     5,    57,    19,   354,   355,    19,    45,    46,    61,
+    31,    32,    33,    34,    21,    21,    37,    38,    39,   369,
+   370,    19,   372,    19,   374,    19,    21,    56,    21,     5,
+     6,     7,     8,     9,    55,    11,    12,    13,    14,    15,
+    16,    17,    18,    19,    19,    21,    40,    41,    42,    43,
+    44,    60,    46,    47,    48,    49,    50,    51,    52,    56,
+    19,    37,    38,     5,     6,     7,     8,     9,    19,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    55,    21,
+    31,    32,    33,    34,    55,    19,    37,    38,    39,    31,
+    32,    33,    34,     5,     6,     7,     8,     9,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    19,    21,
+     5,     6,     7,     8,     9,    55,    11,    12,    13,    14,
+    15,    16,    17,    18,    19,     5,    21,     5,     6,     7,
      8,     9,    19,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    54,    21,     5,     6,     7,     8,     9,    57,
+    18,    19,    56,    21,     5,     6,     7,     8,     9,    19,
     11,    12,    13,    14,    15,    16,    17,    18,    19,    19,
-    21,     5,     6,     7,     8,     9,    56,    11,    12,    13,
-    14,    15,    16,    17,    18,    19,    55,    21,     5,     6,
-     7,     8,     9,    55,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    24,    21,     5,     6,    52,    57,    57,
-    57,    11,    12,    13,    14,    15,    16,    17,    18,     5,
-     6,    21,    57,    19,    57,    11,    12,    13,    14,    15,
-    16,    17,    18,     5,     6,    21,    19,    57,    57,    11,
-    12,    13,    14,    15,    16,    17,    18,    57,    57,    21,
-    24,    25,    26,    27,    28,    29,    57,    19,    57,    57,
-    55,    55,    54,    19,    19,    58,    24,    56,    55,    20,
-    24,    19,    19,    19,    19,    19,    55,    55,    55,    52,
-    19,    24,    19,    54,    24,    55,    54,    54,    54,    19,
-    55,    52,    30,    19,    19,    24,    55,    24,    55,     0,
-    52,    24,    55,     0,     9,   137,   136,    57,    57,    31,
-   133,   212,    19,   104,    56,    56,   307,   223,    -1,   298
+    21,     5,     6,     7,     8,     9,    20,    11,    12,    13,
+    14,    15,    16,    17,    18,    19,    57,    21,     5,     6,
+    21,    57,    21,    57,    11,    12,    13,    14,    15,    16,
+    17,    18,     5,     6,    21,    21,    55,    19,    11,    12,
+    13,    14,    15,    16,    17,    18,     5,     6,    21,    55,
+    55,    19,    11,    12,    13,    14,    15,    16,    17,    18,
+    55,    19,    21,    31,    32,    33,    34,    19,    19,    58,
+    55,    19,    19,    57,    57,    56,    56,    56,    24,    57,
+    57,    19,    58,    58,    58,    19,    58,    58,    58,    58,
+    19,    58,    58,    58,    58,    58,    53,    59,    19,    24,
+    56,    56,    55,    57,    24,    19,    56,    19,    19,    19,
+    19,    24,    56,    56,    53,    56,    19,    19,    55,    24,
+    56,    19,    55,    55,    55,    53,    56,    19,    24,    30,
+    19,    24,    56,    56,    56,    53,    24,     0,     0,    58,
+    12,    58,    57,   182,   181,   178,    46,   265,   276,    57,
+   351,   360,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   135
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/lib/bison.simple"
@@ -1573,23 +1631,23 @@ yyreduce:
   switch (yyn) {
 
 case 1:
-#line 591 "parse.y"
+#line 597 "parse.y"
 { ; ;
     break;}
 case 2:
-#line 592 "parse.y"
+#line 598 "parse.y"
 { ; ;
     break;}
 case 3:
-#line 593 "parse.y"
+#line 599 "parse.y"
 { ; ;
     break;}
 case 4:
-#line 594 "parse.y"
+#line 600 "parse.y"
 { ; ;
     break;}
 case 5:
-#line 597 "parse.y"
+#line 603 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", C_CCODE,
@@ -1601,7 +1659,7 @@ case 5:
                                        ;
     break;}
 case 6:
-#line 606 "parse.y"
+#line 612 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", H_CCODE,
@@ -1613,7 +1671,7 @@ case 6:
                                        ;
     break;}
 case 7:
-#line 615 "parse.y"
+#line 621 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", HT_CCODE,
@@ -1625,7 +1683,7 @@ case 7:
                                        ;
     break;}
 case 8:
-#line 624 "parse.y"
+#line 630 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", PH_CCODE,
@@ -1637,7 +1695,7 @@ case 8:
                                        ;
     break;}
 case 9:
-#line 633 "parse.y"
+#line 639 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", A_CCODE,
@@ -1649,7 +1707,7 @@ case 9:
                                        ;
     break;}
 case 10:
-#line 642 "parse.y"
+#line 648 "parse.y"
 {
                        Node *node = node_new (CCODE_NODE,
                                               "cctype", AT_CCODE,
@@ -1661,57 +1719,97 @@ case 10:
                                        ;
     break;}
 case 11:
-#line 653 "parse.y"
+#line 659 "parse.y"
 { ; ;
     break;}
 case 12:
-#line 654 "parse.y"
+#line 660 "parse.y"
 { ; ;
     break;}
 case 13:
-#line 657 "parse.y"
+#line 661 "parse.y"
+{ ; ;
+    break;}
+case 14:
+#line 662 "parse.y"
+{ ; ;
+    break;}
+case 15:
+#line 663 "parse.y"
+{ ; ;
+    break;}
+case 16:
+#line 664 "parse.y"
+{ ; ;
+    break;}
+case 17:
+#line 665 "parse.y"
+{ ; ;
+    break;}
+case 18:
+#line 666 "parse.y"
+{ ; ;
+    break;}
+case 19:
+#line 669 "parse.y"
 {
                        ((Class *)class)->nodes = class_nodes;
                        class_nodes = NULL;
                        nodes = g_list_append(nodes,class);
                                                ;
     break;}
-case 14:
-#line 662 "parse.y"
+case 20:
+#line 674 "parse.y"
 {
                        ((Class *)class)->nodes = NULL;
                        class_nodes = NULL;
                        nodes = g_list_append(nodes,class);
                                                ;
     break;}
-case 15:
-#line 669 "parse.y"
+case 21:
+#line 681 "parse.y"
 {
                        class = node_new (CLASS_NODE,
                                          "otype:steal", yyvsp[-3].id,
                                          "ptype:steal", yyvsp[-1].id,
-                                         "bonobo_x_class:steal", bonobo_x_class,
+                                         "bonobo_object_class:steal", bonobo_object_class,
+                                         "interfaces:steal", interfaces,
                                          "chunk_size:steal", chunk_size,
                                          NULL);
+                       bonobo_object_class = NULL;
+                       chunk_size = NULL;
+                       interfaces = NULL;
                                                ;
     break;}
-case 17:
-#line 680 "parse.y"
+case 23:
+#line 696 "parse.y"
 {
                        if(strcmp(yyvsp[-3].id,"chunks") == 0) {
                                g_free (chunk_size);
                                chunk_size = g_strdup(yyvsp[-2].id);
-                       } else if(strcmp(yyvsp[-3].id,"BonoboX") == 0) {
-                               g_free (bonobo_x_class);
-                               bonobo_x_class = g_strdup(yyvsp[-2].id);
+                       } else if(strcmp(yyvsp[-3].id,"BonoboObject") == 0) {
+                               g_free (bonobo_object_class);
+                               bonobo_object_class = g_strdup(yyvsp[-2].id);
                        } else {
                                yyerror(_("parse error"));
                                YYERROR;
                        }
                ;
     break;}
-case 18:
-#line 692 "parse.y"
+case 24:
+#line 708 "parse.y"
+{
+                       if (strcmp (yyvsp[-3].id, "interface") == 0) {
+                               interfaces = g_list_append (interfaces,
+                                                           g_strdup (yyvsp[-2].id));
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               ;
+    break;}
+case 25:
+#line 717 "parse.y"
 {
                        if(strcmp(yyvsp[-3].id,"chunks") == 0) {
                                g_free (chunk_size);
@@ -1725,63 +1823,79 @@ case 18:
                        }
                ;
     break;}
-case 19:
-#line 706 "parse.y"
+case 26:
+#line 731 "parse.y"
 { ; ;
     break;}
-case 20:
-#line 707 "parse.y"
+case 27:
+#line 732 "parse.y"
 { ; ;
     break;}
-case 21:
-#line 710 "parse.y"
+case 28:
+#line 735 "parse.y"
 { ; ;
     break;}
-case 22:
-#line 711 "parse.y"
+case 29:
+#line 736 "parse.y"
 {
-                       if (strcmp (yyvsp[-1].id, "BonoboX") != 0) {
-                               g_free(yyvsp[-1].id);
-                               yyerror(_("parse error"));
+                       if (strcmp (yyvsp[-1].id, "BonoboObject") != 0) {
+                               g_free (yyvsp[-1].id);
+                               yyerror (_("parse error"));
                                YYERROR;
                        }
-                       last_added_method->bonobo_x_func = TRUE;
+                       g_free (yyvsp[-1].id);
+                       last_added_method->bonobo_object_func = TRUE;
                                                ;
     break;}
-case 23:
-#line 719 "parse.y"
+case 30:
+#line 745 "parse.y"
+{
+                       if (strcmp (yyvsp[-2].id, "interface") != 0) {
+                               g_free (yyvsp[-2].id);
+                               g_free (yyvsp[-1].id);
+                               yyerror (_("parse error"));
+                               YYERROR;
+                       }
+                       g_free (yyvsp[-2].id);
+                       node_set ((Node *)last_added_method,
+                                 "interface:steal", yyvsp[-1].id,
+                                 NULL);
+                                               ;
+    break;}
+case 31:
+#line 757 "parse.y"
 { ; ;
     break;}
-case 24:
-#line 720 "parse.y"
+case 32:
+#line 758 "parse.y"
 { ; ;
     break;}
-case 25:
-#line 721 "parse.y"
+case 33:
+#line 759 "parse.y"
 { ; ;
     break;}
-case 26:
-#line 722 "parse.y"
+case 34:
+#line 760 "parse.y"
 { ; ;
     break;}
-case 27:
-#line 725 "parse.y"
+case 35:
+#line 763 "parse.y"
 { the_scope = PUBLIC_SCOPE; ;
     break;}
-case 28:
-#line 726 "parse.y"
+case 36:
+#line 764 "parse.y"
 { the_scope = PRIVATE_SCOPE; ;
     break;}
-case 29:
-#line 727 "parse.y"
+case 37:
+#line 765 "parse.y"
 { the_scope = PROTECTED_SCOPE; ;
     break;}
-case 30:
-#line 728 "parse.y"
+case 38:
+#line 766 "parse.y"
 { the_scope = CLASS_SCOPE; ;
     break;}
-case 31:
-#line 731 "parse.y"
+case 39:
+#line 769 "parse.y"
 {
                        if (strcmp (yyvsp[-1].id, "destroywith") == 0) {
                                g_free (yyvsp[-1].id);
@@ -1803,8 +1917,8 @@ case 31:
                        }
                                ;
     break;}
-case 32:
-#line 751 "parse.y"
+case 40:
+#line 789 "parse.y"
 {
                        if (strcmp (yyvsp[-2].id, "destroy") == 0) {
                                g_free(yyvsp[-2].id);
@@ -1828,58 +1942,58 @@ case 32:
                        }
                                        ;
     break;}
-case 33:
-#line 775 "parse.y"
+case 41:
+#line 813 "parse.y"
 {
                        initializer = yyvsp[0].id;
                        initializer_line = ccode_line;
                                ;
     break;}
-case 34:
-#line 779 "parse.y"
+case 42:
+#line 817 "parse.y"
 {
                        initializer = (yyvsp[0].cbuf)->str;
                        initializer_line = ccode_line;
                        g_string_free(yyvsp[0].cbuf, FALSE);
                                ;
     break;}
-case 35:
-#line 787 "parse.y"
+case 43:
+#line 825 "parse.y"
 { ; ;
     break;}
-case 36:
-#line 788 "parse.y"
+case 44:
+#line 826 "parse.y"
 { ; ;
     break;}
-case 37:
-#line 789 "parse.y"
+case 45:
+#line 827 "parse.y"
 { destructor = NULL; ;
     break;}
-case 38:
-#line 790 "parse.y"
+case 46:
+#line 828 "parse.y"
 { initializer = NULL; ;
     break;}
-case 39:
-#line 791 "parse.y"
+case 47:
+#line 829 "parse.y"
 {
                        destructor = NULL;
                        initializer = NULL;
                                        ;
     break;}
-case 40:
-#line 797 "parse.y"
+case 48:
+#line 835 "parse.y"
 {
                        push_variable(yyvsp[-2].id, the_scope,yyvsp[-4].line, NULL);
                                                ;
     break;}
-case 41:
-#line 800 "parse.y"
+case 49:
+#line 838 "parse.y"
 {
                        push_variable(yyvsp[-3].id, the_scope, yyvsp[-5].line, yyvsp[-2].id);
                                                ;
     break;}
-case 42:
-#line 805 "parse.y"
+case 50:
+#line 843 "parse.y"
 {
                        Node *node = NULL;
                        if(strcmp(yyvsp[-6].id,"get")==0 &&
@@ -1949,8 +2063,8 @@ case 42:
 
                                                ;
     break;}
-case 43:
-#line 873 "parse.y"
+case 51:
+#line 911 "parse.y"
 {
                        Node *node = NULL;
                        if(strcmp(yyvsp[-3].id, "get") == 0) {
@@ -2006,8 +2120,8 @@ case 43:
                        } 
                                                ;
     break;}
-case 44:
-#line 927 "parse.y"
+case 52:
+#line 965 "parse.y"
 {
                        Node *node;
                        char *get, *set = NULL;
@@ -2095,8 +2209,8 @@ case 44:
                        class_nodes = g_list_append (class_nodes, node);
                                                ;
     break;}
-case 45:
-#line 1015 "parse.y"
+case 53:
+#line 1053 "parse.y"
 {
                        if (strcmp (yyvsp[-1].id, "export")!=0) {
                                g_free (yyvsp[-1].id); 
@@ -2106,14 +2220,14 @@ case 45:
                        yyval.id = yyvsp[-1].id;
                                                ;
     break;}
-case 46:
-#line 1023 "parse.y"
+case 54:
+#line 1061 "parse.y"
 {
                        yyval.id = NULL;
                                                ;
     break;}
-case 47:
-#line 1028 "parse.y"
+case 55:
+#line 1066 "parse.y"
 {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2163,8 +2277,8 @@ case 47:
                        }
                ;
     break;}
-case 48:
-#line 1076 "parse.y"
+case 56:
+#line 1114 "parse.y"
 {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2202,8 +2316,8 @@ case 48:
                        }
                ;
     break;}
-case 49:
-#line 1112 "parse.y"
+case 57:
+#line 1150 "parse.y"
 {
                        ensure_property ();
                        node_set ((Node *)property,
@@ -2219,28 +2333,28 @@ case 49:
                        }
                ;
     break;}
-case 50:
-#line 1128 "parse.y"
+case 58:
+#line 1166 "parse.y"
 { ; ;
     break;}
-case 51:
-#line 1129 "parse.y"
+case 59:
+#line 1167 "parse.y"
 { ; ;
     break;}
-case 52:
-#line 1132 "parse.y"
+case 60:
+#line 1170 "parse.y"
 { ; ;
     break;}
-case 53:
-#line 1133 "parse.y"
+case 61:
+#line 1171 "parse.y"
 { ; ;
     break;}
-case 54:
-#line 1136 "parse.y"
+case 62:
+#line 1174 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
-case 55:
-#line 1137 "parse.y"
+case 63:
+#line 1175 "parse.y"
 {
                        if (strcmp (yyvsp[-3].id, "_") != 0) {
                                g_free (yyvsp[-3].id);
@@ -2252,16 +2366,16 @@ case 55:
                        g_free (yyvsp[-1].id);
                ;
     break;}
-case 56:
-#line 1149 "parse.y"
+case 64:
+#line 1187 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
-case 57:
-#line 1150 "parse.y"
+case 65:
+#line 1188 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
-case 58:
-#line 1153 "parse.y"
+case 66:
+#line 1191 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2269,8 +2383,8 @@ case 58:
                          NULL);
                  ;
     break;}
-case 59:
-#line 1159 "parse.y"
+case 67:
+#line 1197 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2278,8 +2392,8 @@ case 59:
                          NULL);
                  ;
     break;}
-case 60:
-#line 1165 "parse.y"
+case 68:
+#line 1203 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2287,8 +2401,8 @@ case 60:
                          NULL);
                  ;
     break;}
-case 61:
-#line 1171 "parse.y"
+case 69:
+#line 1209 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2296,8 +2410,8 @@ case 61:
                          NULL);
                  ;
     break;}
-case 62:
-#line 1177 "parse.y"
+case 70:
+#line 1215 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2305,8 +2419,8 @@ case 62:
                          NULL);
                  ;
     break;}
-case 63:
-#line 1183 "parse.y"
+case 71:
+#line 1221 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2314,8 +2428,8 @@ case 63:
                          NULL);
                  ;
     break;}
-case 64:
-#line 1189 "parse.y"
+case 72:
+#line 1227 "parse.y"
 {
                Type *type = pop_type ();
                ensure_property ();
@@ -2324,8 +2438,8 @@ case 64:
                          NULL);
                  ;
     break;}
-case 65:
-#line 1196 "parse.y"
+case 73:
+#line 1234 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2333,8 +2447,8 @@ case 65:
                          NULL);
                  ;
     break;}
-case 66:
-#line 1202 "parse.y"
+case 74:
+#line 1240 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2342,8 +2456,8 @@ case 66:
                          NULL);
                  ;
     break;}
-case 67:
-#line 1208 "parse.y"
+case 75:
+#line 1246 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2351,8 +2465,8 @@ case 67:
                          NULL);
                  ;
     break;}
-case 68:
-#line 1214 "parse.y"
+case 76:
+#line 1252 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2360,8 +2474,8 @@ case 68:
                          NULL);
                  ;
     break;}
-case 69:
-#line 1220 "parse.y"
+case 77:
+#line 1258 "parse.y"
 {
                ensure_property ();
                node_set ((Node *)property,
@@ -2369,8 +2483,8 @@ case 69:
                          NULL);
                  ;
     break;}
-case 70:
-#line 1226 "parse.y"
+case 78:
+#line 1264 "parse.y"
 {
                ensure_property ();
                if (strcmp (yyvsp[0].id, "link") == 0) {
@@ -2390,8 +2504,8 @@ case 70:
                }
                  ;
     break;}
-case 71:
-#line 1246 "parse.y"
+case 79:
+#line 1284 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"type")!=0) {
                                g_free(yyvsp[-4].id);
@@ -2402,35 +2516,35 @@ case 71:
                        yyval.id = debool (yyvsp[-4].id);
                                                ;
     break;}
-case 72:
-#line 1255 "parse.y"
+case 80:
+#line 1293 "parse.y"
 {
                        yyval.id = debool (yyvsp[0].id);
                        typestack = g_list_prepend(typestack,NULL);
                                                ;
     break;}
-case 73:
-#line 1261 "parse.y"
+case 81:
+#line 1299 "parse.y"
 { yyval.list = yyvsp[-1].list; ;
     break;}
-case 74:
-#line 1262 "parse.y"
+case 82:
+#line 1300 "parse.y"
 { yyval.list = NULL; ;
     break;}
-case 75:
-#line 1265 "parse.y"
+case 83:
+#line 1303 "parse.y"
 {
                        yyval.list = g_list_append(yyvsp[0].list,yyvsp[-2].id);
                                                ;
     break;}
-case 76:
-#line 1268 "parse.y"
+case 84:
+#line 1306 "parse.y"
 {
                        yyval.list = g_list_append(NULL,yyvsp[0].id);
                                                ;
     break;}
-case 77:
-#line 1274 "parse.y"
+case 85:
+#line 1312 "parse.y"
 {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[-1].id,
@@ -2439,8 +2553,8 @@ case 77:
                        typestack = g_list_prepend(typestack,node);
                                                        ;
     break;}
-case 78:
-#line 1281 "parse.y"
+case 86:
+#line 1319 "parse.y"
 {
                        Node *node = node_new (TYPE_NODE, 
                                               "name:steal", yyvsp[0].id,
@@ -2448,174 +2562,174 @@ case 78:
                        typestack = g_list_prepend(typestack,node);
                                                        ;
     break;}
-case 79:
-#line 1290 "parse.y"
+case 87:
+#line 1328 "parse.y"
 {
                        yyval.id = yyvsp[0].id;
                                                        ;
     break;}
-case 80:
-#line 1293 "parse.y"
+case 88:
+#line 1331 "parse.y"
 {
                        yyval.id = yyvsp[0].id;
                                                        ;
     break;}
-case 81:
-#line 1296 "parse.y"
+case 89:
+#line 1334 "parse.y"
 {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        ;
     break;}
-case 82:
-#line 1300 "parse.y"
+case 90:
+#line 1338 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        ;
     break;}
-case 83:
-#line 1304 "parse.y"
+case 91:
+#line 1342 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        ;
     break;}
-case 84:
-#line 1308 "parse.y"
+case 92:
+#line 1346 "parse.y"
 {
                        yyval.id = g_strconcat("const ", yyvsp[-1].id, " ",
                                             yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        ;
     break;}
-case 85:
-#line 1313 "parse.y"
+case 93:
+#line 1351 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-2].id, " ",
                                             yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        ;
     break;}
-case 86:
-#line 1321 "parse.y"
+case 94:
+#line 1359 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        ;
     break;}
-case 87:
-#line 1325 "parse.y"
+case 95:
+#line 1363 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " ", yyvsp[0].id, NULL);
                        g_free(yyvsp[-1].id);
                        g_free(yyvsp[0].id);
                                                        ;
     break;}
-case 88:
-#line 1330 "parse.y"
+case 96:
+#line 1368 "parse.y"
 {
                        yyval.id = g_strconcat("const ", yyvsp[0].id, NULL);
                        g_free(yyvsp[0].id);
                                                        ;
     break;}
-case 89:
-#line 1334 "parse.y"
+case 97:
+#line 1372 "parse.y"
 {
                        yyval.id = yyvsp[0].id;
                                                        ;
     break;}
-case 90:
-#line 1337 "parse.y"
+case 98:
+#line 1375 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                        g_free(yyvsp[-1].id);
                                                        ;
     break;}
-case 91:
-#line 1341 "parse.y"
+case 99:
+#line 1379 "parse.y"
 {
                        yyval.id = g_strdup(yyvsp[0].id);
                                                        ;
     break;}
-case 92:
-#line 1344 "parse.y"
+case 100:
+#line 1382 "parse.y"
 {
                        yyval.id = g_strconcat(yyvsp[-1].id, " const", NULL);
                                                        ;
     break;}
-case 93:
-#line 1349 "parse.y"
+case 101:
+#line 1387 "parse.y"
 { yyval.id = "void"; ;
     break;}
-case 94:
-#line 1350 "parse.y"
+case 102:
+#line 1388 "parse.y"
 { yyval.id = "char"; ;
     break;}
-case 95:
-#line 1351 "parse.y"
+case 103:
+#line 1389 "parse.y"
 { yyval.id = "short"; ;
     break;}
-case 96:
-#line 1352 "parse.y"
+case 104:
+#line 1390 "parse.y"
 { yyval.id = "int"; ;
     break;}
-case 97:
-#line 1353 "parse.y"
+case 105:
+#line 1391 "parse.y"
 { yyval.id = "long"; ;
     break;}
-case 98:
-#line 1354 "parse.y"
+case 106:
+#line 1392 "parse.y"
 { yyval.id = "float"; ;
     break;}
-case 99:
-#line 1355 "parse.y"
+case 107:
+#line 1393 "parse.y"
 { yyval.id = "double"; ;
     break;}
-case 100:
-#line 1356 "parse.y"
+case 108:
+#line 1394 "parse.y"
 { yyval.id = "signed"; ;
     break;}
-case 101:
-#line 1357 "parse.y"
+case 109:
+#line 1395 "parse.y"
 { yyval.id = "unsigned"; ;
     break;}
-case 102:
-#line 1360 "parse.y"
+case 110:
+#line 1398 "parse.y"
 { yyval.id = "struct"; ;
     break;}
-case 103:
-#line 1361 "parse.y"
+case 111:
+#line 1399 "parse.y"
 { yyval.id = "union"; ;
     break;}
-case 104:
-#line 1362 "parse.y"
+case 112:
+#line 1400 "parse.y"
 { yyval.id = "enum"; ;
     break;}
-case 105:
-#line 1365 "parse.y"
+case 113:
+#line 1403 "parse.y"
 { yyval.id = g_strdup("*"); ;
     break;}
-case 106:
-#line 1366 "parse.y"
+case 114:
+#line 1404 "parse.y"
 { yyval.id = g_strdup("* const"); ;
     break;}
-case 107:
-#line 1367 "parse.y"
+case 115:
+#line 1405 "parse.y"
 {
                                yyval.id = g_strconcat("*", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
                                        ;
     break;}
-case 108:
-#line 1371 "parse.y"
+case 116:
+#line 1409 "parse.y"
 {
                                yyval.id = g_strconcat("* const", yyvsp[0].id, NULL);
                                g_free(yyvsp[0].id);
                                        ;
     break;}
-case 109:
-#line 1378 "parse.y"
+case 117:
+#line 1416 "parse.y"
 {
                        if(strcmp(yyvsp[-1].id, "first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -2629,14 +2743,14 @@ case 109:
                        g_free(yyvsp[-1].id);
                                        ;
     break;}
-case 110:
-#line 1390 "parse.y"
+case 118:
+#line 1428 "parse.y"
 {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        ;
     break;}
-case 111:
-#line 1396 "parse.y"
+case 119:
+#line 1434 "parse.y"
 {
                        if(strcmp(yyvsp[-1].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -2650,8 +2764,8 @@ case 111:
                        g_free(yyvsp[-1].id);
                                        ;
     break;}
-case 112:
-#line 1408 "parse.y"
+case 120:
+#line 1446 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"first")==0)
                                yyval.sigtype = SIGNAL_FIRST_METHOD;
@@ -2665,47 +2779,47 @@ case 112:
                        g_free(yyvsp[-2].id);
                                        ;
     break;}
-case 113:
-#line 1420 "parse.y"
+case 121:
+#line 1458 "parse.y"
 {
                        yyval.sigtype = SIGNAL_LAST_METHOD;
                                        ;
     break;}
-case 114:
-#line 1423 "parse.y"
+case 122:
+#line 1461 "parse.y"
 {
                        /* the_scope was default thus public */
                        the_scope = PUBLIC_SCOPE;
                                        ;
     break;}
-case 115:
-#line 1429 "parse.y"
+case 123:
+#line 1467 "parse.y"
 {
                        gtktypes = g_list_prepend(gtktypes, debool (yyvsp[-3].id));
                                                ;
     break;}
-case 116:
-#line 1434 "parse.y"
+case 124:
+#line 1472 "parse.y"
 {
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                ;
     break;}
-case 117:
-#line 1437 "parse.y"
+case 125:
+#line 1475 "parse.y"
 { 
                        gtktypes = g_list_append(gtktypes, debool (yyvsp[0].id));
                                                        ;
     break;}
-case 118:
-#line 1442 "parse.y"
+case 126:
+#line 1480 "parse.y"
 { yyval.cbuf = yyvsp[0].cbuf; ;
     break;}
-case 119:
-#line 1443 "parse.y"
+case 127:
+#line 1481 "parse.y"
 { yyval.cbuf = NULL; ;
     break;}
-case 120:
-#line 1447 "parse.y"
+case 128:
+#line 1485 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -2723,8 +2837,8 @@ case 120:
                                      ccode_line, vararg, yyvsp[-8].list);
                                                                        ;
     break;}
-case 121:
-#line 1463 "parse.y"
+case 129:
+#line 1501 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("signal without 'self' as "
@@ -2742,8 +2856,8 @@ case 121:
                                      ccode_line, vararg, yyvsp[-8].list);
                                                                        ;
     break;}
-case 122:
-#line 1479 "parse.y"
+case 130:
+#line 1517 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -2761,8 +2875,8 @@ case 122:
                                      ccode_line, vararg, NULL);
                                                                        ;
     break;}
-case 123:
-#line 1495 "parse.y"
+case 131:
+#line 1533 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -2780,8 +2894,8 @@ case 123:
                                      ccode_line, vararg, NULL);
                                                                        ;
     break;}
-case 124:
-#line 1511 "parse.y"
+case 132:
+#line 1549 "parse.y"
 {
                        if(!has_self) {
                                yyerror(_("virtual method without 'self' as "
@@ -2794,8 +2908,8 @@ case 124:
                                      ccode_line, vararg, NULL);
                                                                        ;
     break;}
-case 125:
-#line 1522 "parse.y"
+case 133:
+#line 1560 "parse.y"
 {
                        push_function(NO_SCOPE, OVERRIDE_METHOD, yyvsp[-8].id,
                                      yyvsp[-5].id, yyvsp[0].cbuf,
@@ -2803,8 +2917,8 @@ case 125:
                                      vararg, NULL);
                                                                        ;
     break;}
-case 126:
-#line 1528 "parse.y"
+case 134:
+#line 1566 "parse.y"
 {
                        if(the_scope == CLASS_SCOPE) {
                                yyerror(_("a method cannot be of class scope"));
@@ -2816,8 +2930,8 @@ case 126:
                                      vararg, NULL);
                                                                ;
     break;}
-case 127:
-#line 1538 "parse.y"
+case 135:
+#line 1576 "parse.y"
 {
                        if(strcmp(yyvsp[-4].id, "init")==0) {
                                push_init_arg(yyvsp[-2].id,FALSE);
@@ -2840,8 +2954,8 @@ case 127:
                        }
                                                ;
     break;}
-case 128:
-#line 1561 "parse.y"
+case 136:
+#line 1599 "parse.y"
 {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -2854,8 +2968,8 @@ case 128:
                        g_free(yyvsp[-1].id);
                                        ;
     break;}
-case 129:
-#line 1572 "parse.y"
+case 137:
+#line 1610 "parse.y"
 {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
@@ -2876,30 +2990,30 @@ case 129:
                        g_free(yyvsp[-1].id);
                                                ;
     break;}
-case 130:
-#line 1591 "parse.y"
+case 138:
+#line 1629 "parse.y"
 {
                        g_free(onerror); onerror = NULL;
                        g_free(defreturn); defreturn = NULL;
                                        ;
     break;}
-case 131:
-#line 1597 "parse.y"
+case 139:
+#line 1635 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
-case 132:
-#line 1598 "parse.y"
+case 140:
+#line 1636 "parse.y"
 {
                        yyval.id = (yyvsp[1].cbuf)->str;
                        g_string_free(yyvsp[1].cbuf, FALSE);
                                        ;
     break;}
-case 133:
-#line 1604 "parse.y"
+case 141:
+#line 1642 "parse.y"
 { vararg = FALSE; has_self = FALSE; ;
     break;}
-case 134:
-#line 1605 "parse.y"
+case 142:
+#line 1643 "parse.y"
 {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -2912,8 +3026,8 @@ case 134:
                        }
                                                ;
     break;}
-case 135:
-#line 1616 "parse.y"
+case 143:
+#line 1654 "parse.y"
 {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -2926,8 +3040,8 @@ case 135:
                        }
                                                ;
     break;}
-case 136:
-#line 1627 "parse.y"
+case 144:
+#line 1665 "parse.y"
 {
                        vararg = FALSE;
                        has_self = TRUE;
@@ -2940,8 +3054,8 @@ case 136:
                        }
                                                ;
     break;}
-case 137:
-#line 1638 "parse.y"
+case 145:
+#line 1676 "parse.y"
 {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -2953,8 +3067,8 @@ case 137:
                        }
                                        ;
     break;}
-case 138:
-#line 1648 "parse.y"
+case 146:
+#line 1686 "parse.y"
 {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-3].id,"self")==0)
@@ -2966,8 +3080,8 @@ case 138:
                        }
                                        ;
     break;}
-case 139:
-#line 1658 "parse.y"
+case 147:
+#line 1696 "parse.y"
 {
                        has_self = TRUE;
                        if(strcmp(yyvsp[-2].id,"self")==0)
@@ -2979,40 +3093,40 @@ case 139:
                        }
                                        ;
     break;}
-case 140:
-#line 1668 "parse.y"
+case 148:
+#line 1706 "parse.y"
 { has_self = FALSE; ;
     break;}
-case 141:
-#line 1671 "parse.y"
+case 149:
+#line 1709 "parse.y"
 { vararg = TRUE; ;
     break;}
-case 142:
-#line 1672 "parse.y"
+case 150:
+#line 1710 "parse.y"
 { vararg = FALSE; ;
     break;}
-case 143:
-#line 1675 "parse.y"
+case 151:
+#line 1713 "parse.y"
 { ; ;
     break;}
-case 144:
-#line 1676 "parse.y"
+case 152:
+#line 1714 "parse.y"
 { ; ;
     break;}
-case 145:
-#line 1679 "parse.y"
+case 153:
+#line 1717 "parse.y"
 {
                        push_funcarg(yyvsp[0].id,NULL);
                                                                ;
     break;}
-case 146:
-#line 1682 "parse.y"
+case 154:
+#line 1720 "parse.y"
 {
                        push_funcarg(yyvsp[-1].id,yyvsp[0].id);
                                                                ;
     break;}
-case 147:
-#line 1685 "parse.y"
+case 155:
+#line 1723 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3022,8 +3136,8 @@ case 147:
                        push_funcarg(yyvsp[-4].id,NULL);
                                                                ;
     break;}
-case 148:
-#line 1693 "parse.y"
+case 156:
+#line 1731 "parse.y"
 {
                        if(strcmp(yyvsp[-2].id,"check")!=0) {
                                yyerror(_("parse error"));
@@ -3033,16 +3147,16 @@ case 148:
                        push_funcarg(yyvsp[-5].id,yyvsp[-4].id);
                                                                ;
     break;}
-case 149:
-#line 1703 "parse.y"
+case 157:
+#line 1741 "parse.y"
 { ; ;
     break;}
-case 150:
-#line 1704 "parse.y"
+case 158:
+#line 1742 "parse.y"
 { ; ;
     break;}
-case 151:
-#line 1707 "parse.y"
+case 159:
+#line 1745 "parse.y"
 {
                        if(strcmp(yyvsp[0].id,"type")==0) {
                                Node *node = node_new (CHECK_NODE,
@@ -3061,8 +3175,8 @@ case 151:
                        g_free(yyvsp[0].id);
                                        ;
     break;}
-case 152:
-#line 1724 "parse.y"
+case 160:
+#line 1762 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GT_CHECK,
@@ -3071,8 +3185,8 @@ case 152:
                        checks = g_list_append(checks,node);
                                        ;
     break;}
-case 153:
-#line 1731 "parse.y"
+case 161:
+#line 1769 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LT_CHECK,
@@ -3081,8 +3195,8 @@ case 153:
                        checks = g_list_append(checks,node);
                                        ;
     break;}
-case 154:
-#line 1738 "parse.y"
+case 162:
+#line 1776 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", GE_CHECK,
@@ -3091,8 +3205,8 @@ case 154:
                        checks = g_list_append(checks,node);
                                        ;
     break;}
-case 155:
-#line 1745 "parse.y"
+case 163:
+#line 1783 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", LE_CHECK,
@@ -3101,8 +3215,8 @@ case 155:
                        checks = g_list_append(checks,node);
                                        ;
     break;}
-case 156:
-#line 1752 "parse.y"
+case 164:
+#line 1790 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", EQ_CHECK,
@@ -3111,8 +3225,8 @@ case 156:
                        checks = g_list_append(checks,node);
                                        ;
     break;}
-case 157:
-#line 1759 "parse.y"
+case 165:
+#line 1797 "parse.y"
 {
                        Node *node = node_new (CHECK_NODE,
                                               "chtype", NE_CHECK,
@@ -3121,23 +3235,161 @@ case 157:
                        checks = g_list_append(checks,node);
                                        ;
     break;}
-case 158:
-#line 1768 "parse.y"
+case 166:
+#line 1806 "parse.y"
+{
+                       Node *node = node_new (ENUMDEF_NODE,
+                                              "etype:steal", yyvsp[-1].id,
+                                              "prefix:steal", yyvsp[-5].id,
+                                              "values:steal", enum_vals,
+                                              NULL);
+                       enum_vals = NULL;
+                       nodes = g_list_append (nodes, node);
+                       ;
+    break;}
+case 167:
+#line 1815 "parse.y"
+{
+                       Node *node = node_new (ENUMDEF_NODE,
+                                              "etype:steal", yyvsp[-1].id,
+                                              "prefix:steal", yyvsp[-6].id,
+                                              "values:steal", enum_vals,
+                                              NULL);
+                       enum_vals = NULL;
+                       nodes = g_list_append (nodes, node);
+                       ;
+    break;}
+case 168:
+#line 1826 "parse.y"
+{;;
+    break;}
+case 169:
+#line 1827 "parse.y"
+{;;
+    break;}
+case 170:
+#line 1830 "parse.y"
+{
+                       Node *node;
+                       char *num = yyvsp[0].id;
+
+                       /* A float value, that's a bad enum */
+                       if (num[0] >= '0' &&
+                           num[0] <= '9' &&
+                           strchr (num, '.') != NULL) {
+                               g_free (yyvsp[-2].id);
+                               g_free (num);
+                               yyerror(_("parse error (enumerator value not integer constant)"));
+                               YYERROR;
+                       }
+                      
+                       node = node_new (ENUMVALUE_NODE,
+                                        "name:steal", yyvsp[-2].id,
+                                        "value:steal", num,
+                                        NULL);
+                       enum_vals = g_list_append (enum_vals, node);
+                       ;
+    break;}
+case 171:
+#line 1850 "parse.y"
+{
+                       Node *node;
+
+                       node = node_new (ENUMVALUE_NODE,
+                                        "name:steal", yyvsp[0].id,
+                                        NULL);
+                       enum_vals = g_list_append (enum_vals, node);
+       ;
+    break;}
+case 172:
+#line 1860 "parse.y"
+{
+                       Node *node = node_new (FLAGS_NODE,
+                                              "ftype:steal", yyvsp[-1].id,
+                                              "prefix:steal", yyvsp[-5].id,
+                                              "values:steal", flag_vals,
+                                              NULL);
+                       flag_vals = NULL;
+                       nodes = g_list_append (nodes, node);
+                       ;
+    break;}
+case 173:
+#line 1869 "parse.y"
+{
+                       Node *node = node_new (FLAGS_NODE,
+                                              "ftype:steal", yyvsp[-1].id,
+                                              "prefix:steal", yyvsp[-6].id,
+                                              "values:steal", flag_vals,
+                                              NULL);
+                       flag_vals = NULL;
+                       nodes = g_list_append (nodes, node);
+                       ;
+    break;}
+case 174:
+#line 1880 "parse.y"
+{
+                       flag_vals = g_list_append (flag_vals, yyvsp[0].id);
+               ;
+    break;}
+case 175:
+#line 1883 "parse.y"
+{
+                       flag_vals = g_list_append (flag_vals, yyvsp[0].id);
+               ;
+    break;}
+case 176:
+#line 1888 "parse.y"
+{
+                       Node *node = node_new (ERROR_NODE,
+                                              "etype:steal", yyvsp[-1].id,
+                                              "prefix:steal", yyvsp[-5].id,
+                                              "values:steal", error_vals,
+                                              NULL);
+                       error_vals = NULL;
+                       nodes = g_list_append (nodes, node);
+                       ;
+    break;}
+case 177:
+#line 1897 "parse.y"
+{
+                       Node *node = node_new (ERROR_NODE,
+                                              "etype:steal", yyvsp[-1].id,
+                                              "prefix:steal", yyvsp[-6].id,
+                                              "values:steal", error_vals,
+                                              NULL);
+                       error_vals = NULL;
+                       nodes = g_list_append (nodes, node);
+                       ;
+    break;}
+case 178:
+#line 1908 "parse.y"
+{
+                       error_vals = g_list_append (error_vals, yyvsp[0].id);
+               ;
+    break;}
+case 179:
+#line 1911 "parse.y"
+{
+                       error_vals = g_list_append (error_vals, yyvsp[0].id);
+               ;
+    break;}
+case 180:
+#line 1917 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
-case 159:
-#line 1769 "parse.y"
+case 181:
+#line 1918 "parse.y"
 {
                        yyval.id = g_strconcat("-",yyvsp[0].id,NULL);
                        g_free(yyvsp[0].id);
                                        ;
     break;}
-case 160:
-#line 1773 "parse.y"
+case 182:
+#line 1922 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
-case 161:
-#line 1774 "parse.y"
+case 183:
+#line 1923 "parse.y"
 { yyval.id = yyvsp[0].id; ;
     break;}
 }
@@ -3362,5 +3614,5 @@ yyerrhandle:
     }
   return 1;
 }
-#line 1777 "parse.y"
+#line 1926 "parse.y"
 
index 6ebbe8db602eae5fa669cc309357cc45b1d59816..af83451aa4ac98ea889dbc2cf0e51ac8897a4256 100644 (file)
@@ -47,13 +47,14 @@ typedef union {
 #define        MAXIMUM 296
 #define        MINIMUM 297
 #define        DEFAULT_VALUE   298
-#define        FLAGS   299
-#define        TYPE    300
-#define        FLAGS_TYPE      301
-#define        ENUM_TYPE       302
-#define        PARAM_TYPE      303
-#define        BOXED_TYPE      304
-#define        OBJECT_TYPE     305
+#define        ERROR   299
+#define        FLAGS   300
+#define        TYPE    301
+#define        FLAGS_TYPE      302
+#define        ENUM_TYPE       303
+#define        PARAM_TYPE      304
+#define        BOXED_TYPE      305
+#define        OBJECT_TYPE     306
 
 
 extern YYSTYPE yylval;
index 36f9abc19c338fbb3e39e42edcab411bae14743d..a8d3341f07d56ca14b105f3d0b589bb30ca3af40 100644 (file)
 #include "main.h"
 #include "util.h"
 
+/* FIXME: add gettext support */
 #define _(x) (x)
        
 GList *nodes = NULL;
 
 static GList *class_nodes = NULL;
 Node *class = NULL;
+GList *enums = NULL;
+static GList *enum_vals = NULL;
+static GList *flag_vals = NULL;
+static GList *error_vals = NULL;
 
 static char *chunk_size = NULL;
-static char *bonobo_x_class = NULL;
+static char *bonobo_object_class = NULL;
+static GList *interfaces = NULL;
 static GList *typestack = NULL;
 static GList *funcargs = NULL;
 static GList *checks = NULL;
@@ -462,8 +468,8 @@ property_link_and_export (Node *node)
                }
 
                if (strcmp (prop->gtktype, "STRING") == 0) {
-                       set = g_strdup_printf("g_free (%s->%s); "
-                                             "%s->%s = g_value_dup_string (VAL);",
+                       set = g_strdup_printf("{ char *old = %s->%s; "
+                                             "%s->%s = g_value_dup_string (VAL); g_free (old); }",
                                              root, prop->name,
                                              root, prop->name);
                        get = g_strdup_printf("g_value_set_string (VAL, %s->%s);",
@@ -583,7 +589,7 @@ ensure_property (void)
 %token <cbuf> CCODE HTCODE PHCODE HCODE ACODE ATCODE STRING
 %token <line> PUBLIC PRIVATE PROTECTED CLASSWIDE PROPERTY ARGUMENT
 %token <line> VIRTUAL SIGNAL OVERRIDE
-%token <line> NICK BLURB MAXIMUM MINIMUM DEFAULT_VALUE FLAGS TYPE
+%token <line> NICK BLURB MAXIMUM MINIMUM DEFAULT_VALUE ERROR FLAGS TYPE
 %token <line> FLAGS_TYPE ENUM_TYPE PARAM_TYPE BOXED_TYPE OBJECT_TYPE
 
 %%
@@ -651,7 +657,13 @@ ccode:             CCODE                   {
        ;
 
 ccodes:                ccodes ccode            { ; }
+       |       ccodes enumcode         { ; }
+       |       ccodes flagcode         { ; }
+       |       ccodes errorcode        { ; }
        |       ccode                   { ; }
+       |       enumcode                { ; }
+       |       flagcode                { ; }
+       |       errorcode               { ; }
        ;
 
 class:         classdec '{' classcode '}'      {
@@ -670,9 +682,13 @@ classdec:  CLASS TYPETOKEN FROM TYPETOKEN  classflags {
                        class = node_new (CLASS_NODE,
                                          "otype:steal", $<id>2,
                                          "ptype:steal", $<id>4,
-                                         "bonobo_x_class:steal", bonobo_x_class,
+                                         "bonobo_object_class:steal", bonobo_object_class,
+                                         "interfaces:steal", interfaces,
                                          "chunk_size:steal", chunk_size,
                                          NULL);
+                       bonobo_object_class = NULL;
+                       chunk_size = NULL;
+                       interfaces = NULL;
                                                }
        ;
 
@@ -681,9 +697,18 @@ classflags:
                        if(strcmp($<id>2,"chunks") == 0) {
                                g_free (chunk_size);
                                chunk_size = g_strdup($<id>3);
-                       } else if(strcmp($<id>2,"BonoboX") == 0) {
-                               g_free (bonobo_x_class);
-                               bonobo_x_class = g_strdup($<id>3);
+                       } else if(strcmp($<id>2,"BonoboObject") == 0) {
+                               g_free (bonobo_object_class);
+                               bonobo_object_class = g_strdup($<id>3);
+                       } else {
+                               yyerror(_("parse error"));
+                               YYERROR;
+                       }
+               }
+       | '(' TOKEN TYPETOKEN ')' classflags {
+                       if (strcmp ($<id>2, "interface") == 0) {
+                               interfaces = g_list_append (interfaces,
+                                                           g_strdup ($<id>3));
                        } else {
                                yyerror(_("parse error"));
                                YYERROR;
@@ -709,12 +734,25 @@ classcode:        classcode thing                 { ; }
 
 thing:                 method                          { ; }
        |       TOKEN method                    {
-                       if (strcmp ($<id>1, "BonoboX") != 0) {
-                               g_free($<id>1);
-                               yyerror(_("parse error"));
+                       if (strcmp ($<id>1, "BonoboObject") != 0) {
+                               g_free ($<id>1);
+                               yyerror (_("parse error"));
                                YYERROR;
                        }
-                       last_added_method->bonobo_x_func = TRUE;
+                       g_free ($<id>1);
+                       last_added_method->bonobo_object_func = TRUE;
+                                               }
+       |       TOKEN TYPETOKEN method                  {
+                       if (strcmp ($<id>1, "interface") != 0) {
+                               g_free ($<id>1);
+                               g_free ($<id>2);
+                               yyerror (_("parse error"));
+                               YYERROR;
+                       }
+                       g_free ($<id>1);
+                       node_set ((Node *)last_added_method,
+                                 "interface:steal", $<id>2,
+                                 NULL);
                                                }
        |       variable                        { ; }
        |       argument                        { ; }
@@ -1764,7 +1802,118 @@ check:          TOKEN                   {
                        checks = g_list_append(checks,node);
                                        }
        ;
-       
+
+enumcode:      ENUM TOKEN '{' enumvals '}' TYPETOKEN ';' {
+                       Node *node = node_new (ENUMDEF_NODE,
+                                              "etype:steal", $<id>6,
+                                              "prefix:steal", $<id>2,
+                                              "values:steal", enum_vals,
+                                              NULL);
+                       enum_vals = NULL;
+                       nodes = g_list_append (nodes, node);
+                       }
+       |       ENUM TOKEN '{' enumvals ',' '}' TYPETOKEN ';' {
+                       Node *node = node_new (ENUMDEF_NODE,
+                                              "etype:steal", $<id>7,
+                                              "prefix:steal", $<id>2,
+                                              "values:steal", enum_vals,
+                                              NULL);
+                       enum_vals = NULL;
+                       nodes = g_list_append (nodes, node);
+                       }
+       ;
+
+enumvals:      enumvals ',' enumval    {;}
+       |       enumval                 {;}
+       ;
+
+enumval:       TOKEN '=' numtok        {
+                       Node *node;
+                       char *num = $<id>3;
+
+                       /* A float value, that's a bad enum */
+                       if (num[0] >= '0' &&
+                           num[0] <= '9' &&
+                           strchr (num, '.') != NULL) {
+                               g_free ($<id>1);
+                               g_free (num);
+                               yyerror(_("parse error (enumerator value not integer constant)"));
+                               YYERROR;
+                       }
+                      
+                       node = node_new (ENUMVALUE_NODE,
+                                        "name:steal", $<id>1,
+                                        "value:steal", num,
+                                        NULL);
+                       enum_vals = g_list_append (enum_vals, node);
+                       }
+       |       TOKEN                   {
+                       Node *node;
+
+                       node = node_new (ENUMVALUE_NODE,
+                                        "name:steal", $<id>1,
+                                        NULL);
+                       enum_vals = g_list_append (enum_vals, node);
+       }
+       ;
+
+flagcode:      FLAGS TOKEN '{' flagvals '}' TYPETOKEN ';' {
+                       Node *node = node_new (FLAGS_NODE,
+                                              "ftype:steal", $<id>6,
+                                              "prefix:steal", $<id>2,
+                                              "values:steal", flag_vals,
+                                              NULL);
+                       flag_vals = NULL;
+                       nodes = g_list_append (nodes, node);
+                       }
+       |       FLAGS TOKEN '{' flagvals ',' '}' TYPETOKEN ';' {
+                       Node *node = node_new (FLAGS_NODE,
+                                              "ftype:steal", $<id>7,
+                                              "prefix:steal", $<id>2,
+                                              "values:steal", flag_vals,
+                                              NULL);
+                       flag_vals = NULL;
+                       nodes = g_list_append (nodes, node);
+                       }
+       ;
+
+flagvals:      flagvals ',' TOKEN      {
+                       flag_vals = g_list_append (flag_vals, $<id>3);
+               }
+       |       TOKEN                   {
+                       flag_vals = g_list_append (flag_vals, $<id>1);
+               }
+       ;
+
+errorcode:     ERROR TOKEN '{' errorvals '}' TYPETOKEN ';' {
+                       Node *node = node_new (ERROR_NODE,
+                                              "etype:steal", $<id>6,
+                                              "prefix:steal", $<id>2,
+                                              "values:steal", error_vals,
+                                              NULL);
+                       error_vals = NULL;
+                       nodes = g_list_append (nodes, node);
+                       }
+       |       ERROR TOKEN '{' errorvals ',' '}' TYPETOKEN ';' {
+                       Node *node = node_new (ERROR_NODE,
+                                              "etype:steal", $<id>7,
+                                              "prefix:steal", $<id>2,
+                                              "values:steal", error_vals,
+                                              NULL);
+                       error_vals = NULL;
+                       nodes = g_list_append (nodes, node);
+                       }
+       ;
+
+errorvals:     errorvals ',' TOKEN     {
+                       error_vals = g_list_append (error_vals, $<id>3);
+               }
+       |       TOKEN                   {
+                       error_vals = g_list_append (error_vals, $<id>1);
+               }
+       ;
+
+
 numtok:                NUMBER                  { $<id>$ = $<id>1; }
        |       '-' NUMBER              {
                        $<id>$ = g_strconcat("-",$<id>2,NULL);
index 8c7cf8516cb106e08d90a16628721316b8e49529..67f25cf9e9fd998e6f453aa0f85bdd20da29b2b6 100644 (file)
@@ -26,6 +26,7 @@ requires 1.99.0
 
 %{
 #include <stdio.h>
+#include <gtk/gtk.h>
 /* the next line is not mandatory, but if gob finds an include in one of
    the %{ %} sections above the class definitions, it will not put it in
    the file itself.  So you can this way select where the include file is
@@ -61,7 +62,39 @@ void bubu(void);
 #define TEST_ARRAY 5
 %}
 
-class Test:Object from G:Object {
+enum LAME_CLIENT {
+       IS_CONNECTED,
+       NONE = 9,
+       LAST
+} Test:Enum;
+
+flags BUGA_BUGA {
+       ONE,
+       TWO,
+       MANY,
+} Some:Flags;
+
+error TEST_OBJECT_ERROR {
+       BAD_THIS,
+       BAD_THAT
+} Test:Object:Error;
+
+class Test:Object from G:Object
+       (interface Gtk:Tree:Model)
+       /* We can add more interfaces by adding more lines like the above */
+       /* Note that there must exist a GtkTreeModelIface structure */
+{
+
+       /* function implemented for the Gtk:Tree:Model interface */
+       interface Gtk:Tree:Model
+       private GtkTreeModelFlags
+       get_flags (Gtk:Tree:Model *self (check null type))
+       {
+               /* FOO */
+               return (GtkTreeModelFlags)0;
+       }
+
+
 
        public int test_array[TEST_ARRAY];
        public int i;
@@ -173,10 +206,10 @@ class Test:Object from G:Object {
        }
 
        private
-       int
+       char *
        test_handler (self, GObject *w, int h, gpointer data)
        {
-               return -1;
+               return NULL;
        }
 
        /**
@@ -191,9 +224,13 @@ class Test:Object from G:Object {
        signal last INT (POINTER, INT)
        int bleh2(self, const G:Object * wid (check null type),
                        int h (check > 0)) {
-               /*gtk_signal_connect (GTK_OBJECT (self),
-                                   GTK_WEIRD_BUTTON_SIGNAL_BLEH (test_handler),
-                                   NULL);*/
+
+               test_object_connect__bleh (self, self_test_handler, NULL);
+               self_connect__bleh (self, self_test_handler, NULL);
+               test_object_connect_after__bleh (self, self_test_handler, NULL);
+               self_connect_after__bleh (self, self_test_handler, NULL);
+               test_object_connect_data__bleh (self, self_test_handler, NULL, NULL, 0);
+               self_connect_data__bleh (self, self_test_handler, NULL, NULL, 0);
 
                /* testing multiple marshaller support */
                return 0;
index 486a599dc7072c1d8edf63358cd6d71d50a99bea..6f77f47da1185b8b87f1dac1097b497da972060c 100644 (file)
@@ -15,6 +15,14 @@ static Check *
 copy_check (Check * self);
 static Class *
 copy_class (Class * self);
+static EnumDef *
+copy_enumdef (EnumDef * self);
+static EnumValue *
+copy_enumvalue (EnumValue * self);
+static Error *
+copy_error (Error * self);
+static Flags *
+copy_flags (Flags * self);
 static FuncArg *
 copy_funcarg (FuncArg * self);
 static Method *
@@ -35,6 +43,14 @@ free_check (Check * self);
 void
 free_class (Class * self);
 void
+free_enumdef (EnumDef * self);
+void
+free_enumvalue (EnumValue * self);
+void
+free_error (Error * self);
+void
+free_flags (Flags * self);
+void
 free_funcarg (FuncArg * self);
 void
 free_method (Method * self);
@@ -54,6 +70,14 @@ setv_check (Check * self, va_list __ap);
 static void
 setv_class (Class * self, va_list __ap);
 static void
+setv_enumdef (EnumDef * self, va_list __ap);
+static void
+setv_enumvalue (EnumValue * self, va_list __ap);
+static void
+setv_error (Error * self, va_list __ap);
+static void
+setv_flags (Flags * self, va_list __ap);
+static void
 setv_funcarg (FuncArg * self, va_list __ap);
 static void
 setv_method (Method * self, va_list __ap);
@@ -72,10 +96,12 @@ enum {
        QUARK_otype_STEAL,
        QUARK_ptype,
        QUARK_ptype_STEAL,
-       QUARK_bonobo_x_class,
-       QUARK_bonobo_x_class_STEAL,
+       QUARK_bonobo_object_class,
+       QUARK_bonobo_object_class_STEAL,
        QUARK_chunk_size,
        QUARK_chunk_size_STEAL,
+       QUARK_interfaces,
+       QUARK_interfaces_STEAL,
        QUARK_nodes,
        QUARK_nodes_STEAL,
        QUARK_name,
@@ -136,7 +162,9 @@ enum {
        QUARK_ccode_line,
        QUARK_vararg,
        QUARK_unique_id,
-       QUARK_bonobo_x_func,
+       QUARK_bonobo_object_func,
+       QUARK_interface,
+       QUARK_interface_STEAL,
        QUARK_vtype,
        QUARK_vtype_STEAL,
        QUARK_destructor_unref,
@@ -147,6 +175,16 @@ enum {
        QUARK_initializer,
        QUARK_initializer_STEAL,
        QUARK_initializer_line,
+       QUARK_etype,
+       QUARK_etype_STEAL,
+       QUARK_prefix,
+       QUARK_prefix_STEAL,
+       QUARK_values,
+       QUARK_values_STEAL,
+       QUARK_value,
+       QUARK_value_STEAL,
+       QUARK_ftype,
+       QUARK_ftype_STEAL,
        QUARK_LAST
 };
 
@@ -161,10 +199,12 @@ ensure_quarks (void)
        g_hash_table_insert (quark_ht, "otype:steal", GINT_TO_POINTER (QUARK_otype_STEAL));
        g_hash_table_insert (quark_ht, "ptype", GINT_TO_POINTER (QUARK_ptype));
        g_hash_table_insert (quark_ht, "ptype:steal", GINT_TO_POINTER (QUARK_ptype_STEAL));
-       g_hash_table_insert (quark_ht, "bonobo_x_class", GINT_TO_POINTER (QUARK_bonobo_x_class));
-       g_hash_table_insert (quark_ht, "bonobo_x_class:steal", GINT_TO_POINTER (QUARK_bonobo_x_class_STEAL));
+       g_hash_table_insert (quark_ht, "bonobo_object_class", GINT_TO_POINTER (QUARK_bonobo_object_class));
+       g_hash_table_insert (quark_ht, "bonobo_object_class:steal", GINT_TO_POINTER (QUARK_bonobo_object_class_STEAL));
        g_hash_table_insert (quark_ht, "chunk_size", GINT_TO_POINTER (QUARK_chunk_size));
        g_hash_table_insert (quark_ht, "chunk_size:steal", GINT_TO_POINTER (QUARK_chunk_size_STEAL));
+       g_hash_table_insert (quark_ht, "interfaces", GINT_TO_POINTER (QUARK_interfaces));
+       g_hash_table_insert (quark_ht, "interfaces:steal", GINT_TO_POINTER (QUARK_interfaces_STEAL));
        g_hash_table_insert (quark_ht, "nodes", GINT_TO_POINTER (QUARK_nodes));
        g_hash_table_insert (quark_ht, "nodes:steal", GINT_TO_POINTER (QUARK_nodes_STEAL));
        g_hash_table_insert (quark_ht, "name", GINT_TO_POINTER (QUARK_name));
@@ -225,7 +265,9 @@ ensure_quarks (void)
        g_hash_table_insert (quark_ht, "ccode_line", GINT_TO_POINTER (QUARK_ccode_line));
        g_hash_table_insert (quark_ht, "vararg", GINT_TO_POINTER (QUARK_vararg));
        g_hash_table_insert (quark_ht, "unique_id", GINT_TO_POINTER (QUARK_unique_id));
-       g_hash_table_insert (quark_ht, "bonobo_x_func", GINT_TO_POINTER (QUARK_bonobo_x_func));
+       g_hash_table_insert (quark_ht, "bonobo_object_func", GINT_TO_POINTER (QUARK_bonobo_object_func));
+       g_hash_table_insert (quark_ht, "interface", GINT_TO_POINTER (QUARK_interface));
+       g_hash_table_insert (quark_ht, "interface:steal", GINT_TO_POINTER (QUARK_interface_STEAL));
        g_hash_table_insert (quark_ht, "vtype", GINT_TO_POINTER (QUARK_vtype));
        g_hash_table_insert (quark_ht, "vtype:steal", GINT_TO_POINTER (QUARK_vtype_STEAL));
        g_hash_table_insert (quark_ht, "destructor_unref", GINT_TO_POINTER (QUARK_destructor_unref));
@@ -236,6 +278,16 @@ ensure_quarks (void)
        g_hash_table_insert (quark_ht, "initializer", GINT_TO_POINTER (QUARK_initializer));
        g_hash_table_insert (quark_ht, "initializer:steal", GINT_TO_POINTER (QUARK_initializer_STEAL));
        g_hash_table_insert (quark_ht, "initializer_line", GINT_TO_POINTER (QUARK_initializer_line));
+       g_hash_table_insert (quark_ht, "etype", GINT_TO_POINTER (QUARK_etype));
+       g_hash_table_insert (quark_ht, "etype:steal", GINT_TO_POINTER (QUARK_etype_STEAL));
+       g_hash_table_insert (quark_ht, "prefix", GINT_TO_POINTER (QUARK_prefix));
+       g_hash_table_insert (quark_ht, "prefix:steal", GINT_TO_POINTER (QUARK_prefix_STEAL));
+       g_hash_table_insert (quark_ht, "values", GINT_TO_POINTER (QUARK_values));
+       g_hash_table_insert (quark_ht, "values:steal", GINT_TO_POINTER (QUARK_values_STEAL));
+       g_hash_table_insert (quark_ht, "value", GINT_TO_POINTER (QUARK_value));
+       g_hash_table_insert (quark_ht, "value:steal", GINT_TO_POINTER (QUARK_value_STEAL));
+       g_hash_table_insert (quark_ht, "ftype", GINT_TO_POINTER (QUARK_ftype));
+       g_hash_table_insert (quark_ht, "ftype:steal", GINT_TO_POINTER (QUARK_ftype_STEAL));
 }
 
 static Argument *
@@ -295,12 +347,68 @@ copy_class (Class * self)
        new->type = CLASS_NODE;
        new->otype = g_strdup (self->otype);
        new->ptype = g_strdup (self->ptype);
-       new->bonobo_x_class = g_strdup (self->bonobo_x_class);
+       new->bonobo_object_class = g_strdup (self->bonobo_object_class);
        new->chunk_size = g_strdup (self->chunk_size);
+       new->interfaces = g_list_copy (self->interfaces); COPY_LIST_VALS(new->interfaces, g_strdup);
        new->nodes = node_list_copy (self->nodes);
        return new;
 }
 
+static EnumDef *
+copy_enumdef (EnumDef * self)
+{
+       EnumDef * new;
+       g_return_val_if_fail (self != NULL, NULL);
+       g_return_val_if_fail (self->type == ENUMDEF_NODE, NULL);
+       new = g_new0(EnumDef, 1);
+       new->type = ENUMDEF_NODE;
+       new->etype = g_strdup (self->etype);
+       new->prefix = g_strdup (self->prefix);
+       new->values = node_list_copy (self->values);
+       return new;
+}
+
+static EnumValue *
+copy_enumvalue (EnumValue * self)
+{
+       EnumValue * new;
+       g_return_val_if_fail (self != NULL, NULL);
+       g_return_val_if_fail (self->type == ENUMVALUE_NODE, NULL);
+       new = g_new0(EnumValue, 1);
+       new->type = ENUMVALUE_NODE;
+       new->name = g_strdup (self->name);
+       new->value = g_strdup (self->value);
+       return new;
+}
+
+static Error *
+copy_error (Error * self)
+{
+       Error * new;
+       g_return_val_if_fail (self != NULL, NULL);
+       g_return_val_if_fail (self->type == ERROR_NODE, NULL);
+       new = g_new0(Error, 1);
+       new->type = ERROR_NODE;
+       new->etype = g_strdup (self->etype);
+       new->prefix = g_strdup (self->prefix);
+       new->values = g_list_copy (self->values); COPY_LIST_VALS(new->values, g_strdup);
+       return new;
+}
+
+static Flags *
+copy_flags (Flags * self)
+{
+       Flags * new;
+       g_return_val_if_fail (self != NULL, NULL);
+       g_return_val_if_fail (self->type == FLAGS_NODE, NULL);
+       new = g_new0(Flags, 1);
+       new->type = FLAGS_NODE;
+       new->ftype = g_strdup (self->ftype);
+       new->prefix = g_strdup (self->prefix);
+       new->values = g_list_copy (self->values); COPY_LIST_VALS(new->values, g_strdup);
+       return new;
+}
+
 static FuncArg *
 copy_funcarg (FuncArg * self)
 {
@@ -338,7 +446,8 @@ copy_method (Method * self)
        new->ccode_line = self->ccode_line;
        new->vararg = self->vararg;
        new->unique_id = self->unique_id;
-       new->bonobo_x_func = self->bonobo_x_func;
+       new->bonobo_object_func = self->bonobo_object_func;
+       new->interface = g_strdup (self->interface);
        return new;
 }
 
@@ -444,12 +553,56 @@ free_class (Class * self)
        g_return_if_fail (self->type == CLASS_NODE);
        g_free (self->otype);
        g_free (self->ptype);
-       g_free (self->bonobo_x_class);
+       g_free (self->bonobo_object_class);
        g_free (self->chunk_size);
+       g_list_foreach (self->interfaces, (GFunc)g_free, NULL); g_list_free (self->interfaces);
        node_list_free (self->nodes);
        g_free (self);
 }
 
+void
+free_enumdef (EnumDef * self)
+{
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (self->type == ENUMDEF_NODE);
+       g_free (self->etype);
+       g_free (self->prefix);
+       node_list_free (self->values);
+       g_free (self);
+}
+
+void
+free_enumvalue (EnumValue * self)
+{
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (self->type == ENUMVALUE_NODE);
+       g_free (self->name);
+       g_free (self->value);
+       g_free (self);
+}
+
+void
+free_error (Error * self)
+{
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (self->type == ERROR_NODE);
+       g_free (self->etype);
+       g_free (self->prefix);
+       g_list_foreach (self->values, (GFunc)g_free, NULL); g_list_free (self->values);
+       g_free (self);
+}
+
+void
+free_flags (Flags * self)
+{
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (self->type == FLAGS_NODE);
+       g_free (self->ftype);
+       g_free (self->prefix);
+       g_list_foreach (self->values, (GFunc)g_free, NULL); g_list_free (self->values);
+       g_free (self);
+}
+
 void
 free_funcarg (FuncArg * self)
 {
@@ -475,6 +628,7 @@ free_method (Method * self)
        g_free (self->onerror);
        g_free (self->defreturn);
        g_free (self->cbuf);
+       g_free (self->interface);
        g_free (self);
 }
 
@@ -728,16 +882,16 @@ setv_class (Class * self, va_list __ap)
                        self->ptype = ptype;
                        break;
                }
-               case QUARK_bonobo_x_class: {
-                       char * bonobo_x_class = va_arg (__ap, char *);
-                       char * __old_value = self->bonobo_x_class;
-                       self->bonobo_x_class = g_strdup (bonobo_x_class);
+               case QUARK_bonobo_object_class: {
+                       char * bonobo_object_class = va_arg (__ap, char *);
+                       char * __old_value = self->bonobo_object_class;
+                       self->bonobo_object_class = g_strdup (bonobo_object_class);
                        g_free (__old_value);
                        break;
                }
-               case QUARK_bonobo_x_class_STEAL: {
-                       char * bonobo_x_class = va_arg (__ap, char *);
-                       self->bonobo_x_class = bonobo_x_class;
+               case QUARK_bonobo_object_class_STEAL: {
+                       char * bonobo_object_class = va_arg (__ap, char *);
+                       self->bonobo_object_class = bonobo_object_class;
                        break;
                }
                case QUARK_chunk_size: {
@@ -752,6 +906,18 @@ setv_class (Class * self, va_list __ap)
                        self->chunk_size = chunk_size;
                        break;
                }
+               case QUARK_interfaces: {
+                       GList * interfaces = va_arg (__ap, GList *);
+                       GList * __old_value = self->interfaces;
+                       self->interfaces = g_list_copy (interfaces); COPY_LIST_VALS(self->interfaces, g_strdup);
+                       g_list_foreach (__old_value, (GFunc)g_free, NULL); g_list_free (__old_value);
+                       break;
+               }
+               case QUARK_interfaces_STEAL: {
+                       GList * interfaces = va_arg (__ap, GList *);
+                       self->interfaces = interfaces;
+                       break;
+               }
                case QUARK_nodes: {
                        GList * nodes = va_arg (__ap, GList *);
                        GList * __old_value = self->nodes;
@@ -771,6 +937,202 @@ setv_class (Class * self, va_list __ap)
        }
 }
 
+static void
+setv_enumdef (EnumDef * self, va_list __ap)
+{
+       int quark;
+       const char *arg;
+       ensure_quarks ();
+       while ((arg = va_arg (__ap, char *)) != NULL) {
+               quark = GPOINTER_TO_INT (g_hash_table_lookup (quark_ht, arg));
+               switch (quark) {
+               case QUARK_etype: {
+                       char * etype = va_arg (__ap, char *);
+                       char * __old_value = self->etype;
+                       self->etype = g_strdup (etype);
+                       g_free (__old_value);
+                       break;
+               }
+               case QUARK_etype_STEAL: {
+                       char * etype = va_arg (__ap, char *);
+                       self->etype = etype;
+                       break;
+               }
+               case QUARK_prefix: {
+                       char * prefix = va_arg (__ap, char *);
+                       char * __old_value = self->prefix;
+                       self->prefix = g_strdup (prefix);
+                       g_free (__old_value);
+                       break;
+               }
+               case QUARK_prefix_STEAL: {
+                       char * prefix = va_arg (__ap, char *);
+                       self->prefix = prefix;
+                       break;
+               }
+               case QUARK_values: {
+                       GList * values = va_arg (__ap, GList *);
+                       GList * __old_value = self->values;
+                       self->values = node_list_copy (values);
+                       node_list_free (__old_value);
+                       break;
+               }
+               case QUARK_values_STEAL: {
+                       GList * values = va_arg (__ap, GList *);
+                       self->values = values;
+                       break;
+               }
+               default:
+                       g_warning ("Argument named 'EnumDef::%s' does not exist", arg);
+                       break;
+               }
+       }
+}
+
+static void
+setv_enumvalue (EnumValue * self, va_list __ap)
+{
+       int quark;
+       const char *arg;
+       ensure_quarks ();
+       while ((arg = va_arg (__ap, char *)) != NULL) {
+               quark = GPOINTER_TO_INT (g_hash_table_lookup (quark_ht, arg));
+               switch (quark) {
+               case QUARK_name: {
+                       char * name = va_arg (__ap, char *);
+                       char * __old_value = self->name;
+                       self->name = g_strdup (name);
+                       g_free (__old_value);
+                       break;
+               }
+               case QUARK_name_STEAL: {
+                       char * name = va_arg (__ap, char *);
+                       self->name = name;
+                       break;
+               }
+               case QUARK_value: {
+                       char * value = va_arg (__ap, char *);
+                       char * __old_value = self->value;
+                       self->value = g_strdup (value);
+                       g_free (__old_value);
+                       break;
+               }
+               case QUARK_value_STEAL: {
+                       char * value = va_arg (__ap, char *);
+                       self->value = value;
+                       break;
+               }
+               default:
+                       g_warning ("Argument named 'EnumValue::%s' does not exist", arg);
+                       break;
+               }
+       }
+}
+
+static void
+setv_error (Error * self, va_list __ap)
+{
+       int quark;
+       const char *arg;
+       ensure_quarks ();
+       while ((arg = va_arg (__ap, char *)) != NULL) {
+               quark = GPOINTER_TO_INT (g_hash_table_lookup (quark_ht, arg));
+               switch (quark) {
+               case QUARK_etype: {
+                       char * etype = va_arg (__ap, char *);
+                       char * __old_value = self->etype;
+                       self->etype = g_strdup (etype);
+                       g_free (__old_value);
+                       break;
+               }
+               case QUARK_etype_STEAL: {
+                       char * etype = va_arg (__ap, char *);
+                       self->etype = etype;
+                       break;
+               }
+               case QUARK_prefix: {
+                       char * prefix = va_arg (__ap, char *);
+                       char * __old_value = self->prefix;
+                       self->prefix = g_strdup (prefix);
+                       g_free (__old_value);
+                       break;
+               }
+               case QUARK_prefix_STEAL: {
+                       char * prefix = va_arg (__ap, char *);
+                       self->prefix = prefix;
+                       break;
+               }
+               case QUARK_values: {
+                       GList * values = va_arg (__ap, GList *);
+                       GList * __old_value = self->values;
+                       self->values = g_list_copy (values); COPY_LIST_VALS(self->values, g_strdup);
+                       g_list_foreach (__old_value, (GFunc)g_free, NULL); g_list_free (__old_value);
+                       break;
+               }
+               case QUARK_values_STEAL: {
+                       GList * values = va_arg (__ap, GList *);
+                       self->values = values;
+                       break;
+               }
+               default:
+                       g_warning ("Argument named 'Error::%s' does not exist", arg);
+                       break;
+               }
+       }
+}
+
+static void
+setv_flags (Flags * self, va_list __ap)
+{
+       int quark;
+       const char *arg;
+       ensure_quarks ();
+       while ((arg = va_arg (__ap, char *)) != NULL) {
+               quark = GPOINTER_TO_INT (g_hash_table_lookup (quark_ht, arg));
+               switch (quark) {
+               case QUARK_ftype: {
+                       char * ftype = va_arg (__ap, char *);
+                       char * __old_value = self->ftype;
+                       self->ftype = g_strdup (ftype);
+                       g_free (__old_value);
+                       break;
+               }
+               case QUARK_ftype_STEAL: {
+                       char * ftype = va_arg (__ap, char *);
+                       self->ftype = ftype;
+                       break;
+               }
+               case QUARK_prefix: {
+                       char * prefix = va_arg (__ap, char *);
+                       char * __old_value = self->prefix;
+                       self->prefix = g_strdup (prefix);
+                       g_free (__old_value);
+                       break;
+               }
+               case QUARK_prefix_STEAL: {
+                       char * prefix = va_arg (__ap, char *);
+                       self->prefix = prefix;
+                       break;
+               }
+               case QUARK_values: {
+                       GList * values = va_arg (__ap, GList *);
+                       GList * __old_value = self->values;
+                       self->values = g_list_copy (values); COPY_LIST_VALS(self->values, g_strdup);
+                       g_list_foreach (__old_value, (GFunc)g_free, NULL); g_list_free (__old_value);
+                       break;
+               }
+               case QUARK_values_STEAL: {
+                       GList * values = va_arg (__ap, GList *);
+                       self->values = values;
+                       break;
+               }
+               default:
+                       g_warning ("Argument named 'Flags::%s' does not exist", arg);
+                       break;
+               }
+       }
+}
+
 static void
 setv_funcarg (FuncArg * self, va_list __ap)
 {
@@ -970,9 +1332,21 @@ setv_method (Method * self, va_list __ap)
                        self->unique_id = unique_id;
                        break;
                }
-               case QUARK_bonobo_x_func: {
-                       gboolean bonobo_x_func = va_arg (__ap, gboolean);
-                       self->bonobo_x_func = bonobo_x_func;
+               case QUARK_bonobo_object_func: {
+                       gboolean bonobo_object_func = va_arg (__ap, gboolean);
+                       self->bonobo_object_func = bonobo_object_func;
+                       break;
+               }
+               case QUARK_interface: {
+                       char * interface = va_arg (__ap, char *);
+                       char * __old_value = self->interface;
+                       self->interface = g_strdup (interface);
+                       g_free (__old_value);
+                       break;
+               }
+               case QUARK_interface_STEAL: {
+                       char * interface = va_arg (__ap, char *);
+                       self->interface = interface;
                        break;
                }
                default:
@@ -1323,6 +1697,10 @@ node_copy (Node *node)
        case CCODE_NODE: return (Node *)copy_ccode ((CCode *)node);
        case CHECK_NODE: return (Node *)copy_check ((Check *)node);
        case CLASS_NODE: return (Node *)copy_class ((Class *)node);
+       case ENUMDEF_NODE: return (Node *)copy_enumdef ((EnumDef *)node);
+       case ENUMVALUE_NODE: return (Node *)copy_enumvalue ((EnumValue *)node);
+       case ERROR_NODE: return (Node *)copy_error ((Error *)node);
+       case FLAGS_NODE: return (Node *)copy_flags ((Flags *)node);
        case FUNCARG_NODE: return (Node *)copy_funcarg ((FuncArg *)node);
        case METHOD_NODE: return (Node *)copy_method ((Method *)node);
        case PROPERTY_NODE: return (Node *)copy_property ((Property *)node);
@@ -1342,6 +1720,10 @@ node_setv (Node *node, va_list __ap)
        case CCODE_NODE: setv_ccode ((CCode *)node, __ap); break;
        case CHECK_NODE: setv_check ((Check *)node, __ap); break;
        case CLASS_NODE: setv_class ((Class *)node, __ap); break;
+       case ENUMDEF_NODE: setv_enumdef ((EnumDef *)node, __ap); break;
+       case ENUMVALUE_NODE: setv_enumvalue ((EnumValue *)node, __ap); break;
+       case ERROR_NODE: setv_error ((Error *)node, __ap); break;
+       case FLAGS_NODE: setv_flags ((Flags *)node, __ap); break;
        case FUNCARG_NODE: setv_funcarg ((FuncArg *)node, __ap); break;
        case METHOD_NODE: setv_method ((Method *)node, __ap); break;
        case PROPERTY_NODE: setv_property ((Property *)node, __ap); break;
@@ -1388,6 +1770,26 @@ node_new (NodeType type, ...)
                node->type = type;
                setv_class ((Class *)node, __ap);
                break;
+       case ENUMDEF_NODE:
+               node = (Node *)g_new0 (EnumDef, 1);
+               node->type = type;
+               setv_enumdef ((EnumDef *)node, __ap);
+               break;
+       case ENUMVALUE_NODE:
+               node = (Node *)g_new0 (EnumValue, 1);
+               node->type = type;
+               setv_enumvalue ((EnumValue *)node, __ap);
+               break;
+       case ERROR_NODE:
+               node = (Node *)g_new0 (Error, 1);
+               node->type = type;
+               setv_error ((Error *)node, __ap);
+               break;
+       case FLAGS_NODE:
+               node = (Node *)g_new0 (Flags, 1);
+               node->type = type;
+               setv_flags ((Flags *)node, __ap);
+               break;
        case FUNCARG_NODE:
                node = (Node *)g_new0 (FuncArg, 1);
                node->type = type;
@@ -1429,6 +1831,10 @@ node_free (Node *node)
        case CCODE_NODE: free_ccode ((CCode *)node); return;
        case CHECK_NODE: free_check ((Check *)node); return;
        case CLASS_NODE: free_class ((Class *)node); return;
+       case ENUMDEF_NODE: free_enumdef ((EnumDef *)node); return;
+       case ENUMVALUE_NODE: free_enumvalue ((EnumValue *)node); return;
+       case ERROR_NODE: free_error ((Error *)node); return;
+       case FLAGS_NODE: free_flags ((Flags *)node); return;
        case FUNCARG_NODE: free_funcarg ((FuncArg *)node); return;
        case METHOD_NODE: free_method ((Method *)node); return;
        case PROPERTY_NODE: free_property ((Property *)node); return;
index fde15cb2613e71d12e39369e549d2eab30fa9512..d4107721b77600a9fc33ea4fec3076af43e18b61 100644 (file)
@@ -1,3 +1,8 @@
+# Run ./generate_treefuncs.pl after modifying this to regenerate
+# treefuncs.[ch]
+
+# These are the parse tree definitions, eliminates typos
+
 HEADER
 /* for ccode type */
 enum {
@@ -46,8 +51,9 @@ ENDHEADER
 CLASS Class
   STRING       otype   # this object class type
   STRING       ptype   # parent class type
-  STRING       bonobo_x_class # Class for BonoboXObject
+  STRING       bonobo_object_class # Class for BonoboObject
   STRING       chunk_size # if the object should be allocated with mem_chunks
+  STRINGLIST   interfaces # GObject interfaces this class exports
   NODELIST     nodes
 ENDCLASS
 
@@ -122,7 +128,8 @@ CLASS Method
   INT          ccode_line
   BOOL         vararg
   INT          unique_id       # A unique id for new methods
-  BOOL         bonobo_x_func   # Function for BonoboXObject
+  BOOL         bonobo_object_func      # Function for BonoboObject
+  STRING       interface       # interface this belongs to
 ENDCLASS
 
 CLASS Variable
@@ -137,3 +144,26 @@ CLASS Variable
   STRING       initializer
   INT          initializer_line
 ENDCLASS
+
+CLASS EnumDef
+  STRING       etype
+  STRING       prefix
+  NODELIST     values
+ENDCLASS
+
+CLASS EnumValue
+  STRING       name
+  STRING       value
+ENDCLASS
+
+CLASS Flags
+  STRING       ftype
+  STRING       prefix
+  STRINGLIST   values
+ENDCLASS
+
+CLASS Error
+  STRING       etype
+  STRING       prefix
+  STRINGLIST   values
+ENDCLASS
index f7ba204bb362ef3376e7fbeafe915ae13a296433..33801d83fe324271575d7c1fd2de588a4ec0c66c 100644 (file)
@@ -60,6 +60,10 @@ enum {
        PROPERTY_NODE,
        METHOD_NODE,
        VARIABLE_NODE,
+       ENUMDEF_NODE,
+       ENUMVALUE_NODE,
+       FLAGS_NODE,
+       ERROR_NODE,
        LAST_NODE_TYPE
 };
 
@@ -73,6 +77,10 @@ typedef struct _Argument Argument;
 typedef struct _Property Property;
 typedef struct _Method Method;
 typedef struct _Variable Variable;
+typedef struct _EnumDef EnumDef;
+typedef struct _EnumValue EnumValue;
+typedef struct _Flags Flags;
+typedef struct _Error Error;
 
 
 struct _Argument {
@@ -105,11 +113,39 @@ struct _Class {
        NodeType type;
        char * otype;
        char * ptype;
-       char * bonobo_x_class;
+       char * bonobo_object_class;
        char * chunk_size;
+       GList * interfaces;
        GList * nodes;
 };
 
+struct _EnumDef {
+       NodeType type;
+       char * etype;
+       char * prefix;
+       GList * values;
+};
+
+struct _EnumValue {
+       NodeType type;
+       char * name;
+       char * value;
+};
+
+struct _Error {
+       NodeType type;
+       char * etype;
+       char * prefix;
+       GList * values;
+};
+
+struct _Flags {
+       NodeType type;
+       char * ftype;
+       char * prefix;
+       GList * values;
+};
+
 struct _FuncArg {
        NodeType type;
        Type * atype;
@@ -134,7 +170,8 @@ struct _Method {
        int ccode_line;
        gboolean vararg;
        int unique_id;
-       gboolean bonobo_x_func;
+       gboolean bonobo_object_func;
+       char * interface;
 };
 
 struct _Property {
@@ -185,6 +222,10 @@ union _Node {
        CCode ccode;
        Check check;
        Class class;
+       EnumDef enumdef;
+       EnumValue enumvalue;
+       Error error;
+       Flags flags;
        FuncArg funcarg;
        Method method;
        Property property;
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9788f70238c91894045d22366fa941580826c3c1 100644 (file)
@@ -0,0 +1 @@
+timestamp