Skip to content

Commit 4476db5

Browse files
committed
update build runner for latest zig master
One day this build runner will be removed, then I can finally become happy.
1 parent 9dabcc0 commit 4476db5

File tree

1 file changed

+73
-39
lines changed

1 file changed

+73
-39
lines changed

src/build_runner/0.12.0.zig

Lines changed: 73 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ const file_watch_windows_version =
4343
std.SemanticVersion.parse("0.14.0-dev.625+2de0e2eca") catch unreachable;
4444
const child_type_coercion_version =
4545
std.SemanticVersion.parse("0.14.0-dev.2506+32354d119") catch unreachable;
46+
const accept_root_module_version =
47+
std.SemanticVersion.parse("0.14.0-dev.2534+12d64c456") catch unreachable;
4648

4749
// -----------------------------------------------------------------------------
4850

@@ -922,34 +924,6 @@ fn extractBuildInformation(
922924
}
923925
}
924926

925-
var dependency_iterator: std.Build.Module.DependencyIterator = .{
926-
.allocator = gpa,
927-
.index = 0,
928-
.set = .{},
929-
.chase_dyn_libs = true,
930-
};
931-
defer dependency_iterator.deinit();
932-
933-
// collect root modules of `Step.Compile`
934-
for (steps.keys()) |step| {
935-
const compile = step.cast(Step.Compile) orelse continue;
936-
937-
dependency_iterator.set.ensureUnusedCapacity(arena, compile.root_module.import_table.count() + 1) catch @panic("OOM");
938-
dependency_iterator.set.putAssumeCapacity(.{
939-
.module = &compile.root_module,
940-
.compile = compile,
941-
}, "root");
942-
}
943-
944-
// collect public modules
945-
for (b.modules.values()) |module| {
946-
dependency_iterator.set.ensureUnusedCapacity(gpa, module.import_table.count() + 1) catch @panic("OOM");
947-
dependency_iterator.set.putAssumeCapacity(.{
948-
.module = module,
949-
.compile = null,
950-
}, "root");
951-
}
952-
953927
const helper = struct {
954928
fn addStepDependencies(allocator: Allocator, set: *std.AutoArrayHashMapUnmanaged(*Step, void), lazy_path: std.Build.LazyPath) !void {
955929
const lazy_path_updated_version = comptime std.SemanticVersion.parse("0.13.0-dev.79+6bc0cef60") catch unreachable;
@@ -1002,13 +976,71 @@ fn extractBuildInformation(
1002976
var step_dependencies: std.AutoArrayHashMapUnmanaged(*Step, void) = .{};
1003977
defer step_dependencies.deinit(gpa);
1004978

1005-
var dependency_items: std.ArrayListUnmanaged(std.Build.Module.DependencyIterator.Item) = .{};
1006-
defer dependency_items.deinit(gpa);
979+
const DependencyItem = struct {
980+
compile: ?*std.Build.Step.Compile,
981+
module: *std.Build.Module,
982+
};
983+
984+
var dependency_set: std.AutoArrayHashMapUnmanaged(DependencyItem, []const u8) = .{};
985+
defer dependency_set.deinit(gpa);
986+
987+
if (comptime builtin.zig_version.order(accept_root_module_version) != .lt) {
988+
// collect root modules of `Step.Compile`
989+
for (steps.keys()) |step| {
990+
const compile = step.cast(Step.Compile) orelse continue;
991+
const graph = compile.root_module.getGraph();
992+
993+
try dependency_set.ensureUnusedCapacity(arena, graph.modules.len);
994+
_ = dependency_set.fetchPutAssumeCapacity(.{ .module = compile.root_module, .compile = compile }, "root");
995+
for (graph.modules[1..], graph.names[1..]) |module, name| {
996+
_ = dependency_set.fetchPutAssumeCapacity(.{ .module = module, .compile = null }, name);
997+
}
998+
}
999+
1000+
// collect all dependencies
1001+
for (dependency_set.keys()) |item| {
1002+
try helper.addModuleDependencies(gpa, &step_dependencies, item.module);
1003+
}
1004+
} else {
1005+
var dependency_iterator: std.Build.Module.DependencyIterator = .{
1006+
.allocator = gpa,
1007+
.index = 0,
1008+
.set = .{},
1009+
.chase_dyn_libs = true,
1010+
};
1011+
defer dependency_iterator.deinit();
1012+
1013+
// collect root modules of `Step.Compile`
1014+
for (steps.keys()) |step| {
1015+
const compile = step.cast(Step.Compile) orelse continue;
1016+
1017+
dependency_iterator.set.ensureUnusedCapacity(arena, compile.root_module.import_table.count() + 1) catch @panic("OOM");
1018+
dependency_iterator.set.putAssumeCapacity(.{
1019+
.module = &compile.root_module,
1020+
.compile = compile,
1021+
}, "root");
1022+
}
10071023

1008-
// collect all dependencies
1009-
while (dependency_iterator.next()) |item| {
1010-
try helper.addModuleDependencies(gpa, &step_dependencies, item.module);
1011-
try dependency_items.append(gpa, item);
1024+
// collect public modules
1025+
for (b.modules.values()) |module| {
1026+
dependency_iterator.set.ensureUnusedCapacity(gpa, module.import_table.count() + 1) catch @panic("OOM");
1027+
dependency_iterator.set.putAssumeCapacity(.{
1028+
.module = module,
1029+
.compile = null,
1030+
}, "root");
1031+
}
1032+
1033+
var dependency_items: std.ArrayListUnmanaged(std.Build.Module.DependencyIterator.Item) = .{};
1034+
defer dependency_items.deinit(gpa);
1035+
1036+
// collect all dependencies
1037+
while (dependency_iterator.next()) |item| {
1038+
try helper.addModuleDependencies(gpa, &step_dependencies, item.module);
1039+
_ = try dependency_set.fetchPut(gpa, .{
1040+
.module = item.module,
1041+
.compile = item.compile,
1042+
}, item.name);
1043+
}
10121044
}
10131045

10141046
prepare(gpa, b, &step_dependencies, run, seed) catch |err| switch (err) {
@@ -1030,14 +1062,16 @@ fn extractBuildInformation(
10301062
defer packages.deinit();
10311063

10321064
// extract packages and include paths
1033-
for (dependency_items.items) |item| {
1065+
for (dependency_set.keys(), dependency_set.values()) |item, name| {
10341066
if (item.module.root_source_file) |root_source_file| {
1035-
_ = try packages.addPackage(item.name, root_source_file.getPath(item.module.owner));
1067+
_ = try packages.addPackage(name, root_source_file.getPath(item.module.owner));
10361068
}
10371069

1038-
for (item.module.import_table.keys(), item.module.import_table.values()) |name, import| {
1039-
if (import.root_source_file) |root_source_file| {
1040-
_ = try packages.addPackage(name, root_source_file.getPath(item.module.owner));
1070+
if (comptime builtin.zig_version.order(accept_root_module_version) == .lt) {
1071+
for (item.module.import_table.keys(), item.module.import_table.values()) |import_name, import| {
1072+
if (import.root_source_file) |root_source_file| {
1073+
_ = try packages.addPackage(import_name, root_source_file.getPath(item.module.owner));
1074+
}
10411075
}
10421076
}
10431077

0 commit comments

Comments
 (0)