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 >> template<class 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 >> template<class 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 0000000..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. >> + * >> + * Including non-system headers inside extern "C" is not safe either, >> because >> + * non-system headers end up including system headers, hence fall in the >> above >> + * case too. >> + * >> + * Conclusion, includes inside extern "C" is simply not portable. >> + * >> + * >> + * This header helps surface this issues. >> + * >> + */ >> + >> +#ifdef __cplusplus >> +template<class T> class _IncludeInsideExternCNotPortable; >> +#endif >> diff --git a/src/util/u_atomic.h b/src/util/u_atomic.h >> index 56c5740..25b8030 100644 >> --- a/src/util/u_atomic.h >> +++ b/src/util/u_atomic.h >> @@ -6,6 +6,9 @@ >> * >> */ >> >> + >> +#include "no_extern_c.h" >> + >> #ifndef U_ATOMIC_H >> #define U_ATOMIC_H >> >> -- >> 2.1.3 >> >> _______________________________________________ >> 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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev