This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix tui compilation with Solaris libcurses (PR tui/21482)


Hi Pedro,

>>   It turned out this happens because <curses.h> has
>> 
>> #define clear()         wclear(stdscr)
>> 
>>   This can be avoided by defining NOMACROS, which the patch below does
>>   for solaris2.*.
>
> We already handle some curses warts in gdb_curses.h (and then
> include that header instead everywhere).  I think this could go there,
> even unconditionally.  (This is more about curses implementation
> than OS strictly speaking.  Googling around finds hits for that
> macro in the AIX curses.h header, for example.).  Looks like ncurses

probably of SysVr4 origin ultimately: at least I already found it in
those sources.

> checks NCURSES_NOMACROS instead of NOMACROS, we could define that too.

Makes sense (unless this creates problems of its own ;-).

>> * Even with this workaround, compilation fails in gdb/tui for several
>>   instances of the same problem:
>> 
>> /vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-winsource.c: In function ‘void tui_erase_source_content(tui_win_info*, int)’:
>> /vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-winsource.c:257:18: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
>>         no_src_str);
>>                   ^
>> In file included from /vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/gdb_curses.h:42:0,
>>                  from /vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-data.h:26,
>>                  from /vol/src/gnu/gdb/gdb-8.0-branch/local/gdb/tui/tui-winsource.c:33:
>> /vol/gcc-7/lib/gcc/sparc-sun-solaris2.10/7.1.0/include-fixed/curses.h:699:12: note:   initializing argument 4 of ‘int mvwaddstr(WINDOW*, int, int, char*)’
>>  extern int mvwaddstr(WINDOW *, int, int, char *);
>>             ^~~~~~~~~
>> make[2]: *** [Makefile:1927: tui-winsource.o] Error 1
>> 
>>   Unlike ncurses, <curses.h> declares 
>> 
>> extern int mvwaddstr(WINDOW *, int, int, char *);
>> 
>>   i.e. the last arg is char *, not const char *.
>> 
>>   The patch fixes this by casting the last arg to mvwaddstr to char *,
>>   as was recently done on mainline in a newterm() call (the only
>>   difference between 8.0 and mainline gdb/tui).
>
> That's fine with me.
>
> Looking at:
>
>  https://docs.oracle.com/cd/E19455-01/806-0629/6j9vjco9i/index.html
>
> I see that this affects several APIs, so nicer would be to
> fix this centrally in gdb_curses.h like we fix e.g.,
> PyObject_GetAttrString in python/python-internal.h.  But that can
> be for another day.

This way you centralize the knowledge why you are doing this in once
header rather than several calls/casts.  I guess we'll cross that bridge
once another function causes similar trouble.

>> With those changes, gdb on the 8.0 branch compiles cleanly on
>> sparcv9-sun-solaris2.10 with native curses and amd64-pc-solaris2.12
>> with bundled ncurses (well, almost: on Solaris 12 ncurses in
>> /usr/include is used, but gdb linked against -lcurses which fails:
>> 
>> Undefined                       first referenced
>>  symbol                             in file
>> wattr_on                            tui-wingeneral.o
>> wattr_off                           tui-wingeneral.o
>> 
>> but that's a different and preexisting problem).
>
> These two problems would be better pushed as two separate patches
> (with the rationales given above as separate commit logs).

Fine with me.  I'll look at the ncurses header vs. libcurses issue
later: so far I've just been lazy and manually linked gdb if I hit it.

>> Ok for mainline and 8.0 branch?
>
> The cast bits are OK.  I'd like to hear your opinion on
> moving the NOMACROS define to gdb_curses.h, before including
> <curses.h>.

The move makes sense to me: I just wasn't aware of that file.  I'll
prepare a separate patch.

Thanks.
        Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]