aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Build/Step.zig
diff options
context:
space:
mode:
Diffstat (limited to 'lib/std/Build/Step.zig')
-rw-r--r--lib/std/Build/Step.zig59
1 files changed, 25 insertions, 34 deletions
diff --git a/lib/std/Build/Step.zig b/lib/std/Build/Step.zig
index 5192249f12..8583427aad 100644
--- a/lib/std/Build/Step.zig
+++ b/lib/std/Build/Step.zig
@@ -286,7 +286,7 @@ pub fn cast(step: *Step, comptime T: type) ?*T {
}
/// For debugging purposes, prints identifying information about this Step.
-pub fn dump(step: *Step, w: *std.io.Writer, tty_config: std.io.tty.Config) void {
+pub fn dump(step: *Step, w: *std.Io.Writer, tty_config: std.Io.tty.Config) void {
const debug_info = std.debug.getSelfDebugInfo() catch |err| {
w.print("Unable to dump stack trace: Unable to open debug info: {s}\n", .{
@errorName(err),
@@ -359,7 +359,7 @@ pub fn addError(step: *Step, comptime fmt: []const u8, args: anytype) error{OutO
pub const ZigProcess = struct {
child: std.process.Child,
- poller: std.io.Poller(StreamEnum),
+ poller: std.Io.Poller(StreamEnum),
progress_ipc_fd: if (std.Progress.have_ipc) ?std.posix.fd_t else void,
pub const StreamEnum = enum { stdout, stderr };
@@ -428,7 +428,7 @@ pub fn evalZigProcess(
const zp = try gpa.create(ZigProcess);
zp.* = .{
.child = child,
- .poller = std.io.poll(gpa, ZigProcess.StreamEnum, .{
+ .poller = std.Io.poll(gpa, ZigProcess.StreamEnum, .{
.stdout = child.stdout.?,
.stderr = child.stderr.?,
}),
@@ -508,20 +508,16 @@ fn zigProcessUpdate(s: *Step, zp: *ZigProcess, watch: bool) !?Path {
try sendMessage(zp.child.stdin.?, .update);
if (!watch) try sendMessage(zp.child.stdin.?, .exit);
- const Header = std.zig.Server.Message.Header;
var result: ?Path = null;
- const stdout = zp.poller.fifo(.stdout);
+ const stdout = zp.poller.reader(.stdout);
poll: while (true) {
- while (stdout.readableLength() < @sizeOf(Header)) {
- if (!(try zp.poller.poll())) break :poll;
- }
- const header = stdout.reader().readStruct(Header) catch unreachable;
- while (stdout.readableLength() < header.bytes_len) {
- if (!(try zp.poller.poll())) break :poll;
- }
- const body = stdout.readableSliceOfLen(header.bytes_len);
+ const Header = std.zig.Server.Message.Header;
+ while (stdout.buffered().len < @sizeOf(Header)) if (!try zp.poller.poll()) break :poll;
+ const header = stdout.takeStruct(Header, .little) catch unreachable;
+ while (stdout.buffered().len < header.bytes_len) if (!try zp.poller.poll()) break :poll;
+ const body = stdout.take(header.bytes_len) catch unreachable;
switch (header.tag) {
.zig_version => {
@@ -547,11 +543,8 @@ fn zigProcessUpdate(s: *Step, zp: *ZigProcess, watch: bool) !?Path {
.string_bytes = try arena.dupe(u8, string_bytes),
.extra = extra_array,
};
- if (watch) {
- // This message indicates the end of the update.
- stdout.discard(body.len);
- break;
- }
+ // This message indicates the end of the update.
+ if (watch) break :poll;
},
.emit_digest => {
const EmitDigest = std.zig.Server.Message.EmitDigest;
@@ -611,15 +604,13 @@ fn zigProcessUpdate(s: *Step, zp: *ZigProcess, watch: bool) !?Path {
},
else => {}, // ignore other messages
}
-
- stdout.discard(body.len);
}
s.result_duration_ns = timer.read();
- const stderr = zp.poller.fifo(.stderr);
- if (stderr.readableLength() > 0) {
- try s.result_error_msgs.append(arena, try stderr.toOwnedSlice());
+ const stderr_contents = try zp.poller.toOwnedSlice(.stderr);
+ if (stderr_contents.len > 0) {
+ try s.result_error_msgs.append(arena, try arena.dupe(u8, stderr_contents));
}
return result;
@@ -736,7 +727,7 @@ pub fn allocPrintCmd2(
argv: []const []const u8,
) Allocator.Error![]u8 {
const shell = struct {
- fn escape(writer: anytype, string: []const u8, is_argv0: bool) !void {
+ fn escape(writer: *std.Io.Writer, string: []const u8, is_argv0: bool) !void {
for (string) |c| {
if (switch (c) {
else => true,
@@ -770,9 +761,9 @@ pub fn allocPrintCmd2(
}
};
- var buf: std.ArrayListUnmanaged(u8) = .empty;
- const writer = buf.writer(arena);
- if (opt_cwd) |cwd| try writer.print("cd {s} && ", .{cwd});
+ var aw: std.Io.Writer.Allocating = .init(arena);
+ const writer = &aw.writer;
+ if (opt_cwd) |cwd| writer.print("cd {s} && ", .{cwd}) catch return error.OutOfMemory;
if (opt_env) |env| {
const process_env_map = std.process.getEnvMap(arena) catch std.process.EnvMap.init(arena);
var it = env.iterator();
@@ -782,17 +773,17 @@ pub fn allocPrintCmd2(
if (process_env_map.get(key)) |process_value| {
if (std.mem.eql(u8, value, process_value)) continue;
}
- try writer.print("{s}=", .{key});
- try shell.escape(writer, value, false);
- try writer.writeByte(' ');
+ writer.print("{s}=", .{key}) catch return error.OutOfMemory;
+ shell.escape(writer, value, false) catch return error.OutOfMemory;
+ writer.writeByte(' ') catch return error.OutOfMemory;
}
}
- try shell.escape(writer, argv[0], true);
+ shell.escape(writer, argv[0], true) catch return error.OutOfMemory;
for (argv[1..]) |arg| {
- try writer.writeByte(' ');
- try shell.escape(writer, arg, false);
+ writer.writeByte(' ') catch return error.OutOfMemory;
+ shell.escape(writer, arg, false) catch return error.OutOfMemory;
}
- return buf.toOwnedSlice(arena);
+ return aw.toOwnedSlice();
}
/// Prefer `cacheHitAndWatch` unless you already added watch inputs