diagnostic.c (diagnostic_color_init): New.

gcc/ChangeLog:

2014-12-04  Manuel López-Ibáñez  <manu@gcc.gnu.org>

	* diagnostic.c (diagnostic_color_init): New.
	* diagnostic.h: Declare.
	* gcc.c (driver::global_initializations): Use it.
	(driver_handle_option): Handle -fdiagnostics-color_.
	* toplev.c: Do not include diagnostic-color.h.
	(process_options): Do not initialize color diagnostics here.
	* common.opt (fdiagnostics-color=): Add Driver.
	* opts-global.c (init_options_once): Initialize color here.
	* opts.c (common_handle_option): Use diagnostics_color_init.
	* diagnostic-color.h: Fix comment.

From-SVN: r218406
This commit is contained in:
Manuel López-Ibáñez 2014-12-04 23:09:41 +00:00
parent 87aca3a6ae
commit 97aa8bb6e2
9 changed files with 58 additions and 33 deletions

View File

@ -1,3 +1,16 @@
2014-12-04 Manuel López-Ibáñez <manu@gcc.gnu.org>
* diagnostic.c (diagnostic_color_init): New.
* diagnostic.h: Declare.
* gcc.c (driver::global_initializations): Use it.
(driver_handle_option): Handle -fdiagnostics-color_.
* toplev.c: Do not include diagnostic-color.h.
(process_options): Do not initialize color diagnostics here.
* common.opt (fdiagnostics-color=): Add Driver.
* opts-global.c (init_options_once): Initialize color here.
* opts.c (common_handle_option): Use diagnostics_color_init.
* diagnostic-color.h: Fix comment.
2014-12-04 David Malcolm <dmalcolm@redhat.com> 2014-12-04 David Malcolm <dmalcolm@redhat.com>
* tree-pretty-print.c (INDENT): Rename "buffer" to "pp". * tree-pretty-print.c (INDENT): Rename "buffer" to "pp".

View File

@ -1096,7 +1096,7 @@ Common Alias(fdiagnostics-color=,always,never)
; ;
fdiagnostics-color= fdiagnostics-color=
Common Joined RejectNegative Var(flag_diagnostics_show_color) Enum(diagnostic_color_rule) Init(DIAGNOSTICS_COLOR_NO) Driver Common Joined RejectNegative Var(flag_diagnostics_show_color) Enum(diagnostic_color_rule) Init(DIAGNOSTICS_COLOR_NO)
-fdiagnostics-color=[never|always|auto] Colorize diagnostics -fdiagnostics-color=[never|always|auto] Colorize diagnostics
; Required for these enum values. ; Required for these enum values.

View File

@ -41,11 +41,10 @@ along with GCC; see the file COPYING3. If not see
#ifndef GCC_DIAGNOSTIC_COLOR_H #ifndef GCC_DIAGNOSTIC_COLOR_H
#define GCC_DIAGNOSTIC_COLOR_H #define GCC_DIAGNOSTIC_COLOR_H
/* How often diagnostics are prefixed by their locations: /* Whether to add color to diagnostics:
o DIAGNOSTICS_SHOW_PREFIX_NEVER: never - not yet supported; o DIAGNOSTICS_COLOR_NO: never
o DIAGNOSTICS_SHOW_PREFIX_ONCE: emit only once; o DIAGNOSTICS_COLOR_YES: always
o DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE: emit each time a physical o DIAGNOSTICS_COLOR_AUTO: depending on the output stream. */
line is started. */
typedef enum typedef enum
{ {
DIAGNOSTICS_COLOR_NO = 0, DIAGNOSTICS_COLOR_NO = 0,

View File

@ -155,6 +155,34 @@ diagnostic_initialize (diagnostic_context *context, int n_opts)
context->inhibit_notes_p = false; context->inhibit_notes_p = false;
} }
/* Maybe initialize the color support. We require clients to do this
explicitly, since most clients don't want color. When called
without a VALUE, it initializes with DIAGNOSTICS_COLOR_DEFAULT. */
void
diagnostic_color_init (diagnostic_context *context, int value /*= -1 */)
{
/* value == -1 is the default value. */
if (value < 0)
{
/* If DIAGNOSTICS_COLOR_DEFAULT is -1, default to
-fdiagnostics-color=auto if GCC_COLORS is in the environment,
otherwise default to -fdiagnostics-color=never, for other
values default to that
-fdiagnostics-color={never,auto,always}. */
if (DIAGNOSTICS_COLOR_DEFAULT == -1)
{
if (!getenv ("GCC_COLORS"))
return;
value = DIAGNOSTICS_COLOR_AUTO;
}
else
value = DIAGNOSTICS_COLOR_DEFAULT;
}
pp_show_color (context->printer)
= colorize_init ((diagnostic_color_rule_t) value);
}
/* Do any cleaning up required after the last diagnostic is emitted. */ /* Do any cleaning up required after the last diagnostic is emitted. */
void void

View File

@ -266,6 +266,7 @@ extern diagnostic_context *global_dc;
/* Diagnostic related functions. */ /* Diagnostic related functions. */
extern void diagnostic_initialize (diagnostic_context *, int); extern void diagnostic_initialize (diagnostic_context *, int);
extern void diagnostic_color_init (diagnostic_context *, int value = -1);
extern void diagnostic_finish (diagnostic_context *); extern void diagnostic_finish (diagnostic_context *);
extern void diagnostic_report_current_module (diagnostic_context *, location_t); extern void diagnostic_report_current_module (diagnostic_context *, location_t);
extern void diagnostic_show_locus (diagnostic_context *, const diagnostic_info *); extern void diagnostic_show_locus (diagnostic_context *, const diagnostic_info *);

View File

@ -3608,6 +3608,10 @@ driver_handle_option (struct gcc_options *opts,
save_switch (compare_debug_replacement_opt, 0, NULL, validated, true); save_switch (compare_debug_replacement_opt, 0, NULL, validated, true);
return true; return true;
case OPT_fdiagnostics_color_:
diagnostic_color_init (dc, value);
break;
case OPT_Wa_: case OPT_Wa_:
{ {
int prev, j; int prev, j;
@ -6975,6 +6979,7 @@ driver::global_initializations ()
gcc_init_libintl (); gcc_init_libintl ();
diagnostic_initialize (global_dc, 0); diagnostic_initialize (global_dc, 0);
diagnostic_color_init (global_dc);
#ifdef GCC_DRIVER_HOST_INITIALIZATION #ifdef GCC_DRIVER_HOST_INITIALIZATION
/* Perform host dependent initialization when needed. */ /* Perform host dependent initialization when needed. */

View File

@ -261,6 +261,11 @@ init_options_once (void)
initial_lang_mask = lang_hooks.option_lang_mask (); initial_lang_mask = lang_hooks.option_lang_mask ();
lang_hooks.initialize_diagnostics (global_dc); lang_hooks.initialize_diagnostics (global_dc);
/* ??? Ideally, we should do this earlier and the FEs will override
it if desired (none do it so far). However, the way the FEs
construct their pretty-printers means that all previous settings
are overriden. */
diagnostic_color_init (global_dc);
} }
/* Decode command-line options to an array, like /* Decode command-line options to an array, like

View File

@ -30,7 +30,6 @@ along with GCC; see the file COPYING3. If not see
#include "flags.h" #include "flags.h"
#include "params.h" #include "params.h"
#include "diagnostic.h" #include "diagnostic.h"
#include "diagnostic-color.h"
#include "opts-diagnostic.h" #include "opts-diagnostic.h"
#include "insn-attr-common.h" #include "insn-attr-common.h"
#include "common/common-target.h" #include "common/common-target.h"
@ -1771,8 +1770,7 @@ common_handle_option (struct gcc_options *opts,
break; break;
case OPT_fdiagnostics_color_: case OPT_fdiagnostics_color_:
pp_show_color (dc->printer) diagnostic_color_init (dc, value);
= colorize_init ((diagnostic_color_rule_t) value);
break; break;
case OPT_fdiagnostics_show_option: case OPT_fdiagnostics_show_option:

View File

@ -86,7 +86,6 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-expr.h" #include "gimple-expr.h"
#include "gimple.h" #include "gimple.h"
#include "plugin.h" #include "plugin.h"
#include "diagnostic-color.h"
#include "context.h" #include "context.h"
#include "pass_manager.h" #include "pass_manager.h"
#include "auto-profile.h" #include "auto-profile.h"
@ -1268,29 +1267,6 @@ process_options (void)
maximum_field_alignment = initial_max_fld_align * BITS_PER_UNIT; maximum_field_alignment = initial_max_fld_align * BITS_PER_UNIT;
/* If DIAGNOSTICS_COLOR_DEFAULT is -1, default to -fdiagnostics-color=auto
if GCC_COLORS is in the environment, otherwise default to
-fdiagnostics-color=never, for other values default to that
-fdiagnostics-color={never,auto,always}. */
if (!global_options_set.x_flag_diagnostics_show_color)
switch ((int) DIAGNOSTICS_COLOR_DEFAULT)
{
case -1:
if (!getenv ("GCC_COLORS"))
break;
/* FALLTHRU */
case DIAGNOSTICS_COLOR_AUTO:
pp_show_color (global_dc->printer)
= colorize_init (DIAGNOSTICS_COLOR_AUTO);
break;
case DIAGNOSTICS_COLOR_YES:
pp_show_color (global_dc->printer)
= colorize_init (DIAGNOSTICS_COLOR_YES);
break;
default:
break;
}
/* Allow the front end to perform consistency checks and do further /* Allow the front end to perform consistency checks and do further
initialization based on the command line options. This hook also initialization based on the command line options. This hook also
sets the original filename if appropriate (e.g. foo.i -> foo.c) sets the original filename if appropriate (e.g. foo.i -> foo.c)