Index: Demo/distutils/test2to3/setup.py =================================================================== --- Demo/distutils/test2to3/setup.py (Revision 66901) +++ Demo/distutils/test2to3/setup.py (Arbeitskopie) @@ -6,6 +6,11 @@ except ImportError: from distutils.command.build_py import build_py +try: + from distutils.command.build_scripts import build_scripts_2to3 as build_scripts +except ImportError: + from distutils.command.build_scripts import build_scripts + setup( name = "test2to3", version = "1.0", @@ -14,5 +19,8 @@ author_email = "python-dev@python.org", license = "PSF license", packages = ["test2to3"], - cmdclass = {'build_py':build_py} + scripts = ["maintest.py"], + cmdclass = {'build_py':build_py, + 'build_scripts':build_scripts, + } ) Index: Demo/distutils/test2to3/maintest.py =================================================================== --- Demo/distutils/test2to3/maintest.py (Revision 0) +++ Demo/distutils/test2to3/maintest.py (Revision 0) @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +# The above line should get replaced with the path to the Python +# interpreter; the block below should get 2to3-converted. + +try: + from test2to3.hello import hello +except ImportError, e: + print "Import failed", e +hello() Eigenschaftsänderungen: Demo/distutils/test2to3/maintest.py ___________________________________________________________________ Hinzugefügt: svn:keywords + Id Hinzugefügt: svn:eol-style + native Index: Lib/distutils/util.py =================================================================== --- Lib/distutils/util.py (Revision 66900) +++ Lib/distutils/util.py (Arbeitskopie) @@ -531,3 +531,35 @@ lines = [x.strip() for x in header.split('\n')] sep = '\n' + 8*' ' return sep.join(lines) + +# 2to3 support + +def run_2to3(files): + """Invoke 2to3 on a list of Python files. + The files should all come from the build area, as the + modification is done in-place. To reduce the build time, + only files modified since the last invocation of this + function should be passed in the files argument.""" + + if not files: + return + + # Make this class local, to delay import of 2to3 + from lib2to3.refactor import RefactoringTool, get_fixers_from_package + class DistutilsRefactoringTool(RefactoringTool): + def log_error(self, msg, *args, **kw): + # XXX ignores kw + log.error(msg, *args) + + def log_message(self, msg, *args): + log.info(msg, *args) + + def log_debug(self, msg, *args): + log.debug(msg, *args) + + fixers = get_fixers_from_package('lib2to3.fixes') + options = dict(fix=[], list_fixes=[], + print_function=False, verbose=False, + write=True) + r = DistutilsRefactoringTool(fixers, options) + r.refactor(files, write=True) Index: Lib/distutils/command/build_scripts.py =================================================================== --- Lib/distutils/command/build_scripts.py (Revision 66900) +++ Lib/distutils/command/build_scripts.py (Arbeitskopie) @@ -9,7 +9,7 @@ from distutils import sysconfig from distutils.core import Command from distutils.dep_util import newer -from distutils.util import convert_path +from distutils.util import convert_path, run_2to3 from distutils import log # check if Python is called on the first line with this expression @@ -59,6 +59,7 @@ """ self.mkpath(self.build_dir) outfiles = [] + updated_files = [] for script in self.scripts: adjust = False script = convert_path(script) @@ -92,6 +93,7 @@ if adjust: log.info("copying and adjusting %s -> %s", script, self.build_dir) + updated_files.append(outfile) if not self.dry_run: outf = open(outfile, "w") if not sysconfig.python_build: @@ -112,6 +114,7 @@ else: if f: f.close() + updated_files.append(outfile) self.copy_file(script, outfile) if os.name == 'posix': @@ -125,3 +128,13 @@ log.info("changing mode of %s from %o to %o", file, oldmode, newmode) os.chmod(file, newmode) + # XXX should we modify self.outfiles? + return outfiles, updated_files + +class build_scripts_2to3(build_scripts): + def copy_scripts(self): + outfiles, updated_files = build_scripts.copy_scripts(self) + if not self.dry_run: + run_2to3(updated_files) + return outfiles, updated_files + Index: Lib/distutils/command/build_py.py =================================================================== --- Lib/distutils/command/build_py.py (Revision 66901) +++ Lib/distutils/command/build_py.py (Arbeitskopie) @@ -9,7 +9,7 @@ from distutils.core import Command from distutils.errors import * -from distutils.util import convert_path +from distutils.util import convert_path, run_2to3 from distutils import log class build_py (Command): @@ -384,18 +384,6 @@ byte_compile(files, optimize=self.optimize, force=self.force, prefix=prefix, dry_run=self.dry_run) -from lib2to3.refactor import RefactoringTool, get_fixers_from_package -class DistutilsRefactoringTool(RefactoringTool): - def log_error(self, msg, *args, **kw): - # XXX ignores kw - log.error(msg, *args) - - def log_message(self, msg, *args): - log.info(msg, *args) - - def log_debug(self, msg, *args): - log.debug(msg, *args) - class build_py_2to3(build_py): def run(self): self.updated_files = [] @@ -408,12 +396,7 @@ self.build_package_data() # 2to3 - fixers = get_fixers_from_package('lib2to3.fixes') - options = dict(fix=[], list_fixes=[], - print_function=False, verbose=False, - write=True) - r = DistutilsRefactoringTool(fixers, options) - r.refactor(self.updated_files, write=True) + run_2to3(self.updated_files) # Remaining base class code self.byte_compile(self.get_outputs(include_bytecode=0))