Branch merge

This commit is contained in:
Éric Araujo 2011-09-18 20:24:27 +02:00
commit cc95dd81f3
16 changed files with 48 additions and 97 deletions

View File

@ -3,6 +3,7 @@
import os
import re
import sys
import site
import logging
import sysconfig
@ -15,9 +16,6 @@
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 @@ def initialize_options(self):
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 @@ def finalize_options(self):
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):

View File

@ -388,7 +388,7 @@ def build_packages(self):
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

View File

@ -14,9 +14,6 @@
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 @@ def initialize_options(self):
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 @@ def initialize_options(self):
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 @@ def finalize_options(self):
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 @@ def finalize_options(self):
'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 @@ def finalize_options(self):
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 @@ def finalize_options(self):
# 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 @@ def finalize_unix(self):
"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 @@ def finalize_unix(self):
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 @@ def change_roots(self, *names):
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):

View File

@ -2,15 +2,14 @@
# Forked from the former install_egg_info command by Josip Djolonga
import csv
import os
import re
import csv
import hashlib
from packaging.command.cmd import Command
from packaging import logger
from shutil import rmtree
from packaging import logger
from packaging.command.cmd import Command
class install_distinfo(Command):

View File

@ -114,7 +114,7 @@ def install(self):
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?

View File

@ -352,5 +352,4 @@ def preprocess(self, source, output_file=None, macros=None,
try:
self.spawn(pp_args)
except PackagingExecError as msg:
print(msg)
raise CompileError(msg)

View File

@ -5,7 +5,6 @@
"""
import os
import sys
from shutil import move
from packaging import logger
from packaging.util import split_quoted, execute, newer_group, spawn

View File

@ -537,7 +537,7 @@ def print_command_list(self, commands, header, max_length):
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 @@ def _get_command_groups(self):
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'.

View File

@ -19,18 +19,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 @@ def test_solaris_enable_shared(self):
# 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)

View File

@ -99,8 +99,6 @@ def test_empty_package_dir(self):
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()

View File

@ -72,7 +72,6 @@ def check_path(got, expected):
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 @@ def test_finalize_options(self):
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)

View File

@ -7,13 +7,6 @@
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 @@ def test_finalize_options(self):
cmd.finalize_options()
self.assertEqual(cmd.optimize, 2)
@unittest.skipIf(no_bytecode, 'byte-compile disabled')
@unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled')
def test_byte_compile(self):
pkg_dir, dist = self.create_dist()
cmd = install_lib(dist)
@ -89,8 +82,6 @@ def test_get_inputs(self):
# 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()

View File

@ -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 @@ def test_convert_code_only(self):
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 @@ def test_doctests_only(self):
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'

View File

@ -319,8 +319,6 @@ def test_get_compiler_versions(self):
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 @@ def test_import_nested_first_time(self):
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')"
@ -421,7 +418,6 @@ def test_run_2to3_on_code(self):
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"

View File

@ -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:

View File

@ -307,9 +307,9 @@ def _get_delegate(self):
def get_filename(self, fullname=None):
fullname = self._fix_name(fullname)
mod_type = self.etc[2]
if self.etc[2]==imp.PKG_DIRECTORY:
if mod_type==imp.PKG_DIRECTORY:
return self._get_delegate().get_filename()
elif self.etc[2] in (imp.PY_SOURCE, imp.PY_COMPILED, imp.C_EXTENSION):
elif mod_type in (imp.PY_SOURCE, imp.PY_COMPILED, imp.C_EXTENSION):
return self.filename
return None