Blob Blame History Raw
From 37b0764480add2caa69f230f5f7066717589c1bb Mon Sep 17 00:00:00 2001
From: Tomas Popela <tpopela@redhat.com>
Date: Fri, 8 Mar 2019 08:09:13 +0100
Subject: [PATCH] [GTK] Make Tools/gtkdoc python3 compatible
 https://bugs.webkit.org/show_bug.cgi?id=195359

Reviewed by Carlos Garcia Campos.

* gtkdoc/generate-gtkdoc:
ConfigParser was reworked in Python 3.2 so we have adapt the code to
work with Python 2 and 3.
(get_gtkdoc_module_paths):
The iteritems() was removed in Python 3, so let's use items() that's
available in Python 2 and 3.
(get_generator_for_config):
* gtkdoc/gtkdoc.py:
(GTKDoc._run_command):
The sys.stdout.write() is expecting str in Python 3 and not bytes
(that are coming from stdout.encode()). Use sys.stdout.buffer.write()
for passing the bytes there.
---
 Tools/gtkdoc/generate-gtkdoc | 15 ++++++++++-----
 Tools/gtkdoc/gtkdoc.py       | 10 ++++++++--
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/Tools/gtkdoc/generate-gtkdoc b/Tools/gtkdoc/generate-gtkdoc
index f280818f0c1..37ccacc774c 100755
--- a/Tools/gtkdoc/generate-gtkdoc
+++ b/Tools/gtkdoc/generate-gtkdoc
@@ -16,7 +16,6 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 from __future__ import print_function
-from ConfigParser import SafeConfigParser
 
 import argparse
 import codecs
@@ -26,12 +25,18 @@ import logging
 import os.path
 import sys
 
+if sys.version_info < (3, 2):
+    from ConfigParser import SafeConfigParser as ConfigParser
+else:
+    from configparser import ConfigParser
+
 top_level_directory = os.path.normpath(os.path.join(os.path.dirname(__file__), '..', '..'))
 sys.path.insert(0, os.path.join(top_level_directory, 'Tools', 'glib'))
 import common
 
-sys.stdout = codecs.getwriter("utf-8")(sys.stdout)
-sys.stderr = codecs.getwriter("utf-8")(sys.stderr)
+if sys.version_info.major == 2:
+    sys.stdout = codecs.getwriter("utf-8")(sys.stdout)
+    sys.stderr = codecs.getwriter("utf-8")(sys.stderr)
 
 def configure_logging(verbose):
     level = logging.DEBUG if verbose else logging.INFO
@@ -57,7 +62,7 @@ def get_gtkdoc_module_paths(cross_reference_deps):
 
     paths = []
     html_dir = os.path.join('share', 'gtk-doc', 'html')
-    for package, modules in dependent_packages.iteritems():
+    for package, modules in dependent_packages.items():
         prefix = common.prefix_of_pkg_config_file(package)
         if prefix is None:
             continue
@@ -109,7 +114,7 @@ def get_generator_for_config(config_file, virtual_root, cross_reference_deps = [
     if not os.path.isfile(config_file):
         return None
 
-    config = SafeConfigParser()
+    config = ConfigParser()
     config.read(config_file)
     module_name = config.sections()[0]
     pkgconfig_file = config.get(module_name, 'pkgconfig_file')
diff --git a/Tools/gtkdoc/gtkdoc.py b/Tools/gtkdoc/gtkdoc.py
index 47968446cc5..81ee8cdccc8 100644
--- a/Tools/gtkdoc/gtkdoc.py
+++ b/Tools/gtkdoc/gtkdoc.py
@@ -199,12 +199,18 @@ class GTKDoc(object):
         if print_output:
             if stdout:
                 try:
-                    sys.stdout.write(stdout.encode("utf-8"))
+                    if sys.version_info.major == 2:
+                        sys.stdout.write(stdout.encode("utf-8"))
+                    else:
+                        sys.stdout.buffer.write(stdout.encode("utf-8"))
                 except UnicodeDecodeError:
                     sys.stdout.write(stdout)
             if stderr:
                 try:
-                    sys.stderr.write(stderr.encode("utf-8"))
+                    if sys.version_info.major == 2:
+                        sys.stderr.write(stderr.encode("utf-8"))
+                    else:
+                        sys.stderr.buffer.write(stderr.encode("utf-8"))
                 except UnicodeDecodeError:
                     sys.stderr.write(stderr)
 
-- 
2.20.1