[telepathy-glib/master] Generate error-str.c as well as error-str.h

Will Thompson will.thompson at collabora.co.uk
Tue May 26 07:38:59 PDT 2009


This adapts glib-errors-str-gen.py to follow a similar pattern to that
used in glib-ginterface-gen.py: it accepts a basename on the command
line, and writes to <basename>.[ch].
---
 telepathy-glib/Makefile.am   |    7 +++++--
 tools/glib-errors-str-gen.py |   40 ++++++++++++++++++++++++++++------------
 2 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/telepathy-glib/Makefile.am b/telepathy-glib/Makefile.am
index 3bd3a59..ef026aa 100644
--- a/telepathy-glib/Makefile.am
+++ b/telepathy-glib/Makefile.am
@@ -157,6 +157,7 @@ tpginclude_HEADERS = \
     util.h
 
 nodist_libtelepathy_glib_internal_la_SOURCES = \
+    _gen/error-str.c \
     _gen/error-str.h \
     _gen/signals-marshal.c \
     _gen/signals-marshal.h \
@@ -332,9 +333,11 @@ _gen/signals-marshal.c: _gen/signals-marshal.list Makefile.am
 	$(QUIET_GEN){ echo '#include "_gen/signals-marshal.h"' && \
 	$(GLIB_GENMARSHAL) --body --prefix=_tp_marshal $< ; } > $@
 
-_gen/error-str.h: _gen/stable-spec.xml \
+_gen/error-str.h _gen/error-str.c: _gen/stable-spec.xml \
 	$(tools_dir)/glib-errors-str-gen.py
-	$(QUIET_GEN)$(PYTHON) $(tools_dir)/glib-errors-str-gen.py $< > $@
+	$(QUIET_GEN)$(PYTHON) $(tools_dir)/glib-errors-str-gen.py \
+		_gen/error-str $<
+
 # Things generated per interface
 
 _gen/tp-spec-%.xml: %.xml _gen/spec-stamp $(tools_dir)/xincludator.py
diff --git a/tools/glib-errors-str-gen.py b/tools/glib-errors-str-gen.py
index bf0beb4..ab7e873 100644
--- a/tools/glib-errors-str-gen.py
+++ b/tools/glib-errors-str-gen.py
@@ -6,28 +6,44 @@ import xml.dom.minidom
 from libglibcodegen import NS_TP, camelcase_to_upper, get_docstring, xml_escape
 
 class Generator(object):
-    def __init__(self, dom):
+    def __init__(self, dom, basename):
         self.dom = dom
         self.errors = self.dom.getElementsByTagNameNS(NS_TP, 'errors')[0]
+        self.basename = basename
+
+        self.__header = []
+        self.__body = []
+
+    def h(self, s):
+        self.__header.append(s)
+
+    def b(self, s):
+        self.__body.append(s)
 
     def __call__(self):
+        errors = self.errors.getElementsByTagNameNS(NS_TP, 'error')
 
-        for error in self.errors.getElementsByTagNameNS(NS_TP, 'error'):
+        for error in errors:
             ns = error.parentNode.getAttribute('namespace')
             nick = error.getAttribute('name').replace(' ', '')
             name = 'TP_ERROR_STR_' + camelcase_to_upper(nick.replace('.', ''))
             error_name = '%s.%s' % (ns, nick)
 
-            print ''
-            print '/**'
-            print ' * %s:' % name
-            print ' *'
-            print ' * The D-Bus error name %s' % error_name
-            print ' *'
-            print ' * %s' % xml_escape(get_docstring(error))
-            print ' */'
-            print '#define %s "%s"' % (name, error_name)
+            self.h('')
+            self.h('/**')
+            self.h(' * %s:' % name)
+            self.h(' *')
+            self.h(' * The D-Bus error name %s' % error_name)
+            self.h(' *')
+            self.h(' * %s' % xml_escape(get_docstring(error)))
+            self.h(' */')
+            self.h('#define %s "%s"' % (name, error_name))
+
+        open(self.basename + '.h', 'w').write('\n'.join(self.__header))
+        open(self.basename + '.c', 'w').write('\n'.join(self.__body))
 
 if __name__ == '__main__':
     argv = sys.argv[1:]
-    Generator(xml.dom.minidom.parse(argv[0]))()
+    basename = argv[0]
+
+    Generator(xml.dom.minidom.parse(argv[1]), basename)()
-- 
1.5.6.5




More information about the telepathy-commits mailing list