aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-08-17 17:52:13 -0700
committerAndrew Kelley <andrew@ziglang.org>2020-08-17 17:52:13 -0700
commit18ac9987670b01cd254dc05031e1758dacbc7265 (patch)
treef82881589c1795e4b23756ebadbc90beab995ee0
parent502d413621a8c2de3c6987e7d5a654392e2eab17 (diff)
downloadzig-18ac9987670b01cd254dc05031e1758dacbc7265.tar.gz
zig-18ac9987670b01cd254dc05031e1758dacbc7265.zip
zig env: add global_cache_dir field
-rw-r--r--src-self-hosted/introspect.zig16
-rw-r--r--src-self-hosted/print_env.zig6
2 files changed, 19 insertions, 3 deletions
diff --git a/src-self-hosted/introspect.zig b/src-self-hosted/introspect.zig
index 0d4c14a9ae..46405a2b70 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 444462789c..907e9e234d 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);