Use new build.zig functions to get the correct steps
This commit is contained in:
parent
3b052372c2
commit
1f23ba8490
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user