zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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 }