summaryrefslogtreecommitdiff
path: root/debian/patches/pep3147-issue11254
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/pep3147-issue11254')
-rw-r--r--debian/patches/pep3147-issue11254340
1 files changed, 340 insertions, 0 deletions
diff --git a/debian/patches/pep3147-issue11254 b/debian/patches/pep3147-issue11254
new file mode 100644
index 0000000..912301a
--- /dev/null
+++ b/debian/patches/pep3147-issue11254
@@ -0,0 +1,340 @@
+From: Stefano Rivera <stefanor@debian.org>
+Date: Sat, 7 Oct 2017 09:38:57 +0200
+Subject: PEP3147 distutils patches
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+Backported from cpython.
+
+Origin: cpython, http://hg.python.org/cpython/rev/27a36b05caed
+Origin: cpython, http://hg.python.org/cpython/rev/651e84363001
+Origin: cpython, http://hg.python.org/cpython/rev/ea926dff958f
+Bug-cpython: http://bugs.python.org/issue11254
+Author: Jeff Ramnani
+Author: Éric Araujo <merwok@netwok.org>
+Author: Stefano Rivera <stefanor@debian.org>
+Last-Update: 2011-12-20
+---
+ lib-python/2.7/distutils/command/build_py.py | 7 +-
+ lib-python/2.7/distutils/command/install_lib.py | 7 +-
+ lib-python/2.7/distutils/tests/test_build_py.py | 76 ++++++++++++++--------
+ lib-python/2.7/distutils/tests/test_install_lib.py | 60 ++++++++++-------
+ lib-python/2.7/distutils/util.py | 17 +++--
+ 5 files changed, 109 insertions(+), 58 deletions(-)
+
+diff --git a/lib-python/2.7/distutils/command/build_py.py b/lib-python/2.7/distutils/command/build_py.py
+index c123c62..f4cc5c9 100644
+--- a/lib-python/2.7/distutils/command/build_py.py
++++ b/lib-python/2.7/distutils/command/build_py.py
+@@ -5,6 +5,7 @@ Implements the Distutils 'build_py' command."""
+ __revision__ = "$Id$"
+
+ import os
++import imp
+ import sys
+ from glob import glob
+
+@@ -314,9 +315,11 @@ class build_py(Command):
+ outputs.append(filename)
+ if include_bytecode:
+ if self.compile:
+- outputs.append(filename + "c")
++ outputs.append(imp.cache_from_source(filename,
++ debug_override=True))
+ if self.optimize > 0:
+- outputs.append(filename + "o")
++ outputs.append(imp.cache_from_source(filename,
++ debug_override=False))
+
+ outputs += [
+ os.path.join(build_dir, filename)
+diff --git a/lib-python/2.7/distutils/command/install_lib.py b/lib-python/2.7/distutils/command/install_lib.py
+index 043e8b6..1f6141d 100644
+--- a/lib-python/2.7/distutils/command/install_lib.py
++++ b/lib-python/2.7/distutils/command/install_lib.py
+@@ -6,6 +6,7 @@ Implements the Distutils 'install_lib' command
+ __revision__ = "$Id$"
+
+ import os
++import imp
+ import sys
+
+ from distutils.core import Command
+@@ -169,9 +170,11 @@ class install_lib(Command):
+ if ext != PYTHON_SOURCE_EXTENSION:
+ continue
+ if self.compile:
+- bytecode_files.append(py_file + "c")
++ bytecode_files.append(imp.cache_from_source(
++ py_file, debug_override=True))
+ if self.optimize > 0:
+- bytecode_files.append(py_file + "o")
++ bytecode_files.append(imp.cache_from_source(
++ py_file, debug_override=False))
+
+ return bytecode_files
+
+diff --git a/lib-python/2.7/distutils/tests/test_build_py.py b/lib-python/2.7/distutils/tests/test_build_py.py
+index c4498bc..7c12dbf 100644
+--- a/lib-python/2.7/distutils/tests/test_build_py.py
++++ b/lib-python/2.7/distutils/tests/test_build_py.py
+@@ -2,7 +2,7 @@
+
+ import os
+ import sys
+-import StringIO
++import imp
+ import unittest
+
+ from distutils.command.build_py import build_py
+@@ -59,17 +59,16 @@ class BuildPyTestCase(support.TempdirManager,
+ files = os.listdir(pkgdest)
+ self.assertIn("__init__.py", files)
+ self.assertIn("README.txt", files)
++ pycache_dir = os.path.join(pkgdest, "__pycache__")
++ pyc_files = os.listdir(pycache_dir)
+ # XXX even with -O, distutils writes pyc, not pyo; bug?
+ if sys.dont_write_bytecode:
+- self.assertNotIn("__init__.pyc", files)
++ self.assertNotIn("__init__.%s.pyc" % imp.get_tag(), pyc_files)
+ else:
+- self.assertIn("__init__.pyc", files)
++ self.assertIn("__init__.%s.pyc" % imp.get_tag(), pyc_files)
+
+ def test_empty_package_dir(self):
+- # See SF 1668596/1720897.
+- cwd = os.getcwd()
+-
+- # create the distribution files.
++ # See bugs #1668596/#1720897
+ sources = self.mkdtemp()
+ open(os.path.join(sources, "__init__.py"), "w").close()
+
+@@ -78,26 +77,51 @@ class BuildPyTestCase(support.TempdirManager,
+ open(os.path.join(testdir, "testfile"), "w").close()
+
+ os.chdir(sources)
+- old_stdout = sys.stdout
+- sys.stdout = StringIO.StringIO()
++ dist = Distribution({"packages": ["pkg"],
++ "package_dir": {"pkg": ""},
++ "package_data": {"pkg": ["doc/*"]}})
++ # script_name need not exist, it just need to be initialized
++ dist.script_name = os.path.join(sources, "setup.py")
++ dist.script_args = ["build"]
++ dist.parse_command_line()
+
+ try:
+- dist = Distribution({"packages": ["pkg"],
+- "package_dir": {"pkg": ""},
+- "package_data": {"pkg": ["doc/*"]}})
+- # script_name need not exist, it just need to be initialized
+- dist.script_name = os.path.join(sources, "setup.py")
+- dist.script_args = ["build"]
+- dist.parse_command_line()
+-
+- try:
+- dist.run_commands()
+- except DistutilsFileError:
+- self.fail("failed package_data test when package_dir is ''")
+- finally:
+- # Restore state.
+- os.chdir(cwd)
+- sys.stdout = old_stdout
++ dist.run_commands()
++ except DistutilsFileError:
++ self.fail("failed package_data test when package_dir is ''")
++
++ @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled')
++ def test_byte_compile(self):
++ project_dir, dist = self.create_dist(py_modules=['boiledeggs'])
++ os.chdir(project_dir)
++ self.write_file('boiledeggs.py', 'import antigravity')
++ cmd = build_py(dist)
++ cmd.compile = 1
++ cmd.build_lib = 'here'
++ cmd.finalize_options()
++ cmd.run()
++
++ found = os.listdir(cmd.build_lib)
++ self.assertEqual(sorted(found), ['__pycache__', 'boiledeggs.py'])
++ found = os.listdir(os.path.join(cmd.build_lib, '__pycache__'))
++ self.assertEqual(found, ['boiledeggs.%s.pyc' % imp.get_tag()])
++
++ @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled')
++ def test_byte_compile_optimized(self):
++ project_dir, dist = self.create_dist(py_modules=['boiledeggs'])
++ os.chdir(project_dir)
++ self.write_file('boiledeggs.py', 'import antigravity')
++ cmd = build_py(dist)
++ cmd.compile = 0
++ cmd.optimize = 1
++ cmd.build_lib = 'here'
++ cmd.finalize_options()
++ cmd.run()
++
++ found = os.listdir(cmd.build_lib)
++ self.assertEqual(sorted(found), ['__pycache__', 'boiledeggs.py'])
++ found = os.listdir(os.path.join(cmd.build_lib, '__pycache__'))
++ self.assertEqual(sorted(found), ['boiledeggs.%s.pyo' % imp.get_tag()])
+
+ def test_dir_in_package_data(self):
+ """
+@@ -132,7 +156,7 @@ class BuildPyTestCase(support.TempdirManager,
+
+ def test_dont_write_bytecode(self):
+ # makes sure byte_compile is not used
+- pkg_dir, dist = self.create_dist()
++ dist = self.create_dist()[1]
+ cmd = build_py(dist)
+ cmd.compile = 1
+ cmd.optimize = 1
+diff --git a/lib-python/2.7/distutils/tests/test_install_lib.py b/lib-python/2.7/distutils/tests/test_install_lib.py
+index 0defbd6..446bdba 100644
+--- a/lib-python/2.7/distutils/tests/test_install_lib.py
++++ b/lib-python/2.7/distutils/tests/test_install_lib.py
+@@ -1,6 +1,7 @@
+ """Tests for distutils.command.install_data."""
+ import os
+ import sys
++import imp
+ import unittest
+
+ from distutils.command.install_lib import install_lib
+@@ -15,7 +16,7 @@ class InstallLibTestCase(support.TempdirManager,
+ unittest.TestCase):
+
+ def test_finalize_options(self):
+- pkg_dir, dist = self.create_dist()
++ dist = self.create_dist()[1]
+ cmd = install_lib(dist)
+
+ cmd.finalize_options()
+@@ -44,49 +45,62 @@ class InstallLibTestCase(support.TempdirManager,
+
+ @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile not enabled')
+ def test_byte_compile(self):
+- pkg_dir = self._setup_byte_compile()
+- if sys.flags.optimize < 1:
+- self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyc')))
+- else:
+- self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyo')))
++ project_dir, dist = self.create_dist()
++ os.chdir(project_dir)
++ cmd = install_lib(dist)
++ cmd.compile = cmd.optimize = 1
++
++ f = os.path.join(project_dir, 'foo.py')
++ self.write_file(f, '# python file')
++ cmd.byte_compile([f])
++ pyc_file = imp.cache_from_source('foo.py', debug_override=True)
++ pyo_file = imp.cache_from_source('foo.py', debug_override=False)
++ self.assertTrue(os.path.exists(pyc_file))
++ self.assertTrue(os.path.exists(pyo_file))
+
+ def test_get_outputs(self):
+- pkg_dir, dist = self.create_dist()
++ project_dir, dist = self.create_dist()
++ os.chdir(project_dir)
++ os.mkdir('spam')
+ cmd = install_lib(dist)
+
+ # setting up a dist environment
+ cmd.compile = cmd.optimize = 1
+- cmd.install_dir = pkg_dir
+- f = os.path.join(pkg_dir, 'foo.py')
+- self.write_file(f, '# python file')
+- cmd.distribution.py_modules = [pkg_dir]
++ cmd.install_dir = self.mkdtemp()
++ f = os.path.join(project_dir, 'spam', '__init__.py')
++ self.write_file(f, '# python package')
+ cmd.distribution.ext_modules = [Extension('foo', ['xxx'])]
+- cmd.distribution.packages = [pkg_dir]
++ cmd.distribution.packages = ['spam']
+ cmd.distribution.script_name = 'setup.py'
+
+- # get_output should return 4 elements
+- self.assertGreaterEqual(len(cmd.get_outputs()), 2)
++ # get_outputs should return 4 elements: spam/__init__.py, .pyc and
++ # .pyo, foo.import-tag-abiflags.so / foo.pyd
++ outputs = cmd.get_outputs()
++ self.assertEqual(len(outputs), 4, outputs)
+
+ def test_get_inputs(self):
+- pkg_dir, dist = self.create_dist()
++ project_dir, dist = self.create_dist()
++ os.chdir(project_dir)
++ os.mkdir('spam')
+ cmd = install_lib(dist)
+
+ # setting up a dist environment
+ cmd.compile = cmd.optimize = 1
+- cmd.install_dir = pkg_dir
+- f = os.path.join(pkg_dir, 'foo.py')
+- self.write_file(f, '# python file')
+- cmd.distribution.py_modules = [pkg_dir]
++ cmd.install_dir = self.mkdtemp()
++ f = os.path.join(project_dir, 'spam', '__init__.py')
++ self.write_file(f, '# python package')
+ cmd.distribution.ext_modules = [Extension('foo', ['xxx'])]
+- cmd.distribution.packages = [pkg_dir]
++ cmd.distribution.packages = ['spam']
+ cmd.distribution.script_name = 'setup.py'
+
+- # get_input should return 2 elements
+- self.assertEqual(len(cmd.get_inputs()), 2)
++ # get_inputs should return 2 elements: spam/__init__.py and
++ # foo.import-tag-abiflags.so / foo.pyd
++ inputs = cmd.get_inputs()
++ self.assertEqual(len(inputs), 2, inputs)
+
+ def test_dont_write_bytecode(self):
+ # makes sure byte_compile is not used
+- pkg_dir, dist = self.create_dist()
++ dist = self.create_dist()[1]
+ cmd = install_lib(dist)
+ cmd.compile = 1
+ cmd.optimize = 1
+diff --git a/lib-python/2.7/distutils/util.py b/lib-python/2.7/distutils/util.py
+index 2b4d784..5792df7 100644
+--- a/lib-python/2.7/distutils/util.py
++++ b/lib-python/2.7/distutils/util.py
+@@ -6,7 +6,11 @@ one of the other *util.py modules.
+
+ __revision__ = "$Id$"
+
+-import sys, os, string, re
++import os
++import re
++import imp
++import sys
++import string
+ from distutils.errors import DistutilsPlatformError
+ from distutils.dep_util import newer
+ from distutils.spawn import spawn
+@@ -331,9 +335,9 @@ def byte_compile (py_files,
+ verbose=1, dry_run=0,
+ direct=None):
+ """Byte-compile a collection of Python source files to either .pyc
+- or .pyo files in the same directory. 'py_files' is a list of files
+- to compile; any files that don't end in ".py" are silently skipped.
+- 'optimize' must be one of the following:
++ or .pyo files in a __pycache__ subdirectory. 'py_files' is a list
++ of files to compile; any files that don't end in ".py" are silently
++ skipped. 'optimize' must be one of the following:
+ 0 - don't optimize (generate .pyc)
+ 1 - normal optimization (like "python -O")
+ 2 - extra optimization (like "python -OO")
+@@ -445,7 +449,10 @@ byte_compile(files, optimize=%r, force=%r,
+ # Terminology from the py_compile module:
+ # cfile - byte-compiled file
+ # dfile - purported source filename (same as 'file' by default)
+- cfile = file + (__debug__ and "c" or "o")
++ if optimize >= 0:
++ cfile = imp.cache_from_source(file, debug_override=not optimize)
++ else:
++ cfile = imp.cache_from_source(file)
+ dfile = file
+ if prefix:
+ if file[:len(prefix)] != prefix: