Check if SDK is installed on Darwin without triggering CLT installation popup window.
Simply invoking xcrun will inevitably trigger the CLT installation popup.
Therefore, we resort to invoking xcode-select --print-path and checking
if the status is nonzero.
stderr from xcode-select is ignored.
If error.OutOfMemory occurs in Allocator, this function returns null.
pub fn isSdkInstalled(gpa: Allocator, io: Io) bool
pub fn isSdkInstalled(gpa: Allocator, io: Io) bool {
const result = std.process.run(gpa, io, .{
.argv = &.{ "xcode-select", "--print-path" },
}) catch return false;
defer {
gpa.free(result.stderr);
gpa.free(result.stdout);
}
return switch (result.term) {
.exited => |code| if (code == 0) result.stdout.len > 0 else false,
else => false,
};
}