From 866acd553585eb6fd8f35e8b15e81a6f5bc0fc88 Mon Sep 17 00:00:00 2001 From: d3m1gd Date: Sun, 29 May 2022 17:02:58 +0700 Subject: [PATCH] mach: ensure git present --- build.zig | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/build.zig b/build.zig index 5028d54f..4d99a5f1 100644 --- a/build.zig +++ b/build.zig @@ -27,6 +27,7 @@ pub fn build(b: *std.build.Builder) void { test_step.dependOn(&main_tests.step); // TODO(build-system): https://github.com/hexops/mach/issues/229#issuecomment-1100958939 + ensureGit(b.allocator); ensureDependencySubmodule(b.allocator, "examples/libs/zmath") catch unreachable; ensureDependencySubmodule(b.allocator, "examples/libs/zigimg") catch unreachable; ensureDependencySubmodule(b.allocator, "examples/assets") catch unreachable; @@ -285,3 +286,23 @@ fn ensureDependencySubmodule(allocator: std.mem.Allocator, path: []const u8) !vo _ = try child.spawnAndWait(); } + +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); + } +}