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

EAPI=5

WANT_AUTOMAKE="1.9"

MY_PV=${PV/_rc/.rc}
MY_PV=${MY_PV/_a/.a}

inherit eutils multilib autotools depend.apache

DESCRIPTION="389 Directory Server (admin)"
HOMEPAGE="http://port389.org/"
SRC_URI="http://directory.fedoraproject.org/sources/${PN}-${MY_PV}.tar.bz2"

LICENSE="GPL-2 Apache-2.0"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="debug ipv6 selinux"

# TODO snmp agent init script

COMMON_DEPEND=">=app-admin/389-admin-console-1.1.0
	>=app-admin/389-ds-console-1.1.0
	app-misc/mime-types
	dev-libs/389-adminutil
	dev-libs/cyrus-sasl
	dev-libs/icu:=
	dev-libs/nss[utils]
	|| ( <=dev-libs/nspr-4.8.3-r3[ipv6?] >=dev-libs/nspr-4.8.4 )
	dev-libs/svrcore
	net-analyzer/net-snmp[ipv6?]
	net-nds/openldap
	selinux? (
		sys-apps/checkpolicy
		sys-apps/policycoreutils
	)
	>=sys-libs/db-4.2.52
	sys-libs/pam
	sys-apps/tcp-wrappers[ipv6?]
	www-apache/mod_nss
	www-servers/apache:2[apache2_modules_actions,apache2_modules_alias,apache2_modules_auth_basic,apache2_modules_authz_default,apache2_modules_cgi,apache2_modules_mime_magic,apache2_modules_rewrite,apache2_modules_setenvif,suexec,threads]"
RDEPEND="
	${COMMON_DEPEND}
	www-client/lynx
	selinux? ( sec-policy/selinux-base-policy )
"
DEPEND="sys-apps/sed ${COMMON_DEPEND}"

S="${WORKDIR}/${PN}-${MY_PV}"

need_apache2

src_prepare() {
	# as per 389 documentation, when 64bit, export USE_64
	use amd64 && export USE_64=1

	epatch "${FILESDIR}/1.1.11_rc1/0001-gentoo-apache-names.patch"
	epatch "${FILESDIR}/1.1.11_rc1/0003-find-mod_nss.m4.patch"
	epatch "${FILESDIR}/1.1.11_rc1/0004-rpath-fix.configure.ac.patch"
	# Configuration fixes
	epatch "${FILESDIR}/${PN}-cfgstuff-1.patch"

	sed -e "s!SUBDIRS!# SUBDIRS!g" -i Makefile.am || die "sed failed"
	# Setup default user/group, in this case it's dirsrv
	sed -e "s!nobody!dirsrv!g" -i configure.ac || die "sed failed"

	eautoreconf
}

src_configure() {
	# stub autoconf triplet  :(
	local myconf=""
	use debug && myconf="--enable-debug"
	use selinux &&  myconf="${myconf} --with-selinux"

	econf \
		--enable-threading \
		--disable-rpath \
		--with-adminutil=/usr \
		--with-apr-config \
		--with-apxs=${APXS} \
		--with-fhs \
		--with-httpd=${APACHE_BIN} \
		--with-openldap \
		${myconf} || die "econf failed"
}

src_install () {

	emake DESTDIR="${D}" install || die "emake failed"
	keepdir /var/log/dirsrv/admin-serv

	# remove redhat style init script.
	rm -rf "${D}"/etc/rc.d
	rm -rf "${D}"/etc/default

	# install gentoo style init script.
	newinitd "${FILESDIR}"/${PN}.initd ${PN}
	newconfd "${FILESDIR}"/${PN}.confd ${PN}

	# remove redhat style wrapper scripts
	# and install gentoo scripts.
	rm -rf "${D}"/usr/sbin/*-ds-admin
	dosbin "${FILESDIR}"/*-ds-admin || die "cannot install gentoo start/stop scripts"

	# In this version build systems for modules is delete :(
	# manually install modules, not using apache-modules eclass
	# because use bindled library

	# install mod_admserv
	exeinto "${APACHE_MODULESDIR}"
	doexe "${S}/.libs"/mod_admserv.so || die "internal ebuild error: mod_admserv not found"

	insinto "${APACHE_MODULES_CONFDIR}"
	newins "${FILESDIR}/1.1.11_rc1"/48_mod_admserv.conf 48_mod_admserv \
				|| die "internal ebuild error: 48_mod_admserv.conf not found"

	# install mod_restard
	exeinto "${APACHE_MODULESDIR}"
	doexe "${S}/.libs"/mod_restartd.so || die "internal ebuild error: mod_restartd  not found"

	insinto "${APACHE_MODULES_CONFDIR}"
	newins "${FILESDIR}/1.1.11_rc1"/48_mod_restartd.conf 48_mod_restartd \
		|| die "internal ebuild error: 48_mod_restard.conf not found"

	if use selinux; then
		local POLICY_TYPES="targeted"
		cd "${S}"/selinux || die
		cp /usr/share/selinux/${POLICY_TYPES}/include/Makefile  . || die
		make || die "selinux policy compile failed"
		insinto /usr/share/selinux/${POLICY_TYPES}
		doins -r "${S}/selinux/"*.pp
	fi

}

pkg_postinst() {

	# show setup information
	elog "Once you configured www-servers/apache as written above,"
	elog "you need to run (as root): /usr/sbin/setup-ds-admin.pl"
	elog

	# show security and sysctl info
	elog "It is recommended to setup net.ipv4.tcp_keep_alive_time"
	elog "in /etc/sysctl.conf (or via sysctl -w && sysctl -p) to a reasonable"
	elog "value (in milliseconds) to avoid temporary server congestions"
	elog "from lost client connections"
	elog

	# /etc/security/limits.conf settings
	elog "It is also recommended to fine tune the maximum open files"
	elog "settings inside /etc/security/limits.conf:"
	elog "* soft nofile 2048"
	elog "* hard nofile 4096"
	elog

	elog "To start 389 Directory Server Administration Interface at boot"
	elog "please add 389-admin service to the default runlevel:"
	elog
	elog "    rc-update add 389-admin default"
	elog

	elog "for 389 Directory Server Admin interface to work, you need"
	elog "to setup a FQDN hostname and use it while running /usr/sbin/setup-ds-admin.pl"
	elog

}