mdwsetup.py: Fixes for Python 3 compatibility.
authorMark Wooding <mdw@distorted.org.uk>
Tue, 1 Oct 2019 22:57:28 +0000 (23:57 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 8 May 2020 11:30:13 +0000 (12:30 +0100)
  * Write parentheses around `print' operands.

  * Set `universal_newlines' on in `Popen' to force handling in text
    mode.

  * Use an unpleasant hack to inject the `CommandClass' metaclass,
    because the official syntax is so different between the two
    versions.

mdwsetup.py

index 0210714..385634d 100644 (file)
@@ -34,6 +34,13 @@ import distutils.core as DC
 import distutils.log as DL
 
 ###--------------------------------------------------------------------------
+### Compatibility hacks.
+
+def with_metaclass(meta, *supers):
+  return meta("#<anonymous base %s>" % meta.__name__,
+              supers or (object,), dict())
+
+###--------------------------------------------------------------------------
 ### Random utilities.
 
 def uniquify(seq):
@@ -73,7 +80,7 @@ def progoutput(command):
   The COMMAND must produce exactly one line of output, and must exit with
   status zero.
   """
-  kid = SUB.Popen(command, stdout = SUB.PIPE)
+  kid = SUB.Popen(command, stdout = SUB.PIPE, universal_newlines = True)
   try:
     out = kid.stdout.readline()
     junk = kid.stdout.read(1)
@@ -227,7 +234,7 @@ class CommandClass (type):
     else: CMDS[name] = c
     return c
 
-class Command (DC.Command, object):
+class Command (with_metaclass(CommandClass, DC.Command, object)):
   """
   Base class for `mdwsetup' command classes.
 
@@ -250,7 +257,7 @@ class distdir (Command):
   description = "print the distribution directory name to stdout"
   def run(me):
     d = me.distribution
-    print '%s-%s' % (d.get_name(), d.get_version())
+    print('%s-%s' % (d.get_name(), d.get_version()))
 
 class build_gen(Command):
   """