add support for environment variables to control cache directories

This commit adds:

ZIG_LOCAL_CACHE_DIR corresponding to --cache-dir
ZIG_GLOBAL_CACHE_DIR corresponding to --global-cache-dir
ZIG_LIB_DIR corresponding to --override-lib-dir

The main use case is for `zig cc` where we are bound by clang's CLI
options and need alternate channels to pass these configuration options.
This commit is contained in:
Andrew Kelley 2020-12-08 14:39:17 -07:00
parent c796c4528e
commit 2759313263

View File

@ -420,6 +420,15 @@ const Emit = union(enum) {
} }
}; };
fn optionalStringEnvVar(arena: *Allocator, name: []const u8) !?[]const u8 {
if (std.process.getEnvVarOwned(arena, name)) |value| {
return value;
} else |err| switch (err) {
error.EnvironmentVariableNotFound => return null,
else => |e| return e,
}
}
fn buildOutputType( fn buildOutputType(
gpa: *Allocator, gpa: *Allocator,
arena: *Allocator, arena: *Allocator,
@ -499,17 +508,14 @@ fn buildOutputType(
var link_eh_frame_hdr = false; var link_eh_frame_hdr = false;
var link_emit_relocs = false; var link_emit_relocs = false;
var each_lib_rpath: ?bool = null; var each_lib_rpath: ?bool = null;
var libc_paths_file: ?[]const u8 = std.process.getEnvVarOwned(arena, "ZIG_LIBC") catch |err| switch (err) { var libc_paths_file: ?[]const u8 = try optionalStringEnvVar(arena, "ZIG_LIBC");
error.EnvironmentVariableNotFound => null,
else => |e| return e,
};
var machine_code_model: std.builtin.CodeModel = .default; var machine_code_model: std.builtin.CodeModel = .default;
var runtime_args_start: ?usize = null; var runtime_args_start: ?usize = null;
var test_filter: ?[]const u8 = null; var test_filter: ?[]const u8 = null;
var test_name_prefix: ?[]const u8 = null; var test_name_prefix: ?[]const u8 = null;
var override_local_cache_dir: ?[]const u8 = null; var override_local_cache_dir: ?[]const u8 = try optionalStringEnvVar(arena, "ZIG_LOCAL_CACHE_DIR");
var override_global_cache_dir: ?[]const u8 = null; var override_global_cache_dir: ?[]const u8 = try optionalStringEnvVar(arena, "ZIG_GLOBAL_CACHE_DIR");
var override_lib_dir: ?[]const u8 = null; var override_lib_dir: ?[]const u8 = try optionalStringEnvVar(arena, "ZIG_LIB_DIR");
var main_pkg_path: ?[]const u8 = null; var main_pkg_path: ?[]const u8 = null;
var clang_preprocessor_mode: Compilation.ClangPreprocessorMode = .no; var clang_preprocessor_mode: Compilation.ClangPreprocessorMode = .no;
var subsystem: ?std.Target.SubSystem = null; var subsystem: ?std.Target.SubSystem = null;