summaryrefslogtreecommitdiff
path: root/x11-wm/mutter/mutter-9999.ebuild
blob: a224263645b9fabe54068d52b130889b742782aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

PYTHON_COMPAT=( python3_{13..14} )
inherit gnome.org gnome2-utils meson python-any-r1 udev xdg

DESCRIPTION="GNOME compositing window manager based on Clutter"
HOMEPAGE="https://mutter.gnome.org"
LICENSE="GPL-2+"

if [[ ${PV} == 9999 ]]; then
	inherit git-r3
	EGIT_REPO_URI="https://gitlab.gnome.org/GNOME/mutter.git"
	SRC_URI=""
	SLOT="0/18" # This can get easily out of date, but better than 9967
else
	KEYWORDS="~amd64 ~arm ~arm64 ~riscv ~x86"
	# 0/libmutter_api_version - ONLY gnome-shell or anything using mutter-clutter-<api_version>.pc
	# should use the subslot
	SLOT="0/$(($(ver_cut 1) - 32))"
fi

IUSE="bash-completion debug devkit elogind gnome gtk-doc input_devices_wacom +introspection
screencast selinux sysprof systemd test video_cards_nvidia +xwayland"

# native backend requires a logind provider
REQUIRED_USE="
	devkit? ( screencast )
	gtk-doc? ( introspection )
	^^ ( elogind systemd )
	test? ( screencast )"
RESTRICT="!test? ( test )"

# gnome-settings-daemon is build checked but used at runtime only for org.gnome.settings-daemon.peripherals.keyboard
# gschema
# USE=libei was first introduced in xwayland-23.2.1; we min dep on that to ensure the [libei(+)] works right, as
# missing USE flag with previous versions meant that it's not there, while the intention seems to be to make it always
# enabled without USE flag in the future; this ensures have_enable_ei_portal is always there in xwayland.pc, which
# affects how Xwayland is launched, thus if it were toggled off in Xwayland after mutter is installed, Xwayland would
# fail to be started by mutter. mutter already hard-depends on libei, so there's really no extra deps here (besides
# xdg-desktop-portal, but we want that too, anyhow).
# dev-libs/wayland is always needed at build time due to https://bugs.gentoo.org/937632
RDEPEND="
	>=media-libs/graphene-1.10.2[introspection?]
	>=x11-libs/pango-1.46[introspection?]
	>=x11-libs/cairo-1.14
	>=x11-libs/pixman-0.42
	>=gui-libs/gtk-4.14.0:4[introspection?]
	>=dev-libs/fribidi-1.0.0
	>=gnome-base/gsettings-desktop-schemas-47_beta[introspection?]
	>=dev-libs/glib-2.81.1:2
	gnome-base/gnome-settings-daemon
	>=x11-libs/libxkbcommon-1.8.0
	>=app-accessibility/at-spi2-core-2.46:2[introspection?]
	sys-apps/dbus
	>=x11-misc/colord-1.4.5:=
	>=media-libs/lcms-2.6:2
	>=media-libs/harfbuzz-2.6.0:=
	>=dev-libs/libei-1.3.901
	>=media-libs/libdisplay-info-0.2:=
	>=media-libs/glycin-2.0_beta_p2:=

	devkit? (
		gui-libs/libadwaita
	)
	gnome? ( gnome-base/gnome-desktop:4= )

	>=media-libs/libcanberra-0.26

	media-libs/libglvnd

	>=dev-libs/wayland-1.24.0
	>=dev-libs/wayland-protocols-1.47

	>=x11-libs/libdrm-2.4.118
	media-libs/mesa[gbm(+)]
	>=dev-libs/libinput-1.30.0:=

	elogind? ( sys-auth/elogind )
	xwayland? ( >=x11-base/xwayland-23.2.1[libei(+)] )
	video_cards_nvidia? ( gui-libs/egl-wayland )
	>=virtual/libudev-232-r1:=
	>=dev-libs/libgudev-238
	systemd? ( sys-apps/systemd )
	input_devices_wacom? ( >=dev-libs/libwacom-0.13:= )
	screencast? ( >=media-video/pipewire-1.6.0:= )
	introspection? ( >=dev-libs/gobject-introspection-1.82.0-r2:= )
	test? (
		>=x11-libs/gtk+-3.19.8:3[X,introspection?]
		>=dev-util/umockdev-0.3.0
	)
	sysprof? ( >=dev-util/sysprof-capture-3.40.1:4 >=dev-util/sysprof-3.46.0 )
"

X11_CLIENT_DEPS="
	>=gui-libs/gtk-4.14.0:4[X,introspection?]
	media-libs/libglvnd[X]
	>=x11-libs/libX11-1.7.0
	>=x11-libs/libXcomposite-0.4
	x11-libs/libXcursor
	x11-libs/libXdamage
	x11-libs/libXext
	>=x11-libs/libXfixes-6
	>=x11-libs/libXi-1.7.4
	x11-misc/xkeyboard-config
	>=x11-libs/libXrandr-1.5.0
	x11-libs/libxcb:=
	x11-libs/libXinerama
	x11-libs/libXau
	>=x11-libs/startup-notification-0.7
"

RDEPEND+="
	xwayland? (
		${X11_CLIENT_DEPS}
	)
"
DEPEND="${RDEPEND}
	x11-base/xorg-proto
	sysprof? ( >=dev-util/sysprof-common-3.38.0 )
"
RDEPEND+=" selinux? ( sec-policy/selinux-wm )"
BDEPEND="
	>=dev-build/meson-1.5.0
	dev-util/wayland-scanner
	dev-util/gdbus-codegen
	dev-util/glib-utils
	dev-python/docutils
	>=sys-devel/gettext-0.19.8
	virtual/pkgconfig
	gtk-doc? ( >=dev-util/gi-docgen-2021.1 )
	test? (
		${PYTHON_DEPS}
		$(python_gen_any_dep '
			>=dev-python/python-dbusmock-0.28[${PYTHON_USEDEP}]
		')
		app-text/docbook-xml-dtd:4.5
	)
	>=sys-kernel/linux-headers-4.4
	x11-libs/libxcvt
	bash-completion? (
		app-shells/bash-completion
		${PYTHON_DEPS}
		$(python_gen_any_dep '
			dev-python/argcomplete[${PYTHON_USEDEP}]
		')
	)
"

PATCHES=(
	"${FILESDIR}"/mutter-50.3-meta-wayland-touch.patch
)

python_check_deps() {
	if use test; then
		python_has_version ">=dev-python/python-dbusmock-0.28[${PYTHON_USEDEP}]"
	fi
	if use bash-completion; then
		python_has_version dev-python/argcomplete[${PYTHON_USEDEP}]
	fi
}

src_configure() {
	use debug && EMESON_BUILDTYPE=debug
	local emesonargs=(
		-Degl=true
		-Dfonts=true
		-Dnative_backend=true
		-Dopengl=true
		$(meson_use screencast remote_desktop)
		$(meson_use gnome libgnome_desktop)
		-Dudev=true
		-Dudev_dir=$(get_udevdir)
		$(meson_use input_devices_wacom libwacom)
		-Dsound_player=true
		-Dstartup_notification=true
		$(meson_use introspection)
		$(meson_feature devkit)
		$(meson_use gtk-doc docs)
		$(meson_use test cogl_tests)
		$(meson_use test clutter_tests)
		$(meson_use test mutter_tests)
		$(meson_feature test tests)
		-Dkvm_tests=false
		-Dtty_tests=false
		$(meson_use sysprof profiler)
		-Dinstalled_tests=false
		$(meson_use xwayland)
		$(meson_use bash-completion bash_completion)

		#verbose # Let upstream choose default for verbose mode
		#xwayland_path
		# TODO: 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)
		#xwayland_grab_default_access_rules
	)

	if use elogind || use systemd; then
		emesonargs+=(
			-Dlogind=true
		)
	fi

	if use video_cards_nvidia; then
		emesonargs+=(
			-Degl_device=true
			-Dwayland_eglstream=true
		)
	else
		emesonargs+=(
			-Degl_device=false
			-Dwayland_eglstream=false
		)
	fi

	meson_src_configure
}

src_test() {
	# Needed to prevent some tests failures
	gnome2_environment_reset
	export XDG_DATA_DIRS="${EPREFIX}"/usr/share
	glib-compile-schemas "${BUILD_DIR}"/data
	GSETTINGS_SCHEMA_DIR="${BUILD_DIR}"/data meson_src_test
}

pkg_postinst() {
	udev_reload
	xdg_pkg_postinst
	gnome2_schemas_update
}

pkg_postrm() {
	udev_reload
	xdg_pkg_postrm
	gnome2_schemas_update
}