summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordoko@ubuntu.com <doko@ubuntu.com>2013-03-21 20:31:41 (GMT)
committerdoko@ubuntu.com <doko@ubuntu.com>2013-03-21 20:31:41 (GMT)
commit1621d77fc8fb2385d26c7de39f55df60426ec6ec (patch)
tree0a31742c8b8aed6453b95f92a77f50f66d5085cd
parentbd2d30cf31c61843645a96a377aa0573052c4972 (diff)
parentd5537d071cc2acada7220431a0eea5931c2e8a2d (diff)
downloadcpython-1621d77fc8fb2385d26c7de39f55df60426ec6ec.zip
cpython-1621d77fc8fb2385d26c7de39f55df60426ec6ec.tar.gz
cpython-1621d77fc8fb2385d26c7de39f55df60426ec6ec.tar.bz2
- 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.
-rw-r--r--Doc/whatsnew/3.2.rst4
-rw-r--r--Lib/distutils/command/build_ext.py6
-rw-r--r--Lib/distutils/sysconfig.py8
-rw-r--r--Lib/distutils/tests/test_build_ext.py8
-rw-r--r--Lib/distutils/tests/test_install.py2
-rw-r--r--Lib/sysconfig.py1
-rw-r--r--Makefile.pre.in11
-rw-r--r--Misc/NEWS4
-rw-r--r--Misc/python-config.in2
-rwxr-xr-xconfigure69
-rw-r--r--configure.ac60
-rw-r--r--setup.py13
12 files changed, 89 insertions, 99 deletions
diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst
index 6f0e407..5059f48 100644
--- a/Doc/whatsnew/3.2.rst
+++ b/Doc/whatsnew/3.2.rst
@@ -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::
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index b1d951e..1ad0d5f 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -677,10 +677,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
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index d125e0b..b73503d 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -191,9 +191,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:
@@ -232,7 +232,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():
@@ -487,6 +487,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))
@@ -506,6 +507,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
diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py
index 065a6a2..44a9852 100644
--- a/Lib/distutils/tests/test_build_ext.py
+++ b/Lib/distutils/tests/test_build_ext.py
@@ -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])
diff --git a/Lib/distutils/tests/test_install.py b/Lib/distutils/tests/test_install.py
index 1bd31e2..b190127 100644
--- a/Lib/distutils/tests/test_install.py
+++ b/Lib/distutils/tests/test_install.py
@@ -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,
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
index 71da1db..2f5f740 100644
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -437,6 +437,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))
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 50ddd8a..6709f4a 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -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@
@@ -652,6 +654,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)"' \
@@ -1186,7 +1193,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) ; \
diff --git a/Misc/NEWS b/Misc/NEWS
index 6378421..d03d35b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -794,6 +794,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.
diff --git a/Misc/python-config.in b/Misc/python-config.in
index bb0b008..ac3a2c7 100644
--- a/Misc/python-config.in
+++ b/Misc/python-config.in
@@ -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)
diff --git a/configure b/configure
index b881602..fa8d518 100755
--- a/configure
+++ b/configure
@@ -625,6 +625,7 @@ ac_includes_default="\
ac_subst_vars='LTLIBOBJS
SRCDIRS
THREADHEADERS
+EXT_SUFFIX
SOABI
LIBC
LIBM
@@ -652,7 +653,7 @@ CCSHARED
BLDSHARED
LDCXXSHARED
LDSHARED
-SO
+SHLIB_SUFFIX
LIBTOOL_CRUFT
OTHER_LIBTOOL_OPT
UNIVERSAL_ARCH_FLAGS
@@ -8392,6 +8393,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
@@ -13685,51 +13705,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; }
-
-
-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
diff --git a/configure.ac b/configure.ac
index b555f27..8cf0e92 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1896,13 +1896,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
@@ -3925,43 +3942,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)
-
-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)
diff --git a/setup.py b/setup.py
index 7b7e03e..d4183d4 100644
--- a/setup.py
+++ b/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
@@ -2055,7 +2049,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)
@@ -2070,7 +2065,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)