Re: [PATCHSET] [4/4] Fix various issue in TUI

Pedro Alves
2015-01-22T18:36:01Z

On 01/22/2015 05:29 PM, Eli Zaretskii wrote:
>> Date: Thu, 22 Jan 2015 17:15:00 +0000
>> From: Pedro Alves <palves@redhat.com>
>> CC: gdb-patches@sourceware.org
>>
>>>> So shouldn't the right check be this:
>>>>
>>>> if test x"$curses_found" != xyes; then
>>>> ac_cv_search_tgetent="none required"
>>>> CONFIG_OBS="$CONFIG_OBS windows-termcap.o"
>>>> fi ;;
>>>>
>>>> ?
>>>
>>> I'm not sure. GDB can be configured --without-tui --with-curses.
>>> Does your logic work then?
>>
>> It's the same thing.
>
> Then please install your variant (on the branch as well). I trust you
> know this stuff much better than I do.

And indeed, I tried cross compiling current mainline mingw gdb,
on my fedora 20 box, and it's broken:

...
object-run.o compile-loc2c.o compile-c-support.o inflow.o init.o \
../readline/libreadline.a ../opcodes/libopcodes.a ../bfd/libbfd.a ./../intl/libintl.a ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a -lm /home/pedro/src/expat/install-win64/lib/libexpat.a ../libiberty/libiberty.a -lws2_32 build-gnulib/import/libgnu.a
utils.o: In function `init_page_info':
/home/pedro/gdb/mygit/build-mingw/gdb/../../src/gdb/utils.c:1683: undefined reference to `tgetnum'
../readline/libreadline.a(display.o): In function `rl_redisplay':
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/display.c:1087: undefined reference to `tputs'
../readline/libreadline.a(display.o): In function `update_line':
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/display.c:1528: undefined reference to `tputs'
../readline/libreadline.a(display.o): In function `_rl_move_cursor_relative':
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/display.c:1985: undefined reference to `tputs'
../readline/libreadline.a(display.o): In function `_rl_move_vert':
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/display.c:2057: undefined reference to `tputs'
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/display.c:2073: undefined reference to `tputs'
../readline/libreadline.a(display.o):/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/display.c:2336: more undefined references to `tputs' follow
../readline/libreadline.a(terminal.o): In function `_rl_get_screen_size':
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:278: undefined reference to `tgetnum'
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:297: undefined reference to `tgetnum'
../readline/libreadline.a(terminal.o): In function `get_term_capabilities':
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:427: undefined reference to `tgetstr'
../readline/libreadline.a(terminal.o): In function `_rl_init_terminal_io':
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:481: undefined reference to `tgetent'
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:545: undefined reference to `tgetflag'
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:545: undefined reference to `tgetflag'
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:560: undefined reference to `tgetflag'
../readline/libreadline.a(terminal.o): In function `_rl_backspace':
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:665: undefined reference to `tputs'
../readline/libreadline.a(terminal.o): In function `rl_ding':
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:703: undefined reference to `tputs'
../readline/libreadline.a(terminal.o): In function `_rl_enable_meta_key':
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:729: undefined reference to `tputs'
../readline/libreadline.a(terminal.o): In function `_rl_control_keypad':
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:739: undefined reference to `tputs'
/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:741: undefined reference to `tputs'
../readline/libreadline.a(terminal.o):/home/pedro/gdb/mygit/build-mingw/readline/../../src/readline/terminal.c:765: more undefined references to `tputs' follow
collect2: error: ld returned 1 exit status
make: *** [gdb.exe] Error 1

That's a plain configure:

$ ../src/configure --disable-ld --disable-gas --disable-binutils --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32

and so I end up with $prefer_curses set, because that configure
defaults to build the TUI, but I don't have ncurses in my sysroot.

I'm pushing this.

---
From 03b7960334677d33ee7410f2c819f78820c32024 Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Thu, 22 Jan 2015 18:30:01 +0000
Subject: [PATCH] mingw32: fix windows-termcap/curses check

When GDB is configured with "--without-tui --with-curses" or "--with-tui",
$prefer_curses is set to yes. But, that still doesn't mean that curses
will be used. configure will still search for the curses library, and
continue building without it. That's done here:

curses_found=no
if test x"$prefer_curses" = xyes; then
...
AC_SEARCH_LIBS(waddstr, [ncurses cursesX curses])

if test "$ac_cv_search_waddstr" != no; then
curses_found=yes
fi
fi

So if waddstr is not found, meaning curses is not really
available, even though it'd be preferred, $prefer_curses is
'yes', but $curses_found is 'no'.

So the right fix to tell whether we're linking with curses is
$curses_found=yes.

gdb/ChangeLog:
2015-01-22 Pedro Alves <palves@redhat.com>

* configure.ac [*mingw32*]: Check $curses_found instead of
$prefer_curses.
* configure: Regenerate.
* windows-termcap.c: Remove HAVE_CURSES_H, HAVE_NCURSES_H and
HAVE_NCURSES_NCURSES_H checks.
---
gdb/ChangeLog | 8 ++++++++
gdb/configure | 2 +-
gdb/configure.ac | 2 +-
gdb/windows-termcap.c | 4 ----
4 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index a6ba992..6e3e258 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2015-01-22 Pedro Alves <palves@redhat.com>
+
+ * configure.ac [*mingw32*]: Check $curses_found instead of
+ $prefer_curses.
+ * configure: Regenerate.
+ * windows-termcap.c: Remove HAVE_CURSES_H, HAVE_NCURSES_H and
+ HAVE_NCURSES_NCURSES_H checks.
+
2015-01-22 Eli Zaretskii <eliz@gnu.org>

* gdb/tui/tui.c (tui_enable) [__MINGW32__]: If the call to 'newterm'
diff --git a/gdb/configure b/gdb/configure
index fb2480c..9632f9a 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -7188,7 +7188,7 @@ case $host_os in
ac_cv_search_tgetent="none required"
;;
*mingw32*)
- if test x"$prefer_curses" != xyes; then
+ if test x"$curses_found" != xyes; then
ac_cv_search_tgetent="none required"
CONFIG_OBS="$CONFIG_OBS windows-termcap.o"
fi ;;
diff --git a/gdb/configure.ac b/gdb/configure.ac
index 36a74d2..dfc6947 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -611,7 +611,7 @@ case $host_os in
ac_cv_search_tgetent="none required"
;;
*mingw32*)
- if test x"$prefer_curses" != xyes; then
+ if test x"$curses_found" != xyes; then
ac_cv_search_tgetent="none required"
CONFIG_OBS="$CONFIG_OBS windows-termcap.o"
fi ;;
diff --git a/gdb/windows-termcap.c b/gdb/windows-termcap.c
index 0154083..caafc47 100644
--- a/gdb/windows-termcap.c
+++ b/gdb/windows-termcap.c
@@ -22,8 +22,6 @@

#include "defs.h"

-#if !defined HAVE_CURSES_H && !defined HAVE_NCURSES_H && !defined HAVE_NCURSES_NCURSES_H
-
#include <stdlib.h>

/* -Wmissing-prototypes */
@@ -76,5 +74,3 @@ tgoto (const char *cap, int col, int row)
{
return NULL;
}
-
-#endif /* !HAVE_CURSES_H && !HAVE_NCURSES_H && !HAVE_NCURSES_NCURSES_H */
--
1.9.3