authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-10-24 04:55:08+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-10-24 04:55:08+02:00
logd9c4f16e44f35f8d2b7aa39eb6a8100f2a680e1b
treeeaaf74b2d3337f9638aa5e10da6cf67adacfde97
parent76af1bbc4de446a9669b257289c0de6d81634f4e
parentbe69013825f95293e0916a8a89a1fdcdba65b5d7

Merge pull request 'build system: avoid the possibility of infinite fetch-and-retry loops for lazy dependencies' (#37391) from squeek502/zig:maker-lazy-loops into master

Reviewed-on: https://codeberg.org/ziglang/zig/pulls/37391 Reviewed-by: Andrew Kelley <andrew@ziglang.org>

2 files changed, 8 insertions(+), 0 deletions(-)

lib/compiler/Maker.zig+4
...@@ -1485,6 +1485,10 @@ fn configure(graph: *Graph, options: ConfigureOptions) ConfigureError!ScannedCon...@@ -1485,6 +1485,10 @@ fn configure(graph: *Graph, options: ConfigureOptions) ConfigureError!ScannedCon
1485 fatal("replacing {f}: {t}", .{ dependencies_zig_path, err });1485 fatal("replacing {f}: {t}", .{ dependencies_zig_path, err });
14861486
1487 deps_mod.root_path = try dependencies_zig_path.toString(arena);1487 deps_mod.root_path = try dependencies_zig_path.toString(arena);
1488
1489 if (config_man) |man| {
1490 man.hash.addBytes(&hex_digest);
1491 }
1488 }1492 }
14891493
1490 {1494 {
lib/std/Build.zig+4
...@@ -1959,6 +1959,8 @@ pub fn lazyDependency(b: *Build, name: []const u8, args: anytype) ?*Dependency {...@@ -1959,6 +1959,8 @@ pub fn lazyDependency(b: *Build, name: []const u8, args: anytype) ?*Dependency {
1959/// * `dependencyStep`1959/// * `dependencyStep`
1960pub fn declareDependency(b: *Build, name: []const u8) void {1960pub fn declareDependency(b: *Build, name: []const u8) void {
1961 const pkg_hash = findPkgHashOrFatal(b, name);1961 const pkg_hash = findPkgHashOrFatal(b, name);
1962 const entry = package_map.get(pkg_hash).?;
1963 if (entry.available) return;
1962 markNeededLazyDep(b, pkg_hash);1964 markNeededLazyDep(b, pkg_hash);
1963}1965}
19641966
...@@ -1972,6 +1974,8 @@ pub fn declareDependency(b: *Build, name: []const u8) void {...@@ -1972,6 +1974,8 @@ pub fn declareDependency(b: *Build, name: []const u8) void {
1972pub fn declareDependencyStep(b: *Build, s: *Step, name: []const u8) void {1974pub fn declareDependencyStep(b: *Build, s: *Step, name: []const u8) void {
1973 const graph = b.graph;1975 const graph = b.graph;
1974 const pkg_hash = findPkgHashOrFatal(b, name);1976 const pkg_hash = findPkgHashOrFatal(b, name);
1977 const entry = package_map.get(pkg_hash).?;
1978 if (entry.available) return;
1975 const interned_hash = graph.wip_configuration.addString(pkg_hash) catch @panic("OOM");1979 const interned_hash = graph.wip_configuration.addString(pkg_hash) catch @panic("OOM");
1976 s.unlazy_deps.put(graph.arena, interned_hash, {}) catch @panic("OOM");1980 s.unlazy_deps.put(graph.arena, interned_hash, {}) catch @panic("OOM");
1977}1981}