chiark / gitweb /
mdwsetup.py: Insert a space before direct-superclass lists.
[runlisp] / mdwsetup.py
index 94bce8a3b056165dbcee51dcd108ccc89d443a9a..0bce572a7cebac278dc2289733937d298575874c 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,15 +80,16 @@ 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)
-  out = kid.stdout.readline()
-  junk = kid.stdout.read()
-  if junk != '':
-    raise ValueError, \
-          "Child process `%s' produced unspected output %r" % (command, junk)
+  kid = SUB.Popen(command, stdout = SUB.PIPE, universal_newlines = True)
+  try:
+    out = kid.stdout.readline()
+    junk = kid.stdout.read(1)
+  finally:
+    kid.stdout.close()
+  if junk != '': raise ValueError \
+    ("Child process `%s' produced unspected output %r" % (command, junk))
   rc = kid.wait()
   rc = kid.wait()
-  if rc != 0:
-    raise SubprocessFailure, (command, rc)
+  if rc != 0: raise SubprocessFailure(command, rc)
   return out.rstrip('\n')
 
 ###--------------------------------------------------------------------------
   return out.rstrip('\n')
 
 ###--------------------------------------------------------------------------
@@ -99,22 +107,24 @@ def pkg_config(pkg, version):
   library-directory names are in LIBDIRS; and the library names themselves
   are in LIBS.
   """
   library-directory names are in LIBDIRS; and the library names themselves
   are in LIBS.
   """
-  spec = '%s >= %s' % (pkg, version)
+
   def weird(what, word):
   def weird(what, word):
-    raise ValueError, \
-          "Unexpected `%s' item `%s' from package `%s'" % (what, word, pkg)
-  for word in progoutput(['pkg-config', '--cflags', spec]).split():
-    if word.startswith('-I'):
-      INCLUDEDIRS.append(word[2:])
-    else:
-      weird('--cflags', word)
-  for word in progoutput(['pkg-config', '--libs', spec]).split():
-    if word.startswith('-L'):
-      LIBDIRS.append(word[2:])
-    elif word.startswith('-l'):
-      LIBS.append(word[2:])
-    else:
-      weird('--libs', word)
+    raise ValueError \
+      ("Unexpected `%s' item `%s' from package `%s'" % (what, word, pkg))
+
+  spec = '%s >= %s' % (pkg, version)
+
+  try: cflags = OS.environ["%s_CFLAGS" % pkg]
+  except KeyError: cflags = progoutput(['pkg-config', '--cflags', spec])
+  for word in cflags.split():
+    if word.startswith('-I'): INCLUDEDIRS.append(word[2:])
+    else: weird('CFLAGS', word)
+  try: libs = OS.environ["%s_LIBS" % pkg]
+  except KeyError: libs = progoutput(['pkg-config', '--libs', spec])
+  for word in libs.split():
+    if word.startswith('-L'): LIBDIRS.append(word[2:])
+    elif word.startswith('-l'): LIBS.append(word[2:])
+    else: weird('LIBS', word)
 
 ###--------------------------------------------------------------------------
 ### Substituting variables in files.
 
 ###--------------------------------------------------------------------------
 ### Substituting variables in files.
@@ -181,7 +191,7 @@ class Generate (BaseGenFile):
     temp = me.target + '.new'
     with open(temp, 'w') as ft:
       rc = SUB.call([SYS.executable, me.sources[0]], stdout = ft)
     temp = me.target + '.new'
     with open(temp, 'w') as ft:
       rc = SUB.call([SYS.executable, me.sources[0]], stdout = ft)
-    if rc != 0: raise SubprocessFailure, (source, rc)
+    if rc != 0: raise SubprocessFailure(me.sources[0], rc << 8)
     OS.rename(temp, me.target)
 
 ## Backward compatibility.
     OS.rename(temp, me.target)
 
 ## Backward compatibility.
@@ -224,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.
 
@@ -247,9 +257,9 @@ 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):
   """
   Generate files, according to the `genfiles'.
 
   """
   Generate files, according to the `genfiles'.
 
@@ -278,7 +288,7 @@ class build (_build, Command):
   sub_commands = [('build_gen', lambda me: me.distribution.genfiles)]
   sub_commands += _build.sub_commands
 
   sub_commands = [('build_gen', lambda me: me.distribution.genfiles)]
   sub_commands += _build.sub_commands
 
-class clean_gen(Command):
+class clean_gen (Command):
   """
   Remove the generated files, as listed in `genfiles'.
 
   """
   Remove the generated files, as listed in `genfiles'.
 
@@ -290,7 +300,7 @@ class clean_gen(Command):
     d = me.distribution
     for g in d.genfiles: g.clean(dry_run_p = me.dry_run)
 
     d = me.distribution
     for g in d.genfiles: g.clean(dry_run_p = me.dry_run)
 
-class clean_others(Command):
+class clean_others (Command):
   """
   Remove the files listed in the `cleanfiles' argument to `setup'.
   """
   """
   Remove the files listed in the `cleanfiles' argument to `setup'.
   """