From d74180c373274bc545992c2a96a8e7618f8bd52c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20=C3=85stholm?= Date: Sun, 2 Jun 2024 18:11:16 +0200 Subject: [PATCH] Replace YES_COLOR with CLICOLOR_FORCE Instead of introducing YES_COLOR, a completely new standard, into the mix it might make more sense to instead tag along with the CLICOLOR_FORCE env var, which dates back to at least 2000 with FreeBSD 4.1.1 and which is supported by tools like CMake. --- lib/compiler/build_runner.zig | 2 +- lib/std/io/tty.zig | 4 ++-- lib/std/zig.zig | 1 + src/main.zig | 11 ++++++++--- test/src/StackTrace.zig | 2 +- tools/doctest.zig | 2 +- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/compiler/build_runner.zig b/lib/compiler/build_runner.zig index 86ad68133a..80b0c2ea3d 100644 --- a/lib/compiler/build_runner.zig +++ b/lib/compiler/build_runner.zig @@ -285,7 +285,7 @@ pub fn main() !void { const ttyconf = get_tty_conf(color, stderr); switch (ttyconf) { .no_color => try graph.env_map.put("NO_COLOR", "1"), - .escape_codes => try graph.env_map.put("YES_COLOR", "1"), + .escape_codes => try graph.env_map.put("CLICOLOR_FORCE", "1"), .windows_api => {}, } diff --git a/lib/std/io/tty.zig b/lib/std/io/tty.zig index cdeaba81c5..9453d8dac9 100644 --- a/lib/std/io/tty.zig +++ b/lib/std/io/tty.zig @@ -7,13 +7,13 @@ const native_os = builtin.os.tag; /// Detect suitable TTY configuration options for the given file (commonly stdout/stderr). /// This includes feature checks for ANSI escape codes and the Windows console API, as well as -/// respecting the `NO_COLOR` and `YES_COLOR` environment variables to override the default. +/// respecting the `NO_COLOR` and `CLICOLOR_FORCE` environment variables to override the default. pub fn detectConfig(file: File) Config { const force_color: ?bool = if (builtin.os.tag == .wasi) null // wasi does not support environment variables else if (process.hasEnvVarConstant("NO_COLOR")) false - else if (process.hasEnvVarConstant("YES_COLOR")) + else if (process.hasEnvVarConstant("CLICOLOR_FORCE")) true else null; diff --git a/lib/std/zig.zig b/lib/std/zig.zig index 26c0678082..4e8af6b7ce 100644 --- a/lib/std/zig.zig +++ b/lib/std/zig.zig @@ -1060,6 +1060,7 @@ pub const EnvVar = enum { ZIG_DEBUG_CMD, CC, NO_COLOR, + CLICOLOR_FORCE, XDG_CACHE_HOME, HOME, diff --git a/src/main.zig b/src/main.zig index 7e00b8c058..21f7281d74 100644 --- a/src/main.zig +++ b/src/main.zig @@ -994,11 +994,16 @@ fn buildOutputType( .native_system_include_paths = &.{}, }; - // before arg parsing, check for the NO_COLOR environment variable - // if it exists, default the color setting to .off + // before arg parsing, check for the NO_COLOR and CLICOLOR_FORCE environment variables + // if set, default the color setting to .off or .on, respectively // explicit --color arguments will still override this setting. // Disable color on WASI per https://github.com/WebAssembly/WASI/issues/162 - var color: Color = if (native_os == .wasi or EnvVar.NO_COLOR.isSet()) .off else .auto; + var color: Color = if (native_os == .wasi or EnvVar.NO_COLOR.isSet()) + .off + else if (EnvVar.CLICOLOR_FORCE.isSet()) + .on + else + .auto; switch (arg_mode) { .build, .translate_c, .zig_test, .run => { diff --git a/test/src/StackTrace.zig b/test/src/StackTrace.zig index 80c6c2f548..76ffe53c59 100644 --- a/test/src/StackTrace.zig +++ b/test/src/StackTrace.zig @@ -61,7 +61,7 @@ fn addExpect( }); const run = b.addRunArtifact(exe); - run.removeEnvironmentVariable("YES_COLOR"); + run.removeEnvironmentVariable("CLICOLOR_FORCE"); run.setEnvironmentVariable("NO_COLOR", "1"); run.expectExitCode(1); run.expectStdOutEqual(""); diff --git a/tools/doctest.zig b/tools/doctest.zig index 422c07aa5e..fad9be86db 100644 --- a/tools/doctest.zig +++ b/tools/doctest.zig @@ -104,7 +104,7 @@ fn printOutput( tmp_dir_path: []const u8, ) !void { var env_map = try process.getEnvMap(arena); - try env_map.put("YES_COLOR", "1"); + try env_map.put("CLICOLOR_FORCE", "1"); const host = try std.zig.system.resolveTargetQuery(.{}); const obj_ext = builtin.object_format.fileExt(builtin.cpu.arch);