summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2008-03-22 00:35:10 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2008-03-22 00:35:10 (GMT)
commit73a22f0500ce713d46fce864e95402c34a45afd9 (patch)
treeef47a88b0116333b8941143b09607b84e7f233f5
parent3faa84f18e2a340c2a805a343f3b10a05dfe5fdd (diff)
downloadcpython-73a22f0500ce713d46fce864e95402c34a45afd9.zip
cpython-73a22f0500ce713d46fce864e95402c34a45afd9.tar.gz
cpython-73a22f0500ce713d46fce864e95402c34a45afd9.tar.bz2
Add build_py_2to3.
-rw-r--r--Doc/distutils/apiref.rst20
-rw-r--r--Lib/distutils/command/build_py.py24
-rw-r--r--Misc/NEWS4
3 files changed, 47 insertions, 1 deletions
diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst
index 36684e2..6616f83 100644
--- a/Doc/distutils/apiref.rst
+++ b/Doc/distutils/apiref.rst
@@ -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
diff --git a/Lib/distutils/command/build_py.py b/Lib/distutils/command/build_py.py
index 63ced4b..f39ffb8 100644
--- a/Lib/distutils/command/build_py.py
+++ b/Lib/distutils/command/build_py.py
@@ -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
diff --git a/Misc/NEWS b/Misc/NEWS
index 279da30..4379997 100644
--- 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.