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
