# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4

PortSystem      1.0
PortGroup       legacysupport 1.0
PortGroup       compiler_blacklist_versions 1.0

name            bind9
version         9.20.9
revision        0
categories      net
maintainers     {geeklair.net:dluke @danielluke} {jmr @jmroot}
platforms       {darwin >= 11} freebsd sunos
conflicts       bind9.18

description     Domain Name System server
# see https://gitlab.isc.org/isc-projects/bind9/-/blob/main/LICENSE
license         {MPL-2 GPL-2+ LGPL-2.1+ AGPL-3+}

long_description \
                The BIND DNS Server is used on the vast majority of name \
                serving machines on the Internet, providing a robust \
                and stable architecture on top of which an \
                organization's naming architecture can be built. The \
                resolver library included in the BIND distribution \
                provides the standard APIs for translation between domain names \
                and Internet addresses and is intended to be linked with applications \
                requiring name service.

homepage        https://www.isc.org/bind/

distname        bind-${version}
master_sites    isc:${name}/${version}

checksums       rmd160    7f3f5a7a7ced9cf37cf32507012e6ed10722446f \
                sha256    3d26900ed9c9a859073ffea9b97e292c1248dad18279b17b05fcb23c3091f86d \
                size      5668452

use_xz          yes

depends_build   path:bin/pkg-config:pkgconfig

depends_lib     path:lib/libssl.dylib:openssl  \
                path:lib/pkgconfig/libuv.pc:libuv \
                port:libxml2 \
                port:nghttp2 \
                path:lib/pkgconfig/jemalloc.pc:jemalloc \
                port:json-c \
                port:libidn2 \
                port:lmdb \
                port:userspace-rcu

universal_variant \
                no

compiler.c_standard 2011
# Needs stdatomic.h
# Apple clang 15.0.0 from Xcode before 15.2 has a codegen bug that causes a crash in libisc
compiler.blacklist \
                {clang < 703} \
                {clang >= 1500.0.40.1 < 1500.1.0.2.5 }

# https://trac.macports.org/wiki/WimplicitFunctionDeclaration#strchr
configure.checks.implicit_function_declaration.whitelist-append strchr

patchfiles      atomics.patch \
                lib_dns_Makefile.in.patch \
                setrlimit.patch \
                fix-rwlock.patch

# tests require `sudo bin/tests/system/ifconfig.sh up`
test.run        yes
test.target     test

startupitem.create      yes
startupitem.netchange   yes
startupitem.executable  ${prefix}/sbin/named -u named -f

add_users       named group=named

configure.env   STD_CDEFINES=-DDIG_SIGCHASE=1 \
                CC_FOR_BUILD=${configure.cc}
if {${os.platform} eq "darwin" && ${os.major} <= ${legacysupport.newest_darwin_requires_legacy}} {
    configure.env-append    CPPFLAGS_FOR_BUILD=-I${prefix}/include/LegacySupport \
                            CFLAGS_FOR_BUILD=${configure.cc_archflags} \
                            "LDFLAGS_FOR_BUILD=-L${prefix}/lib -lMacportsLegacySupport"
}

# set zonedb to RBTDB to workaround QPzone defect in 9.20.0 -> 9.20.4
configure.args  --disable-silent-rules \
                --mandir=${prefix}/share/man \
                --with-openssl=${prefix} \
                --with-libidn2=${prefix} \
                --enable-doh

platform darwin 8 {
    configure.args-append --with-dlopen=no \
                          --with-gssapi=no
}

platform darwin 9 {
    configure.args-append --with-dlopen=no
}

if {${os.platform} eq "darwin" && ${os.major} < 10} {
    # Until this is fixed: https://trac.macports.org/ticket/65945
    depends_lib-delete \
                path:lib/pkgconfig/jemalloc.pc:jemalloc
    configure.args-append --with-jemalloc=no
}

post-destroot    {
    # Ensure needed directories
    xinstall -o named -g named -m 755 -d \
        ${destroot}${prefix}/var/named \
        ${destroot}${prefix}/var/run/named

    # Install the conf file as a sample
    xinstall -o root -m 644 ${filespath}/named.conf \
        ${destroot}${prefix}/etc/named.conf.dist
    reinplace "s|%%PREFIX%%|${prefix}|g" \
        ${destroot}${prefix}/etc/named.conf.dist

    # Install the db files as samples
    foreach f "db.127.0.0 db.cache db.localhost" {
        xinstall -o named -g named -m 644 ${filespath}/${f} \
            ${destroot}${prefix}/var/named/${f}.dist
    }

    destroot.keepdirs ${destroot}${prefix}/var/run/named
}

notes "******************************************************
* To setup named to run, you need to copy named.conf.dist
* to named.conf:
* sudo cp ${prefix}/etc/named.conf.dist ${prefix}/etc/named.conf
* and edit as needed. If you use the default zone files for
* 127.0.0, localhost, and the cache, you also need to copy
* those files:
* sudo cp ${prefix}/var/named/db.127.0.0.dist ${prefix}/var/named/db.127.0.0
* sudo cp ${prefix}/var/named/db.cache.dist ${prefix}/var/named/db.cache
* sudo cp ${prefix}/var/named/db.localhost.dist ${prefix}/var/named/db.localhost
* 
* You may want to generate a key (for rndc):
* $ sudo rndc-confgen -a
*
* Remember to secure your configuration:
* http://www.cymru.com/Documents/secure-bind-template.html
*
* The bind9 port now sets up named to run as non-root, you may
* need to adjust your named.conf to put the pidfile and any
* logging into a directory where this new user can write files.
******************************************************"

livecheck.type   regex
livecheck.url    https://www.isc.org/downloads/
livecheck.regex  {BIND(\d+\.\d*[02468]\.\d+(?:-P\d+)?)\.tar\.[gx]z</a>}
