mirror of https://github.com/python/cpython
- 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:
parent
03b0116c78
commit
d5537d071c
|
@ -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::
|
||||
|
|
|
@ -667,10 +667,10 @@ class build_ext(Command):
|
|||
if os.name == "os2":
|
||||
ext_path[len(ext_path) - 1] = ext_path[len(ext_path) - 1][:8]
|
||||
# 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
|
||||
|
|
|
@ -170,9 +170,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:
|
||||
|
@ -211,7 +211,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():
|
||||
|
@ -466,6 +466,7 @@ def _init_nt():
|
|||
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))
|
||||
|
@ -485,6 +486,7 @@ def _init_os2():
|
|||
g['INCLUDEPY'] = get_python_inc(plat_specific=0)
|
||||
|
||||
g['SO'] = '.pyd'
|
||||
g['EXT_SUFFIX'] = '.pyd'
|
||||
g['EXE'] = ".exe"
|
||||
|
||||
global _config_vars
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -360,6 +360,7 @@ def _init_non_posix(vars):
|
|||
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,9 @@ INCLUDEPY= $(INCLUDEDIR)/python$(LDVERSION)
|
|||
CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(LDVERSION)
|
||||
|
||||
# Symbols used for using shared libraries
|
||||
SO= @SO@
|
||||
SHLIB_SUFFIX= @SHLIB_SUFFIX@
|
||||
EXT_SUFFIX= @EXT_SUFFIX@
|
||||
SO= $(SHLIB_SUFFIX)
|
||||
LDSHARED= @LDSHARED@ $(PY_LDFLAGS)
|
||||
BLDSHARED= @BLDSHARED@ $(PY_LDFLAGS)
|
||||
LDCXXSHARED= @LDCXXSHARED@
|
||||
|
@ -598,6 +600,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)"' \
|
||||
|
@ -1098,7 +1105,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) ; \
|
||||
|
|
|
@ -1073,6 +1073,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)
|
||||
|
|
|
@ -626,6 +626,7 @@ ac_includes_default="\
|
|||
ac_subst_vars='LTLIBOBJS
|
||||
SRCDIRS
|
||||
THREADHEADERS
|
||||
EXT_SUFFIX
|
||||
SOABI
|
||||
LIBC
|
||||
LIBM
|
||||
|
@ -653,7 +654,7 @@ CCSHARED
|
|||
BLDSHARED
|
||||
LDCXXSHARED
|
||||
LDSHARED
|
||||
SO
|
||||
SHLIB_SUFFIX
|
||||
LIBTOOL_CRUFT
|
||||
OTHER_LIBTOOL_OPT
|
||||
UNIVERSAL_ARCH_FLAGS
|
||||
|
@ -7701,10 +7702,24 @@ esac
|
|||
|
||||
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define SHLIB_EXT "$SO"
|
||||
_ACEOF
|
||||
# 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
|
||||
|
@ -12843,45 +12858,20 @@ 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)'
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDVERSION" >&5
|
||||
$as_echo "$LDVERSION" >&6; }
|
||||
|
||||
# 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; }
|
||||
|
||||
# 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
|
||||
|
|
59
configure.ac
59
configure.ac
|
@ -1721,14 +1721,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)
|
||||
|
||||
AC_DEFINE_UNQUOTED(SHLIB_EXT, "$SO", [Define this to be extension of shared libraries (including the dot!).])
|
||||
# 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
|
||||
|
@ -3754,41 +3770,18 @@ 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)
|
||||
|
||||
# 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)
|
||||
|
||||
# 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)
|
||||
|
|
|
@ -1003,9 +1003,6 @@
|
|||
/* Define if setpgrp() must be called as setpgrp(0, 0). */
|
||||
#undef SETPGRP_HAVE_ARG
|
||||
|
||||
/* Define this to be extension of shared libraries (including the dot!). */
|
||||
#undef SHLIB_EXT
|
||||
|
||||
/* Define if i>>j for signed int i does not extend the sign bit when i < 0 */
|
||||
#undef SIGNED_RIGHT_SHIFT_ZERO_FILLS
|
||||
|
||||
|
|
13
setup.py
13
setup.py
|
@ -163,13 +163,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
|
||||
|
@ -1835,7 +1829,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)
|
||||
|
@ -1850,7 +1845,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