[Mesa-dev] [PATCH] mesa: use c99 functions on non-linux platforms if supported

Jonathan Gray jsg at jsg.id.au
Mon Aug 5 18:52:32 PDT 2013


On Mon, Aug 05, 2013 at 09:46:58AM -0700, Chad Versace wrote:
> On 08/01/2013 03:52 PM, Jonathan Gray wrote:
> >On Thu, Aug 01, 2013 at 11:21:57AM -0700, Ian Romanick wrote:
> >>On 08/01/2013 09:54 AM, Chad Versace wrote:
> >>>On 08/01/2013 09:48 AM, Chad Versace wrote:
> >>>>On 08/01/2013 12:27 AM, Jonathan Gray wrote:
> >>>>>Signed-off-by: Jonathan Gray <jsg at jsg.id.au>
> >>>>>---
> >>>>>  src/mesa/main/imports.h | 2 +-
> >>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>>>>
> >>>>>diff --git src/mesa/main/imports.h src/mesa/main/imports.h
> >>>>>index 53e40b4..aa7dc49 100644
> >>>>>--- src/mesa/main/imports.h
> >>>>>+++ src/mesa/main/imports.h
> >>>>>@@ -230,7 +230,7 @@ static inline int IS_INF_OR_NAN( float x )
> >>>>>   *** LDEXPF: multiply value by an integral power of two
> >>>>>   *** FREXPF: extract mantissa and exponent from value
> >>>>>   ***/
> >>>>>-#if defined(__gnu_linux__)
> >>>>>+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
> >>>>>  /* C99 functions */
> >>>>>  #define CEILF(x)   ceilf(x)
> >>>>>  #define FLOORF(x)  floorf(x)
> >>>>
> >>>>This patch looks good to me, but I'm unable to test it.
> >>>>On what platform did you test it?
> >>>
> >
> >OpenBSD.
> >
> >>>I retract the "looks good". These functions are also available
> >>>when compiling with `gcc -std=gnu89`, yet gnu89 does not
> >>>define __STDC_VERSION__.
> >>
> >>This is the sort of issue I had in mind in my reply to this patch.
> >>That's why autoconf (and other build systems) can figure out what
> >>library functions are available and generate HAVE_CEILF, etc. macros
> >>for them.
> >
> >There are already checks along the lines of what I'm adding
> >as configure.ac makes gcc compile with -std=c99
> >
> >>
> >>>So, use
> >>>#if defined(__gnu_linux) || (your_new_c99_checks)
> >
> >It doesn't really make sense to do that, especially as the
> >rest of the file is different.
> 
> 
> I see your point. The #ifdefs throughout the rest of the file have
> sensible conditions. This is the only #ifdef that uses __gnu_linux__.
> 
> I checked the Linux manpages for all functions in this #ifdef block.
> According to the manpages, at least for glibc, all the functions have
> the same feature macro requirement.
> 
> _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE ||
> _POSIX_C_SOURCE >= 200112L
> 
> Do you see any problem with using this as the #ifdef condition? It seems
> that this condition will be safe to use on BSD as well as Linux.

The various _SOURCE macros control the visibility of definitions in
headers and have to be defined by the program being compiled so I
think you're a bit confused there, see

http://linux.die.net/man/7/feature_test_macros

The ifdef test is more about trying to spot systems that don't have c99
functions (msvc and ?).  The impression I get from the glibc man page
is you'll have to compile with --std=c99 (which mesa already does)
or define _ISOC99_SOURCE before the relevant include.


More information about the mesa-dev mailing list