@@ -43,6 +43,8 @@ const file_watch_windows_version =
4343 std .SemanticVersion .parse ("0.14.0-dev.625+2de0e2eca" ) catch unreachable ;
4444const 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