diff --git a/pkgs/servers/dns/bind/default.nix b/pkgs/servers/dns/bind/default.nix index fbfa2d8d9b7d..b60998ce6aae 100644 --- a/pkgs/servers/dns/bind/default.nix +++ b/pkgs/servers/dns/bind/default.nix @@ -1,7 +1,37 @@ -{ stdenv, fetchurl, openssl, libtool, perl, libxml2 }: +{ stdenv, fetchurl, libtool, docbook5_xsl -let version = "9.10.2"; in +# Optional Dependencies +, libseccomp ? null, python ? null, kerberos ? null, openssl ? null +, libxml2 ? null, json_c ? null, readline ? null, libcap ? null, idnkit ? null +, libiconv ? null +# Optional DLZ Modules +, postgresql ? null, libmysql ? null, db ? null, openldap ? null +}: + +assert postgresql != null; +with stdenv; +let + version = "9.10.2"; + + optLibseccomp = shouldUsePkg libseccomp; + optPython = shouldUsePkg python; + optKerberos = shouldUsePkg kerberos; + optOpenssl = shouldUsePkg openssl; + optLibxml2 = shouldUsePkg libxml2; + optJson_c = shouldUsePkg json_c; + optReadline = shouldUsePkg readline; + optLibcap = if !stdenv.isLinux then null else shouldUsePkg libcap; + optIdnkit = shouldUsePkg idnkit; + optLibiconv = shouldUsePkg libiconv; + + optPostgresql = shouldUsePkg postgresql; + optLibmysql = shouldUsePkg libmysql; + optDb = shouldUsePkg db; + optOpenldap = shouldUsePkg openldap; +in +assert optPostgresql != null; +with stdenv.lib; stdenv.mkDerivation rec { name = "bind-${version}"; @@ -14,30 +44,78 @@ stdenv.mkDerivation rec { sed -i 's/^\t.*run/\t/' Makefile.in ''; - buildInputs = [ openssl libtool perl libxml2 ]; + nativeBuildInputs = [ optPython libtool docbook5_xsl ]; + buildInputs = [ + optLibseccomp optPython optKerberos optOpenssl optLibxml2 optJson_c + optReadline optLibcap optIdnkit optLibiconv optPostgresql optLibmysql + optDb optOpenldap + ]; configureFlags = [ - "--localstatedir=/var" - "--with-libtool" - "--with-libxml2=${libxml2}" - "--with-openssl=${openssl}" - "--without-atf" - "--without-dlopen" - "--without-docbook-xsl" - "--without-gssapi" - "--without-idn" - "--without-idnlib" - "--without-pkcs11" - "--without-purify" - "--without-python" + (mkOther "localstatedir" "/var") + (mkOther "sysconfdir" "/etc") + (mkEnable (optLibseccomp != null) "seccomp" null) + (mkWith (optPython != null) "python" "${optPython}/bin/python") + (mkEnable true "kqueue" null) + (mkEnable true "epoll" null) + (mkEnable true "devpoll" null) + (mkWith false "geoip" null) # TODO(wkennington): GeoDNS support + (mkWith (optKerberos != null) "gssapi" optKerberos) + (mkWith true "libtool" null) + (mkEnable (optOpenssl == null) "native-pkcs11" null) + (mkWith (optOpenssl != null) "openssl" optOpenssl) + (mkWith true "pkcs11" null) + (mkWith true "ecdsa" null) + (mkWith false "gost" null) # Insecure cipher + (mkWith true "aes" null) + (mkEnable (optOpenssl != null) "openssl-hash" null) + (mkEnable true "sit" null) + (mkWith true "sit-alg" "aes") + (mkWith (optLibxml2 != null) "libxml2" optLibxml2) + (mkWith (optJson_c != null) "libjson" optJson_c) + (mkEnable true "largefile" null) + (mkWith false "purify" null) + (mkWith false "gperftools-profiler" null) + (mkEnable false "backtrace" null) + (mkEnable false "symtable" null) + (mkEnable true "ipv6" null) + (mkWith false "kame" null) + (mkWith (optReadline != null) "readline" null) + (mkEnable (optKerberos == null) "isc-spnego" null) + (mkEnable true "chroot" null) + (mkEnable (optLibcap != null) "linux-caps" null) + (mkEnable true "atomic" null) + (mkEnable false "fixed-rrset" null) + (mkEnable true "rpz-nsip" null) + (mkEnable true "rpz-nsdname" null) + (mkEnable true "filter-aaaa" null) + (mkWith true "docbook-xsl" "${docbook5_xsl}/share/xsl/docbook") + (mkWith (optIdnkit != null) "idn" optIdnkit) + (mkWith (optLibiconv != null) "libiconv" optLibiconv) + (mkWith false "atf" null) + (mkWith true "tuning" "large") + (mkWith true "dlopen" null) + (mkWith false "make-clean" null) + (mkEnable true "full-report" null) + (mkWith (optPostgresql != null) "dlz-postgres" optPostgresql) + (mkWith (optLibmysql != null) "dlz-mysql" optLibmysql) + (mkWith (optDb != null) "dlz-bdb" optDb) + (mkWith true "dlz-filesystem" null) + (mkWith (optOpenldap != null) "dlz-ldap" optOpenldap) + (mkWith false "dlz-odbc" null) + (mkWith true "dlz-stub" null) + ]; + + installFlags = [ + "sysconfdir=\${out}/etc" + "localstatedir=\${TMPDIR}" ]; meta = { homepage = "http://www.isc.org/software/bind"; description = "Domain name server"; - license = stdenv.lib.licenses.isc; - - maintainers = with stdenv.lib.maintainers; [viric simons]; - platforms = with stdenv.lib.platforms; unix; + license = licenses.isc; + maintainers = with maintainers; [ viric simons wkennington ]; + platforms = platforms.unix; }; }