mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #18080: merge from 3.3
This commit is contained in:
commit
6750282007
3 changed files with 47 additions and 4 deletions
|
@ -188,9 +188,15 @@ def customize_compiler(compiler):
|
|||
get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS',
|
||||
'CCSHARED', 'LDSHARED', 'SHLIB_SUFFIX', 'AR', 'ARFLAGS')
|
||||
|
||||
newcc = None
|
||||
if 'CC' in os.environ:
|
||||
cc = os.environ['CC']
|
||||
newcc = os.environ['CC']
|
||||
if (sys.platform == 'darwin'
|
||||
and 'LDSHARED' not in os.environ
|
||||
and ldshared.startswith(cc)):
|
||||
# On OS X, if CC is overridden, use that as the default
|
||||
# command for LDSHARED as well
|
||||
ldshared = newcc + ldshared[len(cc):]
|
||||
cc = newcc
|
||||
if 'CXX' in os.environ:
|
||||
cxx = os.environ['CXX']
|
||||
if 'LDSHARED' in os.environ:
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
"""Tests for distutils.unixccompiler."""
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
from test.support import run_unittest
|
||||
from test.support import EnvironmentVarGuard, run_unittest
|
||||
|
||||
from distutils import sysconfig
|
||||
from distutils.unixccompiler import UnixCCompiler
|
||||
|
@ -94,7 +95,6 @@ class UnixCCompilerTestCase(unittest.TestCase):
|
|||
sysconfig.get_config_var = gcv
|
||||
self.assertEqual(self.cc.rpath_foo(), '-Wl,--enable-new-dtags,-R/foo')
|
||||
|
||||
|
||||
# non-GCC GNULD
|
||||
sys.platform = 'bar'
|
||||
def gcv(v):
|
||||
|
@ -115,6 +115,38 @@ class UnixCCompilerTestCase(unittest.TestCase):
|
|||
sysconfig.get_config_var = gcv
|
||||
self.assertEqual(self.cc.rpath_foo(), '-R/foo')
|
||||
|
||||
@unittest.skipUnless(sys.platform == 'darwin', 'test only relevant for OS X')
|
||||
def test_osx_cc_overrides_ldshared(self):
|
||||
# Issue #18080:
|
||||
# ensure that setting CC env variable also changes default linker
|
||||
def gcv(v):
|
||||
if v == 'LDSHARED':
|
||||
return 'gcc-4.2 -bundle -undefined dynamic_lookup '
|
||||
return 'gcc-4.2'
|
||||
sysconfig.get_config_var = gcv
|
||||
with EnvironmentVarGuard() as env:
|
||||
env['CC'] = 'my_cc'
|
||||
del env['LDSHARED']
|
||||
sysconfig.customize_compiler(self.cc)
|
||||
self.assertEqual(self.cc.linker_so[0], 'my_cc')
|
||||
|
||||
@unittest.skipUnless(sys.platform == 'darwin', 'test only relevant for OS X')
|
||||
def test_osx_explict_ldshared(self):
|
||||
# Issue #18080:
|
||||
# ensure that setting CC env variable does not change
|
||||
# explicit LDSHARED setting for linker
|
||||
def gcv(v):
|
||||
if v == 'LDSHARED':
|
||||
return 'gcc-4.2 -bundle -undefined dynamic_lookup '
|
||||
return 'gcc-4.2'
|
||||
sysconfig.get_config_var = gcv
|
||||
with EnvironmentVarGuard() as env:
|
||||
env['CC'] = 'my_cc'
|
||||
env['LDSHARED'] = 'my_ld -bundle -dynamic'
|
||||
sysconfig.customize_compiler(self.cc)
|
||||
self.assertEqual(self.cc.linker_so[0], 'my_ld')
|
||||
|
||||
|
||||
def test_suite():
|
||||
return unittest.makeSuite(UnixCCompilerTestCase)
|
||||
|
||||
|
|
|
@ -308,6 +308,11 @@ Library
|
|||
- Issue #17032: The "global" in the "NameError: global name 'x' is not defined"
|
||||
error message has been removed. Patch by Ram Rachum.
|
||||
|
||||
- Issue #18080: When building a C extension module on OS X, if the compiler
|
||||
is overriden with the CC environment variable, use the new compiler as
|
||||
the default for linking if LDSHARED is not also overriden. This restores
|
||||
Distutils behavior introduced in 3.2.3 and inadvertently dropped in 3.3.0.
|
||||
|
||||
Tests
|
||||
-----
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue