]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Add build_py_2to3.
authorMartin v. Löwis <martin@v.loewis.de>
Sat, 22 Mar 2008 00:35:10 +0000 (00:35 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Sat, 22 Mar 2008 00:35:10 +0000 (00:35 +0000)
Doc/distutils/apiref.rst
Lib/distutils/command/build_py.py
Misc/NEWS

index 36684e22557812d7375555d9dfea3159cc946869..6616f83661996e076a4393114a8688bfdaf37c77 100644 (file)
@@ -1820,7 +1820,25 @@ This module supplies the abstract base class :class:`Command`.
    :synopsis: Build the .py/.pyc files of a package
 
 
-.. % todo
+.. class:: build_py(Command)
+
+.. class:: build_py_2to3(build_py)
+
+   Alternative implementation of build_py which also runs the
+   2to3 conversion library on each .py file that is going to be
+   installed. To use this in a setup.py file for a distribution
+   that is designed to run with both Python 2.x and 3.x, add::
+
+     try:
+        from distutils.command.build_py import build_py_2to3 as build_py
+     except ImportError:
+        from distutils.command.build_py import build_py
+
+   to your setup.py, and later::
+
+      cmdclass = {'build_py':build_py}
+
+   to the invocation of setup().
 
 
 :mod:`distutils.command.build_scripts` --- Build the scripts of a package
index 63ced4b470700c011fc2a5ca0b2344f9a3000c9b..f39ffb878e3b8ed00d66d5cc57e57b5a6292353a 100644 (file)
@@ -383,3 +383,27 @@ class build_py (Command):
         if self.optimize > 0:
             byte_compile(files, optimize=self.optimize,
                          force=self.force, prefix=prefix, dry_run=self.dry_run)
+
+class build_py_2to3(build_py):
+    def run(self):
+        from lib2to3.refactor import RefactoringTool
+        self.updated_files = []
+        build_py.run(self)
+        class Options:
+            pass
+        o = Options()
+        o.doctests_only = False
+        o.fix = []
+        o.list_fixes = []
+        o.print_function = False
+        o.verbose = False
+        o.write = True
+        r = RefactoringTool(o)
+        r.refactor_args(self.updated_files)
+
+    def build_module(self, module, module_file, package):
+        res = build_py.build_module(self, module, module_file, package)
+        if res[1]:
+            # file was copied
+            self.updated_files.append(res[0])
+        return res
index 279da30bdb837495e336d7d88da52def97724be6..437999771cc1c497daf94e8007b65b2b3188bf1c 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -23,6 +23,10 @@ Extension Modules
 Library
 -------
 
+- The class distutils.commands.build_py.build_py_2to3 can be used
+  as a build_py replacement to automatically run 2to3 on modules
+  that are going to be installed.
+
 - A new pickle protocol (protocol 3) is added with explicit support
   for bytes.  This is the default protocol.  It intentionally cannot
   be unpickled by Python 2.x.