# Generated from this template and packaging/native-packages.json. %global _prefix /usr/lib/gnoblin %global _libdir %{_prefix}/%{_lib} %global _datadir %{_prefix}/share # Private libraries must never satisfy stock GNOME package dependencies. The private runtime ships Mutter's .pc files, and # RPM turns their Requires lines into pkgconfig() dependencies that name -devel packages. No pkgconfig() name is a runtime # requirement: the sonames and typelibs carry the real ones. %global __provides_exclude_from ^%{_prefix}/.*$ %global __requires_exclude ^(lib(mutter[^()]*|shell-[0-9]+|st-[0-9]+)[.]so.*|pkgconfig[(][^)]*[)].*|typelib[(](Clutter|Cogl|Mtk|Shell|St)[)]([[:space:]]*=[[:space:]]*.*)?)$ %global glib_version 2.81.1 %global gobject_introspection_version 1.41.4 %global gtk4_version 4.14.0 %global glycin_version 2.0.beta.2 %global gsettings_desktop_schemas_version 49.1 %global libdrm_version 2.4.118 %global libdisplay_info_version 0.2 %global libinput_version 1.30.0 %global pixman_version 0.42 %global pipewire_version 1.4.11 %global lcms2_version 2.6 %global colord_version 1.4.5 %global libei_version 1.3.901 %global mutter_api_version 51 %global wayland_protocols_version 1.48 %global wayland_server_version 1.25 Name: gnoblin Version: 0.1.12 Epoch: 1 Release: 24%{?dist} Summary: Standalone Gnoblin desktop session License: GPL-2.0-or-later URL: https://github.com/kierandrewett/gnoblin Source0: gnoblin-%{version}-source.tar.xz Provides: gnoblin-session = %{version} Obsoletes: gnoblin-session < 51 Obsoletes: gnoblin-shell < 51 Obsoletes: gnoblin-mutter < 52 Obsoletes: gnoblin-mutter-devel < 52 Requires: adwaita-cursor-theme Requires: dbus-tools Requires: dconf Requires: gcr-libs Requires: glib2 >= 2.86.0 Requires: gsettings-desktop-schemas >= 49.1 Requires: ibus-libs Requires: json-glib Requires: libinput >= 1.30.0 Requires: lua-libs >= 5.4 Requires: pipewire >= 1.4.11 Requires: polkit Requires: systemd-libs Requires: libwayland-client >= 1.25 Requires: wireplumber BuildRequires: cmake BuildRequires: cvt BuildRequires: desktop-file-utils BuildRequires: mesa-libEGL-devel BuildRequires: mesa-libGLES-devel BuildRequires: mesa-libGL-devel BuildRequires: mesa-libgbm-devel BuildRequires: pam-devel BuildRequires: pkgconfig(colord) >= %{colord_version} BuildRequires: gnome-desktop4-devel BuildRequires: pkgconfig(gcr-4) BuildRequires: pkgconfig(ibus-1.0) >= 1.5.33 BuildRequires: pkgconfig(polkit-agent-1) BuildRequires: pkgconfig(polkit-gobject-1) BuildRequires: pkgconfig(glib-2.0) >= %{glib_version} BuildRequires: pkgconfig(gobject-introspection-1.0) >= %{gobject_introspection_version} BuildRequires: pkgconfig(sm) BuildRequires: pkgconfig(lcms2) >= %{lcms2_version} BuildRequires: pkgconfig(libwacom) BuildRequires: xkeyboard-config-devel BuildRequires: pkgconfig(xkbcommon) BuildRequires: pkgconfig(glesv2) BuildRequires: pkgconfig(graphene-gobject-1.0) BuildRequires: pkgconfig(libdisplay-info) >= %{libdisplay_info_version} BuildRequires: pkgconfig(libpipewire-0.3) >= %{pipewire_version} BuildRequires: pkgconfig(libsystemd) BuildRequires: python3-docutils BuildRequires: gettext-devel git-core BuildRequires: gcc-c++ BuildRequires: pkgconfig(libcanberra) BuildRequires: pkgconfig(json-glib-1.0) # Named as a package, not as pkgconfig(gsettings-desktop-schemas). A COPR project can hold another package that # provides that pkgconfig name, and the build then installs it in place of this one. Its GIR files are not in # /usr/share/gir-1.0, and the Mutter introspection build fails with "Couldn't find include GDesktopEnums-3.0.gir". BuildRequires: gsettings-desktop-schemas-devel >= %{gsettings_desktop_schemas_version} BuildRequires: pkgconfig(gtk4) >= %{gtk4_version} BuildRequires: meson BuildRequires: pkgconfig(gbm) BuildRequires: pkgconfig(glycin-2) >= %{glycin_version} BuildRequires: pkgconfig(gudev-1.0) BuildRequires: pkgconfig(libdrm) >= %{libdrm_version} BuildRequires: pkgconfig(libei-1.0) >= %{libei_version} BuildRequires: pkgconfig(libeis-1.0) >= %{libei_version} BuildRequires: pkgconfig(libstartup-notification-1.0) BuildRequires: pkgconfig(wayland-protocols) >= %{wayland_protocols_version} BuildRequires: pkgconfig(wayland-server) >= %{wayland_server_version} BuildRequires: pkgconfig(libinput) >= %{libinput_version} BuildRequires: pkgconfig(pixman-1) >= %{pixman_version} BuildRequires: pkgconfig(xwayland) BuildRequires: desktop-file-utils BuildRequires: gcc BuildRequires: gettext-devel BuildRequires: gcc-c++ BuildRequires: glib2-devel >= 2.86 BuildRequires: gobject-introspection-devel BuildRequires: gnome-desktop4-devel BuildRequires: libcanberra-devel BuildRequires: libdisplay-info-devel BuildRequires: libei-devel BuildRequires: libeis-devel BuildRequires: libdrm-devel BuildRequires: libgbm-devel BuildRequires: libwacom-devel BuildRequires: lcms2-devel BuildRequires: mesa-libEGL-devel BuildRequires: mesa-libGLES-devel BuildRequires: mesa-libGL-devel BuildRequires: mesa-libgbm-devel BuildRequires: pam-devel BuildRequires: pipewire-devel >= 1.4.11 BuildRequires: startup-notification-devel BuildRequires: wayland-protocols-devel >= 1.48 BuildRequires: wayland-devel >= 1.25 BuildRequires: xkeyboard-config-devel BuildRequires: xorg-x11-proto-devel BuildRequires: json-glib-devel BuildRequires: ninja-build BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(gio-unix-2.0) BuildRequires: pkgconfig(json-glib-1.0) BuildRequires: pkgconfig(xkbcommon) BuildRequires: pkgconfig(lua) >= 5.4 BuildRequires: python3 %description Installs the Lua-supervised Gnoblin session, private runtime tools, and login entry and the patched Mutter runtime in one package. It does not require GNOME Shell or GJS. The GTK-based Gnoblin portal backend is optional. It replaces the earlier gnoblin-session payload package on upgrade. %prep %autosetup -n gnoblin-%{version} %build # ./build.sh is the only build. The system layout adds the public entries (command links, session file, systemd # units, portal and polkit files) below the stage root, so this recipe does not repeat them. # Mutter hardcodes -Werror=array-bounds. With the LTO and fortify flags that Fedora sets, GCC reports a false positive # on g_free (grab) in src/core/keybindings.c. Keep the warning and stop it from failing the build. export CFLAGS="${CFLAGS:-%{optflags}} -Wno-error=array-bounds" GNOBLIN_LIBDIR=%{_lib} GNOBLIN_BUILD_TYPE=release GNOBLIN_LAYOUT_GEOCLUE=1 \ ./build.sh --layout system --without-portal --prefix %{_prefix} \ --destdir %{_builddir}/gnoblin-stage --jobs %{?_smp_build_ncpus} %install cp -a %{_builddir}/gnoblin-stage/. %{buildroot}/ %posttrans /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas %postun if [ -d %{_datadir}/glib-2.0/schemas ]; then /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas fi %check sed '/^DesktopNames=/d' %{buildroot}/usr/share/wayland-sessions/gnoblin.desktop \ > gnoblin-validation.desktop desktop-file-validate gnoblin-validation.desktop %files %license COPYING %{_prefix}/ /usr/bin/gnoblin /usr/bin/gnoblinctl /usr/share/wayland-sessions/gnoblin.desktop /usr/share/xdg-desktop-portal/gnoblin-portals.conf /usr/lib/systemd/user/gnoblin-session.target /usr/lib/systemd/user/gnoblin-idle.service /usr/share/polkit-1/actions/org.gnoblin.mutter.backlight-helper.policy /usr/share/man/man1/gnoblin.1* /usr/share/man/man1/gnoblinctl.1* %package -n gnoblin-geoclue-integration Summary: Optional GeoClue agent authorization for Gnoblin Requires: gnoblin = 1:%{version}-%{release} Requires: geoclue2 >= 2.7.2 %description -n gnoblin-geoclue-integration Allows Gnoblin's optional location authorization agent to register with GeoClue. Install this package only when the session should use Gnoblin as its location agent. %files -n gnoblin-geoclue-integration %config(noreplace) /etc/geoclue/conf.d/50-gnoblin.conf