Gentoo Archives: gentoo-commits

From: Mart Raudsepp <leio@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: x11-wm/mutter/, x11-wm/mutter/files/
Date: Thu, 28 Feb 2019 22:39:36
Message-Id: 1551393470.f7cbaff73571787a03c54ceb8a7d1a2449ec341c.leio@gentoo
commit:     f7cbaff73571787a03c54ceb8a7d1a2449ec341c
Author:     Mart Raudsepp <leio <AT> gentoo <DOT> org>
AuthorDate: Thu Feb 28 22:33:24 2019 +0000
Commit:     Mart Raudsepp <leio <AT> gentoo <DOT> org>
CommitDate: Thu Feb 28 22:37:50 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f7cbaff7

x11-wm/mutter: require gles2 for wayland, try to fix non-gles2 builds

Native backend makes use of gles3 for some features, and I'm not sure if
these gracefully degrade or not without gles3. So require gles2 with
wayland (which is when we  enable build of native backend), which also
allows for a simpler hacky patch for fixing non-gles2 builds when system
doesn't have USE=gles2 on mesa.
I consider this quite ugly, but
1) this is ~arch
2) this will be better in the meson port in mutter-3.32
3) it hopefully works well enough anyways, sans potentially unnecessary
mesa[gles2] dep and full gles2 cogl builds.
People who mind the gles2 requirement are welcome to come up with
something better. It should somehow express the feature dependency of
this, even if just metadata.xml descriptions.

Closes: https://bugs.gentoo.org/679074
Package-Manager: Portage-2.3.52, Repoman-2.3.12
Signed-off-by: Mart Raudsepp <leio <AT> gentoo.org>

 x11-wm/mutter/files/3.28.3-no-gles2-fix.patch |  43 ++++++++
 x11-wm/mutter/mutter-3.28.3-r1.ebuild         | 152 ++++++++++++++++++++++++++
 2 files changed, 195 insertions(+)

diff --git a/x11-wm/mutter/files/3.28.3-no-gles2-fix.patch b/x11-wm/mutter/files/3.28.3-no-gles2-fix.patch
new file mode 100644
index 00000000000..43bb05f5245
--- /dev/null
+++ b/x11-wm/mutter/files/3.28.3-no-gles2-fix.patch
@@ -0,0 +1,43 @@
+From 259544c4f4b47418885075c9531ce593c600401c Mon Sep 17 00:00:00 2001
+From: Mart Raudsepp <leio@g.o>
+Date: Fri, 1 Mar 2019 00:02:47 +0200
+Subject: [PATCH] build: Fix build without gles headers
+
+This is an ugly quick fix to hopefully fix non-wayland builds against
+mesa[-gles2].
+It assumes gnome-shell package USE=wayland requires USE=gles2, which it
+sort of does already at runtime already for hybrid graphics support, but
+we ensure with REQUIRED_USE.
+In meson upstream port for 3.32 this will be more properly conditional
+on the gles2 option instead.
+---
+ src/Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index bcb3505c7..a68661b21 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -118,9 +118,6 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES =	\
+ 	backends/meta-egl.c			\
+ 	backends/meta-egl.h			\
+ 	backends/meta-egl-ext.h			\
+-	backends/meta-gles3.c			\
+-	backends/meta-gles3.h			\
+-	backends/meta-gles3-table.h		\
+ 	backends/meta-gpu.c			\
+ 	backends/meta-gpu.h			\
+ 	backends/meta-display-config-shared.h	\
+@@ -472,6 +469,9 @@ endif
+ 
+ if HAVE_NATIVE_BACKEND
+ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES +=		\
++	backends/meta-gles3.c			\
++	backends/meta-gles3.h			\
++	backends/meta-gles3-table.h		\
+ 	backends/native/meta-backend-native.c		\
+ 	backends/native/meta-backend-native.h		\
+ 	backends/native/meta-backend-native-private.h	\
+-- 
+2.17.0
+

diff --git a/x11-wm/mutter/mutter-3.28.3-r1.ebuild b/x11-wm/mutter/mutter-3.28.3-r1.ebuild
new file mode 100644
index 00000000000..3a7b5381459
--- /dev/null
+++ b/x11-wm/mutter/mutter-3.28.3-r1.ebuild
@@ -0,0 +1,152 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+GNOME2_EAUTORECONF="yes"
+inherit gnome2 virtualx
+
+DESCRIPTION="GNOME 3 compositing window manager based on Clutter"
+HOMEPAGE="https://gitlab.gnome.org/GNOME/mutter/"
+SRC_URI+=" https://dev.gentoo.org/~leio/distfiles/${P}-patchset.tar.xz"
+
+LICENSE="GPL-2+"
+SLOT="0/2" # 0/libmutter_api_version - ONLY gnome-shell (or anything using mutter-clutter-<api_version>.pc) should use the subslot
+
+IUSE="debug elogind gles2 input_devices_wacom +introspection systemd test udev wayland"
+# native backend requires gles3 for hybrid graphics blitting support and a logind provider
+# gles2 may be avoidable, but probably not worth the effort before switching to meson; without it, it seems it'll have subtle lost features as well that isn't explained to user atm.
+REQUIRED_USE="
+	wayland? (
+		?? ( elogind systemd )
+		gles2
+	)"
+
+KEYWORDS="~alpha ~amd64 ~arm ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+
+# libXi-1.7.4 or newer needed per:
+# https://bugzilla.gnome.org/show_bug.cgi?id=738944
+# gl.pc package is required, which is only installed by mesa if glx is enabled; pre-emptively requiring USE=X on mesa, as hopefully eventually it'll support disabling glx for wayland-only systems
+RDEPEND="
+	>=dev-libs/atk-2.5.3
+	>=x11-libs/gdk-pixbuf-2:2
+	>=dev-libs/json-glib-0.12.0
+	>=x11-libs/pango-1.30[introspection?]
+	>=x11-libs/cairo-1.14[X]
+	>=x11-libs/gtk+-3.19.8:3[X,introspection?]
+	>=dev-libs/glib-2.53.2:2
+	>=media-libs/libcanberra-0.26[gtk3]
+	>=x11-libs/startup-notification-0.7
+	>=x11-libs/libXcomposite-0.2
+	>=gnome-base/gsettings-desktop-schemas-3.21.4[introspection?]
+	gnome-base/gnome-desktop:3=
+	>sys-power/upower-0.99:=
+
+	x11-libs/libICE
+	x11-libs/libSM
+	x11-libs/libX11
+	>=x11-libs/libXcomposite-0.4
+	x11-libs/libXcursor
+	x11-libs/libXdamage
+	x11-libs/libXext
+	>=x11-libs/libXfixes-3
+	>=x11-libs/libXi-1.7.4
+	x11-libs/libXinerama
+	>=x11-libs/libXrandr-1.5
+	x11-libs/libXrender
+	x11-libs/libxcb
+	x11-libs/libxkbfile
+	>=x11-libs/libxkbcommon-0.4.3[X]
+	x11-misc/xkeyboard-config
+
+	gnome-extra/zenity
+	media-libs/mesa[X(+),egl,gles2?]
+
+	input_devices_wacom? ( >=dev-libs/libwacom-0.13 )
+	introspection? ( >=dev-libs/gobject-introspection-1.42:= )
+	udev? ( >=virtual/libgudev-232:= )
+	wayland? (
+		>=dev-libs/libinput-1.4
+		>=dev-libs/wayland-1.13.0
+		>=dev-libs/wayland-protocols-1.12
+		>=media-libs/mesa-10.3[egl,gbm,wayland]
+		systemd? ( sys-apps/systemd )
+		elogind? ( sys-auth/elogind )
+		>=virtual/libgudev-232:=
+		>=virtual/libudev-136:=
+		x11-base/xorg-server[wayland]
+		x11-libs/libdrm:=
+	)
+"
+DEPEND="${RDEPEND}
+	dev-util/glib-utils
+	>=sys-devel/gettext-0.19.6
+	virtual/pkgconfig
+	x11-base/xorg-proto
+	test? ( app-text/docbook-xml-dtd:4.5 )
+	wayland? ( >=sys-kernel/linux-headers-4.4 )
+"
+
+PATCHES=(
+	# Lots of patches from gnome-3-28 branch on top of 3.28.3
+	"${WORKDIR}"/patches/
+	# Hack to not fail USE="-wayland,-gles2" builds with no mesa[gles2]
+	"${FILESDIR}"/${PV}-no-gles2-fix.patch
+)
+
+src_prepare() {
+	# Disable building of noinst_PROGRAM for tests
+	if ! use test; then
+		sed -e '/^noinst_PROGRAMS/d' \
+			-i cogl/tests/conform/Makefile.{am,in} || die
+		sed -e '/noinst_PROGRAMS += testboxes/d' \
+			-i src/Makefile-tests.am || die
+		sed -e '/noinst_PROGRAMS/ s/testboxes$(EXEEXT)//' \
+			-i src/Makefile.in || die
+	fi
+
+	gnome2_src_prepare
+
+	# Leave the damn CFLAGS alone
+	sed -e 's/$CFLAGS -g/$CFLAGS /' \
+		-i clutter/configure || die
+	sed -e 's/$CFLAGS -g -O0/$CFLAGS /' \
+		-i cogl/configure || die
+	sed -e 's/$CFLAGS -g -O/$CFLAGS /' \
+		-i configure || die
+}
+
+src_configure() {
+	# TODO: pipewire remote desktop support; --disable-remote-desktop actually enables it due to upstream autotools bug in 3.26.2 (omitted means disabled)
+	# TODO: nvidia EGLDevice support
+	# TODO: elogind vs systemd is automagic in 3.28.3 - if elogind is found, it's used instead of systemd; but not a huge problem as elogind package blocks systemd package
+	# TODO: lack of --with-xwayland-grab-default-access-rules relies on default settings, but in Gentoo we might have some more packages we want to give Xgrab access (mostly virtual managers and remote desktops)
+	# Prefer gl driver by default
+	# GLX is forced by mutter but optional in clutter
+	# xlib-egl-platform required by mutter x11 backend
+	# native backend without wayland is useless
+	gnome2_src_configure \
+		--disable-static \
+		--enable-compile-warnings=minimum \
+		--enable-gl \
+		--enable-glx \
+		--enable-sm \
+		--enable-startup-notification \
+		--enable-verbose-mode \
+		--enable-xlib-egl-platform \
+		--with-default-driver=gl \
+		--with-libcanberra \
+		$(usex debug --enable-debug=yes "") \
+		$(use_enable gles2)        \
+		$(use_enable gles2 cogl-gles2) \
+		$(use_enable introspection) \
+		$(use_enable wayland) \
+		$(use_enable wayland kms-egl-platform) \
+		$(use_enable wayland native-backend) \
+		$(use_enable wayland wayland-egl-server) \
+		$(use_with input_devices_wacom libwacom) \
+		$(use_with udev gudev)
+}
+
+src_test() {
+	virtx emake check
+}