On Sat, 11 Jan 2014, Jacek Caban wrote: [...]
__builtin_* stuff is compiler, not OS, dependent, so this should work on Solaris when GCC is used. We still have to use __port_nan()-like solution as a fallback for compilers that we can't support other way, but IMO we should try harder to provide a better definition.
The only NAN definitions I see on Solaris are in /usr/include/iso/math_c99.h:
#if defined(_STDC_C99) || _XOPEN_SOURCE - 0 >= 600 || defined(__C99FEATURES__) # if defined(__GNUC__) [...] # undef NAN # define NAN (__builtin_nanf("")) # else [...] # undef NAN # define NAN __builtin_nan # endif
The problem is: * Not all systems have iso/math_c99.h so we cannot unconditionally include it. But autoconf macros checks like HAVE_XXX are not allowed in the Winelib headers. This means we cannot include math_c99.h from our math.h header.
* The system math.h header includes math_c99.h unconditionally. But including the system math.h from our own does not seem possible (I don't think forcing the Winelib users to use weird -I/symlink/to/usr/include would be acceptable).
* __builtin_nanf() is not a macro so we cannot check for it. So we'd have to duplicate either Solaris' or Linux's #ifdefs but that looks pretty fragile.
So I'm not sure there is much more we can do.