Issue #4072: Restore build_py_2to3. Add a distutils demo for
build_py_2to3.
diff --git a/Demo/distutils/test2to3/README b/Demo/distutils/test2to3/README
new file mode 100644
index 0000000..9365593
--- /dev/null
+++ b/Demo/distutils/test2to3/README
@@ -0,0 +1,3 @@
+This project demonstrates how a distutils package
+can support Python 2.x and Python 3.x from a single
+source, using lib2to3.
\ No newline at end of file
diff --git a/Demo/distutils/test2to3/setup.py b/Demo/distutils/test2to3/setup.py
new file mode 100644
index 0000000..3abb5ff
--- /dev/null
+++ b/Demo/distutils/test2to3/setup.py
@@ -0,0 +1,18 @@
+# -*- coding: iso-8859-1 -*-
+from distutils.core import setup
+
+try:
+    from distutils.command.build_py import build_py_2to3 as build_py
+except ImportError:
+    from distutils.command.build_py import build_py
+
+setup(
+    name = "test2to3",
+    version = "1.0",
+    description = "2to3 distutils test package",
+    author = "Martin v. Löwis",
+    author_email = "python-dev@python.org",
+    license = "PSF license",
+    packages = ["test2to3"],
+    cmdclass = {'build_py':build_py}
+)
diff --git a/Demo/distutils/test2to3/test2to3/__init__.py b/Demo/distutils/test2to3/test2to3/__init__.py
new file mode 100644
index 0000000..1bb8bf6
--- /dev/null
+++ b/Demo/distutils/test2to3/test2to3/__init__.py
@@ -0,0 +1 @@
+# empty
diff --git a/Demo/distutils/test2to3/test2to3/hello.py b/Demo/distutils/test2to3/test2to3/hello.py
new file mode 100644
index 0000000..f52926b
--- /dev/null
+++ b/Demo/distutils/test2to3/test2to3/hello.py
@@ -0,0 +1,5 @@
+def hello():
+    try:
+        print "Hello, world"
+    except IOError, e:
+        print e.errno
diff --git a/Lib/distutils/command/build_py.py b/Lib/distutils/command/build_py.py
index 09f6d23..7728489 100644
--- a/Lib/distutils/command/build_py.py
+++ b/Lib/distutils/command/build_py.py
@@ -384,6 +384,18 @@
             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 = []
@@ -396,18 +408,12 @@
             self.build_package_data()
 
         # 2to3
-        from lib2to3.refactor import RefactoringTool
-        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)
+        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)
 
         # Remaining base class code
         self.byte_compile(self.get_outputs(include_bytecode=0))
diff --git a/Misc/NEWS b/Misc/NEWS
index 139fc57..c1ad97d 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -31,6 +31,8 @@
 Library
 -------
 
+- Issue #4072: Restore build_py_2to3.
+
 - Issue #4014: Don't claim that Python has an Alpha release status, in addition
   to claiming it is Mature.
 
@@ -63,6 +65,11 @@
 
 - Issue #4018: Disable "for me" installations on Vista.
 
+Tools/Demos
+-----------
+
+- Issue #4072: Add a distutils demo for build_py_2to3.
+
 
 What's New in Python 3.0 release candidate 1
 ============================================