# Contributor: Rasmus Thomsen <oss@cogitri.dev>
maintainer="team/alpine-desktop <bribbers@disroot.org>"
pkgname=pipewire
pkgver=1.4.5
pkgrel=0
_so_ver=0.3
pkgdesc="Multimedia processing graphs"
url="https://pipewire.org/"
arch="all"
license="LGPL-2.1-or-later"
pkggroups="pipewire"
makedepends="
	alsa-lib-dev
	avahi-dev
	bash
	bluez-dev
	dbus-dev
	doxygen
	eudev-dev
	fdk-aac-dev
	glib-dev
	graphviz
	gst-plugins-base-dev
	gstreamer-dev
	jack-dev
	libcamera-dev
	libfreeaptx-dev
	liblc3-dev
	libusb-dev
	libx11-dev
	lilv-dev
	meson
	modemmanager-dev
	ncurses-dev
	pulseaudio-dev
	py3-docutils
	readline-dev
	roc-toolkit-dev
	sbc-dev
	vulkan-loader-dev
	webrtc-audio-processing-2-dev
	xmltoman
	"
# move regular -dev after -jackdev, to steal files
subpackages="
	$pkgname-dbg
	$pkgname-doc
	$pkgname-alsa
	$pkgname-pulse
	$pkgname-pulse-openrc:pulse_openrc
	$pkgname-jack
	$pkgname-jack-dev:jackdev
	$pkgname-dev
	gst-plugin-pipewire:gst_plugin
	$pkgname-zeroconf
	$pkgname-spa-bluez
	$pkgname-spa-vulkan
	$pkgname-tools
	$pkgname-spa-tools:spa_tools
	$pkgname-lang
	$pkgname-echo-cancel:echo_cancel
	$pkgname-openrc
	"
install="$pkgname.post-upgrade $pkgname.post-install"
source="https://gitlab.freedesktop.org/PipeWire/pipewire/-/archive/$pkgver/pipewire-$pkgver.tar.gz
	pipewire.desktop
	pipewire-launcher.sh
	pipewire.initd
	pipewire-pulse.initd
	"

case "$CARCH" in
	s390x)
		# libldac not available for big endian
		;;
	*)
		makedepends="$makedepends libldac-dev"
		;;
esac

# put libs last to steal residual files taken by some prior extras
subpackages="$subpackages $pkgname-libs"

build() {
	CFLAGS="$CFLAGS -O2" \
	CXXFLAGS="$CXXFLAGS -O2" \
	CPPFLAGS="$CPPFLAGS -O2" \
	abuild-meson \
		-Db_lto=true \
		-Dlibjack-path=/usr/lib \
		-Dlibv4l2-path=/usr/lib \
		-Ddocs=disabled \
		-Dman=enabled \
		-Dgstreamer=enabled \
		-Dexamples=enabled \
		-Dffmpeg=disabled \
		-Djack-devel=true \
		-Dsystemd=disabled \
		-Dvulkan=enabled \
		-Dsdl2=disabled \
		-Dlv2=enabled \
		-Dlibcamera=enabled \
		-Droc=enabled \
		-Dbluez5-codec-lc3=enabled \
		-Dbluez5-backend-native-mm=enabled \
		-Dsession-managers=[] \
		. output
	meson compile -C output
}

check() {
	meson test --print-errorlogs -C output
}

package() {
	DESTDIR="$pkgdir" meson install --no-rebuild -C output

	install -Dm644 "$srcdir"/pipewire.desktop -t "$pkgdir"/etc/xdg/autostart/
	install -Dm755 "$srcdir"/pipewire-launcher.sh "$pkgdir"/usr/libexec/pipewire-launcher

	install -Dm755 "$srcdir"/pipewire.initd "$pkgdir"/etc/user/init.d/pipewire
	install -Dm755 "$srcdir"/pipewire-pulse.initd "$pkgdir"/etc/user/init.d/pipewire-pulse
}

alsa() {
	pkgdesc="ALSA support for pipewire"
	replaces="$pkgname"  # for backward compatibility

	amove usr/lib/alsa-lib
	amove usr/share/alsa/alsa.conf.d

	install -d "$subpkgdir"/etc/alsa/conf.d
	for i in "$subpkgdir"/usr/share/alsa/alsa.conf.d/*.conf; do
		ln -s -- "${i#"$subpkgdir"}" "$subpkgdir"/etc/alsa/conf.d/
	done
}

pulse() {
	pkgdesc="Pulseaudio support for pipewire"
	depends="
		pipewire-session-manager
		pulseaudio-utils
		"
	provides="pulseaudio=$pkgver-r$pkgrel pulseaudio-bluez=$pkgver-r$pkgrel"
	provider_priority=1

	amove usr/bin/pipewire-pulse
	amove usr/lib/pipewire-$_so_ver/libpipewire-module-protocol-pulse.so
	amove usr/lib/pipewire-$_so_ver/libpipewire-module-pulse-tunnel.so
	amove usr/lib/pipewire-$_so_ver/libpipewire-module-filter-chain.so
	amove usr/share/pipewire/pipewire-pulse.conf
	amove usr/share/pipewire/pipewire-pulse.conf.avail
}

pulse_openrc() {
	install_if="$pkgname-pulse openrc"
	amove etc/user/init.d/pipewire-pulse
}

jack() {
	pkgdesc="JACK support for pipewire"
	depends="pipewire-session-manager"
	provides="jack=$pkgver-r$pkgrel"
	replaces="jack"

	amove usr/lib/libjack*.so.*
	amove usr/bin/pw-jack
	amove usr/lib/spa-*/jack/libspa-jack.so
	amove usr/share/pipewire/jack.conf
}

gst_plugin() {
	pkgdesc="Multimedia graph framework - PipeWire plugin"
	depends="pipewire-session-manager gst-plugins-base"
	install_if="$pkgname=$pkgver-r$pkgrel gstreamer"

	amove usr/lib/gstreamer-1.0
}

echo_cancel() {
	pkgdesc="WebRTC-based echo canceller module for PipeWire"
	depends="$pkgname=$pkgver-r$pkgrel"

	amove usr/lib/pipewire-$_so_ver/libpipewire-module-echo-cancel.so
}

zeroconf() {
	pkgdesc="$pkgdesc - Zeroconf support"
	depends=""
	provides="pulseaudio-zeroconf=$pkgver-r$pkgrel"
	provider_priority=1

	amove usr/lib/pipewire-$_so_ver/libpipewire-module-zeroconf-discover.so
	amove usr/lib/pipewire-$_so_ver/libpipewire-module-raop-*.so
}

bluez() {
	pkgdesc="PipeWire BlueZ5 SPA plugin (Bluetooth)"
	depends=""
	replaces="$pkgname"  # for backward compatibility

	amove usr/lib/spa-*/bluez5
}

vulkan() {
	pkgdesc="PipeWire Vulkan SPA plugin"
	depends=""

	amove usr/lib/spa-*/vulkan
}

tools() {
	pkgdesc="PipeWire tools"
	depends="$pkgname=$pkgver-r$pkgrel"
	replaces="$pkgname"  # for backward compatibility

	amove usr/bin/pw-*
}

spa_tools() {
	pkgdesc="PipeWire SPA tools"
	depends=""
	replaces="$pkgname"  # for backward compatibility

	amove usr/bin/spa-*
}

jackdev() {
	pkgdesc="JACK development files (from pipewire)"
	provides="jack-dev=$pkgver-r$pkgrel"

	amove usr/lib/libjack*.so
	amove usr/include/jack
	amove usr/lib/pkgconfig/jack.pc
}

libs() {
	default_libs

	# the libraries must be paired with the client config and the plugins,
	# see:
	# https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3296
	# https://bugs.archlinux.org/task/78813
	amove \
		usr/share/pipewire/client*.conf* \
		usr/lib/pipewire-*/ \
		usr/lib/spa-*/
}

sha512sums="
95a32a37cc6186510fb15146a24c8351a894ee03d2da968c1522e03b0e3b9081f1295896c1810636fabc9f176f3b7c12b9721771f5951794d8fb39b988b7d286  pipewire-1.4.5.tar.gz
b70b05151bcf4b7f13d68b2731d789b9c062fadfcb91f4ed6bdb0d495390b0010f57034fb115a053e1459c7d9ea27523ca1c0c69639aeeb96c17ebac8dfc5b57  pipewire.desktop
1ab91358462f079f215f09728f3efb22e6e5a83d035740933f9536a907ef842642f9b2394233b7848dfe72c323df2a9e5c76640f3a574fc86391f68b04b91a7f  pipewire-launcher.sh
d3cbe05f621b42beabfad1abfca9f2acb4dfa73489bfd6bdcfd6331c7e35f62c6447ae6f08db8b4ac7b682e73f55a1a679dc8122d4cc7a7d43a39bdd5f55025f  pipewire.initd
eff6ce635d47f801a845cf6774d909b2eaf64a83e59919d4dd47955d51f1c6e2f12e7d8c6972766829101e4aa920d622fea9806ea2b27d915e3f58f4f48128bb  pipewire-pulse.initd
"
