authorgravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2026-10-23 16:33:55-07:00
committergravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2026-10-23 17:15:17-07:00
logbe69013825f95293e0916a8a89a1fdcdba65b5d7
tree27a04d58bda207228a731cb452a9b9905a62f09e
parentb9f95fc512b7638408c854936edcb4288f363f38

Build.declareDependency{Step}: only populate unlazy_deps when the package is not available

The logic in Maker expects unlazy_deps to only be populated for deps that need to be fetched. Without this check, declareDependency/declareDependencyStep could lead to an infinite fetch-and-retry loop.

1 files changed, 4 insertions(+), 0 deletions(-)

lib/std/Build.zig+4
......@@ -1959,6 +1959,8 @@ pub fn lazyDependency(b: *Build, name: []const u8, args: anytype) ?*Dependency {
19591959/// * `dependencyStep`
19601960pub fn declareDependency(b: *Build, name: []const u8) void {
19611961 const pkg_hash = findPkgHashOrFatal(b, name);
1962 const entry = package_map.get(pkg_hash).?;
1963 if (entry.available) return;
19621964 markNeededLazyDep(b, pkg_hash);
19631965}
19641966
......@@ -1972,6 +1974,8 @@ pub fn declareDependency(b: *Build, name: []const u8) void {
19721974pub fn declareDependencyStep(b: *Build, s: *Step, name: []const u8) void {
19731975 const graph = b.graph;
19741976 const pkg_hash = findPkgHashOrFatal(b, name);
1977 const entry = package_map.get(pkg_hash).?;
1978 if (entry.available) return;
19751979 const interned_hash = graph.wip_configuration.addString(pkg_hash) catch @panic("OOM");
19761980 s.unlazy_deps.put(graph.arena, interned_hash, {}) catch @panic("OOM");
19771981}