On Friday 29 of November 2013, Lubos Lunak wrote:
the attached patch adds ccache support for compiler color diagnostics
(also reported by somebody as #10075).
Clang automatically uses colors for output automatically if used in
terminal. Ccache's redirecting to a file disables this. GCC 4.8 has got a
similar support, except that it apparently requires also $GCC_COLORS or an
The patch detects if the compiler would use colors if used without ccache
and explicitly forces an option to achieve this. Note that I do not have
GCC 4.8 here, so I tested with Clang's alias and the GCC_COLORS support is
done based on documentation.
- GCC developers decided to roll their own name for the option when
introducing it. Clang has an alias for the GCC way, but versions predating
that obviously can't support it, so it's necessary to detect the compiler.
As ccache doesn't do that (and I don't find it worth much effort, as it
can't be 100% reliable anyway), the code merely guesses from the binary
name. If the compiler used will be e.g. the 'cc' symlink, there'll be no
colors. No big deal.
- Since the stderr is different, obviously compiling with and without
colors has different results as well. That means that such a compile
is duplicated. It's hopefully not such a common case, although it's
perfectly possible. I don't know if it's worth the effort to try to be
smart here. A possibly simple improvement could be to search the cache with
and without the option set and if stderr is empty, reuse the result
regardless of the option. I'm not quite sure where exactly this should
happen in the code.
I expect it'd make sense to add $CCACHE_NOCOLORS to disable this support?
I can also create manpage section for this color support, but I first
wanted to check here with the code.
ccache mailing list