]> granicus.if.org Git - python/commitdiff
- Issue #16754: Fix the incorrect shared library extension on linux. Introduce
authordoko@ubuntu.com <doko@ubuntu.com>
Thu, 21 Mar 2013 20:21:49 +0000 (13:21 -0700)
committerdoko@ubuntu.com <doko@ubuntu.com>
Thu, 21 Mar 2013 20:21:49 +0000 (13:21 -0700)
  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.

13 files changed:
Doc/whatsnew/3.2.rst
Lib/distutils/command/build_ext.py
Lib/distutils/sysconfig.py
Lib/distutils/tests/test_build_ext.py
Lib/distutils/tests/test_install.py
Lib/sysconfig.py
Makefile.pre.in
Misc/NEWS
Misc/python-config.in
configure
configure.ac
pyconfig.h.in
setup.py

index 09640f6d6f3896d42adac53cf17b00c249d7f628..47d477f8c01be39a3086c7e6896c5ec796c0016a 100644 (file)
@@ -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::
index 34b61bdb828f3fb8457090dffb99a2119b2ceede..64f634caedfd9f61fdbf942c040fdd069db1aadb 100644 (file)
@@ -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
index b6007a904f8e29cd70e73566d17b077ff26b0c8c..dec37f8be1dda6263716fa6d0989025e57b6d532 100644 (file)
@@ -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
index 065a6a21c992be7259c94101815881ff33e8efcd..44a9852f4cdb9875c5d9bad639853fb4dc55431d 100644 (file)
@@ -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])
index 1bd31e24698cd3955dbf7d71154c38ab2423ac47..b1901273e9f0a4eb30c76314ced3ff79533344db 100644 (file)
@@ -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,
index 253e2efae615469a970a03bba23c1e6745ad4248..5b3a994af9dd7b855dbaa776773a80cbe39cd469 100644 (file)
@@ -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))
index 1f3e8401ccc27bf7dc2e2ef1627c982e75b05141..e4d50901720d0bb18aaec4c29e2144b53348d951 100644 (file)
@@ -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) ; \
index 20ffcc9bd6be6705d1db798a639ec8c875bb18d2..2d7bf7e8dea6707f6c581cdb6241fe43387e1f24 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.
 
index 79f0bb14c1d9cff0ad1a06abaa8debc470bb8e6a..0efaa436db71109c02e4e7c43d7136d9cb0dd48b 100644 (file)
@@ -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)
index f7e49b824a14d4875269eefbad041016e26cbea0..b107bf2923a7abacb8ac522ee435e3c2d8abdb1d 100755 (executable)
--- a/configure
+++ b/configure
@@ -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
index 19cf1ae3e89d44e20cecd6e4d9869edbbc46a877..0ab44305bae1cad4497b9310f137eef9d12be556 100644 (file)
@@ -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)
index 6fff165cf71a09ce926bfddb51c215447232e555..cf0ea1f52e9082a720d7240eccb7e261e5e8baec 100644 (file)
 /* 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
 
index 64358341e71bd849e69c6bc6c9d77c101773a8e3..bddb675072969763bbf2caad615ef497c89fbb20 100644 (file)
--- a/setup.py
+++ b/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)