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

EAPI=5

inherit depend.apache eutils

DESCRIPTION="A performance data analyzer for nagios"
HOMEPAGE="http://www.pnp4nagios.org/"
SRC_URI="mirror://sourceforge/${PN}/PNP-0.6/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
IUSE=""
KEYWORDS="~amd64 ~ppc ~ppc64 ~sparc ~x86"

# A lot of things (sync mode, for one) are broken with nagios-4.x.
DEPEND="
	dev-lang/php:*[filter,gd,json,simplexml,xml,zlib]
	>=net-analyzer/rrdtool-1.2[graph,perl]
	|| ( <net-analyzer/nagios-core-4 net-analyzer/icinga net-analyzer/icinga2 )"

# A list of modules used in our Apache config file.
APACHE_MODS="apache2_modules_alias,"       # "Alias" directive
APACHE_MODS+="apache2_modules_authz_core," # "Require" directive
APACHE_MODS+="apache2_modules_rewrite"     # "RewriteEngine" and friends

RDEPEND="${DEPEND}
	virtual/perl-Getopt-Long
	virtual/perl-Time-HiRes
	media-fonts/dejavu
	apache2? ( >=www-servers/apache-2.4[${APACHE_MODS}] )"

# There is no want_apache2_4, but we needed to specify that manually
# anyway to be able to include the list of modules.
want_apache2

pkg_setup() {
	depend.apache_pkg_setup
}

src_prepare() {
	epatch "${FILESDIR}/${PN}-0.6.14-makefile.patch"
}

src_configure() {
	local var_dir=
	local user_group=

	if has_version net-analyzer/nagios-core; then
		var_dir=/var/nagios/
		user_group=nagios
	elif has_version net-analyzer/icinga2; then
		var_dir=/var/lib/icing2/
		user_group=icinga
	else
		var_dir=/var/lib/icinga/
		user_group=icinga
	fi

	econf \
		--sysconfdir=/etc/pnp \
		--datarootdir=/usr/share/pnp \
		--mandir=/usr/share/man \
		--with-perfdata-dir=${var_dir}/perfdata \
		--with-nagios-user=${user_group} \
		--with-nagios-group=${user_group} \
		--with-perfdata-logfile=${var_dir}/perfdata.log \
		--with-perfdata-spool-dir=/var/spool/pnp
}

src_compile() {
	# The default target just shows a help
	emake all
}

src_install() {
	emake DESTDIR="${D}" install install-config
	newinitd "${FILESDIR}"/npcd.initd npcd
	rm "${D}/usr/share/pnp/install.php" || \
		die "unable to remove ${D}/usr/share/pnp/install.php"

	if use apache2 ; then
		insinto "${APACHE_MODULES_CONFDIR}"
		newins "${FILESDIR}"/98_pnp4nagios-2.4.conf 98_pnp4nagios.conf

		# Allow the apache user to read our config files. This same
		# approach is used in net-analyzer/nagios-core.
		chgrp -R apache "${D}/etc/pnp" \
			|| die "failed to change group of ${ROOT}etc/pnp"
	fi

	# Bug 430358 - CVE-2012-3457
	find "${D}/etc/pnp" -type f -exec chmod 0640 '{}' + || \
		die "unable to set file permissions under ${D}/etc/pnp"

	find "${D}/etc/pnp" -type d -exec chmod 0750 '{}' + || \
		die "unable to set directory permissions under ${D}/etc/pnp"
}

pkg_postinst() {
	elog "To enable the pnp4nagios web front-end, please visit"
	elog "${ROOT}etc/conf.d/apache2 and add \"-D PNP -D PHP5\""
	elog "to APACHE2_OPTS. Then pnp4nagios will be available at,"
	elog
	elog "  http://localhost/pnp4nagios"
	elog
}
