https://github.com/python/cpython/commit/7f5e3f04f838686d65f1053a5e47f5d3faf0b228
commit: 7f5e3f04f838686d65f1053a5e47f5d3faf0b228
branch: main
author: Malcolm Smith <[email protected]>
committer: erlend-aasland <[email protected]>
date: 2024-02-21T23:18:57Z
summary:
gh-111225: Link extension modules against libpython on Android (#115780)
Part of the work on PEP 738: Adding Android as a supported platform.
* Rename the LIBPYTHON variable to MODULE_LDFLAGS, to more accurately
reflect its purpose.
* Edit makesetup to use MODULE_LDFLAGS when linking extension modules.
* Edit the Makefile so that extension modules depend on libpython on
Android and Cygwin.
* Restore `-fPIC` on Android. It was removed several years ago with a
note that the toolchain used it automatically, but this is no longer
the case. Omitting it causes all linker commands to fail with an error
like `relocation R_AARCH64_ADR_PREL_PG_HI21 cannot be used against
symbol '_Py_FalseStruct'; recompile with -fPIC`.
files:
A Misc/NEWS.d/next/Build/2024-02-21-18-22-49.gh-issue-111225.Z8C3av.rst
M Makefile.pre.in
M Modules/makesetup
M configure
M configure.ac
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 8130921b633e53..11d22d9a419ba7 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -41,7 +41,7 @@ AR= @AR@
READELF= @READELF@
SOABI= @SOABI@
LDVERSION= @LDVERSION@
-LIBPYTHON= @LIBPYTHON@
+MODULE_LDFLAGS=@MODULE_LDFLAGS@
GITVERSION= @GITVERSION@
GITTAG= @GITTAG@
GITBRANCH= @GITBRANCH@
@@ -2917,7 +2917,7 @@ Python/thread.o: @THREADHEADERS@
$(srcdir)/Python/condvar.h
# force rebuild when header file or module build flavor (static/shared) is
changed
MODULE_DEPS_STATIC=Modules/config.c
-MODULE_DEPS_SHARED=$(MODULE_DEPS_STATIC) $(EXPORTSYMS)
+MODULE_DEPS_SHARED=@MODULE_DEPS_SHARED@
MODULE__CURSES_DEPS=$(srcdir)/Include/py_curses.h
MODULE__CURSES_PANEL_DEPS=$(srcdir)/Include/py_curses.h
diff --git
a/Misc/NEWS.d/next/Build/2024-02-21-18-22-49.gh-issue-111225.Z8C3av.rst
b/Misc/NEWS.d/next/Build/2024-02-21-18-22-49.gh-issue-111225.Z8C3av.rst
new file mode 100644
index 00000000000000..8cdeba46ba2313
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2024-02-21-18-22-49.gh-issue-111225.Z8C3av.rst
@@ -0,0 +1 @@
+Link extension modules against libpython on Android.
diff --git a/Modules/makesetup b/Modules/makesetup
index f000c9cd67310e..d41b6640bb5186 100755
--- a/Modules/makesetup
+++ b/Modules/makesetup
@@ -87,18 +87,6 @@ esac
NL='\
'
-# Setup to link with extra libraries when making shared extensions.
-# Currently, only Cygwin needs this baggage.
-case `uname -s` in
-CYGWIN*) if test $libdir = .
- then
- ExtraLibDir=.
- else
- ExtraLibDir='$(LIBPL)'
- fi
- ExtraLibs="-L$ExtraLibDir -lpython\$(LDVERSION)";;
-esac
-
# Main loop
for i in ${*-Setup}
do
@@ -286,7 +274,7 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
;;
esac
rule="$file: $objs"
- rule="$rule; \$(BLDSHARED) $objs $libs $ExtraLibs -o
$file"
+ rule="$rule; \$(BLDSHARED) $objs $libs
\$(MODULE_LDFLAGS) -o $file"
echo "$rule" >>$rulesf
done
done
diff --git a/configure b/configure
index ba2d49df7c65fe..a08fc1ca12e895 100755
--- a/configure
+++ b/configure
@@ -834,7 +834,8 @@ LIBPL
PY_ENABLE_SHARED
PLATLIBDIR
BINLIBDEST
-LIBPYTHON
+MODULE_LDFLAGS
+MODULE_DEPS_SHARED
EXT_SUFFIX
ALT_SOABI
SOABI
@@ -7330,6 +7331,7 @@ printf "%s\n" "#define Py_ENABLE_SHARED 1" >>confdefs.h
case $ac_sys_system in
CYGWIN*)
LDLIBRARY='libpython$(LDVERSION).dll.a'
+ BLDLIBRARY='-L. -lpython$(LDVERSION)'
DLLLIBRARY='libpython$(LDVERSION).dll'
;;
SunOS*)
@@ -12789,7 +12791,6 @@ then
then CCSHARED="-fPIC";
else CCSHARED="+z";
fi;;
- Linux-android*) ;;
Linux*|GNU*) CCSHARED="-fPIC";;
Emscripten*|WASI*)
if test "x$enable_wasm_dynamic_linking" = xyes
@@ -23959,10 +23960,12 @@ printf "%s\n" "$LDVERSION" >&6; }
# On Android and Cygwin the shared libraries must be linked with libpython.
+
+MODULE_DEPS_SHARED='$(MODULE_DEPS_STATIC) $(EXPORTSYMS)'
+MODULE_LDFLAGS=''
if test "$PY_ENABLE_SHARED" = "1" && ( test -n "$ANDROID_API_LEVEL" || test
"$MACHDEP" = "cygwin"); then
- LIBPYTHON="-lpython${VERSION}${ABIFLAGS}"
-else
- LIBPYTHON=''
+ MODULE_DEPS_SHARED="$MODULE_DEPS_SHARED \$(LDLIBRARY)"
+ MODULE_LDFLAGS="\$(BLDLIBRARY)"
fi
diff --git a/configure.ac b/configure.ac
index b39af7422c4c7c..ac26486144515b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1360,6 +1360,7 @@ if test $enable_shared = "yes"; then
case $ac_sys_system in
CYGWIN*)
LDLIBRARY='libpython$(LDVERSION).dll.a'
+ BLDLIBRARY='-L. -lpython$(LDVERSION)'
DLLLIBRARY='libpython$(LDVERSION).dll'
;;
SunOS*)
@@ -3333,7 +3334,6 @@ then
then CCSHARED="-fPIC";
else CCSHARED="+z";
fi;;
- Linux-android*) ;;
Linux*|GNU*) CCSHARED="-fPIC";;
Emscripten*|WASI*)
AS_VAR_IF([enable_wasm_dynamic_linking], [yes], [
@@ -5888,11 +5888,13 @@ LDVERSION='$(VERSION)$(ABIFLAGS)'
AC_MSG_RESULT([$LDVERSION])
# On Android and Cygwin the shared libraries must be linked with libpython.
-AC_SUBST([LIBPYTHON])
+AC_SUBST([MODULE_DEPS_SHARED])
+AC_SUBST([MODULE_LDFLAGS])
+MODULE_DEPS_SHARED='$(MODULE_DEPS_STATIC) $(EXPORTSYMS)'
+MODULE_LDFLAGS=''
if test "$PY_ENABLE_SHARED" = "1" && ( test -n "$ANDROID_API_LEVEL" || test
"$MACHDEP" = "cygwin"); then
- LIBPYTHON="-lpython${VERSION}${ABIFLAGS}"
-else
- LIBPYTHON=''
+ MODULE_DEPS_SHARED="$MODULE_DEPS_SHARED \$(LDLIBRARY)"
+ MODULE_LDFLAGS="\$(BLDLIBRARY)"
fi
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]