<div dir="ltr">On Thu, Apr 18, 2013 at 10:51 AM, Matthieu Monrocq <span dir="ltr"><<a href="mailto:matthieu.monrocq@gmail.com" target="_blank">matthieu.monrocq@gmail.com</a>></span> wrote:<br><div class="gmail_extra">
<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra">
<br><br><div class="gmail_quote"><div class="im">On Wed, Apr 17, 2013 at 11:52 PM, Nico Weber <span dir="ltr"><<a href="mailto:nicolasweber@gmx.de" target="_blank">nicolasweber@gmx.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Author: nico<br>
Date: Wed Apr 17 16:52:44 2013<br>
New Revision: 179728<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=179728&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=179728&view=rev</a><br>
Log:<br>
Add support for gcc's spelling of -fcolor-diagnostics.<br>
<br>
See <a href="http://gcc.gnu.org/onlinedocs/gcc/Language-Independent-Options.html" target="_blank">http://gcc.gnu.org/onlinedocs/gcc/Language-Independent-Options.html</a><br>
<br>
<br></blockquote></div><div>Is there any reason to support both ? Or rather, any idea why gcc did not align (since for once *they* are coming late to the party).<br></div></div></div></div></blockquote><div><br></div><div style>
It's what they do. They also have -Wno-conversion-null instead of -Wno-null-conversion, etc.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>It seems rather wasteful to have both...<span class=""><font color="#888888"><br><br>
</font></span></div><span class=""><font color="#888888"><div>-- Matthieu<br></div></font></span><div><div class="h5"><div><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

Added:<br>
    cfe/trunk/test/Driver/color-diagnostics.c<br>
Modified:<br>
    cfe/trunk/include/clang/Driver/Options.td<br>
    cfe/trunk/lib/Driver/Tools.cpp<br>
<br>
Modified: cfe/trunk/include/clang/Driver/Options.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=179728&r1=179727&r2=179728&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=179728&r1=179727&r2=179728&view=diff</a><br>


==============================================================================<br>
--- cfe/trunk/include/clang/Driver/Options.td (original)<br>
+++ cfe/trunk/include/clang/Driver/Options.td Wed Apr 17 16:52:44 2013<br>
@@ -333,6 +333,8 @@ def fcatch_undefined_behavior : Flag<["-<br>
 def fclasspath_EQ : Joined<["-"], "fclasspath=">, Group<f_Group>;<br>
 def fcolor_diagnostics : Flag<["-"], "fcolor-diagnostics">, Group<f_Group>, Flags<[CC1Option]>,<br>
   HelpText<"Use colors in diagnostics">;<br>
+def fdiagnostics_color : Flag<["-"], "fdiagnostics-color">, Group<f_Group>;<br>
+def fdiagnostics_color_EQ : Joined<["-"], "fdiagnostics-color=">, Group<f_Group>;<br>
 def fcomment_block_commands : CommaJoined<["-"], "fcomment-block-commands=">, Group<f_clang_Group>, Flags<[CC1Option]>,<br>
   HelpText<"Treat each comma separated argument in <arg> as a documentation comment block command">,<br>
   MetaVarName<"<arg>">;<br>
@@ -539,6 +541,7 @@ def fno_builtin : Flag<["-"], "fno-built<br>
 def fno_caret_diagnostics : Flag<["-"], "fno-caret-diagnostics">, Group<f_Group>,<br>
  Flags<[CC1Option]>;<br>
 def fno_color_diagnostics : Flag<["-"], "fno-color-diagnostics">, Group<f_Group>;<br>
+def fno_diagnostics_color : Flag<["-"], "fno-diagnostics-color">, Group<f_Group>;<br>
 def fno_common : Flag<["-"], "fno-common">, Group<f_Group>, Flags<[CC1Option]>,<br>
     HelpText<"Compile common globals like normal definitions">;<br>
 def fno_constant_cfstrings : Flag<["-"], "fno-constant-cfstrings">, Group<f_Group>,<br>
<br>
Modified: cfe/trunk/lib/Driver/Tools.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=179728&r1=179727&r2=179728&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=179728&r1=179727&r2=179728&view=diff</a><br>


==============================================================================<br>
--- cfe/trunk/lib/Driver/Tools.cpp (original)<br>
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Apr 17 16:52:44 2013<br>
@@ -3200,9 +3200,42 @@ void Clang::ConstructJob(Compilation &C,<br>
<br>
   // Color diagnostics are the default, unless the terminal doesn't support<br>
   // them.<br>
-  if (Args.hasFlag(options::OPT_fcolor_diagnostics,<br>
-                   options::OPT_fno_color_diagnostics,<br>
-                   llvm::sys::Process::StandardErrHasColors()))<br>
+  // Support both clang's -f[no-]color-diagnostics and gcc's<br>
+  // -f[no-]diagnostics-colors[=never|always|auto].<br>
+  enum { Colors_On, Colors_Off, Colors_Auto } ShowColors = Colors_Auto;<br>
+  for (ArgList::const_iterator it = Args.begin(), ie = Args.end();<br>
+       it != ie; ++it) {<br>
+    const Option &O = (*it)->getOption();<br>
+    if (!O.matches(options::OPT_fcolor_diagnostics) &&<br>
+        !O.matches(options::OPT_fdiagnostics_color) &&<br>
+        !O.matches(options::OPT_fno_color_diagnostics) &&<br>
+        !O.matches(options::OPT_fno_diagnostics_color) &&<br>
+        !O.matches(options::OPT_fdiagnostics_color_EQ))<br>
+      continue;<br>
+<br>
+    (*it)->claim();<br>
+    if (O.matches(options::OPT_fcolor_diagnostics) ||<br>
+        O.matches(options::OPT_fdiagnostics_color)) {<br>
+      ShowColors = Colors_On;<br>
+    } else if (O.matches(options::OPT_fno_color_diagnostics) ||<br>
+               O.matches(options::OPT_fno_diagnostics_color)) {<br>
+      ShowColors = Colors_Off;<br>
+    } else {<br>
+      assert(O.matches(options::OPT_fdiagnostics_color_EQ));<br>
+      StringRef value((*it)->getValue());<br>
+      if (value == "always")<br>
+        ShowColors = Colors_On;<br>
+      else if (value == "never")<br>
+        ShowColors = Colors_Off;<br>
+      else if (value == "auto")<br>
+        ShowColors = Colors_Auto;<br>
+      else<br>
+        getToolChain().getDriver().Diag(diag::err_drv_clang_unsupported)<br>
+          << ("-fdiagnostics-color=" + value).str();<br>
+    }<br>
+  }<br>
+  if (ShowColors == Colors_On ||<br>
+      (ShowColors == Colors_Auto && llvm::sys::Process::StandardErrHasColors()))<br>
     CmdArgs.push_back("-fcolor-diagnostics");<br>
<br>
   if (!Args.hasFlag(options::OPT_fshow_source_location,<br>
<br>
Added: cfe/trunk/test/Driver/color-diagnostics.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/color-diagnostics.c?rev=179728&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/color-diagnostics.c?rev=179728&view=auto</a><br>


==============================================================================<br>
--- cfe/trunk/test/Driver/color-diagnostics.c (added)<br>
+++ cfe/trunk/test/Driver/color-diagnostics.c Wed Apr 17 16:52:44 2013<br>
@@ -0,0 +1,53 @@<br>
+// RUN: %clang -fcolor-diagnostics -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=CD %s<br>
+// CHECK-CD: clang{{.*}}" "-fcolor-diagnostics"<br>
+<br>
+// RUN: %clang -fno-color-diagnostics -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=NCD %s<br>
+// CHECK-NCD-NOT: clang{{.*}}" "-fcolor-diagnostics"<br>
+<br>
+// RUN: %clang -fdiagnostics-color -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=DC %s<br>
+// CHECK-DC: clang{{.*}}" "-fcolor-diagnostics"<br>
+<br>
+// RUN: %clang -fno-diagnostics-color -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=NDC %s<br>
+// CHECK-NDC-NOT: clang{{.*}}" "-fcolor-diagnostics"<br>
+<br>
+// RUN: %clang -fdiagnostics-color=always -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=DCE_A %s<br>
+// CHECK-DCE_A: clang{{.*}}" "-fcolor-diagnostics"<br>
+<br>
+// RUN: %clang -fdiagnostics-color=never -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=DCE_N %s<br>
+// CHECK-DCE_N-NOT: clang{{.*}}" "-fcolor-diagnostics"<br>
+<br>
+// The test doesn't run in a PTY, so "auto" defaults to off.<br>
+// RUN: %clang -fdiagnostics-color=auto -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=DCE_AUTO %s<br>
+// CHECK-DCE_AUTO-NOT: clang{{.*}}" "-fcolor-diagnostics"<br>
+<br>
+// RUN: %clang -fdiagnostics-color=foo -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=DCE_FOO %s<br>
+// CHECK-DCE_FOO: error: the clang compiler does not support '-fdiagnostics-color=foo'<br>
+<br>
+// Check that the last flag wins.<br>
+// RUN: %clang -fno-color-diagnostics -fdiagnostics-color -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=NCD_DC_S %s<br>
+// CHECK-NCD_DC_S: clang{{.*}}" "-fcolor-diagnostics"<br>
+<br>
+// RUN: %clang -fcolor-diagnostics -fno-diagnostics-color -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=CD_NDC_S %s<br>
+// CHECK-CD_NDC_S-NOT: clang{{.*}}" "-fcolor-diagnostics"<br>
+<br>
+// RUN: %clang -fdiagnostics-color -fno-color-diagnostics -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=DC_NCD_S %s<br>
+// CHECK-DC_NCD_S-NOT: clang{{.*}}" "-fcolor-diagnostics"<br>
+<br>
+// RUN: %clang -fno-diagnostics-color -fcolor-diagnostics -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=NDC_CD_S %s<br>
+// CHECK-NDC_CD_S: clang{{.*}}" "-fcolor-diagnostics"<br>
+<br>
+// RUN: %clang -fcolor-diagnostics -fdiagnostics-color=auto -### -c %s 2>&1 \<br>
+// RUN:     | FileCheck --check-prefix=CD_DCE_AUTO_S %s<br>
+// CHECK-CD_DCE_AUTO_S-NOT: clang{{.*}}" "-fcolor-diagnostics"<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div></div></div><br></div></div>
<br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div></div>