chiark / gitweb /
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 0210714cbac542d91b5c525f14f851e23ecbbb89..385634d19334c4ee953f7cfd8ee4edb53c8038aa 100644 (file)
@@ -33,6 +33,13 @@ import subprocess as SUB
 import distutils.core as DC
 import distutils.log as DL
 
 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.
 
 ###--------------------------------------------------------------------------
 ### Random utilities.
 
@@ -73,7 +80,7 @@ def progoutput(command):
   The COMMAND must produce exactly one line of output, and must exit with
   status zero.
   """
   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)
   try:
     out = kid.stdout.readline()
     junk = kid.stdout.read(1)
@@ -227,7 +234,7 @@ class CommandClass (type):
     else: CMDS[name] = c
     return c
 
     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.
 
   """
   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
   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):
   """
 
 class build_gen(Command):
   """