diff mbox series

[1/2] pretty-print: support URL escape sequences (PR 87488)

Message ID 20191010170614.2061-1-dmalcolm@redhat.com
State New
Headers show
Series [1/2] pretty-print: support URL escape sequences (PR 87488) | expand

Commit Message

David Malcolm Oct. 10, 2019, 5:06 p.m. UTC
https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
describes an emerging standard for embedding URLs in escape sequences
for marking up text output.  This is supported e.g. by recent releases
of GNOME Terminal.

This patch adds support to our pretty-printing framework for emitting
URLs.

Successfully bootstrapped&regrtested on x86_64-pc-linux-gnu.

Committed to trunk as r276841.

A followup patch uses this to add URLs to the pertinent documentation
for the output of -fdiagnostics-show-option.

gcc/ChangeLog:
	PR 87488
	* common.opt (fdiagnostics-urls=): New option.
	(diagnostic-url.h): Add SourceInclude.
	(diagnostic_url_rule): New enum.
	* diagnostic-color.c: Include "diagnostic-url.h".
	(diagnostic_urls_enabled_p): New function.
	* diagnostic-url.h: New file.
	* diagnostic.c: Include "diagnostic-url.h".
	(diagnostic_urls_init): New function.
	* diagnostic.h (diagnostic_urls_init): New decl.
	* doc/invoke.texi (Diagnostic Message Formatting Options): Add
	-fdiagnostics-urls to the list.
	(-fdiagnostics-urls): New option.
	* gcc.c (driver_handle_option): Handle OPT_fdiagnostics_urls_.
	(driver::global_initializations): Call diagnostic_urls_init.
	* opts-global.c (init_options_once): Likewise.
	* opts.c (common_handle_option): Handle OPT_fdiagnostics_urls_.
	* pretty-print.c (pretty_printer::pretty_printer): Initialize
	show_urls.
	(pp_begin_url): New function.
	(pp_end_url): New function.
	(selftest::test_urls): New selftest.
	(selftest::pretty_print_c_tests): Call it.
	* pretty-print.h (pretty_printer::show_urls): New field.
	(pp_begin_url): New decl.
	(pp_end_url): New decl.

gcc/testsuite/ChangeLog:
	PR 87488
	* lib/prune.exp (TEST_ALWAYS_FLAGS): Add -fdiagnostics-urls=never.
---
 gcc/common.opt              | 20 ++++++++++++++
 gcc/diagnostic-color.c      | 20 ++++++++++++++
 gcc/diagnostic-url.h        | 36 +++++++++++++++++++++++++
 gcc/diagnostic.c            | 13 +++++++++
 gcc/diagnostic.h            |  1 +
 gcc/doc/invoke.texi         | 13 +++++++++
 gcc/gcc.c                   |  5 ++++
 gcc/opts-global.c           |  1 +
 gcc/opts.c                  |  4 +++
 gcc/pretty-print.c          | 65 ++++++++++++++++++++++++++++++++++++++++++++-
 gcc/pretty-print.h          |  6 +++++
 gcc/testsuite/lib/prune.exp |  2 +-
 12 files changed, 184 insertions(+), 2 deletions(-)
 create mode 100644 gcc/diagnostic-url.h

Comments

Jakub Jelinek Dec. 6, 2019, 11:41 p.m. UTC | #1
On Thu, Oct 10, 2019 at 01:06:13PM -0400, David Malcolm wrote:
> https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
> describes an emerging standard for embedding URLs in escape sequences
> for marking up text output.  This is supported e.g. by recent releases
> of GNOME Terminal.

Unfortunately, as reported by several people, the
OSC 8 ;; URL ST Text OSC 8 ;; ST
sequence renders badly on recentish konsole5 terminal emulator, which is
something a lot of people use.
While the above page suggests the use of ST rather than BEL, in practice
that at least currently does better job.
Tested with
echo -e '\e]8;;http://example.com\aThis is a link\e]8;;\a\n\e]8;;http://example.com\e\\This is a link\e]8;;\e\\\n'
on various terminals:
gnome-terminal-3.30.2 both lines the same, URLs work
konsole5-18.12.3 the first line normal text, the second one wrapped in
		 between \s, i.e. \This is a link\ , URLs don't work
xterm-334 both lines the same, normal text, URLs don't work
rxvt-2.7.10 ditto
xterm-314 ditto
konsole5-15.12.1 ditto
linux kernel 5.0.13 console ditto
linux kernel 4.4.14 console ditto
gnome-terminal-3.16.2 prints garbage around and both the URL and the text
		      are visible, but the line with ST has more garbage
		      than line with BEL

BEL instead of ST is also what ls -l --hyperlink prints.

Ok for trunk?

2019-12-07  Jakub Jelinek  <jakub@redhat.com>

	* pretty-print.c (pp_begin_url, pp_end_url, test_urls): Use BEL
	instead of ST sequence to terminate OSC 8 strings.

--- gcc/pretty-print.c.jj	2019-10-11 09:29:15.103953133 +0200
+++ gcc/pretty-print.c	2019-12-07 00:17:00.860500837 +0100
@@ -2043,7 +2043,10 @@ identifier_to_locale (const char *ident)
    >
    > OSC 8 ; ; ST
    >
-   > OSC (operating system command) is typically ESC ].  */
+   > OSC (operating system command) is typically ESC ].
+
+   Use BEL instead of ST, as that is currently rendered better in some
+   terminal emulators that don't support OSC 8, like konsole5.  */
 
 /* If URL-printing is enabled, write an "open URL" escape sequence to PP
    for the given URL.  */
@@ -2052,7 +2055,7 @@ void
 pp_begin_url (pretty_printer *pp, const char *url)
 {
   if (pp->show_urls)
-    pp_printf (pp, "\33]8;;%s\33\\", url);
+    pp_printf (pp, "\33]8;;%s\a", url);
 }
 
 /* If URL-printing is enabled, write a "close URL" escape sequence to PP.  */
@@ -2061,7 +2064,7 @@ void
 pp_end_url (pretty_printer *pp)
 {
   if (pp->show_urls)
-    pp_string (pp, "\33]8;;\33\\");
+    pp_string (pp, "\33]8;;\a");
 }
 
 #if CHECKING_P
@@ -2369,7 +2372,7 @@ test_urls ()
     pp_begin_url (&pp, "http://example.com");
     pp_string (&pp, "This is a link");
     pp_end_url (&pp);
-    ASSERT_STREQ ("\33]8;;http://example.com\33\\This is a link\33]8;;\33\\",
+    ASSERT_STREQ ("\33]8;;http://example.com\aThis is a link\33]8;;\a",
 		  pp_formatted_text (&pp));
   }
 }


	Jakub
David Malcolm Dec. 7, 2019, 1:31 a.m. UTC | #2
On Sat, 2019-12-07 at 00:41 +0100, Jakub Jelinek wrote:
> On Thu, Oct 10, 2019 at 01:06:13PM -0400, David Malcolm wrote:
> > https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
> > describes an emerging standard for embedding URLs in escape
> > sequences
> > for marking up text output.  This is supported e.g. by recent
> > releases
> > of GNOME Terminal.
> 
> Unfortunately, as reported by several people, the
> OSC 8 ;; URL ST Text OSC 8 ;; ST
> sequence renders badly on recentish konsole5 terminal emulator, which
> is
> something a lot of people use.
> While the above page suggests the use of ST rather than BEL, in
> practice
> that at least currently does better job.
> Tested with
> echo -e '\e]8;;http://example.com\aThis is a link\e]8;;\a\n\e]8;;
> http://example.com\e\\This is a link\e]8;;\e\\\n'
> on various terminals:
> gnome-terminal-3.30.2 both lines the same, URLs work
> konsole5-18.12.3 the first line normal text, the second one wrapped
> in
> 		 between \s, i.e. \This is a link\ , URLs don't work
> xterm-334 both lines the same, normal text, URLs don't work
> rxvt-2.7.10 ditto
> xterm-314 ditto
> konsole5-15.12.1 ditto
> linux kernel 5.0.13 console ditto
> linux kernel 4.4.14 console ditto
> gnome-terminal-3.16.2 prints garbage around and both the URL and the
> text
> 		      are visible, but the line with ST has more
> garbage
> 		      than line with BEL
> 
> BEL instead of ST is also what ls -l --hyperlink prints.

systemd also uses BEL rather than ST.

> Ok for trunk?

OK; please reference PR 87488 in the ChangeLog.


> 2019-12-07  Jakub Jelinek  <jakub@redhat.com>
> 
> 	* pretty-print.c (pp_begin_url, pp_end_url, test_urls): Use BEL
> 	instead of ST sequence to terminate OSC 8 strings.
> 
> --- gcc/pretty-print.c.jj	2019-10-11 09:29:15.103953133 +0200
> +++ gcc/pretty-print.c	2019-12-07 00:17:00.860500837 +0100
> @@ -2043,7 +2043,10 @@ identifier_to_locale (const char *ident)
>     >
>     > OSC 8 ; ; ST
>     >
> -   > OSC (operating system command) is typically ESC ].  */
> +   > OSC (operating system command) is typically ESC ].
> +
> +   Use BEL instead of ST, as that is currently rendered better in
> some
> +   terminal emulators that don't support OSC 8, like konsole5.  */
>  
>  /* If URL-printing is enabled, write an "open URL" escape sequence
> to PP
>     for the given URL.  */
> @@ -2052,7 +2055,7 @@ void
>  pp_begin_url (pretty_printer *pp, const char *url)
>  {
>    if (pp->show_urls)
> -    pp_printf (pp, "\33]8;;%s\33\\", url);
> +    pp_printf (pp, "\33]8;;%s\a", url);
>  }
>  
>  /* If URL-printing is enabled, write a "close URL" escape sequence
> to PP.  */
> @@ -2061,7 +2064,7 @@ void
>  pp_end_url (pretty_printer *pp)
>  {
>    if (pp->show_urls)
> -    pp_string (pp, "\33]8;;\33\\");
> +    pp_string (pp, "\33]8;;\a");
>  }
>  
>  #if CHECKING_P
> @@ -2369,7 +2372,7 @@ test_urls ()
>      pp_begin_url (&pp, "http://example.com");
>      pp_string (&pp, "This is a link");
>      pp_end_url (&pp);
> -    ASSERT_STREQ ("\33]8;;http://example.com\33\\This is a
> link\33]8;;\33\\",
> +    ASSERT_STREQ ("\33]8;;http://example.com\aThis is a
> link\33]8;;\a",
>  		  pp_formatted_text (&pp));
>    }
>  }
> 
> 
> 	Jakub
diff mbox series

Patch

diff --git a/gcc/common.opt b/gcc/common.opt
index 1b9e0f3..124e8cf 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -1281,6 +1281,26 @@  Enum(diagnostic_color_rule) String(always) Value(DIAGNOSTICS_COLOR_YES)
 EnumValue
 Enum(diagnostic_color_rule) String(auto) Value(DIAGNOSTICS_COLOR_AUTO)
 
+fdiagnostics-urls=
+Driver Common Joined RejectNegative Var(flag_diagnostics_show_urls) Enum(diagnostic_url_rule) Init(DIAGNOSTICS_URL_AUTO)
+-fdiagnostics-urls=[never|always|auto]	Embed URLs in diagnostics.
+
+; Required for these enum values.
+SourceInclude
+diagnostic-url.h
+
+Enum
+Name(diagnostic_url_rule) Type(int)
+
+EnumValue
+Enum(diagnostic_url_rule) String(never) Value(DIAGNOSTICS_URL_NO)
+
+EnumValue
+Enum(diagnostic_url_rule) String(always) Value(DIAGNOSTICS_URL_YES)
+
+EnumValue
+Enum(diagnostic_url_rule) String(auto) Value(DIAGNOSTICS_URL_AUTO)
+
 fdiagnostics-format=
 Common Joined RejectNegative Enum(diagnostics_output_format)
 -fdiagnostics-format=[text|json] Select output format.
diff --git a/gcc/diagnostic-color.c b/gcc/diagnostic-color.c
index 69e759f..abc919f 100644
--- a/gcc/diagnostic-color.c
+++ b/gcc/diagnostic-color.c
@@ -19,6 +19,7 @@ 
 #include "config.h"
 #include "system.h"
 #include "diagnostic-color.h"
+#include "diagnostic-url.h"
 
 #ifdef __MINGW32__
 #  include <windows.h>
@@ -236,3 +237,22 @@  colorize_init (diagnostic_color_rule_t rule)
       gcc_unreachable ();
     }
 }
+
+/* Determine if URLs should be enabled, based on RULE.
+   This reuses the logic for colorization.  */
+
+bool
+diagnostic_urls_enabled_p (diagnostic_url_rule_t rule)
+{
+  switch (rule)
+    {
+    case DIAGNOSTICS_URL_NO:
+      return false;
+    case DIAGNOSTICS_URL_YES:
+      return true;
+    case DIAGNOSTICS_URL_AUTO:
+      return should_colorize ();
+    default:
+      gcc_unreachable ();
+    }
+}
diff --git a/gcc/diagnostic-url.h b/gcc/diagnostic-url.h
new file mode 100644
index 0000000..ce0de45
--- /dev/null
+++ b/gcc/diagnostic-url.h
@@ -0,0 +1,36 @@ 
+/* Copyright (C) 2019 Free Software Foundation, Inc.
+   Contributed by David Malcolm <dmalcolm@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DIAGNOSTIC_URL_H
+#define GCC_DIAGNOSTIC_URL_H
+
+/* Whether to add URLs to diagnostics:
+   - DIAGNOSTICS_URL_NO: never
+   - DIAGNOSTICS_URL_YES: always
+   - DIAGNOSTICS_URL_AUTO: depending on the output stream.  */
+typedef enum
+{
+  DIAGNOSTICS_URL_NO       = 0,
+  DIAGNOSTICS_URL_YES      = 1,
+  DIAGNOSTICS_URL_AUTO     = 2
+} diagnostic_url_rule_t;
+
+extern bool diagnostic_urls_enabled_p (diagnostic_url_rule_t);
+
+#endif /* ! GCC_DIAGNOSTIC_URL_H */
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index 1b3306c..467cc39 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -31,6 +31,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "backtrace.h"
 #include "diagnostic.h"
 #include "diagnostic-color.h"
+#include "diagnostic-url.h"
 #include "edit-context.h"
 #include "selftest.h"
 #include "selftest-diagnostic.h"
@@ -246,6 +247,18 @@  diagnostic_color_init (diagnostic_context *context, int value /*= -1 */)
     = colorize_init ((diagnostic_color_rule_t) value);
 }
 
+/* Initialize URL support within CONTEXT based on VALUE, handling "auto".  */
+
+void
+diagnostic_urls_init (diagnostic_context *context, int value /*= -1 */)
+{
+  if (value < 0)
+    value = DIAGNOSTICS_COLOR_DEFAULT;
+
+  context->printer->show_urls
+    = diagnostic_urls_enabled_p ((diagnostic_url_rule_t) value);
+}
+
 /* Do any cleaning up required after the last diagnostic is emitted.  */
 
 void
diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h
index 530acb4..f0ea8e8 100644
--- a/gcc/diagnostic.h
+++ b/gcc/diagnostic.h
@@ -331,6 +331,7 @@  diagnostic_override_option_index (diagnostic_info *info, int optidx)
 /* Diagnostic related functions.  */
 extern void diagnostic_initialize (diagnostic_context *, int);
 extern void diagnostic_color_init (diagnostic_context *, int value = -1);
+extern void diagnostic_urls_init (diagnostic_context *, int value = -1);
 extern void diagnostic_finish (diagnostic_context *);
 extern void diagnostic_report_current_module (diagnostic_context *, location_t);
 extern void diagnostic_show_locus (diagnostic_context *,
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 9247603..bdbcd95 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -273,6 +273,7 @@  Objective-C and Objective-C++ Dialects}.
 @gccoptlist{-fmessage-length=@var{n}  @gol
 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
 -fdiagnostics-color=@r{[}auto@r{|}never@r{|}always@r{]}  @gol
+-fdiagnostics-urls=@r{[}auto@r{|}never@r{|}always@r{]}  @gol
 -fdiagnostics-format=@r{[}text@r{|}json@r{]}  @gol
 -fno-diagnostics-show-option  -fno-diagnostics-show-caret @gol
 -fno-diagnostics-show-labels  -fno-diagnostics-show-line-numbers @gol
@@ -3908,6 +3909,18 @@  SGR substring for highlighting mismatching types within template
 arguments in the C++ frontend.
 @end table
 
+@item -fdiagnostics-urls[=@var{WHEN}]
+@opindex fdiagnostics-urls
+@cindex urls
+Use escape sequences to embed URLs in diagnostics.  For example, when
+@option{-fdiagnostics-show-option} emits text showing the command-line
+option controlling a diagnostic, embed a URL for documentation of that
+option.
+
+@var{WHEN} is @samp{never}, @samp{always}, or @samp{auto}.
+The default is @samp{auto}, which means to use URL escape sequences only
+when the standard error is a terminal.
+
 @item -fno-diagnostics-show-option
 @opindex fno-diagnostics-show-option
 @opindex fdiagnostics-show-option
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 1216cdd..c45a1df 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -4041,6 +4041,10 @@  driver_handle_option (struct gcc_options *opts,
       diagnostic_color_init (dc, value);
       break;
 
+    case OPT_fdiagnostics_urls_:
+      diagnostic_urls_init (dc, value);
+      break;
+
     case OPT_fdiagnostics_format_:
       diagnostic_output_format_init (dc,
 				     (enum diagnostics_output_format)value);
@@ -7443,6 +7447,7 @@  driver::global_initializations ()
 
   diagnostic_initialize (global_dc, 0);
   diagnostic_color_init (global_dc);
+  diagnostic_urls_init (global_dc);
 
 #ifdef GCC_DRIVER_HOST_INITIALIZATION
   /* Perform host dependent initialization when needed.  */
diff --git a/gcc/opts-global.c b/gcc/opts-global.c
index 7c5bd16..b51c2fb 100644
--- a/gcc/opts-global.c
+++ b/gcc/opts-global.c
@@ -255,6 +255,7 @@  init_options_once (void)
      construct their pretty-printers means that all previous settings
      are overriden.  */
   diagnostic_color_init (global_dc);
+  diagnostic_urls_init (global_dc);
 }
 
 /* Decode command-line options to an array, like
diff --git a/gcc/opts.c b/gcc/opts.c
index 2df0351..f98f3f4 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -2492,6 +2492,10 @@  common_handle_option (struct gcc_options *opts,
       diagnostic_color_init (dc, value);
       break;
 
+    case OPT_fdiagnostics_urls_:
+      diagnostic_urls_init (dc, value);
+      break;
+
     case OPT_fdiagnostics_format_:
       diagnostic_output_format_init (dc,
 				     (enum diagnostics_output_format)value);
diff --git a/gcc/pretty-print.c b/gcc/pretty-print.c
index 2b6c585..c57a3db 100644
--- a/gcc/pretty-print.c
+++ b/gcc/pretty-print.c
@@ -1579,7 +1579,8 @@  pretty_printer::pretty_printer (int maximum_length)
     emitted_prefix (),
     need_newline (),
     translate_identifiers (true),
-    show_color ()
+    show_color (),
+    show_urls (false)
 {
   pp_line_cutoff (this) = maximum_length;
   /* By default, we emit prefixes once per message.  */
@@ -2028,6 +2029,41 @@  identifier_to_locale (const char *ident)
   }
 }
 
+/* Support for encoding URLs.
+   See egmontkob/Hyperlinks_in_Terminal_Emulators.md
+   ( https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda ).
+
+   > A hyperlink is opened upon encountering an OSC 8 escape sequence with
+   > the target URI. The syntax is
+   >
+   >  OSC 8 ; params ; URI ST
+   >
+   > A hyperlink is closed with the same escape sequence, omitting the
+   > parameters and the URI but keeping the separators:
+   >
+   > OSC 8 ; ; ST
+   >
+   > OSC (operating system command) is typically ESC ].  */
+
+/* If URL-printing is enabled, write an "open URL" escape sequence to PP
+   for the given URL.  */
+
+void
+pp_begin_url (pretty_printer *pp, const char *url)
+{
+  if (pp->show_urls)
+    pp_printf (pp, "\33]8;;%s\33\\", url);
+}
+
+/* If URL-printing is enabled, write a "close URL" escape sequence to PP.  */
+
+void
+pp_end_url (pretty_printer *pp)
+{
+  if (pp->show_urls)
+    pp_string (pp, "\33]8;;\33\\");
+}
+
 #if CHECKING_P
 
 namespace selftest {
@@ -2312,6 +2348,32 @@  test_prefixes_and_wrapping ()
 
 }
 
+/* Verify that URL-printing works as expected.  */
+
+void
+test_urls ()
+{
+  {
+    pretty_printer pp;
+    pp.show_urls = false;
+    pp_begin_url (&pp, "http://example.com");
+    pp_string (&pp, "This is a link");
+    pp_end_url (&pp);
+    ASSERT_STREQ ("This is a link",
+		  pp_formatted_text (&pp));
+  }
+
+  {
+    pretty_printer pp;
+    pp.show_urls = true;
+    pp_begin_url (&pp, "http://example.com");
+    pp_string (&pp, "This is a link");
+    pp_end_url (&pp);
+    ASSERT_STREQ ("\33]8;;http://example.com\33\\This is a link\33]8;;\33\\",
+		  pp_formatted_text (&pp));
+  }
+}
+
 /* Run all of the selftests within this file.  */
 
 void
@@ -2320,6 +2382,7 @@  pretty_print_c_tests ()
   test_basic_printing ();
   test_pp_format ();
   test_prefixes_and_wrapping ();
+  test_urls ();
 }
 
 } // namespace selftest
diff --git a/gcc/pretty-print.h b/gcc/pretty-print.h
index 2d03b3f..c73fc30 100644
--- a/gcc/pretty-print.h
+++ b/gcc/pretty-print.h
@@ -273,6 +273,9 @@  public:
 
   /* Nonzero means that text should be colorized.  */
   bool show_color;
+
+  /* Nonzero means that URLs should be emitted.  */
+  bool show_urls;
 };
 
 static inline const char *
@@ -393,6 +396,9 @@  extern void pp_maybe_space (pretty_printer *);
 extern void pp_begin_quote (pretty_printer *, bool);
 extern void pp_end_quote (pretty_printer *, bool);
 
+extern void pp_begin_url (pretty_printer *pp, const char *url);
+extern void pp_end_url (pretty_printer *pp);
+
 /* Switch into verbatim mode and return the old mode.  */
 static inline pp_wrapping_mode_t
 pp_set_verbatim_wrapping_ (pretty_printer *pp)
diff --git a/gcc/testsuite/lib/prune.exp b/gcc/testsuite/lib/prune.exp
index 2885e87..176019f 100644
--- a/gcc/testsuite/lib/prune.exp
+++ b/gcc/testsuite/lib/prune.exp
@@ -21,7 +21,7 @@  load_lib multiline.exp
 if ![info exists TEST_ALWAYS_FLAGS] {
     set TEST_ALWAYS_FLAGS ""
 }
-set TEST_ALWAYS_FLAGS "-fno-diagnostics-show-caret -fno-diagnostics-show-line-numbers -fdiagnostics-color=never $TEST_ALWAYS_FLAGS"
+set TEST_ALWAYS_FLAGS "-fno-diagnostics-show-caret -fno-diagnostics-show-line-numbers -fdiagnostics-color=never  -fdiagnostics-urls=never $TEST_ALWAYS_FLAGS"
 
 proc prune_gcc_output { text } {
     global srcdir