On 14/01/2013 11:47, Angelo Graziosi wrote: > Il 13/01/2013 16.20, Jon TURNEY ha scritto: >> On 13/01/2013 14:44, Angelo Graziosi wrote: >>> Il 13/01/2013 15.31, Jon TURNEY ha scritto: >>>> On 11/01/2013 12:54, Angelo Graziosi wrote: >>>>> An application which need to be built with clang++, fails to build when it >>>>> includes glx.h and indirectly windows.h headers like in the test case >>>>> shown >>>>> below. >>>>> >>>>> In short, X11/Xlib.h define Status as a macro (an alias for int) instead >>>>> rpcdce.h uses Status a a pointer variable name... >>>> >>>> I don't think there's anything clang-specific about this problem. The same >>>> issue can be seen with gcc. >>>> >>>> If your application needs both Xlib and Win32 interfaces, you should >>>> include >>>> <X11/Xwindows.h> rather than <windows.h>, which wraps any conflicting >>>> declarations. >>>> >>>> (xcb uses a sensible namespace, so this is not necessary for applications >>>> which use xcb and Win32.) >>>> >>>> You probably need the latest upstream x11proto (not yet packaged for >>>> cygwin) >>>> for this wrapping to work correctly with the mingw-w64 w32api headers [1] >>>> >>>> Alternatively you can work around this yourself e.g. as in [2] >>> >>> >>> Thanks Jon, foo.cxx was anly a test case to reproduce the errors. In the >>> true >>> application those headers were included indirectly... :-( >>> >>> In file included from input_line_87:1: >>> In file included from include/TX11GL.h:29: >>> In file included from /usr/include/GL/glx.h:45: >>> In file included from /usr/include/w32api/GL/gl.h:13: >> >> This looks very wrong, mixing native and X GL headers isn't going to work. >> >> Assuming you mean to build an X application, this should be finding >> /usr/include/GL/gl.h, so maybe an include path issue? > > For the record... > > ROOT guys have fixed this issue with the following patch to their patched > version of llvm/clang: > > $ cat InitHeaderSearch.cpp.diff > --- ROOT/interpreter/llvm/src/tools/clang/lib/Frontend/InitHeaderSearch.cpp > 2013-01-01 11:50:05.000000000 +0100 > +++ > root_trunk/interpreter/llvm/src/tools/clang/lib/Frontend/InitHeaderSearch.cpp > 2013-01-14 12:10:43.906250000 +0100 > @@ -305,7 +305,8 @@ > case llvm::Triple::RTEMS: > break; > case llvm::Triple::Cygwin: > - AddPath("/usr/include/w32api", System, true, false, false); > + // The headers in w32api/ are not cygwin-compatible (but native) > + //AddPath("/usr/include/w32api", System, true, false, false);
Well, ok. But this comment is almost completely wrong. cygwin clang has /usr/include/w32api in the default include path (try compiling your test program with clang -v), and since it appears *after* /usr/include, including glx.h works correctly. I have no idea what the right way to solve this problem is. -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple