File input-remapper.spec of Package input-remapper

Name:           input-remapper
Version:        2.2.0
Release:        0
Summary:        An easy to use tool to change the behaviour of your input devices

License:        GPL-3.0-or-later
URL:            https://github.com/sezanzeb/%{name}
Source0:        https://github.com/sezanzeb/input-remapper/archive/refs/tags/%{version}.tar.gz
BuildArch:      noarch

BuildRequires:  desktop-file-utils
BuildRequires:  appstream-glib
BuildRequires:  python-rpm-macros
BuildRequires:  systemd-rpm-macros
BuildRequires:  python3-devel
BuildRequires:  python3-setuptools
BuildRequires:  python3-wheel
BuildRequires:  python3-pip
BuildRequires:  gettext
BuildRequires:  fdupes

# Called from inputremapper/gui/reader_service.py
BuildRequires:  procps
Requires:       procps

# inputremapper/gui/components/editor.py
BuildRequires:  python3-pycairo
Requires:       python3-pycairo

# Extra test dependencies (see scripts/ci-install-deps.sh):
BuildRequires:  python3-psutil
Requires:       python3-psutil
# Core runtime dependencies
BuildRequires:  python3-evdev
Requires:       python3-evdev
BuildRequires:  python3-gobject
Requires:       python3-gobject

# Using pytest as the test runner lets us ignore modules and skip tests
BuildRequires:  python3-pytest

BuildRequires:  gobject-introspection
Requires:       gobject-introspection
# Grep for require_version to find these:
# gi.require_version("Gdk", "3.0")
# gi.require_version("Gtk", "3.0")
BuildRequires:  gtk3
Requires:       gtk3
# gi.require_version("GtkSource", "4")
BuildRequires:  gtksourceview4
Requires:       gtksourceview4


%description
An easy to use tool to change the mapping of your input device buttons.
Supports mice, keyboards, gamepads, X11, Wayland, combined buttons and
programmable macros. Allows mapping non-keyboard events (click, joystick,
wheel) to keys of keyboard devices.
The program works at the evdev interface level, by filtering and redirecting
the output of physical devices to that of virtual ones.


%prep
%autosetup -p1 -n %{name}-%{version}
#Fix rpmlint errors
find inputremapper/injection/macros/ -iname "*.py" -type f -print0 | xargs -0 sed -i -e 's+\s*#\s*!/usr/bin/env python3++'


%build
%python3_build


%install
%python3_install

# Move files if they were incorrectly installed to python3_sitelib
if [ -d %{buildroot}%{python3_sitelib}/etc ]; then
    mv %{buildroot}%{python3_sitelib}/etc %{buildroot}/etc
fi
if [ -d %{buildroot}%{python3_sitelib}/usr/bin ]; then
    mv %{buildroot}%{python3_sitelib}/usr/bin %{buildroot}/usr/bin
fi
if [ -d %{buildroot}%{python3_sitelib}/usr/lib/systemd ]; then
    mv %{buildroot}%{python3_sitelib}/usr/lib/systemd %{buildroot}/usr/lib/systemd
fi
if [ -d %{buildroot}%{python3_sitelib}/usr/lib/udev ]; then
    mv %{buildroot}%{python3_sitelib}/usr/lib/udev %{buildroot}/usr/lib/udev
fi
if [ -d %{buildroot}%{python3_sitelib}/usr/share ]; then
    mv %{buildroot}%{python3_sitelib}/usr/share %{buildroot}/usr/share
fi

mkdir -p %{buildroot}/usr/share/dbus-1/system.d/

# clean up duplicate files if they exist
if [ -f %{buildroot}%{_datadir}/%{name}/inputremapper.Control.conf ]; then
    rm %{buildroot}%{_datadir}/%{name}/inputremapper.Control.conf
fi
if [ -f %{buildroot}%{_datadir}/%{name}/io.github.sezanzeb.input_remapper.metainfo.xml ]; then
    rm %{buildroot}%{_datadir}/%{name}/io.github.sezanzeb.input_remapper.metainfo.xml
fi
if [ -f %{buildroot}%{_datadir}/%{name}/%{name}-gtk.desktop ]; then
    rm %{buildroot}%{_datadir}/%{name}/%{name}-gtk.desktop
fi
if [ -f %{buildroot}%{_datadir}/%{name}/%{name}.policy ]; then
    rm %{buildroot}%{_datadir}/%{name}/%{name}.policy
fi
if [ -f %{buildroot}%{_datadir}/%{name}/%{name}.svg ]; then
    rm %{buildroot}%{_datadir}/%{name}/%{name}.svg
fi

# Use fdupes to link duplicate files
%fdupes %{buildroot}%{python3_sitelib}


%pre
%service_add_pre %{name}.service


%post
%service_add_post %{name}.service


%preun
%service_del_preun %{name}.service


%postun
%service_del_postun %{name}.service

%check
# Validate desktop file if it exists
if [ -f %{buildroot}/%{_datadir}/applications/%{name}-gtk.desktop ]; then
desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}-gtk.desktop
fi
# Validate appstream metadata if it exists
if ls %{buildroot}%{_datadir}/metainfo/*.metainfo.xml 1> /dev/null 2>&1; then
appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/*.metainfo.xml
fi
# Run unit tests if tests directory exists
#if [ -d tests/unit ]; then
#  export DATA_DIR='%{buildroot}%{_datadir}/%{name}'
#  PYTHONPATH='%{buildroot}%{python3_sitelib}' \
#  %pytest tests/unit -v || :
#fi

%files
%license LICENSE
%doc README.md
%{python3_sitelib}/inputremapper/
%{python3_sitelib}/input_remapper-*.egg-info/
%{_datadir}/dbus-1/system.d/inputremapper.Control.conf
%{_sysconfdir}/xdg/autostart/%{name}-autoload.desktop
%{_bindir}/%{name}*
%{_unitdir}/%{name}.service
%{_udevrulesdir}/99-%{name}.rules
%{_datadir}/%{name}
%{_datadir}/icons/hicolor/scalable/apps/%{name}.svg

# deal with non-standard location of localization files
#%exclude %dir %{_datadir}/%{name}/lang
%dir %{_datadir}/%{name}/lang
%lang(fr) %{_datadir}/%{name}/lang/fr
%lang(fr) %{_datadir}/%{name}/lang/fr_FR
%lang(it) %{_datadir}/%{name}/lang/it
%lang(it) %{_datadir}/%{name}/lang/it_IT
%lang(pt) %{_datadir}/%{name}/lang/pt
%lang(pt) %{_datadir}/%{name}/lang/pt_BR
%lang(ru) %{_datadir}/%{name}/lang/ru
%lang(ru) %{_datadir}/%{name}/lang/ru_RU
%lang(sk) %{_datadir}/%{name}/lang/sk
%lang(sk) %{_datadir}/%{name}/lang/sk_SK
%lang(uk) %{_datadir}/%{name}/lang/uk
%lang(uk) %{_datadir}/%{name}/lang/uk_UA
%lang(zh) %{_datadir}/%{name}/lang/zh
%lang(zh) %{_datadir}/%{name}/lang/zh_CN

%{_datadir}/applications/%{name}-gtk.desktop
%{_datadir}/polkit-1/actions/%{name}.policy
%{_datadir}/metainfo/*.metainfo.xml


%changelog
openSUSE Build Service is sponsored by