[External] : Re: jextract wayland-client

Jorn Vernee jorn.vernee at oracle.com
Sun Apr 21 23:25:30 UTC 2024


A pointer type is always supported, so it should not prevent a function 
that uses such a type from being generated.

Are you seeing any warnings about `wl_display_get_registry` being 
skipped because of an unsupported type?

Could you shared the header file declaration of wl_display_get_registry?

Jorn

On 22/04/2024 00:51, Thiago Milczarek Sayão wrote:
> Hello Jorn,
>
> Thanks for replying.
>
> I think it's by design - those fields of wl_registry are private and 
> only accessible through wl_registry functions;
>
> The problem is that it does not generate the functions that uses it, 
> for example wl_display_get_registry
>
> I did:
> jextract --output src/main/java -t org.freedesktop.wayland.client \
>    --header-class-name WlClientProto`pkg-config --cflags-only-I wayland-client`  \
>    `pkg-config --libs wayland-client`   \
>    /usr/include/wayland-client-protocol.h
>
> The clarified message looks good.
>
> Em dom., 21 de abr. de 2024 às 18:30, Jorn Vernee 
> <jorn.vernee at oracle.com> escreveu:
>
>     Hello Thiago,
>
>     It looks like the library you are using uses opaque types. Or, in
>     other words, a type that is declared but not defined, such as:
>
>     struct Foo;
>
>     These types are not supported by jextract in the sense that the
>     header file does not contain any definition for these types, so
>     jextract also can't generate any code to access the fields of such
>     a struct. This is not a current limitation of jextract, but a
>     limitation imposed by the wayland library.
>
>     This is known as the 'opaque pointer idiom' [1]. It is a way of
>     encapsulating the internals of a type, while still allowing a
>     client to use it. It looks like the wayland library uses types
>     like these in a lot of places. It doesn't mean that the library is
>     unusable, it just means that the contents of these structs is not
>     exposed by the library (and therefore /cannot/ be exposed by
>     jextract). i.e. this is by design. You should still be able to use
>     the library through the generated bindings.
>
>     I think for clarity we could perhaps change the warning message
>     that jextract prints to something like:
>
>         WARNING: Skipping wl_registry (type Declared(wl_registry) is
>     declared but not defined)
>
>     HTH,
>     Jorn
>
>     [1]: https://en.wikipedia.org/wiki/Opaque_pointer
>     <https://urldefense.com/v3/__https://en.wikipedia.org/wiki/Opaque_pointer__;!!ACWV5N9M2RV99hQ!J7UcZ_pVCMYJLfWJp9TZNELYAFrerMmP-yIjI1X6pBl6Zfx8gKLGiEb8ESgd_FTELrMqKd0F8pBF_Zs6zquT91c$>
>
>     On 21/04/2024 18:58, Thiago Milczarek Sayão wrote:
>>     Hi,
>>
>>     I'm trying to make a java wayland client (currently as a proof of
>>     concept).
>>
>>     I've attempted to generate the bindings like this:
>>
>>     jextract --output src -t org.freedesktop.wayland.client
>>     --header-class-name WlClient -lwayland-client
>>      /usr/include/wayland-client.h
>>
>>     But the wl_xxx types seem to not be supported as it outputs:
>>
>>     WARNING: Skipping wl_registry (type Declared(wl_registry) is not
>>     supported)
>>
>>     I've probably hit a current limitation. Is it expected to work in
>>     the future?
>>
>>     Thanks.
>>     -- Thiago.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/jextract-dev/attachments/20240422/3146b232/attachment.htm>


More information about the jextract-dev mailing list