attempt to automatically fetch raylib submodule if building against its source code

This commit is contained in:
Jesse Rudolph 2020-05-24 15:31:08 -05:00
parent 44fee6a550
commit 8771f17efb

36
lib.zig
View File

@ -4,6 +4,7 @@ const LibExeObjStep = std.build.LibExeObjStep;
pub fn Pkg(pkgdir: comptime []const u8) type { pub fn Pkg(pkgdir: comptime []const u8) type {
return struct { return struct {
var ran_git = false;
pub fn link(exe: *LibExeObjStep, system_lib: bool) void { pub fn link(exe: *LibExeObjStep, system_lib: bool) void {
const raylibFlags = &[_][]const u8{ const raylibFlags = &[_][]const u8{
"-std=c99", "-std=c99",
@ -51,6 +52,13 @@ pub fn Pkg(pkgdir: comptime []const u8) type {
return; return;
} }
fetchSubmodules(exe.builder) catch
std.debug.warn(
\\Warning:
\\Unable to fetch git submodule(s) Assuming package folder is not under
\\version control. If build fails, this is probably why.
, .{});
exe.addSystemIncludeDir(pkgdir ++ "/raylib/src"); exe.addSystemIncludeDir(pkgdir ++ "/raylib/src");
exe.addSystemIncludeDir(pkgdir ++ "/raylib/src/external/glfw/include"); exe.addSystemIncludeDir(pkgdir ++ "/raylib/src/external/glfw/include");
exe.addCSourceFile(pkgdir ++ "/raylib/src/core.c", raylibFlags); exe.addCSourceFile(pkgdir ++ "/raylib/src/core.c", raylibFlags);
@ -63,6 +71,34 @@ pub fn Pkg(pkgdir: comptime []const u8) type {
exe.addCSourceFile(pkgdir ++ "/raylib/src/utils.c", raylibFlags); exe.addCSourceFile(pkgdir ++ "/raylib/src/utils.c", raylibFlags);
} }
fn fetchSubmodules(b: *Builder) !void {
if (ran_git) return;
ran_git = true;
std.debug.warn("attempting to fetch submodule(s)...\n", .{});
const git_proc = std.ChildProcess.init(
&[_][]const u8{ "git", "submodule", "update", "--init" },
b.allocator,
) catch {
std.debug.warn("unable to create child process for git. build interrupted\n", .{});
std.os.exit(1);
};
const term = git_proc.spawnAndWait() catch {
std.debug.warn("unable to spawn child processfor git. build interrupted\n", .{});
std.os.exit(1);
};
switch (term) {
.Exited => |code| if (code != 0) return error.GitFail,
else => {
std.debug.warn("git terminated unexpectedly. build interrupted\n", .{});
std.os.exit(1);
},
}
}
pub fn addAsPackage(name: comptime []const u8, to: *LibExeObjStep) void { pub fn addAsPackage(name: comptime []const u8, to: *LibExeObjStep) void {
to.addPackagePath(name, pkgdir ++ "/lib/raylib-zig.zig"); to.addPackagePath(name, pkgdir ++ "/lib/raylib-zig.zig");
} }