Allow static, non-framework iOS builds
还没有人认领这个 Issue。
- 主要语言
- Python
- 星标
- 77.2k
- 派生
- 35.9k
- PR 合并指标
- PR 指标待抓取
描述
Feature or enhancement
Proposal:
configure refuses any iOS build that is not a framework build, in both the explicit and the default path:
configure.ac:582 iOS) AC_MSG_ERROR([iOS builds must use --enable-framework]) ;; # --disable-framework
configure.ac:692 iOS) AC_MSG_ERROR([iOS builds must use --enable-framework]) ;; # no framework option given
The requirement is sound for a shared Python: an iOS app can only load a signed framework, never a bare dylib, so a dynamically loaded libpython has to be packaged as one. It does not hold for a static one. A --disable-shared build produces libpython3.x.a, which is linked into the app binary and loads nothing at runtime, so there is no framework to sign, package or load — but configure rejects that configuration before it can be attempted.
This matters for embedders, which link libpython statically into a single signed executable. Today they have to either patch configure locally or give up sys.platform == "ios" and cross-build as Darwin, which misreports the platform to the stdlib.
Two other places assume the framework exists whenever ac_sys_system is iOS:
configure.ac:3838 LINKFORSHARED="… $(PYTHONFRAMEWORKDIR)/$(PYTHONFRAMEWORK)"
configure.ac:6767 MODULE_DEPS_SHARED="… $(PYTHONFRAMEWORKDIR)/$(PYTHONFRAMEWORK)"
The Darwin arm immediately above the first one already guards the identical append with if test "$enable_framework"; the iOS arm does it unconditionally.
Suggested shape, keeping the change conservative:
- refuse only the combination that genuinely cannot work — a shared build with no framework — checked once
PY_ENABLE_SHAREDis known; - gate the two framework appends on
enable_framework, matching the Darwin arm; - leave the default path (no framework option at all) erroring, so a non-framework build stays an explicit opt-in, with the message naming
--disable-framework.
I have this working against main and will open a PR. Verified locally on macOS/arm64:
--host=arm64-apple-ios12.0 --disable-shared --disable-frameworkconfigures andmake libpython3.16.asucceeds, producing an arm64 archive withLC_BUILD_VERSION platform 2, minos 12.0;--disable-framework --enable-sharedis rejected with the new message;- no framework option is still rejected;
--enable-frameworkproduces a byte-identicalMakefileandpyconfig.hto unpatchedmain, so the supported framework build is unaffected.
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
Linked PRs
- gh-156110
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从 configure.ac 的第 582、692、3838 和 6767 行开始,然后将 iOS 的处理与附近显示的 Darwin arm 处理进行比较。验证 issue 中所述的 shared 和 static configure 组合,确认 framework 构建保持不变,并检查 static 构建是否成功生成 libpython3.16.a。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- python
- 领域
- build-system, mobile-dev
- Issue 类型
- 功能
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 停滞
- 描述清晰度
- 描述清楚
- 新手友好度
- 25/100