Skip to content

Commit

Permalink
Merge pull request #2796 from pypa/distutils-02e9f65ab0
Browse files Browse the repository at this point in the history
distutils 02e9f65
  • Loading branch information
jaraco authored Sep 21, 2021
2 parents 0168ac6 + 228c2e2 commit 34ebccc
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 17 deletions.
1 change: 1 addition & 0 deletions changelog.d/2796.change.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Merge with pypa/distutils@02e9f65ab0
2 changes: 1 addition & 1 deletion setuptools/_distutils/command/build_ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ def finalize_options(self):
# For extensions under Cygwin, Python's library directory must be
# appended to library_dirs
if sys.platform[:6] == 'cygwin':
if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")):
if not sysconfig.python_build:
# building third party extensions
self.library_dirs.append(os.path.join(sys.prefix, "lib",
"python" + get_python_version(),
Expand Down
1 change: 1 addition & 0 deletions setuptools/_distutils/command/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,7 @@ def select_scheme(self, name):
"""Sets the install directories by applying the install schemes."""
# it's the caller's problem if they supply a bad name!
if (hasattr(sys, 'pypy_version_info') and
sys.version_info < (3, 8) and
not name.endswith(('_user', '_home'))):
if os.name == 'nt':
name = 'pypy_nt'
Expand Down
23 changes: 14 additions & 9 deletions setuptools/_distutils/sysconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@ def get_python_inc(plat_specific=0, prefix=None):
"""
if prefix is None:
prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX
if IS_PYPY:
return os.path.join(prefix, 'include')
elif os.name == "posix":
if os.name == "posix":
if IS_PYPY and sys.version_info < (3, 8):
return os.path.join(prefix, 'include')
if python_build:
# Assume the executable is in the build directory. The
# pyconfig.h file should be in the same directory. Since
Expand All @@ -113,7 +113,8 @@ def get_python_inc(plat_specific=0, prefix=None):
else:
incdir = os.path.join(get_config_var('srcdir'), 'Include')
return os.path.normpath(incdir)
python_dir = 'python' + get_python_version() + build_flags
implementation = 'pypy' if IS_PYPY else 'python'
python_dir = implementation + get_python_version() + build_flags
return os.path.join(prefix, "include", python_dir)
elif os.name == "nt":
if python_build:
Expand Down Expand Up @@ -142,7 +143,8 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
If 'prefix' is supplied, use it instead of sys.base_prefix or
sys.base_exec_prefix -- i.e., ignore 'plat_specific'.
"""
if IS_PYPY:

if IS_PYPY and sys.version_info < (3, 8):
# PyPy-specific schema
if prefix is None:
prefix = PREFIX
Expand All @@ -164,8 +166,9 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
else:
# Pure Python
libdir = "lib"
implementation = 'pypy' if IS_PYPY else 'python'
libpython = os.path.join(prefix, libdir,
"python" + get_python_version())
implementation + get_python_version())
if standard_lib:
return libpython
else:
Expand Down Expand Up @@ -211,10 +214,9 @@ def customize_compiler(compiler):

if 'CC' in os.environ:
newcc = os.environ['CC']
if (sys.platform == 'darwin'
and 'LDSHARED' not in os.environ
if('LDSHARED' not in os.environ
and ldshared.startswith(cc)):
# On OS X, if CC is overridden, use that as the default
# If CC is overridden, use that as the default
# command for LDSHARED as well
ldshared = newcc + ldshared[len(cc):]
cc = newcc
Expand Down Expand Up @@ -252,6 +254,9 @@ def customize_compiler(compiler):
linker_exe=cc,
archiver=archiver)

if 'RANLIB' in os.environ and compiler.executables.get('ranlib', None):
compiler.set_executables(ranlib=os.environ['RANLIB'])

compiler.shared_lib_extension = shlib_suffix


Expand Down
17 changes: 16 additions & 1 deletion setuptools/_distutils/tests/test_sysconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

from distutils import sysconfig
from distutils.ccompiler import get_default_compiler
from distutils.unixccompiler import UnixCCompiler
from distutils.tests import support
from test.support import run_unittest, swap_item

Expand Down Expand Up @@ -84,9 +85,14 @@ def customize_compiler(self):
# make sure AR gets caught
class compiler:
compiler_type = 'unix'
executables = UnixCCompiler.executables

def __init__(self):
self.exes = {}

def set_executables(self, **kw):
self.exes = kw
for k, v in kw.items():
self.exes[k] = v

sysconfig_vars = {
'AR': 'sc_ar',
Expand Down Expand Up @@ -125,6 +131,7 @@ def test_customize_compiler(self):
os.environ['ARFLAGS'] = '--env-arflags'
os.environ['CFLAGS'] = '--env-cflags'
os.environ['CPPFLAGS'] = '--env-cppflags'
os.environ['RANLIB'] = 'env_ranlib'

comp = self.customize_compiler()
self.assertEqual(comp.exes['archiver'],
Expand All @@ -145,6 +152,12 @@ def test_customize_compiler(self):
' --env-cppflags'))
self.assertEqual(comp.shared_lib_extension, 'sc_shutil_suffix')

if sys.platform == "darwin":
self.assertEqual(comp.exes['ranlib'],
'env_ranlib')
else:
self.assertTrue('ranlib' not in comp.exes)

del os.environ['AR']
del os.environ['CC']
del os.environ['CPP']
Expand All @@ -154,6 +167,7 @@ def test_customize_compiler(self):
del os.environ['ARFLAGS']
del os.environ['CFLAGS']
del os.environ['CPPFLAGS']
del os.environ['RANLIB']

comp = self.customize_compiler()
self.assertEqual(comp.exes['archiver'],
Expand All @@ -171,6 +185,7 @@ def test_customize_compiler(self):
self.assertEqual(comp.exes['linker_so'],
'sc_ldshared')
self.assertEqual(comp.shared_lib_extension, 'sc_shutil_suffix')
self.assertTrue('ranlib' not in comp.exes)

def test_parse_makefile_base(self):
self.makefile = TESTFN
Expand Down
16 changes: 12 additions & 4 deletions setuptools/_distutils/tests/test_unixccompiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,14 @@ def gcv(v):
sysconfig.get_config_var = gcv
self.assertEqual(self.cc.rpath_foo(), '-Wl,--enable-new-dtags,-R/foo')

def gcv(v):
if v == 'CC':
return 'gcc -pthread -B /bar'
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):
Expand Down Expand Up @@ -181,8 +189,8 @@ def gcv(v):
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):
@unittest.skipIf(sys.platform == 'win32', "can't test on Windows")
def test_cc_overrides_ldshared(self):
# Issue #18080:
# ensure that setting CC env variable also changes default linker
def gcv(v):
Expand All @@ -202,8 +210,8 @@ def gcvs(*args, _orig=sysconfig.get_config_vars):
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_explicit_ldshared(self):
@unittest.skipIf(sys.platform == 'win32', "can't test on Windows")
def test_explicit_ldshared(self):
# Issue #18080:
# ensure that setting CC env variable does not change
# explicit LDSHARED setting for linker
Expand Down
4 changes: 2 additions & 2 deletions setuptools/_distutils/unixccompiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* link shared library handled by 'cc -shared'
"""

import os, sys, re
import os, sys, re, shlex

from distutils import sysconfig
from distutils.dep_util import newer
Expand Down Expand Up @@ -231,7 +231,7 @@ def runtime_library_dir_option(self, dir):
# this time, there's no way to determine this information from
# the configuration data stored in the Python installation, so
# we use this hack.
compiler = os.path.basename(sysconfig.get_config_var("CC"))
compiler = os.path.basename(shlex.split(sysconfig.get_config_var("CC"))[0])
if sys.platform[:6] == "darwin":
from distutils.util import get_macosx_target_ver, split_version
macosx_target_ver = get_macosx_target_ver()
Expand Down

0 comments on commit 34ebccc

Please sign in to comment.