%global debug_package %{nil}
%global __strip /bin/true
%global __brp_strip %{nil}
%global __brp_strip_comment_note %{nil}
%global __brp_strip_lto %{nil}
%global __brp_strip_static_archive %{nil}
%global __brp_mangle_shebangs %{nil}
%define _build_id_links none
# check-rpaths ve brp kontrollerini atla
%global __os_install_post %{nil}
%global __spec_install_post /usr/lib/rpm/check-buildroot
# Dahili kütüphanelerin sistem bağımlılıklarına sızmasını engelle
%global __provides_exclude_from ^/opt/tauon/.*$
%global __requires_exclude_from ^/opt/tauon/.*$
Name: tauon
Version: 12.1.0
Release: 1%{?dist}
Summary: A powerful and streamlined music player for the desktop
License: GPL-3.0-or-later
URL: https://github.com/Taiko2k/Tauon
Source0: TauonMusicBox-linux.7z
Source1: TauonMusicBox-linux-arm64.7z
Source2: com.Taiko2k.Tauon.metainfo.xml
ExclusiveArch: x86_64 aarch64
BuildRequires: 7zip
BuildRequires: desktop-file-utils
BuildRequires: libappstream-glib
# İzolasyon ve taşınabilir veri dizini yönlendirmesi için gerekli sistem paketleri
Requires: bubblewrap
Requires: hicolor-icon-theme
Requires: xdg-utils
Requires: xdg-user-dirs
Provides: Tauon = %{version}-%{release}
Provides: TauonMusicBox = %{version}-%{release}
%description
Tauon Music Box is an unofficial repackaging of upstream portable Linux releases.
A powerful and streamlined music player for the desktop featuring gapless playback,
tracker audio support, Jellyfin/Plex streaming, and inline visualization tools.
%prep
%setup -q -c -T
%ifarch x86_64
7z x -snld %{SOURCE0} || :
%endif
%ifarch aarch64
7z x -snld %{SOURCE1} || :
%endif
# Arşiv tek bir alt klasöre açıldıysa kök dizine taşı
if [ $(ls -1A | wc -l) -eq 1 ] && [ -d * ]; then
SUBDIR=$(ls -1A)
mv "$SUBDIR"/* . 2>/dev/null || true
mv "$SUBDIR"/.* . 2>/dev/null || true
rmdir "$SUBDIR" 2>/dev/null || true
fi
%build
# Portable binary; derleme gerekmez.
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/opt/tauon
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_datadir}/applications
mkdir -p %{buildroot}%{_datadir}/metainfo
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/256x256/apps
# Dosyaları /opt/tauon altına taşı
cp -a ./* %{buildroot}/opt/tauon/
# Portable user-data mount noktasını oluştur
mkdir -p %{buildroot}/opt/tauon/_internal/user-data
# Ana ikili dosyaya izin ver
if [ -f "%{buildroot}/opt/tauon/Tauon Music Box" ]; then
chmod +x "%{buildroot}/opt/tauon/Tauon Music Box"
fi
# /usr/bin/tauon wrapper: bubblewrap ile kullanıcı verisini ~/.local/share/ altına yönlendirir
cat << 'EOF' > %{buildroot}%{_bindir}/tauon
#!/bin/sh
USER_DATA_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/TauonMusicBox/user-data"
mkdir -p "$USER_DATA_DIR"
if command -v bwrap >/dev/null 2>&1 && [ -d "/opt/tauon/_internal/user-data" ]; then
exec bwrap \
--dev-bind / / \
--bind "$USER_DATA_DIR" "/opt/tauon/_internal/user-data" \
"/opt/tauon/Tauon Music Box" "$@"
else
exec "/opt/tauon/Tauon Music Box" "$@"
fi
EOF
chmod 755 %{buildroot}%{_bindir}/tauon
# Desktop dosyası kurulumu (Dinamik Arama veya Sıfırdan Oluşturma)
DESKTOP_SRC=""
if [ -f "extra/tauon.desktop" ]; then
DESKTOP_SRC="extra/tauon.desktop"
elif [ -f "%{name}.desktop" ]; then
DESKTOP_SRC="%{name}.desktop"
elif [ -f "_internal/share/applications/tauon.desktop" ]; then
DESKTOP_SRC="_internal/share/applications/tauon.desktop"
fi
if [ -n "$DESKTOP_SRC" ]; then
install -m 0644 "$DESKTOP_SRC" %{buildroot}%{_datadir}/applications/%{name}.desktop
sed -i 's|^Exec=.*|Exec=/usr/bin/tauon %U|' %{buildroot}%{_datadir}/applications/%{name}.desktop
sed -i 's|^Icon=.*|Icon=tauon|' %{buildroot}%{_datadir}/applications/%{name}.desktop
else
cat << 'EOF' > %{buildroot}%{_datadir}/applications/%{name}.desktop
[Desktop Entry]
Name=Tauon Music Box
GenericName=Music Player
Comment=A powerful and streamlined music player for the desktop
Exec=/usr/bin/tauon %U
Icon=tauon
Type=Application
StartupNotify=true
StartupWMClass=tauon
Terminal=false
Categories=AudioVideo;Audio;Player;
MimeType=audio/flac;audio/mp3;audio/ogg;audio/wav;audio/x-matroska;audio/m4a;audio/aac;audio/opus;
EOF
fi
# Metainfo kurulumu
install -Dm 644 %{SOURCE2} %{buildroot}%{_datadir}/metainfo/com.Taiko2k.Tauon.metainfo.xml
# Simgeleri hicolor dizinlerine yerleştir
find %{buildroot}/opt/tauon -iname "*tauon*.svg" -exec cp -f {} %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/tauon.svg \; 2>/dev/null || true
find %{buildroot}/opt/tauon -iname "*tauon*.png" -exec cp -f {} %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/tauon.png \; 2>/dev/null || true
if [ ! -f "%{buildroot}%{_datadir}/icons/hicolor/scalable/apps/tauon.svg" ] && [ ! -f "%{buildroot}%{_datadir}/icons/hicolor/256x256/apps/tauon.png" ]; then
cat << 'EOF' > %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/tauon.svg
EOF
fi
find %{buildroot}%{_datadir}/icons/hicolor -type d -empty -delete 2>/dev/null || true
%check
desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop
appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/com.Taiko2k.Tauon.metainfo.xml || true
%files
/opt/tauon
%{_bindir}/tauon
%{_datadir}/applications/%{name}.desktop
%{_datadir}/metainfo/com.Taiko2k.Tauon.metainfo.xml
%{_datadir}/icons/hicolor/*/*/*
%changelog
* Mon Oct 05 2026 Saffet Yavuz : universish - %{version}-1
- Fully self-contained build: isolate internal libs, bypass check-rpaths, and wrap portable user-data with bubblewrap.