# Contributor: Łukasz Jendrysik <scadu@yandex.com>
# Contributor: Michael Mason <ms13sp@gmail.com>
# Contributor: Leonardo Arena <rnalrd@gmail.com>
# Maintainer: Nathan Angelacos <nangel@alpinelinux.org>
pkgname=kamailio

# If building from a git snapshot, specify the gitcommit
# run "abuild snapshot", then abuild as normal
# If building a proper release, leave gitcommit blank
#_gitcommit=e27802533cee
_giturl="git://github.com/$pkgname/$pkgname.git"
_gittag=HEAD


pkgver=4.4.4
pkgrel=0
[ -z "${_gitcommit}" ] && _suffix="_src" || _suffix="-${_gitcommit}"

pkgdesc="Open Source SIP Server"
url="http://www.kamailio.org/"
arch="all"
pkgusers="kamailio"
pkggroups="kamailio"
arch="all"
license="GPL2+"
depends=""
makedepends="bison flex expat-dev postgresql-dev pcre-dev mariadb-dev
	libxml2-dev curl-dev unixodbc-dev confuse-dev ncurses-dev sqlite-dev
	lua-dev openldap-dev libressl-dev net-snmp-dev libuuid libev-dev
	jansson-dev json-c-dev libevent-dev linux-headers libmemcached-dev
	hiredis-dev libmaxminddb-dev libunistring-dev"
install="$pkgname.pre-install $pkgname.pre-upgrade"

# See Makefile.groups for the list of recommended modules for
# each package.  What follows is a simplified version of Makefile.groups
#
# Alpine specific changes:
#
# _mod_list_debugger is not defined in the orginal
#
# Move avp from _mod_list_extras to _mod_list_basic, so that we can create
# a kamailio-extras package
#
# Remove db_text from _mod_list_db because we create a separate dbtext package
#
# - basic used modules, with no extra dependency (widespread usage)
_mod_list_basic="avp async auth benchmark blst cfg_rpc cfgt cfgutils corex counters \
		ctl debugger diversion enum exec gzcompress ipops kex mangler \
		maxfwd mediaproxy mi_datagram mi_fifo mi_rpc mqueue \
		nat_traversal nathelper path pike pv ratelimit rr rtimer \
		rtpproxy sanity sdpops siputils sl smsops statsc statistics \
		textops textopsx tm tmx topoh topos xlog rtpengine stun sipt"

# - extra used modules, with no extra dependency
_mod_list_extras="auth_diameter call_control cnxcc dmq domainpolicy log_custom \
		msrp pdb qos sca seas sms sst timer tmrec tsilo uac_redirect \
		xhttp xhttp_rpc xprint nosip dmq_usrloc statsd rtjson tcpops \
		auth_xkeys"

# - common modules depending on database
_mod_list_db="acc alias_db auth_db avpops cfg_db db_flatstore \
		db_cluster dialog dispatcher domain drouting group \
		htable imc matrix mohqueue msilo mtree p_usrloc pdt permissions \
		pipelimit prefix_route registrar sipcapture siptrace speeddial \
		sqlops uac uri_db userblacklist usrloc"

# - common modules depending on database, using UID db schema
_mod_list_dbuid="db2_ops uid_auth_db uid_avp_db uid_domain uid_gflags \
		uid_uri_db"

# - modules for devel purposes
_mod_list_devel="malloc_test print print_lib"

# - modules depending on pcre3 library
_mod_list_pcre="dialplan lcr regex"

# - modules depending on radius client library
_mod_list_radius="acc_radius auth_radius misc_radius peering"

# - modules depending on ldap client library
_mod_list_ldap="db2_ldap h350 ldap"

# - modules depending on mysql client library
_mod_list_mysql="db_mysql"

# - modules depending on postgres client library
_mod_list_postgres="db_postgres"

# - modules depending on unixodbc library
_mod_list_unixodbc="db_unixodbc"

# - modules depending on mysql cassandra library
_mod_list_cassandra="db_cassandra ndb_cassandra"

# - modules depending on xml2 library
_mod_list_cpl="cpl-c"

# - modules depending on xml2 library
_mod_list_xml="xhttp_pi xmlrpc xmlops"

# - modules depending on xml c rpc library
_mod_list_mi_xmlrpc="mi_xmlrpc"

# - modules depending on net-snmp library
_mod_list_snmpstats="snmpstats"

# - modules depending on expat library
_mod_list_xmpp="xmpp"

# - modules depending on confuse library
_mod_list_carrierroute="carrierroute"

# - modules depending on bdb (db4) library
_mod_list_berkeley="db_berkeley"

# - modules depending on curl library
_mod_list_utils="utils http_client"

# - async http_async_client
_mod_list_async_client="http_async_client"

# - modules depending on purple library
_mod_list_purple="purple"

# - modules depending on memcache library
_mod_list_memcached="memcached"

# - modules depending on openssl library
_mod_list_tls="auth_identity crypto tls"

# - modules depending on openssl library
_mod_list_outbound="outbound"

# - modules depending on unistring library
_mod_list_websocket="websocket"

# - modules depending on libval-threads libcrypto libsres libpthread
_mod_list_dnssec="dnssec"

# - modules depending on libsctp
_mod_list_sctp="sctp"

# - modules depending on openssl library
_mod_list_authephemeral="auth_ephemeral"

# - modules related to SIMPLE presence extensions
_mod_list_presence="presence presence_conference presence_dialoginfo \
			presence_mwi presence_profile presence_reginfo \
			presence_xml \
			pua pua_bla pua_dialoginfo pua_mi pua_reginfo \
			pua_usrloc pua_xmpp \
			rls xcap_client xcap_server"

# - modules depending on lua library
_mod_list_lua="app_lua"

# - modules depending on perl library
_mod_list_perl="app_perl db_perlvdb"

# - modules depending on python library
_mod_list_python="app_python"

# - modules depending on geoip2 library
_mod_list_geoip2="geoip2"

# - modules depending on sqlite library
_mod_list_sqlite="db_sqlite"

# - modules depending on oracle library
_mod_list_oracle="db_oracle"

# - modules depending on json library
_mod_list_json="json jsonrpc-c jsonrpc-s"

# - modules depending on redis library
_mod_list_redis="ndb_redis"

# - modules depending on mono library
_mod_list_mono="app_mono"

# - modules related to IMS extensions
_mod_list_ims="cdp cdp_avp ims_dialog ims_auth ims_isc ims_icscf ims_qos \
		ims_registrar_pcscf ims_registrar_scscf ims_usrloc_pcscf \
		ims_usrloc_scscf ims_charging"

# - modules depending on osp toolkit library
_mod_list_osp="osp"

# - modules depending on java library
_mod_list_java="app_java"

# - modules depending on iptables library
_mod_list_iptrtpproxy="iptrtpproxy"

# - modules depending on gzip library                                                         
_mod_list_gzcompress="gzcompress" 

# - modules depending on uuid library
_mod_list_uuid="uuid"

# - modules depending on ev library
_mod_list_ev="evapi"

# - modules depending on kazoo/rabbitmq
_mod_list_kazoo="kazoo"

# - modules depending on mongodb
_mod_list_mongodb="db_mongodb ndb_mongodb"

# - modules depending on jansson library
_mod_list_jansson="jansson janssonrpc-c"


# Alpine Specific
_mod_list_debugger="$_mod_list_devel benchmark debugger"

# Standard modules in main pkg
_module_group_kstandard="$_mod_list_basic $_mod_list_dbuid $_mod_list_pcre"

# END Makefile.groups #############################################################

subpackages="$pkgname-doc $pkgname-dbg"
_modules="$_module_group_kstandard"
for _i in db postgres sqlite dbtext mysql \
	cpl xml unixodbc snmpstats xmpp carrierroute \
	ldap utils tls presence lua ims outbound debugger \
	extras json websocket authephemeral \
	uuid ev memcached redis geoip2 jansson \
	http_async_client; do

   subpackages="$subpackages $pkgname-$_i"
   eval "_modules=\"\$_modules \$_mod_list_$_i\""
done

source="http://www.kamailio.org/pub/kamailio/$pkgver/src/${pkgname}-${pkgver}${_suffix}.tar.gz
	0001-musl-fixes.patch
	0003-kamdbctl.base.patch
	0004-remove-spurious-execinfo.patch
	kamailio.cfg
	kamailio.initd
	"

snapshot() {
        mkdir -p "$srcdir"
        cd "${SRCDEST:-$srcdir}"
        if ! [ -d $pkgname.git ]; then
                git clone --bare  $_giturl || return 1
                cd $pkgname.git
        else
                cd $pkgname.git
                git fetch || return 1
        fi
        git archive --prefix=$pkgname-$pkgver/ -o "$SRCDEST"/${pkgname}-${pkgver}${_suffix}.tar.gz $_gittag
}



_builddir="$srcdir"/$pkgname-$pkgver
prepare() {
	cd "$_builddir"
	default_prepare

	sed -i \
		-e "s:-O9 -funroll-loops:$CFLAGS:g" \
		Makefile.defs \
		|| return 1

#		-e 's:^cfg-target.*:cfg-target = $(cfg-dir):' \
#		-e 's:^cfg-prefix.*:cfg-prefix = $(basedir):' \

	cd utils/kamctl/
	sed -i -e 's:/var/run/kamailio.pid:/var/run/kamailio/kamailio.pid:g' \
		kamctl.base kamctlrc || return 1
	# we actually dont need bash
	sed -i -e 's:/bin/bash:/bin/sh:' kamctl kamdbctl \
		|| return 1
	# Set email_address field as not required field (could be null)
	cd dbtext/kamailio
	sed -i -e 's:email_address(string):email_address(string,null):' subscriber \
		|| return 1

}

build() {
	cd "$_builddir"
	make FLAVOUR=kamailio STUN=1 \
		PREFIX=/usr \
		CC_EXTRA_OPTS="$CFLAGS -D_GNU_SOURCE" \
		cfg_target=/etc/kamailio/ \
		run_prefix="" \
		include_modules="$_modules" \
		LIBDIR=lib \
		DESTDIR="$pkgdir" \
		cfg_prefix="$pkgdir" \
		cfg
	make  EMBEDDED_UTF8_DECODE=1 STUN=1 \
		all || return 1
}

package() {
	cd "$_builddir"
	make -j1 install || return 1

	# move default config to -doc package and use our own default config

	mv "$pkgdir"/etc/kamailio/kamailio.cfg \
		"$pkgdir"/usr/share/doc/kamailio/
	install -m644 -D "$srcdir"/kamailio.cfg \
		"$pkgdir"/etc/kamailio/kamailio.cfg

	install -m755 -D "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname
	install -d -o kamailio "$pkgdir"/var/run/kamailio
}

_mv_mod() {
	local moddir=usr/lib/kamailio/modules i=
	mkdir -p "$subpkgdir"/$moddir
	for i in $@; do
		mv "$pkgdir"/$moddir/$i.so "$subpkgdir"/$moddir/ || return 1
	done
}

_generic_pkg() {
	pkgdesc="Kamailio $1"
	depends="$pkgname"
	_mv_mod $2
}


_db_driver() {
	pkgdesc="Database drivers for $1"
	depends="$pkgname $pkgname-db"
	_mv_mod db_$2 || return 1
	mkdir -p "$subpkgdir"/usr/share/kamailio \
		"$subpkgdir"/usr/lib/kamailio/kamctl
	mv "$pkgdir"/usr/share/kamailio/$3 \
		"$subpkgdir"/usr/share/kamailio/ || return 1
	mv "$pkgdir"/usr/lib/kamailio/kamctl/*.$4 \
		"$subpkgdir"/usr/lib/kamailio/kamctl/ || return 1
}


db() {
	_generic_pkg "modules using a database backend" "$_mod_list_db"
}

postgres() {
	_db_driver Postgres postgres postgres pgsql
}

mysql() {
	_db_driver Mysql mysql mysql mysql
}

sqlite() {
	_db_driver SQlite sqlite db_sqlite sqlite
}

dbtext() {
	_db_driver DBText text dbtext dbtext || return 1
	# kamdbctl.dbtext is a python script - but we will not make python 
	# a dependency because kamdbctl is not normaly used
	depends="$depends"
	mkdir -p "$subpkgdir"/usr/lib/kamailio/kamctl || return 1
	mv "$pkgdir"/usr/lib/kamailio/kamctl/dbtextdb \
		"$subpkgdir"/usr/lib/kamailio/kamctl/ || return 1
}

cpl() {
	_generic_pkg "CPL (Call Processing Language) interpreter" \
		"$_mod_list_cpl"
}

xml() {
	_generic_pkg "XML related modules: $_mod_list_xml" \
		"$_mod_list_xml" || return 1
	mkdir -p "$subpkgdir"/usr/share/kamailio
	mv "$pkgdir"/usr/share/kamailio/xhttp_pi \
		"$subpkgdir"/usr/share/kamailio || return 1
	mkdir -p "$subpkgdir"/etc/kamailio/
	mv "$pkgdir"/etc/kamailio/pi_framework.xml \
		"$subpkgdir"/etc/kamailio || return 1
}

unixodbc() {
	_generic_pkg "Database drivers for unixodbc" \
		"$_mod_list_unixodbc"
}

snmpstats() {
	_generic_pkg "SNMP statistics support" \
		"$_mod_list_snmpstats" || return 1
	mkdir -p "$subpkgdir"/usr/share/snmp
	mv "$_builddir"/modules/snmpstats/mibs \
		"$subpkgdir"/usr/share/snmp/ || return 1
}

xmpp() {
	_generic_pkg "XMPP (Jabber) gateway" \
		"$_mod_list_xmpp"
}

carrierroute() {
	_generic_pkg "carrier grade routing functions" \
		"$_mod_list_carrierroute"
}

ldap() {
	_generic_pkg "LDAP search functions" \
		"$_mod_list_ldap"
}

utils() {
	_generic_pkg "miscelaneous utility functions" \
		"$_mod_list_utils"
}

tls() {
	_generic_pkg "TLS support" \
		"$_mod_list_tls"
}

presence() {
	_generic_pkg "SIP Notify (Presence) support" \
		"$_mod_list_presence"
}

lua() {
	_generic_pkg "Lua script support" \
		"$_mod_list_lua"
}

ims() {
	_generic_pkg "IP Multimedia Subsystem (IMS) support" \
		"$_mod_list_ims"
}

outbound() {
	_generic_pkg "RFC 5626 section 5 Outbound support" \
		"$_mod_list_outbound"
}

debugger() {
	_generic_pkg "debugging modules" \
		"$_mod_list_debugger"
}

extras() {
	_generic_pkg "extra modules" \
		"$_mod_list_extras"
}

websocket() {
	_generic_pkg "websocket support" \
		"$_mod_list_websocket"
}

authephemeral() {
	_generic_pkg "auth ephemeral (webrtc)" \
		"$_mod_list_authephemeral"
}

json() {
	_generic_pkg "Operations on json strings" \
		"$_mod_list_json"
}

jansson() {
	_generic_pkg "Operations on json strings using jansson library" \
		"$_mod_list_jansson"
}

geoip2() {
	_generic_pkg "MaxMind GeoIP lookup support" \
		"$_mod_list_geoip2"
}

ev() {
	_generic_pkg "Network event broadcast API" \
		"$_mod_list_ev"
}

uuid() {
	_generic_pkg "UUID generator using libuuid" \
		"$_mod_list_uuid"
}

memcached() {
	_generic_pkg "memcached support" \
		"$_mod_list_memcached"
}

redis() {
	_generic_pkg "Redis NoSQL support" \
		"$_mod_list_redis"
}

http_async_client() {
	_generic_pkg "Asynchronous HTTP queries support" \
		"$_mod_list_http_async_client"
}


md5sums="ab0b54d8d4f07cf9208616bb9f076d7f  kamailio-4.4.4_src.tar.gz
18863791d386659eae6ef0c82a2517ae  0001-musl-fixes.patch
800dbf35a951582a08eceed68532d7a6  0003-kamdbctl.base.patch
e613ef3611f9a5091ce05084daf9c9a5  0004-remove-spurious-execinfo.patch
299706d97e30a4f0d9b4c873df422866  kamailio.cfg
39dc9355fa7d8fec425d3b17c2fb26e0  kamailio.initd"
sha256sums="2dd4d66bbdfb57a074c1690a6a61ae9d6e39f298c502abf26e118b3aa9d51583  kamailio-4.4.4_src.tar.gz
254ea5d4699417aec49e1aae45398a802067a8967060f2a469e278779d876d22  0001-musl-fixes.patch
c01250a7fe339b53b51cc62d0f6c0bc0a9c9c4596a9692771d26b40216f822d2  0003-kamdbctl.base.patch
fb9c13dd3cd5cd07cf7599cf6688c46739334a18ade64f8bf44f84fb179e8409  0004-remove-spurious-execinfo.patch
8b742ff710ef67ff59ec07a260690ebcdda24fb6f0b7b64dc50433a1bacf99f2  kamailio.cfg
ba928fa914feea2b95b8c659832e3fbea25eb6ac1ce56e4c23ff58c09f1ec3b8  kamailio.initd"
sha512sums="605bde7197d1c2c6760110eaf4761bba0885f92c274cbb9c1404b138f19ec56bf2a519072ad2c59101becf1c219ea91fee1a976c81df1234658849dda60073ca  kamailio-4.4.4_src.tar.gz
32c8e723ee858b24a3bd1313537e9348bdd895e709041d52199b7d2c4054565f3f8d203458b5a7bd5f4b09a782a972cf87f931de5bb8199e6f9786a3c9bfb3ba  0001-musl-fixes.patch
139fab275e7d01da85bf3422a16966165c72584122513d34b5fb3d9341c430eeb69ec5b86b82ff4acce709f5ab3f651de5954ae38ff9a256a19b22d88cfea830  0003-kamdbctl.base.patch
d962f7bb7fe5c0747dff050d4c2d74f16eedba903a3347b3f86b42e5d7778f5f8b973a6134fd6714c0a62189bc475396e8225db3468390f6e1a84fc1d44f0d87  0004-remove-spurious-execinfo.patch
c1abf69b48847dc8c7ab0d11ef9adb531aa4635f9d44db6933981edc5a47df374664fb24867b19aa64abbcc9777bf1cd0360d9aea54e27b081065928c61e0f0b  kamailio.cfg
cd6e3b677d803cd78561ad14d9b2589fd35ad0096f48047fdcb4ddc7d9103871357efba3b350946844cb53dbb081210746421fc420c22ac845b90251168a628e  kamailio.initd"
