%global glib_version 2.75.1 %global gtk3_version 3.19.8 %global gtk4_version 4.0.0 %global gsettings_desktop_schemas_version 40~alpha %global json_glib_version 0.12.0 %global libinput_version 1.19.0 %global pipewire_version 0.3.33 %global lcms2_version 2.6 %global colord_version 1.4.5 %global libei_version 1.0.0 %define url_ver %{lua: ver = rpm.expand("%{version}"); majmin, count1 = string.gsub(ver, "^([0123456789]+%.[0123456789]+).*", "%1", 1); if count1 == 0 then print(ver); return; end; maj, count2 = string.gsub(majmin, "^([0123456789]+).*", "%1", 1); if count2 == 0 then print(majmin) elseif tonumber(majmin) < 40 then print(majmin) else print(maj) end} %define lib_major 0 %define api 14 %define libname %mklibname %{name} %{api} %{lib_major} %define libnamedev %mklibname -d %{name} %{api} %define privatelib %mklibname %{name}-private %{api} %define privategir %mklibname %{name}-private-gir %{api} # (wally) building tests causes ninja to loop forever %bcond_without tests # (tmb) disble underlinking for now %define _disable_ld_no_undefined 1 # ovitters remove this autoreq; this is a hack %global __requires_exclude %{?__requires_exclude:%__requires_exclude|}^devel\\(libmutter- %global libinput_version 1.4 %global json_glib_version 0.12.0 Name: mutter Version: 46.0 Release: %mkrel 1 Summary: Window and compositing manager based on Clutter License: GPLv2+ Group: Graphical desktop/GNOME URL: https://download.gnome.org/sources/mutter/ Source0: https://download.gnome.org/sources/%{name}/%{url_ver}/%{name}-%{version}.tar.xz # upstream git # From Fedora # Work-around for OpenJDK's compliance test Patch50: 0001-window-actor-Special-case-shaped-Java-windows.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1936991 Patch51: mutter-42.alpha-disable-tegra.patch # # From Deb # Source117: wayland-data-device-Allow-any-drag-timestamp-as-drag-star.patch # Patch121: tests-Disable-restore-size-test.patch # From ubuntu # https://bugs.launchpad.net/ubuntu/+source/mutter/+bug/1820850 # (https://gitlab.gnome.org/3v1n0/mutter/-/commits/xrandr-scaling) Source150: x11-Add-support-for-fractional-scaling-using-Randr.patch # # From opensuse Patch201: mutter-SLE-bell.patch # Fix libmutter-test-12.so's soversion Patch500: 0001-Add-soversion-to-libmutter-test-12.so.patch BuildRequires: cvt BuildRequires: git BuildRequires: meson BuildRequires: mesaegl-devel BuildRequires: pkgconfig(gnome-settings-daemon) BuildRequires: pkgconfig(glesv2) BuildRequires: pkgconfig(glib-2.0) >= %{glib_version} BuildRequires: pkgconfig(gio-2.0) >= 2.25.10 BuildRequires: pkgconfig(graphene-gobject-1.0) BuildRequires: pkgconfig(gsettings-desktop-schemas) >= 3.7.3 BuildRequires: pkgconfig(gnome-settings-daemon) BuildRequires: pkgconfig(gnome-desktop-4) BuildRequires: pkgconfig(gtk+-3.0) >= 3.3.3 BuildRequires: pkgconfig(gbm) BuildRequires: pkgconfig(sm) BuildRequires: pkgconfig(libwacom) BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(libstartup-notification-1.0) >= 0.7 BuildRequires: pkgconfig(libcanberra) BuildRequires: pkgconfig(libcanberra-gtk3) >= 0.26 BuildRequires: pkgconfig(libdisplay-info) BuildRequires: pkgconfig(libpipewire-0.3) >= 0.2.5 BuildRequires: pkgconfig(xcomposite) >= 0.2 BuildRequires: pkgconfig(xcursor) BuildRequires: pkgconfig(pango) >= 1.2.0 BuildRequires: pkgconfig(cairo) >= 1.10.0 BuildRequires: pkgconfig(xfixes) BuildRequires: pkgconfig(xext) BuildRequires: pkgconfig(xdamage) BuildRequires: pkgconfig(xi) >= 1.6.99.1 BuildRequires: pkgconfig(xrandr) BuildRequires: pkgconfig(xrender) BuildRequires: pkgconfig(xdamage) BuildRequires: pkgconfig(gobject-introspection-1.0) >= 0.9.5 BuildRequires: pkgconfig(clutter-1.0) >= 1.19.5 BuildRequires: pkgconfig(upower-glib) >= 0.99.0 BuildRequires: pkgconfig(gnome-desktop-3.0) BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(wayland-server) >= 1.13.0 BuildRequires: pkgconfig(wayland-protocols) >= 1.19 BuildRequires: pkgconfig(lcms2) >= %{lcms2_version} BuildRequires: pkgconfig(colord) >= %{colord_version} # (tv) temp cauldron fix: BuildRequires: %{mklibname ei 1} BuildRequires: pkgconfig(libei-1.0) >= %{libei_version} BuildRequires: pkgconfig(libeis-1.0) >= %{libei_version} BuildRequires: pkgconfig(clutter-wayland-1.0) BuildRequires: pkgconfig(clutter-wayland-compositor-1.0) BuildRequires: pkgconfig(clutter-egl-1.0) BuildRequires: pkgconfig(cogl-1.0) >= 1.17.1 BuildRequires: x11-server-xvfb # for wayland: BuildRequires: x11-server-xwayland BuildRequires: pkgconfig(json-glib-1.0) >= %{json_glib_version} BuildRequires: pkgconfig(libinput) >= %{libinput_version} BuildRequires: pkgconfig(xwayland) BuildRequires: pkgconfig(libsystemd) # Nvidia eglstream: BuildRequires: pkgconfig(wayland-eglstream) BuildRequires: pkgconfig(wayland-eglstream-protocols) BuildRequires: pkgconfig(sysprof-capture-4) BuildRequires: pkgconfig(xtst) BuildRequires: pkgconfig(glu) BuildRequires: pkgconfig(glesv2) BuildRequires: pkgconfig(xkbfile) BuildRequires: pkgconfig(xkbcommon) >= 0.4.3 BuildRequires: pkgconfig(xkbcommon-x11) BuildRequires: pkgconfig(xtst) BuildRequires: pkgconfig(x11-xcb) BuildRequires: pkgconfig(xkeyboard-config) BuildRequires: pkgconfig(gudev-1.0) BuildRequires: gettext BuildRequires: gnome-doc-utils BuildRequires: python3-dbusmock Requires: %{privategir} = %{version}-%{release} %if ! %{with tests} Obsoletes: %{name}-tests < %{version}-%{release} %endif # Need common Requires: %{name}-common = %{version}-%{release} %description Mutter is a window and compositing manager that displays and manages your desktop via OpenGL. Mutter combines a sophisticated display engine using the Clutter toolkit with solid window-management logic inherited from the Metacity window manager. While Mutter can be used stand-alone, it is primarily intended to be used as the display core of a larger system such as GNOME Shell. For this reason, Mutter is very extensible via plugins, which are used both to add fancy visual effects and to rework the window management behaviors to meet the needs of the environment. %package common Summary: Common files used by %{name} and forks of %{name} Group: Graphical desktop/GNOME BuildArch: noarch %description common Common files used by Mutter and soft forks of Mutter. %package -n %{libname} Summary: Libraries for Mutter Group: System/Libraries %description -n %{libname} This package contains libraries used by Mutter. %package -n %{privatelib} Summary: Private libraries for Mutter Group: System/Libraries %description -n %{privatelib} This package contains private libraries used by Mutter. %package -n %{privategir} Summary: GObject Introspection interface description for Mutter Group: System/Libraries Requires: %{libname} = %{version}-%{release} Requires: %{privatelib} = %{version}-%{release} %description -n %{privategir} GObject Introspection interface description for Mutter. %package -n %{libnamedev} Summary: Development package for %{name} Group: Development/GNOME and GTK+ Requires: %{name} = %{version}-%{release} Requires: %{libname} = %{version}-%{release} Requires: %{privatelib} = %{version}-%{release} Requires: %{privategir} = %{version}-%{release} # for EGL/eglmesaext.h that's included from public cogl-egl-defines.h header Requires: %{_lib}mesaegl-devel Provides: %{name}-devel = %{version}-%{release} Provides: lib%{name}-devel = %{version}-%{release} %description -n %{libnamedev} Header files and libraries for developing Mutter plugins. Also includes utilities for testing Metacity/Mutter themes. %package tests Summary: Tests for the %{name} package Group: Development/GNOME and GTK+ Requires: %{name}-devel = %{version}-%{release} Requires: %{name} = %{version}-%{release} %description tests The %{name}-tests package contains tests that can be used to verify the functionality of the installed %{name} package. %prep %autosetup -S git -p1 %build %meson \ -Dtests=%{?with_tests:true}%{!?with_tests:false} \ -Dintrospection=true \ -Dwayland=true \ -Degl_device=true \ -Dwayland_eglstream=true \ -Dxwayland_initfd=enabled \ -Dremote_desktop=true \ -Dnative_backend=true %meson_build %install %meson_install %find_lang %{name} %files -f %{name}.lang %doc NEWS %{_bindir}/mutter %{_libexecdir}/mutter-restart-helper %{_libexecdir}/mutter-x11-frames %{_mandir}/man1/mutter.1* %files common %{_datadir}/GConf/gsettings/mutter-schemas.convert %{_datadir}/glib-2.0/schemas/org.gnome.mutter.gschema.xml %{_datadir}/glib-2.0/schemas/org.gnome.mutter.wayland.gschema.xml %{_datadir}/gnome-control-center/keybindings/50-mutter-*.xml %{_udevrulesdir}/61-mutter.rules %files -n %{libname} %dir %{_libdir}/%{name}-%{api} %dir %{_libdir}/%{name}-%{api}/plugins %{_libdir}/%{name}-%{api}/plugins/libdefault.so %{_libdir}/lib%{name}-%{api}.so.%{lib_major}{,.*} %{_libdir}/%{name}-%{api}/lib%{name}-*-%{api}.so.%{lib_major}{,.*} %{_libdir}/lib%{name}-test-%{api}.so.%{lib_major}{,.*} %files -n %{privategir} %{_libdir}/%{name}-%{api}/*-%{api}.typelib %files -n %{privatelib} %{_libdir}/%{name}-%{api}/libmutter-*-%{api}.so %files -n %{libnamedev} %{_includedir}/* %{_libdir}/lib%{name}*-%{api}.so %{_libdir}/pkgconfig/* %{_libdir}/%{name}-%{api}/*.gir %if %{with tests} %files tests %{_libexecdir}/installed-tests/%{name}-%{api} %{_datadir}/installed-tests/%{name}-%{api} %{_datadir}/%{name}-%{api}/tests %endif