On 02.06.2017 23:58, Laszlo Ersek wrote: > On 06/02/17 16:35, Peter Maydell wrote: >> We want the wide character functions from the ncurses header. >> Unfortunately it doesn't provide them by default, but only >> if either: >> * NCURSES_WIDECHAR is defined (for ncurses 20111030 and up) >> * _XOPEN_SOURCE/_XOPEN_SOURCE_EXTENDED are suitably defined >> >> So far we have been implicitly relying on the latter, because >> for GNU libc when we define _GNU_SOURCE this causes libc >> to define the _XOPEN_SOURCE macros for us. Unfortunately >> this doesn't work on all libcs, because some (like OSX and >> musl libc) do not define _XOPEN_SOURCE when _GNU_SOURCE >> is defined. >> >> We can't fix this by defining _XOPEN_SOURCE ourselves, because >> that also means "and don't provide any functions that aren't in >> that standard", and not all libcs provide any way to override >> that to also get the non-standard functions. In particular >> FreeBSD has no such mechanism, and OSX's _DARWIN_C_SOURCE >> doesn't reenable everything (for instance getpagesize() >> is still not prototyped if _DARWIN_C_SOURCE and _XOPEN_SOURCE >> are both defined). >> >> So we have to define NCURSES_WIDECHAR. (This will only work >> if your ncurses is at least 20111030, as older versions >> don't honour this macro.) >> >> Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> >> --- >> Testing from the people with musl libc and OSX-with-ncurses >> appreciated, as I don't have any systems which have the bug >> which this patch is attempting to fix... >> >> configure | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/configure b/configure >> index 0586ec9..6aca5d1 100755 >> --- a/configure >> +++ b/configure >> @@ -3053,6 +3053,8 @@ int main(void) { >> EOF >> IFS=: >> for curses_inc in $curses_inc_list; do >> + # Make sure we get the wide character prototypes >> + curses_inc="-DNCURSES_WIDECHAR $curses_inc" >> IFS=: >> for curses_lib in $curses_lib_list; do >> unset IFS >> > > Given that we're already consciously using non-portable functions, this > solution looks the least messy to me. >
These functions are enough portable to work on NetBSD curses(3). pkgsrc had an equivalent patch to define NCURSES_WIDECHAR=1 to fix build on Darwin. > Acked-by: Laszlo Ersek <ler...@redhat.com> > > Thanks > Laszlo >
signature.asc
Description: OpenPGP digital signature