[Mesa-dev] Mesa (master): mesa, gallium, egl, mapi: One definition of C99 inline/ __func__ to rule them all.
Ian Romanick
idr at freedesktop.org
Wed Mar 13 09:44:04 PDT 2013
On 03/13/2013 01:14 AM, Jose Fonseca wrote:
> Sorry. I'll look into it. I did try running make locally, but it was not representative because it didn't have everything enabled.
>
> BTW, scons is also busted with the recent autotools changes.
Blarg. Of course it did. :( Has the break been reported to the guilty
party? I haven't been following any of the build system discussion very
closely over the last few weeks...
> Jose
>
> ----- Original Message -----
>> I'm pretty sure this commit broke 'make check'.
>>
>> On 03/12/2013 03:07 PM, Jose Fonseca wrote:
>>> Module: Mesa
>>> Branch: master
>>> Commit: 70fe7c6d3e1c7534f6598c4616bebf672f42668b
>>> URL:
>>> https://urldefense.proofpoint.com/v1/url?u=http://cgit.freedesktop.org/mesa/mesa/commit/?id%3D70fe7c6d3e1c7534f6598c4616bebf672f42668b&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=NMr9uy2iTjWVixC0wOcYCWEIYhfo80qKwRgdodpoDzA%3D%0A&m=H8wIUjX2Q9Vap177sJPdRYKZbkm3kW0pnqa8bxRkM9I%3D%0A&s=c39db3454f1b8b1ca49172fd338781131296d92aa521862672d8bf538fbb786a
>>>
>>> Author: José Fonseca <jfonseca at vmware.com>
>>> Date: Tue Mar 12 11:17:49 2013 +0000
>>>
>>> mesa,gallium,egl,mapi: One definition of C99 inline/__func__ to rule them
>>> all.
>>>
>>> We were in four already...
>>>
>>> NOTE: Candidate for the stable branches.
>>>
>>> Reviewed-by: Brian Paul <brianp at vmware.com>
>>>
>>> ---
>>>
>>> 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(-)
>>>
>>> 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__)
>>> + /* C99 supports inline keyword */
>>> +# elif (__STDC_VERSION__ >= 199901L)
>>> + /* C99 supports inline keyword */
>>> +# else
>>> +# define inline
>>> +# endif
>>> +#endif
>>> +
>>> +
>>> +/*
>>> + * C99 restrict keyword
>>> + *
>>> + * See also:
>>> + * -
>>> https://urldefense.proofpoint.com/v1/url?u=http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=NMr9uy2iTjWVixC0wOcYCWEIYhfo80qKwRgdodpoDzA%3D%0A&m=H8wIUjX2Q9Vap177sJPdRYKZbkm3kW0pnqa8bxRkM9I%3D%0A&s=f43184c4b720b2a3a361edbfbdffd2faf83def468e6171389b627cae6991baf4
>>> + */
>>> +#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
>>> +
>>> +
>>> +/*
>>> + * C99 __func__ macro
>>> + */
>>> +#ifndef __func__
>>> +# if (__STDC_VERSION__ >= 199901L)
>>> + /* C99 */
>>> +# elif defined(__SUNPRO_C) && defined(__C99FEATURES__)
>>> + /* C99 */
>>> +# 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:
>>> - * -
>>> https://urldefense.proofpoint.com/v1/url?u=http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=NMr9uy2iTjWVixC0wOcYCWEIYhfo80qKwRgdodpoDzA%3D%0A&m=H8wIUjX2Q9Vap177sJPdRYKZbkm3kW0pnqa8bxRkM9I%3D%0A&s=f43184c4b720b2a3a361edbfbdffd2faf83def468e6171389b627cae6991baf4
>>> - */
>>> -#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.
>>>
>>> _______________________________________________
>>> mesa-commit mailing list
>>> mesa-commit at lists.freedesktop.org
>>> https://urldefense.proofpoint.com/v1/url?u=http://lists.freedesktop.org/mailman/listinfo/mesa-commit&k=oIvRg1%2BdGAgOoM1BIlLLqw%3D%3D%0A&r=NMr9uy2iTjWVixC0wOcYCWEIYhfo80qKwRgdodpoDzA%3D%0A&m=H8wIUjX2Q9Vap177sJPdRYKZbkm3kW0pnqa8bxRkM9I%3D%0A&s=510f0d2665800812aa513ed2927ab3863a04a5f61b828d2ec3d01c0fba2bbf11
More information about the mesa-dev
mailing list