aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/NEWS8
-rw-r--r--gdb/doc/gdb.texinfo19
-rw-r--r--gdb/source-cache.c72
3 files changed, 98 insertions, 1 deletions
diff --git a/gdb/NEWS b/gdb/NEWS
index 73eb022..c1f3056 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -73,6 +73,14 @@ show debug linux-nat
maint flush source-cache
Flush the contents of the source code cache.
+maint set gnu-source-highlight enabled on|off
+maint show gnu-source-highlight enabled
+ Whether GDB should use the GNU Source Highlight library for adding
+ styling to source code. When off, the library will not be used, even
+ when available. When GNU Source Highlight isn't used, or can't add
+ styling to a particular source file, then the Python Pygments
+ library will be used instead.
+
* Changed commands
maint packet
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 2864950..fe81687 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -39797,6 +39797,25 @@ unload the library and continue searching for a suitable candidate as
described in @ref{set libthread-db-search-path}. For more information
about the tests, see @ref{maint check libthread-db}.
+@kindex maint set gnu-source-highlight enabled
+@kindex maint show gnu-source-highlight enabled
+@item maint set gnu-source-highlight enabled @r{[}on|off@r{]}
+@itemx maint show gnu-source-highlight enabled
+Control whether @value{GDBN} should use the GNU Source Highlight
+library for applying styling to source code (@pxref{Output Styling}).
+This will be @samp{on} by default if the GNU Source Highlight library
+is available. If the GNU Source Highlight library is not available,
+then this will be @samp{off} by default, and attempting to change this
+value to @samp{on} will give an error.
+
+If the GNU Source Highlight library is not being used, then
+@value{GDBN} will use the Python Pygments package for source code
+styling, if it is available.
+
+This option is useful for debugging @value{GDBN}'s use of the Pygments
+library when @value{GDBN} is linked against the GNU Source Highlight
+library.
+
@kindex maint space
@cindex memory used by commands
@item maint space @var{value}
diff --git a/gdb/source-cache.c b/gdb/source-cache.c
index 7016476..373607f 100644
--- a/gdb/source-cache.c
+++ b/gdb/source-cache.c
@@ -47,6 +47,46 @@
source_cache g_source_cache;
+/* When this is true we will use the GNU Source Highlight to add styling to
+ source code (assuming the library is available). This is initialized to
+ true (if appropriate) in _initialize_source_cache below. */
+
+static bool use_gnu_source_highlight;
+
+/* The "maint show gnu-source-highlight enabled" command. */
+
+static void
+show_use_gnu_source_highlight_enabled (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
+{
+ fprintf_filtered (file,
+ _("Use of GNU Source Highlight library is \"%s\".\n"),
+ value);
+}
+
+/* The "maint set gnu-source-highlight enabled" command. */
+
+static void
+set_use_gnu_source_highlight_enabled (const char *ignore_args,
+ int from_tty,
+ struct cmd_list_element *c)
+{
+#ifndef HAVE_SOURCE_HIGHLIGHT
+ /* If the library is not available and the user tried to enable use of
+ the library, then disable use of the library, and give an error. */
+ if (use_gnu_source_highlight)
+ {
+ use_gnu_source_highlight = false;
+ error (_("the GNU Source Highlight library is not available"));
+ }
+#else
+ /* We (might) have just changed how we style source code, discard any
+ previously cached contents. */
+ forget_cached_source_info ();
+#endif
+}
+
/* See source-cache.h. */
std::string
@@ -192,7 +232,7 @@ source_cache::ensure (struct symtab *s)
#ifdef HAVE_SOURCE_HIGHLIGHT
bool already_styled = false;
const char *lang_name = get_language_name (SYMTAB_LANGUAGE (s));
- if (lang_name != nullptr)
+ if (lang_name != nullptr && use_gnu_source_highlight)
{
/* The global source highlight object, or null if one was
never constructed. This is stored here rather than in
@@ -363,6 +403,36 @@ _initialize_source_cache ()
_("Force gdb to flush its source code cache."),
&maintenanceflushlist);
+ /* All the 'maint set|show gnu-source-highlight' sub-commands. */
+ static struct cmd_list_element *maint_set_gnu_source_highlight_cmdlist;
+ static struct cmd_list_element *maint_show_gnu_source_highlight_cmdlist;
+
+ /* Adds 'maint set|show gnu-source-highlight'. */
+ add_setshow_prefix_cmd ("gnu-source-highlight", class_maintenance,
+ _("Set gnu-source-highlight specific variables."),
+ _("Show gnu-source-highlight specific variables."),
+ &maint_set_gnu_source_highlight_cmdlist,
+ &maint_show_gnu_source_highlight_cmdlist,
+ &maintenance_set_cmdlist,
+ &maintenance_show_cmdlist);
+
+ /* Adds 'maint set|show gnu-source-highlight enabled'. */
+ add_setshow_boolean_cmd ("enabled", class_maintenance,
+ &use_gnu_source_highlight, _("\
+Set whether the GNU Source Highlight library should be used."), _("\
+Show whether the GNU Source Highlight library is being used."),_("\
+When enabled, GDB will use the GNU Source Highlight library to apply\n\
+styling to source code lines that are shown."),
+ set_use_gnu_source_highlight_enabled,
+ show_use_gnu_source_highlight_enabled,
+ &maint_set_gnu_source_highlight_cmdlist,
+ &maint_show_gnu_source_highlight_cmdlist);
+
+ /* Enable use of GNU Source Highlight library, if we have it. */
+#ifdef HAVE_SOURCE_HIGHLIGHT
+ use_gnu_source_highlight = true;
+#endif
+
#if GDB_SELF_TEST
selftests::register_test ("source-cache", selftests::extract_lines_test);
#endif