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. Acked-by: Laszlo Ersek <ler...@redhat.com> Thanks Laszlo