[Python-checkins] distutils2: Synchronize sysconfig.{py, cfg} with Python 3.2.

tarek.ziade python-checkins at python.org
Sun Sep 19 10:20:23 CEST 2010


tarek.ziade pushed d8ae6395397e to distutils2:
http://hg.python.org/distutils2/rev/d8ae6395397e
changeset: 665:d8ae6395397e
user: ?ric Araujo <merwok at netwok.org>
date: Mon Sep 06 06:08:37 2010 +0200
summary: Synchronize sysconfig.{py,cfg} with Python 3.2.
files: src/distutils2/_backport/sysconfig.cfg, src/distutils2/_backport/sysconfig.py, src/distutils2/_backport/tests/test_sysconfig.py, src/distutils2/command/build_ext.py, src/distutils2/command/install.py, src/distutils2/tests/test_install.py
diff --git a/src/distutils2/_backport/sysconfig.cfg b/src/distutils2/_backport/sysconfig.cfg
--- a/src/distutils2/_backport/sysconfig.cfg
+++ b/src/distutils2/_backport/sysconfig.cfg
@@ -100,3 +100,12 @@
 include = {userbase}/include/python{py_version_short}
 scripts = {userbase}/bin
 data = {userbase}
+
+[osx_framework_user]
+stdlib = {userbase}/lib/python
+platstdlib = {userbase}/lib/python
+purelib = {userbase}/lib/python/site-packages
+platlib = {userbase}/lib/python/site-packages
+include = {userbase}/include
+scripts = {userbase}/bin
+data = {userbase}
diff --git a/src/distutils2/_backport/sysconfig.py b/src/distutils2/_backport/sysconfig.py
--- a/src/distutils2/_backport/sysconfig.py
+++ b/src/distutils2/_backport/sysconfig.py
@@ -4,7 +4,7 @@
 import sys
 import os
 import re
-from os.path import pardir, abspath
+from os.path import pardir, realpath
 from ConfigParser import RawConfigParser
 
 _PREFIX = os.path.normpath(sys.prefix)
@@ -53,16 +53,21 @@
 _PY_VERSION_SHORT_NO_DOT = _PY_VERSION[0] + _PY_VERSION[2]
 _CONFIG_VARS = None
 _USER_BASE = None
-_PROJECT_BASE = abspath(os.path.dirname(sys.executable))
+if sys.executable:
+ _PROJECT_BASE = os.path.dirname(realpath(sys.executable))
+else:
+ # sys.executable can be empty if argv[0] has been changed and Python is
+ # unable to retrieve the real program name
+ _PROJECT_BASE = realpath(os.getcwd())
 
 if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower():
- _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir))
+ _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir))
 # PC/VS7.1
 if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower():
- _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir, pardir))
+ _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir, pardir))
 # PC/AMD64
 if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower():
- _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir, pardir))
+ _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir, pardir))
 
 def is_python_build():
 for fn in ("Setup.dist", "Setup.local"):
@@ -74,8 +79,8 @@
 
 if _PYTHON_BUILD:
 for scheme in ('posix_prefix', 'posix_home'):
- _SCHEMES.set(scheme, 'include', '{projectbase}/Include')
- _SCHEMES.set(scheme, 'platinclude', '{srcdir}')
+ _SCHEMES.set(scheme, 'include', '{srcdir}/Include')
+ _SCHEMES.set(scheme, 'platinclude', '{projectbase}/.')
 
 
 def _subst_vars(path, local_vars):
@@ -131,6 +136,15 @@
 else:
 return joinuser(base, "Python")
 
+ if sys.platform == "darwin":
+ framework = get_config_var("PYTHONFRAMEWORK")
+ if framework:
+ if env_base:
+ return env_base
+ else:
+ return joinuser("~", "Library", framework, "%d.%d" %
+ sys.version_info[:2])
+
 if env_base:
 return env_base
 else:
@@ -184,11 +198,19 @@
 done[n] = v
 
 # do variable interpolation here
- while notdone:
- for name in notdone.keys():
+ variables = notdone.keys()
+
+ # Variables with a 'PY_' prefix in the makefile. These need to
+ # be made available without that prefix through sysconfig.
+ # Special care is needed to ensure that variable expansion works, even
+ # if the expansion uses the name without a prefix.
+ renamed_variables = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS')
+
+ while len(variables) > 0:
+ for name in tuple(variables):
 value = notdone[name]
 m = _findvar1_rx.search(value) or _findvar2_rx.search(value)
- if m:
+ if m is not None:
 n = m.group(1)
 found = True
 if n in done:
@@ -199,23 +221,46 @@
 elif n in os.environ:
 # do it like make: fall back to environment
 item = os.environ[n]
+
+ elif n in renamed_variables:
+ if name.startswith('PY_') and name[3:] in renamed_variables:
+ item = ""
+
+ elif 'PY_' + n in notdone:
+ found = False
+
+ else:
+ item = str(done['PY_' + n])
+
 else:
 done[n] = item = ""
+
 if found:
 after = value[m.end():]
 value = value[:m.start()] + item + after
 if "$" in after:
 notdone[name] = value
 else:
- try: value = int(value)
+ try:
+ value = int(value)
 except ValueError:
 done[name] = value.strip()
 else:
 done[name] = value
- del notdone[name]
+ variables.remove(name)
+
+ if name.startswith('PY_') \
+ and name[3:] in renamed_variables:
+
+ name = name[3:]
+ if name not in done:
+ done[name] = value
+
+
 else:
 # bogus variable reference; just drop it since we can't deal
- del notdone[name]
+ variables.remove(name)
+
 # save the results in the global dictionary
 vars.update(done)
 return vars
@@ -279,7 +324,7 @@
 vars['SO'] = '.pyd'
 vars['EXE'] = '.exe'
 vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT
- vars['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable))
+ vars['BINDIR'] = os.path.dirname(realpath(sys.executable))
 
 #
 # public APIs
@@ -328,9 +373,7 @@
 
 def get_scheme_names():
 """Returns a tuple containing the schemes names."""
- schemes = _SCHEMES.sections()
- schemes.sort()
- return tuple(schemes)
+ return tuple(sorted(_SCHEMES.sections()))
 
 def get_path_names():
 """Returns a tuple containing the paths names."""
@@ -379,7 +422,6 @@
 _CONFIG_VARS['py_version_nodot'] = _PY_VERSION[0] + _PY_VERSION[2]
 _CONFIG_VARS['base'] = _PREFIX
 _CONFIG_VARS['platbase'] = _EXEC_PREFIX
- _CONFIG_VARS['userbase'] = _getuserbase()
 _CONFIG_VARS['projectbase'] = _PROJECT_BASE
 
 if os.name in ('nt', 'os2'):
@@ -387,8 +429,17 @@
 if os.name == 'posix':
 _init_posix(_CONFIG_VARS)
 
+ # Setting 'userbase' is done below the call to the
+ # init function to enable using 'get_config_var' in
+ # the init-function.
+ if sys.version >= '2.6':
+ _CONFIG_VARS['userbase'] = _getuserbase()
+
 if 'srcdir' not in _CONFIG_VARS:
 _CONFIG_VARS['srcdir'] = _PROJECT_BASE
+ else:
+ _CONFIG_VARS['srcdir'] = realpath(_CONFIG_VARS['srcdir'])
+
 
 # Convert srcdir into an absolute path if it appears necessary.
 # Normally it is relative to the build directory. However, during
@@ -608,8 +659,7 @@
 cflags = get_config_vars().get('CFLAGS')
 
 archs = re.findall('-arch\s+(\S+)', cflags)
- archs.sort()
- archs = tuple(archs)
+ archs = tuple(sorted(set(archs)))
 
 if len(archs) == 1:
 machine = archs[0]
@@ -647,3 +697,22 @@
 
 def get_python_version():
 return _PY_VERSION_SHORT
+
+def _print_dict(title, data):
+ for index, (key, value) in enumerate(sorted(data.items())):
+ if index == 0:
+ print '%s: ' % (title)
+ print '\t%s = "%s"' % (key, value)
+
+def _main():
+ """Display all information sysconfig detains."""
+ print 'Platform: "%s"' % get_platform()
+ print 'Python version: "%s"' % get_python_version()
+ print 'Current installation scheme: "%s"' % _get_default_scheme()
+ print ''
+ _print_dict('Paths', get_paths())
+ print
+ _print_dict('Variables', get_config_vars())
+
+if __name__ == '__main__':
+ _main()
diff --git a/src/distutils2/_backport/tests/test_sysconfig.py b/src/distutils2/_backport/tests/test_sysconfig.py
--- a/src/distutils2/_backport/tests/test_sysconfig.py
+++ b/src/distutils2/_backport/tests/test_sysconfig.py
@@ -1,29 +1,30 @@
-"""Tests for 'site'.
+"""Tests for sysconfig."""
 
-Tests assume the initial paths in sys.path once the interpreter has begun
-executing have not been removed.
-
-"""
+import os
 import sys
-import os
+import subprocess
 import shutil
 from copy import copy, deepcopy
 from ConfigParser import RawConfigParser
+from StringIO import StringIO
 
-from test.test_support import run_unittest, TESTFN
+from distutils2._backport import sysconfig
+from distutils2._backport.sysconfig import (
+ _expand_globals, _expand_vars, _get_default_scheme, _subst_vars,
+ get_config_var, get_config_vars, get_path, get_paths, get_platform,
+ get_scheme_names, _main, _SCHEMES)
 
-import distutils2._backport.sysconfig
-from distutils2._backport.sysconfig import (get_paths, get_platform,
- get_config_vars, _expand_globals,
- get_path, get_path_names,
- _get_default_scheme, _subst_vars, _expand_vars,
- get_scheme_names, _CONFIG_FILE)
-from distutils2.tests.support import unittest
+from distutils2.tests.support import unittest, EnvironGuard
+from test.test_support import TESTFN, unlink
+try:
+ from test.test_support import skip_unless_symlink
+except ImportError:
+ skip_unless_symlink = unittest.skip(
+ 'requires test.test_support.skip_unless_symlink')
 
-class TestSysConfig(unittest.TestCase):
+class TestSysConfig(EnvironGuard, unittest.TestCase):
 
 def setUp(self):
- """Make a copy of sys.path"""
 super(TestSysConfig, self).setUp()
 self.sys_path = sys.path[:]
 self.makefile = None
@@ -39,15 +40,14 @@
 self.name = os.name
 self.platform = sys.platform
 self.version = sys.version
+ self.maxint = sys.maxint
 self.sep = os.sep
 self.join = os.path.join
 self.isabs = os.path.isabs
 self.splitdrive = os.path.splitdrive
- self._config_vars = copy(distutils2._backport.sysconfig._CONFIG_VARS)
- self.old_environ = deepcopy(os.environ)
+ self._config_vars = copy(sysconfig._CONFIG_VARS)
 
 def tearDown(self):
- """Restore sys.path"""
 sys.path[:] = self.sys_path
 if self.makefile is not None:
 os.unlink(self.makefile)
@@ -59,19 +59,12 @@
 os.name = self.name
 sys.platform = self.platform
 sys.version = self.version
+ sys.maxint = self.maxint
 os.sep = self.sep
 os.path.join = self.join
 os.path.isabs = self.isabs
 os.path.splitdrive = self.splitdrive
- distutils2._backport.sysconfig._CONFIG_VARS = copy(self._config_vars)
- for key, value in self.old_environ.items():
- if os.environ.get(key) != value:
- os.environ[key] = value
-
- for key in os.environ.keys():
- if key not in self.old_environ:
- del os.environ[key]
-
+ sysconfig._CONFIG_VARS = copy(self._config_vars)
 super(TestSysConfig, self).tearDown()
 
 def _set_uname(self, uname):
@@ -87,6 +80,10 @@
 elif os.path.isdir(path):
 shutil.rmtree(path)
 
+ # TODO use a static list or remove the test
+ #def test_get_path_names(self):
+ # self.assertEqual(get_path_names(), sysconfig._SCHEME_KEYS)
+
 def test_nested_var_substitution(self):
 # Assert that the {curly brace token} expansion pattern will replace
 # only the inner {something} on nested expressions like {py{something}} on
@@ -101,12 +98,16 @@
 scheme = get_paths()
 default_scheme = _get_default_scheme()
 wanted = _expand_vars(default_scheme, None)
- wanted = wanted.items()
- wanted.sort()
- scheme = scheme.items()
- scheme.sort()
+ wanted = sorted(wanted.items())
+ scheme = sorted(scheme.items())
 self.assertEqual(scheme, wanted)
 
+ def test_get_path(self):
+ # xxx make real tests here
+ for scheme in _SCHEMES.sections():
+ for name, _ in _SCHEMES.items(scheme):
+ get_path(name, scheme)
+
 def test_get_config_vars(self):
 cvars = get_config_vars()
 self.assertIsInstance(cvars, dict)
@@ -140,42 +141,34 @@
 '\n[GCC 4.0.1 (Apple Computer, Inc. build 5341)]')
 sys.platform = 'darwin'
 self._set_uname(('Darwin', 'macziade', '8.11.1',
- ('Darwin Kernel Version 8.11.1: '
- 'Wed Oct 10 18:23:28 PDT 2007; '
- 'root:xnu-792.25.20~1/RELEASE_I386'), 'PowerPC'))
+ ('Darwin Kernel Version 8.11.1: '
+ 'Wed Oct 10 18:23:28 PDT 2007; '
+ 'root:xnu-792.25.20~1/RELEASE_I386'), 'PowerPC'))
 os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.3'
 
 get_config_vars()['CFLAGS'] = ('-fno-strict-aliasing -DNDEBUG -g '
 '-fwrapv -O3 -Wall -Wstrict-prototypes')
 
- maxint = sys.maxint
- try:
- sys.maxint = 2147483647
- self.assertEqual(get_platform(), 'macosx-10.3-ppc')
- sys.maxint = 9223372036854775807
- self.assertEqual(get_platform(), 'macosx-10.3-ppc64')
- finally:
- sys.maxint = maxint
+ sys.maxint = 2147483647
+ self.assertEqual(get_platform(), 'macosx-10.3-ppc')
+ sys.maxint = 9223372036854775807
+ self.assertEqual(get_platform(), 'macosx-10.3-ppc64')
 
 
 self._set_uname(('Darwin', 'macziade', '8.11.1',
- ('Darwin Kernel Version 8.11.1: '
- 'Wed Oct 10 18:23:28 PDT 2007; '
- 'root:xnu-792.25.20~1/RELEASE_I386'), 'i386'))
+ ('Darwin Kernel Version 8.11.1: '
+ 'Wed Oct 10 18:23:28 PDT 2007; '
+ 'root:xnu-792.25.20~1/RELEASE_I386'), 'i386'))
 get_config_vars()['MACOSX_DEPLOYMENT_TARGET'] = '10.3'
 os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.3'
 
 get_config_vars()['CFLAGS'] = ('-fno-strict-aliasing -DNDEBUG -g '
 '-fwrapv -O3 -Wall -Wstrict-prototypes')
 
- maxint = sys.maxint
- try:
- sys.maxint = 2147483647
- self.assertEqual(get_platform(), 'macosx-10.3-i386')
- sys.maxint = 9223372036854775807
- self.assertEqual(get_platform(), 'macosx-10.3-x86_64')
- finally:
- sys.maxint = maxint
+ sys.maxint = 2147483647
+ self.assertEqual(get_platform(), 'macosx-10.3-i386')
+ sys.maxint = 9223372036854775807
+ self.assertEqual(get_platform(), 'macosx-10.3-x86_64')
 
 # macbook with fat binaries (fat, universal or fat64)
 os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.4'
@@ -233,16 +226,62 @@
 # XXX more platforms to tests here
 
 def test_get_config_h_filename(self):
- config_h = distutils2._backport.sysconfig.get_config_h_filename()
+ config_h = sysconfig.get_config_h_filename()
 self.assertTrue(os.path.isfile(config_h), config_h)
 
 def test_get_scheme_names(self):
- wanted = ('nt', 'nt_user', 'os2', 'os2_home', 'posix_home',
- 'posix_prefix', 'posix_user')
+ wanted = ('nt', 'nt_user', 'os2', 'os2_home', 'osx_framework_user',
+ 'posix_home', 'posix_prefix', 'posix_user')
 self.assertEqual(get_scheme_names(), wanted)
 
+ @skip_unless_symlink
+ def test_symlink(self):
+ # On Windows, the EXE needs to know where pythonXY.dll is at so we have
+ # to add the directory to the path.
+ if sys.platform == 'win32':
+ os.environ['Path'] = ';'.join((
+ os.path.dirname(sys.executable), os.environ['Path']))
+
+ # Issue 7880
+ def get(python):
+ cmd = [python, '-c',
+ 'import sysconfig; print(sysconfig.get_platform())']
+ p = subprocess.Popen(cmd, stdout=subprocess.PIPE, env=os.environ)
+ return p.communicate()
+ real = os.path.realpath(sys.executable)
+ link = os.path.abspath(TESTFN)
+ os.symlink(real, link)
+ try:
+ self.assertEqual(get(real), get(link))
+ finally:
+ unlink(link)
+
+ @unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher')
+ def test_user_similar(self):
+ # Issue 8759 : make sure the posix scheme for the users
+ # is similar to the global posix_prefix one
+ base = get_config_var('base')
+ user = get_config_var('userbase')
+ for name in ('stdlib', 'platstdlib', 'purelib', 'platlib'):
+ global_path = get_path(name, 'posix_prefix')
+ user_path = get_path(name, 'posix_user')
+ self.assertEqual(user_path, global_path.replace(base, user))
+
+ def test_main(self):
+ # just making sure _main() runs and returns things in the stdout
+ self.addCleanup(setattr, sys, 'stdout', sys.stdout)
+ sys.stdout = StringIO()
+ _main()
+ self.assertGreater(len(sys.stdout.getvalue().split('\n')), 0)
+
+ @unittest.skipIf(sys.platform == 'win32', 'does not apply to Windows')
+ def test_ldshared_value(self):
+ ldflags = sysconfig.get_config_var('LDFLAGS')
+ ldshared = sysconfig.get_config_var('LDSHARED')
+
+ self.assertIn(ldflags, ldshared)
+
 def test_expand_globals(self):
-
 config = RawConfigParser()
 config.add_section('globals')
 config.set('globals', 'foo', 'ok')
@@ -262,9 +301,5 @@
 def test_suite():
 return unittest.makeSuite(TestSysConfig)
 
-def test_main():
- run_unittest(test_suite())
-
-if __name__ == "__main__":
- test_main()
-
+if __name__ == '__main__':
+ unittest.main(defaultTest='test_suite')
diff --git a/src/distutils2/command/build_ext.py b/src/distutils2/command/build_ext.py
--- a/src/distutils2/command/build_ext.py
+++ b/src/distutils2/command/build_ext.py
@@ -11,7 +11,8 @@
 
 from distutils2.util import get_platform
 from distutils2.core import Command
-from distutils2.errors import *
+from distutils2.errors import (CCompilerError, CompileError, DistutilsError,
+ DistutilsPlatformError, DistutilsSetupError)
 from distutils2.compiler.ccompiler import customize_compiler
 from distutils2.util import newer_group
 from distutils2.extension import Extension
@@ -173,7 +174,8 @@
 self.swig = None
 self.swig_cpp = None
 self.swig_opts = None
- self.user = None
+ if HAS_USER_SITE:
+ self.user = None
 
 def finalize_options(self):
 self.set_undefined_options('build',
@@ -323,7 +325,7 @@
 self.swig_opts = self.swig_opts.split(' ')
 
 # Finally add the user include and library directories if requested
- if self.user:
+ if HAS_USER_SITE and self.user:
 user_include = os.path.join(USER_BASE, "include")
 user_lib = os.path.join(USER_BASE, "lib")
 if os.path.isdir(user_include):
diff --git a/src/distutils2/command/install.py b/src/distutils2/command/install.py
--- a/src/distutils2/command/install.py
+++ b/src/distutils2/command/install.py
@@ -18,6 +18,13 @@
 from distutils2.util import convert_path, change_root, get_platform
 from distutils2.errors import DistutilsOptionError
 
+# compatibility with 2.4 and 2.5
+if sys.version < '2.6':
+ HAS_USER_SITE = False
+else:
+ HAS_USER_SITE = True
+
+
 class install(Command):
 
 description = "install everything from build directory"
@@ -98,10 +105,10 @@
 boolean_options = ['compile', 'force', 'skip-build', 'no-distinfo',
 'requested', 'no-record']
 
- if sys.version >= '2.6':
+ if HAS_USER_SITE:
 user_options.append(
 ('user', None,
- "install in user site-package [%s]" %
+ "install in user site-packages directory [%s]" %
 get_path('purelib', '%s_user' % os.name)))
 
 boolean_options.append('user')
@@ -114,9 +121,8 @@
 self.prefix = None
 self.exec_prefix = None
 self.home = None
- # This attribute is used all over the place, so it's best to
- # define it even in < 2.6
- self.user = 0
+ if HAS_USER_SITE:
+ self.user = 0
 
 # These select only the installation base; it's up to the user to
 # specify the installation scheme (currently, that means supplying
@@ -135,8 +141,9 @@
 self.install_lib = None # set to either purelib or platlib
 self.install_scripts = None
 self.install_data = None
- self.install_userbase = get_config_var('userbase')
- self.install_usersite = get_path('purelib', '%s_user' % os.name)
+ if HAS_USER_SITE:
+ self.install_userbase = get_config_var('userbase')
+ self.install_usersite = get_path('purelib', '%s_user' % os.name)
 
 self.compile = None
 self.optimize = None
@@ -216,8 +223,9 @@
 raise DistutilsOptionError(
 "must supply either home or prefix/exec-prefix -- not both")
 
- if self.user and (self.prefix or self.exec_prefix or self.home or
- self.install_base or self.install_platbase):
+ 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):
 raise DistutilsOptionError(
 "can't combine user with prefix/exec_prefix/home or "
 "install_base/install_platbase")
@@ -251,8 +259,8 @@
 # about needing recursive variable expansion (shudder).
 
 py_version = sys.version.split()[0]
- prefix, exec_prefix, srcdir = get_config_vars('prefix', 'exec_prefix',
- 'srcdir')
+ prefix, exec_prefix, srcdir, projectbase = get_config_vars(
+ 'prefix', 'exec_prefix', 'srcdir', 'projectbase')
 
 metadata = self.distribution.metadata
 self.config_vars = {
@@ -267,10 +275,13 @@
 'sys_exec_prefix': exec_prefix,
 'exec_prefix': exec_prefix,
 'srcdir': srcdir,
+ 'projectbase': projectbase,
 }
 
- self.config_vars['userbase'] = self.install_userbase
- self.config_vars['usersite'] = self.install_usersite
+ if HAS_USER_SITE:
+ self.config_vars['userbase'] = self.install_userbase
+ self.config_vars['usersite'] = self.install_usersite
+
 self.expand_basedirs()
 
 self.dump_dirs("post-expand_basedirs()")
@@ -287,7 +298,7 @@
 self.dump_dirs("post-expand_dirs()")
 
 # Create directories in the home dir:
- if self.user:
+ if HAS_USER_SITE and self.user:
 self.create_home_path()
 
 # Pick the actual directory to install all modules to: either
@@ -303,8 +314,9 @@
 # Convert directories from Unix /-separated syntax to the local
 # convention.
 self.convert_paths('lib', 'purelib', 'platlib',
- 'scripts', 'data', 'headers',
- 'userbase', 'usersite')
+ 'scripts', 'data', 'headers')
+ if HAS_USER_SITE:
+ self.convert_paths('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
@@ -345,7 +357,7 @@
 "installation scheme is incomplete")
 return
 
- if self.user:
+ if HAS_USER_SITE and self.user:
 if self.install_userbase is None:
 raise DistutilsPlatformError(
 "user base directory is not specified")
@@ -373,7 +385,7 @@
 
 def finalize_other(self):
 """Finalize options for non-posix platforms"""
- if self.user:
+ if HAS_USER_SITE and self.user:
 if self.install_userbase is None:
 raise DistutilsPlatformError(
 "user base directory is not specified")
@@ -486,7 +498,7 @@
 
 def create_home_path(self):
 """Create directories under ~."""
- if not self.user:
+ if HAS_USER_SITE and not self.user:
 return
 home = convert_path(os.path.expanduser("~"))
 for name, path in self.config_vars.iteritems():
diff --git a/src/distutils2/tests/test_install.py b/src/distutils2/tests/test_install.py
--- a/src/distutils2/tests/test_install.py
+++ b/src/distutils2/tests/test_install.py
@@ -1,11 +1,8 @@
 """Tests for distutils.command.install."""
 
 import os
-import os.path
 import sys
-import site
 
-from distutils2._backport import sysconfig
 from distutils2._backport.sysconfig import (get_scheme_names,
 get_config_vars,
 _SCHEMES,
@@ -174,11 +171,12 @@
 cmd.home = 'home'
 self.assertRaises(DistutilsOptionError, 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(DistutilsOptionError, 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(DistutilsOptionError, cmd.finalize_options)
 
 def test_record(self):
 
--
Repository URL: http://hg.python.org/distutils2


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /