diff --git a/src/special/build_runner.zig b/src/special/build_runner.zig index 4ec7ee2..79467a6 100644 --- a/src/special/build_runner.zig +++ b/src/special/build_runner.zig @@ -4,55 +4,17 @@ const io = std.io; const fmt = std.fmt; const Builder = std.build.Builder; const Pkg = std.build.Pkg; -const LibExeObjStep = std.build.LibExeObjStep; +const InstallArtifactStep = std.build.InstallArtifactStep; const ArrayList = std.ArrayList; + ///! This is a modified build runner to extract information out of build.zig -///! Modified from std.special.build_runner - -// We use a custom Allocator to intercept the creation of steps -const InterceptAllocator = struct { - base_allocator: *std.mem.Allocator, - allocator: std.mem.Allocator, - steps: std.ArrayListUnmanaged(*LibExeObjStep), - - fn init(base_allocator: *std.mem.Allocator) InterceptAllocator { - return .{ - .base_allocator = base_allocator, - .allocator = .{ - .reallocFn = realloc, - .shrinkFn = shrink, - }, - .steps = .{}, - }; - } - - // TODO: Check LibExeObjStep has a unique size. - fn realloc(allocator: *std.mem.Allocator, old_mem: []u8, old_align: u29, new_size: usize, new_align: u29) ![]u8 { - const self = @fieldParentPtr(InterceptAllocator, "allocator", allocator); - var data = try self.base_allocator.reallocFn(self.base_allocator, old_mem, old_align, new_size, new_align); - if (old_mem.len == 0 and new_size == @sizeOf(LibExeObjStep)) { - try self.steps.append(self.base_allocator, @ptrCast(*LibExeObjStep, @alignCast(@alignOf(LibExeObjStep), data.ptr))); - } - return data; - } - - fn shrink(allocator: *std.mem.Allocator, old_mem: []u8, old_align: u29, new_size: usize, new_align: u29) []u8 { - const self = @fieldParentPtr(InterceptAllocator, "allocator", allocator); - return self.base_allocator.shrinkFn(self.base_allocator, old_mem, old_align, new_size, new_align); - } - - fn deinit(self: *InterceptAllocator) void { - self.steps.deinit(self.base_allocator); - } -}; +///! Modified from the std.special.build_runner pub fn main() !void { var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); defer arena.deinit(); - var intercept = InterceptAllocator.init(&arena.allocator); - defer intercept.deinit(); - const allocator = &intercept.allocator; + const allocator = &arena.allocator; const builder = try Builder.create(allocator, "", "", ""); defer builder.destroy(); @@ -61,12 +23,13 @@ pub fn main() !void { const stdout_stream = io.getStdOut().outStream(); - // TODO: We currently add packages from every step., - // Should we error out or keep one step or something similar? - // We also flatten them, we should probably keep the nested structure. - for (intercept.steps.items) |step| { - for (step.packages.items) |pkg| { - try processPackage(stdout_stream, pkg); + for (builder.getInstallStep().dependencies.items) |step| { + std.debug.warn("step.id {}\n", .{step.id}); + if (step.cast(InstallArtifactStep)) |install_exe| { + std.debug.warn("libexeobj!\n", .{}); + for (install_exe.artifact.packages.items) |pkg| { + try processPackage(stdout_stream, pkg); + } } } }