From owner-freebsd-ports-bugs@FreeBSD.ORG Tue Feb 18 01:30:02 2014 Return-Path: Delivered-To: freebsd-ports-bugs@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 38A4332D for ; Tue, 18 Feb 2014 01:30:02 +0000 (UTC) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 1194716BE for ; Tue, 18 Feb 2014 01:30:02 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.7/8.14.7) with ESMTP id s1I1U1tW017169 for ; Tue, 18 Feb 2014 01:30:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.8/8.14.8/Submit) id s1I1U1wx017168; Tue, 18 Feb 2014 01:30:01 GMT (envelope-from gnats) Resent-Date: Tue, 18 Feb 2014 01:30:01 GMT Resent-Message-Id: <201402180130.s1I1U1wx017168@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Olivier Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 376C41EE for ; Tue, 18 Feb 2014 01:26:45 +0000 (UTC) Received: from newred.freebsd.org (cgiserv.freebsd.org [IPv6:2001:1900:2254:206a::50:4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 1F8BF169F for ; Tue, 18 Feb 2014 01:26:45 +0000 (UTC) Received: from cgiserv.freebsd.org ([127.0.1.6]) by newred.freebsd.org (8.14.7/8.14.7) with ESMTP id s1I1Qibx020591 for ; Tue, 18 Feb 2014 01:26:44 GMT (envelope-from nobody@cgiserv.freebsd.org) Received: (from nobody@localhost) by cgiserv.freebsd.org (8.14.7/8.14.7/Submit) id s1I1QiTG020587; Tue, 18 Feb 2014 01:26:44 GMT (envelope-from nobody) Message-Id: <201402180126.s1I1QiTG020587@cgiserv.freebsd.org> Date: Tue, 18 Feb 2014 01:26:44 GMT From: Olivier To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Subject: ports/186853: [patch] Colour output support for lang/gcc48 X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Feb 2014 01:30:02 -0000 >Number: 186853 >Category: ports >Synopsis: [patch] Colour output support for lang/gcc48 >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Tue Feb 18 01:30:01 UTC 2014 >Closed-Date: >Last-Modified: >Originator: Olivier >Release: 9.2 >Organization: interfaSys sàrl >Environment: FreeBSD 9.2-RELEASE-p2 #0 r259303 >Description: lang/gcc48 does not support colour diagnostics and it will still take several months for lang/gcc49 to become stable, so here are patches which add support for "-fdiagnostics-color" [1], based on official commits made in the gcc 4.9 trunk [2][3][4] Note: If you're using ccache, you'll need to patch the port using PR 186851 [5] [1]http://gcc.gnu.org/onlinedocs/gcc/Language-Independent-Options.html#index-fdiagnostics-color-239 [2]http://repo.or.cz/w/official-gcc.git/commitdiff/41609f8bc12a3e7feeaf7749a03f880e5b3c2819#patch11 [3]http://repo.or.cz/w/official-gcc.git/commitdiff/adc604d41825b3cbd09045baeef09b1b88fc5a02 [4]http://repo.or.cz/w/official-gcc.git/commitdiff/71eeb8d395362158ffe9efbc2a7efbe3c4268db5#patch5 [5]http://www.freebsd.org/cgi/query-pr.cgi?pr=186851 >How-To-Repeat: >Fix: Patches included Patch attached with submission follows: # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # files/ # files/patch-gcc_common.opt # files/patch-gcc_diagnostic-color.c # files/patch-gcc_diagnostic.c # files/patch-gcc_c-family_c-format.c # files/patch-gcc_cp_error.c # files/patch-gcc_Makefile.in # files/patch-gcc_toplev.c # files/patch-gcc_testsuite_lib_c-compat.exp # files/patch-gcc_diagnostic-core.h # files/patch-gcc_pretty-print.h # files/patch-gcc_langhooks.c # files/patch-gcc_diagnostic.def # files/patch-gcc_doc_invoke.texi # files/patch-gcc_diagnostic-color.h # files/patch-gcc_dwarf2out.c # files/patch-gcc_pretty-print.c # files/patch-gcc_opts.c # files/patch-gcc_testsuite_lib_prune.exp # echo c - files/ mkdir -p files/ > /dev/null 2>&1 echo x - files/patch-gcc_common.opt sed 's/^X//' >files/patch-gcc_common.opt << 'dee1ae459171401f7cd97b063f689e34' X--- gcc/common.opt X+++ gcc/common.opt X@@ -1028,6 +1028,30 @@ fdiagnostics-show-caret X Common Var(flag_diagnostics_show_caret) Init(1) X Show the source line with a caret indicating the column X X+fdiagnostics-color X+Common Alias(fdiagnostics-color=,always,never) X+; X+ X+fdiagnostics-color= X+Common Joined RejectNegative Var(flag_diagnostics_show_color) Enum(diagnostic_color_rule) Init(DIAGNOSTICS_COLOR_NO) X+-fdiagnostics-color=[never|always|auto] Colorize diagnostics X+ X+; Required for these enum values. X+SourceInclude X+diagnostic-color.h X+ X+Enum X+Name(diagnostic_color_rule) Type(int) X+ X+EnumValue X+Enum(diagnostic_color_rule) String(never) Value(DIAGNOSTICS_COLOR_NO) X+ X+EnumValue X+Enum(diagnostic_color_rule) String(always) Value(DIAGNOSTICS_COLOR_YES) X+ X+EnumValue X+Enum(diagnostic_color_rule) String(auto) Value(DIAGNOSTICS_COLOR_AUTO) X+ X fdiagnostics-show-option X Common Var(flag_diagnostics_show_option) Init(1) X Amend appropriate diagnostic messages with the command line option that controls them dee1ae459171401f7cd97b063f689e34 echo x - files/patch-gcc_diagnostic-color.c sed 's/^X//' >files/patch-gcc_diagnostic-color.c << '7ce27e8f33f1b5377cb15c35726aee8b' X--- /dev/null X+++ gcc/diagnostic-color.c X@@ -0,0 +1,307 @@ X+/* Output colorization. X+ Copyright 2011-2013 Free Software Foundation, Inc. X+ X+ This program is free software; you can redistribute it and/or modify X+ it under the terms of the GNU General Public License as published by X+ the Free Software Foundation; either version 3, or (at your option) X+ any later version. X+ X+ This program is distributed in the hope that it will be useful, X+ but WITHOUT ANY WARRANTY; without even the implied warranty of X+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the X+ GNU General Public License for more details. X+ X+ You should have received a copy of the GNU General Public License X+ along with this program; if not, write to the Free Software X+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA X+ 02110-1301, USA. */ X+ X+#include "config.h" X+#include "system.h" X+#include "diagnostic-color.h" X+ X+/* Select Graphic Rendition (SGR, "\33[...m") strings. */ X+/* Also Erase in Line (EL) to Right ("\33[K") by default. */ X+/* Why have EL to Right after SGR? X+ -- The behavior of line-wrapping when at the bottom of the X+ terminal screen and at the end of the current line is often X+ such that a new line is introduced, entirely cleared with X+ the current background color which may be different from the X+ default one (see the boolean back_color_erase terminfo(5) X+ capability), thus scrolling the display by one line. X+ The end of this new line will stay in this background color X+ even after reverting to the default background color with X+ "\33[m', unless it is explicitly cleared again with "\33[K" X+ (which is the behavior the user would instinctively expect X+ from the whole thing). There may be some unavoidable X+ background-color flicker at the end of this new line because X+ of this (when timing with the monitor's redraw is just right). X+ -- The behavior of HT (tab, "\t") is usually the same as that of X+ Cursor Forward Tabulation (CHT) with a default parameter X+ of 1 ("\33[I"), i.e., it performs pure movement to the next X+ tab stop, without any clearing of either content or screen X+ attributes (including background color); try X+ printf 'asdfqwerzxcv\rASDF\tZXCV\n' X+ in a bash(1) shell to demonstrate this. This is not what the X+ user would instinctively expect of HT (but is ok for CHT). X+ The instinctive behavior would include clearing the terminal X+ cells that are skipped over by HT with blank cells in the X+ current screen attributes, including background color; X+ the boolean dest_tabs_magic_smso terminfo(5) capability X+ indicates this saner behavior for HT, but only some rare X+ terminals have it (although it also indicates a special X+ glitch with standout mode in the Teleray terminal for which X+ it was initially introduced). The remedy is to add "\33K" X+ after each SGR sequence, be it START (to fix the behavior X+ of any HT after that before another SGR) or END (to fix the X+ behavior of an HT in default background color that would X+ follow a line-wrapping at the bottom of the screen in another X+ background color, and to complement doing it after START). X+ Piping GCC's output through a pager such as less(1) avoids X+ any HT problems since the pager performs tab expansion. X+ X+ Generic disadvantages of this remedy are: X+ -- Some very rare terminals might support SGR but not EL (nobody X+ will use "gcc -fdiagnostics-color" on a terminal that does not X+ support SGR in the first place). X+ -- Having these extra control sequences might somewhat complicate X+ the task of any program trying to parse "gcc -fdiagnostics-color" X+ output in order to extract structuring information from it. X+ A specific disadvantage to doing it after SGR START is: X+ -- Even more possible background color flicker (when timing X+ with the monitor's redraw is just right), even when not at the X+ bottom of the screen. X+ There are no additional disadvantages specific to doing it after X+ SGR END. X+ X+ It would be impractical for GCC to become a full-fledged X+ terminal program linked against ncurses or the like, so it will X+ not detect terminfo(5) capabilities. */ X+#define COLOR_SEPARATOR ";" X+#define COLOR_NONE "00" X+#define COLOR_BOLD "01" X+#define COLOR_UNDERSCORE "04" X+#define COLOR_BLINK "05" X+#define COLOR_REVERSE "07" X+#define COLOR_FG_BLACK "30" X+#define COLOR_FG_RED "31" X+#define COLOR_FG_GREEN "32" X+#define COLOR_FG_YELLOW "33" X+#define COLOR_FG_BLUE "34" X+#define COLOR_FG_MAGENTA "35" X+#define COLOR_FG_CYAN "36" X+#define COLOR_FG_WHITE "37" X+#define COLOR_BG_BLACK "40" X+#define COLOR_BG_RED "41" X+#define COLOR_BG_GREEN "42" X+#define COLOR_BG_YELLOW "43" X+#define COLOR_BG_BLUE "44" X+#define COLOR_BG_MAGENTA "45" X+#define COLOR_BG_CYAN "46" X+#define COLOR_BG_WHITE "47" X+#define SGR_START "\33[" X+#define SGR_END "m\33[K" X+#define SGR_SEQ(str) SGR_START str SGR_END X+#define SGR_RESET SGR_SEQ("") X+ X+ X+/* The context and logic for choosing default --color screen attributes X+ (foreground and background colors, etc.) are the following. X+ -- There are eight basic colors available, each with its own X+ nominal luminosity to the human eye and foreground/background X+ codes (black [0 %, 30/40], blue [11 %, 34/44], red [30 %, 31/41], X+ magenta [41 %, 35/45], green [59 %, 32/42], cyan [70 %, 36/46], X+ yellow [89 %, 33/43], and white [100 %, 37/47]). X+ -- Sometimes, white as a background is actually implemented using X+ a shade of light gray, so that a foreground white can be visible X+ on top of it (but most often not). X+ -- Sometimes, black as a foreground is actually implemented using X+ a shade of dark gray, so that it can be visible on top of a X+ background black (but most often not). X+ -- Sometimes, more colors are available, as extensions. X+ -- Other attributes can be selected/deselected (bold [1/22], X+ underline [4/24], standout/inverse [7/27], blink [5/25], and X+ invisible/hidden [8/28]). They are sometimes implemented by X+ using colors instead of what their names imply; e.g., bold is X+ often achieved by using brighter colors. In practice, only bold X+ is really available to us, underline sometimes being mapped by X+ the terminal to some strange color choice, and standout best X+ being left for use by downstream programs such as less(1). X+ -- We cannot assume that any of the extensions or special features X+ are available for the purpose of choosing defaults for everyone. X+ -- The most prevalent default terminal backgrounds are pure black X+ and pure white, and are not necessarily the same shades of X+ those as if they were selected explicitly with SGR sequences. X+ Some terminals use dark or light pictures as default background, X+ but those are covered over by an explicit selection of background X+ color with an SGR sequence; their users will appreciate their X+ background pictures not be covered like this, if possible. X+ -- Some uses of colors attributes is to make some output items X+ more understated (e.g., context lines); this cannot be achieved X+ by changing the background color. X+ -- For these reasons, the GCC color defaults should strive not X+ to change the background color from its default, unless it's X+ for a short item that should be highlighted, not understated. X+ -- The GCC foreground color defaults (without an explicitly set X+ background) should provide enough contrast to be readable on any X+ terminal with either a black (dark) or white (light) background. X+ This only leaves red, magenta, green, and cyan (and their bold X+ counterparts) and possibly bold blue. */ X+/* Default colors. The user can overwrite them using environment X+ variable GCC_COLORS. */ X+struct color_cap X+{ X+ const char *name; X+ const char *val; X+ unsigned char name_len; X+ bool free_val; X+}; X+ X+/* For GCC_COLORS. */ X+static struct color_cap color_dict[] = X+{ X+ { "error", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_RED), 5, false }, X+ { "warning", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_MAGENTA), X+ 7, false }, X+ { "note", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_CYAN), 4, false }, X+ { "caret", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_GREEN), 5, false }, X+ { "locus", SGR_SEQ (COLOR_BOLD), 5, false }, X+ { "quote", SGR_SEQ (COLOR_BOLD), 5, false }, X+ { NULL, NULL, 0, false } X+}; X+ X+const char * X+colorize_start (bool show_color, const char *name, size_t name_len) X+{ X+ struct color_cap const *cap; X+ X+ if (!show_color) X+ return ""; X+ X+ for (cap = color_dict; cap->name; cap++) X+ if (cap->name_len == name_len X+ && memcmp (cap->name, name, name_len) == 0) X+ break; X+ if (cap->name == NULL) X+ return ""; X+ X+ return cap->val; X+} X+ X+const char * X+colorize_stop (bool show_color) X+{ X+ return show_color ? SGR_RESET : ""; X+} X+ X+/* Parse GCC_COLORS. The default would look like: X+ GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' X+ No character escaping is needed or supported. */ X+static bool X+parse_gcc_colors (void) X+{ X+ const char *p, *q, *name, *val; X+ char *b; X+ size_t name_len = 0, val_len = 0; X+ X+ p = getenv ("GCC_COLORS"); /* Plural! */ X+ if (p == NULL) X+ return true; X+ if (*p == '\0') X+ return false; X+ X+ name = q = p; X+ val = NULL; X+ /* From now on, be well-formed or you're gone. */ X+ for (;;) X+ if (*q == ':' || *q == '\0') X+ { X+ struct color_cap *cap; X+ X+ if (val) X+ val_len = q - val; X+ else X+ name_len = q - name; X+ /* Empty name without val (empty cap) X+ won't match and will be ignored. */ X+ for (cap = color_dict; cap->name; cap++) X+ if (cap->name_len == name_len X+ && memcmp (cap->name, name, name_len) == 0) X+ break; X+ /* If name unknown, go on for forward compatibility. */ X+ if (cap->val && val) X+ { X+ if (cap->free_val) X+ free (CONST_CAST (char *, cap->val)); X+ b = XNEWVEC (char, val_len + sizeof (SGR_SEQ (""))); X+ memcpy (b, SGR_START, strlen (SGR_START)); X+ memcpy (b + strlen (SGR_START), val, val_len); X+ memcpy (b + strlen (SGR_START) + val_len, SGR_END, X+ sizeof (SGR_END)); X+ cap->val = (const char *) b; X+ cap->free_val = true; X+ } X+ if (*q == '\0') X+ return true; X+ name = ++q; X+ val = NULL; X+ } X+ else if (*q == '=') X+ { X+ if (q == name || val) X+ return true; X+ X+ name_len = q - name; X+ val = ++q; /* Can be the empty string. */ X+ } X+ else if (val == NULL) X+ q++; /* Accumulate name. */ X+ else if (*q == ';' || (*q >= '0' && *q <= '9')) X+ q++; /* Accumulate val. Protect the terminal from being sent X+ garbage. */ X+ else X+ return true; X+} X+ X+#if defined(_WIN32) X+static bool X+should_colorize (void) X+{ X+ return false; X+} X+ X+bool X+colorize_init (void) X+{ X+ return false; X+} X+#else X+ X+/* Return true if we should use color when in auto mode, false otherwise. */ X+static bool X+should_colorize (void) X+{ X+ char const *t = getenv ("TERM"); X+ return t && strcmp (t, "dumb") != 0 && isatty (STDERR_FILENO); X+} X+ X+ X+bool X+colorize_init (diagnostic_color_rule_t rule) X+{ X+ switch (rule) X+ { X+ case DIAGNOSTICS_COLOR_NO: X+ return false; X+ case DIAGNOSTICS_COLOR_YES: X+ return parse_gcc_colors (); X+ case DIAGNOSTICS_COLOR_AUTO: X+ if (should_colorize ()) X+ return parse_gcc_colors (); X+ else X+ return false; X+ default: X+ gcc_unreachable (); X+ } X+} X+#endif 7ce27e8f33f1b5377cb15c35726aee8b echo x - files/patch-gcc_diagnostic.c sed 's/^X//' >files/patch-gcc_diagnostic.c << '326316ec1be3a844607af0a4bcad2cdf' X--- gcc/diagnostic.c.orig X+++ gcc/diagnostic.c X@@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see X #include "intl.h" X #include "backtrace.h" X #include "diagnostic.h" X+#include "diagnostic-color.h" X X #define pedantic_warning_kind(DC) \ X ((DC)->pedantic_errors ? DK_ERROR : DK_WARNING) X@@ -210,12 +210,31 @@ diagnostic_build_prefix (diagnostic_context *context, X const diagnostic_info *diagnostic) X { X static const char *const diagnostic_kind_text[] = { X-#define DEFINE_DIAGNOSTIC_KIND(K, T) (T), X+#define DEFINE_DIAGNOSTIC_KIND(K, T, C) (T), X #include "diagnostic.def" X #undef DEFINE_DIAGNOSTIC_KIND X "must-not-happen" X }; X+ static const char *const diagnostic_kind_color[] = { X+#define DEFINE_DIAGNOSTIC_KIND(K, T, C) (C), X+#include "diagnostic.def" X+#undef DEFINE_DIAGNOSTIC_KIND X+ NULL X+ }; X const char *text = _(diagnostic_kind_text[diagnostic->kind]); X+ const char *text_cs = "", *text_ce = ""; X+ const char *locus_cs, *locus_ce; X+ pretty_printer *pp = context->printer; X+ X+ if (diagnostic_kind_color[diagnostic->kind]) X+ { X+ text_cs = colorize_start (pp_show_color (pp), X+ diagnostic_kind_color[diagnostic->kind]); X+ text_ce = colorize_stop (pp_show_color (pp)); X+ } X+ locus_cs = colorize_start (pp_show_color (pp), "locus"); X+ locus_ce = colorize_stop (pp_show_color (pp)); X+ X expanded_location s = expand_location_to_spelling_point (diagnostic->location); X if (diagnostic->override_column) X s.column = diagnostic->override_column; X@@ -223,10 +242,13 @@ diagnostic_build_prefix (diagnostic_context *context, X X return X (s.file == NULL X- ? build_message_string ("%s: %s", progname, text) X+ ? build_message_string ("%s%s:%s %s%s%s", locus_cs, progname, locus_ce, X+ text_cs, text, text_ce) X : context->show_column X- ? build_message_string ("%s:%d:%d: %s", s.file, s.line, s.column, text) X- : build_message_string ("%s:%d: %s", s.file, s.line, text)); X+ ? build_message_string ("%s%s:%d:%d:%s %s%s%s", locus_cs, s.file, s.line, X+ s.column, locus_ce, text_cs, text, text_ce) X+ : build_message_string ("%s%s:%d:%s %s%s%s", locus_cs, s.file, s.line, locus_ce, X+ text_cs, text, text_ce)); X } X X /* If LINE is longer than MAX_WIDTH, and COLUMN is not smaller than X@@ -262,7 +284,7 @@ diagnostic_show_locus (diagnostic_context * context, X expanded_location s; X int max_width; X const char *saved_prefix; X- X+ const char *caret_cs, *caret_ce; X X if (!context->show_caret X || diagnostic->location <= BUILTINS_LOCATION X@@ -290,9 +312,13 @@ diagnostic_show_locus (diagnostic_context * context, X line++; X } X pp_newline (context->printer); X+ caret_cs = colorize_start (pp_show_color (context->printer), "caret"); X+ caret_ce = colorize_stop (pp_show_color (context->printer)); X+ X /* pp_printf does not implement %*c. */ X- buffer = XALLOCAVEC (char, s.column + 3); X- snprintf (buffer, s.column + 3, " %*c", s.column, '^'); X+ size_t len = s.column + 3 + strlen (caret_cs) + strlen (caret_ce); X+ buffer = XALLOCAVEC (char, len); X+ snprintf (buffer, len, "%s %*c%s", caret_cs, s.column, '^', caret_ce); X pp_string (context->printer, buffer); X pp_set_prefix (context->printer, saved_prefix); X } 326316ec1be3a844607af0a4bcad2cdf echo x - files/patch-gcc_c-family_c-format.c sed 's/^X//' >files/patch-gcc_c-family_c-format.c << '0d3364fdf973b68b13a17e686e486286' X--- gcc/c-family/c-format.c X+++ gcc/c-family/c-format.c X@@ -654,9 +654,10 @@ static const format_char_info gcc_diag_char_table[] = X /* Custom conversion specifiers. */ X X /* These will require a "tree" at runtime. */ X- { "K", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL }, X+ { "K", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL }, X X- { "<>'", 0, STD_C89, NOARGUMENTS, "", "", NULL }, X+ { "r", 1, STD_C89, { T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "cR", NULL }, X+ { "<>'R",0, STD_C89, NOARGUMENTS, "", "", NULL }, X { "m", 0, STD_C89, NOARGUMENTS, "q", "", NULL }, X { NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL } X }; X@@ -676,9 +677,10 @@ static const format_char_info gcc_tdiag_char_table[] = X /* These will require a "tree" at runtime. */ X { "DFKTEV", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL }, X X- { "v", 0,STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q#", "", NULL }, X+ { "v", 0, STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q#", "", NULL }, X X- { "<>'", 0, STD_C89, NOARGUMENTS, "", "", NULL }, X+ { "r", 1, STD_C89, { T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "cR", NULL }, X+ { "<>'R",0, STD_C89, NOARGUMENTS, "", "", NULL }, X { "m", 0, STD_C89, NOARGUMENTS, "q", "", NULL }, X { NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL } X }; X@@ -698,9 +700,10 @@ static const format_char_info gcc_cdiag_char_table[] = X /* These will require a "tree" at runtime. */ X { "DEFKTV", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL }, X X- { "v", 0,STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q#", "", NULL }, X+ { "v", 0, STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q#", "", NULL }, X X- { "<>'", 0, STD_C89, NOARGUMENTS, "", "", NULL }, X+ { "r", 1, STD_C89, { T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "cR", NULL }, X+ { "<>'R",0, STD_C89, NOARGUMENTS, "", "", NULL }, X { "m", 0, STD_C89, NOARGUMENTS, "q", "", NULL }, X { NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL } X }; X@@ -725,7 +728,8 @@ static const format_char_info gcc_cxxdiag_char_table[] = X /* These accept either an 'int' or an 'enum tree_code' (which is handled as an 'int'.) */ X { "CLOPQ",0,STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL }, X X- { "<>'", 0, STD_C89, NOARGUMENTS, "", "", NULL }, X+ { "r", 1, STD_C89, { T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "cR", NULL }, X+ { "<>'R",0, STD_C89, NOARGUMENTS, "", "", NULL }, X { "m", 0, STD_C89, NOARGUMENTS, "q", "", NULL }, X { NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL } 0d3364fdf973b68b13a17e686e486286 echo x - files/patch-gcc_cp_error.c sed 's/^X//' >files/patch-gcc_cp_error.c << '88a37f29e530f76fb0fac40a83a68029' X--- ./gcc/cp/error.c.orig 2013-05-09 15:51:05.000000000 +0200 X+++ ./gcc/cp/error.c 2014-02-17 19:46:58.000000000 +0100 X@@ -3010,14 +3010,14 @@ X { X if (context->show_column && s.column != 0) X pp_printf (context->printer, X- _(" inlined from %qs at %s:%d:%d"), X+ _(" inlined from %qs at %r%s:%d:%d%R"), X cxx_printable_name_translate (fndecl, 2), X- s.file, s.line, s.column); X+ "locus", s.file, s.line, s.column); X else X pp_printf (context->printer, X- _(" inlined from %qs at %s:%d"), X+ _(" inlined from %qs at %r%s:%d%R"), X cxx_printable_name_translate (fndecl, 2), X- s.file, s.line); X+ "locus", s.file, s.line); X X } X else X@@ -3099,11 +3099,11 @@ X xloc = expand_location (loc); X X if (context->show_column) X- pp_verbatim (context->printer, _("%s:%d:%d: "), X- xloc.file, xloc.line, xloc.column); X+ pp_verbatim (context->printer, _("%r%s:%d:%d:%R "), X+ "locus", xloc.file, xloc.line, xloc.column); X else X- pp_verbatim (context->printer, _("%s:%d: "), X- xloc.file, xloc.line); X+ pp_verbatim (context->printer, _("%r%s:%d:%R "), X+ "locus", xloc.file, xloc.line); X X if (t != NULL) X { X@@ -3177,14 +3177,16 @@ X xloc = expand_location (loc); X if (context->show_column) X pp_verbatim (context->printer, X- _("%s:%d:%d: [ skipping %d instantiation contexts, " X- "use -ftemplate-backtrace-limit=0 to disable ]\n"), X- xloc.file, xloc.line, xloc.column, skip); X+ _("%r%s:%d:%d:%R [ skipping %d instantiation " X+ "contexts, use -ftemplate-backtrace-limit=0 to " X+ "disable ]\n"), X+ "locus", xloc.file, xloc.line, xloc.column, skip); X else X pp_verbatim (context->printer, X- _("%s:%d: [ skipping %d instantiation contexts, " X- "use -ftemplate-backtrace-limit=0 to disable ]\n"), X- xloc.file, xloc.line, skip); X+ _("%r%s:%d:%R [ skipping %d instantiation " X+ "contexts, use -ftemplate-backtrace-limit=0 to " X+ "disable ]\n"), X+ "locus", xloc.file, xloc.line, skip); X X do { X loc = t->locus; X@@ -3246,12 +3248,12 @@ X const char *s = expr_as_string (t, 0); X if (context->show_column) X pp_verbatim (context->printer, X- _("%s:%d:%d: in constexpr expansion of %qs"), X- xloc.file, xloc.line, xloc.column, s); X+ _("%r%s:%d:%d:%R in constexpr expansion of %qs"), X+ "locus", xloc.file, xloc.line, xloc.column, s); X else X pp_verbatim (context->printer, X- _("%s:%d: in constexpr expansion of %qs"), X- xloc.file, xloc.line, s); X+ _("%r%s:%d:%R in constexpr expansion of %qs"), X+ "locus", xloc.file, xloc.line, s); X pp_base_newline (context->printer); X } X } 88a37f29e530f76fb0fac40a83a68029 echo x - files/patch-gcc_Makefile.in sed 's/^X//' >files/patch-gcc_Makefile.in << '316c6780940ce47b4429f89b0e216eb6' X--- gcc/Makefile.in X+++ gcc/Makefile.in X@@ -1463,7 +1463,7 @@ X X # Objects in libcommon.a, potentially used by all host binaries and with X # no target dependencies. X-OBJS-libcommon = diagnostic.o pretty-print.o intl.o input.o version.o X+OBJS-libcommon = diagnostic.o diagnostic-color.o pretty-print.o intl.o input.o version.o X X # Objects in libcommon-target.a, used by drivers and by the core X # compiler and containing target-dependent code. X@@ -2659,11 +2659,12 @@ X $(GIMPLE_H) realmpfr.h $(TREE_FLOW_H) X diagnostic.o : diagnostic.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ X version.h $(DEMANGLE_H) $(INPUT_H) intl.h $(BACKTRACE_H) $(DIAGNOSTIC_H) \ X- diagnostic.def X+ diagnostic.def diagnostic-color.h X+diagnostic-color.o : diagnostic-color.c $(CONFIG_H) $(SYSTEM_H) diagnostic-color.h X opts.o : opts.c $(OPTS_H) $(OPTIONS_H) $(DIAGNOSTIC_CORE_H) $(CONFIG_H) $(SYSTEM_H) \ X coretypes.h dumpfile.h $(TM_H) \ X $(DIAGNOSTIC_H) insn-attr-common.h intl.h $(COMMON_TARGET_H) \ X- $(FLAGS_H) $(PARAMS_H) opts-diagnostic.h X+ $(FLAGS_H) $(PARAMS_H) opts-diagnostic.h diagnostic-color.h X opts-global.o : opts-global.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ X $(DIAGNOSTIC_H) $(OPTS_H) $(FLAGS_H) $(GGC_H) $(TREE_H) langhooks.h \ X $(TM_H) $(RTL_H) $(DBGCNT_H) debug.h $(LTO_STREAMER_H) output.h \ X@@ -2700,7 +2701,7 @@ X $(OPTS_H) params.def tree-mudflap.h $(TREE_PASS_H) $(GIMPLE_H) \ X tree-ssa-alias.h $(PLUGIN_H) realmpfr.h tree-diagnostic.h \ X $(TREE_PRETTY_PRINT_H) opts-diagnostic.h $(COMMON_TARGET_H) \ X- tsan.h X+ tsan.h diagnostic-color.h X X hwint.o : hwint.c $(CONFIG_H) $(SYSTEM_H) $(DIAGNOSTIC_CORE_H) X X@@ -3409,7 +3410,8 @@ X $(PARAMS_H) $(DIAGNOSTIC_CORE_H) X pointer-set.o: pointer-set.c pointer-set.h $(CONFIG_H) $(SYSTEM_H) X hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(HOOKS_H) X-pretty-print.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h intl.h $(PRETTY_PRINT_H) X+pretty-print.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h intl.h $(PRETTY_PRINT_H) \ X+ diagnostic-color.h X errors.o : errors.c $(CONFIG_H) $(SYSTEM_H) errors.h X dbgcnt.o: dbgcnt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h dumpfile.h \ X $(DIAGNOSTIC_CORE_H) $(DBGCNT_H) 316c6780940ce47b4429f89b0e216eb6 echo x - files/patch-gcc_toplev.c sed 's/^X//' >files/patch-gcc_toplev.c << '40c8cf1a67008fb27633a08c51b2dce1' X--- gcc/toplev.c X+++ gcc/toplev.c X@@ -74,6 +74,7 @@ along with GCC; see the file COPYING3. If not see X #include "gimple.h" X #include "tree-ssa-alias.h" X #include "plugin.h" X+#include "diagnostic-color.h" X X #if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO) X #include "dbxout.h" X@@ -1209,6 +1210,13 @@ process_options (void) X X maximum_field_alignment = initial_max_fld_align * BITS_PER_UNIT; X X+ /* Default to -fdiagnostics-color=auto if GCC_COLORS is in the environment, X+ otherwise default to -fdiagnostics-color=never. */ X+ if (!global_options_set.x_flag_diagnostics_show_color X+ && getenv ("GCC_COLORS")) X+ pp_show_color (global_dc->printer) X+ = colorize_init (DIAGNOSTICS_COLOR_AUTO); X+ X /* Allow the front end to perform consistency checks and do further X initialization based on the command line options. This hook also X sets the original filename if appropriate (e.g. foo.i -> foo.c) 40c8cf1a67008fb27633a08c51b2dce1 echo x - files/patch-gcc_testsuite_lib_c-compat.exp sed 's/^X//' >files/patch-gcc_testsuite_lib_c-compat.exp << 'e556f78dab48570f7019931dc3d7506d' X--- gcc/testsuite/lib/c-compat.exp X+++ gcc/testsuite/lib/c-compat.exp X@@ -34,7 +34,7 @@ X # X proc compat-use-alt-compiler { } { X global GCC_UNDER_TEST ALT_CC_UNDER_TEST X- global compat_same_alt compat_alt_caret X+ global compat_same_alt compat_alt_caret compat_alt_color X global TEST_ALWAYS_FLAGS X X # We don't need to do this if the alternate compiler is actually X@@ -44,6 +44,9 @@ proc compat-use-alt-compiler { } { X if { $compat_alt_caret == 0 } then { X regsub -- "-fno-diagnostics-show-caret" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS X } X+ if { $compat_alt_color == 0 } then { X+ regsub -- "-fdiagnostics-color=never" $TEST_ALWAYS_FLAGS "" TEST_ALWAYS_FLAGS X+ } X } X } X X@@ -70,9 +73,11 @@ X global compat_same_alt X global compat_have_dfp X global compat_alt_caret X+ global compat_alt_color X global TEST_ALWAYS_FLAGS compat_save_TEST_ALWAYS_FLAGS X X set compat_alt_caret 0 X+ set compat_alt_color 0 X set compat_save_TEST_ALWAYS_FLAGS $TEST_ALWAYS_FLAGS X X verbose "compat_setup_dfp: $compat_use_alt $compat_same_alt" 2 X@@ -88,6 +93,10 @@ X int dummy; } "-fno-diagnostics-show-caret"] != 0 } { X set compat_alt_caret 1 X } X+ if { [check_no_compiler_messages_nocache compat_alt_has_color object { X+ int dummy; } "-fdiagnostics-color=never"] != 0 } { X+ set compat_alt_color 1 X+ } X compat-use-tst-compiler X } e556f78dab48570f7019931dc3d7506d echo x - files/patch-gcc_diagnostic-core.h sed 's/^X//' >files/patch-gcc_diagnostic-core.h << '061428f8ff88fa7105e9f778299df05e' X--- gcc/diagnostic-core.h X+++ gcc/diagnostic-core.h X@@ -28,7 +28,7 @@ along with GCC; see the file COPYING3. If not see X /* Constants used to discriminate diagnostics. */ X typedef enum X { X-#define DEFINE_DIAGNOSTIC_KIND(K, msgid) K, X+#define DEFINE_DIAGNOSTIC_KIND(K, msgid, C) K, X #include "diagnostic.def" X #undef DEFINE_DIAGNOSTIC_KIND X DK_LAST_DIAGNOSTIC_KIND, 061428f8ff88fa7105e9f778299df05e echo x - files/patch-gcc_pretty-print.h sed 's/^X//' >files/patch-gcc_pretty-print.h << '918379d4b01f7a1f008aeaeb4cb76843' X--- gcc/pretty-print.h X+++ gcc/pretty-print.h X@@ -151,6 +151,9 @@ typedef bool (*printer_fn) (pretty_printer *, text_info *, const char *, X output. */ X #define pp_translate_identifiers(PP) pp_base (PP)->translate_identifiers X X+/* True if colors should be shown. */ X+#define pp_show_color(PP) pp_base (PP)->show_color X+ X /* The data structure that contains the bare minimum required to do X proper pretty-printing. Clients may derived from this structure X and add additional fields they need. */ X@@ -194,6 +197,9 @@ struct pretty_print_info X /* Nonzero means identifiers are translated to the locale character X set on output. */ X bool translate_identifiers; X+ X+ /* Nonzero means that text should be colorized. */ X+ bool show_color; X }; X X #define pp_set_line_maximum_length(PP, L) \ 918379d4b01f7a1f008aeaeb4cb76843 echo x - files/patch-gcc_langhooks.c sed 's/^X//' >files/patch-gcc_langhooks.c << '3659d50959e6980b1bc667442790564c' X--- gcc/langhooks.c X+++ gcc/langhooks.c X@@ -452,14 +452,14 @@ X { X if (context->show_column) X pp_printf (context->printer, X- _(" inlined from %qs at %s:%d:%d"), X+ _(" inlined from %qs at %r%s:%d:%d%R"), X identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 2)), X- s.file, s.line, s.column); X+ "locus", s.file, s.line, s.column); X else X pp_printf (context->printer, X- _(" inlined from %qs at %s:%d"), X+ _(" inlined from %qs at %r%s:%d%R"), X identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 2)), X- s.file, s.line); X+ "locus", s.file, s.line); X X } X else 3659d50959e6980b1bc667442790564c echo x - files/patch-gcc_diagnostic.def sed 's/^X//' >files/patch-gcc_diagnostic.def << 'aaef6f41a8c68aa86329ca09c0126fa7' X--- gcc/diagnostic.def X+++ gcc/diagnostic.def X@@ -22,26 +22,26 @@ X kind specified. I.e. they're uninitialized. Within the diagnostic X machinery, this kind also means "don't change the existing kind", X meaning "no change is specified". */ X-DEFINE_DIAGNOSTIC_KIND (DK_UNSPECIFIED, "") X+DEFINE_DIAGNOSTIC_KIND (DK_UNSPECIFIED, "", NULL) X X /* If a diagnostic is set to DK_IGNORED, it won't get reported at all. X This is used by the diagnostic machinery when it wants to disable a X diagnostic without disabling the option which causes it. */ X-DEFINE_DIAGNOSTIC_KIND (DK_IGNORED, "") X+DEFINE_DIAGNOSTIC_KIND (DK_IGNORED, "", NULL) X X /* The remainder are real diagnostic types. */ X-DEFINE_DIAGNOSTIC_KIND (DK_FATAL, "fatal error: ") X-DEFINE_DIAGNOSTIC_KIND (DK_ICE, "internal compiler error: ") X-DEFINE_DIAGNOSTIC_KIND (DK_ERROR, "error: ") X-DEFINE_DIAGNOSTIC_KIND (DK_SORRY, "sorry, unimplemented: ") X-DEFINE_DIAGNOSTIC_KIND (DK_WARNING, "warning: ") X-DEFINE_DIAGNOSTIC_KIND (DK_ANACHRONISM, "anachronism: ") X-DEFINE_DIAGNOSTIC_KIND (DK_NOTE, "note: ") X-DEFINE_DIAGNOSTIC_KIND (DK_DEBUG, "debug: ") X+DEFINE_DIAGNOSTIC_KIND (DK_FATAL, "fatal error: ", "error") X+DEFINE_DIAGNOSTIC_KIND (DK_ICE, "internal compiler error: ", "error") X+DEFINE_DIAGNOSTIC_KIND (DK_ERROR, "error: ", "error") X+DEFINE_DIAGNOSTIC_KIND (DK_SORRY, "sorry, unimplemented: ", "error") X+DEFINE_DIAGNOSTIC_KIND (DK_WARNING, "warning: ", "warning") X+DEFINE_DIAGNOSTIC_KIND (DK_ANACHRONISM, "anachronism: ", "warning") X+DEFINE_DIAGNOSTIC_KIND (DK_NOTE, "note: ", "note") X+DEFINE_DIAGNOSTIC_KIND (DK_DEBUG, "debug: ", "note") X /* These two would be re-classified as DK_WARNING or DK_ERROR, so the X prefix does not matter. */ X-DEFINE_DIAGNOSTIC_KIND (DK_PEDWARN, "pedwarn: ") X-DEFINE_DIAGNOSTIC_KIND (DK_PERMERROR, "permerror: ") X+DEFINE_DIAGNOSTIC_KIND (DK_PEDWARN, "pedwarn: ", NULL) X+DEFINE_DIAGNOSTIC_KIND (DK_PERMERROR, "permerror: ", NULL) X X aaef6f41a8c68aa86329ca09c0126fa7 echo x - files/patch-gcc_doc_invoke.texi sed 's/^X//' >files/patch-gcc_doc_invoke.texi << 'ce6c7cc87b1a367f422f0c79cca89183' X--- gcc/doc/invoke.texi X+++ gcc/doc/invoke.texi X@@ -226,6 +226,7 @@ Objective-C and Objective-C++ Dialects}. X @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}. X @gccoptlist{-fmessage-length=@var{n} @gol X -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]} @gol X+-fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]} @gol X -fno-diagnostics-show-option -fno-diagnostics-show-caret} X X @item Warning Options X@@ -2956,6 +2957,77 @@ messages reporter to emit the same source location information (as X prefix) for physical lines that result from the process of breaking X a message which is too long to fit on a single line. X X+@item -fdiagnostics-color[=@var{WHEN}] X+@itemx -fno-diagnostics-color X+@opindex fdiagnostics-color X+@cindex highlight, color, colour X+@vindex GCC_COLORS @r{environment variable} X+Use color in diagnostics. @var{WHEN} is @samp{never}, @samp{always}, X+or @samp{auto}. The default is @samp{never} if @env{GCC_COLORS} environment X+variable isn't present in the environment, and @samp{auto} otherwise. X+@samp{auto} means to use color only when the standard error is a terminal. X+The forms @option{-fdiagnostics-color} and @option{-fno-diagnostics-color} are X+aliases for @option{-fdiagnostics-color=always} and X+@option{-fdiagnostics-color=never}, respectively. X+ X+The colors are defined by the environment variable @env{GCC_COLORS}. X+Its value is a colon-separated list of capabilities and Select Graphic X+Rendition (SGR) substrings. SGR commands are interpreted by the X+terminal or terminal emulator. (See the section in the documentation X+of your text terminal for permitted values and their meanings as X+character attributes.) These substring values are integers in decimal X+representation and can be concatenated with semicolons. X+Common values to concatenate include X+@samp{1} for bold, X+@samp{4} for underline, X+@samp{5} for blink, X+@samp{7} for inverse, X+@samp{39} for default foreground color, X+@samp{30} to @samp{37} for foreground colors, X+@samp{90} to @samp{97} for 16-color mode foreground colors, X+@samp{38;5;0} to @samp{38;5;255} X+for 88-color and 256-color modes foreground colors, X+@samp{49} for default background color, X+@samp{40} to @samp{47} for background colors, X+@samp{100} to @samp{107} for 16-color mode background colors, X+and @samp{48;5;0} to @samp{48;5;255} X+for 88-color and 256-color modes background colors. X+ X+The default @env{GCC_COLORS} is X+@samp{error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01} X+where @samp{01;31} is bold red, @samp{01;35} is bold magenta, X+@samp{01;36} is bold cyan, @samp{01;32} is bold green and X+@samp{01} is bold. Setting @env{GCC_COLORS} to the empty X+string disables colors. X+Supported capabilities are as follows. X+ X+@table @code X+@item error= X+@vindex error GCC_COLORS @r{capability} X+SGR substring for error: markers. X+ X+@item warning= X+@vindex warning GCC_COLORS @r{capability} X+SGR substring for warning: markers. X+ X+@item note= X+@vindex note GCC_COLORS @r{capability} X+SGR substring for note: markers. X+ X+@item caret= X+@vindex caret GCC_COLORS @r{capability} X+SGR substring for caret line. X+ X+@item locus= X+@vindex locus GCC_COLORS @r{capability} X+SGR substring for location information, @samp{file:line} or X+@samp{file:line:column} etc. X+ X+@item quote= X+@vindex quote GCC_COLORS @r{capability} X+SGR substring for information printed within quotes. X+@end table X+ X @item -fno-diagnostics-show-option X @opindex fno-diagnostics-show-option X @opindex fdiagnostics-show-option ce6c7cc87b1a367f422f0c79cca89183 echo x - files/patch-gcc_diagnostic-color.h sed 's/^X//' >files/patch-gcc_diagnostic-color.h << '969da4dce556f7982f64542e38d373cc' X--- /dev/null X+++ gcc/diagnostic-color.h X@@ -0,0 +1,66 @@ X+/* Copyright (C) 2013 Free Software Foundation, Inc. X+ Contributed by Manuel Lopez-Ibanez X+ X+This file is part of GCC. X+ X+GCC is free software; you can redistribute it and/or modify it under X+the terms of the GNU General Public License as published by the Free X+Software Foundation; either version 3, or (at your option) any later X+version. X+ X+GCC is distributed in the hope that it will be useful, but WITHOUT ANY X+WARRANTY; without even the implied warranty of MERCHANTABILITY or X+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License X+for more details. X+ X+You should have received a copy of the GNU General Public License X+along with GCC; see the file COPYING3. If not see X+. */ X+ X+/* Based on code from: */ X+/* grep.c - main driver file for grep. X+ Copyright (C) 1992, 1997-2002, 2004-2013 Free Software Foundation, Inc. X+ X+ This program is free software; you can redistribute it and/or modify X+ it under the terms of the GNU General Public License as published by X+ the Free Software Foundation; either version 3, or (at your option) X+ any later version. X+ X+ This program is distributed in the hope that it will be useful, X+ but WITHOUT ANY WARRANTY; without even the implied warranty of X+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the X+ GNU General Public License for more details. X+ X+ You should have received a copy of the GNU General Public License X+ along with this program; if not, write to the Free Software X+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA X+ 02110-1301, USA. X+ X+ Written July 1992 by Mike Haertel. */ X+ X+#ifndef GCC_DIAGNOSTIC_COLOR_H X+#define GCC_DIAGNOSTIC_COLOR_H X+ X+/* How often diagnostics are prefixed by their locations: X+ o DIAGNOSTICS_SHOW_PREFIX_NEVER: never - not yet supported; X+ o DIAGNOSTICS_SHOW_PREFIX_ONCE: emit only once; X+ o DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE: emit each time a physical X+ line is started. */ X+typedef enum X+{ X+ DIAGNOSTICS_COLOR_NO = 0, X+ DIAGNOSTICS_COLOR_YES = 1, X+ DIAGNOSTICS_COLOR_AUTO = 2 X+} diagnostic_color_rule_t; X+ X+const char *colorize_start (bool, const char *, size_t); X+const char *colorize_stop (bool); X+bool colorize_init (diagnostic_color_rule_t); X+ X+inline const char * X+colorize_start (bool show_color, const char *name) X+{ X+ return colorize_start (show_color, name, strlen (name)); X+} X+ X+#endif /* ! GCC_DIAGNOSTIC_COLOR_H */ 969da4dce556f7982f64542e38d373cc echo x - files/patch-gcc_dwarf2out.c sed 's/^X//' >files/patch-gcc_dwarf2out.c << 'ad4d1a4ca20ce1fbed8348f859eeb78b' X--- gcc/dwarf2out.c X+++ gcc/dwarf2out.c X@@ -18828,6 +18828,7 @@ gen_producer_string (void) X case OPT_fdiagnostics_show_location_: X case OPT_fdiagnostics_show_option: X case OPT_fdiagnostics_show_caret: X+ case OPT_fdiagnostics_color_: X case OPT_fverbose_asm: X case OPT____: X case OPT__sysroot_: ad4d1a4ca20ce1fbed8348f859eeb78b echo x - files/patch-gcc_pretty-print.c sed 's/^X//' >files/patch-gcc_pretty-print.c << 'a410b22ff12fea749baa3bd690b09af9' X--- ./gcc/pretty-print.c.orig 2013-01-10 21:38:27.000000000 +0100 X+++ ./gcc/pretty-print.c 2014-02-17 21:27:57.000000000 +0100 X@@ -23,6 +23,7 @@ X #include "coretypes.h" X #include "intl.h" X #include "pretty-print.h" X+#include "diagnostic-color.h" X X #if HAVE_ICONV X #include X@@ -226,6 +227,8 @@ X %c: character. X %s: string. X %p: pointer. X+ %r: if pp_show_color(pp), switch to color identified by const char *. X+ %R: if pp_show_color(pp), reset color. X %m: strerror(text->err_no) - does not consume a value from args_ptr. X %%: '%'. X %<: opening quote. X@@ -300,18 +303,37 @@ X continue; X X case '<': X- obstack_grow (&buffer->chunk_obstack, X- open_quote, strlen (open_quote)); X- p++; X- continue; X+ { X+ obstack_grow (&buffer->chunk_obstack, X+ open_quote, strlen (open_quote)); X+ const char *colorstr X+ = colorize_start (pp_show_color (pp), "quote"); X+ obstack_grow (&buffer->chunk_obstack, colorstr, strlen (colorstr)); X+ p++; X+ continue; X+ } X X case '>': X+ { X+ const char *colorstr = colorize_stop (pp_show_color (pp)); X+ obstack_grow (&buffer->chunk_obstack, colorstr, strlen (colorstr)); X+ } X+ /* FALLTHRU */ X case '\'': X obstack_grow (&buffer->chunk_obstack, X close_quote, strlen (close_quote)); X p++; X continue; X X+ case 'R': X+ { X+ const char *colorstr = colorize_stop (pp_show_color (pp)); X+ obstack_grow (&buffer->chunk_obstack, colorstr, X+ strlen (colorstr)); X+ p++; X+ continue; X+ } X+ X case 'm': X { X const char *errstr = xstrerror (text->err_no); X@@ -466,10 +488,19 @@ X gcc_assert (!wide || precision == 0); X X if (quote) X- pp_string (pp, open_quote); X+ { X+ pp_string (pp, open_quote); X+ pp_string (pp, colorize_start (pp_show_color (pp), "quote")); X+ } X X switch (*p) X { X+ case 'r': X+ pp_string (pp, colorize_start (pp_show_color (pp), X+ va_arg (*text->args_ptr, X+ const char *))); X+ break; X+ X case 'c': X pp_character (pp, va_arg (*text->args_ptr, int)); X break; X@@ -563,7 +594,10 @@ X } X X if (quote) X- pp_string (pp, close_quote); X+ { X+ pp_string (pp, colorize_stop (pp_show_color (pp))); X+ pp_string (pp, close_quote); X+ } X X obstack_1grow (&buffer->chunk_obstack, '\0'); X *formatters[argno] = XOBFINISH (&buffer->chunk_obstack, const char *); a410b22ff12fea749baa3bd690b09af9 echo x - files/patch-gcc_opts.c sed 's/^X//' >files/patch-gcc_opts.c << 'c013264529888ccebdaefbb212b56d6a' X--- gcc/opts.c X+++ gcc/opts.c X@@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. If not see X #include "flags.h" X #include "params.h" X #include "diagnostic.h" X+#include "diagnostic-color.h" X #include "opts-diagnostic.h" X #include "insn-attr-common.h" X #include "common/common-target.h" X@@ -1497,6 +1498,11 @@ common_handle_option (struct gcc_options *opts, X dc->show_caret = value; X break; X X+ case OPT_fdiagnostics_color_: X+ pp_show_color (dc->printer) X+ = colorize_init ((diagnostic_color_rule_t) value); X+ break; X+ X case OPT_fdiagnostics_show_option: X dc->show_option_requested = value; X break; c013264529888ccebdaefbb212b56d6a echo x - files/patch-gcc_testsuite_lib_prune.exp sed 's/^X//' >files/patch-gcc_testsuite_lib_prune.exp << 'a62f02ad894cd7784e76bd9581241ad8' X--- gcc/testsuite/lib/prune.exp X+++ gcc/testsuite/lib/prune.exp X@@ -19,7 +19,7 @@ X if ![info exists TEST_ALWAYS_FLAGS] { X set TEST_ALWAYS_FLAGS "" X } X-set TEST_ALWAYS_FLAGS "-fno-diagnostics-show-caret $TEST_ALWAYS_FLAGS" X+set TEST_ALWAYS_FLAGS "-fno-diagnostics-show-caret -fdiagnostics-color=never $TEST_ALWAYS_FLAGS" X X proc prune_gcc_output { text } { X #send_user "Before:$text\n" a62f02ad894cd7784e76bd9581241ad8 exit >Release-Note: >Audit-Trail: >Unformatted: