diff options
author | Florent Xicluna <florent.xicluna@gmail.com> | 2010-03-11 00:05:17 (GMT) |
---|---|---|
committer | Florent Xicluna <florent.xicluna@gmail.com> | 2010-03-11 00:05:17 (GMT) |
commit | a470738b7bf68c3f9bd4063cbef5c0db66bc04a8 (patch) | |
tree | 3801b8607241aa2f3dfd0a42dad49b7a8f6a5287 /Lib | |
parent | 0f64b0b9a350d7ac34836d5cb858de4135d8b0e4 (diff) | |
download | cpython-a470738b7bf68c3f9bd4063cbef5c0db66bc04a8.zip cpython-a470738b7bf68c3f9bd4063cbef5c0db66bc04a8.tar.gz cpython-a470738b7bf68c3f9bd4063cbef5c0db66bc04a8.tar.bz2 |
Merged revisions 78828 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r78828 | florent.xicluna | 2010-03-11 00:58:42 +0100 (jeu, 11 mar 2010) | 2 lines
Issue #7880: Fix sysconfig when the python executable is a symbolic link.
........
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/sysconfig.py | 12 | ||||
-rw-r--r-- | Lib/test/test_sysconfig.py | 20 |
2 files changed, 25 insertions, 7 deletions
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py index 4554003..619e458 100644 --- a/Lib/sysconfig.py +++ b/Lib/sysconfig.py @@ -3,7 +3,7 @@ """ import sys import os -from os.path import pardir, abspath +from os.path import pardir, realpath _INSTALL_SCHEMES = { 'posix_prefix': { @@ -84,16 +84,16 @@ _PREFIX = os.path.normpath(sys.prefix) _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None _USER_BASE = None -_PROJECT_BASE = abspath(os.path.dirname(sys.executable)) +_PROJECT_BASE = os.path.dirname(realpath(sys.executable)) 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"): @@ -296,7 +296,7 @@ def _init_non_posix(vars): 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 diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py index 5b50901..aa2c514 100644 --- a/Lib/test/test_sysconfig.py +++ b/Lib/test/test_sysconfig.py @@ -8,9 +8,10 @@ import unittest import sys import test import os +import subprocess from copy import copy, deepcopy -from test.support import run_unittest, TESTFN +from test.support import run_unittest, TESTFN, unlink, get_attribute import sysconfig from sysconfig import (get_paths, get_platform, get_config_vars, @@ -237,6 +238,23 @@ class TestSysConfig(unittest.TestCase): 'posix_prefix', 'posix_user') self.assertEquals(get_scheme_names(), wanted) + def test_symlink(self): + # Issue 7880 + symlink = get_attribute(os, "symlink") + def get(python): + cmd = [python, '-c', + 'import sysconfig; print sysconfig.get_platform()'] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + return p.communicate() + real = os.path.realpath(sys.executable) + link = os.path.abspath(TESTFN) + symlink(real, link) + try: + self.assertEqual(get(real), get(link)) + finally: + unlink(link) + def test_main(): run_unittest(TestSysConfig) |