diff --git a/meson.build b/meson.build index 866bfd27..f2550641 100644 --- a/meson.build +++ b/meson.build @@ -570,23 +570,40 @@ foreach h : headers endforeach if want_textui and conf.get('HAVE_TERM_H', 0) == 1 - if not cc.links(''' + if cc.links(''' #include #include -int main () { +int main (void) { return tputs("x", 1, putchar); } -''', dependencies : textui_dep) - if cc.has_header('curses.h') and cc.links(''' +''', args : '-pedantic-errors', dependencies : textui_dep, name : 'Curses working') + # ok + else + has_curses_h = cc.has_header('curses.h') + if has_curses_h and cc.links(''' #include #include -int main () { +int main (void) { return tputs("x", 1, putchar); } -''', dependencies : textui_dep, name : 'working Curses') +''', args : '-pedantic-errors', dependencies : textui_dep, name : 'Curses working with curses.h') conf.set('NEED_CURSES_H', 1, description : 'tputs needs curses.h') else - error('could not link terminfo') + if has_curses_h and cc.links(''' +#include +#include +int char_putchar (char c) { + return putchar(c); +} +int main (void) { + return tputs("x", 1, char_putchar); +} +''', args : '-pedantic-errors', dependencies : textui_dep, name : 'Curses with tputs third argument arg char') + conf.set('NEED_CURSES_H', 1, description : 'tputs needs curses.h') + conf.set('TPUTS_SVR4', 1, description : 'third argument of tputs has the type int (*)(char)') + else + error('could not link terminfo') + endif endif endif endif diff --git a/src/fe-text/term-terminfo.c b/src/fe-text/term-terminfo.c index d4db942a..9bcdd5a0 100644 --- a/src/fe-text/term-terminfo.c +++ b/src/fe-text/term-terminfo.c @@ -318,7 +318,12 @@ void term_window_scroll(TERM_WINDOW *window, int count) term_lines_empty[window->y+y] = FALSE; } -inline static int term_putchar(int c) +#ifdef TPUTS_SVR4 +#define putc_arg_t char +#else +#define putc_arg_t int +#endif +inline static int term_putchar(putc_arg_t c) { return fputc(c, current_term->out); } diff --git a/src/fe-text/terminfo-core.c b/src/fe-text/terminfo-core.c index 48e1de8c..6e904c9e 100644 --- a/src/fe-text/terminfo-core.c +++ b/src/fe-text/terminfo-core.c @@ -6,8 +6,13 @@ # define _POSIX_VDISABLE 0 #endif +#ifdef TPUTS_SVR4 +#define putc_arg_t char +#else +#define putc_arg_t int +#endif #define tput(s) tputs(s, 0, term_putchar) -inline static int term_putchar(int c) +inline static int term_putchar(putc_arg_t c) { return fputc(c, current_term->out); }