On 07.01.2017 20:13, LRN wrote:
> On 07.01.2017 6:06, LRN wrote:
>> On 06.01.2017 18:46, Jacek Caban wrote:
>>> On 1/6/17 4:34 PM, LRN wrote:
>>>> On 06.01.2017 13:12, LRN wrote:
>>>>> Managed to compile and use cecil, wrote a C# program that churns the data
>>>>> produced given by cecil and outputs IDL files. Worked on it until the IDL
>>>>> files
>>>>> it produced started to look legit.
>>>>>
>>>>> Then i fed an IDL file to a fresh (from mingw-w64-tools git) widl, and
>>>>> discovered that widl won't accept it. Fed an IDL file from
>>>>> mingw-w64-headers
>>>>> git to the same widl, and discovered that widl does not accept that one
>>>>> either.
>>>>>
>>>>> What am i doing wrong?
>>>>> The error (for mingw-w64-headers/windows.foundation.idl) is:
>>>>>
>>>>> Windows.Foundation.idl:14: error: syntax error, unexpected aIDENTIFIER,
>>>>> expecting $end
>>>>>
>>>> Poked widl a bit. It seems to be that the parser is broken, as it always
>>>> bails
>>>> on any mention of "namespace {...}". Yacc source files do contain mentions
>>>> of
>>>> namespaces, so obviously the parser used to support them somehow.
>>>>
>>>
>>> It may be worth trying plain Wine version of widl. I implemented some of
>>> winrt features there, including partial support for namespaces. Sadly,
>>> I'm sure that any complex IDL will hit its limitations. It's at least
>>> good enough to properly handle simple IDLs like [1].
>>>
>>> mingw-w64 versions have some changes that were never upstreamed to Wine,
>>> so merging that work may be tricky. We may worry about that once Wine
>>> implementation is more useful.
>>>
>>
>> Another alternative exists: don't use widl at all, just generate c/c++
>> headers
>> directly from metadata. I'm not entirely sure how difficult/easy that would
>> be.
>>
>
> Spent 30 minutes merging all upstream widl commits into my mingw-w64-tools
> version of widl.
> Then spent two hours fighting with automake + flex + bison, because wine widl
> wasn't written with automake in mind.
> Finally compiled it (found a few minor merge errors where patches applied, but
> provided duplicate code).
>
> Doesn't work (bails at typedef enum Blah { ... } Blah;)
>
> Debugging suggests a parser error (the last "Blah;" is misclassified somehow),
> but i could be wrong.
>
> Next stop is to try to just use 100% upstream widl instead.
>
Compiled upstream widl. Same problem. Dug a bit more. AFAICS, it takes in the
typedef foo bar { ... } baz; constructs well enough - as long as they are not
inside a namespace. If they are, it just throws the "type bar is not found".
It is possible to rewrite IDL files completely without typedefs (i.e. use "enum
AsyncStatus" instead of "AsyncStatus" every time the type is used), but it's
cumbersome, IMO.
I'll look at generating headers directly from metadata. That is bound to be
easier (famous last words...).
--
O< ascii ribbon - stop html email! - www.asciiribbon.org
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________ Mingw-w64-public mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
