blob f77b22c1 (1527B) - Raw
1 const std = @import("../std.zig"); 2 const Step = std.Build.Step; 3 const FileSource = std.Build.FileSource; 4 const InstallDir = std.Build.InstallDir; 5 const InstallFileStep = @This(); 6 7 pub const base_id = .install_file; 8 9 step: Step, 10 builder: *std.Build, 11 source: FileSource, 12 dir: InstallDir, 13 dest_rel_path: []const u8, 14 /// This is used by the build system when a file being installed comes from one 15 /// package but is being installed by another. 16 override_source_builder: ?*std.Build = null, 17 18 pub fn init( 19 builder: *std.Build, 20 source: FileSource, 21 dir: InstallDir, 22 dest_rel_path: []const u8, 23 ) InstallFileStep { 24 builder.pushInstalledFile(dir, dest_rel_path); 25 return InstallFileStep{ 26 .builder = builder, 27 .step = Step.init(builder.allocator, .{ 28 .id = .install_file, 29 .name = builder.fmt("install {s} to {s}", .{ source.getDisplayName(), dest_rel_path }), 30 .makeFn = make, 31 }), 32 .source = source.dupe(builder), 33 .dir = dir.dupe(builder), 34 .dest_rel_path = builder.dupePath(dest_rel_path), 35 }; 36 } 37 38 fn make(step: *Step, prog_node: *std.Progress.Node) !void { 39 _ = prog_node; 40 const self = @fieldParentPtr(InstallFileStep, "step", step); 41 const src_builder = self.override_source_builder orelse self.builder; 42 const full_src_path = self.source.getPath2(src_builder, step); 43 const full_dest_path = self.builder.getInstallPath(self.dir, self.dest_rel_path); 44 try self.builder.updateFile(full_src_path, full_dest_path); 45 }