From: Mark Wooding Date: Tue, 1 Oct 2019 22:57:28 +0000 (+0100) Subject: mdwsetup.py: Fixes for Python 3 compatibility. X-Git-Url: https://git.distorted.org.uk/~mdw/runlisp/commitdiff_plain/4e2368592f2b964ccd971ebf73c7b4268df5d666 mdwsetup.py: Fixes for Python 3 compatibility. * 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. --- diff --git a/mdwsetup.py b/mdwsetup.py index 0210714..385634d 100644 --- a/mdwsetup.py +++ b/mdwsetup.py @@ -34,6 +34,13 @@ import distutils.core as DC import distutils.log as DL ###-------------------------------------------------------------------------- +### Compatibility hacks. + +def with_metaclass(meta, *supers): + return meta("#" % 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): """