File transmission.spec of Package transmission
%define realname transmission
%define realver 4.0.5
%define srcext tar.xz
%bcond_with gtk
# Systems with Qt 5.x
%define qt_ver 5.6
%bcond_without qt
%bcond_without ninja
# Common info
Name: %{realname}-daemon
Version: %{realver}
Release: wiz%{?extraver:0.}1%{?dist}
License: GPL-2.0 or GPL-3.0 and MIT
Group: Productivity/Networking/File-Sharing
URL: https://www.transmissionbt.com/
Summary: BitTorrent client daemon with web-interface
# Install-time parameters
Requires: systemd
# Build-time parameters
# Build Tools
BuildRequires: cmake >= 3.12
%if %{with ninja}
BuildRequires: ninja
%endif
BuildRequires: gcc-c++ pkg-config >= 0.9.0 intltool >= 0.35.0 gettext
# Base requirements
BuildRequires: pkgconfig(miniupnpc) >= 1.9
BuildRequires: pkgconfig(libcurl) >= 7.28.0
BuildRequires: pkgconfig(libevent) >= 2.1.0
BuildRequires: pkgconfig(openssl) >= 0.9.7
BuildRequires: zlib-devel >= 1.2.3
# Requirements for GTK-client
%if %{with gtk}
BuildRequires: pkgconfig(gtkmm-4.0) >= 3.24.0
BuildRequires: pkgconfig(glibmm-2.68) >= 2.60.0
BuildRequires: pkgconfig(giomm-2.68) >= 2.26.0
%endif
# Requirements for QT-client
%if %{with qt}
BuildRequires: pkgconfig(Qt5Core) >= %{qt_ver}
BuildRequires: pkgconfig(Qt5Gui) >= %{qt_ver} pkgconfig(Qt5Widgets) >= %{qt_ver}
BuildRequires: pkgconfig(Qt5Network) >= %{qt_ver}
BuildRequires: pkgconfig(Qt5Svg) >= %{qt_ver}
BuildRequires: pkgconfig(Qt5DBus) >= %{qt_ver}
%if 0%{?suse_version}
BuildRequires: libqt5-linguist-devel >= %{qt_ver}
%else
BuildRequires: qt5-linguist >= %{qt_ver}
%endif
%endif
# Requirements for web
BuildRequires: npm >= 8.1.307
%if 0%{?suse_version}
BuildRequires: update-desktop-files
%endif
BuildRequires: systemd-devel
BuildRoot: %{_tmppath}/%{name}-root
Source0: https://github.com/transmission/transmission/releases/download/%{realver}/%{realname}-%{realver}%{?extraver}.%{srcext}
Source11: node_modules.tar.xz
%description
Transmission is a fast, easy, and free BitTorrent client.
This package contains daemon verion with web interface.
%package -n %{realname}-cli
Group: Productivity/Networking/File-Sharing
Summary: BitTorrent command-line client
%description -n %{realname}-cli
Transmission is a fast, easy, and free BitTorrent client.
This package contains command-line client.
%package -n %{realname}-utils
Group: Productivity/Networking/File-Sharing
Summary: Command-line utilities for dealing with torrent-files
%description -n %{realname}-utils
Transmission is a fast, easy, and free BitTorrent client.
This package contains command-line utilities for dealing with torrent-files:
* transmission-create - command-line utility to create .torrent files
* transmission-show - command-line utility to show .torrent file metadata
* transmission-edit - command-line utility to modify .torrent files' announce URLs
%if %{with gtk}
%package -n %{realname}-gtk
Group: Productivity/Networking/File-Sharing
Summary: BitTorrent client with GTK2 interface
%description -n %{realname}-gtk
Transmission is a fast, easy, and free BitTorrent client.
This package contains GTK2 client.
%package -n %{realname}-gtk-lang
Group: System/Localization
Summary: Languages for package %{realname}-gtk
# RH builds all packages for that architecture
%if 0%{?suse_version}
BuildArch: noarch
%endif
%description -n %{realname}-gtk-lang
Provides translations to the package %{realname}-gtk
%endif
%if %{with qt}
%package -n %{realname}-qt
Group: Productivity/Networking/File-Sharing
Summary: BitTorrent client with Qt4 interface
%description -n %{realname}-qt
Transmission is a fast, easy, and free BitTorrent client.
This package contains Qt4 client.
%endif
# Preparation step (unpackung and patching if necessary)
%prep
%setup -q -n %{realname}-%{realver}%{?extraver} -a11
%{__sed} -i '/pt_PT/d' po/CMakeLists.txt
%{__sed} -i '/qt5_add_translation/d' cmake/TrMacros.cmake
%{__sed} -i '/TorrentModel.h/ a#include <cassert>' qt/TorrentModel.cc
%{__sed} -i '/COMMAND/ s/ ci / i /' web/CMakeLists.txt
%build
_CFLAGS='%{optflags} %{?gcc_lto}'
_CXXFLAGS='%{optflags} %{?gcc_lto}'
_LDFLAGS='-Wl,--as-needed -Wl,--strip-all -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro %{?gcc_lto}'
mkdir -p build/web
mv web/node_modules build/web/
cmake -S . -B build \
%if %{with ninja}
-G Ninja \
%endif
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS_RELEASE="$_CFLAGS" \
-DCMAKE_CXX_FLAGS_RELEASE="$_CXXFLAGS" \
-DCMAKE_EXE_LINKER_FLAGS_RELEASE="$_LDFLAGS" \
-DCMAKE_MODULE_LINKER_FLAGS_RELEASE="$_LDFLAGS" \
-DCMAKE_SHARED_LINKER_FLAGS_RELEASE="$_LDFLAGS" \
-DCMAKE_VERBOSE_MAKEFILE=YES \
\
%if %{with gtk}
-DENABLE_GTK=YES \
%endif
%if %{with qt}
-DENABLE_QT=YES \
-DENABLE_NLS=YES \
%endif
-DWITH_SYSTEMD=YES \
-DENABLE_CLI=YES \
-DENABLE_TESTS=NO \
\
-DUSE_SYSTEM_EVENT2=YES \
-DUSE_SYSTEM_MINIUPNPC=YES
%if %{with ninja}
ninja -v -C build %{?_smp_mflags}
%else
%{__make} -C build %{?_smp_mflags}
%endif
%install
%if %{with ninja}
DESTDIR=%{buildroot} ninja -v -C build install
%else
%{__make} -C build install DESTDIR=%{buildroot}
%endif
MIME_TYPES='application/x-bittorrent;application/x-torrent;x-scheme-handler/magnet;'
# Daemon unit file
%{__install} -D -m644 daemon/transmission-daemon.service %{buildroot}%{_unitdir}/transmission-daemon.service
# GTK stuff
%if %{with gtk}
%{__sed} -ri "/^MimeType=/ s|=.+$|=$MIME_TYPES|" %{buildroot}%{_datadir}/applications/transmission-gtk.desktop
%find_lang transmission-gtk
%if 0%{?suse_version}
%suse_update_desktop_file transmission-gtk Network FileTransfer P2P
%endif
%endif
# Qt stuff
%if %{with qt}
%{__sed} -ri "/^MimeType=/ s|=.+$|=$MIME_TYPES|" %{buildroot}%{_datadir}/applications/transmission-qt.desktop
%{__sed} -ri "/^Icon=/ s|=.+|=transmission-qt|" %{buildroot}%{_datadir}/applications/transmission-qt.desktop
# Translations
cd qt/translations
%{__install} -d -m0755 %{buildroot}%{_datadir}/transmission/translations/
for TS in *.ts; do
QM=${TS%.ts}.qm
lrelease-qt5 $TS $QM
%{__install} -m0644 $QM %{buildroot}%{_datadir}/transmission/translations/$QM
done
cd -
%{__install} -D -m0644 qt/icons/transmission.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/transmission.svg
%find_lang transmission --with-qt
%if 0%{?suse_version}
%suse_update_desktop_file transmission-qt Network FileTransfer P2P
%endif
%endif
%clean
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
%files
%defattr(-,root,root)
%{_bindir}/transmission-daemon
%{_bindir}/transmission-remote
%dir %{_datadir}/transmission
%{_datadir}/transmission/public_html/
%{_unitdir}/transmission-daemon.service
%doc %{_mandir}/man1/transmission-daemon*
%doc %{_mandir}/man1/transmission-remote*
%exclude %{_datadir}/doc
%files -n %{realname}-cli
%defattr(-,root,root)
%{_bindir}/transmission-cli
%doc %{_mandir}/man1/transmission-cli*
%files -n %{realname}-utils
%defattr(-,root,root)
%{_bindir}/transmission-create
%{_bindir}/transmission-edit
%{_bindir}/transmission-show
%doc %{_mandir}/man1/transmission-create*
%doc %{_mandir}/man1/transmission-edit*
%doc %{_mandir}/man1/transmission-show*
%if %{with gtk}
%files -n %{realname}-gtk
%defattr(-,root,root)
%{_bindir}/transmission-gtk
%{_datadir}/appdata/transmission-gtk.appdata.xml
%{_datadir}/applications/transmission-gtk.desktop
%{_datadir}/icons/hicolor/*/apps/transmission.*
%{_datadir}/icons/hicolor/scalable/apps/transmission-devel.svg
%{_datadir}/icons/hicolor/symbolic/apps/transmission-symbolic.svg
%doc %{_mandir}/man1/transmission-gtk*
%files -n %{realname}-gtk-lang -f %{realname}-gtk.lang
%defattr(-,root,root)
%endif
%if %{with qt}
%files -n %{realname}-qt -f %{realname}.lang
%defattr(-,root,root)
%doc qt/README.txt
%{_bindir}/transmission-qt
%{_datadir}/applications/transmission-qt.desktop
%dir %{_datadir}/icons/hicolor/scalable/apps
%dir %{_datadir}/icons/hicolor/scalable
%{_datadir}/icons/hicolor/*/apps/transmission.*
%dir %{_datadir}/transmission/translations
%dir %{_datadir}/transmission
%doc %{_mandir}/man1/transmission-qt*
%endif
%if 0%{?suse_version}
%pre
%{service_add_pre %{name}.service}
%post
%{service_add_post %{name}.service}
%preun
%{service_del_preun %{name}.service}
%postun
%{service_del_postun %{name}.service}
%endif
%changelog