aboutsummaryrefslogtreecommitdiff
path: root/build.zig
diff options
context:
space:
mode:
authorManlio Perillo <[email protected]>2023-05-01 17:12:05 +0200
committerManlio Perillo <[email protected]>2023-05-03 18:13:55 +0200
commit27b941fdaf5dbc1311e9ad344a16376bfbcf4013 (patch)
treec3c64ccb94b9eaf97d5b9f209a7a11a3b3d9dedf /build.zig
parent72a6287a5f1784b6da091c1ef1cc3cb3c1153d05 (diff)
downloadziglings-27b941fdaf5dbc1311e9ad344a16376bfbcf4013.tar.xz
ziglings-27b941fdaf5dbc1311e9ad344a16376bfbcf4013.zip
build: remove the ZiglingStep.makeInternal method
Rename the doCompile method to compile and add the run method. The two methods are now called from the make method. Add the help method, since the error handling of compile and run methods are now separate. Remove the obsolete comment for the compile method.
Diffstat (limited to 'build.zig')
-rw-r--r--build.zig50
1 files changed, 36 insertions, 14 deletions
diff --git a/build.zig b/build.zig
index 3b59d70..519ab85 100644
--- a/build.zig
+++ b/build.zig
@@ -240,7 +240,7 @@ const ZiglingStep = struct {
return self;
}
- fn make(step: *Step, prog_node: *std.Progress.Node) anyerror!void {
+ fn make(step: *Step, prog_node: *std.Progress.Node) !void {
const self = @fieldParentPtr(@This(), "step", step);
if (self.exercise.skip) {
@@ -248,28 +248,33 @@ const ZiglingStep = struct {
return;
}
- self.makeInternal(prog_node) catch {
+
+ const exe_path = self.compile(prog_node) catch {
if (self.exercise.hint.len > 0) {
print("\n{s}HINT: {s}{s}", .{ bold_text, self.exercise.hint, reset_text });
}
- print("\n{s}Edit exercises/{s} and run this again.{s}", .{ red_text, self.exercise.main_file, reset_text });
- print("\n{s}To continue from this zigling, use this command:{s}\n {s}zig build -Dn={s}{s}\n", .{ red_text, reset_text, bold_text, self.exercise.key(), reset_text });
+ self.help();
std.os.exit(1);
};
- }
- fn makeInternal(self: *@This(), prog_node: *std.Progress.Node) !void {
- print("Compiling {s}...\n", .{self.exercise.main_file});
+ self.run(exe_path, prog_node) catch {
+ if (self.exercise.hint.len > 0) {
+ print("\n{s}HINT: {s}{s}", .{ bold_text, self.exercise.hint, reset_text });
+ }
- const exe_file = try self.doCompile(prog_node);
+ self.help();
+ std.os.exit(1);
+ };
+ }
+ fn run(self: *@This(), exe_path: []const u8, _: *std.Progress.Node) !void {
resetLine();
print("Checking {s}...\n", .{self.exercise.main_file});
const cwd = self.builder.build_root.path.?;
- const argv = [_][]const u8{exe_file};
+ const argv = [_][]const u8{exe_path};
var child = std.ChildProcess.init(&argv, self.builder.allocator);
@@ -336,9 +341,9 @@ const ZiglingStep = struct {
print("{s}PASSED:\n{s}{s}\n\n", .{ green_text, trimOutput, reset_text });
}
- // The normal compile step calls os.exit, so we can't use it as a library :(
- // This is a stripped down copy of std.build.LibExeObjStep.make.
- fn doCompile(self: *@This(), prog_node: *std.Progress.Node) ![]const u8 {
+ fn compile(self: *@This(), prog_node: *std.Progress.Node) ![]const u8 {
+ print("Compiling {s}...\n", .{self.exercise.main_file});
+
const builder = self.builder;
var zig_args = std.ArrayList([]const u8).init(builder.allocator);
@@ -362,7 +367,7 @@ const ZiglingStep = struct {
const argv = zig_args.items;
var code: u8 = undefined;
- const file_name = self.eval(argv, &code, prog_node) catch |err| {
+ const exe_path = self.eval(argv, &code, prog_node) catch |err| {
self.printErrors();
switch (err) {
@@ -397,7 +402,7 @@ const ZiglingStep = struct {
};
self.printErrors();
- return file_name;
+ return exe_path;
}
// Code adapted from `std.Build.execAllowFail and `std.Build.Step.evalZigProcess`.
@@ -500,6 +505,23 @@ const ZiglingStep = struct {
return result orelse return error.ZigIPCError;
}
+ fn help(self: *ZiglingStep) void {
+ const path = self.exercise.main_file;
+ const key = self.exercise.key();
+
+ print("\n{s}Edit exercises/{s} and run this again.{s}", .{
+ red_text, path, reset_text,
+ });
+
+ const format =
+ \\
+ \\{s}To continue from this zigling, use this command:{s}
+ \\ {s}zig build -Dn={s}{s}
+ \\
+ ;
+ print(format, .{ red_text, reset_text, bold_text, key, reset_text });
+ }
+
fn printErrors(self: *ZiglingStep) void {
resetLine();