diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2022-12-08 10:49:57 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2022-12-08 10:49:57 +0200 |
commit | f7600f07eecbdac0a4400ca2bc39e3e9f5a53b1b (patch) | |
tree | 3bc35a46a68b41dab1148fdbac1d64b818b53960 /libbuild2/diagnostics.cxx | |
parent | e55ab94a6fa652c71cdb119dc1b269c836672930 (diff) |
Add --[no]diag-color options (infrastructure only)
Diffstat (limited to 'libbuild2/diagnostics.cxx')
-rw-r--r-- | libbuild2/diagnostics.cxx | 40 |
1 files changed, 36 insertions, 4 deletions
diff --git a/libbuild2/diagnostics.cxx b/libbuild2/diagnostics.cxx index d91150b..b31ff82 100644 --- a/libbuild2/diagnostics.cxx +++ b/libbuild2/diagnostics.cxx @@ -3,7 +3,8 @@ #include <libbuild2/diagnostics.hxx> -#include <cstring> // strchr(), memcpy() +#include <cstring> // strcmp(), strchr(), memcpy() +#include <cstdlib> // getenv() #include <libbutl/process-io.hxx> @@ -24,23 +25,54 @@ namespace build2 bool silent = true; optional<bool> diag_progress_option; + optional<bool> diag_color_option; bool diag_no_line = false; bool diag_no_column = false; - bool stderr_term = false; + optional<const char*> stderr_term = nullopt; + bool stderr_term_color = false; void - init_diag (uint16_t v, bool s, optional<bool> p, bool nl, bool nc, bool st) + init_diag (uint16_t v, + bool s, + optional<bool> p, + optional<bool> c, + bool nl, + bool nc, + bool st) { assert (!s || v == 0); verb = v; silent = s; diag_progress_option = p; + diag_color_option = c; diag_no_line = nl; diag_no_column = nc; - stderr_term = st; + + if (st) + { + stderr_term = std::getenv ("TERM"); + + stderr_term_color = +#ifdef _WIN32 + // For now we disable color on Windows since it's unclear if/where/how + // it is supported. Maybe one day someone will figure this out. + // + false +#else + // This test was lifted from GCC (Emacs shell sets TERM=dumb). + // + *stderr_term != nullptr && strcmp (*stderr_term, "dumb") != 0 +#endif + ; + } + else + { + stderr_term = nullopt; + stderr_term_color = false; + } } // Stream verbosity. |