mirror of
https://github.com/python/cpython.git
synced 2024-11-24 02:15:30 +08:00
- Issue #16754: Fix the incorrect shared library extension on linux. Introduce
two makefile macros SHLIB_SUFFIX and EXT_SUFFIX. SO now has the value of SHLIB_SUFFIX again (as in 2.x and 3.1). The SO macro is removed in 3.4.
This commit is contained in:
commit
6d3d0fe0b2
@ -368,9 +368,9 @@ In Python itself, the tags are accessible from functions in the :mod:`sysconfig`
|
||||
module::
|
||||
|
||||
>>> import sysconfig
|
||||
>>> sysconfig.get_config_var('SOABI') # find the version tag
|
||||
>>> sysconfig.get_config_var('SOABI') # find the version tag
|
||||
'cpython-32mu'
|
||||
>>> sysconfig.get_config_var('SO') # find the full filename extension
|
||||
>>> sysconfig.get_config_var('EXT_SUFFIX') # find the full filename extension
|
||||
'.cpython-32mu.so'
|
||||
|
||||
.. seealso::
|
||||
|
@ -666,10 +666,10 @@ class build_ext(Command):
|
||||
from distutils.sysconfig import get_config_var
|
||||
ext_path = ext_name.split('.')
|
||||
# extensions in debug_mode are named 'module_d.pyd' under windows
|
||||
so_ext = get_config_var('SO')
|
||||
ext_suffix = get_config_var('EXT_SUFFIX')
|
||||
if os.name == 'nt' and self.debug:
|
||||
return os.path.join(*ext_path) + '_d' + so_ext
|
||||
return os.path.join(*ext_path) + so_ext
|
||||
return os.path.join(*ext_path) + '_d' + ext_suffix
|
||||
return os.path.join(*ext_path) + ext_suffix
|
||||
|
||||
def get_export_symbols(self, ext):
|
||||
"""Return the list of symbols that a shared extension has to
|
||||
|
@ -184,9 +184,9 @@ def customize_compiler(compiler):
|
||||
_osx_support.customize_compiler(_config_vars)
|
||||
_config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True'
|
||||
|
||||
(cc, cxx, opt, cflags, ccshared, ldshared, so_ext, ar, ar_flags) = \
|
||||
(cc, cxx, opt, cflags, ccshared, ldshared, shlib_suffix, ar, ar_flags) = \
|
||||
get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS',
|
||||
'CCSHARED', 'LDSHARED', 'SO', 'AR', 'ARFLAGS')
|
||||
'CCSHARED', 'LDSHARED', 'SHLIB_SUFFIX', 'AR', 'ARFLAGS')
|
||||
|
||||
newcc = None
|
||||
if 'CC' in os.environ:
|
||||
@ -225,7 +225,7 @@ def customize_compiler(compiler):
|
||||
linker_exe=cc,
|
||||
archiver=archiver)
|
||||
|
||||
compiler.shared_lib_extension = so_ext
|
||||
compiler.shared_lib_extension = shlib_suffix
|
||||
|
||||
|
||||
def get_config_h_filename():
|
||||
@ -479,7 +479,7 @@ def _init_nt():
|
||||
# XXX hmmm.. a normal install puts include files here
|
||||
g['INCLUDEPY'] = get_python_inc(plat_specific=0)
|
||||
|
||||
g['SO'] = '.pyd'
|
||||
g['EXT_SUFFIX'] = '.pyd'
|
||||
g['EXE'] = ".exe"
|
||||
g['VERSION'] = get_python_version().replace(".", "")
|
||||
g['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable))
|
||||
|
@ -318,8 +318,8 @@ class BuildExtTestCase(TempdirManager,
|
||||
finally:
|
||||
os.chdir(old_wd)
|
||||
self.assertTrue(os.path.exists(so_file))
|
||||
so_ext = sysconfig.get_config_var('SO')
|
||||
self.assertTrue(so_file.endswith(so_ext))
|
||||
ext_suffix = sysconfig.get_config_var('EXT_SUFFIX')
|
||||
self.assertTrue(so_file.endswith(ext_suffix))
|
||||
so_dir = os.path.dirname(so_file)
|
||||
self.assertEqual(so_dir, other_tmp_dir)
|
||||
|
||||
@ -328,7 +328,7 @@ class BuildExtTestCase(TempdirManager,
|
||||
cmd.run()
|
||||
so_file = cmd.get_outputs()[0]
|
||||
self.assertTrue(os.path.exists(so_file))
|
||||
self.assertTrue(so_file.endswith(so_ext))
|
||||
self.assertTrue(so_file.endswith(ext_suffix))
|
||||
so_dir = os.path.dirname(so_file)
|
||||
self.assertEqual(so_dir, cmd.build_lib)
|
||||
|
||||
@ -355,7 +355,7 @@ class BuildExtTestCase(TempdirManager,
|
||||
self.assertEqual(lastdir, 'bar')
|
||||
|
||||
def test_ext_fullpath(self):
|
||||
ext = sysconfig.get_config_vars()['SO']
|
||||
ext = sysconfig.get_config_var('EXT_SUFFIX')
|
||||
# building lxml.etree inplace
|
||||
#etree_c = os.path.join(self.tmp_dir, 'lxml.etree.c')
|
||||
#etree_ext = Extension('lxml.etree', [etree_c])
|
||||
|
@ -23,7 +23,7 @@ from distutils.tests import support
|
||||
def _make_ext_name(modname):
|
||||
if os.name == 'nt' and sys.executable.endswith('_d.exe'):
|
||||
modname += '_d'
|
||||
return modname + sysconfig.get_config_var('SO')
|
||||
return modname + sysconfig.get_config_var('EXT_SUFFIX')
|
||||
|
||||
|
||||
class InstallTestCase(support.TempdirManager,
|
||||
|
@ -416,7 +416,7 @@ def _init_non_posix(vars):
|
||||
vars['LIBDEST'] = get_path('stdlib')
|
||||
vars['BINLIBDEST'] = get_path('platstdlib')
|
||||
vars['INCLUDEPY'] = get_path('include')
|
||||
vars['SO'] = '.pyd'
|
||||
vars['EXT_SUFFIX'] = '.pyd'
|
||||
vars['EXE'] = '.exe'
|
||||
vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT
|
||||
vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable))
|
||||
|
@ -125,7 +125,8 @@ INCLUDEPY= $(INCLUDEDIR)/python$(LDVERSION)
|
||||
CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(LDVERSION)
|
||||
|
||||
# Symbols used for using shared libraries
|
||||
SO= @SO@
|
||||
SHLIB_SUFFIX= @SHLIB_SUFFIX@
|
||||
EXT_SUFFIX= @EXT_SUFFIX@
|
||||
LDSHARED= @LDSHARED@ $(PY_LDFLAGS)
|
||||
BLDSHARED= @BLDSHARED@ $(PY_LDFLAGS)
|
||||
LDCXXSHARED= @LDCXXSHARED@
|
||||
@ -652,6 +653,11 @@ Python/dynload_shlib.o: $(srcdir)/Python/dynload_shlib.c Makefile
|
||||
-DSOABI='"$(SOABI)"' \
|
||||
-o $@ $(srcdir)/Python/dynload_shlib.c
|
||||
|
||||
Python/dynload_hpux.o: $(srcdir)/Python/dynload_hpux.c Makefile
|
||||
$(CC) -c $(PY_CORE_CFLAGS) \
|
||||
-DSHLIB_EXT='"$(EXT_SUFFIX)"' \
|
||||
-o $@ $(srcdir)/Python/dynload_hpux.c
|
||||
|
||||
Python/sysmodule.o: $(srcdir)/Python/sysmodule.c Makefile
|
||||
$(CC) -c $(PY_CORE_CFLAGS) \
|
||||
-DABIFLAGS='"$(ABIFLAGS)"' \
|
||||
@ -1188,7 +1194,7 @@ libainstall: all python-config
|
||||
done
|
||||
@if test -d $(LIBRARY); then :; else \
|
||||
if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \
|
||||
if test "$(SO)" = .dll; then \
|
||||
if test "$(SHLIB_SUFFIX)" = .dll; then \
|
||||
$(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \
|
||||
else \
|
||||
$(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
|
||||
|
@ -1121,6 +1121,10 @@ Tests
|
||||
Build
|
||||
-----
|
||||
|
||||
- Issue #16754: Fix the incorrect shared library extension on linux. Introduce
|
||||
two makefile macros SHLIB_SUFFIX and EXT_SUFFIX. SO now has the value of
|
||||
SHLIB_SUFFIX again (as in 2.x and 3.1). The SO macro is removed in 3.4.
|
||||
|
||||
- Issue #5033: Fix building of the sqlite3 extension module when the
|
||||
SQLite library version has "beta" in it. Patch by Andreas Pelme.
|
||||
|
||||
|
@ -57,7 +57,7 @@ for opt in opt_flags:
|
||||
print(' '.join(libs))
|
||||
|
||||
elif opt == '--extension-suffix':
|
||||
print(sysconfig.get_config_var('SO'))
|
||||
print(sysconfig.get_config_var('EXT_SUFFIX'))
|
||||
|
||||
elif opt == '--abiflags':
|
||||
print(sys.abiflags)
|
||||
|
69
configure
vendored
69
configure
vendored
@ -627,6 +627,7 @@ SRCDIRS
|
||||
THREADHEADERS
|
||||
LIBPL
|
||||
PY_ENABLE_SHARED
|
||||
EXT_SUFFIX
|
||||
SOABI
|
||||
LIBC
|
||||
LIBM
|
||||
@ -654,7 +655,7 @@ CCSHARED
|
||||
BLDSHARED
|
||||
LDCXXSHARED
|
||||
LDSHARED
|
||||
SO
|
||||
SHLIB_SUFFIX
|
||||
LIBTOOL_CRUFT
|
||||
OTHER_LIBTOOL_OPT
|
||||
UNIVERSAL_ARCH_FLAGS
|
||||
@ -8396,6 +8397,25 @@ esac
|
||||
|
||||
|
||||
|
||||
# SHLIB_SUFFIX is the extension of shared libraries `(including the dot!)
|
||||
# -- usually .so, .sl on HP-UX, .dll on Cygwin
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the extension of shared libraries" >&5
|
||||
$as_echo_n "checking the extension of shared libraries... " >&6; }
|
||||
if test -z "$SHLIB_SUFFIX"; then
|
||||
case $ac_sys_system in
|
||||
hp*|HP*)
|
||||
case `uname -m` in
|
||||
ia64) SHLIB_SUFFIX=.so;;
|
||||
*) SHLIB_SUFFIX=.sl;;
|
||||
esac
|
||||
;;
|
||||
CYGWIN*) SHLIB_SUFFIX=.dll;;
|
||||
*) SHLIB_SUFFIX=.so;;
|
||||
esac
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHLIB_SUFFIX" >&5
|
||||
$as_echo "$SHLIB_SUFFIX" >&6; }
|
||||
|
||||
# LDSHARED is the ld *command* used to create shared library
|
||||
# -- "cc -G" on SunOS 5.x, "ld -shared" on IRIX 5
|
||||
# (Shared libraries in this instance are shared modules to be loaded into
|
||||
@ -13689,6 +13709,14 @@ SOABI='cpython-'`echo $VERSION | tr -d .`${ABIFLAGS}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SOABI" >&5
|
||||
$as_echo "$SOABI" >&6; }
|
||||
|
||||
|
||||
case $ac_sys_system in
|
||||
Linux*|GNU*)
|
||||
EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX};;
|
||||
*)
|
||||
EXT_SUFFIX=${SHLIB_SUFFIX};;
|
||||
esac
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking LDVERSION" >&5
|
||||
$as_echo_n "checking LDVERSION... " >&6; }
|
||||
LDVERSION='$(VERSION)$(ABIFLAGS)'
|
||||
@ -13699,45 +13727,6 @@ $as_echo "$LDVERSION" >&6; }
|
||||
LIBPL="${prefix}/lib/python${VERSION}/config-${LDVERSION}"
|
||||
|
||||
|
||||
# SO is the extension of shared libraries `(including the dot!)
|
||||
# -- usually .so, .sl on HP-UX, .dll on Cygwin
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking SO" >&5
|
||||
$as_echo_n "checking SO... " >&6; }
|
||||
if test -z "$SO"
|
||||
then
|
||||
case $ac_sys_system in
|
||||
hp*|HP*)
|
||||
case `uname -m` in
|
||||
ia64) SO=.so;;
|
||||
*) SO=.sl;;
|
||||
esac
|
||||
;;
|
||||
CYGWIN*) SO=.dll;;
|
||||
Linux*|GNU*)
|
||||
SO=.${SOABI}.so;;
|
||||
*) SO=.so;;
|
||||
esac
|
||||
else
|
||||
# this might also be a termcap variable, see #610332
|
||||
echo
|
||||
echo '====================================================================='
|
||||
echo '+ +'
|
||||
echo '+ WARNING: You have set SO in your environment. +'
|
||||
echo '+ Do you really mean to change the extension for shared libraries? +'
|
||||
echo '+ Continuing in 10 seconds to let you to ponder. +'
|
||||
echo '+ +'
|
||||
echo '====================================================================='
|
||||
sleep 10
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SO" >&5
|
||||
$as_echo "$SO" >&6; }
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define SHLIB_EXT "$SO"
|
||||
_ACEOF
|
||||
|
||||
|
||||
# Check whether right shifting a negative integer extends the sign bit
|
||||
# or fills with zeros (like the Cray J90, according to Tim Peters).
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether right shift extends the sign bit" >&5
|
||||
|
60
configure.ac
60
configure.ac
@ -1898,13 +1898,30 @@ case $ac_sys_system/$ac_sys_release in
|
||||
esac
|
||||
|
||||
# Set info about shared libraries.
|
||||
AC_SUBST(SO)
|
||||
AC_SUBST(SHLIB_SUFFIX)
|
||||
AC_SUBST(LDSHARED)
|
||||
AC_SUBST(LDCXXSHARED)
|
||||
AC_SUBST(BLDSHARED)
|
||||
AC_SUBST(CCSHARED)
|
||||
AC_SUBST(LINKFORSHARED)
|
||||
|
||||
# SHLIB_SUFFIX is the extension of shared libraries `(including the dot!)
|
||||
# -- usually .so, .sl on HP-UX, .dll on Cygwin
|
||||
AC_MSG_CHECKING(the extension of shared libraries)
|
||||
if test -z "$SHLIB_SUFFIX"; then
|
||||
case $ac_sys_system in
|
||||
hp*|HP*)
|
||||
case `uname -m` in
|
||||
ia64) SHLIB_SUFFIX=.so;;
|
||||
*) SHLIB_SUFFIX=.sl;;
|
||||
esac
|
||||
;;
|
||||
CYGWIN*) SHLIB_SUFFIX=.dll;;
|
||||
*) SHLIB_SUFFIX=.so;;
|
||||
esac
|
||||
fi
|
||||
AC_MSG_RESULT($SHLIB_SUFFIX)
|
||||
|
||||
# LDSHARED is the ld *command* used to create shared library
|
||||
# -- "cc -G" on SunOS 5.x, "ld -shared" on IRIX 5
|
||||
# (Shared libraries in this instance are shared modules to be loaded into
|
||||
@ -3927,6 +3944,14 @@ AC_MSG_CHECKING(SOABI)
|
||||
SOABI='cpython-'`echo $VERSION | tr -d .`${ABIFLAGS}
|
||||
AC_MSG_RESULT($SOABI)
|
||||
|
||||
AC_SUBST(EXT_SUFFIX)
|
||||
case $ac_sys_system in
|
||||
Linux*|GNU*)
|
||||
EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX};;
|
||||
*)
|
||||
EXT_SUFFIX=${SHLIB_SUFFIX};;
|
||||
esac
|
||||
|
||||
AC_MSG_CHECKING(LDVERSION)
|
||||
LDVERSION='$(VERSION)$(ABIFLAGS)'
|
||||
AC_MSG_RESULT($LDVERSION)
|
||||
@ -3936,39 +3961,6 @@ AC_SUBST(PY_ENABLE_SHARED)
|
||||
LIBPL="${prefix}/lib/python${VERSION}/config-${LDVERSION}"
|
||||
AC_SUBST(LIBPL)
|
||||
|
||||
# SO is the extension of shared libraries `(including the dot!)
|
||||
# -- usually .so, .sl on HP-UX, .dll on Cygwin
|
||||
AC_MSG_CHECKING(SO)
|
||||
if test -z "$SO"
|
||||
then
|
||||
case $ac_sys_system in
|
||||
hp*|HP*)
|
||||
case `uname -m` in
|
||||
ia64) SO=.so;;
|
||||
*) SO=.sl;;
|
||||
esac
|
||||
;;
|
||||
CYGWIN*) SO=.dll;;
|
||||
Linux*|GNU*)
|
||||
SO=.${SOABI}.so;;
|
||||
*) SO=.so;;
|
||||
esac
|
||||
else
|
||||
# this might also be a termcap variable, see #610332
|
||||
echo
|
||||
echo '====================================================================='
|
||||
echo '+ +'
|
||||
echo '+ WARNING: You have set SO in your environment. +'
|
||||
echo '+ Do you really mean to change the extension for shared libraries? +'
|
||||
echo '+ Continuing in 10 seconds to let you to ponder. +'
|
||||
echo '+ +'
|
||||
echo '====================================================================='
|
||||
sleep 10
|
||||
fi
|
||||
AC_MSG_RESULT($SO)
|
||||
|
||||
AC_DEFINE_UNQUOTED(SHLIB_EXT, "$SO", [Define this to be extension of shared libraries (including the dot!).])
|
||||
|
||||
# Check whether right shifting a negative integer extends the sign bit
|
||||
# or fills with zeros (like the Cray J90, according to Tim Peters).
|
||||
AC_MSG_CHECKING(whether right shift extends the sign bit)
|
||||
|
13
setup.py
13
setup.py
@ -169,13 +169,7 @@ class PyBuildExt(build_ext):
|
||||
def build_extensions(self):
|
||||
|
||||
# Detect which modules should be compiled
|
||||
old_so = self.compiler.shared_lib_extension
|
||||
# Workaround PEP 3149 stuff
|
||||
self.compiler.shared_lib_extension = os.environ.get("SO", ".so")
|
||||
try:
|
||||
missing = self.detect_modules()
|
||||
finally:
|
||||
self.compiler.shared_lib_extension = old_so
|
||||
missing = self.detect_modules()
|
||||
|
||||
# Remove modules that are present on the disabled list
|
||||
extensions = [ext for ext in self.extensions
|
||||
@ -2066,7 +2060,8 @@ class PyBuildInstallLib(install_lib):
|
||||
# mode 644 unless they are a shared library in which case they will get
|
||||
# mode 755. All installed directories will get mode 755.
|
||||
|
||||
so_ext = sysconfig.get_config_var("SO")
|
||||
# this is works for EXT_SUFFIX too, which ends with SHLIB_SUFFIX
|
||||
shlib_suffix = sysconfig.get_config_var("SHLIB_SUFFIX")
|
||||
|
||||
def install(self):
|
||||
outfiles = install_lib.install(self)
|
||||
@ -2081,7 +2076,7 @@ class PyBuildInstallLib(install_lib):
|
||||
for filename in files:
|
||||
if os.path.islink(filename): continue
|
||||
mode = defaultMode
|
||||
if filename.endswith(self.so_ext): mode = sharedLibMode
|
||||
if filename.endswith(self.shlib_suffix): mode = sharedLibMode
|
||||
log.info("changing mode of %s to %o", filename, mode)
|
||||
if not self.dry_run: os.chmod(filename, mode)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user