On Tue, Mar 12, 2013 at 3:39 PM, <jfons...@vmware.com> wrote: > From: José Fonseca <jfons...@vmware.com> > > We were in four already... > --- > include/c99_compat.h | 105 > +++++++++++++++++++++++++++++++++ > src/egl/main/eglcompiler.h | 44 ++------------ > src/gallium/include/pipe/p_compiler.h | 74 ++--------------------- > src/mapi/mapi/u_compiler.h | 26 ++------ > src/mesa/main/compiler.h | 56 ++---------------- > 5 files changed, 125 insertions(+), 180 deletions(-) > create mode 100644 include/c99_compat.h > > diff --git a/include/c99_compat.h b/include/c99_compat.h > new file mode 100644 > index 0000000..39f958f > --- /dev/null > +++ b/include/c99_compat.h > @@ -0,0 +1,105 @@ > > +/************************************************************************** > + * > + * Copyright 2007-2013 VMware, Inc. > + * All Rights Reserved. > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the > + * "Software"), to deal in the Software without restriction, including > + * without limitation the rights to use, copy, modify, merge, publish, > + * distribute, sub license, and/or sell copies of the Software, and to > + * permit persons to whom the Software is furnished to do so, subject to > + * the following conditions: > + * > + * The above copyright notice and this permission notice (including the > + * next paragraph) shall be included in all copies or substantial portions > + * of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS > + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. > + * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR > + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF > CONTRACT, > + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE > + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. > + * > + > **************************************************************************/ > + > +#ifndef _C99_COMPAT_H_ > +#define _C99_COMPAT_H_ > + > + > +/* > + * C99 inline keyword > + */ > +#ifndef inline > +# ifdef __cplusplus > + /* C++ supports inline keyword */ > +# elif defined(__GNUC__) > +# define inline __inline__ > +# elif defined(_MSC_VER) > +# define inline __inline > +# elif defined(__ICL) > +# define inline __inline > +# elif defined(__INTEL_COMPILER) > + /* Intel compiler supports inline keyword */ > +# elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100) > +# define inline __inline > +# elif defined(__SUNPRO_C) && defined(__C99FEATURES__) >
Solaris Studio supports __inline and __inline__ > + /* C99 supports inline keyword */ > +# elif (__STDC_VERSION__ >= 199901L) > + /* C99 supports inline keyword */ > +# else > +# define inline > +# endif > +#endif > The order of the checks will not work as expected. Intel's compiler will define __GNUC__, and so will clang. The check for __GNUC__ has to be the last one. > + > + > +/* > + * C99 restrict keyword > + * > + * See also: > + * - > http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html > + */ > +#ifndef restrict > +# if (__STDC_VERSION__ >= 199901L) > + /* C99 */ > +# elif defined(__SUNPRO_C) && defined(__C99FEATURES__) > + /* C99 */ > Solaris Studio supports "_Restrict" when not in C99 mode as well. #define restrict _Restrict > +# elif defined(__GNUC__) > +# define restrict __restrict__ > +# elif defined(_MSC_VER) > +# define restrict __restrict > +# else > +# define restrict /* */ > +# endif > +#endif > + > + > +/* > + * C99 __func__ macro > + */ > +#ifndef __func__ > +# if (__STDC_VERSION__ >= 199901L) > + /* C99 */ > +# elif defined(__SUNPRO_C) && defined(__C99FEATURES__) > + /* C99 */ > Solaris Studio supports __FUNCTION__ when not in C99 mode. > +# elif defined(__GNUC__) > +# if __GNUC__ >= 2 > +# define __func__ __FUNCTION__ > +# else > +# define __func__ "<unknown>" > +# endif > +# elif defined(_MSC_VER) > +# if _MSC_VER >= 1300 > +# define __func__ __FUNCTION__ > +# else > +# define __func__ "<unknown>" > +# endif > +# else > +# define __func__ "<unknown>" > +# endif > +#endif > + > + > +#endif /* _C99_COMPAT_H_ */ > diff --git a/src/egl/main/eglcompiler.h b/src/egl/main/eglcompiler.h > index 9823693..2499172 100644 > --- a/src/egl/main/eglcompiler.h > +++ b/src/egl/main/eglcompiler.h > @@ -31,6 +31,9 @@ > #define EGLCOMPILER_INCLUDED > > > +#include "c99_compat.h" /* inline, __func__, etc. */ > + > + > /** > * Get standard integer types > */ > @@ -62,30 +65,7 @@ > #endif > > > -/** > - * Function inlining > - */ > -#ifndef inline > -# ifdef __cplusplus > - /* C++ supports inline keyword */ > -# elif defined(__GNUC__) > -# define inline __inline__ > -# elif defined(_MSC_VER) > -# define inline __inline > -# elif defined(__ICL) > -# define inline __inline > -# elif defined(__INTEL_COMPILER) > - /* Intel compiler supports inline keyword */ > -# elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100) > -# define inline __inline > -# elif defined(__SUNPRO_C) && defined(__C99FEATURES__) > - /* C99 supports inline keyword */ > -# elif (__STDC_VERSION__ >= 199901L) > - /* C99 supports inline keyword */ > -# else > -# define inline > -# endif > -#endif > +/* XXX: Use standard `inline` keyword instead */ > #ifndef INLINE > # define INLINE inline > #endif > @@ -104,21 +84,9 @@ > # endif > #endif > > -/** > - * The __FUNCTION__ gcc variable is generally only used for debugging. > - * If we're not using gcc, define __FUNCTION__ as a cpp symbol here. > - * Don't define it if using a newer Windows compiler. > - */ > +/* XXX: Use standard `__func__` instead */ > #ifndef __FUNCTION__ > -# if (!defined __GNUC__) && (!defined __xlC__) && \ > - (!defined(_MSC_VER) || _MSC_VER < 1300) > -# if (__STDC_VERSION__ >= 199901L) /* C99 */ || \ > - (defined(__SUNPRO_C) && defined(__C99FEATURES__)) > -# define __FUNCTION__ __func__ > -# else > -# define __FUNCTION__ "<unknown>" > -# endif > -# endif > +# define __FUNCTION__ __func__ > #endif > > #endif /* EGLCOMPILER_INCLUDED */ > diff --git a/src/gallium/include/pipe/p_compiler.h > b/src/gallium/include/pipe/p_compiler.h > index 5958333..a131969 100644 > --- a/src/gallium/include/pipe/p_compiler.h > +++ b/src/gallium/include/pipe/p_compiler.h > @@ -29,6 +29,8 @@ > #define P_COMPILER_H > > > +#include "c99_compat.h" /* inline, __func__, etc. */ > + > #include "p_config.h" > > #include <stdlib.h> > @@ -90,28 +92,7 @@ typedef unsigned char boolean; > #endif > #endif > > -/* Function inlining */ > -#ifndef inline > -# ifdef __cplusplus > - /* C++ supports inline keyword */ > -# elif defined(__GNUC__) > -# define inline __inline__ > -# elif defined(_MSC_VER) > -# define inline __inline > -# elif defined(__ICL) > -# define inline __inline > -# elif defined(__INTEL_COMPILER) > - /* Intel compiler supports inline keyword */ > -# elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100) > -# define inline __inline > -# elif defined(__SUNPRO_C) && defined(__C99FEATURES__) > - /* C99 supports inline keyword */ > -# elif (__STDC_VERSION__ >= 199901L) > - /* C99 supports inline keyword */ > -# else > -# define inline > -# endif > -#endif > +/* XXX: Use standard `inline` keyword instead */ > #ifndef INLINE > # define INLINE inline > #endif > @@ -127,26 +108,6 @@ typedef unsigned char boolean; > # endif > #endif > > -/* > - * Define the C99 restrict keyword. > - * > - * See also: > - * - > http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html > - */ > -#ifndef restrict > -# if (__STDC_VERSION__ >= 199901L) > - /* C99 */ > -# elif defined(__SUNPRO_C) && defined(__C99FEATURES__) > - /* C99 */ > -# elif defined(__GNUC__) > -# define restrict __restrict__ > -# elif defined(_MSC_VER) > -# define restrict __restrict > -# else > -# define restrict /* */ > -# endif > -#endif > - > > /* Function visibility */ > #ifndef PUBLIC > @@ -160,35 +121,10 @@ typedef unsigned char boolean; > #endif > > > -/* The __FUNCTION__ gcc variable is generally only used for debugging. > - * If we're not using gcc, define __FUNCTION__ as a cpp symbol here. > - */ > +/* XXX: Use standard `__func__` instead */ > #ifndef __FUNCTION__ > -# if !defined(__GNUC__) > -# if (__STDC_VERSION__ >= 199901L) /* C99 */ || \ > - (defined(__SUNPRO_C) && defined(__C99FEATURES__)) > -# define __FUNCTION__ __func__ > -# else > -# define __FUNCTION__ "<unknown>" > -# endif > -# endif > -# if defined(_MSC_VER) && _MSC_VER < 1300 > -# define __FUNCTION__ "<unknown>" > -# endif > +# define __FUNCTION__ __func__ > #endif > -#ifndef __func__ > -# if (__STDC_VERSION__ >= 199901L) || \ > - (defined(__SUNPRO_C) && defined(__C99FEATURES__)) > - /* __func__ is part of C99 */ > -# elif defined(_MSC_VER) > -# if _MSC_VER >= 1300 > -# define __func__ __FUNCTION__ > -# else > -# define __func__ "<unknown>" > -# endif > -# endif > -#endif > - > > > /* This should match linux gcc cdecl semantics everywhere, so that we > diff --git a/src/mapi/mapi/u_compiler.h b/src/mapi/mapi/u_compiler.h > index 2b019ed..f376e97 100644 > --- a/src/mapi/mapi/u_compiler.h > +++ b/src/mapi/mapi/u_compiler.h > @@ -1,28 +1,10 @@ > #ifndef _U_COMPILER_H_ > #define _U_COMPILER_H_ > > -/* Function inlining */ > -#ifndef inline > -# ifdef __cplusplus > - /* C++ supports inline keyword */ > -# elif defined(__GNUC__) > -# define inline __inline__ > -# elif defined(_MSC_VER) > -# define inline __inline > -# elif defined(__ICL) > -# define inline __inline > -# elif defined(__INTEL_COMPILER) > - /* Intel compiler supports inline keyword */ > -# elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100) > -# define inline __inline > -# elif defined(__SUNPRO_C) && defined(__C99FEATURES__) > - /* C99 supports inline keyword */ > -# elif (__STDC_VERSION__ >= 199901L) > - /* C99 supports inline keyword */ > -# else > -# define inline > -# endif > -#endif > +#include "c99_compat.h" /* inline, __func__, etc. */ > + > + > +/* XXX: Use standard `inline` keyword instead */ > #ifndef INLINE > # define INLINE inline > #endif > diff --git a/src/mesa/main/compiler.h b/src/mesa/main/compiler.h > index b22b994..4871248 100644 > --- a/src/mesa/main/compiler.h > +++ b/src/mesa/main/compiler.h > @@ -48,6 +48,8 @@ > #include <float.h> > #include <stdarg.h> > > +#include "c99_compat.h" /* inline, __func__, etc. */ > + > > #ifdef __cplusplus > extern "C" { > @@ -111,30 +113,7 @@ extern "C" { > > > > -/** > - * Function inlining > - */ > -#ifndef inline > -# ifdef __cplusplus > - /* C++ supports inline keyword */ > -# elif defined(__GNUC__) > -# define inline __inline__ > -# elif defined(_MSC_VER) > -# define inline __inline > -# elif defined(__ICL) > -# define inline __inline > -# elif defined(__INTEL_COMPILER) > - /* Intel compiler supports inline keyword */ > -# elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100) > -# define inline __inline > -# elif defined(__SUNPRO_C) && defined(__C99FEATURES__) > - /* C99 supports inline keyword */ > -# elif (__STDC_VERSION__ >= 199901L) > - /* C99 supports inline keyword */ > -# else > -# define inline > -# endif > -#endif > +/* XXX: Use standard `inline` keyword instead */ > #ifndef INLINE > # define INLINE inline > #endif > @@ -177,35 +156,10 @@ extern "C" { > # endif > #endif > > -/** > - * The __FUNCTION__ gcc variable is generally only used for debugging. > - * If we're not using gcc, define __FUNCTION__ as a cpp symbol here. > - * Don't define it if using a newer Windows compiler. > - */ > +/* XXX: Use standard `__func__` instead */ > #ifndef __FUNCTION__ > -# if !defined(__GNUC__) && !defined(__xlC__) && \ > - (!defined(_MSC_VER) || _MSC_VER < 1300) > -# if (__STDC_VERSION__ >= 199901L) /* C99 */ || \ > - (defined(__SUNPRO_C) && defined(__C99FEATURES__)) > -# define __FUNCTION__ __func__ > -# else > -# define __FUNCTION__ "<unknown>" > -# endif > -# endif > +# define __FUNCTION__ __func__ > #endif > -#ifndef __func__ > -# if (__STDC_VERSION__ >= 199901L) || \ > - (defined(__SUNPRO_C) && defined(__C99FEATURES__)) > - /* __func__ is part of C99 */ > -# elif defined(_MSC_VER) > -# if _MSC_VER >= 1300 > -# define __func__ __FUNCTION__ > -# else > -# define __func__ "<unknown>" > -# endif > -# endif > -#endif > - > > /** > * Either define MESA_BIG_ENDIAN or MESA_LITTLE_ENDIAN, and CPU_TO_LE32. > -- > 1.7.9.5 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev