Files
RedBear-OS/local/recipes/libs/wireplumber/recipe.toml
T
vasilito 796c7ee85a wireplumber: remove redundant byteswap.h and sys/mman.h shims
relibc now provides the real <byteswap.h> header and Linux mmap
extension flags (MAP_LOCKED, MAP_HUGETLB, etc.) in <sys/mman.h>.
Drop the redox_compat/ shim files from the WirePlumber patch, update
README-redbear.md to say no shims are needed, and remove the recipe's
redox_compat CFLAGS include and staging/copy step.
2026-07-10 16:16:53 +03:00

123 lines
6.4 KiB
TOML

# WirePlumber — PipeWire session/policy manager (Red Bear OS).
#
# This recipe pulls upstream freedesktop WirePlumber 0.4.14
# (https://gitlab.freedesktop.org/pipewire/wireplumber) at the pinned
# tag, then applies Red Bear OS external patches from
# local/patches/wireplumber/ on top of the upstream tree.
#
# Per local/AGENTS.md Rule 2 (NO OVERLAY-STYLE PATCHES — AMENDED 2026),
# wireplumber is a big external project. Red Bear does NOT maintain a
# source fork of wireplumber — external patches in
# local/patches/wireplumber/ keep us close to upstream, give a clean
# audit trail (one mbox-style patch per Red Bear change), and make
# upstream syncs a `rev = "..."` bump + patch rebase instead of a
# full rebase of a Red Bear fork.
#
# All Red Bear-specific wireplumber changes (README-redbear.md port
# status) live as patches under local/patches/wireplumber/. To add a new wireplumber
# change:
# 1. make the change in the fetched tree
# 2. `git diff > local/patches/wireplumber/NN-short-description.patch`
# 3. add a `git apply` line in [build].script in apply order
# 4. commit the patch in the main repo
#
# WirePlumber is a Lua-based session and policy manager that runs on
# top of PipeWire; it owns the policy decisions about which audio
# stream connects to which sink/source, applies per-client volume
# and routing rules, and exposes a D-Bus API to the desktop session
# (org.freedesktop.PipeWire.Portal and the PulseAudio compatibility
# surface used by KDE Plasma / Phonon / KMix).
#
# Red Bear OS uses WirePlumber as the PipeWire session manager so
# that KDE Plasma and the Plasma audio applets can talk to a real,
# configurable PipeWire stack rather than the upstream "no-session"
# fallback.
#
# On Redox, WirePlumber talks to:
# * libpipewire-0.3 (this recipe's sibling, local/recipes/libs/pipewire)
# * libspa-0.2 (shipped with the pipewire recipe)
# * glib-2.0 (already a Red Bear dependency)
# * D-Bus (for activation and for KDE's org.pulseaudio.Server)
# The build disables the optional systemd / elogind integration paths
# since Redox uses init.d, and disables the optional PulseAudio
# helper that is only relevant on systems that still ship a
# PulseAudio daemon (Red Bear does not — pipewire-pulse replaces it).
#
# Known gaps (intentional TODOs in the source fork, documented in
# the patch's README-redbear.md):
# * systemd / elogind integration — Redox uses init.d
# * wireplumber.options Lua config — needs to be staged by the
# recipe's [[files]] entry; not committed to the patch
# * LuaJIT is preferred over the system Lua when both are available;
# Red Bear currently ships neither and depends on the bundled Lua
# subproject (downloaded via meson wrap on first build; we plan
# to vendor it once the wrap cache is committed)
#
# What IS built (this recipe's purpose):
# * libwireplumber-0.4.so — the C client library
# * wireplumber — the session manager daemon
# * wpctl — the command-line control utility
# * SPA modules — the Lua-loaded policy modules
[source]
git = "https://gitlab.freedesktop.org/pipewire/wireplumber.git"
upstream = "https://gitlab.freedesktop.org/pipewire/wireplumber"
rev = "0.4.14"
[build]
template = "custom"
dependencies = [
"glib",
"dbus",
"expat",
"pipewire",
]
script = """
DYNAMIC_INIT
# Red Bear OS external patches — apply on top of the upstream wireplumber tree.
# These patches live in local/patches/wireplumber/ and survive `make clean` and
# upstream syncs. Add new patches at the end of the chain in numbered
# order (e.g. 02-foo.patch, 03-bar.patch) so `ls -1` apply order matches
# patch numbering.
# Apply Red Bear OS external patches (per local/AGENTS.md Rule 2).
# cookbook_apply_patches handles the "already applied" check, the
# `cd "${COOKBOOK_SOURCE}"` dance, and the "return to build dir"
# so this stays a single line. Recipe is at local/recipes/libs/wireplumber/
# (depth 3), so 4 dots reach the project root, then /local/patches/wireplumber
# is appended.
REDBEAR_PATCHES_DIR="${REDBEAR_PATCHES_DIR:-$(cd "$(dirname "${COOKBOOK_RECIPE}")/../../../.." && pwd)}/local/patches/wireplumber"
cookbook_apply_patches "${REDBEAR_PATCHES_DIR}"
export PKG_CONFIG="${COOKBOOK_PKG_CONFIG:-x86_64-unknown-redox-pkg-config}"
export PKG_CONFIG_SYSROOT_DIR="${COOKBOOK_SYSROOT}"
export PKG_CONFIG_LIBDIR="${COOKBOOK_SYSROOT}/usr/lib/pkgconfig:${COOKBOOK_SYSROOT}/share/pkgconfig"
export CC="x86_64-unknown-redox-gcc"
export CXX="x86_64-unknown-redox-g++"
export AR="x86_64-unknown-redox-ar"
export STRIP="x86_64-unknown-redox-strip"
export RANLIB="x86_64-unknown-redox-ranlib"
export CFLAGS="-I${COOKBOOK_SYSROOT}/usr/include --sysroot=${COOKBOOK_SYSROOT} -Wno-error=format-overflow -Wno-error=stringop-truncation -Wno-error=array-bounds -Wno-error=use-after-free -Wno-error=array-parameter -Wno-error=cast-function-type -Wno-error=deprecated-declarations -Wno-error=stringop-overread -Wno-error=dangling-pointer -Wno-error=uninitialized -Wno-error=maybe-uninitialized -Wno-error=incompatible-pointer-types"
export LDFLAGS="--sysroot=${COOKBOOK_SYSROOT}"
# Disable the Linux-specific optional integrations. Keep the core
# session manager, the C library, and the command-line tools.
cookbook_meson \\
-Ddocs=disabled \\
-Dtests=disabled \\
-Dsystemd=disabled \\
-Delogind=disabled \\
-Dsystemd-system-service=false \\
-Dsystemd-user-service=false \\
-Dintrospection=disabled \\
-Dtools=enabled \\
-Ddaemon=enabled \\
-Dmodules=true \\
-Ddbus-tests=false \\
-Dsystem-lua=false
"""
[package]
version = "0.4.14"
description = "WirePlumber 0.4.14 — PipeWire session and policy manager (v6.0 2026 Red Bear). Provides libwireplumber-0.4.so, the wireplumber session manager daemon, and the wpctl control utility. Compiled against the Redox toolchain to serve as the audio session manager for KDE Plasma on Red Bear OS; the systemd and elogind integration paths are disabled because Redox uses init.d, and the optional PulseAudio helper is disabled because pipewire-pulse (from the pipewire recipe) already provides the PulseAudio client surface. Per local/AGENTS.md Rule 2, all Red Bear-specific edits to upstream wireplumber live as external patches in local/patches/wireplumber/ (currently: 01 — Red Bear port README). The previous source fork at local/sources/wireplumber/ is preserved as historical reference but is no longer used by the build system."