summaryrefslogtreecommitdiffstats
path: root/configure.ac
diff options
context:
space:
mode:
authorMalcolm Smith <smith@chaquo.com>2024-02-29 21:58:20 (GMT)
committerGitHub <noreply@github.com>2024-02-29 21:58:20 (GMT)
commitfa1d675309c6a08b0833cf25cffe476c6166aba3 (patch)
treebae7a83188f5479056e25f0032f7076c1291f878 /configure.ac
parentccfc042bbf31e53c44b8aae444afd8365b798422 (diff)
downloadcpython-fa1d675309c6a08b0833cf25cffe476c6166aba3.zip
cpython-fa1d675309c6a08b0833cf25cffe476c6166aba3.tar.gz
cpython-fa1d675309c6a08b0833cf25cffe476c6166aba3.tar.bz2
gh-71052: Fix several Android build issues (#115955)
This change is part of the work on PEP-738: Adding Android as a supported platform. * Remove the "1.0" suffix from libpython's filename on Android, which would prevent Gradle from packaging it into an app. * Simplify the build command in the Makefile so that libpython always gets given an SONAME with the `-Wl-h` argument, even if the SONAME is identical to the actual filename. * Disable a number of functions on Android which can be compiled and linked against, but always fail at runtime. As a result, the native _multiprocessing module is no longer built for Android. * gh-115390 (bee7bb331) added some pre-determined results to the configure script for things that can't be autodetected when cross-compiling; this change adds Android to these where appropriate. * Add a couple more pre-determined results for Android, and making them cover iOS as well. This means the --enable-ipv6 configure option will no longer be required on either platform.
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac50
1 files changed, 41 insertions, 9 deletions
diff --git a/configure.ac b/configure.ac
index a5abb06..b7671fa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1443,7 +1443,13 @@ if test $enable_shared = "yes"; then
LDLIBRARY='libpython$(LDVERSION).so'
BLDLIBRARY='-L. -lpython$(LDVERSION)'
RUNSHARED=LD_LIBRARY_PATH=`pwd`${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
- INSTSONAME="$LDLIBRARY".$SOVERSION
+
+ # The Android Gradle plugin will only package libraries whose names end
+ # with ".so".
+ if test "$ac_sys_system" != "Linux-android"; then
+ INSTSONAME="$LDLIBRARY".$SOVERSION
+ fi
+
if test "$with_pydebug" != yes
then
PY3LIBRARY=libpython3.so
@@ -3675,7 +3681,14 @@ int main(void)
}]])],
[ac_cv_aligned_required=no],
[ac_cv_aligned_required=yes],
-[ac_cv_aligned_required=yes])
+[
+# "yes" changes the hash function to FNV, which causes problems with Numba
+# (https://github.com/numba/numba/blob/0.59.0/numba/cpython/hashing.py#L470).
+if test "$ac_sys_system" = "Linux-android"; then
+ ac_cv_aligned_required=no
+else
+ ac_cv_aligned_required=yes
+fi])
])
if test "$ac_cv_aligned_required" = yes ; then
AC_DEFINE([HAVE_ALIGNED_REQUIRED], [1],
@@ -4872,6 +4885,22 @@ else
AC_MSG_RESULT([$MACHDEP_OBJS])
fi
+if test "$ac_sys_system" = "Linux-android"; then
+ # When these functions are used in an unprivileged process, they crash rather
+ # than returning an error.
+ privileged_funcs="chroot initgroups setegid seteuid setgid setregid setresgid
+ setresuid setreuid setuid"
+
+ # These functions are unimplemented and always return an error.
+ unimplemented_funcs="sem_open sem_unlink"
+
+ for name in $privileged_funcs $unimplemented_funcs; do
+ AS_VAR_PUSHDEF([func_var], [ac_cv_func_$name])
+ AS_VAR_SET([func_var], [no])
+ AS_VAR_POPDEF([func_var])
+ done
+fi
+
# checks for library functions
AC_CHECK_FUNCS([ \
accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \
@@ -5216,10 +5245,11 @@ AC_CHECK_FUNCS([clock_getres], [], [
])
])
-# On iOS, clock_settime can be linked (so it is found by
-# configure), but it raises a runtime error if used because apps can't change
-# the clock. Force the symbol off.
-if test "$ac_sys_system" != "iOS" ; then
+# On Android and iOS, clock_settime can be linked (so it is found by
+# configure), but when used in an unprivileged process, it crashes rather than
+# returning an error. Force the symbol off.
+if test "$ac_sys_system" != "Linux-android" && test "$ac_sys_system" != "iOS"
+then
AC_CHECK_FUNCS([clock_settime], [], [
AC_CHECK_LIB([rt], [clock_settime], [
AC_DEFINE([HAVE_CLOCK_SETTIME], [1])
@@ -5371,7 +5401,9 @@ int main(void)
[ac_cv_buggy_getaddrinfo=no],
[ac_cv_buggy_getaddrinfo=yes],
[
-if test "${enable_ipv6+set}" = set; then
+if test "$ac_sys_system" = "Linux-android" || test "$ac_sys_system" = "iOS"; then
+ ac_cv_buggy_getaddrinfo="no"
+elif test "${enable_ipv6+set}" = set; then
ac_cv_buggy_getaddrinfo="no -- configured with --(en|dis)able-ipv6"
else
ac_cv_buggy_getaddrinfo=yes
@@ -6589,9 +6621,9 @@ CPPFLAGS=$ac_save_cppflags
AC_MSG_NOTICE([checking for device files])
dnl NOTE: Inform user how to proceed with files when cross compiling.
-dnl iOS cross-compile builds are predictable; they won't ever
+dnl Some cross-compile builds are predictable; they won't ever
dnl have /dev/ptmx or /dev/ptc, so we can set them explicitly.
-if test "$ac_sys_system" = "iOS" ; then
+if test "$ac_sys_system" = "Linux-android" || test "$ac_sys_system" = "iOS"; then
ac_cv_file__dev_ptmx=no
ac_cv_file__dev_ptc=no
else