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() {
