| author | |
| committer | |
| log | fe855691f6f742a14678cb617422977c2a55be39 |
| tree | f97c04ea5e57d3b85d6b61612c82f0ac89db8ca5 |
| parent | a63f7875f451bda975ddabcc0c1feed10a216516 |
| signature |
Right now, if you override the build root with `--build-root`, then
`Run` steps can fail to execute because of incorrect path handling in
the compiler: `std.process.Child` gets a cwd-relative path, but also has
its cwd set to the build root. The latter behavior is really weird; it
doesn't match my expectations, nor does it match how we spawn child
`zig` processes. So, this commit makes the child process inherit the
build runner's cwd, as `LazyPath.getPath2` *expects* it to.
After investigating, this behavior dates all the way back to 2017; it
was introduced in 4543413. So, there isn't any clear/documented reason
for this; it should be safe to revert, since under the modern `LazyPath`
system it is strictly a bug AFAICT.1 files changed, 0 insertions(+), 3 deletions(-)
lib/std/Build/Step/Run.zig-3| ... | @@ -1334,9 +1334,6 @@ fn spawnChildAndCollect( | ... | @@ -1334,9 +1334,6 @@ fn spawnChildAndCollect( |
| 1334 | var child = std.process.Child.init(argv, arena); | 1334 | var child = std.process.Child.init(argv, arena); |
| 1335 | if (run.cwd) |lazy_cwd| { | 1335 | if (run.cwd) |lazy_cwd| { |
| 1336 | child.cwd = lazy_cwd.getPath2(b, &run.step); | 1336 | child.cwd = lazy_cwd.getPath2(b, &run.step); |
| 1337 | } else { | ||
| 1338 | child.cwd = b.build_root.path; | ||
| 1339 | child.cwd_dir = b.build_root.handle; | ||
| 1340 | } | 1337 | } |
| 1341 | child.env_map = run.env_map orelse &b.graph.env_map; | 1338 | child.env_map = run.env_map orelse &b.graph.env_map; |
| 1342 | child.request_resource_usage_statistics = true; | 1339 | child.request_resource_usage_statistics = true; |