mirror of
https://github.com/python/cpython.git
synced 2025-07-21 18:25:22 +00:00

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.
154 lines
4.8 KiB
Python
154 lines
4.8 KiB
Python
"""Tests for distutils.unixccompiler."""
|
|
import os
|
|
import sys
|
|
import unittest
|
|
from test.support import EnvironmentVarGuard, run_unittest
|
|
|
|
from distutils import sysconfig
|
|
from distutils.unixccompiler import UnixCCompiler
|
|
|
|
class UnixCCompilerTestCase(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self._backup_platform = sys.platform
|
|
self._backup_get_config_var = sysconfig.get_config_var
|
|
class CompilerWrapper(UnixCCompiler):
|
|
def rpath_foo(self):
|
|
return self.runtime_library_dir_option('/foo')
|
|
self.cc = CompilerWrapper()
|
|
|
|
def tearDown(self):
|
|
sys.platform = self._backup_platform
|
|
sysconfig.get_config_var = self._backup_get_config_var
|
|
|
|
def test_runtime_libdir_option(self):
|
|
|
|
# not tested under windows
|
|
if sys.platform == 'win32':
|
|
return
|
|
|
|
# Issue#5900
|
|
#
|
|
# Ensure RUNPATH is added to extension modules with RPATH if
|
|
# GNU ld is used
|
|
|
|
# darwin
|
|
sys.platform = 'darwin'
|
|
self.assertEqual(self.cc.rpath_foo(), '-L/foo')
|
|
|
|
# hp-ux
|
|
sys.platform = 'hp-ux'
|
|
old_gcv = sysconfig.get_config_var
|
|
def gcv(v):
|
|
return 'xxx'
|
|
sysconfig.get_config_var = gcv
|
|
self.assertEqual(self.cc.rpath_foo(), ['+s', '-L/foo'])
|
|
|
|
def gcv(v):
|
|
return 'gcc'
|
|
sysconfig.get_config_var = gcv
|
|
self.assertEqual(self.cc.rpath_foo(), ['-Wl,+s', '-L/foo'])
|
|
|
|
def gcv(v):
|
|
return 'g++'
|
|
sysconfig.get_config_var = gcv
|
|
self.assertEqual(self.cc.rpath_foo(), ['-Wl,+s', '-L/foo'])
|
|
|
|
sysconfig.get_config_var = old_gcv
|
|
|
|
# irix646
|
|
sys.platform = 'irix646'
|
|
self.assertEqual(self.cc.rpath_foo(), ['-rpath', '/foo'])
|
|
|
|
# osf1V5
|
|
sys.platform = 'osf1V5'
|
|
self.assertEqual(self.cc.rpath_foo(), ['-rpath', '/foo'])
|
|
|
|
# GCC GNULD
|
|
sys.platform = 'bar'
|
|
def gcv(v):
|
|
if v == 'CC':
|
|
return 'gcc'
|
|
elif v == 'GNULD':
|
|
return 'yes'
|
|
sysconfig.get_config_var = gcv
|
|
self.assertEqual(self.cc.rpath_foo(), '-Wl,--enable-new-dtags,-R/foo')
|
|
|
|
# GCC non-GNULD
|
|
sys.platform = 'bar'
|
|
def gcv(v):
|
|
if v == 'CC':
|
|
return 'gcc'
|
|
elif v == 'GNULD':
|
|
return 'no'
|
|
sysconfig.get_config_var = gcv
|
|
self.assertEqual(self.cc.rpath_foo(), '-Wl,-R/foo')
|
|
|
|
# GCC GNULD with fully qualified configuration prefix
|
|
# see #7617
|
|
sys.platform = 'bar'
|
|
def gcv(v):
|
|
if v == 'CC':
|
|
return 'x86_64-pc-linux-gnu-gcc-4.4.2'
|
|
elif v == 'GNULD':
|
|
return 'yes'
|
|
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):
|
|
if v == 'CC':
|
|
return 'cc'
|
|
elif v == 'GNULD':
|
|
return 'yes'
|
|
sysconfig.get_config_var = gcv
|
|
self.assertEqual(self.cc.rpath_foo(), '-R/foo')
|
|
|
|
# non-GCC non-GNULD
|
|
sys.platform = 'bar'
|
|
def gcv(v):
|
|
if v == 'CC':
|
|
return 'cc'
|
|
elif v == 'GNULD':
|
|
return 'no'
|
|
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)
|
|
|
|
if __name__ == "__main__":
|
|
run_unittest(test_suite())
|