feature. See also
. The project being documented here (as the example) is the Zig library itself.
Build.findImportPkgHashOrFatal
inline fn findImportPkgHashOrFatal(b: *Build, comptime asking_build_zig: type, comptime dep_name: []const u8) []const u8
File
Code
inline fn findImportPkgHashOrFatal(b: *Build, comptime asking_build_zig: type, comptime dep_name: []const u8) []const u8 {
const build_runner = @import("root");
const deps = build_runner.dependencies;
const arena = b.graph.arena;
const b_pkg_hash, const b_pkg_deps = comptime for (@typeInfo(deps.packages).@"struct".decl_names) |pkg_hash| {
const pkg = @field(deps.packages, pkg_hash);
if (@hasDecl(pkg, "build_zig") and pkg.build_zig == asking_build_zig) break .{ pkg_hash, pkg.deps };
} else .{ "", deps.root_deps };
if (!std.mem.eql(u8, b_pkg_hash, b.pkg_hash)) {
const build_zig_path = b.root.join(arena, "build.zig") catch @panic("OOM");
panic("{} is not the struct that corresponds to {f}", .{
asking_build_zig, build_zig_path,
});
}
comptime for (b_pkg_deps) |dep| {
if (std.mem.eql(u8, dep[0], dep_name)) return dep[1];
};
const full_path = b.root.join(arena, "build.zig.zon") catch @panic("OOM");
panic("no dependency named {s} in {f}. All packages used in build.zig must be declared in this file", .{
dep_name, full_path,
});
}