[Python-checkins] bpo-36722: Debug build loads libraries built in release mode (GH-12952)
Victor Stinner
webhook-mailer at python.org
Thu Apr 25 19:40:15 EDT 2019
https://github.com/python/cpython/commit/5422e3cfb7ffc50b147b4662d6f596cd61533754
commit: 5422e3cfb7ffc50b147b4662d6f596cd61533754
branch: master
author: Victor Stinner <vstinner at redhat.com>
committer: GitHub <noreply at github.com>
date: 2019-04-26T01:40:00+02:00
summary:
bpo-36722: Debug build loads libraries built in release mode (GH-12952)
In debug build, import now also looks for C extensions compiled in
release mode and for C extensions compiled in the stable ABI.
files:
A Misc/NEWS.d/next/Core and Builtins/2019-04-25-21-02-40.bpo-36722.8NApVM.rst
M Python/dynload_shlib.c
M configure
M configure.ac
M pyconfig.h.in
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-04-25-21-02-40.bpo-36722.8NApVM.rst b/Misc/NEWS.d/next/Core and Builtins/2019-04-25-21-02-40.bpo-36722.8NApVM.rst
new file mode 100644
index 000000000000..210a7e052592
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-04-25-21-02-40.bpo-36722.8NApVM.rst
@@ -0,0 +1,2 @@
+In debug build, import now also looks for C extensions compiled in release
+mode and for C extensions compiled in the stable ABI.
diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c
index e5bddaab6caa..c51f97abd286 100644
--- a/Python/dynload_shlib.c
+++ b/Python/dynload_shlib.c
@@ -38,9 +38,10 @@ const char *_PyImport_DynLoadFiletab[] = {
".dll",
#else /* !__CYGWIN__ */
"." SOABI ".so",
-#ifndef Py_DEBUG
+#ifdef ALT_SOABI
+ "." ALT_SOABI ".so",
+#endif
".abi" PYTHON_ABI_STRING ".so",
-#endif /* ! Py_DEBUG */
".so",
#endif /* __CYGWIN__ */
NULL,
diff --git a/configure b/configure
index b02d17c053c6..b2775cf04000 100755
--- a/configure
+++ b/configure
@@ -632,6 +632,7 @@ THREADHEADERS
LIBPL
PY_ENABLE_SHARED
EXT_SUFFIX
+ALT_SOABI
SOABI
LIBC
LIBM
@@ -15127,6 +15128,17 @@ SOABI='cpython-'`echo $VERSION | tr -d .`${ABIFLAGS}${PLATFORM_TRIPLET:+-$PLATFO
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SOABI" >&5
$as_echo "$SOABI" >&6; }
+if test "$Py_DEBUG" = 'true'; then
+ # Similar to SOABI but remove "d" flag from ABIFLAGS
+
+ ALT_SOABI='cpython-'`echo $VERSION | tr -d .``echo $ABIFLAGS | tr -d d`${PLATFORM_TRIPLET:+-$PLATFORM_TRIPLET}
+
+cat >>confdefs.h <<_ACEOF
+#define ALT_SOABI "${ALT_SOABI}"
+_ACEOF
+
+fi
+
case $ac_sys_system in
Linux*|GNU*|Darwin|VxWorks)
diff --git a/configure.ac b/configure.ac
index 65d3f8e69129..312758788e4d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4627,6 +4627,14 @@ AC_MSG_CHECKING(SOABI)
SOABI='cpython-'`echo $VERSION | tr -d .`${ABIFLAGS}${PLATFORM_TRIPLET:+-$PLATFORM_TRIPLET}
AC_MSG_RESULT($SOABI)
+if test "$Py_DEBUG" = 'true'; then
+ # Similar to SOABI but remove "d" flag from ABIFLAGS
+ AC_SUBST(ALT_SOABI)
+ ALT_SOABI='cpython-'`echo $VERSION | tr -d .``echo $ABIFLAGS | tr -d d`${PLATFORM_TRIPLET:+-$PLATFORM_TRIPLET}
+ AC_DEFINE_UNQUOTED(ALT_SOABI, "${ALT_SOABI}",
+ [Alternative SOABI used in debug build to load C extensions built in release mode])
+fi
+
AC_SUBST(EXT_SUFFIX)
case $ac_sys_system in
Linux*|GNU*|Darwin|VxWorks)
diff --git a/pyconfig.h.in b/pyconfig.h.in
index 562c0271133b..4b7796147274 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -12,6 +12,10 @@
support for AIX C++ shared extension modules. */
#undef AIX_GENUINE_CPLUSPLUS
+/* Alternative SOABI used in debug build to load C extensions built in release
+ mode */
+#undef ALT_SOABI
+
/* The Android API level. */
#undef ANDROID_API_LEVEL
More information about the Python-checkins
mailing list