# Contributor: Francesco Colista <fcolista@alpinelinux.org>
# Maintainer: Simon Frankenberger <simon-alpine@fraho.eu>
pkgname=sems
pkgver=1.7.2_git20240113
pkgrel=0
_gitver=e67ff5a76ec9b1cb402d0d91c5c9e7a12e6c3252
pkgdesc="SIP Express Media Server, an extensible SIP media server"
url="https://github.com/sems-server/sems/"
arch="all"
license="GPL-2.0-or-later"
# upstream does not provide test
options="!check"
pkgusers="sems"
pkggroups="sems"
install="$pkgname.pre-install"
depends="python3 bash"
makedepends="cmake openssl-dev>3 linux-headers
	libsamplerate-dev spandsp-dev flite-dev gsm-dev speex-dev
	libevent-dev libev-dev lame-dev opus-dev tiff-dev"
subpackages="$pkgname-doc $pkgname-conference
	$pkgname-diameter_client $pkgname-dsm $pkgname-early_announce
	$pkgname-g722 $pkgname-gsm $pkgname-ilbc $pkgname-mp3
	$pkgname-opus $pkgname-speex $pkgname-xmlrpc2di
	$pkgname-webconference $pkgname-voicebox $pkgname-voicemail
	$pkgname-annrecorder $pkgname-jsonrpc $pkgname-registrar $pkgname-openrc"

source="$pkgname-$pkgver.tar.gz::https://github.com/sems-server/sems/archive/$_gitver.tar.gz
	sems-0002-Allow-rewrite-of-custom-makefiles-by-CMake.patch
	sems-0004-musl-fixes.patch
	sems-0005-stats-needs-version.patch
	sems-0014-further-musl-fixes.patch

	sems.initd
	"

replaces="
	$pkgname-ivr
	$pkgname-mailbox
	$pkgname-conf_auth
	$pkgname-pin_collect
	" # Removed in 1.6.0-r10 (due to depending on EOL python)

builddir="$srcdir/sems-$_gitver"

prepare() {
	default_prepare
	rm -rf core/plug-in/gsm/gsm-1.0-pl10/
}

build() {
	# force cmake to use relative paths. It helps us avoid having the
	# full file path in the logs
	cmake \
		-DCMAKE_BUILD_TYPE=None \
		-DCMAKE_USE_RELATIVE_PATHS=yes \
		-DSEMS_USE_SPANDSP=yes \
		-DSEMS_USE_LIBSAMPLERATE=yes \
		-DSEMS_USE_ZRTP=NO \
		-DSEMS_USE_MP3=yes \
		-DSEMS_USE_OPUS=yes \
		-DSEMS_USE_TTS=yes \
		-DSEMS_USE_OPENSSL=yes \
		-DSEMS_USE_MONITORING=yes \
		-DSEMS_USE_IPV6=NO \
		-DSEMS_CFG_PREFIX= \
		-DSEMS_AUDIO_PREFIX=/usr/share \
		-DSEMS_EXEC_PREFIX=/usr \
		-DSEMS_LIBDIR=lib
	make
}

package() {
	make install DESTDIR="$pkgdir"
	install -m755 -D "$srcdir"/$pkgname.initd \
		"$pkgdir"/etc/init.d/$pkgname
	# is empty
	rm -f "$pkgdir"/etc/sems/etc/conf_auth.conf

	install -o sems -g sems -d "$pkgdir"/var/spool/voicebox
	install -d -o sems  "$pkgdir"/var/run/sems
}

_mv_sub() {
	local i
	for i in "$@"; do
		mkdir -p "$subpkgdir"/${i%/*}
		mv "$pkgdir"/$i "$subpkgdir"/$i
	done
}

conference() {
	pkgdesc="Conferencing application for SEMS"
	depends="sems"
	cd "$pkgdir"
	_mv_sub etc/sems/etc/conference.conf \
		usr/lib/sems/plug-in/conference.so \
		usr/share/sems/audio/conference
}

diameter_client() {
	pkgdesc="A simple DIAMETER client implementation for SEMS"
	depends="sems"
	cd "$pkgdir"
	_mv_sub usr/lib/sems/plug-in/diameter_client.so
}

dsm() {
	pkgdesc="The state machine interpreter for SEMS"
	depends="sems"
	cd "$pkgdir"
	_mv_sub etc/sems/etc/dsm* \
		usr/lib/sems/plug-in/dsm.so \
		usr/lib/sems/dsm
}

early_announce() {
	pkgdesc="Early announce application for SEMS"
	depends="sems"
	cd "$pkgdir"
	_mv_sub etc/sems/etc/early_announce.conf \
		usr/lib/sems/plug-in/early_announce.so
}

g722() {
	pkgdesc="G.722 support for SEMS"
	depends="sems"
	_mv_sub usr/lib/sems/plug-in/g722.so
}

#gateway() {
#	pkgdesc="ISDN gateway for SEMS"
#	depends="sems"
#}

gsm() {
	pkgdesc="GSM support for SEMS"
	depends="sems"
	_mv_sub usr/lib/sems/plug-in/gsm.so
}

ilbc() {
	pkgdesc="iLBC support for SEMS"
	depends="sems"
	_mv_sub usr/lib/sems/plug-in/ilbc.so
}

mp3() {
	pkgdesc="MP3 support for SEMS"
	depends="sems"
	_mv_sub usr/lib/sems/plug-in/mp3.so
}

opus() {
	pkgdesc=" OPUS codec for SEMS"
	depends="sems"
	_mv_sub usr/lib/sems/plug-in/opus.so
}

webconference() {
	pkgdesc="Conference bridge via DI (xmlrpc) for SEMS"
	depends="sems sems-xmlrpc2di"
	cd "$pkgdir"
	_mv_sub etc/sems/etc/webconference.conf \
		usr/share/sems/audio/webconference \
		usr/lib/sems/plug-in/webconference.so
}

annrecorder() {
	pkgdesc="Allow user to record personal greeting for SEMS"
	depends="sems"
	cd "$pkgdir"
	_mv_sub etc/sems/etc/annrecorder.conf \
		usr/share/sems/audio/annrecorder \
		usr/lib/sems/plug-in/annrecorder.so
}

voicebox() {
	pkgdesc="Voicebox (call in for messsages) for SEMS"
	depends="sems"
	cd "$pkgdir"
	_mv_sub etc/sems/etc/voicebox.conf \
		usr/share/sems/audio/voicebox \
		usr/lib/sems/plug-in/voicebox.so \
		var/spool/voicebox
}

voicemail() {
	pkgdesc="Play greeting and record voicemail for SEMS"
	depends="sems"
	cd "$pkgdir"
	_mv_sub etc/sems/etc/voicemail.conf \
		usr/share/sems/audio/voicemail \
		usr/lib/sems/plug-in/voicemail.so
}

speex() {
	pkgdesc="Speex support for SEMS"
	depends="sems"
	_mv_sub usr/lib/sems/plug-in/speex.so
}

xmlrpc2di() {
	pkgdesc="XMLRPC interface for SEMS"
	depends="sems"
	_mv_sub \
		etc/sems/etc/xmlrpc2di.conf \
		usr/lib/sems/plug-in/xmlrpc2di.so
}

jsonrpc() {
	pkgdesc="Jsonrpc support for SEMS"
	depends="sems"
	_mv_sub \
		etc/sems/etc/jsonrpc.conf \
		usr/lib/sems/plug-in/jsonrpc.so
}

registrar() {
	pkgdesc="Support for SEMS to register to a SIP server"
	depends="sems"
	_mv_sub \
		etc/sems/etc/reg_agent.conf \
		usr/lib/sems/plug-in/reg_agent.so \
		usr/lib/sems/plug-in/registrar_client.so
}

sha512sums="
2369f25c41e5440ba6e2d5841d85f96b0e3e26a67660a343f89e57a1451a0818b577bb5e32e6413f589ae1d36777d6132074d02c9f076b29d38a557176c81dde  sems-1.7.2_git20240113.tar.gz
25d93994e444312445fd277b85fb8e53f9314fb370f2f2377b599c99e41c1d9787db392752f4b1c30b76bd6c4411ca5a67570f534f40282778e30a269a1d3c90  sems-0002-Allow-rewrite-of-custom-makefiles-by-CMake.patch
d98cbabe9fe6154e4e7354a742c3871668d9ef798c32ec60a36d5f3b2bf4419a57609988bc979bcc53855e3ab1368616fa2ea647d5a00fe31ce65c93f32f9700  sems-0004-musl-fixes.patch
28f07142a0b8b6698948d41bfb198e59637d5a921960adc496111b5cad4685a0b1cade821ac9cd9dbbf3f25ed6195f29485a12d077abf81428b9b6f8bfced79e  sems-0005-stats-needs-version.patch
044a344706c099b6e420a01ca3a2947fb7a44ed81a6ccf4942d2fcdcc73dc174c504f151faa010c6a370d7463c6b02e6c14f6aa237a5ca706171e7cfb9499818  sems-0014-further-musl-fixes.patch
5be93b6444a9592daa6c883c78e5906e9e662891e1daa850d872bdaa657eb756f1bc0879732033479b279b75c2fd42ef79aa530ebf3b1692e7fb222d484f804b  sems.initd
"
