[Mesa-dev] Mesa (master): mesa, gallium, egl, mapi: One definition of C99 inline/ __func__ to rule them all.

Jose Fonseca jfonseca at vmware.com
Wed Mar 13 08:08:52 PDT 2013


I think Vinson fixed that issue. Let me know if there are still build issues.

Jose

----- Original Message -----
> 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.
> 
> 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