Commit 18ac998767

Andrew Kelley <andrew@ziglang.org>
2020-08-18 02:52:13
zig env: add global_cache_dir field
1 parent 502d413
Changed files (2)
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);
 }
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);