From 6220c754cf3387aebbcba270789ec67e652398cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Sun, 16 Jun 2024 04:42:58 +0200 Subject: [PATCH] std.Build: Add Step.Fail and addFail() function. Closes #15373. --- lib/std/Build.zig | 4 ++++ lib/std/Build/Step.zig | 4 ++++ lib/std/Build/Step/Fail.zig | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 lib/std/Build/Step/Fail.zig diff --git a/lib/std/Build.zig b/lib/std/Build.zig index 086c0c1786..bb3e1486e6 100644 --- a/lib/std/Build.zig +++ b/lib/std/Build.zig @@ -1058,6 +1058,10 @@ pub fn addRemoveDirTree(b: *Build, dir_path: []const u8) *Step.RemoveDir { return Step.RemoveDir.create(b, dir_path); } +pub fn addFail(b: *Build, error_msg: []const u8) *Step.Fail { + return Step.Fail.create(b, error_msg); +} + pub fn addFmt(b: *Build, options: Step.Fmt.Options) *Step.Fmt { return Step.Fmt.create(b, options); } diff --git a/lib/std/Build/Step.zig b/lib/std/Build/Step.zig index b6aed17076..1090305321 100644 --- a/lib/std/Build/Step.zig +++ b/lib/std/Build/Step.zig @@ -83,6 +83,7 @@ pub const Id = enum { install_file, install_dir, remove_dir, + fail, fmt, translate_c, write_file, @@ -102,6 +103,7 @@ pub const Id = enum { .install_file => InstallFile, .install_dir => InstallDir, .remove_dir => RemoveDir, + .fail => Fail, .fmt => Fmt, .translate_c => TranslateC, .write_file => WriteFile, @@ -119,6 +121,7 @@ pub const Id = enum { pub const CheckFile = @import("Step/CheckFile.zig"); pub const CheckObject = @import("Step/CheckObject.zig"); pub const ConfigHeader = @import("Step/ConfigHeader.zig"); +pub const Fail = @import("Step/Fail.zig"); pub const Fmt = @import("Step/Fmt.zig"); pub const InstallArtifact = @import("Step/InstallArtifact.zig"); pub const InstallDir = @import("Step/InstallDir.zig"); @@ -551,6 +554,7 @@ pub fn writeManifest(s: *Step, man: *std.Build.Cache.Manifest) !void { test { _ = CheckFile; _ = CheckObject; + _ = Fail; _ = Fmt; _ = InstallArtifact; _ = InstallDir; diff --git a/lib/std/Build/Step/Fail.zig b/lib/std/Build/Step/Fail.zig new file mode 100644 index 0000000000..09b8515f77 --- /dev/null +++ b/lib/std/Build/Step/Fail.zig @@ -0,0 +1,35 @@ +//! Fail the build with a given message. +const std = @import("std"); +const Step = std.Build.Step; +const Fail = @This(); + +step: Step, +error_msg: []const u8, + +pub const base_id: Step.Id = .fail; + +pub fn create(owner: *std.Build, error_msg: []const u8) *Fail { + const fail = owner.allocator.create(Fail) catch @panic("OOM"); + + fail.* = .{ + .step = Step.init(.{ + .id = base_id, + .name = "fail", + .owner = owner, + .makeFn = make, + }), + .error_msg = owner.dupe(error_msg), + }; + + return fail; +} + +fn make(step: *Step, prog_node: std.Progress.Node) !void { + _ = prog_node; // No progress to report. + + const fail: *Fail = @fieldParentPtr("step", step); + + try step.result_error_msgs.append(step.owner.allocator, fail.error_msg); + + return error.MakeFailed; +}