diff options
| author | Ben Crist <github@magicmoremagic.com> | 2024-06-06 13:40:10 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-06 18:40:10 +0000 |
| commit | a9e9c9965daa8a6d26fd1d4baf4f31f558b0d5fa (patch) | |
| tree | 4f8972c047e97a092004c25ce9f6ed05b473156b /lib/std/Build/Cache.zig | |
| parent | 63754916c598a3be41171abb708dc6434f93c63e (diff) | |
| download | zig-a9e9c9965daa8a6d26fd1d4baf4f31f558b0d5fa.tar.gz zig-a9e9c9965daa8a6d26fd1d4baf4f31f558b0d5fa.zip | |
Build system: Support Windows depfiles with unquoted, backslash escaped spaces (#20100)
Diffstat (limited to 'lib/std/Build/Cache.zig')
| -rw-r--r-- | lib/std/Build/Cache.zig | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/std/Build/Cache.zig b/lib/std/Build/Cache.zig index 3efd7315ac..2977801cb5 100644 --- a/lib/std/Build/Cache.zig +++ b/lib/std/Build/Cache.zig @@ -860,14 +860,23 @@ pub const Manifest = struct { var it: DepTokenizer = .{ .bytes = dep_file_contents }; - while (true) { - switch (it.next() orelse return) { + while (it.next()) |token| { + switch (token) { // We don't care about targets, we only want the prereqs // Clang is invoked in single-source mode but other programs may not .target, .target_must_resolve => {}, .prereq => |file_path| if (self.manifest_file == null) { _ = try self.addFile(file_path, null); } else try self.addFilePost(file_path), + .prereq_must_resolve => { + var resolve_buf = std.ArrayList(u8).init(self.cache.gpa); + defer resolve_buf.deinit(); + + try token.resolve(resolve_buf.writer()); + if (self.manifest_file == null) { + _ = try self.addFile(resolve_buf.items, null); + } else try self.addFilePost(resolve_buf.items); + }, else => |err| { try err.printError(error_buf.writer()); log.err("failed parsing {s}: {s}", .{ dep_file_basename, error_buf.items }); |
