pub fn init(arena: Allocator, io: Io, options: InitOptions) Directories {
const wasi = builtin.target.os.tag == .wasi;
const cwd = options.cwd;
const zig_lib: Cache.Directory = d: {
if (options.override_zig_lib) |path| break :d openUnresolved(arena, io, cwd, path, .@"zig lib");
if (wasi) break :d getPreopen(options.preopens, "/lib");
break :d findZigLibDirFromSelfExe(arena, io, cwd, options.self_exe_path) catch |err| {
fatal("unable to find zig installation directory from executable path {q}: {t}", .{
options.self_exe_path, err,
});
};
};
const build_root: Cache.Directory = if (options.build_root) |s|
openUnresolved(arena, io, cwd, s, .@"build root")
else
.cwd();
const global_cache: Cache.Directory = d: {
if (options.override_global_cache) |path| break :d openUnresolved(arena, io, cwd, path, .@"global cache");
if (wasi) break :d getPreopen(options.preopens, "/cache");
const path = resolveGlobalCacheDir(arena, options.environ_map) catch |err| {
fatal("unable to resolve zig cache directory: {t}", .{err});
};
break :d openUnresolved(arena, io, cwd, path, .@"global cache");
};
const local_cache = getLocalCacheDirectory(arena, io, cwd, global_cache, options.local_cache_strat);
if (mem.eql(u8, zig_lib.path orelse "", global_cache.path orelse "")) {
fatal("zig lib directory '{f}' cannot be equal to global cache directory '{f}'", .{ zig_lib, global_cache });
}
if (mem.eql(u8, zig_lib.path orelse "", local_cache.path orelse "")) {
fatal("zig lib directory '{f}' cannot be equal to local cache directory '{f}'", .{ zig_lib, local_cache });
}
return .{
.cwd = cwd,
.zig_lib = zig_lib,
.global_cache = global_cache,
.local_cache = local_cache,
.build_root = build_root,
};
}
Uses
std.process.fatalon error conditions.