Skip to content

Commit 6a3b79a

Browse files
clementperonclaude
authored andcommitted
fix(depends): sync iOS python patches with the merged upstream PRs
python/cpython#156110, #156116 and #156113 all merged upstream, with small changes made during review. Update the local patches to match exactly what landed, and note in the Makefile that all three can be dropped once we bump python past 3.16. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1 parent 165883b commit 6a3b79a

3 files changed

Lines changed: 143 additions & 42 deletions

File tree

Lines changed: 128 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,112 @@
11
--- a/configure.ac
22
+++ b/configure.ac
3-
@@ -570,7 +570,6 @@
3+
@@ -569,29 +569,25 @@ AC_ARG_ENABLE([framework],
4+
45
case $enableval in
56
no)
6-
case $ac_sys_system in
7+
- case $ac_sys_system in
78
- iOS) AC_MSG_ERROR([iOS builds must use --enable-framework]) ;;
8-
*)
9-
PYTHONFRAMEWORK=
10-
PYTHONFRAMEWORKDIR=no-framework
11-
@@ -680,7 +679,7 @@
9+
- *)
10+
- PYTHONFRAMEWORK=
11+
- PYTHONFRAMEWORKDIR=no-framework
12+
- PYTHONFRAMEWORKPREFIX=
13+
- PYTHONFRAMEWORKINSTALLDIR=
14+
- PYTHONFRAMEWORKINSTALLNAMEPREFIX=
15+
- RESSRCDIR=
16+
- FRAMEWORKINSTALLFIRST=
17+
- FRAMEWORKINSTALLLAST=
18+
- FRAMEWORKALTINSTALLFIRST=
19+
- FRAMEWORKALTINSTALLLAST=
20+
- FRAMEWORKPYTHONW=
21+
- INSTALLTARGETS="commoninstall bininstall maninstall"
22+
-
23+
- if test "x${prefix}" = "xNONE"; then
24+
- FRAMEWORKUNIXTOOLSPREFIX="${ac_default_prefix}"
25+
- else
26+
- FRAMEWORKUNIXTOOLSPREFIX="${prefix}"
27+
- fi
28+
- enable_framework=
29+
- esac
30+
+ PYTHONFRAMEWORK=
31+
+ PYTHONFRAMEWORKDIR=no-framework
32+
+ PYTHONFRAMEWORKPREFIX=
33+
+ PYTHONFRAMEWORKINSTALLDIR=
34+
+ PYTHONFRAMEWORKINSTALLNAMEPREFIX=
35+
+ RESSRCDIR=
36+
+ FRAMEWORKINSTALLFIRST=
37+
+ FRAMEWORKINSTALLLAST=
38+
+ FRAMEWORKALTINSTALLFIRST=
39+
+ FRAMEWORKALTINSTALLLAST=
40+
+ FRAMEWORKPYTHONW=
41+
+ INSTALLTARGETS="commoninstall bininstall maninstall"
42+
+
43+
+ if test "x${prefix}" = "xNONE"; then
44+
+ FRAMEWORKUNIXTOOLSPREFIX="${ac_default_prefix}"
45+
+ else
46+
+ FRAMEWORKUNIXTOOLSPREFIX="${prefix}"
47+
+ fi
48+
+ enable_framework=
49+
;;
50+
*)
51+
PYTHONFRAMEWORKPREFIX="${enableval}"
52+
@@ -679,28 +675,24 @@ AC_ARG_ENABLE([framework],
53+
esac
1254
esac
1355
],[
14-
case $ac_sys_system in
56+
- case $ac_sys_system in
1557
- iOS) AC_MSG_ERROR([iOS builds must use --enable-framework]) ;;
16-
+ iOS) AC_MSG_ERROR([iOS builds must use --enable-framework, or --disable-framework with --disable-shared to build a static libpython]) ;;
17-
*)
18-
PYTHONFRAMEWORK=
19-
PYTHONFRAMEWORKDIR=no-framework
20-
@@ -1636,6 +1635,12 @@
21-
esac
22-
fi
23-
AC_MSG_RESULT([$LDLIBRARY])
24-
+
25-
+# A shared Python on iOS has to be a framework: an app can only load a signed
26-
+# framework, never a bare dylib. A static libpython has nothing to load.
27-
+if test "$ac_sys_system" = "iOS" && test "$PY_ENABLE_SHARED" = 1 && test -z "$PYTHONFRAMEWORK"; then
28-
+ AC_MSG_ERROR([iOS builds must use --enable-framework, or --disable-framework with --disable-shared to build a static libpython])
29-
+fi
30-
31-
if test "$cross_compiling" = yes; then
32-
RUNSHARED=
33-
@@ -3658,7 +3663,11 @@
58+
- *)
59+
- PYTHONFRAMEWORK=
60+
- PYTHONFRAMEWORKDIR=no-framework
61+
- PYTHONFRAMEWORKPREFIX=
62+
- PYTHONFRAMEWORKINSTALLDIR=
63+
- PYTHONFRAMEWORKINSTALLNAMEPREFIX=
64+
- RESSRCDIR=
65+
- FRAMEWORKINSTALLFIRST=
66+
- FRAMEWORKINSTALLLAST=
67+
- FRAMEWORKALTINSTALLFIRST=
68+
- FRAMEWORKALTINSTALLLAST=
69+
- FRAMEWORKPYTHONW=
70+
- INSTALLTARGETS="commoninstall bininstall maninstall"
71+
- if test "x${prefix}" = "xNONE" ; then
72+
- FRAMEWORKUNIXTOOLSPREFIX="${ac_default_prefix}"
73+
- else
74+
- FRAMEWORKUNIXTOOLSPREFIX="${prefix}"
75+
- fi
76+
- enable_framework=
77+
- esac
78+
+ PYTHONFRAMEWORK=
79+
+ PYTHONFRAMEWORKDIR=no-framework
80+
+ PYTHONFRAMEWORKPREFIX=
81+
+ PYTHONFRAMEWORKINSTALLDIR=
82+
+ PYTHONFRAMEWORKINSTALLNAMEPREFIX=
83+
+ RESSRCDIR=
84+
+ FRAMEWORKINSTALLFIRST=
85+
+ FRAMEWORKINSTALLLAST=
86+
+ FRAMEWORKALTINSTALLFIRST=
87+
+ FRAMEWORKALTINSTALLLAST=
88+
+ FRAMEWORKPYTHONW=
89+
+ INSTALLTARGETS="commoninstall bininstall maninstall"
90+
+ if test "x${prefix}" = "xNONE" ; then
91+
+ FRAMEWORKUNIXTOOLSPREFIX="${ac_default_prefix}"
92+
+ else
93+
+ FRAMEWORKUNIXTOOLSPREFIX="${prefix}"
94+
+ fi
95+
+ enable_framework=
96+
])
97+
AC_SUBST([PYTHONFRAMEWORK])
98+
AC_SUBST([PYTHONFRAMEWORKIDENTIFIER])
99+
@@ -1618,6 +1610,9 @@ if test $enable_shared = "yes"; then
100+
RUNSHARED=DYLD_LIBRARY_PATH=`pwd`${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}}
101+
;;
102+
iOS)
103+
+ if test -z "$PYTHONFRAMEWORK"; then
104+
+ AC_MSG_ERROR([iOS shared builds must use --enable-framework; an iOS app can only load a signed framework, never a bare dylib])
105+
+ fi
106+
LDLIBRARY='libpython$(LDVERSION).dylib'
107+
;;
108+
AIX*)
109+
@@ -3658,7 +3653,11 @@ then
34110
fi
35111
LINKFORSHARED="$LINKFORSHARED"
36112
elif test $ac_sys_system = "iOS"; then
@@ -43,15 +119,39 @@
43119
fi
44120
;;
45121
OpenUNIX*|UnixWare*) LINKFORSHARED="-Wl,-Bexport";;
46-
@@ -6413,8 +6422,9 @@
122+
@@ -6413,8 +6412,8 @@ if test "$PY_ENABLE_SHARED" = "1" && ( test -n "$ANDROID_API_LEVEL" || test "$MA
47123
LIBPYTHON="\$(BLDLIBRARY)"
48124
fi
49125

50126
-# On iOS the shared libraries must be linked with the Python framework
51127
-if test "$ac_sys_system" = "iOS"; then
52-
+# On iOS the shared libraries must be linked with the Python framework, when one
53-
+# is being built
128+
+# On iOS the shared libraries must be linked with the framework, when built
54129
+if test "$ac_sys_system" = "iOS" && test "$enable_framework"; then
55130
MODULE_DEPS_SHARED="$MODULE_DEPS_SHARED \$(PYTHONFRAMEWORKDIR)/\$(PYTHONFRAMEWORK)"
56131
fi
57132

133+
@@ -7663,6 +7662,11 @@ AC_ARG_ENABLE([test-modules],
134+
AS_VAR_IF([enable_test_modules], [yes], [TEST_MODULES=yes], [TEST_MODULES=no])
135+
], [TEST_MODULES=yes])
136+
AC_MSG_RESULT([$TEST_MODULES])
137+
+dnl Some test modules can only be built as shared libraries (see
138+
+dnl Modules/Setup.stdlib.in), which a non-framework iOS build cannot do.
139+
+AS_IF([test "$ac_sys_system" = "iOS" && test -z "$PYTHONFRAMEWORK"],
140+
+ [AS_IF([test "$TEST_MODULES" != "no"],
141+
+ [AC_MSG_ERROR([iOS non-framework builds must use --disable-test-modules])])])
142+
AC_SUBST([TEST_MODULES])
143+
144+
# gh-109054: Check if -latomic is needed to get <pyatomic.h> atomic functions.
145+
@@ -7866,6 +7870,12 @@ AS_CASE([$host_cpu],
146+
)
147+
AC_SUBST([MODULE_BUILDTYPE])
148+
149+
+dnl A non-framework iOS build has no framework for a shared extension module
150+
+dnl to link against, so every extension module must be built into libpython.
151+
+AS_IF([test "$ac_sys_system" = "iOS" && test -z "$PYTHONFRAMEWORK"],
152+
+ [AS_IF([test "$MODULE_BUILDTYPE" != "static"],
153+
+ [AC_MSG_ERROR([iOS non-framework builds must use MODULE_BUILDTYPE=static])])])
154+
+
155+
dnl _MODULE_BLOCK_ADD([VAR], [VALUE])
156+
dnl internal: adds $1=quote($2) to MODULE_BLOCK
157+
AC_DEFUN([_MODULE_BLOCK_ADD], [AS_VAR_APPEND([MODULE_BLOCK], ["$1=_AS_QUOTE([$2])$as_nl"])])
Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
--- a/configure.ac
22
+++ b/configure.ac
3-
@@ -989,8 +988,13 @@
4-
dnl Add the compiler flag for the iOS minimum supported OS version.
5-
AS_CASE([$ac_sys_system],
6-
[iOS], [
7-
- AS_VAR_APPEND([CFLAGS], [" -mios-version-min=${IPHONEOS_DEPLOYMENT_TARGET}"])
8-
- AS_VAR_APPEND([LDFLAGS], [" -mios-version-min=${IPHONEOS_DEPLOYMENT_TARGET}"])
9-
+ dnl -mios-version-min names the device platform; using it against the
10-
+ dnl simulator SDK makes the linker reject every dylib it resolves there.
11-
+ AS_IF([test "x$_host_device" = "xsimulator"],
12-
+ [_ios_version_min_flag=-mios-simulator-version-min],
13-
+ [_ios_version_min_flag=-mios-version-min])
14-
+ AS_VAR_APPEND([CFLAGS], [" ${_ios_version_min_flag}=${IPHONEOS_DEPLOYMENT_TARGET}"])
15-
+ AS_VAR_APPEND([LDFLAGS], [" ${_ios_version_min_flag}=${IPHONEOS_DEPLOYMENT_TARGET}"])
16-
],
3+
@@ -979,8 +979,12 @@ AS_CASE([$host],
174
)
185

6+
dnl Add the compiler flag for the iOS minimum supported OS version.
7+
-AS_CASE([$ac_sys_system],
8+
- [iOS], [
9+
+AS_CASE([$host],
10+
+ [*-apple-ios*-simulator], [
11+
+ AS_VAR_APPEND([CFLAGS], [" -mios-simulator-version-min=${IPHONEOS_DEPLOYMENT_TARGET}"])
12+
+ AS_VAR_APPEND([LDFLAGS], [" -mios-simulator-version-min=${IPHONEOS_DEPLOYMENT_TARGET}"])
13+
+ ],
14+
+ [*-apple-ios*], [
15+
AS_VAR_APPEND([CFLAGS], [" -mios-version-min=${IPHONEOS_DEPLOYMENT_TARGET}"])
16+
AS_VAR_APPEND([LDFLAGS], [" -mios-version-min=${IPHONEOS_DEPLOYMENT_TARGET}"])
17+
],

‎tools/depends/target/python3/Makefile‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ ifeq ($(OS),wasm)
133133
cd $(PLATFORM); patch -p1 -i ../15-wasm-static-hacl.patch
134134
endif
135135
ifeq ($(findstring iphone,$(TARGET_PLATFORM)),iphone)
136+
# These three patches are all merged upstream now (python/cpython#156110,
137+
# #156116, #156113); drop them when we bump python past 3.16.
136138
cd $(PLATFORM); patch -p1 -i ../16-ios-static-nonframework.patch
137139
cd $(PLATFORM); patch -p1 -i ../17-ios-simulator-version-min.patch
138140
cd $(PLATFORM); patch -p1 -i ../18-ios-objc-fallback.patch

0 commit comments

Comments
 (0)