Skip to content

Commit 75b0538

Browse files
cbilzandrewrk
authored andcommitted
std.Build: Allow ConfigHeader values to be added at build.zig runtime
1 parent 7700744 commit 75b0538

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

lib/std/Build/Step/ConfigHeader.zig

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -100,58 +100,58 @@ pub fn create(owner: *std.Build, options: Options) *ConfigHeader {
100100
return config_header;
101101
}
102102

103+
pub fn addValue(config_header: *ConfigHeader, name: []const u8, comptime T: type, value: T) void {
104+
return addValueInner(config_header, name, T, value) catch @panic("OOM");
105+
}
106+
103107
pub fn addValues(config_header: *ConfigHeader, values: anytype) void {
104-
return addValuesInner(config_header, values) catch @panic("OOM");
108+
inline for (@typeInfo(@TypeOf(values)).@"struct".fields) |field| {
109+
addValue(config_header, field.name, field.type, @field(values, field.name));
110+
}
105111
}
106112

107113
pub fn getOutput(config_header: *ConfigHeader) std.Build.LazyPath {
108114
return .{ .generated = .{ .file = &config_header.output_file } };
109115
}
110116

111-
fn addValuesInner(config_header: *ConfigHeader, values: anytype) !void {
112-
inline for (@typeInfo(@TypeOf(values)).@"struct".fields) |field| {
113-
try putValue(config_header, field.name, field.type, @field(values, field.name));
114-
}
115-
}
116-
117-
fn putValue(config_header: *ConfigHeader, field_name: []const u8, comptime T: type, v: T) !void {
117+
fn addValueInner(config_header: *ConfigHeader, name: []const u8, comptime T: type, value: T) !void {
118118
switch (@typeInfo(T)) {
119119
.null => {
120-
try config_header.values.put(field_name, .undef);
120+
try config_header.values.put(name, .undef);
121121
},
122122
.void => {
123-
try config_header.values.put(field_name, .defined);
123+
try config_header.values.put(name, .defined);
124124
},
125125
.bool => {
126-
try config_header.values.put(field_name, .{ .boolean = v });
126+
try config_header.values.put(name, .{ .boolean = value });
127127
},
128128
.int => {
129-
try config_header.values.put(field_name, .{ .int = v });
129+
try config_header.values.put(name, .{ .int = value });
130130
},
131131
.comptime_int => {
132-
try config_header.values.put(field_name, .{ .int = v });
132+
try config_header.values.put(name, .{ .int = value });
133133
},
134134
.@"enum", .enum_literal => {
135-
try config_header.values.put(field_name, .{ .ident = @tagName(v) });
135+
try config_header.values.put(name, .{ .ident = @tagName(value) });
136136
},
137137
.optional => {
138-
if (v) |x| {
139-
return putValue(config_header, field_name, @TypeOf(x), x);
138+
if (value) |x| {
139+
return addValueInner(config_header, name, @TypeOf(x), x);
140140
} else {
141-
try config_header.values.put(field_name, .undef);
141+
try config_header.values.put(name, .undef);
142142
}
143143
},
144144
.pointer => |ptr| {
145145
switch (@typeInfo(ptr.child)) {
146146
.array => |array| {
147147
if (ptr.size == .one and array.child == u8) {
148-
try config_header.values.put(field_name, .{ .string = v });
148+
try config_header.values.put(name, .{ .string = value });
149149
return;
150150
}
151151
},
152152
.int => {
153153
if (ptr.size == .slice and ptr.child == u8) {
154-
try config_header.values.put(field_name, .{ .string = v });
154+
try config_header.values.put(name, .{ .string = value });
155155
return;
156156
}
157157
},

0 commit comments

Comments
 (0)