Commit f651ed8
committed
fix(actions): ninja 转义与未解析目标 —— 自审第二轮
## 1. action 命令里的 `$` 会被 ninja 吃掉
命令 token 只做了 shell 引号,没做 ninja 转义。**引号救不了它**:ninja 在 shell 被
调用之前就会展开 `$foo`,所以带字面 `$` 的 token(含 `$` 的路径、
`-Wl,-rpath,$ORIGIN`、一段 awk 程序)会被当成变量引用。
改成本文件其余地方一直用的那个配对(与 `include_dir_token` 同序):**先 ninja 转义,
再 shell 引号**。对普通 token 无影响 —— `escape_ninja_chars` 只碰空格 / `$` / `:`,
而 `shell_quote_arg` 对不含元字符的串逐字节原样返回。
这里每个元素**按构造就是一个 argv token**(类型化 builder 一次追加一个),这正是
逐 token 引号成立的前提 —— #331 表明手工拼出来的 flag blob **不**满足这个前提。
顺带把 `escape_ninja_chars` 从匿名 namespace 移出并导出:它此前是内部的,而
ninja_backend 需要它。让它继续内部化就意味着 ninja 转义规则第四份手写副本,而那
正是它们会漂的原因。
## 2. `${mcpp.target_file:拼错}` 静默变成空串
未解析的引擎变量原本会被替换成空字符串,于是生成一条路径为空的边,ninja 在离
错误很远的地方报出来。现在是**硬错误**,并列出本次构建里存在的 target,还提示
「被 required_features 门住的 target 在那些 feature 未激活时不存在」。
## 测试
188 补两条:字面 `$` 能原样到达工具;未知 target 引用报错并**点名**。
两条放在自己的最小工程里 —— `app` 的 main.cpp 故意依赖生成出来的符号,在它上面
换掉 build.mcpp 会让**链接**失败,那说明不了这两条在测什么(我第一版就是这么写的)。
验证:单测 57/57;13 个 e2e 全绿,含先前红的 35_workspace / 120_ws_root_indices。1 parent fa5e914 commit f651ed8
4 files changed
Lines changed: 114 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
109 | 109 | | |
110 | 110 | | |
111 | 111 | | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
112 | 120 | | |
113 | 121 | | |
114 | 122 | | |
| |||
146 | 154 | | |
147 | 155 | | |
148 | 156 | | |
149 | | - | |
150 | | - | |
151 | | - | |
152 | | - | |
153 | | - | |
154 | | - | |
155 | 157 | | |
156 | 158 | | |
157 | 159 | | |
158 | 160 | | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
159 | 166 | | |
160 | 167 | | |
161 | 168 | | |
| |||
167 | 174 | | |
168 | 175 | | |
169 | 176 | | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
170 | 183 | | |
171 | 184 | | |
172 | 185 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1314 | 1314 | | |
1315 | 1315 | | |
1316 | 1316 | | |
1317 | | - | |
| 1317 | + | |
| 1318 | + | |
| 1319 | + | |
| 1320 | + | |
| 1321 | + | |
| 1322 | + | |
| 1323 | + | |
| 1324 | + | |
| 1325 | + | |
| 1326 | + | |
| 1327 | + | |
| 1328 | + | |
| 1329 | + | |
| 1330 | + | |
| 1331 | + | |
1318 | 1332 | | |
1319 | 1333 | | |
1320 | 1334 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4644 | 4644 | | |
4645 | 4645 | | |
4646 | 4646 | | |
| 4647 | + | |
| 4648 | + | |
| 4649 | + | |
| 4650 | + | |
| 4651 | + | |
4647 | 4652 | | |
4648 | 4653 | | |
4649 | 4654 | | |
| |||
4668 | 4673 | | |
4669 | 4674 | | |
4670 | 4675 | | |
| 4676 | + | |
4671 | 4677 | | |
4672 | 4678 | | |
4673 | 4679 | | |
| |||
4683 | 4689 | | |
4684 | 4690 | | |
4685 | 4691 | | |
| 4692 | + | |
| 4693 | + | |
| 4694 | + | |
| 4695 | + | |
| 4696 | + | |
| 4697 | + | |
| 4698 | + | |
| 4699 | + | |
| 4700 | + | |
| 4701 | + | |
| 4702 | + | |
| 4703 | + | |
| 4704 | + | |
4686 | 4705 | | |
4687 | 4706 | | |
4688 | 4707 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
144 | 144 | | |
145 | 145 | | |
146 | 146 | | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
147 | 208 | | |
148 | 209 | | |
149 | 210 | | |
| |||
0 commit comments