`configure` mishandles the default and `--disable-*` forms of the safety options
还没有人认领这个 Issue。
- 主要语言
- Python
- 星标
- 77.2k
- 派生
- 35.9k
- PR 合并指标
- PR 指标待抓取
描述
Bug report
Bug description:
Summary
configure.ac mishandles the safety and slower-safety configure options.
- A default
configureinvocation reportssafetyas disabled, although the safety options are intended to be enabled by default. --disable-safetyenables the safety options instead of disabling them.--disable-slower-safetyenables the slower safety options instead of disabling them.
The latter two cases are not only incorrect status messages: configure actually enters the corresponding enabled branches and probes the associated compiler options.
Reproduction
Using an out-of-tree build directory:
mkdir build
cd build
Default configuration
../configure
Observed:
checking for --enable-safety... no
checking for --enable-slower-safety... no
Disable safety
../configure --disable-safety
Observed:
checking for --enable-safety... yes
checking whether C compiler accepts -fstack-protector-strong... yes
checking whether C compiler accepts -Wtrampolines... yes
checking whether C compiler accepts -Wimplicit-fallthrough... yes
checking whether C compiler accepts -Werror=format-security... yes
checking whether C compiler accepts -Wbidi-chars=any... yes
checking whether C compiler accepts -Wall... yes
checking for --enable-slower-safety... no
Disable slower safety
../configure --disable-slower-safety
Observed:
checking for --enable-safety... no
checking for --enable-slower-safety... yes
checking whether C compiler accepts -D_FORTIFY_SOURCE=3... yes
Actual Behavior
The resulting behavior is:
| Configure invocation | safety |
slower-safety |
|---|---|---|
../configure |
no |
no |
../configure --disable-safety |
yes |
no |
../configure --disable-slower-safety |
no |
yes |
In particular, the two --disable-* forms enable the options they are intended to disable.
Expected Behavior
The expected behavior is:
| Configure invocation | safety |
slower-safety |
|---|---|---|
../configure |
yes |
no |
../configure --enable-safety |
yes |
no |
../configure --disable-safety |
no |
no |
../configure --enable-slower-safety |
default value for safety |
yes |
../configure --disable-slower-safety |
default value for safety |
no |
In particular:
safetyshould remain enabled by default unless explicitly disabled.--disable-safetyshould setenable_safety=noand should not execute the safety compiler-option checks.--disable-slower-safetyshould setenable_slower_safety=noand should not execute the slower-safety compiler-option checks.
Cause
The affected declarations are in configure.ac in the AC_ARG_ENABLE([safety], ...) and AC_ARG_ENABLE([slower-safety], ...) blocks.
Their action-if-given branches currently test variables named disable_safety and disable_slower_safety.
For an AC_ARG_ENABLE option, Autoconf represents both forms through the corresponding enable option value:
--enable-safety -> enableval=yes
--disable-safety -> enableval=no
Likewise for slower-safety.
The current action blocks do not use that value. Instead, because disable_safety / disable_slower_safety are not the variables carrying the Autoconf option state, the fallback branch selects the enabled state whenever either option is explicitly present.
This causes:
--disable-safety
-> action-if-given runs
-> disable_safety is not "yes"
-> enable_safety=yes
and similarly:
--disable-slower-safety
-> enable_slower_safety=yes
There is also a separate default-value issue in the safety declaration: its action-if-not-given branch currently selects enable_safety=no, despite the option being intended to be enabled by default.
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Linked PRs
- gh-156767
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从 configure.ac 中的 AC_ARG_ENABLE([safety], ...) 和 AC_ARG_ENABLE([slower-safety], ...) 块开始,然后在树外构建目录中重现列出的三个 invocation。将生成的 status 和编译器选项检查与预期表进行比较;当默认形式和显式 enable/disable 形式能够选择文档所述的状态,且没有不需要的 probe 时,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- shell
- 领域
- build-system
- Issue 类型
- 缺陷
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 活跃度
- 停滞
- 描述清晰度
- 描述清楚
- 新手友好度
- 35/100