diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index bd5803a70f69a50e27abdbd161b3ed6dd9934319..81ab76d3724eab8818117b4dca4545040409d92f 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -46,7 +46,7 @@ jobs: - name: Build and Test run: sh ci/aarch64-linux-release.sh x86_64-macos-release: - runs-on: "macos-12" + runs-on: "macos-13" env: ARCH: "x86_64" steps: diff --git a/CMakeLists.txt b/CMakeLists.txt index ca20a702bce8de85c110246b462ed4e5dd8e388c..200a1cd2b95d14080fe135482abbbdec4542b275 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,12 +89,7 @@ set(ZIG_SHARED_LLVM off CACHE BOOL "Prefer linking against shared LLVM libraries set(ZIG_STATIC_LLVM ${ZIG_STATIC} CACHE BOOL "Prefer linking against static LLVM libraries") set(ZIG_STATIC_ZLIB ${ZIG_STATIC} CACHE BOOL "Prefer linking against static zlib") set(ZIG_STATIC_ZSTD ${ZIG_STATIC} CACHE BOOL "Prefer linking against static zstd") -if(APPLE AND ZIG_STATIC) - set(ZIG_STATIC_CURSES on) -else() - set(ZIG_STATIC_CURSES off) -endif() -set(ZIG_STATIC_CURSES ${ZIG_STATIC_CURSES} CACHE BOOL "Prefer linking against static curses") +set(ZIG_STATIC_CURSES OFF CACHE BOOL "Enable static linking against curses") if (ZIG_SHARED_LLVM AND ZIG_STATIC_LLVM) message(SEND_ERROR "-DZIG_SHARED_LLVM and -DZIG_STATIC_LLVM cannot both be enabled simultaneously") diff --git a/lib/std/Target.zig b/lib/std/Target.zig index b2808255b05820b7b4a637e37c048fc2100c0d88..ce912ab2cf9a96a45051189387b93cf5d1638e79 100644 --- a/lib/std/Target.zig +++ b/lib/std/Target.zig @@ -531,7 +531,7 @@ pub const Os = struct { }, .macos => .{ .semver = .{ - .min = .{ .major = 11, .minor = 7, .patch = 1 }, + .min = .{ .major = 13, .minor = 0, .patch = 0 }, .max = .{ .major = 15, .minor = 2, .patch = 0 }, }, }, diff --git a/lib/std/io.zig b/lib/std/io.zig index 0a9b2bf86713e1f1205aba7857c1e550c015b978..640f575654e219977ed51c8279ef25b0ce32e402 100644 --- a/lib/std/io.zig +++ b/lib/std/io.zig @@ -646,7 +646,10 @@ pub fn Poller(comptime StreamEnum: type) type { // always check if there's some data waiting to be read first. if (poll_fd.revents & posix.POLL.IN != 0) { const buf = try q.writableWithSize(bump_amt); - const amt = try posix.read(poll_fd.fd, buf); + const amt = posix.read(poll_fd.fd, buf) catch |err| switch (err) { + error.BrokenPipe => 0, // Handle the same as EOF. + else => |e| return e, + }; q.update(amt); if (amt == 0) { // Remove the fd when the EOF condition is met. diff --git a/lib/std/process/Child.zig b/lib/std/process/Child.zig index bd0a91ce77d7c0cac9ef356c13c1f948bc70cae5..bb2c4c09a8dbacf4ed3be028f75f6e3c2e45b203 100644 --- a/lib/std/process/Child.zig +++ b/lib/std/process/Child.zig @@ -293,19 +293,16 @@ pub fn killPosix(self: *ChildProcess) !Term { error.ProcessNotFound => return error.AlreadyTerminated, else => return err, }; - try self.waitUnwrapped(); + self.waitUnwrapped(); return self.term.?; } +pub const WaitError = SpawnError || std.os.windows.GetProcessMemoryInfoError; + /// Blocks until child process terminates and then cleans up all resources. -pub fn wait(self: *ChildProcess) !Term { - const term = if (native_os == .windows) - try self.waitWindows() - else - try self.waitPosix(); - +pub fn wait(self: *ChildProcess) WaitError!Term { + const term = if (native_os == .windows) try self.waitWindows() else self.waitPosix(); self.id = undefined; - return term; } @@ -408,7 +405,7 @@ pub fn run(args: struct { }; } -fn waitWindows(self: *ChildProcess) !Term { +fn waitWindows(self: *ChildProcess) WaitError!Term { if (self.term) |term| { self.cleanupStreams(); return term; @@ -418,17 +415,17 @@ fn waitWindows(self: *ChildProcess) !Term { return self.term.?; } -fn waitPosix(self: *ChildProcess) !Term { +fn waitPosix(self: *ChildProcess) SpawnError!Term { if (self.term) |term| { self.cleanupStreams(); return term; } - try self.waitUnwrapped(); + self.waitUnwrapped(); return self.term.?; } -fn waitUnwrappedWindows(self: *ChildProcess) !void { +fn waitUnwrappedWindows(self: *ChildProcess) WaitError!void { const result = windows.WaitForSingleObjectEx(self.id, windows.INFINITE, false); self.term = @as(SpawnError!Term, x: { @@ -450,7 +447,7 @@ fn waitUnwrappedWindows(self: *ChildProcess) !void { return result; } -fn waitUnwrapped(self: *ChildProcess) !void { +fn waitUnwrapped(self: *ChildProcess) void { const res: posix.WaitPidResult = res: { if (self.request_resource_usage_statistics) { switch (native_os) {