# New ports collection makefile for:    quagga
# Date created:         3 September 2003
# Whom:                 Bruce M Simpson <bms@FreeBSD.org>
#
# $FreeBSD: ports/net/quagga/Makefile,v 1.16 2004/04/08 22:14:05 bms Exp $
#

PORTNAME=	quagga
PORTVERSION=	0.96.4
PORTREVISION=	5
CATEGORIES=	net ipv6
MASTER_SITES=	http://quagga.net/download/

PATCH_SITES=	http://quagga.net/
PATCHFILES=	quagga-bgp_route-wspace.diff

MAINTAINER=	boris@tagnet.ru
COMMENT=	Free RIPv1, RIPv2, OSPFv2, BGP4 route software (server/reflector)

CONFLICTS=	zebra-devel-* zebra-0*

GNU_CONFIGURE=	yes
USE_GMAKE=	yes
USE_SUBMAKE=	yes
WANT_AUTOCONF_VER=	253
WANT_AUTOMAKE_VER=	15
AUTOMAKE_ARGS= -a -i

MAN1=		vtysh.1
MAN8=		bgpd.8 ospf6d.8 ospfd.8 ripd.8 ripngd.8 zebra.8

CONFIGURE_ARGS+=--includedir=${PREFIX}/include/quagga
SCRIPTS_ENV=	WRKDIRPREFIX=${WRKDIRPREFIX} WITH_SNMP_4=${WITH_SNMP_4} \
		SYSCONF_DIR=${SYSCONF_DIR} SYSSTATE_DIR=${SYSSTATE_DIR} \
		ENABLE_USER=${ENABLE_USER} ENABLE_GROUP=${ENABLE_GROUP}

pre-fetch:
	@${SETENV} ${SCRIPTS_ENV} ${SH} ${SCRIPTDIR}/configure.quagga

.if exists(${WRKDIRPREFIX}${.CURDIR}/Makefile.inc)
.include "${WRKDIRPREFIX}${.CURDIR}/Makefile.inc"
.endif

.if ${CONFIGURE_ARGS:M--enable-opaque-lsa} != ""
PLIST_SUB+=	OSPFAPI_HEADER="include/quagga/ospfapi/ospf_apiclient.h"
PLIST_SUB+=	OSPFAPI_PATH="@dirrm include/quagga/ospfapi"
.else
PLIST_SUB+=	OSPFAPI_HEADER=
PLIST_SUB+=	OSPFAPI_PATH=
.endif

.if !defined(ENABLE_USER)
ENABLE_USER=quagga
.endif
.if !defined(ENABLE_GROUP)
ENABLE_GROUP=quagga
.endif

CONFIGURE_ARGS+=--enable-user=${ENABLE_USER}
CONFIGURE_ARGS+=--enable-group=${ENABLE_GROUP}

.if !defined(SYSCONF_DIR)
SYSCONF_DIR=${PREFIX}/etc/quagga
.endif
.if !defined(LOCALSTATE_DIR)
LOCALSTATE_DIR=/var/run/quagga
.endif

CONFIGURE_ARGS+=--sysconfdir=${SYSCONF_DIR}
CONFIGURE_ARGS+=--localstatedir=${LOCALSTATE_DIR}

.if defined(ENABLE_VTY_GROUP)
CONFIGURE_ARGS+=--enable-vty-group=${ENABLE_VTY_GROUP}
.endif

CONFIGURE_ARGS+=--enable-vtysh

.include <bsd.port.pre.mk>

.if ${OSVERSION} >= 500038
RC_SUBR?=	${DESTDIR}/etc/rc.subr
RC_DIR=		${DESTDIR}/etc/rc.d
RC_SUFX=
.else
USE_RC_SUBR=	yes
RC_DIR=		${PREFIX}/etc/rc.d
RC_SUFX=	.sh
.endif

QUAGGA_SCRIPTS=	zebra ripd ripngd ospfd ospf6d bgpd

SED_SCRIPT=	-e 's,%%PREFIX%%,${PREFIX},g' \
		-e 's,%%SYSCONF_DIR%%,${SYSCONF_DIR},g' \
		-e 's,%%LOCALSTATE_DIR%%,${LOCALSTATE_DIR},g' \
		-e 's,%%RC_SUBR%%,${RC_SUBR},g' \
		-e 's,%%RC_DIR%%,${RC_DIR},g' \
		-e 's,%%RC_SUFX%%,${RC_SUFX},g'

PLIST_SUB+=	RC_DIR=${RC_DIR} \
		RC_SUFX=${RC_SUFX} \
		LOCALSTATE_DIR=${LOCALSTATE_DIR} \
		ENABLE_USER=${ENABLE_USER} \
		ENABLE_GROUP=${ENABLE_GROUP}

pre-everything::
	@${ECHO} "============================================================="
	@${ECHO}
	@${ECHO} "You can build ${PORTNAME} with the following options:"
	@${ECHO}
	@${ECHO} "WITH_SNMP_4       Force net-snmp 4.x to be used"
	@${ECHO} "ENABLE_USER       Specify user to run Quagga suite as"
	@${ECHO} "ENABLE_GROUP      Specify group to run Quagga suite as"
	@${ECHO} "ENABLE_VTY_GROUP  Specify group for vty socket ownership"
	@${ECHO} "SYSCONF_DIR       Specify directory for Quagga configuration files"
	@${ECHO} "LOCALSTATE_DIR    Specify directory for Quagga runtime files"
	@${ECHO}
	@${ECHO} "The following options may be configured interactively:"
	@${ECHO} "QUAGGA_OPTIONS    Specify additional switches, including:"
	@${ECHO} "   LIBPAM           PAM authentication for vtysh"
	@${ECHO} "   OSPF_NSSA        NSSA support (RFC1587)"
	@${ECHO} "   OSPF_OPAQUE_LSA  OSPF Opaque-LSA with OSPFAPI support (RFC2370)"
	@${ECHO} "   RTADV            IPv6 Router Advertisements"
	@${ECHO} "   SNMP             SNMP support"
	@${ECHO} "   TCPSOCKETS       Use TCP/IP sockets for protocol daemons"

pre-configure:
	@(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOMAKE_ENV} ${ACLOCAL} )
	@(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOHEADER_ENV} ${AUTOHEADER} \
		${AUTOHEADER_ARGS})
	-@(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOMAKE_ENV} ${AUTOMAKE} \
		${AUTOMAKE_ARGS})
	@(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOCONF_ENV} ${AUTOCONF} \
		${AUTOCONF_ARGS})

post-build:
	@${SED} ${SED_SCRIPT} ${FILESDIR}/quagga.sh > ${WRKDIR}/quagga.sh

post-install:
	@${SETENV} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL
	@${ECHO} "===>     installing ${PORTNAME} startup file..."
	@${ECHO} "Add the folliwing lines to /etc/rc.conf to enable quagga:"
	@${ECHO} ""
	@${ECHO} "defaultrouter=\"NO\""
	@${ECHO} "quagga_enable=\"YES\""
	@${ECHO} "Also You may want to set router_enable=\"NO\""
	@${ECHO} ""
	@${ECHO} "Note!!! Since 0.96_5 port uses new id for quagga user and group."
	@${ECHO} "        So, You need to manually chown files:"
	@${ECHO} "        in ${SYSCONF_DIR}"
	@${ECHO} "        and ${LOCALSTATE_DIR}"
	@${ECHO} "        if You had never do this before. Or run"
	@${ECHO} "        make changeuser"
	@${ECHO} ""
	@${INSTALL_SCRIPT} ${WRKDIR}/quagga.sh ${RC_DIR}/quagga${RC_SUFX}

.if !defined(BATCH)
post-clean:
	@${RM} -f ${WRKDIRPREFIX}${.CURDIR}/Makefile.inc
.endif

changeuser:
# Recover from the problem that earlier versions of this port created the
# quagga pseudo-user with an id of 90 which is used by FireBird database
# engine. The port now uses id 101:101.
# NOTE:
# This target assumes that ENABLE_GROUP is the primary group of ENABLE_USER. If you
# have a different setup, do not run this target!
	@if [ `${ID} -u` -ne 0 ]; \
	then ${ECHO_CMD} "Sorry, you must be root to use this target."; exit 1; fi; \
	current_uid=`id -u ${ENABLE_USER}`; \
	current_gid=`pw groupshow ${ENABLE_GROUP}|cut -f 3 -d :`; \
	${ECHO_CMD} "I will remove this user:"; \
	${ID} -P $${current_uid}; \
	${ECHO_CMD} "and this group:"; \
	pw groupshow ${ENABLE_GROUP}; \
	${ECHO_CMD} "I will then re-create them with a user and group id of 101."; \
	${ECHO_CMD} "Then all files and directories under ${PREFIX} and /var that"; \
	${ECHO_CMD} "are owned by uid $${current_uid} will be chown(1)'ed."; \
	${ECHO_CMD} "After that, all files and directories that were accessible"; \
	${ECHO_CMD} "by group $${current_gid} will chgrp(1)'ed respectively."; \
	${ECHO_CMD} "Note that this assumes group '${ENABLE_GROUP}' to be the primary"; \
	${ECHO_CMD} "group of user '${ENABLE_USER}'. If you have a different setup"; \
	${ECHO_CMD} "please abort this target now. Also don't forget to write your"; \
	${ECHO_CMD} "Quagga configs right now!"; \
	read -p "Press RETURN to continue or CTRL-C to abort:" dummy ; \
	${ECHO_CMD} "OK, here we go:"; \
	${ECHO_CMD} "deleting user $${current_uid} and his primary group..."; \
	pw userdel -u $${current_uid}; \
	${ECHO_CMD} "adding user ${ENABLE_USER} with id 101..."; \
	pw groupadd -n ${ENABLE_USER} -g 101; \
	pw useradd -n ${ENABLE_GROUP} -u 101 -c "quagga route daemon pseudo-user" \
	    -d ${SYSCONF_DIR} -s /sbin/nologin -h - ; \
	${ECHO_CMD} "chown(1)'ing everything under ${PREFIX} from $${current_uid} to 101..."; \
	${FIND} -H ${PREFIX} -user $${current_uid} -exec ${CHOWN} 101 {} \; ; \
	${ECHO_CMD} "chgrp(1)'ing everything under ${PREFIX} from $${current_gid} to 100..."; \
	${FIND} -H ${PREFIX} -group $${current_gid} -exec ${CHOWN} :101 {} \; ; \
	${ECHO_CMD} "chown(1)'ing everything under /var from $${current_uid} to 101..."; \
	${FIND} -H /var -user $${current_uid} -exec ${CHOWN} 101 {} \; ; \
	${ECHO_CMD} "chgrp(1)'ing everything under /var from $${current_gid} to 101..."; \
	${FIND} -H /var -group $${current_gid} -exec ${CHOWN} :101 {} \; ; \
	${ECHO_CMD} "Finished. You must stop and then start Quagga now."

.include <bsd.port.post.mk>
