On Sat, Oct 18, 2014 at 7:46 PM, Egmont Koblinger <egm...@gmail.com> wrote:

> On Sat, Oct 18, 2014 at 7:23 PM, Paul Smith <p...@mad-scientist.net>
> wrote:
>> Can someone describe the ccache support for this?  I wonder how it might
>> (or might not) interact with GNU make's method of determining whether
>> there's a controlling TTY, in cases where make's output synchronization
>> is enabled.
> I'm really not the right guy to answer this, but here's what I believe
> happens (after playing a bit with ccache+colors and taking a glimpse at the
> patch that introduced this feature, and also quickly checking make's
> --output-sync now).
> The most important thing is that ccache should always remain totally
> transparent, and this is guaranteed with coloring too.  ccache figures out
> what kind of coloring gcc would use if it was called directly (rather than
> via ccache), depending on whether the stdout/err is a tty, on
> -f(no-)diagnostics-color=xx and $GCC_COLORS.  It includes all these values
> in the hash(*) and forces gcc to use color if necessary (because the actual
> gcc's output is not a tty).
> (*) This means that if you perform the same complications with tty output
> (colors enabled) and with redirected output (no colors), it won't share the
> cache. This causes some performance regression in case you first do a
> colored "gcc" to your tty, but upon seeing tons of errors you decide to run
> "gcc | less" to examine them. Also if you alter GCC_COLORS you won't get
> any cache hits.
> (Theoretically, ccache could instead always invoke gcc by forcing one
> particular color set where every kind of message has a different color, and
> then do a search-replace to the actual runtime colors or no colors; then it
> could share cache results. That would be the more conventional and better
> stacking order: caching below, coloring above. I understand it's harder to
> implement/maintain and the benefits would be quite low compared to the
> current solution.)
> make's --output-sync causes gcc (without ccache) not to use any coloring
> by default (since gcc's output is not a tty but a pipe or tmpfile to make),
> and having ccache in front of gcc doesn't change this.  You might specify
> -fdiagnostics-color=always in your Makefile, again, I believe the presence
> of ccache should be transparent and you'd get colors.
> Don't trust me blindly, I might be wrong in anything I said above :)
> egmont
ccache mailing list

Reply via email to