commit:     2295182d1609bc0e1c781334ae046e1d2c8990f4
Author:     Eli Schwartz <eschwartz93 <AT> gmail <DOT> com>
AuthorDate: Thu Jun 20 04:06:03 2024 +0000
Commit:     Eli Schwartz <eschwartz <AT> gentoo <DOT> org>
CommitDate: Fri Aug  2 00:36:11 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2295182d

x11-libs/gtk+: add a "poison" macro support to disable X/wayland

Many packages perform automagic dependencies on gdk's backend
implementations by checking if the macro is defined and then using the
code it unlocks, rather than having a buildsystem option such as
-Dwayland=true.

It's unfeasible to patch every such package's source code to add
configure options and respect them. Instead add a truly filthy hack and
permit gtk itself to selectively show or hide the windowing system in
use.

Bug: https://bugs.gentoo.org/624960
Signed-off-by: Eli Schwartz <eschwartz93 <AT> gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/37259
Signed-off-by: Eli Schwartz <eschwartz <AT> gentoo.org>

 ...add-a-poison-macro-to-hide-GDK_WINDOWING_.patch | 90 ++++++++++++++++++++++
 ...{gtk+-3.24.42.ebuild => gtk+-3.24.41-r1.ebuild} | 13 ++--
 ...{gtk+-3.24.42.ebuild => gtk+-3.24.42-r1.ebuild} |  5 ++
 3 files changed, 101 insertions(+), 7 deletions(-)

diff --git 
a/x11-libs/gtk+/files/0001-gdk-add-a-poison-macro-to-hide-GDK_WINDOWING_.patch 
b/x11-libs/gtk+/files/0001-gdk-add-a-poison-macro-to-hide-GDK_WINDOWING_.patch
new file mode 100644
index 000000000000..26c56b86fe89
--- /dev/null
+++ 
b/x11-libs/gtk+/files/0001-gdk-add-a-poison-macro-to-hide-GDK_WINDOWING_.patch
@@ -0,0 +1,90 @@
+From 25bdad805bb9e16032baf4480e9c1e432ddef49b Mon Sep 17 00:00:00 2001
+From: Eli Schwartz <[email protected]>
+Date: Wed, 19 Jun 2024 21:28:31 -0400
+Subject: [PATCH] gdk: add a "poison" macro to hide GDK_WINDOWING_*
+
+Many packages perform automagic dependencies on gdk's backend
+implementations by checking if the macro is defined and then using the
+code it unlocks, rather than having a buildsystem option such as
+-Dwayland=true.
+
+It's unfeasible to patch every such package's source code to add
+configure options and respect them. Instead add a truly filthy hack and
+permit gtk itself to selectively show or hide the windowing system in
+use.
+
+By default, we assume this macro is never defined. It should only ever
+be defined inside an ebuild, as such:
+
+```
+use wayland || append-cflags -DGENTOO_GTK_HIDE_WAYLAND
+use X || append-cflags -DGENTOO_GTK_HIDE_X11
+```
+
+When seen, this will prevent code using "#ifdef GDK_WINDOWING_*" from
+seeing the define, so the automagic dependency won't be picked up. It
+will also cause any attempt to #include the backend-specific headers to
+bug out.
+
+Bug: https://bugs.gentoo.org/624960
+Signed-off-by: Eli Schwartz <[email protected]>
+---
+ gdk/gdkconfig.h.meson    | 7 +++++++
+ gdk/wayland/gdkwayland.h | 4 ++++
+ gdk/x11/gdkx.h           | 4 ++++
+ 3 files changed, 15 insertions(+)
+
+diff --git a/gdk/gdkconfig.h.meson b/gdk/gdkconfig.h.meson
+index 7db19e0470..6bee207e94 100644
+--- a/gdk/gdkconfig.h.meson
++++ b/gdk/gdkconfig.h.meson
+@@ -10,9 +10,16 @@
+ G_BEGIN_DECLS
+ 
+ 
++#ifndef GENTOO_GTK_HIDE_X11
+ #mesondefine GDK_WINDOWING_X11
++#endif
++
+ #mesondefine GDK_WINDOWING_BROADWAY
++
++#ifndef GENTOO_GTK_HIDE_WAYLAND
+ #mesondefine GDK_WINDOWING_WAYLAND
++#endif
++
+ #mesondefine GDK_WINDOWING_WIN32
+ #mesondefine GDK_WINDOWING_QUARTZ
+ 
+diff --git a/gdk/wayland/gdkwayland.h b/gdk/wayland/gdkwayland.h
+index 2b79295add..5f0e9cfa81 100644
+--- a/gdk/wayland/gdkwayland.h
++++ b/gdk/wayland/gdkwayland.h
+@@ -25,6 +25,10 @@
+ #ifndef __GDK_WAYLAND_H__
+ #define __GDK_WAYLAND_H__
+ 
++#ifdef GENTOO_GTK_HIDE_WAYLAND
++  #error "A Gentoo ebuild has hidden wayland and it cannot be used in this 
compilation unit. Please file a bug if you see this error."
++#endif
++
+ #include <gdk/gdk.h>
+ 
+ #define __GDKWAYLAND_H_INSIDE__
+diff --git a/gdk/x11/gdkx.h b/gdk/x11/gdkx.h
+index 1f64bccb6d..256c83015e 100644
+--- a/gdk/x11/gdkx.h
++++ b/gdk/x11/gdkx.h
+@@ -25,6 +25,10 @@
+ #ifndef __GDK_X_H__
+ #define __GDK_X_H__
+ 
++#ifdef GENTOO_GTK_HIDE_X11
++  #error "A Gentoo ebuild has hidden x11 and it cannot be used in this 
compilation unit. Please file a bug if you see this error."
++#endif
++
+ #include <gdk/gdk.h>
+ 
+ #include <X11/Xlib.h>
+-- 
+2.44.2
+

diff --git a/x11-libs/gtk+/gtk+-3.24.42.ebuild 
b/x11-libs/gtk+/gtk+-3.24.41-r1.ebuild
similarity index 92%
copy from x11-libs/gtk+/gtk+-3.24.42.ebuild
copy to x11-libs/gtk+/gtk+-3.24.41-r1.ebuild
index 655c05a8a518..1bb71ee363f1 100644
--- a/x11-libs/gtk+/gtk+-3.24.42.ebuild
+++ b/x11-libs/gtk+/gtk+-3.24.41-r1.ebuild
@@ -37,6 +37,7 @@ COMMON_DEPEND="
        colord? ( >=x11-misc/colord-0.1.9:0=[${MULTILIB_USEDEP}] )
        cups? ( >=net-print/cups-2.0[${MULTILIB_USEDEP}] )
        introspection? ( >=dev-libs/gobject-introspection-1.39:= )
+       sysprof? ( >=dev-util/sysprof-capture-3.33.2:3[${MULTILIB_USEDEP}] )
        wayland? (
                >=dev-libs/wayland-1.14.91[${MULTILIB_USEDEP}]
                >=dev-libs/wayland-protocols-1.32
@@ -57,7 +58,6 @@ COMMON_DEPEND="
        )
 "
 DEPEND="${COMMON_DEPEND}
-       sysprof? ( >=dev-util/sysprof-capture-3.33.2:4[${MULTILIB_USEDEP}] )
        X? ( x11-base/xorg-proto )
 "
 RDEPEND="${COMMON_DEPEND}
@@ -95,17 +95,16 @@ MULTILIB_CHOST_TOOLS=(
 PATCHES=(
        # gtk-update-icon-cache is installed by dev-util/gtk-update-icon-cache
        "${FILESDIR}"/${PN}-3.24.36-update-icon-cache.patch
+       # Gentoo-specific patch to add a "poison" macro support, allowing other 
ebuilds
+       # with USE="-wayland -X" to trick gtk into claiming that it wasn't 
built with
+       # such support.
+       # https://bugs.gentoo.org/624960
+       "${FILESDIR}"/0001-gdk-add-a-poison-macro-to-hide-GDK_WINDOWING_.patch
 )
 
 src_prepare() {
        default
 
-       # Force sysprof-capture-4 instead of checking sysprof-capture-3 first; 
either is
-       # fine as far as deps are concerned, as it static links, but 
sysprof-capture-3
-       # links to glib which would be done statically if there's 
glib[static-libs],
-       # making the whole of gtk+ static link to glib instead of dynamic 
linking to glib.
-       sed -i -e "s/'sysprof-capture-3'/'sysprof-capture-4'/g" meson.build || 
die
-
        # The border-image-excess-size.ui test is known to fail on big-endian 
platforms
        # See https://gitlab.gnome.org/GNOME/gtk/-/issues/5904
        if [[ $(tc-endian) == big ]]; then

diff --git a/x11-libs/gtk+/gtk+-3.24.42.ebuild 
b/x11-libs/gtk+/gtk+-3.24.42-r1.ebuild
similarity index 95%
rename from x11-libs/gtk+/gtk+-3.24.42.ebuild
rename to x11-libs/gtk+/gtk+-3.24.42-r1.ebuild
index 655c05a8a518..b87f4ebae8bb 100644
--- a/x11-libs/gtk+/gtk+-3.24.42.ebuild
+++ b/x11-libs/gtk+/gtk+-3.24.42-r1.ebuild
@@ -95,6 +95,11 @@ MULTILIB_CHOST_TOOLS=(
 PATCHES=(
        # gtk-update-icon-cache is installed by dev-util/gtk-update-icon-cache
        "${FILESDIR}"/${PN}-3.24.36-update-icon-cache.patch
+       # Gentoo-specific patch to add a "poison" macro support, allowing other 
ebuilds
+       # with USE="-wayland -X" to trick gtk into claiming that it wasn't 
built with
+       # such support.
+       # https://bugs.gentoo.org/624960
+       "${FILESDIR}"/0001-gdk-add-a-poison-macro-to-hide-GDK_WINDOWING_.patch
 )
 
 src_prepare() {

Reply via email to