37 lines
1.1 KiB
Zig
37 lines
1.1 KiB
Zig
|
const std = @import("std");
|
||
|
const CopyStep = @This();
|
||
|
|
||
|
step: std.build.Step,
|
||
|
builder: *std.build.Builder,
|
||
|
from_path: []const u8 = null,
|
||
|
to_path: []const u8 = null,
|
||
|
|
||
|
pub fn create(
|
||
|
b: *std.build.Builder,
|
||
|
from_path_relative: []const u8,
|
||
|
to_path_relative: []const u8,
|
||
|
) *CopyStep {
|
||
|
var result = b.allocator.create(CopyStep) catch @panic("memory");
|
||
|
result.* = CopyStep{
|
||
|
.step = std.build.Step.init(.custom, "copy a file", b.allocator, make),
|
||
|
.builder = b,
|
||
|
.from_path = std.fs.path.resolve(b.allocator, &[_][]const u8{
|
||
|
b.build_root,
|
||
|
from_path_relative,
|
||
|
}) catch @panic("memory"),
|
||
|
.to_path = std.fs.path.resolve(b.allocator, &[_][]const u8{
|
||
|
b.build_root,
|
||
|
to_path_relative,
|
||
|
}) catch @panic("memory"),
|
||
|
};
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
fn make(step: *std.build.Step) !void {
|
||
|
const self = @fieldParentPtr(CopyStep, "step", step);
|
||
|
std.fs.copyFileAbsolute(self.from_path, self.to_path, .{}) catch |e| {
|
||
|
std.log.err("Error copying {s} to {s}: {s}", .{ self.from_path, self.to_path, e });
|
||
|
std.os.exit(1);
|
||
|
};
|
||
|
}
|