aboutsummaryrefslogtreecommitdiff
path: root/src/print_env.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-09-21 18:38:55 -0700
committerAndrew Kelley <andrew@ziglang.org>2020-09-21 18:38:55 -0700
commit528832bd3a2e7b686ee84aef5887df740a6114db (patch)
tree90ccff9faa2ba2604c8538aeec0a147a4b01148c /src/print_env.zig
parentb9f61d401502f5d221e72c0d0e3bf448b11dcd68 (diff)
downloadzig-528832bd3a2e7b686ee84aef5887df740a6114db.tar.gz
zig-528832bd3a2e7b686ee84aef5887df740a6114db.zip
rename src-self-hosted/ to src/
Diffstat (limited to 'src/print_env.zig')
-rw-r--r--src/print_env.zig47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/print_env.zig b/src/print_env.zig
new file mode 100644
index 0000000000..d1956911e9
--- /dev/null
+++ b/src/print_env.zig
@@ -0,0 +1,47 @@
+const std = @import("std");
+const build_options = @import("build_options");
+const introspect = @import("introspect.zig");
+const Allocator = std.mem.Allocator;
+const fatal = @import("main.zig").fatal;
+
+pub fn cmdEnv(gpa: *Allocator, args: []const []const u8, stdout: anytype) !void {
+ const self_exe_path = try std.fs.selfExePathAlloc(gpa);
+ defer gpa.free(self_exe_path);
+
+ var zig_lib_directory = introspect.findZigLibDirFromSelfExe(gpa, self_exe_path) catch |err| {
+ fatal("unable to find zig installation directory: {}\n", .{@errorName(err)});
+ };
+ defer gpa.free(zig_lib_directory.path.?);
+ defer zig_lib_directory.handle.close();
+
+ const zig_std_dir = try std.fs.path.join(gpa, &[_][]const u8{ zig_lib_directory.path.?, "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();
+
+ var jws = std.json.WriteStream(@TypeOf(bos_stream), 6).init(bos_stream);
+ try jws.beginObject();
+
+ try jws.objectField("zig_exe");
+ try jws.emitString(self_exe_path);
+
+ try jws.objectField("lib_dir");
+ try jws.emitString(zig_lib_directory.path.?);
+
+ 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);
+
+ try jws.endObject();
+ try bos_stream.writeByte('\n');
+ try bos.flush();
+}