From 174caf00160d0607ac60140a7ae48a910b414f5b Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Mon, 5 Jul 2010 17:08:36 -0400 Subject: [PATCH] Work around g-ir-scanner problem with Gdk.Rectangle g-ir-scanner is currently buggy and confuses the Gdk.Rectangle alias with MetaRectangle. Since this is moderately hard to fix in gobject-introspection and the fix would conflict with in-progress changes, work around by doing a 'sed job' on the generated Meta.gir. https://bugzilla.gnome.org/show_bug.cgi?id=623640 --- src/Makefile.am | 6 +++++- src/fix-meta-rectangle.py | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100755 src/fix-meta-rectangle.py diff --git a/src/Makefile.am b/src/Makefile.am index b063722a8..4fea30d44 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -210,8 +210,12 @@ Shell-0.1.gir: $(mutter) $(G_IR_SCANNER) St-1.0.gir libgnome-shell.la Makefile $(addprefix $(srcdir)/,$(libgnome_shell_la_gir_sources)) \ $(libgnome_shell_la_CPPFLAGS) \ -I $(srcdir) \ - -o $@ + -o $@.tmp && \ + $(PYTHON) $(srcdir)/fix-meta-rectangle.py $@.tmp $@.tmp2 && \ + rm $@.tmp && \ + mv $@.tmp2 $@ CLEANFILES += Shell-0.1.gir +EXTRA_DIST += fix-meta-rectangle.py # The dependency on libgnome-shell.la here is because g-ir-compiler opens it # (not the fake library, since we've already done the rewriting) diff --git a/src/fix-meta-rectangle.py b/src/fix-meta-rectangle.py new file mode 100755 index 000000000..560d892d8 --- /dev/null +++ b/src/fix-meta-rectangle.py @@ -0,0 +1,21 @@ +#!/usr/bin/python +import re +import sys + +# gobject-introspection currently has a bug where an alias like +# 'typedef GdkRectangle cairo_rect_int_t' is stored un-namespaced, +# so it is taken to apply to all *Rectangle types. Fixing this +# requires a significant rework of g-ir-scanner, so for the moment +# we fix up the output using this script. +# +# https://bugzilla.gnome.org/show_bug.cgi?id=622609 + +GDK_RECTANGLE = re.compile(r'Gdk\.Rectangle') +META_RECTANGLE = re.compile(r'MetaRectangle') + +i = open(sys.argv[1], 'r') +o = open(sys.argv[2], 'w') +for line in i: + if GDK_RECTANGLE.search(line) and META_RECTANGLE.search(line): + line = re.sub('Gdk.Rectangle', 'Meta.Rectangle', line) + o.write(line)