[External] : Re: jextract wayland-client

Jorn Vernee jorn.vernee at oracle.com
Sun Apr 21 23:46:28 UTC 2024


The function is also 'static'. Static functions are typically not 
exported from the runtime library, so we can not link against them 
dynamically (which is required for a function to be callable from Java). 
You might want to confirm by running e.g. `nm <runtime library>` that 
this function is actually an exported symbol in the library.

Alternatively, you might be able to re-write this function in Java using 
the parts of the library that are exported/dynamically link-able.

Jorn

On 22/04/2024 01:36, Thiago Milczarek Sayão wrote:
> Humm,
>
> It an inline function:
>
> static inline struct wl_registry *
> wl_display_get_registry(struct wl_display *wl_display)
> {
>          struct wl_proxy *registry;
>
>          registry = wl_proxy_marshal_flags((struct wl_proxy *) wl_display,
>                           WL_DISPLAY_GET_REGISTRY, &wl_registry_interface, wl_proxy_get_version((struct wl_proxy *) wl_display),0, NULL);
>
>          return (struct wl_registry *) registry;
> }
>
> Em dom., 21 de abr. de 2024 às 20:25, Jorn Vernee 
> <jorn.vernee at oracle.com> escreveu:
>
>     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/b0eabe25/attachment.htm>


More information about the jextract-dev mailing list