File winboat.spec of Package winboat

%define _build_id_links none
# Disable debug package and debug info generation
%define debug_package %{nil}
%define _enable_debug_packages 0
%define __debug_install_post %{nil}
# FIX: Use the correct absolute path to brp-compress for Tumbleweed
%define __os_install_post /usr/lib/rpm/brp-compress

# Filter out problematic auto-provides and auto-requires
%global __provides_exclude_from ^%{_libdir}/winboat/.*$
%global __requires_exclude ^libffmpeg\\.so.*$
%global __requires_exclude_from ^%{_libdir}/winboat/.*$

Name:           winboat
Version:        0
Release:        0
Summary:        Run Windows apps on Linux with seamless integration
License:        MIT
URL:            https://github.com/TibixDev/winboat
Source0:        https://github.com/TibixDev/winboat/releases/download/v%{version}/winboat-%{version}-x86_64.rpm
BuildRequires:  fdupes
BuildRequires:  hicolor-icon-theme
BuildRequires:  chrpath
BuildRequires:  desktop-file-utils
Requires:       docker
Requires:       freerdp
Requires:       hicolor-icon-theme >= 0.17
Requires:       gtk3
# Remove explicit libnotify requirement - let rpm find it automatically
ExclusiveArch:  x86_64
AutoReqProv:    no

%description
WinBoat is a tool that allows you to run Windows applications on Linux 
without complicated configurations. Through a graphical wizard, it 
automatically completes image pulling, container creation, and RDP 
configuration.

%prep
rpm2cpio %{SOURCE0} | cpio -idmv

%build
# Nothing to build

%install
# Create directories
mkdir -p %{buildroot}%{_libdir}/winboat
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_datadir}/applications
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps

# Copy app files from opt/winboat to /usr/lib64/winboat
cp -a opt/winboat/* %{buildroot}%{_libdir}/winboat/

# Remove development files to reduce badness score
find %{buildroot}%{_libdir}/winboat -type f \( \
    -name "*.c" -o \
    -name "*.cpp" -o \
    -name "*.h" \) -delete

# Remove hidden files and directories
find %{buildroot}%{_libdir}/winboat -type f -name ".*" -delete
find %{buildroot}%{_libdir}/winboat -type d -name ".private" -exec rm -rf {} + 2>/dev/null || true
find %{buildroot}%{_libdir}/winboat -type f -name ".codespellrc" -delete 2>/dev/null || true

# Remove pre-commit scripts with bashisms
find %{buildroot}%{_libdir}/winboat -type f -name "pre-commit.sh" -delete 2>/dev/null || true

# Create binary symlink (relative symlink to avoid rpmlint warning)
ln -sf ../lib64/winboat/winboat %{buildroot}%{_bindir}/winboat

# Install desktop file
cat > %{buildroot}%{_datadir}/applications/winboat.desktop << 'EOF'
[Desktop Entry]
Name=WinBoat
Exec=%{_bindir}/winboat %U
Terminal=false
Type=Application
Icon=winboat
StartupWMClass=WinBoat
Comment=Run Windows apps on Linux with seamless integration
Categories=Utility;
EOF

desktop-file-validate %{buildroot}%{_datadir}/applications/winboat.desktop || true

# Install the icon
cp -a usr/share/icons/hicolor/scalable/apps/winboat.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/

# Fix permissions
chrpath -d %{buildroot}%{_libdir}/winboat/winboat 2>/dev/null || true
chmod 755 %{buildroot}%{_libdir}/winboat/winboat

# Set SUID bit on chrome-sandbox to address setgroups warning
# This is the standard way to handle chrome-sandbox security
chmod 4755 %{buildroot}%{_libdir}/winboat/chrome-sandbox 2>/dev/null || true

# Run fdupes
fdupes -s %{buildroot}

%files
%{_bindir}/winboat
%{_libdir}/winboat/
%{_datadir}/applications/winboat.desktop
%{_datadir}/icons/hicolor/scalable/apps/winboat.svg

%post
/usr/bin/update-desktop-database &> /dev/null || :

%postun
/usr/bin/update-desktop-database &> /dev/null || :

%changelog
* Sun Jan 25 2026 itachi_re <xanbenson99@gmail.com> - 0.9.0-0
- Initial package
- Remove development files (.c, .cpp, .h) to reduce package size
- Remove hidden files and directories
- Fix desktop file Exec path
- Add versioned hicolor-icon-theme requirement
- Remove explicit libnotify requirement
openSUSE Build Service is sponsored by