summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz93@gmail.com>2024-06-20 00:06:03 -0400
committerEli Schwartz <eschwartz@gentoo.org>2024-08-01 20:36:11 -0400
commit2295182d1609bc0e1c781334ae046e1d2c8990f4 (patch)
treeecd7ddf9967e0e956e961fc198f625c91549d9a7 /x11-libs/gtk+
parentnet-misc/yt-dlp: add 2024.08.01 (diff)
downloadgentoo-2295182d1609bc0e1c781334ae046e1d2c8990f4.tar.gz
gentoo-2295182d1609bc0e1c781334ae046e1d2c8990f4.tar.bz2
gentoo-2295182d1609bc0e1c781334ae046e1d2c8990f4.zip
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@gmail.com> Part-of: https://github.com/gentoo/gentoo/pull/37259 Signed-off-by: Eli Schwartz <eschwartz@gentoo.org>
Diffstat (limited to 'x11-libs/gtk+')
-rw-r--r--x11-libs/gtk+/files/0001-gdk-add-a-poison-macro-to-hide-GDK_WINDOWING_.patch90
-rw-r--r--x11-libs/gtk+/gtk+-3.24.41-r1.ebuild205
-rw-r--r--x11-libs/gtk+/gtk+-3.24.42-r1.ebuild (renamed from x11-libs/gtk+/gtk+-3.24.42.ebuild)5
3 files changed, 300 insertions, 0 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 <eschwartz93@gmail.com>
+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 <eschwartz93@gmail.com>
+---
+ 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.41-r1.ebuild b/x11-libs/gtk+/gtk+-3.24.41-r1.ebuild
new file mode 100644
index 000000000000..1bb71ee363f1
--- /dev/null
+++ b/x11-libs/gtk+/gtk+-3.24.41-r1.ebuild
@@ -0,0 +1,205 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit gnome2 meson-multilib multilib toolchain-funcs virtualx
+
+DESCRIPTION="Gimp ToolKit +"
+HOMEPAGE="https://www.gtk.org/"
+
+LICENSE="LGPL-2+"
+SLOT="3"
+IUSE="aqua broadway cloudproviders colord cups examples gtk-doc +introspection sysprof test vim-syntax wayland +X xinerama"
+REQUIRED_USE="
+ || ( aqua wayland X )
+ test? ( X )
+ xinerama? ( X )
+"
+RESTRICT="!test? ( test )"
+
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-solaris"
+
+COMMON_DEPEND="
+ >=app-accessibility/at-spi2-core-2.46.0[introspection?,${MULTILIB_USEDEP}]
+ >=dev-libs/fribidi-0.19.7[${MULTILIB_USEDEP}]
+ >=dev-libs/glib-2.57.2:2[${MULTILIB_USEDEP}]
+ media-libs/fontconfig[${MULTILIB_USEDEP}]
+ >=media-libs/harfbuzz-2.2.0:=
+ >=media-libs/libepoxy-1.4[X(+)?,egl(+),${MULTILIB_USEDEP}]
+ virtual/libintl[${MULTILIB_USEDEP}]
+ >=x11-libs/cairo-1.14[aqua?,glib,svg(+),X?,${MULTILIB_USEDEP}]
+ >=x11-libs/gdk-pixbuf-2.30:2[introspection?,${MULTILIB_USEDEP}]
+ >=x11-libs/pango-1.44.0[introspection?,${MULTILIB_USEDEP}]
+ x11-misc/shared-mime-info
+
+ cloudproviders? ( net-libs/libcloudproviders[${MULTILIB_USEDEP}] )
+ 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
+ media-libs/mesa[wayland,${MULTILIB_USEDEP}]
+ >=x11-libs/libxkbcommon-0.2[${MULTILIB_USEDEP}]
+ )
+ X? (
+ media-libs/libglvnd[X(+),${MULTILIB_USEDEP}]
+ x11-libs/libX11[${MULTILIB_USEDEP}]
+ x11-libs/libXcomposite[${MULTILIB_USEDEP}]
+ x11-libs/libXcursor[${MULTILIB_USEDEP}]
+ x11-libs/libXdamage[${MULTILIB_USEDEP}]
+ x11-libs/libXext[${MULTILIB_USEDEP}]
+ x11-libs/libXfixes[${MULTILIB_USEDEP}]
+ >=x11-libs/libXi-1.8[${MULTILIB_USEDEP}]
+ >=x11-libs/libXrandr-1.5[${MULTILIB_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${MULTILIB_USEDEP}] )
+ )
+"
+DEPEND="${COMMON_DEPEND}
+ X? ( x11-base/xorg-proto )
+"
+RDEPEND="${COMMON_DEPEND}
+ >=dev-util/gtk-update-icon-cache-3
+"
+# librsvg for svg icons (PDEPEND to avoid circular dep), bug #547710
+PDEPEND="
+ gnome-base/librsvg[${MULTILIB_USEDEP}]
+ >=x11-themes/adwaita-icon-theme-3.14
+ vim-syntax? ( app-vim/gtk-syntax )
+"
+BDEPEND="
+ app-text/docbook-xml-dtd:4.1.2
+ app-text/docbook-xsl-stylesheets
+ dev-libs/gobject-introspection-common
+ dev-libs/libxslt
+ >=dev-util/gdbus-codegen-2.48
+ dev-util/glib-utils
+ >=dev-build/gtk-doc-am-1.20
+ wayland? ( dev-util/wayland-scanner )
+ >=sys-devel/gettext-0.19.7
+ virtual/pkgconfig
+ x11-libs/gdk-pixbuf:2
+ gtk-doc? (
+ app-text/docbook-xml-dtd:4.3
+ >=dev-util/gtk-doc-1.20
+ )
+ test? ( sys-apps/dbus )
+"
+
+MULTILIB_CHOST_TOOLS=(
+ /usr/bin/gtk-query-immodules-3.0$(get_exeext)
+)
+
+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
+
+ # 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
+ sed -i \
+ -e "/border-image-excess-size.ui/d" \
+ -e "/^xfails =/a 'border-image-excess-size.ui'," \
+ testsuite/reftests/meson.build || die
+ fi
+}
+
+multilib_src_configure() {
+ local emesonargs=(
+ $(meson_use aqua quartz_backend)
+ $(meson_use broadway broadway_backend)
+ $(meson_use cloudproviders)
+ $(meson_use examples demos)
+ $(meson_use examples)
+ $(meson_native_use_bool gtk-doc gtk_doc)
+ $(meson_native_use_bool introspection)
+ $(meson_use sysprof profiler)
+ $(meson_use wayland wayland_backend)
+ $(meson_use X x11_backend)
+ -Dcolord=$(usex colord yes no)
+ -Dprint_backends=$(usex cups cups,file,lpr file,lpr)
+ -Dxinerama=$(usex xinerama yes no)
+ # Include backend immodules into gtk itself, to avoid problems like
+ # https://gitlab.gnome.org/GNOME/gnome-shell/issues/109 from a
+ # user overridden GTK_IM_MODULE envvar
+ -Dbuiltin_immodules=backend
+ -Dman=true
+ $(meson_use test tests)
+ -Dtracker3=false
+ )
+ meson_src_configure
+}
+
+multilib_src_compile() {
+ meson_src_compile
+}
+
+multilib_src_test() {
+ virtx dbus-run-session meson test -C "${BUILD_DIR}" --timeout-multiplier 4 || die
+}
+
+multilib_src_install() {
+ meson_src_install
+}
+
+multilib_src_install_all() {
+ insinto /etc/gtk-3.0
+ doins "${FILESDIR}"/settings.ini
+ # Skip README.win32.md that would get installed by default
+ DOCS=( NEWS README.md )
+ einstalldocs
+}
+
+pkg_preinst() {
+ gnome2_pkg_preinst
+
+ multilib_pkg_preinst() {
+ # Make immodules.cache belongs to gtk+ alone
+ local cache="/usr/$(get_libdir)/gtk-3.0/3.0.0/immodules.cache"
+
+ if [[ -e ${EROOT}${cache} ]]; then
+ cp "${EROOT}${cache}" "${ED}${cache}" || die
+ else
+ touch "${ED}${cache}" || die
+ fi
+ }
+ multilib_parallel_foreach_abi multilib_pkg_preinst
+}
+
+pkg_postinst() {
+ gnome2_pkg_postinst
+
+ multilib_pkg_postinst() {
+ gnome2_query_immodules_gtk3 \
+ || die "Update immodules cache failed (for ${ABI})"
+ }
+ multilib_parallel_foreach_abi multilib_pkg_postinst
+
+ if ! has_version "app-text/evince"; then
+ elog "Please install app-text/evince for print preview functionality."
+ elog "Alternatively, check \"gtk-print-preview-command\" documentation and"
+ elog "add it to your settings.ini file."
+ fi
+}
+
+pkg_postrm() {
+ gnome2_pkg_postrm
+
+ if [[ -z ${REPLACED_BY_VERSION} ]]; then
+ multilib_pkg_postrm() {
+ rm -f "${EROOT}/usr/$(get_libdir)/gtk-3.0/3.0.0/immodules.cache"
+ }
+ multilib_foreach_abi multilib_pkg_postrm
+ fi
+}
diff --git a/x11-libs/gtk+/gtk+-3.24.42.ebuild b/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() {