From 5549388e57830e31ecdf7ad758100ae8bd36576b Mon Sep 17 00:00:00 2001 From: d3m1gd Date: Fri, 27 May 2022 10:27:05 +0700 Subject: [PATCH] glfw: ensure git present --- glfw/system_sdk.zig | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/glfw/system_sdk.zig b/glfw/system_sdk.zig index 8986f992..93e8af62 100644 --- a/glfw/system_sdk.zig +++ b/glfw/system_sdk.zig @@ -216,6 +216,7 @@ fn determineSdkRoot(allocator: std.mem.Allocator, org: []const u8, name: []const return sdk_root_dir; } else |err| return switch (err) { error.FileNotFound => { + ensureGit(allocator); std.log.info("cloning required sdk..\ngit clone https://github.com/{s}/{s} '{s}'..\n", .{ org, name, sdk_root_dir }); if (std.mem.startsWith(u8, name, "sdk-macos-")) { if (!try confirmAppleSDKAgreement(allocator)) @panic("cannot continue"); @@ -270,3 +271,23 @@ fn confirmAppleSDKAgreement(allocator: std.mem.Allocator) !bool { return false; } } + +fn ensureGit(allocator: std.mem.Allocator) void { + const argv = &[_][]const u8{ "git", "--version" }; + const result = std.ChildProcess.exec(.{ + .allocator = allocator, + .argv = argv, + .cwd = ".", + }) catch { // e.g. FileNotFound + std.log.err("mach: error: 'git --version' failed. Is git not installed?", .{}); + std.process.exit(1); + }; + defer { + allocator.free(result.stderr); + allocator.free(result.stdout); + } + if (result.term.Exited != 0) { + std.log.err("mach: error: 'git --version' failed. Is git not installed?", .{}); + std.process.exit(1); + } +}