aboutsummaryrefslogtreecommitdiff
path: root/lib/std/build/CheckFileStep.zig
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2021-02-22 23:46:29 +0100
committerVeikka Tuominen <git@vexu.eu>2021-06-11 10:33:27 +0300
commit56cb0b5ca0ffc4fc2c54b9dfb0f15fb7c50dc840 (patch)
treea9594d810c4a5d8b5aa8a85d8898c6faa65a0a62 /lib/std/build/CheckFileStep.zig
parent8501bb04ada0a29b66ba2d87ec956a4cdff46cee (diff)
downloadzig-56cb0b5ca0ffc4fc2c54b9dfb0f15fb7c50dc840.tar.gz
zig-56cb0b5ca0ffc4fc2c54b9dfb0f15fb7c50dc840.zip
Moves files to file-global struct layout.
Diffstat (limited to 'lib/std/build/CheckFileStep.zig')
-rw-r--r--lib/std/build/CheckFileStep.zig57
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/std/build/CheckFileStep.zig b/lib/std/build/CheckFileStep.zig
new file mode 100644
index 0000000000..5422439472
--- /dev/null
+++ b/lib/std/build/CheckFileStep.zig
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: MIT
+// Copyright (c) 2015-2021 Zig Contributors
+// This file is part of [zig](https://ziglang.org/), which is MIT licensed.
+// The MIT license requires this copyright notice to be included in all copies
+// and substantial portions of the software.
+const std = @import("../std.zig");
+const build = std.build;
+const Step = build.Step;
+const Builder = build.Builder;
+const fs = std.fs;
+const mem = std.mem;
+const warn = std.debug.warn;
+
+const CheckFileStep = @This();
+
+step: Step,
+builder: *Builder,
+expected_matches: []const []const u8,
+source: build.FileSource,
+max_bytes: usize = 20 * 1024 * 1024,
+
+pub fn create(
+ builder: *Builder,
+ source: build.FileSource,
+ expected_matches: []const []const u8,
+) *CheckFileStep {
+ const self = builder.allocator.create(CheckFileStep) catch unreachable;
+ self.* = CheckFileStep{
+ .builder = builder,
+ .step = Step.init(.CheckFile, "CheckFile", builder.allocator, make),
+ .source = source.dupe(builder),
+ .expected_matches = builder.dupeStrings(expected_matches),
+ };
+ self.source.addStepDependencies(&self.step);
+ return self;
+}
+
+fn make(step: *Step) !void {
+ const self = @fieldParentPtr(CheckFileStep, "step", step);
+
+ const src_path = self.source.getPath(self.builder);
+ const contents = try fs.cwd().readFileAlloc(self.builder.allocator, src_path, self.max_bytes);
+
+ for (self.expected_matches) |expected_match| {
+ if (mem.indexOf(u8, contents, expected_match) == null) {
+ warn(
+ \\
+ \\========= Expected to find: ===================
+ \\{s}
+ \\========= But file does not contain it: =======
+ \\{s}
+ \\
+ , .{ expected_match, contents });
+ return error.TestFailed;
+ }
+ }
+}