diff options
author | doko@ubuntu.com <doko@ubuntu.com> | 2013-03-21 20:31:41 (GMT) |
---|---|---|
committer | doko@ubuntu.com <doko@ubuntu.com> | 2013-03-21 20:31:41 (GMT) |
commit | 1621d77fc8fb2385d26c7de39f55df60426ec6ec (patch) | |
tree | 0a31742c8b8aed6453b95f92a77f50f66d5085cd | |
parent | bd2d30cf31c61843645a96a377aa0573052c4972 (diff) | |
parent | d5537d071cc2acada7220431a0eea5931c2e8a2d (diff) | |
download | cpython-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.rst | 4 | ||||
-rw-r--r-- | Lib/distutils/command/build_ext.py | 6 | ||||
-rw-r--r-- | Lib/distutils/sysconfig.py | 8 | ||||
-rw-r--r-- | Lib/distutils/tests/test_build_ext.py | 8 | ||||
-rw-r--r-- | Lib/distutils/tests/test_install.py | 2 | ||||
-rw-r--r-- | Lib/sysconfig.py | 1 | ||||
-rw-r--r-- | Makefile.pre.in | 11 | ||||
-rw-r--r-- | Misc/NEWS | 4 | ||||
-rw-r--r-- | Misc/python-config.in | 2 | ||||
-rwxr-xr-x | configure | 69 | ||||
-rw-r--r-- | configure.ac | 60 | ||||
-rw-r--r-- | setup.py | 13 |
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) ; \ @@ -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) @@ -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) @@ -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) |