This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Another issue with CLANG


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]