mirror of
https://github.com/ziglang/zig.git
synced 2026-02-14 13:30:45 +00:00
`std.Build.Step.ConfigHeader` emits a *directory* containing a config header under a given sub path, but there's no good way to actually access that directory as a `LazyPath` in the configure phase. This is silly; it's perfectly valid to refer to that directory, perhaps to explicitly pass as a "-I" flag to a different toolchain invoked via a `Step.Run`. So now, instead of the `GeneratedFile` being the actual *file*, it should be that *directory*, i.e. `cache/o/<digest>`. We can then easily get the *file* if needed just by using `LazyPath.path` to go "deeper", which there is a helper function for. The legacy `getOutput` function is now a deprecated alias for `getOutputFile`, and `getOutputDir` is introduced. `std.Build.Module.IncludeDir.appendZigProcessFlags` needed a fix after this change, so I took the opportunity to refactor it a little. I was looking at this function while working on ziglang/translate-c yesterday and realised it could be expressed much more simply -- particularly after the `ConfigHeader` change here. I had to update the test `standalone/cmakedefine/` -- it turns out this test was well and truly reaching into build system internals, and doing horrible not-really-allowed stuff like overriding the `makeFn` of a `TopLevelStep`. To top it all off, the test forgot to set `b.default_step` to its "test" step, so the test never even ran. I've refactored it to follow accepted practices and to actually, like, work.
27 lines
1017 B
Zig
27 lines
1017 B
Zig
pub fn main() !void {
|
|
var arena_state: std.heap.ArenaAllocator = .init(std.heap.page_allocator);
|
|
defer arena_state.deinit();
|
|
const arena = arena_state.allocator();
|
|
|
|
const args = try std.process.argsAlloc(arena);
|
|
|
|
if (args.len != 3) return error.BadUsage;
|
|
const actual_path = args[1];
|
|
const expected_path = args[2];
|
|
|
|
const actual = try std.fs.cwd().readFileAlloc(arena, actual_path, 1024 * 1024);
|
|
const expected = try std.fs.cwd().readFileAlloc(arena, expected_path, 1024 * 1024);
|
|
|
|
// The actual output starts with a comment which we should strip out before comparing.
|
|
const comment_str = "/* This file was generated by ConfigHeader using the Zig Build System. */\n";
|
|
if (!std.mem.startsWith(u8, actual, comment_str)) {
|
|
return error.MissingOrMalformedComment;
|
|
}
|
|
const actual_without_comment = actual[comment_str.len..];
|
|
|
|
if (!std.mem.eql(u8, actual_without_comment, expected)) {
|
|
return error.DoesNotMatch;
|
|
}
|
|
}
|
|
const std = @import("std");
|