zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit c32e0d3000f4ee539c00577b75e18c683e84f2c4 (tree)
parent b16890e6ddb451301f09029e3b0649168dc53918
Author: Ryan Liptak <squeek502@hotmail.com>
Date:   Sat,  9 Mar 2024 17:47:56 -0800

Fix progress when multiple zig rc child processes are building resinator

Diffstat:
Mlib/compiler/resinator/main.zig | 4++--
Msrc/Compilation.zig | 12+++++++++---
2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/lib/compiler/resinator/main.zig b/lib/compiler/resinator/main.zig @@ -47,9 +47,9 @@ pub fn main() !void { }; if (zig_integration) { - // Send progress with an empty string to indicate that the building of the + // Send progress with a special string to indicate that the building of the // resinator binary is finished and we've moved on to actually compiling the .rc file - try error_handler.server.serveStringMessage(.progress, ""); + try error_handler.server.serveStringMessage(.progress, "<resinator>"); } var options = options: { diff --git a/src/Compilation.zig b/src/Compilation.zig @@ -5042,12 +5042,18 @@ fn spawnZigRc( }, .progress => { node_name.clearRetainingCapacity(); - if (body.len > 0) { + // <resinator> is a special string that indicates that the child + // process has reached resinator's main function + if (std.mem.eql(u8, body, "<resinator>")) { + child_progress_node.setName(src_basename); + } + // Ignore 0-length strings since if multiple zig rc commands + // are executed at the same time, only one will send progress strings + // while the other(s) will send empty strings. + else if (body.len > 0) { try node_name.appendSlice(arena, "build 'zig rc'... "); try node_name.appendSlice(arena, body); child_progress_node.setName(node_name.items); - } else { - child_progress_node.setName(src_basename); } }, else => {}, // ignore other messages