soundtouch-pipewire-control

LOW
maintainer Mr.Tao 0 votes base soundtouch-pipewire scanned 2026-08-31 11:45:21.822654
View on AUR
Why flagged

Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.

Triggered rules

Low Few votes, recently uploaded zero_votes_recent

Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.

PKGBUILD

1# Maintainer: Lukáš Lipinský <6032558+Mr-Tao@users.noreply.github.com>
2
3pkgbase=soundtouch-pipewire
4pkgname=(
5 'soundtouch-pipewire'
6 'soundtouch-pipewire-control'
7)
8pkgver=0.1.0
9pkgrel=64
10arch=('x86_64')
11url='https://github.com/Mr-Tao/soundtouch-pipewire'
12license=('MIT AND Unicode-3.0 AND LicenseRef-STPW-SoundTouch-Supplement-1')
13_pipewire_ver=1.6.8
14_pipewire_pkgver=1:1.6.8
15_release_state='READY'
16
17_daemon_depends=(
18 'avahi'
19 'glib2'
20 'glibc'
21 'json-glib'
22 'libgcc'
23 "libpipewire=${_pipewire_pkgver}"
24 'libsoup3'
25 'libxml2'
26 'openssl'
27 'opus'
28 "pipewire=${_pipewire_pkgver}"
29 "pipewire-audio=${_pipewire_pkgver}"
30 'systemd'
31 'wireplumber>=0.5.15'
32)
33makedepends=(
34 'avahi'
35 'gettext'
36 'glib2'
37 'glib2-devel'
38 'gtk4'
39 'json-glib'
40 "libpipewire=${_pipewire_pkgver}"
41 'libsoup3'
42 'libxml2'
43 'meson'
44 'ninja'
45 'openssl'
46 'opus'
47 'patchelf'
48 "pipewire=${_pipewire_pkgver}"
49 "pipewire-audio=${_pipewire_pkgver}"
50 'pkgconf'
51 'rust'
52)
53checkdepends=(
54 'appstream'
55 'desktop-file-utils'
56 'libpulse'
57 "pipewire-pulse=${_pipewire_pkgver}"
58 'wireplumber>=0.5.15'
59)
60provides=()
61conflicts=()
62replaces=()
63
64source=(
65 "${pkgbase}-${pkgver}.tar.gz::https://github.com/Mr-Tao/${pkgbase}/releases/download/v${pkgver}/${pkgbase}-${pkgver}.tar.gz"
66 "pipewire-${_pipewire_ver}.tar.gz::https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/${_pipewire_ver}/pipewire-${_pipewire_ver}.tar.gz"
67 '0001-pipewire-raop-free-pending-messages.patch'
68 '0002-pipewire-raop-safe-volume.patch'
69 '0003-pipewire-raop-dacp-control.patch'
70 '0004-pipewire-raop-safety-gate.patch'
71 '0005-pipewire-soundtouch-zone-sink.patch'
72 '0006-pipewire-raop-ownership-marker.patch'
73 '0007-pipewire-raop-explicit-demand.patch'
74 '0008-pipewire-raop-publish-marker-after-progress.patch'
75 '0009-pipewire-raop-route-revision.patch'
76 '0010-pipewire-raop-activation-reconnect.patch'
77 '0011-pipewire-raop-contract2-props-normalizer.patch'
78 'soundtouch-pipewire.service'
79 'soundtouch-pipewire.conf.example'
80)
81sha256sums=('e83114cce8cf3289b20697b57282440f9cac24e09a460c034eee8765aa884289'
82 '8181172a1d95131f6af8bbc0b98f90b2a33349b042b84c3ce57dd5d11348cc58'
83 '4dd5fbf8ae0853866a9c88c8c86ae96b53347c998c9aa564bd92051cc3227120'
84 '484fad982e6e8ae850cf69d19868739933d2662c51fd213b8552f2698d932c18'
85 '47caca252ee62eda9e1c46481067c61bacb4c781f1d9ea45c77bcb288e2d6d2a'
86 '834765be0f637e9124a88061d61d5be668f121093285e02a97c5667312a483a1'
87 'd345f1457b46faed669436420e5265957112ca70b2f2549a1210cf47b3f95124'
88 'debdabf30d010a53d571aae1678431687deb46bba88ca392f78224c12738788f'
89 'b51040735ecb6d7405b08a6a275b2e0ce0c36b71bbb26bc1715da006e5c1e77d'
90 '23d97eb02cd2513c5bf1c531430b15ef65d211316e8d334433a80cc623fb541f'
91 'f6b4ed98f42fa648f6dbf4c80985c9dd5f6c838872b4b892341ffb58e0dc1694'
92 'b5187b549e9bd810a98597f4c7d958fbb1d0076206bb3fc6dbcd2ccd34065329'
93 '2fdd34736c103df49483fe00de7b75f14e312d58d4f159fb60e4c3a0a18a63ac'
94 '0de0d89452bae790bd5f000d5bea5355ae84b17ab314f9465dcc4cc079a61307'
95 '6a66f908199e8d9993e16d4a61e34600f1c3859b62cc34fcfbe318cead8585a7')
96
97_assert_release_gate() {
98 if [[ $_release_state == 'READY' ]]; then
99 return 0
100 fi
101
102 if [[ ${SOUNDTOUCH_PIPEWIRE_ALLOW_DRAFT_BUILD:-0} == 1 ]]; then
103 printf 'warning: building a local release candidate (%s)\n' \
104 "${_release_state}" >&2
105 return 0
106 fi
107
108 printf 'error: public build blocked: %s\n' "${_release_state}" >&2
109 printf '%s\n' \
110 'error: for a local candidate build, set SOUNDTOUCH_PIPEWIRE_ALLOW_DRAFT_BUILD=1' \
111 >&2
112 return 1
113}
114
115_assert_pipewire_abi() {
116 local installed_version
117
118 installed_version=$(pkg-config --modversion libpipewire-0.3) || {
119 printf 'error: cannot determine the installed libpipewire version\n' >&2
120 return 1
121 }
122 if [[ ${installed_version} != "${_pipewire_ver}" ]]; then
123 printf 'error: private PipeWire module source is %s, but installed libpipewire is %s\n' \
124 "${_pipewire_ver}" "${installed_version}" >&2
125 printf 'error: rebuild and revalidate the private modules for the new PipeWire version\n' >&2
126 return 1
127 fi
128}
129
130prepare() {
131 _assert_release_gate
132
133 patch --no-backup-if-mismatch -d "pipewire-${_pipewire_ver}" -Np1 \
134 < "${srcdir}/0001-pipewire-raop-free-pending-messages.patch"
135 patch --no-backup-if-mismatch -d "pipewire-${_pipewire_ver}" -Np1 \
136 < "${srcdir}/0002-pipewire-raop-safe-volume.patch"
137 patch --no-backup-if-mismatch -d "pipewire-${_pipewire_ver}" -Np1 \
138 < "${srcdir}/0003-pipewire-raop-dacp-control.patch"
139 patch --no-backup-if-mismatch -d "pipewire-${_pipewire_ver}" -Np1 \
140 < "${srcdir}/0004-pipewire-raop-safety-gate.patch"
141 patch --no-backup-if-mismatch -d "pipewire-${_pipewire_ver}" -Np1 \
142 < "${srcdir}/0005-pipewire-soundtouch-zone-sink.patch"
143 patch --no-backup-if-mismatch -d "pipewire-${_pipewire_ver}" -Np1 \
144 < "${srcdir}/0006-pipewire-raop-ownership-marker.patch"
145 patch --no-backup-if-mismatch -d "pipewire-${_pipewire_ver}" -Np1 \
146 < "${srcdir}/0007-pipewire-raop-explicit-demand.patch"
147 patch --no-backup-if-mismatch -d "pipewire-${_pipewire_ver}" -Np1 \
148 < "${srcdir}/0008-pipewire-raop-publish-marker-after-progress.patch"
149 patch --no-backup-if-mismatch -d "pipewire-${_pipewire_ver}" -Np1 \
150 < "${srcdir}/0009-pipewire-raop-route-revision.patch"
151 patch --no-backup-if-mismatch -d "pipewire-${_pipewire_ver}" -Np1 \
152 < "${srcdir}/0010-pipewire-raop-activation-reconnect.patch"
153 patch --no-backup-if-mismatch -d "pipewire-${_pipewire_ver}" -Np1 \
154 < "${srcdir}/0011-pipewire-raop-contract2-props-normalizer.patch"
155
156 cargo fetch --locked \
157 --target "${CARCH}-unknown-linux-gnu" \
158 --manifest-path "${srcdir}/${pkgbase}-${pkgver}/control/Cargo.toml"
159}
160
161build() {
162 _assert_release_gate
163 _assert_pipewire_abi
164 export CARGO_NET_OFFLINE=true
165 export CARGO_PROFILE_RELEASE_DEBUG=2
166
167 arch-meson "${pkgbase}-${pkgver}" build-companion \
168 -Dcontrol_app=enabled \
169 -Dprivate_module_test_path="${srcdir}/build-pipewire/src/modules/libpipewire-module-raop-sink.so" \
170 -Dservice_unit_test_path="${srcdir}/soundtouch-pipewire.service"
171 meson compile -C build-companion
172
173 meson setup \
174 --prefix=/usr \
175 --libdir=lib \
176 --libexecdir=lib \
177 --sbindir=bin \
178 --buildtype=plain \
179 --auto-features=disabled \
180 --wrap-mode=nodownload \
181 -Db_pie=true \
182 -Ddocs=disabled \
183 -Dman=disabled \
184 -Dexamples=disabled \
185 -Dtests=enabled \
186 -Dinstalled_tests=disabled \
187 '-Dsession-managers=[]' \
188 -Davahi=enabled \
189 -Draop=enabled \
190 -Dopus=enabled \
191 -Dsystemd-system-service=disabled \
192 -Dsystemd-user-service=disabled \
193 "pipewire-${_pipewire_ver}" build-pipewire
194 meson compile -C build-pipewire \
195 pipewire-module-raop-sink \
196 pipewire-module-soundtouch-zone-sink \
197 pw-test-raop-dacp \
198 pw-test-raop-demand \
199 pw-test-raop-reconnect \
200 pw-test-raop-safety-gate \
201 pw-test-raop-source-marker \
202 pw-test-raop-volume \
203 pw-test-soundtouch-zone-volume
204}
205
206check() {
207 export CARGO_NET_OFFLINE=true
208 local clean_meson_test="${srcdir}/${pkgbase}-${pkgver}/tools/run-meson-tests-clean-env.sh"
209
210 "${clean_meson_test}" build-companion
211 "${clean_meson_test}" build-pipewire \
212 pw-test-raop-dacp \
213 pw-test-raop-demand \
214 pw-test-raop-reconnect \
215 pw-test-raop-safety-gate \
216 pw-test-raop-source-marker \
217 pw-test-raop-volume \
218 pw-test-soundtouch-zone-volume
219
220 export CARGO_TARGET_DIR="${srcdir}/build-companion/control/cargo-target"
221 export SOUNDTOUCH_PIPEWIRE_LOCALEDIR='/usr/share/locale'
222 cargo test --frozen \
223 --manifest-path "${srcdir}/${pkgbase}-${pkgver}/control/Cargo.toml"
224 cargo fmt --all \
225 --manifest-path "${srcdir}/${pkgbase}-${pkgver}/control/Cargo.toml" \
226 -- --check
227 cargo clippy --frozen --all-targets \
228 --manifest-path "${srcdir}/${pkgbase}-${pkgver}/control/Cargo.toml" \
229 -- -D warnings
230
231 desktop-file-validate \
232 build-companion/control/io.github.Mr_Tao.SoundTouchPipeWire.Control.desktop
233 appstreamcli validate --no-net \
234 build-companion/control/io.github.Mr_Tao.SoundTouchPipeWire.Control.metainfo.xml
235}
236
237package_soundtouch-pipewire() {
238 pkgdesc='Direct SoundTouch hardware-volume outputs for PipeWire'
239 license=('MIT AND LicenseRef-STPW-SoundTouch-Supplement-1')
240 install='soundtouch-pipewire.install'
241 depends=("${_daemon_depends[@]}")
242 optdepends=(
243 'soundtouch-pipewire-control: frozen v1 GTK controller (not used by service-v2)'
244 )
245
246 _assert_release_gate
247 _assert_pipewire_abi
248
249 meson install -C build-companion \
250 --destdir "${pkgdir}" \
251 --no-rebuild \
252 --tags soundtouch-pipewire
253
254 install -Dm755 \
255 build-pipewire/src/modules/libpipewire-module-raop-sink.so \
256 "${pkgdir}/usr/lib/${pkgbase}/pipewire-0.3/libpipewire-module-soundtouch-raop-sink.so"
257 patchelf --remove-rpath \
258 "${pkgdir}/usr/lib/${pkgbase}/pipewire-0.3/libpipewire-module-soundtouch-raop-sink.so"
259
260 install -Dm755 \
261 build-pipewire/src/modules/libpipewire-module-soundtouch-zone-sink.so \
262 "${pkgdir}/usr/lib/${pkgbase}/pipewire-0.3/libpipewire-module-soundtouch-zone-sink.so"
263 patchelf --remove-rpath \
264 "${pkgdir}/usr/lib/${pkgbase}/pipewire-0.3/libpipewire-module-soundtouch-zone-sink.so"
265
266 install -Dm644 soundtouch-pipewire.service \
267 "${pkgdir}/usr/lib/systemd/user/soundtouch-pipewire.service"
268 install -Dm644 soundtouch-pipewire.conf.example \
269 "${pkgdir}/usr/share/doc/${pkgbase}/soundtouch-pipewire.conf.example"
270
271 install -Dm644 "${pkgbase}-${pkgver}/LICENSE" \
272 "${pkgdir}/usr/share/licenses/${pkgbase}/LICENSE"
273 install -Dm644 "${pkgbase}-${pkgver}/licenses/EULA.txt" \
274 "${pkgdir}/usr/share/licenses/${pkgbase}/EULA.txt"
275 install -Dm644 "${pkgbase}-${pkgver}/licenses/PIPEWIRE-MIT.txt" \
276 "${pkgdir}/usr/share/licenses/${pkgbase}/PIPEWIRE-MIT.txt"
277 install -Dm644 "${pkgbase}-${pkgver}/licenses/THIRD-PARTY-NOTICES.txt" \
278 "${pkgdir}/usr/share/licenses/${pkgbase}/THIRD-PARTY-NOTICES.txt"
279}
280
281package_soundtouch-pipewire-control() {
282 pkgdesc='Frozen v1 GTK controller for SoundTouch receiver and zone operations'
283 license=('MIT AND Unicode-3.0 AND LicenseRef-STPW-SoundTouch-Supplement-1')
284 depends=(
285 "soundtouch-pipewire=${pkgver}-${pkgrel}"
286 'glib2'
287 'glibc'
288 'gtk4'
289 'hicolor-icon-theme'
290 'libgcc'
291 )
292 optdepends=(
293 'pwvucontrol: native PipeWire mixer'
294 'pavucontrol: graphical PulseAudio-compatible mixer'
295 'wiremix: terminal PipeWire mixer (requires a supported terminal emulator)'
296 )
297
298 _assert_release_gate
299
300 meson install -C build-companion \
301 --destdir "${pkgdir}" \
302 --no-rebuild \
303 --tags soundtouch-pipewire-control,i18n
304
305 install -Dm644 "${pkgbase}-${pkgver}/LICENSE" \
306 "${pkgdir}/usr/share/licenses/soundtouch-pipewire-control/LICENSE"
307 install -Dm644 "${pkgbase}-${pkgver}/licenses/EULA.txt" \
308 "${pkgdir}/usr/share/licenses/soundtouch-pipewire-control/EULA.txt"
309 install -Dm644 "${pkgbase}-${pkgver}/licenses/RUST-DEPENDENCIES.html" \
310 "${pkgdir}/usr/share/licenses/soundtouch-pipewire-control/RUST-DEPENDENCIES.html"
311 install -Dm644 "${pkgbase}-${pkgver}/licenses/THIRD-PARTY-NOTICES.txt" \
312 "${pkgdir}/usr/share/licenses/soundtouch-pipewire-control/THIRD-PARTY-NOTICES.txt"
313}
314

Scan history

Scanned at (UTC)SeverityRules
2026-08-31 11:45:21 Low 1

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion