On Sun, 2024-06-23 at 13:35 -0400, Eli Schwartz wrote:
> There is a bug in how gtk 3 and gtk 4 are built against by other
> packages. GTK supports optionally enabling X and wayland support -- when
> you do so, the ABI of GTK changes.
> 
> It is historically common for X11 packages to check for a macro provided
> by GTK that says "built with X11 support". This goes back to the days
> when X11 was the only backend shipped with GTK, and the main use of the
> macro was to check whether to use X11 or rather to use, say, the win32
> or Quartz (macOS) backends. The pattern has continued now that Linux has
> two backends.
> 
> The result of this is that many packages really need to support their
> own IUSE="X wayland" (because they can conditionally build code for
> that) and also need to make sure that USE flag is actually respected.
> Failure to do this means that when rebuilding GTK with different USE
> flags, all applications linking to GTK need to be rebuilt too, but
> portage doesn't know that.
> 
> It also means that binhosts -- such as the one officially hosted by
> Gentoo -- have bad binaries that don't actually match the packages users
> have installed. This is particularly bad since it breaks expectations
> and is quite hard to debug. This has hit people a bunch of times when
> trying to install the xfce desktop environment, in particular.

<snip>

> - What I propose in this patchset. Hack a custom gentoo feature into the
>   GTK headers. GTK normally behaves exactly as it's supposed to
>   upstream, but we add the ability to pass a define via `append-cflags`
>   that makes the GTK headers tell an outright lie and claim its API
>   doesn't exist. Which is what we want -- we want packages to be able to
>   compile *as if* GTK wasn't built with support for a given backend.
>   This disables the automagic as if option 1 (implementing configure
>   options) was carried out. Advantage: automatically support proper
>   control of features. Disadvantage: requires patching GTK and
>   then still adding workarounds for each package that needs it.

Nice trick! I like it. Good work. :)

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to