mirror of
https://github.com/ziglang/zig.git
synced 2025-12-07 14:53:08 +00:00
std.Build.Step.ConfigHeader: allow using autoconf values multiple times
This commit is contained in:
parent
c390f55e72
commit
7e548af8b1
@ -264,8 +264,11 @@ fn render_autoconf(
|
|||||||
values: std.StringArrayHashMap(Value),
|
values: std.StringArrayHashMap(Value),
|
||||||
src_path: []const u8,
|
src_path: []const u8,
|
||||||
) !void {
|
) !void {
|
||||||
var values_copy = try values.clone();
|
const build = step.owner;
|
||||||
defer values_copy.deinit();
|
const allocator = build.allocator;
|
||||||
|
|
||||||
|
var is_used: std.DynamicBitSetUnmanaged = try .initEmpty(allocator, values.count());
|
||||||
|
defer is_used.deinit(allocator);
|
||||||
|
|
||||||
var any_errors = false;
|
var any_errors = false;
|
||||||
var line_index: u32 = 0;
|
var line_index: u32 = 0;
|
||||||
@ -284,18 +287,20 @@ fn render_autoconf(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const name = it.rest();
|
const name = it.rest();
|
||||||
const kv = values_copy.fetchSwapRemove(name) orelse {
|
const index = values.getIndex(name) orelse {
|
||||||
try step.addError("{s}:{d}: error: unspecified config header value: '{s}'", .{
|
try step.addError("{s}:{d}: error: unspecified config header value: '{s}'", .{
|
||||||
src_path, line_index + 1, name,
|
src_path, line_index + 1, name,
|
||||||
});
|
});
|
||||||
any_errors = true;
|
any_errors = true;
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
try renderValueC(output, name, kv.value);
|
is_used.set(index);
|
||||||
|
try renderValueC(output, name, values.values()[index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (values_copy.keys()) |name| {
|
var unused_value_it = is_used.iterator(.{ .kind = .unset });
|
||||||
try step.addError("{s}: error: config header value unused: '{s}'", .{ src_path, name });
|
while (unused_value_it.next()) |index| {
|
||||||
|
try step.addError("{s}: error: config header value unused: '{s}'", .{ src_path, values.keys()[index] });
|
||||||
any_errors = true;
|
any_errors = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -12,3 +12,6 @@ int foo();
|
|||||||
#define SOME_ENUM_LITERAL test
|
#define SOME_ENUM_LITERAL test
|
||||||
#define SOME_STRING "test"
|
#define SOME_STRING "test"
|
||||||
|
|
||||||
|
// Used twice
|
||||||
|
#define SOME_TRUE 1
|
||||||
|
|
||||||
|
|||||||
@ -10,3 +10,6 @@ int foo();
|
|||||||
#undef SOME_TEN
|
#undef SOME_TEN
|
||||||
#undef SOME_ENUM_LITERAL
|
#undef SOME_ENUM_LITERAL
|
||||||
#undef SOME_STRING
|
#undef SOME_STRING
|
||||||
|
|
||||||
|
// Used twice
|
||||||
|
#undef SOME_TRUE
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user