Kaydet (Commit) 7724a6c1 authored tarafından Éric Araujo's avatar Éric Araujo

Packaging cleanup: remove conditionals for < 2.6 support.

PEP 370 features and sys.dont_write_bytecode are always available
in 3.3; the distutils2 backport still has the conditionals.

I also renamed an internal misnamed method and fixed a few things
(“packaging2” name, stray print, unused import, fd leak).
üst 37ccd6f7
......@@ -3,6 +3,7 @@
import os
import re
import sys
import site
import logging
import sysconfig
......@@ -15,9 +16,6 @@ from packaging.util import newer_group
from packaging.compiler.extension import Extension
from packaging import logger
import site
HAS_USER_SITE = True
if os.name == 'nt':
from packaging.compiler.msvccompiler import get_build_version
MSVC_VERSION = int(get_build_version())
......@@ -62,6 +60,8 @@ class build_ext(Command):
('inplace', 'i',
"ignore build-lib and put compiled extensions into the source " +
"directory alongside your pure Python modules"),
('user', None,
"add user include, library and rpath"),
('include-dirs=', 'I',
"list of directories to search for header files" + sep_by),
('define=', 'D',
......@@ -88,12 +88,8 @@ class build_ext(Command):
"path to the SWIG executable"),
]
boolean_options = ['inplace', 'debug', 'force']
boolean_options = ['inplace', 'debug', 'force', 'user']
if HAS_USER_SITE:
user_options.append(('user', None,
"add user include, library and rpath"))
boolean_options.append('user')
help_options = [
('help-compiler', None,
......@@ -120,8 +116,7 @@ class build_ext(Command):
self.compiler = None
self.swig = None
self.swig_opts = None
if HAS_USER_SITE:
self.user = None
self.user = None
def finalize_options(self):
self.set_undefined_options('build',
......@@ -270,7 +265,7 @@ class build_ext(Command):
self.swig_opts = self.swig_opts.split(' ')
# Finally add the user include and library directories if requested
if HAS_USER_SITE and self.user:
if self.user:
user_include = os.path.join(site.USER_BASE, "include")
user_lib = os.path.join(site.USER_BASE, "lib")
if os.path.isdir(user_include):
......
......@@ -388,7 +388,7 @@ class build_py(Command, Mixin2to3):
self.build_module(module, module_file, package)
def byte_compile(self, files):
if hasattr(sys, 'dont_write_bytecode') and sys.dont_write_bytecode:
if sys.dont_write_bytecode:
logger.warning('%s: byte-compiling is disabled, skipping.',
self.get_command_name())
return
......
......@@ -14,9 +14,6 @@ from packaging.util import convert_path, change_root, get_platform
from packaging.errors import PackagingOptionError
HAS_USER_SITE = True
class install_dist(Command):
description = "install everything from build directory"
......@@ -27,6 +24,9 @@ class install_dist(Command):
"installation prefix"),
('exec-prefix=', None,
"(Unix only) prefix for platform-specific files"),
('user', None,
"install in user site-packages directory [%s]" %
get_path('purelib', '%s_user' % os.name)),
('home=', None,
"(Unix only) home directory to install under"),
......@@ -97,15 +97,7 @@ class install_dist(Command):
]
boolean_options = ['compile', 'force', 'skip-build', 'no-distinfo',
'requested', 'no-record']
if HAS_USER_SITE:
user_options.append(
('user', None,
"install in user site-packages directory [%s]" %
get_path('purelib', '%s_user' % os.name)))
boolean_options.append('user')
'requested', 'no-record', 'user']
negative_opt = {'no-compile': 'compile', 'no-requested': 'requested'}
......@@ -115,8 +107,7 @@ class install_dist(Command):
self.prefix = None
self.exec_prefix = None
self.home = None
if HAS_USER_SITE:
self.user = False
self.user = False
# These select only the installation base; it's up to the user to
# specify the installation scheme (currently, that means supplying
......@@ -135,9 +126,8 @@ class install_dist(Command):
self.install_lib = None # set to either purelib or platlib
self.install_scripts = None
self.install_data = None
if HAS_USER_SITE:
self.install_userbase = get_config_var('userbase')
self.install_usersite = get_path('purelib', '%s_user' % os.name)
self.install_userbase = get_config_var('userbase')
self.install_usersite = get_path('purelib', '%s_user' % os.name)
self.compile = None
self.optimize = None
......@@ -219,9 +209,8 @@ class install_dist(Command):
raise PackagingOptionError(
"must supply either home or prefix/exec-prefix -- not both")
if HAS_USER_SITE and self.user and (
self.prefix or self.exec_prefix or self.home or
self.install_base or self.install_platbase):
if self.user and (self.prefix or self.exec_prefix or self.home or
self.install_base or self.install_platbase):
raise PackagingOptionError(
"can't combine user with prefix/exec_prefix/home or "
"install_base/install_platbase")
......@@ -274,11 +263,9 @@ class install_dist(Command):
'exec_prefix': exec_prefix,
'srcdir': srcdir,
'projectbase': projectbase,
}
if HAS_USER_SITE:
self.config_vars['userbase'] = self.install_userbase
self.config_vars['usersite'] = self.install_usersite
'userbase': self.install_userbase,
'usersite': self.install_usersite,
}
self.expand_basedirs()
......@@ -295,9 +282,9 @@ class install_dist(Command):
self.dump_dirs("post-expand_dirs()")
# Create directories in the home dir:
if HAS_USER_SITE and self.user:
self.create_home_path()
# Create directories under USERBASE
if self.user:
self.create_user_dirs()
# Pick the actual directory to install all modules to: either
# install_purelib or install_platlib, depending on whether this
......@@ -311,10 +298,8 @@ class install_dist(Command):
# Convert directories from Unix /-separated syntax to the local
# convention.
self.convert_paths('lib', 'purelib', 'platlib',
'scripts', 'data', 'headers')
if HAS_USER_SITE:
self.convert_paths('userbase', 'usersite')
self.convert_paths('lib', 'purelib', 'platlib', 'scripts',
'data', 'headers', 'userbase', 'usersite')
# Well, we're not actually fully completely finalized yet: we still
# have to deal with 'extra_path', which is the hack for allowing
......@@ -355,7 +340,7 @@ class install_dist(Command):
"installation scheme is incomplete")
return
if HAS_USER_SITE and self.user:
if self.user:
if self.install_userbase is None:
raise PackagingPlatformError(
"user base directory is not specified")
......@@ -383,7 +368,7 @@ class install_dist(Command):
def finalize_other(self):
"""Finalize options for non-posix platforms"""
if HAS_USER_SITE and self.user:
if self.user:
if self.install_userbase is None:
raise PackagingPlatformError(
"user base directory is not specified")
......@@ -494,10 +479,8 @@ class install_dist(Command):
attr = "install_" + name
setattr(self, attr, change_root(self.root, getattr(self, attr)))
def create_home_path(self):
"""Create directories under ~."""
if HAS_USER_SITE and not self.user:
return
def create_user_dirs(self):
"""Create directories under USERBASE as needed."""
home = convert_path(os.path.expanduser("~"))
for name, path in self.config_vars.items():
if path.startswith(home) and not os.path.isdir(path):
......
......@@ -2,14 +2,13 @@
# Forked from the former install_egg_info command by Josip Djolonga
import csv
import os
import re
import csv
import hashlib
from shutil import rmtree
from packaging.command.cmd import Command
from packaging import logger
from shutil import rmtree
from packaging.command.cmd import Command
class install_distinfo(Command):
......
......@@ -114,7 +114,7 @@ class install_lib(Command):
return outfiles
def byte_compile(self, files):
if getattr(sys, 'dont_write_bytecode'):
if sys.dont_write_bytecode:
# XXX do we want this? because a Python runs without bytecode
# doesn't mean that the *dists should not contain bytecode
#--or does it?
......
......@@ -352,5 +352,4 @@ class BCPPCompiler(CCompiler) :
try:
self.spawn(pp_args)
except PackagingExecError as msg:
print(msg)
raise CompileError(msg)
......@@ -5,7 +5,6 @@ interface for the compiler abstraction model used by packaging.
"""
import os
import sys
from shutil import move
from packaging import logger
from packaging.util import split_quoted, execute, newer_group, spawn
......
......@@ -127,7 +127,7 @@ class UnixCCompiler(CCompiler):
executables['ranlib'] = ["ranlib"]
# Needed for the filename generation methods provided by the base
# class, CCompiler. NB. whoever instantiates/uses a particular
# class, CCompiler. XXX whoever instantiates/uses a particular
# UnixCCompiler instance should set 'shared_lib_ext' -- we set a
# reasonable common default here, but it's not necessarily used on all
# Unices!
......
......@@ -537,7 +537,7 @@ Common commands: (see '--help-commands' for more)
def _get_command_groups(self):
"""Helper function to retrieve all the command class names divided
into standard commands (listed in
packaging2.command.STANDARD_COMMANDS) and extra commands (given in
packaging.command.STANDARD_COMMANDS) and extra commands (given in
self.cmdclass and not standard commands).
"""
extra_commands = [cmd for cmd in self.cmdclass
......@@ -547,7 +547,7 @@ Common commands: (see '--help-commands' for more)
def print_commands(self):
"""Print out a help message listing all available commands with a
description of each. The list is divided into standard commands
(listed in packaging2.command.STANDARD_COMMANDS) and extra commands
(listed in packaging.command.STANDARD_COMMANDS) and extra commands
(given in self.cmdclass and not standard commands). The
descriptions come from the command class attribute
'description'.
......
......@@ -18,18 +18,13 @@ class BuildExtTestCase(support.TempdirManager,
support.LoggingCatcher,
unittest.TestCase):
def setUp(self):
# Create a simple test environment
# Note that we're making changes to sys.path
super(BuildExtTestCase, self).setUp()
self.tmp_dir = self.mkdtemp()
self.old_user_base = site.USER_BASE
site.USER_BASE = self.mkdtemp()
def tearDown(self):
# Get everything back to normal
if sys.version > "2.6":
site.USER_BASE = self.old_user_base
site.USER_BASE = self.old_user_base
super(BuildExtTestCase, self).tearDown()
def test_build_ext(self):
......@@ -94,7 +89,6 @@ class BuildExtTestCase(support.TempdirManager,
# make sure we get some library dirs under solaris
self.assertGreater(len(cmd.library_dirs), 0)
@unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_user_site(self):
dist = Distribution({'name': 'xx'})
cmd = build_ext(dist)
......
......@@ -99,8 +99,6 @@ class BuildPyTestCase(support.TempdirManager,
os.chdir(cwd)
sys.stdout = old_stdout
@unittest.skipUnless(hasattr(sys, 'dont_write_bytecode'),
'sys.dont_write_bytecode not supported')
def test_dont_write_bytecode(self):
# makes sure byte_compile is not used
pkg_dir, dist = self.create_dist()
......
......@@ -72,7 +72,6 @@ class InstallTestCase(support.TempdirManager,
check_path(cmd.install_scripts, os.path.join(destination, "bin"))
check_path(cmd.install_data, destination)
@unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_user_site(self):
# test install with --user
# preparing the environment for the test
......@@ -173,12 +172,11 @@ class InstallTestCase(support.TempdirManager,
cmd.home = 'home'
self.assertRaises(PackagingOptionError, cmd.finalize_options)
if sys.version >= '2.6':
# can't combine user with with prefix/exec_prefix/home or
# install_(plat)base
cmd.prefix = None
cmd.user = 'user'
self.assertRaises(PackagingOptionError, cmd.finalize_options)
# can't combine user with with prefix/exec_prefix/home or
# install_(plat)base
cmd.prefix = None
cmd.user = 'user'
self.assertRaises(PackagingOptionError, cmd.finalize_options)
def test_old_record(self):
# test pre-PEP 376 --record option (outside dist-info dir)
......
......@@ -7,13 +7,6 @@ from packaging.command.install_lib import install_lib
from packaging.compiler.extension import Extension
from packaging.errors import PackagingOptionError
try:
no_bytecode = sys.dont_write_bytecode
bytecode_support = True
except AttributeError:
no_bytecode = False
bytecode_support = False
class InstallLibTestCase(support.TempdirManager,
support.LoggingCatcher,
......@@ -40,7 +33,7 @@ class InstallLibTestCase(support.TempdirManager,
cmd.finalize_options()
self.assertEqual(cmd.optimize, 2)
@unittest.skipIf(no_bytecode, 'byte-compile not supported')
@unittest.skipIf(sys.dont_write_bytecode, 'byte-compile not supported')
def test_byte_compile(self):
pkg_dir, dist = self.create_dist()
cmd = install_lib(dist)
......@@ -89,8 +82,6 @@ class InstallLibTestCase(support.TempdirManager,
# get_input should return 2 elements
self.assertEqual(len(cmd.get_inputs()), 2)
@unittest.skipUnless(bytecode_support,
'sys.dont_write_bytecode not supported')
def test_dont_write_bytecode(self):
# makes sure byte_compile is not used
pkg_dir, dist = self.create_dist()
......
......@@ -9,7 +9,6 @@ class Mixin2to3TestCase(support.TempdirManager,
support.LoggingCatcher,
unittest.TestCase):
@unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_convert_code_only(self):
# used to check if code gets converted properly.
code = "print 'test'"
......@@ -26,7 +25,6 @@ class Mixin2to3TestCase(support.TempdirManager,
self.assertEqual(expected, converted)
@unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_doctests_only(self):
# used to check if doctests gets converted properly.
doctest = textwrap.dedent('''\
......@@ -57,7 +55,6 @@ class Mixin2to3TestCase(support.TempdirManager,
self.assertEqual(expected, converted)
@unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_additional_fixers(self):
# used to check if use_2to3_fixers works
code = 'type(x) is not T'
......
......@@ -319,8 +319,6 @@ class UtilTestCase(support.EnvironRestorer,
res = get_compiler_versions()
self.assertEqual(res[2], None)
@unittest.skipUnless(hasattr(sys, 'dont_write_bytecode'),
'sys.dont_write_bytecode not supported')
def test_dont_write_bytecode(self):
# makes sure byte_compile raise a PackagingError
# if sys.dont_write_bytecode is True
......@@ -407,7 +405,6 @@ class UtilTestCase(support.EnvironRestorer,
finally:
sys.path.remove(tmp_dir)
@unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_run_2to3_on_code(self):
content = "print 'test'"
converted_content = "print('test')"
......@@ -422,7 +419,6 @@ class UtilTestCase(support.EnvironRestorer,
file_handle.close()
self.assertEqual(new_content, converted_content)
@unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
def test_run_2to3_on_doctests(self):
# to check if text files containing doctests only get converted.
content = ">>> print 'test'\ntest\n"
......
......@@ -326,7 +326,7 @@ def byte_compile(py_files, optimize=0, force=False, prefix=None,
"""
# nothing is done if sys.dont_write_bytecode is True
# FIXME this should not raise an error
if hasattr(sys, 'dont_write_bytecode') and sys.dont_write_bytecode:
if sys.dont_write_bytecode:
raise PackagingByteCompileError('byte-compiling is disabled.')
# First, if the caller didn't force us into direct or indirect mode,
......@@ -346,8 +346,10 @@ def byte_compile(py_files, optimize=0, force=False, prefix=None,
# run it with the appropriate flags.
if not direct:
from tempfile import mkstemp
# XXX script_fd may leak, use something better than mkstemp
# XXX use something better than mkstemp
script_fd, script_name = mkstemp(".py")
os.close(script_fd)
script_fd = None
logger.info("writing byte-compilation script '%s'", script_name)
if not dry_run:
if script_fd is not None:
......
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