Re: [Mesa-dev] [PATCH] include: Add helper header to help trap includes inside extern C.

2015-05-13 Thread kallisti5

On 2014-12-11 16:14, Jose Fonseca wrote:

From: José Fonseca jfons...@vmware.com

This is just to help repro and fixing these issues with any C++ 
compiler --


commiting this will of course wait until all issues are addressed.


$ scons src/glsl/
scons: Reading SConscript files ...
Checking for GCC ...  yes
Checking for Clang ...  no
Checking for X11 (x11 xext xdamage xfixes glproto = 1.4.13)... yes
Checking for XCB (x11-xcb xcb-glx = 1.8.1 xcb-dri2 = 1.8)... yes
Checking for XF86VIDMODE (xxf86vm)... yes
Checking for DRM (libdrm = 2.4.38)... yes
Checking for UDEV (libudev = 151)... yes
warning: LLVM disabled: not building llvmpipe
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: 
build/linux-x86_64-debug/glsl

  Compiling src/glsl/ast_array_index.cpp ...
  Compiling src/glsl/ast_expr.cpp ...
  Compiling src/glsl/ast_function.cpp ...
  Compiling src/glsl/ast_to_hir.cpp ...
  Compiling src/glsl/ast_type.cpp ...
  Compiling src/glsl/builtin_functions.cpp ...
In file included from include/c99_compat.h:28:0,
 from src/mapi/u_compiler.h:4,
 from src/mapi/u_thread.h:47,
 from src/mapi/glapi/glapi.h:47,
 from src/mesa/main/mtypes.h:42,
 from src/mesa/main/errors.h:47,
 from src/mesa/main/imports.h:41,
 from src/mesa/main/core.h:44,
 from src/glsl/builtin_functions.cpp:58:
include/no_extern_c.h:48:1: error: template with C linkage
 templateclass T class _IncludeInsideExternCNotPortable;
 ^


Good morning,

This change breaks all of the Haiku code as we use a *lot* of C++ code 
inside

of Mesa (well, all the OS interfaces are C++ that wrap the Mesa C)

/Builds/mesa find . -name *.cpp | grep haiku
./src/egl/drivers/haiku/egl_haiku.cpp
./src/gallium/targets/haiku-softpipe/GalliumContext.cpp
./src/gallium/targets/haiku-softpipe/SoftwareRenderer.cpp
./src/mesa/drivers/haiku/swrast/SoftwareRast.cpp


Example:
  Compiling src/util/u_atomic_test.c ...
In file included from include/c99_compat.h:28:0,
 from include/c11/threads.h:38,
 from src/mesa/main/mtypes.h:39,
 from src/mesa/main/errors.h:42,
 from src/mesa/main/imports.h:44,
 from src/mesa/main/context.h:52,
 from src/mesa/drivers/haiku/swrast/SoftwareRast.h:20,
 from src/mesa/drivers/haiku/swrast/SoftwareRast.cpp:14:
include/no_extern_c.h:47:1: error: template with C linkage
 templateclass T class _IncludeInsideExternCNotPortable;
 ^
In file included from include/c99_compat.h:28:0,
 from src/gallium/include/pipe/p_compiler.h:32,
 from src/gallium/auxiliary/util/u_math.h:42,
 from src/mesa/main/macros.h:35,
 from src/mesa/main/colormac.h:37,
 from src/mesa/drivers/haiku/swrast/SoftwareRast.cpp:28:
include/no_extern_c.h:47:1: error: template with C linkage
 templateclass T class _IncludeInsideExternCNotPortable;

Any alternative fix ideas besides me adding a if !defined(__HAIKU__) to 
include/no_extern_c.h?


 -- Alex
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] include: Add helper header to help trap includes inside extern C.

2015-05-13 Thread Jason Ekstrand
On May 13, 2015 8:01 AM, kallisti5 kallis...@unixzen.com wrote:

 On 2014-12-11 16:14, Jose Fonseca wrote:

 From: José Fonseca jfons...@vmware.com

 This is just to help repro and fixing these issues with any C++ compiler
--

 commiting this will of course wait until all issues are addressed.


 $ scons src/glsl/
 scons: Reading SConscript files ...
 Checking for GCC ...  yes
 Checking for Clang ...  no
 Checking for X11 (x11 xext xdamage xfixes glproto = 1.4.13)... yes
 Checking for XCB (x11-xcb xcb-glx = 1.8.1 xcb-dri2 = 1.8)... yes
 Checking for XF86VIDMODE (xxf86vm)... yes
 Checking for DRM (libdrm = 2.4.38)... yes
 Checking for UDEV (libudev = 151)... yes
 warning: LLVM disabled: not building llvmpipe
 scons: done reading SConscript files.
 scons: Building targets ...
 scons: building associated VariantDir targets:
build/linux-x86_64-debug/glsl
   Compiling src/glsl/ast_array_index.cpp ...
   Compiling src/glsl/ast_expr.cpp ...
   Compiling src/glsl/ast_function.cpp ...
   Compiling src/glsl/ast_to_hir.cpp ...
   Compiling src/glsl/ast_type.cpp ...
   Compiling src/glsl/builtin_functions.cpp ...
 In file included from include/c99_compat.h:28:0,
  from src/mapi/u_compiler.h:4,
  from src/mapi/u_thread.h:47,
  from src/mapi/glapi/glapi.h:47,
  from src/mesa/main/mtypes.h:42,
  from src/mesa/main/errors.h:47,
  from src/mesa/main/imports.h:41,
  from src/mesa/main/core.h:44,
  from src/glsl/builtin_functions.cpp:58:
 include/no_extern_c.h:48:1: error: template with C linkage
  templateclass T class _IncludeInsideExternCNotPortable;
  ^


 Good morning,

 This change breaks all of the Haiku code as we use a *lot* of C++ code
inside
 of Mesa (well, all the OS interfaces are C++ that wrap the Mesa C)

 /Builds/mesa find . -name *.cpp | grep haiku
 ./src/egl/drivers/haiku/egl_haiku.cpp
 ./src/gallium/targets/haiku-softpipe/GalliumContext.cpp
 ./src/gallium/targets/haiku-softpipe/SoftwareRenderer.cpp
 ./src/mesa/drivers/haiku/swrast/SoftwareRast.cpp


 Example:
   Compiling src/util/u_atomic_test.c ...

 In file included from include/c99_compat.h:28:0,
  from include/c11/threads.h:38,
  from src/mesa/main/mtypes.h:39,
  from src/mesa/main/errors.h:42,
  from src/mesa/main/imports.h:44,
  from src/mesa/main/context.h:52,
  from src/mesa/drivers/haiku/swrast/SoftwareRast.h:20,
  from src/mesa/drivers/haiku/swrast/SoftwareRast.cpp:14:
 include/no_extern_c.h:47:1: error: template with C linkage

  templateclass T class _IncludeInsideExternCNotPortable;
  ^
 In file included from include/c99_compat.h:28:0,
  from src/gallium/include/pipe/p_compiler.h:32,
  from src/gallium/auxiliary/util/u_math.h:42,
  from src/mesa/main/macros.h:35,
  from src/mesa/main/colormac.h:37,
  from src/mesa/drivers/haiku/swrast/SoftwareRast.cpp:28:
 include/no_extern_c.h:47:1: error: template with C linkage

  templateclass T class _IncludeInsideExternCNotPortable;

 Any alternative fix ideas besides me adding a if !defined(__HAIKU__) to
include/no_extern_c.h?

Please do not do that!  The whole point of this patch is to catch places
where headers are included inside an extern C block.  This patch makes
them a compile error instead of being silently wrong.

The correct solution is to fix the haiku platform integration so it doesn't
do this.

--Jason

  -- Alex

 ___
 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


Re: [Mesa-dev] [PATCH] include: Add helper header to help trap includes inside extern C.

2015-05-13 Thread kallisti5

On 2015-05-13 10:42, Jason Ekstrand wrote:

On May 13, 2015 8:01 AM, kallisti5 kallis...@unixzen.com wrote:
src/mesa/drivers/haiku/swrast/SoftwareRast.cpp:28:
  include/no_extern_c.h:47:1: error: template with C linkage
 
   templateclass T class _IncludeInsideExternCNotPortable;
 
  Any alternative fix ideas besides me adding a if
!defined(__HAIKU__) to include/no_extern_c.h?

Please do not do that!  The whole point of this patch is to catch
places where headers are included inside an extern C block.  This
patch makes them a compile error instead of being silently wrong.

The correct solution is to fix the haiku platform integration so it
doesn't do this.

--Jason


Yeah, I had a chat in IRC and determined that I need to add extern C
a few places within Mesa instead of doing a bulk extern C to the
mesa C headers.

One example is glapi_priv lacks any extern C (ifdef C++ wrapped)

I'll begin submitting patches to the ML over the next few days.

Thanks!

 -- Alex
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] include: Add helper header to help trap includes inside extern C.

2015-03-06 Thread Mark Janes
Unfortunately, my build configuration does not build gallium.  This
caused me to miss some files which still have extern C includes.

Due to this oversight, master encounters build errors.  I'll send a
patch asap.

-Mark

Mark Janes mark.a.ja...@intel.com writes:

 Assuming my patch to fix 'extern C' issues is pushed before this one, 

 Reviewed-by: Mark Janes mark.a.ja...@intel.com

 Jose Fonseca jfons...@vmware.com writes:

 From: José Fonseca jfons...@vmware.com

 This is just to help repro and fixing these issues with any C++ compiler --

 commiting this will of course wait until all issues are addressed.


 $ scons src/glsl/
 scons: Reading SConscript files ...
 Checking for GCC ...  yes
 Checking for Clang ...  no
 Checking for X11 (x11 xext xdamage xfixes glproto = 1.4.13)... yes
 Checking for XCB (x11-xcb xcb-glx = 1.8.1 xcb-dri2 = 1.8)... yes
 Checking for XF86VIDMODE (xxf86vm)... yes
 Checking for DRM (libdrm = 2.4.38)... yes
 Checking for UDEV (libudev = 151)... yes
 warning: LLVM disabled: not building llvmpipe
 scons: done reading SConscript files.
 scons: Building targets ...
 scons: building associated VariantDir targets: build/linux-x86_64-debug/glsl
   Compiling src/glsl/ast_array_index.cpp ...
   Compiling src/glsl/ast_expr.cpp ...
   Compiling src/glsl/ast_function.cpp ...
   Compiling src/glsl/ast_to_hir.cpp ...
   Compiling src/glsl/ast_type.cpp ...
   Compiling src/glsl/builtin_functions.cpp ...
 In file included from include/c99_compat.h:28:0,
  from src/mapi/u_compiler.h:4,
  from src/mapi/u_thread.h:47,
  from src/mapi/glapi/glapi.h:47,
  from src/mesa/main/mtypes.h:42,
  from src/mesa/main/errors.h:47,
  from src/mesa/main/imports.h:41,
  from src/mesa/main/core.h:44,
  from src/glsl/builtin_functions.cpp:58:
 include/no_extern_c.h:48:1: error: template with C linkage
  templateclass T class _IncludeInsideExternCNotPortable;
  ^
 In file included from include/c99_compat.h:28:0,
  from include/c11/threads.h:38,
  from src/mapi/u_thread.h:49,
  from src/mapi/glapi/glapi.h:47,
  from src/mesa/main/mtypes.h:42,
  from src/mesa/main/errors.h:47,
  from src/mesa/main/imports.h:41,
  from src/mesa/main/core.h:44,
  from src/glsl/builtin_functions.cpp:58:
 include/no_extern_c.h:48:1: error: template with C linkage
  templateclass T class _IncludeInsideExternCNotPortable;
  ^
   Compiling src/glsl/builtin_types.cpp ...
   Compiling src/glsl/builtin_variables.cpp ...
 scons: *** [build/linux-x86_64-debug/glsl/builtin_functions.os] Error 1
 scons: building terminated because of errors.
 ---
  include/c99_compat.h  |  2 ++
  include/no_extern_c.h | 49 +
  src/util/u_atomic.h   |  3 +++
  3 files changed, 54 insertions(+)
  create mode 100644 include/no_extern_c.h

 diff --git a/include/c99_compat.h b/include/c99_compat.h
 index 429c601..a8819ac 100644
 --- a/include/c99_compat.h
 +++ b/include/c99_compat.h
 @@ -25,6 +25,8 @@
   *
   **/
  
 +#include no_extern_c.h
 +
  #ifndef _C99_COMPAT_H_
  #define _C99_COMPAT_H_
  
 diff --git a/include/no_extern_c.h b/include/no_extern_c.h
 new file mode 100644
 index 000..d038a4f
 --- /dev/null
 +++ b/include/no_extern_c.h
 @@ -0,0 +1,49 @@
 +/**
 + *
 + * Copyright 2014 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, sublicense,
 + * 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 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 NONINFRINGEMENT.  IN NO EVENT SHALL
 + * THE AUTHORS OR COPYRIGHT HOLDERS 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.
 + *
 + **/
 +
 +
 +/*
 + * Including system's headers inside `extern C { ... }` is not safe, as 
 system
 + * headers may have C++ code in 

Re: [Mesa-dev] [PATCH] include: Add helper header to help trap includes inside extern C.

2015-03-04 Thread Mark Janes
Jose Fonseca jfons...@vmware.com writes:

 From: José Fonseca jfons...@vmware.com

 This is just to help repro and fixing these issues with any C++ compiler --

 commiting this will of course wait until all issues are addressed.

Hi Jose,

I have a patch which trivially fixes extern C in the 14 files
identified by no_extern_c.h errors.

Should I send the patch?  This helper header was sent a long time ago,
but it seems like a useful mechanism to me.

-Mark



 $ scons src/glsl/
 scons: Reading SConscript files ...
 Checking for GCC ...  yes
 Checking for Clang ...  no
 Checking for X11 (x11 xext xdamage xfixes glproto = 1.4.13)... yes
 Checking for XCB (x11-xcb xcb-glx = 1.8.1 xcb-dri2 = 1.8)... yes
 Checking for XF86VIDMODE (xxf86vm)... yes
 Checking for DRM (libdrm = 2.4.38)... yes
 Checking for UDEV (libudev = 151)... yes
 warning: LLVM disabled: not building llvmpipe
 scons: done reading SConscript files.
 scons: Building targets ...
 scons: building associated VariantDir targets: build/linux-x86_64-debug/glsl
   Compiling src/glsl/ast_array_index.cpp ...
   Compiling src/glsl/ast_expr.cpp ...
   Compiling src/glsl/ast_function.cpp ...
   Compiling src/glsl/ast_to_hir.cpp ...
   Compiling src/glsl/ast_type.cpp ...
   Compiling src/glsl/builtin_functions.cpp ...
 In file included from include/c99_compat.h:28:0,
  from src/mapi/u_compiler.h:4,
  from src/mapi/u_thread.h:47,
  from src/mapi/glapi/glapi.h:47,
  from src/mesa/main/mtypes.h:42,
  from src/mesa/main/errors.h:47,
  from src/mesa/main/imports.h:41,
  from src/mesa/main/core.h:44,
  from src/glsl/builtin_functions.cpp:58:
 include/no_extern_c.h:48:1: error: template with C linkage
  templateclass T class _IncludeInsideExternCNotPortable;
  ^
 In file included from include/c99_compat.h:28:0,
  from include/c11/threads.h:38,
  from src/mapi/u_thread.h:49,
  from src/mapi/glapi/glapi.h:47,
  from src/mesa/main/mtypes.h:42,
  from src/mesa/main/errors.h:47,
  from src/mesa/main/imports.h:41,
  from src/mesa/main/core.h:44,
  from src/glsl/builtin_functions.cpp:58:
 include/no_extern_c.h:48:1: error: template with C linkage
  templateclass T class _IncludeInsideExternCNotPortable;
  ^
   Compiling src/glsl/builtin_types.cpp ...
   Compiling src/glsl/builtin_variables.cpp ...
 scons: *** [build/linux-x86_64-debug/glsl/builtin_functions.os] Error 1
 scons: building terminated because of errors.
 ---
  include/c99_compat.h  |  2 ++
  include/no_extern_c.h | 49 +
  src/util/u_atomic.h   |  3 +++
  3 files changed, 54 insertions(+)
  create mode 100644 include/no_extern_c.h

 diff --git a/include/c99_compat.h b/include/c99_compat.h
 index 429c601..a8819ac 100644
 --- a/include/c99_compat.h
 +++ b/include/c99_compat.h
 @@ -25,6 +25,8 @@
   *
   **/
  
 +#include no_extern_c.h
 +
  #ifndef _C99_COMPAT_H_
  #define _C99_COMPAT_H_
  
 diff --git a/include/no_extern_c.h b/include/no_extern_c.h
 new file mode 100644
 index 000..d038a4f
 --- /dev/null
 +++ b/include/no_extern_c.h
 @@ -0,0 +1,49 @@
 +/**
 + *
 + * Copyright 2014 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, sublicense,
 + * 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 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 NONINFRINGEMENT.  IN NO EVENT SHALL
 + * THE AUTHORS OR COPYRIGHT HOLDERS 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.
 + *
 + **/
 +
 +
 +/*
 + * Including system's headers inside `extern C { ... }` is not safe, as 
 system
 + * headers may have C++ code in them, and C++ code inside extern C
 + * leads to syntatically incorrect code.
 + *
 + * This is because putting code inside extern C won't make __cplusplus 
 

Re: [Mesa-dev] [PATCH] include: Add helper header to help trap includes inside extern C.

2015-03-04 Thread Mark Janes
Assuming my patch to fix 'extern C' issues is pushed before this one, 

Reviewed-by: Mark Janes mark.a.ja...@intel.com

Jose Fonseca jfons...@vmware.com writes:

 From: José Fonseca jfons...@vmware.com

 This is just to help repro and fixing these issues with any C++ compiler --

 commiting this will of course wait until all issues are addressed.


 $ scons src/glsl/
 scons: Reading SConscript files ...
 Checking for GCC ...  yes
 Checking for Clang ...  no
 Checking for X11 (x11 xext xdamage xfixes glproto = 1.4.13)... yes
 Checking for XCB (x11-xcb xcb-glx = 1.8.1 xcb-dri2 = 1.8)... yes
 Checking for XF86VIDMODE (xxf86vm)... yes
 Checking for DRM (libdrm = 2.4.38)... yes
 Checking for UDEV (libudev = 151)... yes
 warning: LLVM disabled: not building llvmpipe
 scons: done reading SConscript files.
 scons: Building targets ...
 scons: building associated VariantDir targets: build/linux-x86_64-debug/glsl
   Compiling src/glsl/ast_array_index.cpp ...
   Compiling src/glsl/ast_expr.cpp ...
   Compiling src/glsl/ast_function.cpp ...
   Compiling src/glsl/ast_to_hir.cpp ...
   Compiling src/glsl/ast_type.cpp ...
   Compiling src/glsl/builtin_functions.cpp ...
 In file included from include/c99_compat.h:28:0,
  from src/mapi/u_compiler.h:4,
  from src/mapi/u_thread.h:47,
  from src/mapi/glapi/glapi.h:47,
  from src/mesa/main/mtypes.h:42,
  from src/mesa/main/errors.h:47,
  from src/mesa/main/imports.h:41,
  from src/mesa/main/core.h:44,
  from src/glsl/builtin_functions.cpp:58:
 include/no_extern_c.h:48:1: error: template with C linkage
  templateclass T class _IncludeInsideExternCNotPortable;
  ^
 In file included from include/c99_compat.h:28:0,
  from include/c11/threads.h:38,
  from src/mapi/u_thread.h:49,
  from src/mapi/glapi/glapi.h:47,
  from src/mesa/main/mtypes.h:42,
  from src/mesa/main/errors.h:47,
  from src/mesa/main/imports.h:41,
  from src/mesa/main/core.h:44,
  from src/glsl/builtin_functions.cpp:58:
 include/no_extern_c.h:48:1: error: template with C linkage
  templateclass T class _IncludeInsideExternCNotPortable;
  ^
   Compiling src/glsl/builtin_types.cpp ...
   Compiling src/glsl/builtin_variables.cpp ...
 scons: *** [build/linux-x86_64-debug/glsl/builtin_functions.os] Error 1
 scons: building terminated because of errors.
 ---
  include/c99_compat.h  |  2 ++
  include/no_extern_c.h | 49 +
  src/util/u_atomic.h   |  3 +++
  3 files changed, 54 insertions(+)
  create mode 100644 include/no_extern_c.h

 diff --git a/include/c99_compat.h b/include/c99_compat.h
 index 429c601..a8819ac 100644
 --- a/include/c99_compat.h
 +++ b/include/c99_compat.h
 @@ -25,6 +25,8 @@
   *
   **/
  
 +#include no_extern_c.h
 +
  #ifndef _C99_COMPAT_H_
  #define _C99_COMPAT_H_
  
 diff --git a/include/no_extern_c.h b/include/no_extern_c.h
 new file mode 100644
 index 000..d038a4f
 --- /dev/null
 +++ b/include/no_extern_c.h
 @@ -0,0 +1,49 @@
 +/**
 + *
 + * Copyright 2014 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, sublicense,
 + * 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 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 NONINFRINGEMENT.  IN NO EVENT SHALL
 + * THE AUTHORS OR COPYRIGHT HOLDERS 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.
 + *
 + **/
 +
 +
 +/*
 + * Including system's headers inside `extern C { ... }` is not safe, as 
 system
 + * headers may have C++ code in them, and C++ code inside extern C
 + * leads to syntatically incorrect code.
 + *
 + * This is because putting code inside extern C won't make __cplusplus 
 define
 + * go away, that is, the headers being included thinks is free to use C++ as 
 it
 + * sees fits.
 + *