On 2017-02-17 17:57, Peter Maydell wrote: > On 17 February 2017 at 11:20, Paolo Bonzini <pbonz...@redhat.com> wrote: >> >> >> On 17/02/2017 11:18, Peter Maydell wrote: >>> Defining _XOPEN_SOURCE is easy enough, and I think we should >>> do it unconditionally. We should check what effect this has >>> on the BSD hosts though I guess. (You could argue that we >>> should be defining _XOPEN_SOURCE anyway for the benefit of >>> the non-glibc BSD/Solaris/etc platforms.) >> >> Sounds good, then I think we should define it to 700 just like glibc does. > > Unfortunately this idea turns out to break OSX compiles, > because on OSX saying _XOPEN_SOURCE=anything disables > all the non-X/Open APIs (which you get by default, and > some of which like mkdtemp we use).
A bit late to this thread, but the original problem was also reported for Mac OS X with --enable-curses in MacPorts. The build fails with the same symptoms as in the original report. https://trac.macports.org/ticket/53929 As you identified, the problem is that ncurses expects the define _XOPEN_SOURCE >= 500 to enable the wide-char function declarations. The solution to retain access to non-standard API on Mac OS X would be to also define _DARWIN_C_SOURCE which enables extensions. $ cat foo.c #include <unistd.h> int main() { mkdtemp("/tmp/test-XXXXXX"); } $ cc -D_XOPEN_SOURCE=500 -c foo.c foo.c:4:5: warning: implicit declaration of function 'mkdtemp' is invalid in C99 [-Wimplicit-function-declaration] mkdtemp("/tmp/test-XXXXXX"); ^ 1 warning generated. $ cc -D_XOPEN_SOURCE=500 -D_DARWIN_C_SOURCE -c foo.c $ A quick test on current master with configure patched to define QEMU_CFLAGS="-D_XOPEN_SOURCE=500 -D_DARWIN_C_SOURCE $QEMU_CFLAGS" compiled fine for both a default configure and with --enable-curses. Rainer