gdb/tui: Fix build for older ncurses
Older versions of ncurses (including the version that ships inside
macos, and Centos 7) do not include the A_ITALIC macro. This patch
simply hides any use of A_ITALIC behind a preprocessor guard.
The result of this is that italics won't be rendered in the tui
if ncurses isn't supported. We do have other options if we think
it's important - for instance we could show italics as bold if
italics aren't supported. From my understanding, that might be
overthinking it - so I took the simplest approach here, just to
fix the build.
Those versions also define tgetnum as:
int tgetnum(char *id);
so attempting to compile for c++ results in the error:
ISO C++ forbids converting a string constant to 'char*' [-Werror=write-strings]
This is just a dated API issue, so a const cast resolves the issue.
Approved-By: Tom Tromey <tom@tromey.com>
diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c
index c97e8fd..84cad93 100644
--- a/gdb/tui/tui-io.c
+++ b/gdb/tui/tui-io.c
@@ -319,7 +319,9 @@ tui_apply_style (WINDOW *w, ui_file_style style)
wattron (w, A_NORMAL);
wattroff (w, A_BOLD);
wattroff (w, A_DIM);
+#ifdef A_ITALIC
wattroff (w, A_ITALIC);
+#endif
wattroff (w, A_UNDERLINE);
wattroff (w, A_REVERSE);
if (last_color_pair != -1)
@@ -368,8 +370,10 @@ tui_apply_style (WINDOW *w, ui_file_style style)
gdb_assert_not_reached ("invalid intensity");
}
+#ifdef A_ITALIC
if (style.is_italic ())
wattron (w, A_ITALIC);
+#endif
if (style.is_underline ())
wattron (w, A_UNDERLINE);
diff --git a/gdb/ui-style.c b/gdb/ui-style.c
index 9a58e4d..d450c3e 100644
--- a/gdb/ui-style.c
+++ b/gdb/ui-style.c
@@ -594,7 +594,11 @@ colorsupport ()
{
std::vector<color_space> result = {color_space::MONOCHROME};
- int colors = tgetnum ("Co");
+ /* ncurses versions prior to 6.1 (and other curses
+ implementations) declare the tgetnum argument to be
+ 'char *', so we need the const_cast, since C++ will not
+ implicitly convert. */
+ int colors = tgetnum (const_cast<char*> ("Co"));
if (colors >= 8)
result.push_back (color_space::ANSI_8COLOR);
if (colors >= 16)