#!/bin/sh
# $FreeBSD$

if [ -f ${WRKDIRPREFIX}${REALCURDIR}/Makefile.inc ]; then
	exit
fi

tempfile=`mktemp -t checklist`

if [ "${BATCH}" ]; then
	if [ "${WITH_DB3}" ]; then
		OPTIONS="\"DB3\""
	else
		OPTIONS="\"NDBM\""
	fi
	if [ "${WITH_JAVA}" ]; then
		OPTIONS="${OPTIONS} \"JAVA\""
	fi
	if [ "${WITH_MYSQL}" ]; then
		OPTIONS="${OPTIONS} \"MySQL\""
	fi
	if [ "${WITH_LDAP2}" ]; then
		OPTIONS="${OPTIONS} \"OpenLDAP2\""
	elif [ "${WITH_LDAP1}" ]; then
		OPTIONS="${OPTIONS} \"OpenLDAP1\""
	fi
	if [ "${OPTIONS}" != "x" ]; then
		OPTIONS="${OPTIONS} \"SASLAUTHD\""
		set ${OPTIONS}
	fi
else
	if [ "${WITH_DB3}" -o -f ${PREFIX}/lib/libdb3.so ] ; then
		SET_DB3="ON"
		SET_NDBM="OFF"
	else
		SET_DB3="OFF"
		SET_NDBM="ON"
	fi
	if [ "${WITH_JAVA}" ] ; then
		SET_JAVA="ON"
	else
		SET_JAVA="OFF"
	fi
	if [ "${WITH_MYSQL}" -o -f ${PREFIX}/lib/mysql/libmysqlclient.so ] ; then
		SET_MYSQL="ON"
	else
		SET_MYSQL="OFF"
	fi

	#Prefer LDAP2 over LDAP1
	SET_LDAP1="OFF"
	SET_LDAP2="OFF"
	if [ "${WITH_LDAP2}" -o -f ${PREFIX}/lib/libldap-2.2.so -a -f ${PREFIX}/lib/liblber-2.2.so ] ; then
		SET_LDAP2="ON"
	elif [ "${WITH_LDAP1}" -o -f ${PREFIX}/lib/libldap.so.1 -a -f ${PREFIX}/lib/liblber.so.1 ]; then
		SET_LDAP1="ON"
	fi

	/usr/bin/dialog --title "Additional Cyrus SASL options" --clear \
		--checklist "\n\
Please select desired options:" -1 -1 16 \
NDBM		"ndbm DB" ${SET_NDBM} \
DB3		"Berkeley DB, revision 3" ${SET_DB3} \
JAVA		"JavaSASL [Experimental]" ${SET_JAVA} \
MySQL		"MySQL password Authentication" ${SET_MYSQL} \
OpenLDAP1	"OpenLDAP 1.x password Authentication" ${SET_LDAP1} \
OpenLDAP2	"OpenLDAP 2.x password Authentication w/TLS" ${SET_LDAP2} \
PWCHECK		"Use pwcheck for password Authentication" OFF \
PAMPWCHECK	"Use pwcheck_pam for password Authentication" OFF \
SASLAUTHD	"Use saslauthd for password Authentication" ON \
2> $tempfile

	retval=$?

	if [ -s $tempfile ]; then
		set `cat $tempfile`
	fi
	rm -f $tempfile

	case $retval in
		0)	if [ -z "$*" ]; then
				echo "Nothing selected"
				OPTIONS="\"NDBM\""
				set ${OPTIONS}
			fi
			;;
		1)	echo "Cancel pressed."
			exit 1
			;;
	esac
fi

${MKDIR} ${WRKDIRPREFIX}${REALCURDIR}
exec > ${WRKDIRPREFIX}${REALCURDIR}/Makefile.inc

echo "PREFIX=			${PREFIX}"

while [ "$1" ]; do
	case $1 in
		\"NDBM\")
			if [ "${DBLIB}" ]; then
				echo "ndbm and db3 are mutually exclusive." > /dev/stderr
				rm -f ${WRKDIRPREFIX}${REALCURDIR}/Makefile.inc
				exit 1
			fi
			echo "CONFIGURE_ARGS+=	--with-dblib=ndbm"
			echo "SASLDB_NAME=	sasldb.db"
			DBLIB=1
			;;
		\"DB3\")
			if [ "${DBLIB}" ]; then
				echo "ndbm and db3 are mutually exclusive." > /dev/stderr
				rm -f ${WRKDIRPREFIX}${REALCURDIR}/Makefile.inc
				exit 1
			fi
			echo "LIB_DEPENDS+=	db3.3:\${PORTSDIR}/databases/db3"
			echo "CONFIGURE_ARGS+=	--with-dblib=berkeley"
			echo "SASLDB_NAME=	sasldb"
			DBLIB=1
			;;
		\"JAVA\")
			echo "BUILD_DEPENDS+=	\${LOCALBASE}/\${JAVADIR}/bin/java:\${PORTSDIR}/java/jdk13"
			echo "RUN_DEPENDS+=	\${LOCALBASE}/\${JAVADIR}/bin/java:\${PORTSDIR}/java/jdk13"
			echo "USE_GMAKE=	yes"
			echo "CONFIGURE_ARGS+=	--enable-java \\"
			echo "			--with-javabase=\${LOCALBASE}/\${JAVADIR}"
			echo "CONFIGURE_ENV+=	JAVAC=\"\${LOCALBASE}/\${JAVADIR}/bin/javac\" \\"
			echo "		JAVAH=\"\${LOCALBASE}/\${JAVADIR}/bin/javah\" \\"
			echo "		JAVADOC=\"\${LOCALBASE}/\${JAVADIR}/bin/javadoc\""
			echo "PLIST_SUB+=	JAVASASL=\"\""
			DEFJAVA=1
			;;
		\"MySQL\")
			echo "LIB_DEPENDS+=	mysqlclient.10:\${PORTSDIR}/databases/mysql323-client"
			echo "CONFIGURE_ARGS+=	--with-mysql=\${PREFIX}"
			MYSQL_REQ=mysql
			MSG=1
			;;
		\"OpenLDAP1\")
			if [ "$OPENLDAP" ]; then
				echo "OpenLDAP1 and OpenLDAP2 are mutually exclusive." > /dev/stderr
				rm -f ${WRKDIRPREFIX}${REALCURDIR}/Makefile.inc
				exit 1
			fi
			echo "LIB_DEPENDS+=	ldap.1:\${PORTSDIR}/net/openldap12"
			echo "LIB_DEPENDS+=	lber.1:\${PORTSDIR}/net/openldap12"
			echo "CONFIGURE_ARGS+=	--with-ldap=\${PREFIX}"
			LDAP_REQ=ldap
			OPENLDAP=1
			MSG=1
			;;
		\"OpenLDAP2\")
			if [ "$OPENLDAP" ]; then
				echo "OpenLDAP1 and OpenLDAP2 are mutually exclusive." > /dev/stderr
				rm -f ${WRKDIRPREFIX}${REALCURDIR}/Makefile.inc
				exit 1
			fi
			echo "LIB_DEPENDS+=	ldap-2.2:\${PORTSDIR}/net/openldap22-client"
			echo "LIB_DEPENDS+=	lber-2.2:\${PORTSDIR}/net/openldap22-client"
			echo "CONFIGURE_ARGS+=	--with-ldap=\${PREFIX}"
			LDAP_REQ=ldap
			OPENLDAP=1
			MSG=1
			;;
		\"PWCHECK\")
			if [ "$PWCHECK" ]; then
				echo "PWCHECK or PAMPWCHECK must be choosen seperately: Defaulting to PAMPWCHECK" > /dev/stderr
			else
				PWCHECK=pwcheck
			fi
			;;
		\"PAMPWCHECK\")
			if [ "$PWCHECK" ]; then
				echo "PWCHECK or PAMPWCHECK must be choosen seperately: Defaulting to PWCHECK" > /dev/stderr
			else
				PWCHECK=pwcheck_pam
			fi
			;;
		\"SASLAUTHD\")
			if [ "$PWCHECK" ]; then
				echo "SASLAUTHD is preferred over PWCHECK: Enabling saslauthd and disabling pwcheck in rc.d scripts" > /dev/stderr
			fi
			SASLAUTHD=1
			;;
		*)
			echo "Invalid option(s): $*" > /dev/stderr
			rm -f ${WRKDIRPREFIX}${REALCURDIR}/Makefile.inc
			exit 1
			;;
	esac
	shift
done

if [ "${SASLAUTHD}" ]; then
	ENABLE_PWCHECK=no
	PWCHECK_METHOD=saslauthd
	ENABLE_SASLAUTHD=yes
	if [ -z "${PWCHECK}" ]; then
		PWCHECK=pwcheck
	fi
else
	if [ "${PWCHECK}" ]; then
		ENABLE_PWCHECK=yes
	else
		ENABLE_PWCHECK=no
		PWCHECK=pwcheck
	fi
	PWCHECK_METHOD=pwcheck
	ENABLE_SASLAUTHD=no
fi

if [ ! "${DEFJAVA}" ]; then
	echo "PLIST_SUB+=	JAVASASL=\"@comment \""
fi
if [ ! "${DBLIB}" ]; then
	echo "CONFIGURE_ARGS+=	--with-dblib=ndbm"
	echo "SASLDB_NAME=	sasldb.db"
fi

echo "PWCHECK=		${PWCHECK}"
echo "PWCHECK_METHOD=		${PWCHECK_METHOD}"
echo "ENABLE_PWCHECK=		${ENABLE_PWCHECK}"
echo "ENABLE_SASLAUTHD=	${ENABLE_SASLAUTHD}"

if [ "${MSG}" ]; then
	if [ -n "${LDAP_REQ}" ]; then
		METHOD="LDAP"

		if [ -n "${MYSQL_REQ}" ]; then
			METHOD="LDAP or MySQL"
		fi
	elif [ -n "${MYSQL_REQ}" ]; then
		METHOD="MySQL"
	fi

	echo "LDAP_MYSQL_MSG=	\"See sysadmin.html in the Cyrus-SASL docs directory for informaion on using ${METHOD} for authentication.\""
fi