# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-analyzer/nagios-plugins/nagios-plugins-1.4.16-r2.ebuild,v 1.10 2012/12/16 17:26:59 armin76 Exp $

EAPI=4

PATCHSET=2

inherit autotools eutils multilib user

DESCRIPTION="Nagios $PV plugins - Pack of plugins to make Nagios work properly"
HOMEPAGE="http://www.nagios.org/"
SRC_URI="mirror://sourceforge/nagiosplug/${P}.tar.gz
	http://dev.gentoo.org/~flameeyes/${PN}/${P}-patches-${PATCHSET}.tar.xz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="*"
IUSE="+ssl samba mysql postgres ldap snmp nagios-dns nagios-ntp nagios-ping nagios-ssh nagios-game ups ipv6 radius +suid jabber gnutls sudo smart"

DEPEND="ldap? ( >=net-nds/openldap-2.0.25 )
	mysql? ( virtual/mysql )
	postgres? ( dev-db/postgresql-base )
	ssl? (
		!gnutls? ( >=dev-libs/openssl-0.9.6g )
		gnutls? ( net-libs/gnutls )
	)
	radius? ( >=net-dialup/radiusclient-0.3.2 )"

# tests try to ssh into the box itself
RESTRICT="test"

RDEPEND="${DEPEND}
	>=dev-lang/perl-5.6.1-r7
	samba? ( >=net-fs/samba-2.2.5-r1 )
	snmp? ( >=dev-perl/Net-SNMP-4.0.1-r1 )
	mysql? ( dev-perl/DBI
			 dev-perl/DBD-mysql )
	nagios-dns? ( >=net-dns/bind-tools-9.2.2_rc1 )
	nagios-ntp? ( >=net-misc/ntp-4.1.1a )
	nagios-ping? ( >=net-analyzer/fping-2.4_beta2-r1 )
	nagios-ssh? ( >=net-misc/openssh-3.5_p1 )
	ups? ( >=sys-power/nut-1.4 )
	nagios-game? ( >=games-util/qstat-2.6 )
	jabber? ( >=dev-perl/Net-Jabber-2.0 )
	sudo? ( >=app-admin/sudo-1.8.5 )
	smart? ( sys-apps/smartmontools )"

REQUIRED_USE="smart? ( sudo )"

pkg_setup() {
	enewgroup nagios
	enewuser nagios -1 /bin/bash /var/nagios/home nagios
}

src_prepare() {
	epatch "${WORKDIR}"/patches/*.patch

	eautoreconf
}

src_configure() {
	local myconf
	if use ssl; then
		myconf+="
			$(use_with !gnutls openssl /usr)
			$(use_with gnutls gnutls /usr)"
	else
		myconf+=" --without-openssl --without-gnutls"
	fi

	econf \
		$(use_with mysql) \
		$(use_with ipv6) \
		$(use_with ldap) \
		$(use_with radius) \
		$(use_with postgres pgsql /usr) \
		${myconf} \
		--libexecdir=/usr/$(get_libdir)/nagios/plugins \
		--sysconfdir=/etc/nagios
}

DOCS=( ACKNOWLEDGEMENTS AUTHORS BUGS CODING ChangeLog FAQ NEWS README REQUIREMENTS SUPPORT THANKS )

src_install() {
	default

	local nagiosplugindir=/usr/$(get_libdir)/nagios/plugins

	use suid && fperms 04710 ${nagiosplugindir}/check_{icmp,ide_smart,dhcp}

	if use sudo; then
		cat - > "${T}"/50${PN} <<EOF
# we add /bin/false so that we don't risk causing syntax errors if all USE flags
# are off as we'd end up with an empty set
Cmnd_Alias NAGIOS_PLUGINS_CMDS = /bin/false $(use smart && echo ", /usr/sbin/smartctl")
User_Alias NAGIOS_PLUGINS_USERS = nagios, icinga

NAGIOS_PLUGINS_USERS ALL=(root) NOPASSWD: NAGIOS_PLUGINS_CMDS
EOF

		insinto /etc/sudoers.d
		doins "${T}"/50${PN}
	fi

	cd contrib/
	dodoc *README*

	# remove stuff that is way too broken to fix, or for which the USE
	# flag has been removed.
	rm -r tarballs aix \
		check_compaq_insight.pl *.c *README* \
		$(usex !jabber nagios_sendim.pl) \
		$(usex !smart check_smart.pl)

	# fix perl interpreter
	sed -i -e '1s:/usr/local/bin/perl:/usr/bin/perl:' \
		"${S}"/contrib/* || die

	exeinto ${nagiosplugindir}/contrib
	doexe *

	dosym ../utils.sh ${nagiosplugindir}/contrib/utils.sh
	dosym ../utils.pm ${nagiosplugindir}/contrib/utils.pm

	# enforce permissions/owners (seem to trigger only in some case)
	chown -R root:nagios "${D}${nagiosplugindir}" || die
	chmod -R o-rwx "${D}${nagiosplugindir}" || die
}

pkg_postinst() {
	elog "This ebuild has a number of USE flags which determines what nagios is able to monitor."
	elog "Depending on what you want to monitor with nagios, some or all of these USE"
	elog "flags need to be set for nagios to function correctly."
	elog "contrib plugins are installed into /usr/$(get_libdir)/nagios/plugins/contrib"
}
