soundtouch-pipewire
LOW
maintainer Mr.Tao
0 votes
scanned 2026-08-31 11:45:21.822654
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
3
pkgbase=soundtouch-pipewire
4
pkgname=(
5
'soundtouch-pipewire'
6
'soundtouch-pipewire-control'
7
)
8
pkgver=0.1.0
9
pkgrel=64
10
arch=('x86_64')
11
url='https://github.com/Mr-Tao/soundtouch-pipewire'
12
license=('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
)
33
makedepends=(
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
)
53
checkdepends=(
54
'appstream'
55
'desktop-file-utils'
56
'libpulse'
57
"pipewire-pulse=${_pipewire_pkgver}"
58
'wireplumber>=0.5.15'
59
)
60
provides=()
61
conflicts=()
62
replaces=()
63
64
source=(
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
)
81
sha256sums=('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
130
prepare() {
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
161
build() {
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
206
check() {
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
237
package_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
281
package_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) | Severity | Rules |
|---|---|---|
| 2026-08-31 11:45:21 | Low | 1 |