diff options
Diffstat (limited to 'debian/patches/pep3147-issue11254')
-rw-r--r-- | debian/patches/pep3147-issue11254 | 340 |
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: |