[v2,2/2] Add Rust support to source highlighting
Commit Message
On 10-09-19 17:56, Tom Tromey wrote:
>>>>>> "Tom" == Tom de Vries <tdevries@suse.de> writes:
>
> Tom> I recently updated my regular build setup to include an installed
> Tom> libsource-highlight.so by installing package libsource-highlight-devel
> Tom> in openSUSE Leap 15.1.
> ...
>
> Tom> So my question is: does it make sense to backport (part of) this patch
> Tom> to 8.3?
>
> It would be fine by me. The configury bits would also be needed.
So, commit c1a5d03a89 "Add --with-static-standard-libraries to the top
level" applied cleanly, but commit d806ea2d0e "Add Rust support to
source highlighting" didn't so I'd like a review of that one.
Attached both backported patches here.
Tested on openSUSE Leap 15.1, both with and without source-highlight
package installed.
OK for 8.3 branch?
Thanks,
- Tom
Comments
>>>>> "Tom" == Tom de Vries <tdevries@suse.de> writes:
Tom> Tested on openSUSE Leap 15.1, both with and without source-highlight
Tom> package installed.
Tom> OK for 8.3 branch?
This looks fine to me, but I had two comments.
First, Joel pointed out earlier that backports require a tracking PR, so
be sure to file one and mention it in the commit.
Second, up-thread you said:
Tom> This expection happens when the library attempts to access
Tom> /usr/share/source-highlight/esc.outlang, which is not there, because
Tom> it's contained in another package (source-highlight).
... but the patch does:
Tom> srchilite::SourceHighlight highlighter ("esc.outlang");
Tom> highlighter.setStyleFile("esc.style");
Tom> - std::ostringstream output;
Tom> - highlighter.highlight (input, output, lang_name, fullname);
Tom> + try
Tom> + {
Tom> + std::ostringstream output;
Tom> + highlighter.highlight (input, output, lang_name, fullname);
I am wondering if the "try" should encompass the construction of
"highlighter". It's possible that it works fine as-is, since maybe the
argument isn't used until highlighting is attempted -- but I figured I
would ask just to be sure.
thanks,
Tom
Add Rust support to source highlighting
[ Backport of master commit d806ea2d0e. ]
Currently, no release of GNU Source Highlight supports Rust. However,
I've checked in a patch to do so there, and I plan to make a new
release sometime this summer.
This patch prepares gdb for that by adding support for Rust to the
source highlighting code.
Because Source Highlight will throw an exception if the language is
unrecognized, this also changes gdb to ignore exceptions here. This
will cause gdb to fall back to un-highlighted source text.
This updates gdb's configure script to reject the combination of
Source Highlight and -static-libstdc++. This is done because it's not
possible to use -static-libstdc++ and then catch exceptions from a
shared library.
Tested with the current and development versions of Source Highlight.
gdb/ChangeLog
2019-08-19 Tom Tromey <tom@tromey.com>
* configure: Rebuild.
* configure.ac: Disallow the combination of -static-libstdc++ and
source highlight.
* source-cache.c (get_language_name): Handle rust.
(source_cache::get_source_lines): Ignore highlighting exceptions.
---
gdb/ChangeLog | 8 ++++++++
gdb/configure | 6 ++++++
gdb/configure.ac | 8 ++++++++
gdb/source-cache.c | 33 ++++++++++++++++++++++-----------
4 files changed, 44 insertions(+), 11 deletions(-)
@@ -1,3 +1,11 @@
+2019-08-19 Tom Tromey <tom@tromey.com>
+
+ * configure: Rebuild.
+ * configure.ac: Disallow the combination of -static-libstdc++ and
+ source highlight.
+ * source-cache.c (get_language_name): Handle rust.
+ (source_cache::get_source_lines): Ignore highlighting exceptions.
+
2019-06-28 Sergio Durigan Junior <sergiodj@redhat.com>
PR breakpoints/24541
@@ -11503,6 +11503,12 @@ $as_echo "no - pkg-config not found" >&6; }
as_fn_error $? "pkg-config was not found in your system" "$LINENO" 5
fi
else
+ case "$LDFLAGS" in
+ *static-libstdc*)
+ as_fn_error $? "source highlight is incompatible with -static-libstdc++; either use --disable-source-highlight or --without-static-standard-libraries" "$LINENO" 5
+ ;;
+ esac
+
if ${pkg_config_prog_path} --exists source-highlight; then
SRCHIGH_CFLAGS=`${pkg_config_prog_path} --cflags source-highlight`
SRCHIGH_LIBS=`${pkg_config_prog_path} --libs source-highlight`
@@ -1251,6 +1251,14 @@ if test "${enable_source_highlight}" != "no"; then
AC_MSG_ERROR([pkg-config was not found in your system])
fi
else
+ case "$LDFLAGS" in
+ *static-libstdc*)
+ AC_MSG_ERROR([source highlight is incompatible with -static-libstdc++; dnl
+either use --disable-source-highlight or dnl
+--without-static-standard-libraries])
+ ;;
+ esac
+
if ${pkg_config_prog_path} --exists source-highlight; then
SRCHIGH_CFLAGS=`${pkg_config_prog_path} --cflags source-highlight`
SRCHIGH_LIBS=`${pkg_config_prog_path} --libs source-highlight`
@@ -156,8 +156,7 @@ get_language_name (enum language lang)
break;
case language_rust:
- /* Not handled by Source Highlight. */
- break;
+ return "rust.lang";
case language_ada:
return "ada.lang";
@@ -216,18 +215,30 @@ source_cache::get_source_lines (struct symtab *s, int first_line,
srchilite::SourceHighlight highlighter ("esc.outlang");
highlighter.setStyleFile("esc.style");
- std::ostringstream output;
- highlighter.highlight (input, output, lang_name, fullname);
+ try
+ {
+ std::ostringstream output;
+ highlighter.highlight (input, output, lang_name, fullname);
- source_text result = { fullname, output.str () };
- m_source_map.push_back (std::move (result));
+ source_text result = { fullname, output.str () };
+ m_source_map.push_back (std::move (result));
- if (m_source_map.size () > MAX_ENTRIES)
- m_source_map.erase (m_source_map.begin ());
+ if (m_source_map.size () > MAX_ENTRIES)
+ m_source_map.erase (m_source_map.begin ());
- *lines = extract_lines (m_source_map.back (), first_line,
- last_line);
- return true;
+ *lines = extract_lines (m_source_map.back (), first_line,
+ last_line);
+ return true;
+ }
+ catch (...)
+ {
+ /* Source Highlight will throw an exception if
+ highlighting fails. One possible reason it can fail
+ is if the language is unknown -- which matters to gdb
+ because Rust support wasn't added until after 3.1.8.
+ Ignore exceptions here and fall back to
+ un-highlighted text. */
+ }
}
}
}