Name: pulseaudio-libs Version: 17.0 Release: 3%{?dist} Summary: PulseAudio client libraries (libpulse), no daemon License: LGPL-2.1-or-later URL: https://www.freedesktop.org/wiki/Software/PulseAudio/ Source0: https://github.com/pulseaudio/pulseaudio/archive/refs/tags/v%{version}/pulseaudio-%{version}.tar.gz BuildRequires: meson BuildRequires: ninja-build BuildRequires: gcc BuildRequires: pkgconfig BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gio-2.0) BuildRequires: libsndfile-devel BuildRequires: pkgconfig(libsystemd) BuildRequires: libX11-devel BuildRequires: libxcb-devel BuildRequires: fftw-devel BuildRequires: libasyncns-devel BuildRequires: gtk3-devel BuildRequires: valgrind-devel %description The genuine libpulse client library from the original PulseAudio project, built with the daemon entirely disabled (-Ddaemon=false -Dclient=true) -- this repo uses PipeWire's pipewire-pulse as the actual audio server (protocol-compatible with PulseAudio's Unix socket protocol), but applications and libraries that link against the real libpulse.so C API (plasma-pa, pulseaudio-qt) still need this genuine client library regardless of what server answers the socket on the other end. Verified against real meson.build/meson_options.txt that the client/daemon split is a clean, well-gated option throughout the build (confirmed via grep that every daemon-only dependency() call -- alsa, bluez5, jack, udev, gstreamer, samplerate, speex, soxr, webrtc-aec, orc, tdb database, x11 session integration via xcb/ice/sm/ xtst -- lives strictly inside `if get_option('daemon')` blocks and is never evaluated with daemon=false); only a handful of deps (dbus/glib/sndfile/libsystemd/x11-xcb/fftw3f, plus libasyncns/gtk+-3.0 under the client branch) are evaluated regardless of the daemon setting, all confirmed available and added here. %package devel Summary: Development files for %{name} Requires: %{name}%{?_isa} = %{version}-%{release} %description devel Headers and pkgconfig files for building against libpulse. %prep %autosetup -n pulseaudio-%{version} -p1 # GitHub's auto-generated tag archive lacks the .tarball-version file # that an official "ninja dist" tarball would include; without it, # git-version-gen falls back to a git-describe attempt (no .git dir # here either) and meson.build's version_split[] indexing crashes. echo '%{version}' > .tarball-version %build %meson \ -D daemon=false \ -D client=true \ -D doxygen=false \ -D man=false \ -D tests=false \ -D gcov=false \ -D x11=enabled \ -D asyncns=enabled \ -D gtk=enabled \ -D dbus=enabled \ -D glib=enabled \ -D systemd=enabled \ -D fftw=enabled %meson_build %install %meson_install %files %license LICENSE GPL LGPL %{_libdir}/libpulse.so.* %{_libdir}/libpulse-simple.so.* %{_libdir}/libpulse-mainloop-glib.so.* %{_libdir}/pulse-%{version}/ %{_bindir}/pacat %{_bindir}/pactl %{_bindir}/pax11publish %{_datadir}/vala/vapi/libpulse*.vapi %{_datadir}/bash-completion/completions/pactl %{_datadir}/zsh/site-functions/_pulseaudio %files devel %{_includedir}/pulse/ %{_libdir}/libpulse.so %{_libdir}/libpulse-simple.so %{_libdir}/libpulse-mainloop-glib.so %{_libdir}/pkgconfig/libpulse.pc %{_libdir}/pkgconfig/libpulse-simple.pc %{_libdir}/pkgconfig/libpulse-mainloop-glib.pc %{_libdir}/cmake/PulseAudio/ %changelog * Sat Aug 29 2026 Smech - 17.0-3 - R2 failed: "C header 'valgrind/memcheck.h' not found" (line 277, cc.has_header(..., required: get_option('valgrind')), an unconditional auto-feature check before the daemon/client split). Added valgrind-devel (confirmed available). Also swept the entire rest of meson.build for every remaining required: get_option(...) check -- everything else (alsa, orc, samplerate, speex, soxr, webrtc-aec, elogind, tcpwrap, avahi, bluez5, jack, lirc, openssl, udev, gstreamer, bluez5-gstreamer) lives strictly inside the `if get_option('daemon')` block and is never evaluated with daemon=false; the one remaining unconditional one (oss-output, sys/soundcard.h) is a standard Linux kernel header already present in any build environment, not a separate devel package. * Sat Aug 29 2026 Smech - 17.0-2 - R1 failed instantly: "meson.build:17:33: ERROR: Index 1 out of bounds of array of size 1." Root cause: meson.build derives its own project version by shelling out to the bundled git-version-gen script against a .tarball-version file that only exists in an official upstream "ninja dist" release tarball -- GitHub's auto-generated tag archive (what Source0 actually is, no plain release tarball exists for this project) has neither that file nor a .git directory for git-describe to fall back to, so git-version-gen returned nothing and the version-string split logic indexed past a 1-element array. Fixed by writing .tarball-version directly in %%prep (verified against git-version-gen's own source: a plain "17.0" line, no "v" prefix needed, is exactly what it expects and echoes straight back). * Sat Aug 29 2026 Smech - 17.0-1 - Real upstream source (GitHub release tarball -- the freedesktop.org gitlab archive for this project doesn't publish plain release tarballs the same way most other packages in this repo have used). Discovered while scoping plasma-pa: it hard-requires real libpulse/libpulse-mainloop-glib via pkg_check_modules(... REQUIRED), which PipeWire's own -Dlibpulse option does NOT provide (that option only gates PipeWire's own code linking against an external libpulse for daemon-to-daemon streaming, not a compat shim). Client-only build verified extensively against real meson.build to confirm the daemon/client split is clean and doesn't drag in the full PulseAudio server stack (ALSA/Bluetooth/JACK/GStreamer backends, database, X11 session management) that PipeWire already replaces. %%files is a first-pass estimate based on reading src/pulse/meson.build and src/utils/meson.build directly; expect a real-error iteration round given the scale of untested guesswork here, same as every other new package this session.