aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Build/Step/ConfigHeader.zig
diff options
context:
space:
mode:
authorConstantin Bilz <cbilz@posteo.net>2025-02-06 18:56:48 +0100
committerAndrew Kelley <andrew@ziglang.org>2025-02-22 23:31:17 -0500
commit75b05386885de30ffdb4c21f6fd084500bf4fd55 (patch)
tree87970b922bc79839f4c146f9ee2d4f42792457ff /lib/std/Build/Step/ConfigHeader.zig
parent77007445bf94f59b88db0ec6a9f0e76edafe2b74 (diff)
downloadzig-75b05386885de30ffdb4c21f6fd084500bf4fd55.tar.gz
zig-75b05386885de30ffdb4c21f6fd084500bf4fd55.zip
std.Build: Allow ConfigHeader values to be added at build.zig runtime
Diffstat (limited to 'lib/std/Build/Step/ConfigHeader.zig')
-rw-r--r--lib/std/Build/Step/ConfigHeader.zig38
1 files changed, 19 insertions, 19 deletions
diff --git a/lib/std/Build/Step/ConfigHeader.zig b/lib/std/Build/Step/ConfigHeader.zig
index 72d5e99e3a..19741c4b67 100644
--- a/lib/std/Build/Step/ConfigHeader.zig
+++ b/lib/std/Build/Step/ConfigHeader.zig
@@ -100,58 +100,58 @@ pub fn create(owner: *std.Build, options: Options) *ConfigHeader {
return config_header;
}
+pub fn addValue(config_header: *ConfigHeader, name: []const u8, comptime T: type, value: T) void {
+ return addValueInner(config_header, name, T, value) catch @panic("OOM");
+}
+
pub fn addValues(config_header: *ConfigHeader, values: anytype) void {
- return addValuesInner(config_header, values) catch @panic("OOM");
+ inline for (@typeInfo(@TypeOf(values)).@"struct".fields) |field| {
+ addValue(config_header, field.name, field.type, @field(values, field.name));
+ }
}
pub fn getOutput(config_header: *ConfigHeader) std.Build.LazyPath {
return .{ .generated = .{ .file = &config_header.output_file } };
}
-fn addValuesInner(config_header: *ConfigHeader, values: anytype) !void {
- inline for (@typeInfo(@TypeOf(values)).@"struct".fields) |field| {
- try putValue(config_header, field.name, field.type, @field(values, field.name));
- }
-}
-
-fn putValue(config_header: *ConfigHeader, field_name: []const u8, comptime T: type, v: T) !void {
+fn addValueInner(config_header: *ConfigHeader, name: []const u8, comptime T: type, value: T) !void {
switch (@typeInfo(T)) {
.null => {
- try config_header.values.put(field_name, .undef);
+ try config_header.values.put(name, .undef);
},
.void => {
- try config_header.values.put(field_name, .defined);
+ try config_header.values.put(name, .defined);
},
.bool => {
- try config_header.values.put(field_name, .{ .boolean = v });
+ try config_header.values.put(name, .{ .boolean = value });
},
.int => {
- try config_header.values.put(field_name, .{ .int = v });
+ try config_header.values.put(name, .{ .int = value });
},
.comptime_int => {
- try config_header.values.put(field_name, .{ .int = v });
+ try config_header.values.put(name, .{ .int = value });
},
.@"enum", .enum_literal => {
- try config_header.values.put(field_name, .{ .ident = @tagName(v) });
+ try config_header.values.put(name, .{ .ident = @tagName(value) });
},
.optional => {
- if (v) |x| {
- return putValue(config_header, field_name, @TypeOf(x), x);
+ if (value) |x| {
+ return addValueInner(config_header, name, @TypeOf(x), x);
} else {
- try config_header.values.put(field_name, .undef);
+ try config_header.values.put(name, .undef);
}
},
.pointer => |ptr| {
switch (@typeInfo(ptr.child)) {
.array => |array| {
if (ptr.size == .one and array.child == u8) {
- try config_header.values.put(field_name, .{ .string = v });
+ try config_header.values.put(name, .{ .string = value });
return;
}
},
.int => {
if (ptr.size == .slice and ptr.child == u8) {
- try config_header.values.put(field_name, .{ .string = v });
+ try config_header.values.put(name, .{ .string = value });
return;
}
},