From 73a22f0500ce713d46fce864e95402c34a45afd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Sat, 22 Mar 2008 00:35:10 +0000 Subject: Add build_py_2to3. --- Doc/distutils/apiref.rst | 20 +++++++++++++++++++- Lib/distutils/command/build_py.py | 24 ++++++++++++++++++++++++ Misc/NEWS | 4 ++++ 3 files changed, 47 insertions(+), 1 deletion(-) 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. -- cgit v0.12