Commit 4b5a5f7b authored by Éric Araujo's avatar Éric Araujo

More fixes for PEP 3147 compliance in packaging (#11254)

parent 8ccd18ff
"""Build pure Python modules (just copy to build directory).""" """Build pure Python modules (just copy to build directory)."""
import os import os
import imp
import sys import sys
from glob import glob from glob import glob
...@@ -330,9 +331,10 @@ class build_py(Command, Mixin2to3): ...@@ -330,9 +331,10 @@ class build_py(Command, Mixin2to3):
outputs.append(filename) outputs.append(filename)
if include_bytecode: if include_bytecode:
if self.compile: if self.compile:
outputs.append(filename + "c") outputs.append(imp.cache_from_source(filename))
if self.optimize > 0: if self.optimize > 0:
outputs.append(filename + "o") outputs.append(imp.cache_from_source(filename,
debug_override=False))
outputs += [ outputs += [
os.path.join(build_dir, filename) os.path.join(build_dir, filename)
......
"""Install all modules (extensions and pure Python).""" """Install all modules (extensions and pure Python)."""
import os import os
import imp
import sys import sys
import logging import logging
...@@ -172,9 +173,10 @@ class install_lib(Command): ...@@ -172,9 +173,10 @@ class install_lib(Command):
if ext != PYTHON_SOURCE_EXTENSION: if ext != PYTHON_SOURCE_EXTENSION:
continue continue
if self.compile: if self.compile:
bytecode_files.append(py_file + "c") bytecode_files.append(imp.cache_from_source(py_file))
if self.optimize > 0: 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 return bytecode_files
......
...@@ -102,6 +102,40 @@ class BuildPyTestCase(support.TempdirManager, ...@@ -102,6 +102,40 @@ class BuildPyTestCase(support.TempdirManager,
os.chdir(cwd) os.chdir(cwd)
sys.stdout = old_stdout sys.stdout = old_stdout
@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 = True
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 = True
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.pyc' % imp.get_tag(),
'boiledeggs.%s.pyo' % imp.get_tag()])
def test_dont_write_bytecode(self): def test_dont_write_bytecode(self):
# makes sure byte_compile is not used # makes sure byte_compile is not used
pkg_dir, dist = self.create_dist() pkg_dir, dist = self.create_dist()
...@@ -118,6 +152,7 @@ class BuildPyTestCase(support.TempdirManager, ...@@ -118,6 +152,7 @@ class BuildPyTestCase(support.TempdirManager,
self.assertIn('byte-compiling is disabled', self.get_logs()[0]) self.assertIn('byte-compiling is disabled', self.get_logs()[0])
def test_suite(): def test_suite():
return unittest.makeSuite(BuildPyTestCase) return unittest.makeSuite(BuildPyTestCase)
......
"""Tests for packaging.command.install.""" """Tests for packaging.command.install."""
import os import os
import imp
import sys import sys
from sysconfig import (get_scheme_names, get_config_vars, from sysconfig import (get_scheme_names, get_config_vars,
_SCHEMES, get_config_var, get_path) _SCHEMES, get_config_var, get_path)
...@@ -181,9 +182,11 @@ class InstallTestCase(support.TempdirManager, ...@@ -181,9 +182,11 @@ class InstallTestCase(support.TempdirManager,
def test_old_record(self): def test_old_record(self):
# test pre-PEP 376 --record option (outside dist-info dir) # test pre-PEP 376 --record option (outside dist-info dir)
install_dir = self.mkdtemp() install_dir = self.mkdtemp()
project_dir, dist = self.create_dist(scripts=['hello']) project_dir, dist = self.create_dist(py_modules=['hello'],
scripts=['sayhi'])
os.chdir(project_dir) os.chdir(project_dir)
self.write_file('hello', "print('o hai')") self.write_file('hello.py', "def main(): print('o hai')")
self.write_file('sayhi', 'from hello import main; main()')
cmd = install_dist(dist) cmd = install_dist(dist)
dist.command_obj['install_dist'] = cmd dist.command_obj['install_dist'] = cmd
...@@ -196,8 +199,9 @@ class InstallTestCase(support.TempdirManager, ...@@ -196,8 +199,9 @@ class InstallTestCase(support.TempdirManager,
content = f.read() content = f.read()
found = [os.path.basename(line) for line in content.splitlines()] found = [os.path.basename(line) for line in content.splitlines()]
expected = ['hello', 'METADATA', 'INSTALLER', 'REQUESTED', 'RECORD'] expected = ['hello.py', 'hello.%s.pyc' % imp.get_tag(), 'sayhi',
self.assertEqual(found, expected) 'METADATA', 'INSTALLER', 'REQUESTED', 'RECORD']
self.assertEqual(sorted(found), sorted(expected))
# XXX test that fancy_getopt is okay with options named # XXX test that fancy_getopt is okay with options named
# record and no-record but unrelated # record and no-record but unrelated
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment