### REF: https://rustdesk.com/docs/en/dev/build/linux/ Name: rustdesk Version: 1.4.0 Release: 1%{?dist} Summary: Remote desktop software for control and file transfer License: GPL-3.0-only URL: https://github.com/rustdesk/rustdesk Source0: %{url}/archive/refs/tags/%{version}.tar.gz BuildRequires: gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang BuildRequires: libxcb-devel libxdo-devel libXfixes-devel pulseaudio-libs-devel BuildRequires: cmake alsa-lib-devel openssl-devel pkgconfig rust cargo BuildRequires: gstreamer1-devel gstreamer1-plugins-base-devel libvpx-devel BuildRequires: rust cargo gcc-c++ pkgconfig libvpx-devel pam-devel BuildRequires: opus-devel libyuv-devel ExclusiveArch: x86_64 %description RuskDesk is a remote desktop software that allows you to access and control computers remotely. %prep # Clone the main repo with submodules git clone --recurse-submodules https://github.com/rustdesk/rustdesk.git rustdesk cd rustdesk git submodule update --init --recursive # Download libsciter mkdir -p target/debug wget -O target/debug/libsciter-gtk.so https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so # Add patch directives to Cargo.toml for webm-sys and magnum-opus cat >> Cargo.toml < .cargo/config.toml < in mkvparser.cc MKVPARSER=vendor/webm-sys/libwebm/mkvparser/mkvparser.cc if grep -q 'common/webmids.h' "$MKVPARSER"; then echo "🔧 Patching mkvparser.cc to include " sed -i '/common\/webmids\.h/a #include ' "$MKVPARSER" else echo "❌ Could not patch mkvparser.cc - include line not found" exit 1 fi # Patch magnum-opus to use pkg-config instead of VCPKG/HOMEBREW MAGNUM_RS=vendor/magnum-opus/build.rs if [ -f "$MAGNUM_RS" ]; then echo "⚙️ Patching $MAGNUM_RS to use pkg-config" sed -i 's/^\s*panic!.*VCPKG_ROOT.*/pkg_config::probe_library("opus").unwrap();/' "$MAGNUM_RS" else echo "❌ $MAGNUM_RS not found" exit 1 fi # Move source tree to top-level for RPM cd .. cp -a rustdesk/. ./ rm -rf rustdesk %build export CXXFLAGS="%{optflags} -fexceptions -frtti" export RUSTFLAGS="-C link-arg=-Wl,-rpath=%{_libdir}" export PKG_CONFIG_PATH="%{_libdir}/pkgconfig" export PKG_CONFIG_ALLOW_CROSS=1 # Build with vendored sources and patched webm-sys cargo build --release --offline %install install -Dm755 target/release/rustdesk %{buildroot}%{_bindir}/rustdesk # Icon mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps mkdir -p %{buildroot}%{_datadir}/icons/hicolor/512x512/apps cp -v images/rustdesk.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/%{name}.svg cp -v images/rustdesk.png %{buildroot}%{_datadir}/icons/hicolor/512x512/apps/%{name}.png # Optional systemd service (if provided) if [ -f files/rustdesk.service ]; then mkdir -p %{buildroot}%{_unitdir} cp -v files/rustdesk.service %{buildroot}%{_unitdir}/ fi %files %{_bindir}/rustdesk %{_datadir}/applications/rustdesk.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.* %{_unitdir}/rustdesk.service %changelog %autochangelog