PORTNAME=	powerdns
DISTVERSION=	5.1.2
CATEGORIES=	dns
MASTER_SITES=	https://downloads.powerdns.com/releases/
DISTNAME=	pdns-${DISTVERSION}

MAINTAINER=	tremere@cainites.net
COMMENT=	Advanced DNS server with multiple backends including SQL
WWW=		https://www.powerdns.com/auth.html

LICENSE=	GPLv2

NOT_FOR_ARCHS=	i386
NOT_FOR_ARCHS_REASON=	archs with 32-bits time_t are no longer supported by upstream

BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}pyyaml>0:devel/py-pyyaml@${PY_FLAVOR}
LIB_DEPENDS=	libboost_program_options.so:devel/boost-libs \
		libcurl.so:ftp/curl \
		libsodium.so:security/libsodium

USES=		compiler:c++17-lang cpe libtool localbase meson pkgconfig \
		python:build ssl tar:bzip2

USE_RC_SUBR=	pdns

MESON_ARGS=	--datadir=${PREFIX}/share/doc \
		--libdir=${PREFIX}/lib \
		--sysconfdir=${PREFIX}/etc/pdns \
		-Ddns-over-tls=enabled \
		-Dhardening=disabled \
		-Dipcipher=enabled \
		-Dmodule-bind=dynamic \
		-Dsigners-libcrypto-path=${OPENSSLBASE} \
		-Dsigners-libcrypto=enabled \
		-Dsigners-libsodium=enabled \
		-Dsystemd-service=disabled \
		-Dtls-libssl-dir=${OPENSSLBASE} \
		-Dtls-libssl=enabled

DOCSDIR=	${PREFIX}/share/doc/pdns
BINARY_ALIAS=	python3=${PYTHON_CMD}
SUB_FILES=	pkg-message

USERS=		pdns
GROUPS=		pdns

OPTIONS_DEFINE=		DOCS EXAMPLES GEOIP GNUTLS IXFRDIST LMDB LUABACKEND \
			MYSQL OPENLDAP PGSQL REMOTE SQLITE3 TINYDNS TOOLS \
			UNIXODBC ZEROMQ
OPTIONS_DEFAULT=	LMDB LUA MYSQL PGSQL SQLITE3
OPTIONS_SINGLE=		EXTLUA
OPTIONS_SINGLE_EXTLUA=	LUA LUAJIT

OPTIONS_SUB=	yes

EXTLUA_DESC=		Lua library
GEOIP_DESC=		GeoIP backend (GeoIP2 DB)
GNUTLS_DESC=		DoT support via GnuTLS (sdig only)
IXFRDIST_DESC=		Build ixfrdist
LMDB_DESC=		LMDB backend
LUABACKEND_DESC=	Lua2 backend
LUAJIT_DESC=		Use luajit
LUA_DESC=		Use lang/lua
MYSQL_DESC=		MySQL backend
OPENLDAP_DESC=		OpenLDAP backend
PGSQL_DESC=		PostgreSQL backend
REMOTE_DESC=		Remote backend
SQLITE3_DESC=		SQLite 3 backend
TINYDNS_DESC=		TinyDNS backend
TOOLS_DESC=		Build extra tools
ZEROMQ_DESC=		Enable ZeroMQ connector (Implies REMOTE enabled)

GEOIP_LIB_DEPENDS=	libmaxminddb.so:net/libmaxminddb \
			libyaml-cpp.so:devel/yaml-cpp
GEOIP_MESON_ON=		-Dmodule-geoip=dynamic
GEOIP_VARS=		MODULES+=geoip

GNUTLS_LIB_DEPENDS=	libgnutls.so:security/gnutls
GNUTLS_MESON_ENABLED=	tls-gnutls

IXFRDIST_LIB_DEPENDS=	libyaml-cpp.so:devel/yaml-cpp
IXFRDIST_MESON_TRUE=	tools-ixfrdist

LMDB_LIB_DEPENDS=	libboost_serialization.so:devel/boost-libs \
			liblmdb.so:databases/lmdb
LMDB_MESON_ON=		-Dmodule-lmdb=dynamic
LMDB_VARS=		MODULES+=lmdb

LUABACKEND_MESON_ON=	-Dmodule-lua2=dynamic
LUABACKEND_MESON_TRUE=	lua-records
LUABACKEND_VARS=	MODULES+=lua2

LUAJIT_USES=		luajit
LUAJIT_MESON_ON=	-Dlua=luajit

LUA_USES=	lua
LUA_MESON_ON=	-Dlua=lua

MYSQL_LIB_DEPENDS=	libunwind.so:devel/libunwind
MYSQL_USES=		mysql
MYSQL_MESON_ON=		-Dmodule-gmysql=dynamic
MYSQL_VARS=		MODULES+=gmysql

OPENLDAP_BUILD_DEPENDS=	krb5>=0:security/krb5
OPENLDAP_LIB_DEPENDS=	libkrb5.so:security/krb5
OPENLDAP_USES=		ldap
OPENLDAP_MESON_ON=	-Dmodule-ldap=dynamic
OPENLDAP_CXXFLAGS=	-DLDAP_DEPRECATED=1
OPENLDAP_VARS=		MODULES+=ldap

PGSQL_USES=	pgsql
PGSQL_MESON_ON=	-Dmodule-gpgsql=dynamic
PGSQL_VARS=	MODULES+=gpgsql

REMOTE_MESON_ON=	-Dmodule-remote=dynamic
REMOTE_VARS=		MODULES+=remote

SQLITE3_USES=		sqlite:3
SQLITE3_MESON_ON=	-Dmodule-gsqlite3=dynamic
SQLITE3_VARS=		MODULES+=gsqlite3

TINYDNS_LIB_DEPENDS=	libcdb.so:databases/tinycdb
TINYDNS_MESON_ON=	-Dmodule-tinydns=dynamic
TINYDNS_VARS=		MODULES+=tinydns

TOOLS_MESON_TRUE=	tools

UNIXODBC_LIB_DEPENDS=	libodbc.so:databases/unixODBC
UNIXODBC_MESON_ON=	-Dmodule-godbc=dynamic
UNIXODBC_VARS=		MODULES+=godbc

ZEROMQ_IMPLIES=		REMOTE
ZEROMQ_LIB_DEPENDS=	libzmq.so:net/libzmq4
ZEROMQ_MESON_TRUE=	module-remote-zeromq

post-install::
.for bin in dnsdemog kvresp
	@${RM} ${STAGEDIR}${PREFIX}/bin/${bin}
.endfor
	@${MKDIR} ${STAGEDIR}${EXAMPLESDIR} ${STAGEDIR}/var/run/pdns
	@${STAGEDIR}${PREFIX}/sbin/pdns_server --module-dir=${STAGEDIR}${PREFIX}/lib/pdns \
		--launch="pipe bind ${MODULES}" --config > ${STAGEDIR}${EXAMPLESDIR}/pdns.conf
	@${REINPLACE_CMD} -e 's;${STAGEDIR};;' -i '' ${STAGEDIR}${EXAMPLESDIR}/pdns.conf

.include <bsd.port.mk>
