From d75333f166d21e9b9f2341c3bc8a9ef8a886f4b3 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 19 Aug 2011 19:59:24 +0200 Subject: [PATCH] Add gobject enum support, but disabled for now need to figure out the naming. The generated code doesn't have the right name. --- configure.ac | 2 + src/Makefile.am | 13 +++-- src/hb-gobject-enums.cc.tmpl | 74 ++++++++++++++++++++++++++++ src/{hb-gobject.cc => hb-gobject-structs.cc} | 0 4 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 src/hb-gobject-enums.cc.tmpl rename src/{hb-gobject.cc => hb-gobject-structs.cc} (100%) diff --git a/configure.ac b/configure.ac index f42fb3c..5871675 100644 --- a/configure.ac +++ b/configure.ac @@ -88,6 +88,8 @@ AM_CONDITIONAL(HAVE_GTHREAD, $have_gthread) PKG_CHECK_MODULES(GOBJECT, gobject-2.0, have_gobject=true, have_gobject=false) if $have_gobject; then AC_DEFINE(HAVE_GOBJECT, 1, [Have gobject2 library]) + GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` + AC_SUBST(GLIB_MKENUMS) fi AM_CONDITIONAL(HAVE_GOBJECT, $have_gobject) diff --git a/src/Makefile.am b/src/Makefile.am index 00f0101..2928df1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,6 +1,7 @@ # Process this file with automake to produce Makefile.in NULL = +BUILT_SOURCES = EXTRA_DIST = CLEANFILES = DISTCLEANFILES = @@ -91,8 +92,14 @@ endif if HAVE_GOBJECT HBCFLAGS += $(GOBJECT_CFLAGS) HBLIBS += $(GOBJECT_LIBS) -HBSOURCES += hb-gobject.cc +HBSOURCES += hb-gobject-structs.cc hb-gobject-enums.cc HBHEADERS += hb-gobject.h +BUILT_SOURCES += hb-gobject-enums.cc +EXTRA_DIST += hb-gobject-enums.cc.tmpl + +hb-gobject-enums.cc: hb-gobject-enums.cc.tmpl $(HBHEADERS) + $(AM_V_GEN) ( cd $(srcdir) && $(GLIB_MKENUMS) --template $^ ) > \ + "$@.tmp" && mv "$@.tmp" "$@" || ( $(RM) "@.tmp" && false ) endif if HAVE_ICU @@ -132,11 +139,11 @@ GENERATORS = \ EXTRA_DIST += $(GENERATORS) -BUILT_SOURCES = hb-ot-shape-complex-indic-machine.hh +BUILT_SOURCES += hb-ot-shape-complex-indic-machine.hh EXTRA_DIST += hb-ot-shape-complex-indic-machine.rl hb-ot-shape-complex-indic-machine.hh: hb-ot-shape-complex-indic-machine.rl $(AM_V_GEN)$(top_srcdir)/missing --run ragel -e -F1 -o "$@.tmp" "$<" && \ - mv "$@.tmp" "$@" + mv "$@.tmp" "$@" || ( $(RM) "$@.tmp" && false ) noinst_PROGRAMS = main test bin_PROGRAMS = diff --git a/src/hb-gobject-enums.cc.tmpl b/src/hb-gobject-enums.cc.tmpl new file mode 100644 index 0000000..688dfff --- /dev/null +++ b/src/hb-gobject-enums.cc.tmpl @@ -0,0 +1,74 @@ +/*** BEGIN file-header ***/ +/* + * Copyright © 2011 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#include "hb-private.hh" + +/* g++ didn't like older gtype.h gcc-only code path. */ +#include +#if !GLIB_CHECK_VERSION(2,29,16) +#undef __GNUC__ +#undef __GNUC_MINOR__ +#define __GNUC__ 2 +#define __GNUC_MINOR__ 6 +#endif + +#include "hb-gobject.h" + +/*** END file-header ***/ + +/*** BEGIN file-production ***/ +/* enumerations from "@filename@" */ +/*** END file-production ***/ + +/*** BEGIN value-header ***/ +/* inline static -----> disable these for now... */ +GType +@enum_name@_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + + if (g_once_init_enter (&g_define_type_id__volatile)) + { + static const G@Type@Value values[] = { +/*** END value-header ***/ + +/*** BEGIN value-production ***/ + { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, +/*** END value-production ***/ + +/*** BEGIN value-tail ***/ + { 0, NULL, NULL } + }; + GType g_define_type_id = + g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + + return g_define_type_id__volatile; +} + +/*** END value-tail ***/ diff --git a/src/hb-gobject.cc b/src/hb-gobject-structs.cc similarity index 100% rename from src/hb-gobject.cc rename to src/hb-gobject-structs.cc -- 2.7.4