# Build options - use --with debug to build debug version %bcond_with debug # Only disable debug package for release builds %if %{without debug} %global debug_package %{nil} %endif Name: daphne-music Version: 0.9.5 Release: 1%{?dist} Summary: Advanced music player written in D using GTK4 License: MIT URL: https://codeberg.org/Kymorphia/daphne Source0: https://codeberg.org/Kymorphia/daphne/archive/v%{version}.tar.gz#/daphne-music-%{version}.tar.gz # TagLib 2.0.2 source - we build it statically since Fedora only has TagLib 1.x Source1: https://github.com/taglib/taglib/releases/download/v2.0.2/taglib-2.0.2.tar.gz # D Compiler - prefer GDC (part of GCC) for better distribution availability %if 0%{?fedora} BuildRequires: gcc-gdc BuildRequires: dub %endif %if 0%{?rhel} >= 9 BuildRequires: gcc-toolset-13-gcc-gdc BuildRequires: gcc-toolset-13-gcc-c++ %global rhel_gcc_toolset 1 %endif %if 0%{?rhel} == 8 BuildRequires: gcc-toolset-12-gcc-gdc BuildRequires: gcc-toolset-12-gcc-c++ %global rhel_gcc_toolset 1 %endif %if 0%{?suse_version} BuildRequires: gcc-d BuildRequires: dub %endif # Common build dependencies BuildRequires: cmake BuildRequires: jq BuildRequires: make BuildRequires: zlib-devel # Note: We build TagLib 2.0.2 from Source1 instead of using system taglib # BuildRequires: pkgconfig(taglib) %if !0%{?rhel_gcc_toolset} BuildRequires: gcc-c++ %endif # SQLite development library (different names across distros) %if 0%{?suse_version} BuildRequires: sqlite3-devel BuildRequires: utfcpp-devel %else BuildRequires: sqlite-devel BuildRequires: utf8cpp-devel %endif # Runtime dependencies - GTK4 %if 0%{?suse_version} Requires: libgtk-4-1 %else Requires: gtk4 %endif # Runtime dependencies - GStreamer %if 0%{?suse_version} Requires: gstreamer Requires: gstreamer-plugins-base Requires: gstreamer-plugins-good Recommends: gstreamer-plugins-bad Recommends: gstreamer-plugins-ugly %else Requires: gstreamer1 Requires: gstreamer1-plugins-base Requires: gstreamer1-plugins-good Recommends: gstreamer1-plugins-bad-free Recommends: gstreamer1-plugins-ugly-free %endif # Runtime dependencies - SQLite %if 0%{?suse_version} Requires: libsqlite3-0 %else Requires: sqlite-libs %endif # Runtime dependencies - taglib # Note: Not needed since we link statically against our built TagLib 2.0.2 # %if 0%{?suse_version} # Requires: libtag1 # %else # Requires: taglib # %endif %description Daphne Music Player is an advanced audio player written in D using the GTK4 graphics toolkit and giD GObject Introspection bindings. DAPHNE stands for D Audio Player Helping Navigate the Elements. Features: - Intuitive interface organized into artists, albums, and songs - Play queue for straightforward playlist manipulation - History to keep track of played songs - Spectrum visualizer with modifiable colors - Music library management %prep %setup -q -n daphne # Remove dub selections file to use registry dependencies instead of local paths rm -f dub.selections.json # Remove the local-deps configuration from dub.json using jq (more reliable than sed) jq 'del(.configurations)' dub.json > dub.json.tmp && mv dub.json.tmp dub.json # Extract TagLib 2.0.2 source for static linking cd %{_builddir} %setup -q -T -D -a 1 -n daphne cd - %build # Enable GCC toolset on RHEL if needed %if 0%{?rhel_gcc_toolset} %if 0%{?rhel} >= 9 source /opt/rh/gcc-toolset-13/enable %else source /opt/rh/gcc-toolset-12/enable %endif %endif # ==================================================================== # Build TagLib 2.0.2 statically (Fedora only has TagLib 1.x) # ==================================================================== cd %{_builddir}/daphne/taglib-2.0.2 mkdir -p build-taglib cd build-taglib # Disable LTO for TagLib - it causes linking issues with D code # Also explicitly set C/CXX flags to avoid inheriting Fedora's -flto flags cmake .. \ -DCMAKE_INSTALL_PREFIX=%{_builddir}/daphne/taglib-install \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_TESTING=OFF \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_FLAGS="-O2 -fPIC" \ -DCMAKE_CXX_FLAGS="-O2 -fPIC" \ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF make %{?_smp_mflags} make install cd %{_builddir}/daphne # Set environment to use our built TagLib 2.0.2 # Put our path FIRST so linker finds our version before system version export PKG_CONFIG_PATH=%{_builddir}/daphne/taglib-install/%{_lib}/pkgconfig:$PKG_CONFIG_PATH # Note: Do NOT include /usr/local in LIBRARY_PATH - it may have conflicting TagLib versions export LIBRARY_PATH=%{_builddir}/daphne/taglib-install/%{_lib}:%{_libdir} export CPATH=%{_builddir}/daphne/taglib-install/include:$CPATH # ==================================================================== # Build Daphne Music Player # ==================================================================== # Set dub cache paths to prevent permission errors during build export DUB_CACHE_PATH=%{_builddir}/dub-cache export DUB_HOME=%{_builddir}/dub-home # GDC-compatible flags with static linking for TagLib # Note: TagLib is C++, so we need to link libstdc++ to resolve C++ symbols # The taglib-d package adds -ltag_c automatically via dub, but it comes before # our flags. We add lflags to dub.json to ensure -ltag and -lstdc++ come after. TAGLIB_LIB=%{_builddir}/daphne/taglib-install/%{_lib} # Add lflags to dub.json for static TagLib linking with the correct path # This ensures -ltag and -lstdc++ come after -ltag_c in the link command # For GDC, dub passes lflags with -Xlinker prefix automatically jq --arg libpath "${TAGLIB_LIB}" '. + {"lflags": ["-L" + $libpath, "-ltag", "-lstdc++", "-lz"]}' dub.json > dub.json.tmp && mv dub.json.tmp dub.json # Set library paths for the linker to find our static TagLib export LIBRARY_PATH=${TAGLIB_LIB}:${LIBRARY_PATH} export LD_LIBRARY_PATH=${TAGLIB_LIB}:${LD_LIBRARY_PATH} %if %{with debug} export DFLAGS="-g -fdebug" %else export DFLAGS="-O2 -frelease" %endif # Build using dub with standard dependencies from registry %if %{with debug} dub build --compiler gdc --build=debug %else dub build --compiler gdc --build=release %endif %install install -D -m 755 daphne-music %{buildroot}%{_bindir}/daphne-music install -D -m 644 com.kymorphia.Daphne.desktop %{buildroot}%{_datadir}/applications/com.kymorphia.Daphne.desktop install -D -m 644 images/daphne-icon.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/com.kymorphia.Daphne.svg install -D -m 644 com.kymorphia.Daphne.metainfo.xml %{buildroot}%{_datadir}/metainfo/com.kymorphia.Daphne.metainfo.xml %check # Validate desktop file %if 0%{?fedora} || 0%{?rhel} >= 8 desktop-file-validate %{buildroot}%{_datadir}/applications/com.kymorphia.Daphne.desktop || : %endif %files %license LICENSE %doc README.md %{_bindir}/daphne-music %{_datadir}/applications/com.kymorphia.Daphne.desktop %{_datadir}/icons/hicolor/scalable/apps/com.kymorphia.Daphne.svg %{_datadir}/metainfo/com.kymorphia.Daphne.metainfo.xml %changelog * Sat Feb 21 2026 Dejan Lekic - 0.9.5-1 - Build and statically link TagLib 2.0.2 (Fedora lacks TagLib v2) - Fix static linking of C++ dependencies for TagLib - Use jq for reliable dub.json modification during build * Fri Feb 20 2026 Dejan Lekic - 0.9.4-1 - Initial RPM package - Use GDC (GNU D Compiler) for better distribution compatibility - Use standard dub dependencies from registry