From 18ac9987670b01cd254dc05031e1758dacbc7265 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 17 Aug 2020 17:52:13 -0700 Subject: [PATCH] zig env: add global_cache_dir field --- src-self-hosted/introspect.zig | 16 +++++++++++++--- src-self-hosted/print_env.zig | 6 ++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src-self-hosted/introspect.zig b/src-self-hosted/introspect.zig index 0d4c14a9aebdeb3dfc3f5caa45a24222eaa4a6a7..46405a2b7095ca3b367f48969a8b821174350d6e 100644 --- a/src-self-hosted/introspect.zig +++ b/src-self-hosted/introspect.zig @@ -73,7 +73,17 @@ pub fn resolveZigLibDir(allocator: *mem.Allocator) ![]u8 { }; } -/// Caller must free result -pub fn resolveZigCacheDir(allocator: *mem.Allocator) ![]u8 { - return std.mem.dupe(allocator, u8, "zig-cache"); +/// Caller owns returned memory. +pub fn resolveGlobalCacheDir(allocator: *mem.Allocator) ![]u8 { + const appname = "zig"; + + if (std.Target.current.os.tag != .windows) { + if (std.os.getenv("XDG_CACHE_HOME")) |cache_root| { + return fs.path.join(allocator, &[_][]const u8{ cache_root, appname }); + } else if (std.os.getenv("HOME")) |home| { + return fs.path.join(allocator, &[_][]const u8{ home, ".cache", appname }); + } + } + + return fs.getAppDataDir(allocator, appname); } diff --git a/src-self-hosted/print_env.zig b/src-self-hosted/print_env.zig index 444462789ca16fe498a8a6bd85baa78386eaffac..907e9e234d7fafcb7ab3aa5fe8a20c9e4cd1655a 100644 --- a/src-self-hosted/print_env.zig +++ b/src-self-hosted/print_env.zig @@ -13,6 +13,9 @@ pub fn cmdEnv(gpa: *Allocator, args: []const []const u8, stdout: anytype) !void const zig_std_dir = try std.fs.path.join(gpa, &[_][]const u8{ zig_lib_dir, "std" }); defer gpa.free(zig_std_dir); + const global_cache_dir = try introspect.resolveGlobalCacheDir(gpa); + defer gpa.free(global_cache_dir); + var bos = std.io.bufferedOutStream(stdout); const bos_stream = bos.outStream(); @@ -25,6 +28,9 @@ pub fn cmdEnv(gpa: *Allocator, args: []const []const u8, stdout: anytype) !void try jws.objectField("std_dir"); try jws.emitString(zig_std_dir); + try jws.objectField("global_cache_dir"); + try jws.emitString(global_cache_dir); + try jws.objectField("version"); try jws.emitString(build_options.version); -- 2.54.0