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

EAPI=4

inherit eutils user

DESCRIPTION="A statistical-algorithmic hybrid anti-spam filter"
HOMEPAGE="http://dspam.sourceforge.net/"
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz"

LICENSE="AGPL-3"
SLOT="0"
KEYWORDS="amd64 ~arm ~ppc x86"
DRIVERS_IUSE="+hash mysql postgres sqlite"
SCALES_IUSE="small-scale +domain-scale large-scale"
IUSE="clamav daemon debug ldap static-libs syslog virtual-users user-homedirs ${DRIVERS_IUSE} ${SCALES_IUSE}"

DEPEND="
	net-mail/mailbase
	ldap? ( net-nds/openldap )
	mysql? ( >=virtual/mysql-5.0 )
	postgres? ( dev-db/postgresql )
	sqlite? ( dev-db/sqlite:3 )
"
RDEPEND="
	${DEPEND}
	clamav? ( app-antivirus/clamav )
	syslog?	( virtual/logger )
"

# Demands on sane USE flags:
# - find out what driver to use: select at least one
# - if static-libs is set, only one driver may be selected
# - find out what scale to use: select exactly one
# - user-homedirs does not work with virtual-users
REQUIRED_USE="
	|| ( ${DRIVERS_IUSE//+} )
	static-libs? ( ^^ ( ${DRIVERS_IUSE//+} ) )
	^^ ( ${SCALES_IUSE//+} )
	virtual-users? ( !user-homedirs )
"

# dspam setup defaults
DSPAM_HOME=/var/spool/dspam
DSPAM_CONF=/etc/dspam
DSPAM_LOG=/var/log/dspam
DSPAM_MODE=2510
DSPAM_DRIVERS=
DSPAM_DRIVERS_EXTRAS=

pkg_setup() {
	# setup storage, this sets DSPAM_DRIVERS
	dspam_setup_storage_drivers

	# create dspam user and group
	dspam_setup_user
}

src_configure() {
	econf \
		--sysconfdir=${DSPAM_CONF} \
		--with-dspam-home=${DSPAM_HOME} \
		--with-dspam-home-group=dspam \
		--with-dspam-mode=${DSPAM_MODE} \
		--with-dspam-group=dspam \
		--with-logdir=${DSPAM_LOG} \
		--enable-external-lookup \
		--enable-long-usernames \
		--enable-split-configuration \
		$(use_enable clamav) \
		$(use_enable daemon) \
		$(use_enable debug) \
		$(use_enable debug bnr-debug) \
		$(use_enable debug verbose-debug) \
		$(use_enable domain-scale) \
		$(use_enable large-scale) \
		$(use_enable static-libs static) \
		$(use_enable syslog) \
		$(use_enable user-homedirs homedir) \
		$(use_enable virtual-users) \
		--with-storage-driver=${DSPAM_DRIVERS} ${DSPAM_DRIVERS_EXTRAS} \
		$(use mysql || use postgres && echo "--enable-preferences-extension") \
		$(use syslog || echo "--with-logfile=${DSPAM_LOG}/dspam.log")
}

dspam_setup_user() {
	# DSPAM CGI web gui (www-apps/dspam-web) needs to run as a regular user
	# under suexec in apache, so DSPAM user/group need to be regular users too

	local euid egid
	for euid in {1000..5000} ; do
		[ -z "$(egetent passwd ${euid})" ] && break
	done
	for egid in {1000..5000} ; do
		[ -z "$(egetent group ${egid})" ] && break
	done
	enewgroup dspam ${egid}
	enewuser dspam ${euid} -1 "${DSPAM_HOMEDIR}" dspam,mail
}

dspam_setup_storage_drivers() {
	# Find out which storage drivers need to be enabled, and set some
	# variables so that src_configure can pick them up

	if use hash; then
		DSPAM_DRIVERS+=",hash_drv"
	fi

	if use mysql; then
		DSPAM_DRIVERS+=",mysql_drv"
		DSPAM_DRIVERS_EXTRAS+="--with-mysql-includes=/usr/include/mysql "
	fi

	if use postgres; then
		DSPAM_DRIVERS+=",pgsql_drv"
	fi

	if use sqlite; then
		DSPAM_DRIVERS+=",sqlite3_drv"
	fi

	if ! use static-libs; then
		# set the driver name twice to avoid a static build
		DSPAM_DRIVERS+=${DSPAM_DRIVERS}
	fi

	# remove first comma separator
	DSPAM_DRIVERS=${DSPAM_DRIVERS:1}
	einfo "Building with drivers: ${DSPAM_DRIVERS}"
	#echo DSPAM_DRIVERS_EXTRAS=$DSPAM_DRIVERS_EXTRAS
}

src_install() {
	default

	if use daemon; then
		newinitd "${FILESDIR}/dspam.initd" dspam
		newconfd "${FILESDIR}/dspam.confd" dspam
	fi

	if use mysql; then
		insinto "/usr/share/${PN}/mysql"

		local files="mysql_objects-4.1.sql mysql_objects-space.sql mysql_objects-speed.sql purge-4.1.sql purge.sql"
		if use virtual-users; then
			files+=" virtual_user_aliases.sql virtual_users.sql"
		fi

		for file in $files; do
			doins src/tools.mysql_drv/${file}
		done
	fi

	if use postgres; then
		insinto "/usr/share/${PN}/pgsql"

		local files="pgsql_objects.sql purge-pe.sql purge.sql"
		if use virtual-users; then
			files+=" virtual_users.sql"
		fi

		for file in $files; do
			doins src/tools.pgsql_drv/${file}
		done
	fi

	if use sqlite; then
		insinto "/usr/share/${PN}/sqlite"
		newins src/tools.sqlite_drv/purge-3.sql purge.sql
	fi

	insinto "${DSPAM_HOME}/txt"
	doins txt/*.txt
	for i in spam nonspam; do
		echo "Scanned and tagged with DSPAM ${PV} on Gentoo Linux as ${i} by ISP" > "${T}/msgtag.${i}"
		doins "${T}/msgtag.${i}"
	done

	newbin contrib/dspam_maintenance/dspam_maintenance.sh dspam_maintenance
	exeinto /etc/cron.daily
	newexe "${FILESDIR}/dspam.cron-r4" dspam

	insinto /etc/logrotate.d
	newins "${FILESDIR}/dspam.logrotate" dspam

	dodoc CHANGELOG README* RELEASE.NOTES UPGRADING doc/*.txt

	# stop logrotate-3.8 from complaining
	dodir /var/log/dspam
	fowners dspam:dspam /var/log/dspam
	fperms 0750 /var/log/dspam

	# Install dspamc setgid
	fowners root:dspam /usr/bin/dspamc &&
		fperms g+s /usr/bin/dspamc ||
		die "failed to alter dspamc owner:group or mode"
}

pkg_preinst() {
	# dspam-3.10.0: config dir change, should be removed at some later point
	if [ -d "${ROOT}/etc/mail/dspam" ]; then
		ewarn "The configuration directory of DSPAM has been relocated from /etc/mail/dspam to ${DSPAM_CONF}."
		if [ -h "${ROOT}${DSPAM_CONF}" ]; then
			# symlink, this is the setup in older ebuilds
			ewarn "Moving contents of /etc/mail/dspam to ${DSPAM_CONF} ..."
			rm "${ROOT}${DSPAM_CONF}" && mv "${ROOT}/etc/mail/dspam" "${DSPAM_CONF}"
			eend $?

		elif [ -d "${ROOT}${DSPAM_CONF}" ]; then
			# directory and no symlink, do it manually since we cannot decide.
			ewarn "You have both /etc/mail/dspam and ${DSPAM_CONF} directories, please delete the former."

		else
			# nothing interesting in /etc/dspam
			ewarn "Moving contents of /etc/mail/dspam to ${DSPAM_CONF} ..."
			mv "${ROOT}/etc/mail/dspam" "${DSPAM_CONF}"
			eend $?
		fi
	fi
}