gentoo/net-dns/knot/knot-3.5.2-r1.ebuild
Nicolas PARLANT 916fc7b338
net-dns/knot: fix automagic for pkcs11
Bug: https://bugs.gentoo.org/967060
Signed-off-by: Nicolas PARLANT <nicolas.parlant@parhuet.fr>
Part-of: https://github.com/gentoo/gentoo/pull/44918
Signed-off-by: Sam James <sam@gentoo.org>
2025-12-06 13:44:48 +00:00

245 lines
5.6 KiB
Bash

# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{11..14} )
inherit autotools eapi9-ver python-r1 systemd tmpfiles verify-sig
# subslot: libknot major.libdnssec major.libzscanner major
KNOT_SUBSLOT="16.10.5"
DESCRIPTION="High-performance authoritative-only DNS server"
HOMEPAGE="https://www.knot-dns.cz/ https://gitlab.nic.cz/knot/knot-dns"
SRC_URI="
https://knot-dns.nic.cz/release/${P}.tar.xz
!doc? ( https://raw.githubusercontent.com/PPN-SD/gentoo-manpages/refs/tags/${P}/${P}-manpages.tar.xz )
verify-sig? ( https://knot-dns.nic.cz/release/${P}.tar.xz.asc )
"
LICENSE="GPL-2+"
SLOT="0/${KNOT_SUBSLOT}"
KEYWORDS="~amd64 ~arm64 ~riscv ~x86"
# Modules without dep. Built unconditionally.
KNOT_MODULES=(
"authsignal"
"cookies"
"dnsproxy"
"noudp"
"onlinesign"
"queryacl"
"rrl"
"stats"
"synthrecord"
"whoami"
)
KNOT_MODULES_OPT=(
"dnstap"
"geoip"
)
IUSE="caps +daemon dbus doc doh +fastparser +idn pkcs11 prometheus python quic redis selinux systemd test +utils xdp ${KNOT_MODULES_OPT[@]}"
RESTRICT="!test? ( test )"
REQUIRED_USE="
prometheus? ( python )
python? ( ${PYTHON_REQUIRED_USE} )
"
COMMON_DEPEND="
dev-libs/libedit
dnstap? (
dev-libs/fstrm
dev-libs/protobuf-c:=
)
"
RDEPEND="
dev-db/lmdb:=
net-libs/gnutls:=[pkcs11?]
daemon? (
${COMMON_DEPEND}
acct-group/knot
acct-user/knot
dev-libs/userspace-rcu:=
caps? ( sys-libs/libcap-ng )
dbus? ( sys-apps/dbus )
geoip? ( dev-libs/libmaxminddb:= )
redis? ( >=dev-libs/hiredis-1.1.0:= )
systemd? ( sys-apps/systemd:= )
)
prometheus? (
dev-python/prometheus-client[${PYTHON_USEDEP}]
dev-python/psutil[${PYTHON_USEDEP}]
)
python? ( ${PYTHON_DEPS} )
quic? ( net-libs/ngtcp2[gnutls] )
selinux? ( sec-policy/selinux-knot )
utils? (
${COMMON_DEPEND}
doh? ( net-libs/nghttp2:= )
idn? ( net-dns/libidn2:= )
)
xdp? (
>=dev-libs/libbpf-1.0:=
net-libs/xdp-tools
utils? ( net-libs/libmnl:= )
)
"
DEPEND="${RDEPEND}"
BDEPEND="
virtual/pkgconfig
dnstap? ( dev-libs/protobuf[protoc(+)] )
doc? (
$(python_gen_any_dep '
dev-python/sphinx[${PYTHON_USEDEP}]
dev-python/sphinx-panels[${PYTHON_USEDEP}]
')
)
python? ( ${PYTHON_DEPS} )
test? (
pkcs11? ( dev-libs/softhsm )
)
verify-sig? ( sec-keys/openpgp-keys-knot )
"
VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/${PN}.asc
# Used to check cpuset_t in sched.h with NetBSD.
# False positive because linux have sched.h too but with cpu_set_t
QA_CONFIG_IMPL_DECL_SKIP=( cpuset_create cpuset_destroy )
PATCHES=(
# PR 1830 merged
"${FILESDIR}"/${PN}-3.5.2-fix_automagic_pkcs11.patch
)
python_check_deps() {
use doc || return 0
python_has_version "dev-python/sphinx[${PYTHON_USEDEP}]" \
"dev-python/sphinx-panels[${PYTHON_USEDEP}]"
}
pkg_setup() {
if use doc || use python; then
python_setup
fi
}
src_unpack() {
if use verify-sig; then
verify-sig_verify_detached "${DISTDIR}"/${P}.tar.xz{,.asc}
fi
default
}
src_prepare() {
default
# avoid the old ltmain.sh modified by upstream which causes a linking issue
# reproduced with test and musl
eautoreconf
}
src_configure() {
local u
local my_conf=(
--with-storage="${EPREFIX}/var/lib/${PN}"
--with-rundir="${EPREFIX}/var/run/${PN}"
$(use_enable caps cap_ng)
$(use_enable daemon)
# enable-dnstap defines support for kdig only
$(use_enable dnstap dnstap $(usex utils))
$(use_enable doc documentation)
$(use_with doh libnghttp2)
$(use_enable fastparser)
$(use_enable geoip maxminddb)
$(use_with idn libidn)
$(use_enable pkcs11)
$(use_enable quic)
$(use_enable redis redis $(usex daemon client))
$(use_enable systemd)
$(use_enable utils utilities)
$(use_enable xdp)
)
# modules are only used by daemon
# module-dnstap defines support for knotd only
if use daemon; then
for u in "${KNOT_MODULES[@]}"; do
my_conf+=( --with-module-${u} )
done
for u in "${KNOT_MODULES_OPT[@]#+}"; do
my_conf+=( $(use_with ${u} module-${u}) )
done
else
my_conf+=( --disable-modules )
fi
if use !daemon; then
my_conf+=( --enable-dbus=no )
elif use dbus; then
my_conf+=( --enable-dbus=libdbus )
elif use systemd; then
my_conf+=( --enable-dbus=systemd )
else
my_conf+=( --enable-dbus=no )
fi
econf "${my_conf[@]}"
}
src_compile() {
default
use doc && emake -C doc html
}
src_install() {
if use doc; then
local HTML_DOCS=( doc/_build/html/{*.html,*.js,_sources,_static} )
else
doman "${WORKDIR}"/man/*
fi
if use python; then
python_foreach_impl python_domodule python/libknot/libknot
newdoc python/libknot/README.md README.python.md
fi
if use prometheus; then
python_foreach_impl python_domodule python/knot_exporter/knot_exporter
python_scriptinto /usr/sbin
python_foreach_impl python_newscript python/knot_exporter/knot_exporter/knot_exporter.py knot-exporter
newdoc python/knot_exporter/README.md README.knot_exporter.md
fi
default
if use daemon; then
rm -r "${ED}"/var/run/ || die
newinitd "${FILESDIR}"/knot-3.init knot
newconfd "${FILESDIR}"/knot.confd knot
newtmpfiles "${FILESDIR}"/${PN}.tmpfile ${PN}.conf
use systemd && systemd_newunit distro/common/knot.service knot.service
fi
find "${D}" -name '*.la' -delete || die
keepdir /var/lib/knot
}
pkg_postinst() {
use daemon && tmpfiles_process ${PN}.conf
if has_version net-dns/redis-knot || use redis; then
ewarn "To use redis, ${EPREFIX}/usr/$(get_libdir)/knot/redis/knot.so from net-dns/redis-knot"
ewarn "must be loaded by an instance of Redis."
fi
if ver_replacing -lt 3.5; then
elog "See documentation for migration:"
elog "https://www.knot-dns.cz/docs/3.5/html/migration.html#upgrade-3-4-x-to-3-5-x"
fi
}