# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=5
inherit autotools base eutils linux-info multilib user systemd

MY_P="${PN}-${PV/_/-}"

DESCRIPTION="Asterisk: A Modular Open Source PBX System"
HOMEPAGE="http://www.asterisk.org/"
SRC_URI="http://downloads.asterisk.org/pub/telephony/asterisk/releases/${MY_P}.tar.gz
	 mirror://gentoo/gentoo-asterisk-patchset-4.02.tar.bz2"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"

IUSE_VOICEMAIL_STORAGE="
	+voicemail_storage_file
	voicemail_storage_odbc
	voicemail_storage_imap
"
IUSE="${IUSE_VOICEMAIL_STORAGE} alsa bluetooth calendar +caps cluster curl dahdi debug doc freetds gtalk http iconv ilbc xmpp ldap libedit libressl lua mysql newt +samples odbc osplookup oss portaudio postgres radius selinux snmp span speex srtp static syslog vorbis"
IUSE_EXPAND="VOICEMAIL_STORAGE"
REQUIRED_USE="gtalk? ( xmpp )
	^^ ( ${IUSE_VOICEMAIL_STORAGE/+/} )
	voicemail_storage_odbc? ( odbc )
"

EPATCH_SUFFIX="patch"
PATCHES=( "${WORKDIR}/asterisk-patchset" )

CDEPEND="dev-db/sqlite:3
	dev-libs/popt
	dev-libs/jansson
	dev-libs/libxml2
	!libressl? ( dev-libs/openssl:0 )
	libressl? ( dev-libs/libressl )
	sys-libs/ncurses
	sys-libs/zlib
	alsa? ( media-libs/alsa-lib )
	bluetooth? ( net-wireless/bluez )
	calendar? ( net-libs/neon
		 dev-libs/libical
		 dev-libs/iksemel )
	caps? ( sys-libs/libcap )
	cluster? ( sys-cluster/corosync )
	curl? ( net-misc/curl )
	dahdi? ( >=net-libs/libpri-1.4.12_beta2
		net-misc/dahdi-tools )
	freetds? ( dev-db/freetds )
	gtalk? ( dev-libs/iksemel )
	http? ( dev-libs/gmime:2.6 )
	iconv? ( virtual/libiconv )
	ilbc? ( dev-libs/ilbc-rfc3951 )
	xmpp? ( dev-libs/iksemel )
	ldap? ( net-nds/openldap )
	libedit? ( dev-libs/libedit )
	lua? ( dev-lang/lua:* )
	mysql? ( virtual/mysql )
	newt? ( dev-libs/newt )
	odbc? ( dev-db/unixODBC )
	osplookup? ( net-libs/osptoolkit )
	portaudio? ( media-libs/portaudio )
	postgres? ( dev-db/postgresql:* )
	radius? ( net-dialup/freeradius-client )
	snmp? ( net-analyzer/net-snmp )
	span? ( media-libs/spandsp )
	speex? ( media-libs/speex )
	srtp? ( net-libs/libsrtp )
	vorbis? ( media-libs/libvorbis )"

DEPEND="${CDEPEND}
	!net-libs/openh323
	!net-libs/pjsip
	voicemail_storage_imap? ( virtual/imap-c-client )
	virtual/pkgconfig
"

RDEPEND="${CDEPEND}
	selinux? ( sec-policy/selinux-asterisk )
	syslog? ( virtual/logger )"

PDEPEND="net-misc/asterisk-core-sounds
	net-misc/asterisk-extra-sounds
	net-misc/asterisk-moh-opsound"

S="${WORKDIR}/${MY_P}"

pkg_setup() {
	CONFIG_CHECK="~!NF_CONNTRACK_SIP"
	local WARNING_NF_CONNTRACK_SIP="SIP (NAT) connection tracking is enabled. Some users
	have reported that this module dropped critical SIP packets in their deployments. You
	may want to disable it if you see such problems."
	check_extra_config

	enewgroup asterisk
	enewgroup dialout 20
	enewuser asterisk -1 -1 /var/lib/asterisk "asterisk,dialout"
}

src_prepare() {
	base_src_prepare
	AT_M4DIR=autoconf eautoreconf
}

src_configure() {
	local vmst

	econf \
		--libdir="/usr/$(get_libdir)" \
		--localstatedir="/var" \
		--with-crypto \
		--with-gsm=internal \
		--with-popt \
		--with-ssl \
		--with-z \
		--without-pwlib \
		$(use_with caps cap) \
		$(use_with http gmime) \
		$(use_with newt) \
		$(use_with portaudio)

	# Blank out sounds/sounds.xml file to prevent
	# asterisk from installing sounds files (we pull them in via
	# asterisk-{core,extra}-sounds and asterisk-moh-opsound.
	>"${S}"/sounds/sounds.xml

	# That NATIVE_ARCH chatter really is quite bothersome
	sed -i 's/NATIVE_ARCH=/NATIVE_ARCH=0/' build_tools/menuselect-deps || die "Unable to squelch noisy build system"

	# Compile menuselect binary for optional components
	emake menuselect.makeopts

	# Broken functionality is forcibly disabled (bug #360143)
	menuselect/menuselect --disable chan_misdn menuselect.makeopts
	menuselect/menuselect --disable chan_ooh323 menuselect.makeopts

	# Utility set is forcibly enabled (bug #358001)
	menuselect/menuselect --enable smsq menuselect.makeopts
	menuselect/menuselect --enable streamplayer menuselect.makeopts
	menuselect/menuselect --enable aelparse menuselect.makeopts
	menuselect/menuselect --enable astman menuselect.makeopts

	# this is connected, otherwise it would not find
	# ast_pktccops_gate_alloc symbol
	menuselect/menuselect --enable chan_mgcp menuselect.makeopts
	menuselect/menuselect --enable res_pktccops menuselect.makeopts

	# SSL is forcibly enabled, IAX2 & DUNDI are expected to be available
	menuselect/menuselect --enable pbx_dundi menuselect.makeopts
	menuselect/menuselect --enable func_aes menuselect.makeopts
	menuselect/menuselect --enable chan_iax2 menuselect.makeopts

	# SQlite3 is now the main database backend, enable related features
	menuselect/menuselect --enable cdr_sqlite3_custom menuselect.makeopts
	menuselect/menuselect --enable cel_sqlite3_custom menuselect.makeopts

	# The others are based on USE-flag settings
	use_select() {
		local state=$(use "$1" && echo enable || echo disable)
		shift # remove use from parameters

		while [[ -n $1 ]]; do
			menuselect/menuselect --${state} "$1" menuselect.makeopts
			shift
		done
	}

	use_select alsa			chan_alsa
	use_select bluetooth		chan_mobile
	use_select calendar		res_calendar res_calendar_{caldav,ews,exchange,icalendar}
	use_select cluster		res_corosync
	use_select curl			func_curl res_config_curl res_curl
	use_select dahdi		app_dahdibarge app_dahdiras app_meetme chan_dahdi codec_dahdi res_timing_dahdi
	use_select freetds		{cdr,cel}_tds
	use_select gtalk		chan_motif
	use_select http			res_http_post
	use_select iconv		func_iconv
	use_select xmpp			res_xmpp
	use_select ilbc                 codec_ilbc format_ilbc
	use_select ldap			res_config_ldap
	use_select lua			pbx_lua
	use_select mysql		app_mysql cdr_mysql res_config_mysql
	use_select odbc			cdr_adaptive_odbc res_config_odbc {cdr,cel,res,func}_odbc
	use_select osplookup		app_osplookup
	use_select oss			chan_oss
	use_select postgres		{cdr,cel}_pgsql res_config_pgsql
	use_select radius		{cdr,cel}_radius
	use_select snmp			res_snmp
	use_select span			res_fax_spandsp
	use_select speex		{codec,func}_speex
	use_select srtp			res_srtp
	use_select syslog		cdr_syslog
	use_select vorbis		format_ogg_vorbis

	# Voicemail storage ...
	for vmst in ${IUSE_VOICEMAIL_STORAGE/+/}; do
		if use ${vmst}; then
			menuselect/menuselect --enable $(echo ${vmst##*_} | tr '[:lower:]' '[:upper:]')_STORAGE menuselect.makeopts
		fi
	done

	if use debug; then
		for o in DONT_OPTIMIZE DEBUG_THREADS BETTER_BACKTRACES; do
			menuselect/menuselect --enable $o menuselect.makeopts
		done
	fi
}

src_compile() {
	ASTLDFLAGS="${LDFLAGS}" emake
}

src_install() {
	mkdir -p "${D}"usr/$(get_libdir)/pkgconfig || die
	emake DESTDIR="${D}" installdirs
	emake DESTDIR="${D}" install

	if use radius; then
		insinto /etc/radiusclient/
		doins contrib/dictionary.digium
	fi
	diropts -m 0750 -o root -g asterisk
	keepdir	/etc/asterisk
	if use samples; then
		emake DESTDIR="${D}" samples
		for conffile in "${D}"etc/asterisk/*.*
		do
			chown root:root $conffile
			chmod 0644 $conffile
		done
		einfo "Sample files have been installed"
	else
		einfo "Skipping installation of sample files..."
		rm -f  "${D}"var/lib/asterisk/mohmp3/* || die
		rm -f  "${D}"var/lib/asterisk/sounds/demo-* || die
		rm -f  "${D}"var/lib/asterisk/agi-bin/* || die
		rm -f  "${D}"etc/asterisk/* || die
	fi
	rm -rf "${D}"var/spool/asterisk/voicemail/default || die

	# keep directories
	diropts -m 0770 -o asterisk asterisk
	keepdir /var/lib/asterisk
	keepdir /var/spool/asterisk
	keepdir /var/spool/asterisk/{system,tmp,meetme,monitor,dictate,voicemail}
	diropts -m 0750 -o asterisk -g asterisk
	keepdir /var/log/asterisk/{cdr-csv,cdr-custom}

	newinitd "${FILESDIR}"/1.8.0/asterisk.initd7 asterisk
	newconfd "${FILESDIR}"/1.8.0/asterisk.confd asterisk

	systemd_dounit "${FILESDIR}"/asterisk.service
	systemd_newtmpfilesd "${FILESDIR}"/asterisk.tmpfiles.conf asterisk.conf
	systemd_install_serviced "${FILESDIR}"/asterisk.service.conf

	# install the upgrade documentation
	#
	dodoc README UPGRADE* BUGS CREDITS

	# install extra documentation
	#
	if use doc
	then
		dodoc doc/*.txt
		dodoc doc/*.pdf
	fi

	# install SIP scripts; bug #300832
	#
	dodoc "${FILESDIR}/1.6.2/sip_calc_auth"
	dodoc "${FILESDIR}/1.8.0/find_call_sip_trace.sh"
	dodoc "${FILESDIR}/1.8.0/find_call_ids.sh"
	dodoc "${FILESDIR}/1.6.2/call_data.txt"

	# install logrotate snippet; bug #329281
	#
	insinto /etc/logrotate.d
	newins "${FILESDIR}/1.6.2/asterisk.logrotate4" asterisk
}

pkg_postinst() {
	#
	# Announcements, warnings, reminders...
	#
	einfo "Asterisk has been installed"
	echo
	elog "If you want to know more about asterisk, visit these sites:"
	elog "http://www.asteriskdocs.org/"
	elog "http://www.voip-info.org/wiki-Asterisk"
	echo
	elog "http://www.automated.it/guidetoasterisk.htm"
	echo
	elog "Gentoo VoIP IRC Channel:"
	elog "#gentoo-voip @ irc.freenode.net"
	echo
	echo
	elog "Please read the Asterisk 13 upgrade document:"
	elog "https://wiki.asterisk.org/wiki/display/AST/Upgrading+to+Asterisk+13"
}

pkg_config() {
	einfo "Do you want to reset file permissions and ownerships (y/N)?"

	read tmp
	tmp="$(echo $tmp | tr '[:upper:]' '[:lower:]')"

	if [[ "$tmp" = "y" ]] ||\
		[[ "$tmp" = "yes" ]]
	then
		einfo "Resetting permissions to defaults..."

		for x in spool run lib log; do
			chown -R asterisk:asterisk "${ROOT}"var/${x}/asterisk
			chmod -R u=rwX,g=rwX,o=    "${ROOT}"var/${x}/asterisk
		done

		chown -R root:asterisk  "${ROOT}"etc/asterisk
		chmod -R u=rwX,g=rwX,o= "${ROOT}"etc/asterisk

		einfo "done"
	else
		einfo "skipping"
	fi
}
