[waffle] [PATCH] wayland: Wrap wl_proxy_marshal_constructor_versioned v2
Michel Dänzer
michel at daenzer.net
Fri Apr 15 02:32:27 UTC 2016
On 15.04.2016 11:14, Michel Dänzer wrote:
> On 14.04.2016 22:16, Emil Velikov wrote:
>> On 14 April 2016 at 09:23, Michel Dänzer <michel at daenzer.net> wrote:
>>> From: Michel Dänzer <michel.daenzer at amd.com>
>>>
>>> Fixes build failure due to wl_proxy_marshal_constructor_versioned being
>>> unresolved when building against current wayland.
>>>
>>> This API was introduced in wayland 1.9.91 by commit 557032e3 ("Track
>>> protocol object versions inside wl_proxy."). The waffle code doesn't
>>> reference wl_proxy_marshal_constructor_versioned directly but
>>> indirectly via wayland-scanner.
>>>
>>> v2:
>>> * Add paragraph about how wl_proxy_marshal_constructor_versioned was
>>> introduced. (Emil Velikov)
>>> * Only resolve wl_proxy_marshal_constructor_versioned with wayland >=
>>> 1.9.91.
>>>
>>> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
>>> ---
>>> src/waffle/wayland/wayland_wrapper.c | 5 +++++
>>> src/waffle/wayland/wayland_wrapper.h | 8 ++++++++
>>> 2 files changed, 13 insertions(+)
>>>
>>> diff --git a/src/waffle/wayland/wayland_wrapper.c b/src/waffle/wayland/wayland_wrapper.c
>>> index 6ffd5a9..fb66f9a 100644
>>> --- a/src/waffle/wayland/wayland_wrapper.c
>>> +++ b/src/waffle/wayland/wayland_wrapper.c
>>> @@ -106,6 +106,11 @@ wayland_wrapper_init(void)
>>> RETRIEVE_WL_CLIENT_SYMBOL(wl_proxy_add_listener);
>>> RETRIEVE_WL_CLIENT_SYMBOL(wl_proxy_marshal);
>>> RETRIEVE_WL_CLIENT_SYMBOL(wl_proxy_marshal_constructor);
>>> +#if WAYLAND_VERSION_MAJOR == 1 && \
>>> + (WAYLAND_VERSION_MINOR > 9 || \
>>> + (WAYLAND_VERSION_MINOR == 9 && WAYLAND_VERSION_MICRO >= 91))
>>> + RETRIEVE_WL_CLIENT_SYMBOL(wl_proxy_marshal_constructor_versioned);
>>> +#endif
>>> #undef RETRIEVE_WL_CLIENT_SYMBOL
>>>
>> I am slightly worried about this approach. It adds a so called 'hidden
>> dependency' and with it a possibility of things going horribly wrong.
>> It is something that we try to avoid with mesa as the deps version at
>> build time != run-time one. Or in other words, one might build against
>> wayland 1.9 and things will go crazy as you run wayland 1.10, or vice
>> versa.
>>
>> Obviously that's not perfect, although unavoidable. Why ? As distros
>> do not know about the requirement (i.e. it's not mandated at configure
>> time) they won't rebuild and things won't work. At the same time if
>> they do rebuild (again without the explicit requirement), things will
>> break if one needs to revert to older (yet still in version range as
>> per the deps list) wayland.
>
> That's not true at least for Debian and derivatives, which keep track of
> which symbols were added in which version and generate accordingly
> versioned dependencies.
It occurred to me (just after sending out the previous post, sigh...)
that this automatic mechanism might not work for waffle's dependency on
wayland if we don't link the wayland libraries directly. Even so, IME
this is a common issue distro maintainers of libraries have to deal
with, nothing particularly tricky.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the waffle
mailing list