# 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: 1.0.1 Release: 1%{?dist} Summary: Advanced music player written in D using GTK4 License: MIT URL: https://codeberg.org/Kymorphia/daphne-music Source0: https://codeberg.org/Kymorphia/daphne-music/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 LDC (LLVM-based D Compiler) for better compatibility %if 0%{?fedora} BuildRequires: ldc BuildRequires: dub %endif %if 0%{?rhel} >= 8 BuildRequires: ldc BuildRequires: gcc-c++ %endif %if 0%{?suse_version} BuildRequires: ldc 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) BuildRequires: gcc-c++ # 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-music # 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 # Generate config.d from config.d.in template with correct install prefix sed -e 's|/usr/local|%{_prefix}|g' source/config.d.in > source/config.d # Extract TagLib 2.0.2 source for static linking cd %{_builddir} %setup -q -T -D -a 1 -n daphne-music cd - %build # ==================================================================== # Build TagLib 2.0.2 statically (Fedora only has TagLib 1.x) # ==================================================================== cd %{_builddir}/daphne-music/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-music # 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-music/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-music/taglib-install/%{_lib}:%{_libdir} export CPATH=%{_builddir}/daphne-music/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-music/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_c", "-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" %else export DFLAGS="-O -release" %endif # Fetch dependencies first so we can fix markdown-browser before building dub upgrade # Fix markdown-browser configuration - remove configurations to use default library build # markdown-browser has only a "demo" configuration which builds an executable # We need it to build as a library, so remove the configurations section find %{_builddir}/dub-home/packages/markdown-browser -name dub.json -exec sh -c 'jq "del(.configurations)" "$1" > "$1.tmp" && mv "$1.tmp" "$1"' _ {} \; # Build using dub with standard dependencies from registry %if %{with debug} dub build --compiler ldc2 --build=debug %else dub build --compiler ldc2 --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 * Sun Mar 15 2026 Dejan Lekic - 1.0.1-1 - Small bugfixes * Sun Mar 15 2026 Dejan Lekic - 1.0.0-1 - First stable release * 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