authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-07-06 22:26:55+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-07-06 17:03:28-07:00
log44df3a148b4fa823979638dd8debb484a94a51af
treeb1edbe385853bcc751d2ac7a7ef61bdb9cee1a7d
parent49ac816e3683def5d14d6f8415d80413ecb43e4c

std: add prefixed versions of addFileSource and addDirectorySource to Step.Run


1 files changed, 46 insertions(+), 23 deletions(-)

lib/std/Build/Step/Run.zig+46-23
......@@ -112,12 +112,17 @@ pub const StdIo = union(enum) {
112112
113113pub const Arg = union(enum) {
114114 artifact: *Step.Compile,
115 file_source: std.Build.FileSource,
116 directory_source: std.Build.FileSource,
115 file_source: PrefixedFileSource,
116 directory_source: PrefixedFileSource,
117117 bytes: []u8,
118118 output: *Output,
119119};
120120
121pub const PrefixedFileSource = struct {
122 prefix: []const u8,
123 file_source: std.Build.FileSource,
124};
125
121126pub const Output = struct {
122127 generated_file: std.Build.GeneratedFile,
123128 prefix: []const u8,
......@@ -145,9 +150,9 @@ pub fn setName(self: *Run, name: []const u8) void {
145150 self.rename_step_with_output_arg = false;
146151}
147152
148pub fn enableTestRunnerMode(rs: *Run) void {
149 rs.stdio = .zig_test;
150 rs.addArgs(&.{"--listen=-"});
153pub fn enableTestRunnerMode(self: *Run) void {
154 self.stdio = .zig_test;
155 self.addArgs(&.{"--listen=-"});
151156}
152157
153158pub fn addArtifactArg(self: *Run, artifact: *Step.Compile) void {
......@@ -158,43 +163,59 @@ pub fn addArtifactArg(self: *Run, artifact: *Step.Compile) void {
158163/// This provides file path as a command line argument to the command being
159164/// run, and returns a FileSource which can be used as inputs to other APIs
160165/// throughout the build system.
161pub fn addOutputFileArg(rs: *Run, basename: []const u8) std.Build.FileSource {
162 return addPrefixedOutputFileArg(rs, "", basename);
166pub fn addOutputFileArg(self: *Run, basename: []const u8) std.Build.FileSource {
167 return self.addPrefixedOutputFileArg("", basename);
163168}
164169
165170pub fn addPrefixedOutputFileArg(
166 rs: *Run,
171 self: *Run,
167172 prefix: []const u8,
168173 basename: []const u8,
169174) std.Build.FileSource {
170 const b = rs.step.owner;
175 const b = self.step.owner;
171176
172177 const output = b.allocator.create(Output) catch @panic("OOM");
173178 output.* = .{
174179 .prefix = prefix,
175180 .basename = basename,
176 .generated_file = .{ .step = &rs.step },
181 .generated_file = .{ .step = &self.step },
177182 };
178 rs.argv.append(.{ .output = output }) catch @panic("OOM");
183 self.argv.append(.{ .output = output }) catch @panic("OOM");
179184
180 if (rs.rename_step_with_output_arg) {
181 rs.setName(b.fmt("{s} ({s})", .{ rs.step.name, basename }));
185 if (self.rename_step_with_output_arg) {
186 self.setName(b.fmt("{s} ({s})", .{ self.step.name, basename }));
182187 }
183188
184189 return .{ .generated = &output.generated_file };
185190}
186191
187192pub fn addFileSourceArg(self: *Run, file_source: std.Build.FileSource) void {
188 self.argv.append(.{
189 .file_source = file_source.dupe(self.step.owner),
190 }) catch @panic("OOM");
193 self.addPrefixedFileSourceArg("", file_source);
194}
195
196pub fn addPrefixedFileSourceArg(self: *Run, prefix: []const u8, file_source: std.Build.FileSource) void {
197 const b = self.step.owner;
198
199 const prefixed_file_source: PrefixedFileSource = .{
200 .prefix = b.dupe(prefix),
201 .file_source = file_source.dupe(b),
202 };
203 self.argv.append(.{ .file_source = prefixed_file_source }) catch @panic("OOM");
191204 file_source.addStepDependencies(&self.step);
192205}
193206
194207pub fn addDirectorySourceArg(self: *Run, directory_source: std.Build.FileSource) void {
195 self.argv.append(.{
196 .directory_source = directory_source.dupe(self.step.owner),
197 }) catch @panic("OOM");
208 self.addPrefixedDirectorySourceArg("", directory_source);
209}
210
211pub fn addPrefixedDirectorySourceArg(self: *Run, prefix: []const u8, directory_source: std.Build.FileSource) void {
212 const b = self.step.owner;
213
214 const prefixed_directory_source: PrefixedFileSource = .{
215 .prefix = b.dupe(prefix),
216 .file_source = directory_source.dupe(b),
217 };
218 self.argv.append(.{ .directory_source = prefixed_directory_source }) catch @panic("OOM");
198219 directory_source.addStepDependencies(&self.step);
199220}
200221
......@@ -395,13 +416,15 @@ fn make(step: *Step, prog_node: *std.Progress.Node) !void {
395416 man.hash.addBytes(bytes);
396417 },
397418 .file_source => |file| {
398 const file_path = file.getPath(b);
399 try argv_list.append(file_path);
419 const file_path = file.file_source.getPath(b);
420 try argv_list.append(b.fmt("{s}{s}", .{ file.prefix, file_path }));
421 man.hash.addBytes(file.prefix);
400422 _ = try man.addFile(file_path, null);
401423 },
402424 .directory_source => |file| {
403 const file_path = file.getPath(b);
404 try argv_list.append(file_path);
425 const file_path = file.file_source.getPath(b);
426 try argv_list.append(b.fmt("{s}{s}", .{ file.prefix, file_path }));
427 man.hash.addBytes(file.prefix);
405428 man.hash.addBytes(file_path);
406429 },
407430 .artifact => |artifact| {