libglib2: make codegen python2/python3 compliant
authorSamuel Martin <s.martin49@gmail.com>
Sat, 18 Aug 2012 12:05:40 +0000 (14:05 +0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Tue, 21 Aug 2012 10:10:26 +0000 (12:10 +0200)
Signed-off-by: Samuel Martin <s.martin49@gmail.com>
 create mode 100644 package/libglib2/libglib2-make-codegen-python2-python3-compliant.patch
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
package/libglib2/libglib2-make-codegen-python2-python3-compliant.patch [new file with mode: 0644]

diff --git a/package/libglib2/libglib2-make-codegen-python2-python3-compliant.patch b/package/libglib2/libglib2-make-codegen-python2-python3-compliant.patch
new file mode 100644 (file)
index 0000000..b483827
--- /dev/null
@@ -0,0 +1,192 @@
+Fetch from http://git.gnome.org/browse/glib/patch/?id=03611f7c0670ea14eedbc121972aed7ce60bb9ee
+
+This patch is already included upstream, from the glib-2.32.4 release. 
+
+Signed-off-by: Samuel Martin <s.martin49@gmail.com>
+---
+From 03611f7c0670ea14eedbc121972aed7ce60bb9ee Mon Sep 17 00:00:00 2001
+From: Simon Feltman <s.feltman@gmail.com>
+Date: Thu, 14 Jun 2012 06:20:17 +0000
+Subject: Updated codegen to work with python3.
+
+Most changes were just replacing usage of "has_key" with "in".
+Also updated the sorting function which was simplified and
+changed to a "key" function instead of "cmp" (which is no longer
+supported in python3. Verified everything builds with
+python 2.7 and 3.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=678066
+---
+diff --git a/gio/gdbus-2.0/codegen/codegen.py b/gio/gdbus-2.0/codegen/codegen.py
+index 41ea8fa..bca3490 100644
+--- a/gio/gdbus-2.0/codegen/codegen.py
++++ b/gio/gdbus-2.0/codegen/codegen.py
+@@ -304,11 +304,8 @@ class CodeGenerator:
+             #
+             # See https://bugzilla.gnome.org/show_bug.cgi?id=647577#c5
+             # for discussion
+-            keys = function_pointers.keys()
+-            if len(keys) > 0:
+-                keys.sort(cmp=utils.my_version_cmp)
+-                for key in keys:
+-                    self.h.write('%s'%function_pointers[key])
++            for key in sorted(function_pointers.keys(), key=utils.version_cmp_key):
++                self.h.write('%s'%function_pointers[key])
+             self.h.write('};\n')
+             self.h.write('\n')
+@@ -1022,11 +1019,9 @@ class CodeGenerator:
+                 value  = '@get_%s: '%(p.name_lower)
+                 value += 'Getter for the #%s:%s property.'%(i.camel_name, p.name_hyphen)
+                 doc_bits[key] = value
+-        keys = doc_bits.keys()
+-        if len(keys) > 0:
+-            keys.sort(cmp=utils.my_version_cmp)
+-            for key in keys:
+-                self.c.write(' * %s\n'%doc_bits[key])
++        for key in sorted(doc_bits.keys(), key=utils.version_cmp_key):
++            self.c.write(' * %s\n'%doc_bits[key])
++
+         self.c.write(self.docbook_gen.expand(
+                 ' *\n'
+                 ' * Virtual table for the D-Bus interface #%s.\n'
+diff --git a/gio/gdbus-2.0/codegen/codegen_docbook.py b/gio/gdbus-2.0/codegen/codegen_docbook.py
+index 4ceef57..00581f1 100644
+--- a/gio/gdbus-2.0/codegen/codegen_docbook.py
++++ b/gio/gdbus-2.0/codegen/codegen_docbook.py
+@@ -259,14 +259,12 @@ class DocbookCodeGenerator:
+                 self.expand_member_dict[key] = value
+         # Make sure to expand the keys in reverse order so e.g. #org.foo.Iface:MediaCompat
+         # is evaluated before #org.foo.Iface:Media ...
+-        self.expand_member_dict_keys = self.expand_member_dict.keys()
+-        self.expand_member_dict_keys.sort(reverse=True)
+-        self.expand_iface_dict_keys = self.expand_iface_dict.keys()
+-        self.expand_iface_dict_keys.sort(reverse=True)
++        self.expand_member_dict_keys = sorted(self.expand_member_dict.keys(), reverse=True)
++        self.expand_iface_dict_keys = sorted(self.expand_iface_dict.keys(), reverse=True)
+     def generate(self):
+         for i in self.ifaces:
+-            self.out = file('%s-%s.xml'%(self.docbook, i.name), 'w')
++            self.out = open('%s-%s.xml'%(self.docbook, i.name), 'w')
+             self.out.write(''%())
+             self.out.write('<?xml version="1.0" encoding="utf-8"?>\n'%())
+             self.out.write('<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"\n'%())
+diff --git a/gio/gdbus-2.0/codegen/codegen_main.py b/gio/gdbus-2.0/codegen/codegen_main.py
+index 76c838c..735cc1f 100755
+--- a/gio/gdbus-2.0/codegen/codegen_main.py
++++ b/gio/gdbus-2.0/codegen/codegen_main.py
+@@ -184,8 +184,8 @@ def codegen_main():
+     c_code = opts.generate_c_code
+     if c_code:
+-        h = file(c_code + '.h', 'w')
+-        c = file(c_code + '.c', 'w')
++        h = open(c_code + '.h', 'w')
++        c = open(c_code + '.c', 'w')
+         gen = codegen.CodeGenerator(all_ifaces,
+                                     opts.c_namespace,
+                                     opts.interface_prefix,
+diff --git a/gio/gdbus-2.0/codegen/parser.py b/gio/gdbus-2.0/codegen/parser.py
+index 5fabd44..7b9d216 100644
+--- a/gio/gdbus-2.0/codegen/parser.py
++++ b/gio/gdbus-2.0/codegen/parser.py
+@@ -152,12 +152,12 @@ class DBusXMLParser:
+                 self.state = DBusXMLParser.STATE_IGNORED
+             # assign docs, if any
+-            if attrs.has_key('name') and self.doc_comment_last_symbol == attrs['name']:
++            if 'name' in attrs and self.doc_comment_last_symbol == attrs['name']:
+                 self._cur_object.doc_string = self.doc_comment_body
+-                if self.doc_comment_params.has_key('short_description'):
++                if 'short_description' in self.doc_comment_params:
+                     short_description = self.doc_comment_params['short_description']
+                     self._cur_object.doc_string_brief = short_description
+-                if self.doc_comment_params.has_key('since'):
++                if 'since' in self.doc_comment_params:
+                     self._cur_object.since = self.doc_comment_params['since']
+         elif self.state == DBusXMLParser.STATE_INTERFACE:
+@@ -185,16 +185,16 @@ class DBusXMLParser:
+                 self.state = DBusXMLParser.STATE_IGNORED
+             # assign docs, if any
+-            if attrs.has_key('name') and self.doc_comment_last_symbol == attrs['name']:
++            if 'name' in attrs and self.doc_comment_last_symbol == attrs['name']:
+                 self._cur_object.doc_string = self.doc_comment_body
+-                if self.doc_comment_params.has_key('since'):
++                if 'since' in self.doc_comment_params:
+                     self._cur_object.since = self.doc_comment_params['since']
+         elif self.state == DBusXMLParser.STATE_METHOD:
+             if name == DBusXMLParser.STATE_ARG:
+                 self.state = DBusXMLParser.STATE_ARG
+                 arg_name = None
+-                if attrs.has_key('name'):
++                if 'name' in attrs:
+                     arg_name = attrs['name']
+                 arg = dbustypes.Arg(arg_name, attrs['type'])
+                 direction = attrs['direction']
+@@ -215,18 +215,18 @@ class DBusXMLParser:
+             # assign docs, if any
+             if self.doc_comment_last_symbol == old_cur_object.name:
+-                if attrs.has_key('name') and self.doc_comment_params.has_key(attrs['name']):
++                if 'name' in attrs and attrs['name'] in self.doc_comment_params:
+                     doc_string = self.doc_comment_params[attrs['name']]
+                     if doc_string != None:
+                         self._cur_object.doc_string = doc_string
+-                    if self.doc_comment_params.has_key('since'):
++                    if 'since' in self.doc_comment_params:
+                         self._cur_object.since = self.doc_comment_params['since']
+         elif self.state == DBusXMLParser.STATE_SIGNAL:
+             if name == DBusXMLParser.STATE_ARG:
+                 self.state = DBusXMLParser.STATE_ARG
+                 arg_name = None
+-                if attrs.has_key('name'):
++                if 'name' in attrs:
+                     arg_name = attrs['name']
+                 arg = dbustypes.Arg(arg_name, attrs['type'])
+                 self._cur_object.args.append(arg)
+@@ -241,11 +241,11 @@ class DBusXMLParser:
+             # assign docs, if any
+             if self.doc_comment_last_symbol == old_cur_object.name:
+-                if attrs.has_key('name') and self.doc_comment_params.has_key(attrs['name']):
++                if 'name' in attrs and attrs['name'] in self.doc_comment_params:
+                     doc_string = self.doc_comment_params[attrs['name']]
+                     if doc_string != None:
+                         self._cur_object.doc_string = doc_string
+-                    if self.doc_comment_params.has_key('since'):
++                    if 'since' in self.doc_comment_params:
+                         self._cur_object.since = self.doc_comment_params['since']
+         elif self.state == DBusXMLParser.STATE_PROPERTY:
+diff --git a/gio/gdbus-2.0/codegen/utils.py b/gio/gdbus-2.0/codegen/utils.py
+index 94bd05c..239b64e 100644
+--- a/gio/gdbus-2.0/codegen/utils.py
++++ b/gio/gdbus-2.0/codegen/utils.py
+@@ -97,15 +97,8 @@ def lookup_brief_docs(annotations):
+     else:
+         return s
+-# I'm sure this could be a lot more elegant if I was
+-# more fluent in python...
+-def my_version_cmp(a, b):
+-    if len(a[0]) > 0 and len(b[0]) > 0:
+-        va = distutils.version.LooseVersion(a[0])
+-        vb = distutils.version.LooseVersion(b[0])
+-        ret = va.__cmp__(vb)
+-    else:
+-        ret = cmp(a[0], b[0])
+-    if ret != 0:
+-        return ret
+-    return cmp(a[1], b[1])
++def version_cmp_key(key):
++    # If the 'since' version is empty put a 0 in its place as this will
++    # allow LooseVersion to work and will always compare lower.
++    v = key[0] if key[0] else '0'
++    return (distutils.version.LooseVersion(v), key[1])
+--
+cgit v0.9.0.2