File qtile.spec of Package qtile

#
# spec file for package qtile
#
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%global _minimum_wlroots_ver 0.17.0
%global _conflict_wlroots_ver 0.18.0

Name:           qtile
Version:        0.29.0
Release:        0
Summary:        A pure-Python tiling window manager
# All MIT except for: libqtile/widget/pacman.py:GPL (v3 or later)
License:        GPL-3.0-or-later AND MIT
Group:          System/X11/Displaymanagers
URL:            http://qtile.org
Source0:        https://files.pythonhosted.org/packages/source/q/%{name}/%{name}-%{version}.tar.gz
Source1:        %{name}-rpmlintrc
Source3:        %{name}-portals.conf
BuildRequires:  fdupes
BuildRequires:  gcc
BuildRequires:  gdk-pixbuf-loader-rsvg
BuildRequires:  librsvg
BuildRequires:  pango-devel
BuildRequires:  pkg-config
BuildRequires:  python-rpm-macros
BuildRequires:  python3-cairocffi >= 1.6.0
BuildRequires:  python3-cffi >= 1.1.0
BuildRequires:  python3-devel
BuildRequires:  python3-pip
BuildRequires:  python3-pycairo >= 1.25.1
BuildRequires:  python3-pywlroots >= %{_minimum_wlroots_ver}
BuildRequires:  python3-setuptools
BuildRequires:  python3-setuptools_scm
BuildRequires:  python3-wheel
BuildRequires:  python3-xcffib >= 1.4.0
BuildRequires:  update-desktop-files
BuildRequires:  pkgconfig(libinput)
BuildRequires:  pkgconfig(libpulse)
BuildRequires:  pkgconfig(libudev)
BuildRequires:  pkgconfig(wlroots) >= %{_minimum_wlroots_ver}
BuildConflicts: pkgconfig(wlroots) >= %{_conflict_wlroots_ver}
BuildRequires:  pkgconfig(xkbcommon)
BuildRequires:  pkgconfig(xwayland)
Requires:       gdk-pixbuf-loader-rsvg
Requires:       pango-tools
Requires:       python3-cairocffi >= 0.9.0
Requires:       python3-cairocffi-pixbuf
Requires:       python3-cffi >= 1.1.0
Requires:       python3-pywayland
Requires:       python3-pywlroots
Requires:       python3-xcffib >= 0.10.1
Requires(post): update-alternatives
Requires(postun): update-alternatives
Recommends:     libxcb-cursor0
Recommends:     pipewire
Recommends:     pipewire-pulseaudio
Recommends:     python3-iwlib
Recommends:     python3-keyring
Recommends:     python3-psutil
Recommends:     python3-python-dateutil
Recommends:     python3-python-mpd2
Recommends:     python3-pyxdg
Recommends:     sensors
Recommends:     xdg-desktop-portal-gtk
Recommends:     xdg-desktop-portal-wlr
Recommends:     xorg-x11-server-extra
# XDP-WLR alternative. This could be installed with no-recommends flag
Suggests:       xdg-desktop-portal-hyprland
# v0.21.0 has lots of additional failures on i586
ExcludeArch:    %{ix86} %arm %arm64

# Tests
BuildRequires:  ImageMagick
BuildRequires:  dbus-1
BuildRequires:  dbus-1-tools
BuildRequires:  graphviz
BuildRequires:  gtk-layer-shell-devel
BuildRequires:  gtk3-tools
BuildRequires:  libgtk-3-0
BuildRequires:  libnotify
BuildRequires:  libnotify-tools
BuildRequires:  procps
BuildRequires:  python3-bowler
BuildRequires:  python3-cairocffi-pixbuf
BuildRequires:  python3-curses
BuildRequires:  python3-dbus_next
BuildRequires:  python3-gobject
BuildRequires:  python3-gobject-Gdk
BuildRequires:  python3-importlib-metadata
BuildRequires:  python3-importlib-resources
BuildRequires:  python3-isort
BuildRequires:  python3-libcst
# BuildRequires:  python3-mypy
BuildRequires:  python3-pytest
BuildRequires:  python3-pytest-isort
BuildRequires:  python3-pyxdg
BuildRequires:  xcalc
BuildRequires:  xclock
BuildRequires:  xeyes
BuildRequires:  xorg-x11-server-extra
BuildRequires:  xrandr
BuildRequires:  xterm
BuildRequires:  xvfb-run
BuildRequires:  xwayland

%description
A pure-Python tiling window manager.
* Extensible in that personal layouts, widgets and commands can be created.
* Configured in Python.
* Command shell that allows all aspects of Qtile to be managed and
  inspected.
* Remote scriptability to set up workspaces,
  manipulate windows, update status bar widgets and more.
* Qtile is unit-tested using this remote scriptability feature.

%prep
%autosetup -p1
# Fix rpmlint warning
sed -i '/#!\/usr\/bin\/env python/d' libqtile/scripts/cmd_obj.py
sed -i '/#!\/usr\/bin\/env python/d' setup.py

# Disable use of scm
sed -i '65s/True/False/' setup.py

%build
export CFLAGS="%optflags $(pkg-config --cflags wayland-client libinput xkbcommon wlroots) -I/usr/include/wlr"
export LDFLAGS="-L%{_libdir}/libwlroots.so.12"
# Initial steps from https://github.com/qtile/qtile/blob/master/scripts/ffibuild
export PYTHONPATH="$PWD:$PYTHONPATH"
./scripts/ffibuild -v
%python3_pyproject_wheel

%install
export CFLAGS="%optflags $(pkg-config --cflags wayland-client libinput xkbcommon wlroots) -I/usr/include/wlr"
export LDFLAGS="-L%{_libdir}/libwlroots.so.12"
# Initial steps from https://github.com/qtile/qtile/blob/master/scripts/ffibuild
export PYTHONPATH="$PWD:$PYTHONPATH"
./scripts/ffibuild -v
%python3_pyproject_install
mkdir -p %{buildroot}%{_datadir}/xsessions/
install -m 644 %{_builddir}/qtile-%{version}/resources/qtile.desktop %{buildroot}%{_datadir}/xsessions/
# XDP >= 0.18.0 requires a portal for the environment and onwards
install -Dpm 0644 -t %{buildroot}%{_datadir}/xdg-desktop-portal/ %{SOURCE3}

%suse_update_desktop_file %{buildroot}%{_datadir}/xsessions/qtile.desktop

# default selector for xsession
mkdir -p %{buildroot}%{_sysconfdir}/alternatives
touch %{buildroot}%{_sysconfdir}/alternatives/default-xsession.desktop
ln -s %{_sysconfdir}/alternatives/default-xsession.desktop %{buildroot}%{_datadir}/xsessions/default.desktop

%fdupes %{buildroot}%{%python3_sitearch}

%check
mkdir -vp ${PWD}/bin
ln -svf %{buildroot}%{_bindir}/qtile ${PWD}/bin/qtile
export CFLAGS="%optflags $(pkg-config --cflags wayland-client libinput xkbcommon wlroots) -I/usr/include/wlr"
export LC_TYPE=en_US.UTF-8
export PYTHONPATH=%{buildroot}%{python3_sitearch}:%{python3_sitearch}:$PWD
export PATH="${PWD}/bin:${PATH}"
export PYTHONDONTWRITEBYTECODE=1
# Workaround for broken pytest
# https://github.com/openSUSE/python-rpm-macros/issues/170#issuecomment-2152944000
%{_bindir}/xvfb-run %{_bindir}/python%{python_version} -m pytest -vvv -rs --backend x11 --backend wayland -k "not test_net_wm_icon_change"

%post
%{_sbindir}/update-alternatives --install %{_datadir}/xsessions/default.desktop \
  default-xsession.desktop %{_datadir}/xsessions/qtile.desktop 20

%postun
if [ ! -f %{_datadir}/xsessions/qtile.desktop ] ; then
  %{_sbindir}/update-alternatives \
  --remove default-xsession.desktop %{_datadir}/xsessions/qtile.desktop
fi

%files
%ghost %{_sysconfdir}/alternatives/default-xsession.desktop
%ghost %{_sysconfdir}/alternatives/default.desktop
%license LICENSE
%doc CHANGELOG README.rst
%{_bindir}/qtile
%{python3_sitearch}/*qtile*/
%{_datadir}/xsessions/default.desktop
%{_datadir}/xsessions/qtile.desktop
%dir %{_datadir}/xdg-desktop-portal
%{_datadir}/xdg-desktop-portal/%{name}-portals.conf

%changelog
openSUSE Build Service is sponsored by