| 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 |