From f887bea4d34da6e4dcfdf1eb18cca6afca3dc546 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 20 Apr 2026 11:32:11 -0700 Subject: [PATCH] fix overridden pkg dir path the previous code made it relative to the build directory also add a corresponding env var and logic for build command --- lib/std/zig.zig | 1 + src/main.zig | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/std/zig.zig b/lib/std/zig.zig index 5c609495cb..141b6c8bf5 100644 --- a/lib/std/zig.zig +++ b/lib/std/zig.zig @@ -744,6 +744,7 @@ pub fn parseTargetQueryOrReportFatalError( pub const EnvVar = enum { ZIG_GLOBAL_CACHE_DIR, ZIG_LOCAL_CACHE_DIR, + ZIG_LOCAL_PKG_DIR, ZIG_LIB_DIR, ZIG_LIBC, ZIG_BUILD_RUNNER, diff --git a/src/main.zig b/src/main.zig index 4ca73ff06a..c414628d98 100644 --- a/src/main.zig +++ b/src/main.zig @@ -4958,6 +4958,7 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, io: Io, args: []const []const u8, var override_lib_dir: ?[]const u8 = EnvVar.ZIG_LIB_DIR.get(environ_map); var override_global_cache_dir: ?[]const u8 = EnvVar.ZIG_GLOBAL_CACHE_DIR.get(environ_map); var override_local_cache_dir: ?[]const u8 = EnvVar.ZIG_LOCAL_CACHE_DIR.get(environ_map); + var override_pkg_dir: ?[]const u8 = EnvVar.ZIG_LOCAL_PKG_DIR.get(environ_map); var override_build_runner: ?[]const u8 = EnvVar.ZIG_BUILD_RUNNER.get(environ_map); var child_argv: std.ArrayList([]const u8) = .empty; var forks: std.ArrayList(Fork) = .empty; @@ -5048,6 +5049,11 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, io: Io, args: []const []const u8, i += 1; override_local_cache_dir = args[i]; continue; + } else if (mem.eql(u8, arg, "--pkg-dir")) { + if (i + 1 >= args.len) fatal("expected argument after '{s}'", .{arg}); + i += 1; + override_pkg_dir = args[i]; + continue; } else if (mem.eql(u8, arg, "--global-cache-dir")) { if (i + 1 >= args.len) fatal("expected argument after '{s}'", .{arg}); i += 1; @@ -5340,7 +5346,10 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, io: Io, args: []const []const u8, .http_client = &http_client, .global_cache = dirs.global_cache, .local_cache = .{ .root_dir = dirs.local_cache, .sub_path = "" }, - .root_pkg_path = .{ .root_dir = build_root.directory, .sub_path = "zig-pkg" }, + .root_pkg_path = if (override_pkg_dir) |cwd_rel_path| .initCwd(cwd_rel_path) else .{ + .root_dir = build_root.directory, + .sub_path = "zig-pkg", + }, .read_only = false, .recursive = true, .debug_hash = false, @@ -7053,7 +7062,7 @@ fn cmdFetch( const color: Color = .auto; var opt_path_or_url: ?[]const u8 = null; var override_global_cache_dir: ?[]const u8 = EnvVar.ZIG_GLOBAL_CACHE_DIR.get(environ_map); - var override_pkg_dir: ?[]const u8 = null; + var override_pkg_dir: ?[]const u8 = EnvVar.ZIG_LOCAL_PKG_DIR.get(environ_map); var debug_hash: bool = false; var save: union(enum) { no, @@ -7136,9 +7145,9 @@ fn cmdFetch( .http_client = &http_client, .global_cache = global_cache_directory, .local_cache = local_cache_path, - .root_pkg_path = .{ + .root_pkg_path = if (override_pkg_dir) |cwd_rel_path| .initCwd(cwd_rel_path) else .{ .root_dir = build_root.directory, - .sub_path = override_pkg_dir orelse "zig-pkg", + .sub_path = "zig-pkg", }, .recursive = false, .read_only = false,