# Copyright 1999-2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # $Id: 85aeedd3d356f57735f439a4608fb51c32e1b317 $ EAPI=8 MY_PV="${PV//_p/-P}" MY_PV="${MY_PV/_/-}" MY_P="${PN}-${MY_PV}" PYTHON_COMPAT=( python3_{11..14} ) inherit eapi9-ver flag-o-matic meson python-single-r1 systemd tmpfiles toolchain-funcs DESCRIPTION="High-performance production grade DHCPv4 & DHCPv6 server" HOMEPAGE="https://www.isc.org/kea/" if [[ ${PV} == *9999* ]] ; then inherit git-r3 EGIT_REPO_URI="https://gitlab.isc.org/isc-projects/kea.git" else SRC_URI="https://downloads.isc.org/isc/kea/${MY_PV}/${MY_P}.tar.xz" # odd minor version = development release if [[ $(( $(ver_cut 2) % 2 )) -ne 1 ]] ; then if ! [[ "${PV}" == *_beta* || "${PV}" == *_rc* ]] ; then KEYWORDS="~amd64 ~arm64 ~x86" fi fi fi S="${WORKDIR}/${MY_P}" LICENSE="MPL-2.0 GPL-2" # GPL-2 only for init script SLOT="0" IUSE="kerberos mysql +openssl postgres +samples shell test" REQUIRED_USE="shell? ( ${PYTHON_REQUIRED_USE} )" RESTRICT="!test? ( test )" COMMON_DEPEND=" ${PYTHON_DEPS} dev-libs/log4cplus:= kerberos? ( app-crypt/mit-krb5 ) mysql? ( app-arch/zstd:= dev-db/mysql-connector-c:= dev-libs/openssl:= sys-libs/zlib:= ) !openssl? ( dev-libs/botan:2=[boost] ) openssl? ( dev-libs/openssl:0= ) postgres? ( dev-db/postgresql:* ) " DEPEND="${COMMON_DEPEND} test? ( dev-cpp/gtest ) " RDEPEND="${COMMON_DEPEND} acct-group/dhcp acct-user/dhcp " BDEPEND=" >=dev-libs/boost-1.66.0:= $(python_gen_cond_dep ' dev-python/sphinx[${PYTHON_USEDEP}] dev-python/sphinx-rtd-theme[${PYTHON_USEDEP}] ') virtual/pkgconfig " python_check_deps() { python_has_version "dev-python/sphinx[${PYTHON_USEDEP}]" \ "dev-python/sphinx-rtd-theme[${PYTHON_USEDEP}]" } pkg_setup() { python_setup } src_prepare() { default if use shell; then sed -e 's:^#!@PYTHON@:#!/usr/bin/env python3:' \ -i src/bin/shell/kea-shell.in || die fi # fix doc dir sed -i "/install_dir/s@\(share/doc\)/kea@\1/${PF}@" doc/meson.build \ || die sed -i "/DATADIR/s@\(doc\)/kea@\1/${PF}@" {,doc/sphinx/}meson.build \ || die } src_configure() { filter-lto local emesonargs=( --localstatedir="${EPREFIX}/var" -Drunstatedir="${EPREFIX}/run" -Dcrypto=$(usex openssl openssl botan) $(meson_feature kerberos krb5) $(meson_feature mysql) $(meson_feature postgres postgresql) ) meson_src_configure } src_test() { local GTEST_SKIP_TESTS=( # may fail when checking addresses on detected interfaces IfaceMgrTest* # may fail to find a suitable interface for generating a DUID-LLT JSONFileBackendTest* CtrlChannelDhcpv6SrvTest* # require srv_config_marker_file.txt similarly generated by a disabled test LoadUnloadDhcpv6SrvTest* ) # tests that require a running instance of MySQL use mysql && GTEST_SKIP_TESTS+=( *MySql* *MySQL* # conditional tests for MySQL Dhcpv*SrvTest.checkConfigFiles ) # tests that require a running instance of PgSQL use postgres && GTEST_SKIP_TESTS+=( *PgSql* *PgSQL* # conditional tests for PgSQL Dhcpv*SrvTest.checkConfigFiles ) if [[ $(tc-get-ptr-size) -eq 4 ]] ; then GTEST_SKIP_TESTS+=( BigintTest.int128 BigintTest.uint128 ThreadPoolTest.wait LibDhcpTest.splitOptionNoBufferMultiThreading LibDhcpTest.splitOptionOneByteLeftBufferMultiThreading LibDhcpTest.splitOptionWithSuboptionAtLimitMultiThreading LibDhcpTest.splitLongOptionMultiThreading LibDhcpTest.splitOptionWithSuboptionWhichOverflowMultiThreading LibDhcpTest.splitLongOptionWithLongSuboptionMultiThreading ) fi local -x GTEST_FILTER [[ -n ${GTEST_SKIP_TESTS[*]} ]] && GTEST_FILTER+="-$( IFS=':'; echo "${GTEST_SKIP_TESTS[*]}")" default } install_shell() { #python_domodule ${BUILD_DIR}/src/bin/shell/*.py # fix path to import kea modules sed -e "/^sys.path.append/s|(.*)|('$(python_get_sitedir)/${PN}')|" \ -i "${ED}"/usr/lib/python-exec/${EPYTHON}/kea-shell || die } src_install() { meson_src_install if use shell; then python_moduleinto ${PN} python_doscript ${BUILD_DIR}/src/bin/shell/kea-shell python_fix_shebang "${ED}"/usr/lib fi dodoc -r doc/examples rm -f "${ED}"/usr/share/doc/${P}/COPYING if use samples; then diropts -m 0750 -o root -g dhcp dodir /etc/kea insopts -m 0640 -o root -g dhcp insinto /etc/kea doins "${FILESDIR}"/${PN}-ctrl-agent.conf doins "${FILESDIR}"/${PN}-ddns-server.conf doins "${FILESDIR}"/${PN}-dhcp4.conf doins "${FILESDIR}"/${PN}-dhcp6.conf fi # set log to syslog by default #sed -e 's/"output": "stdout"/"output": "syslog"/' \ # -i "${ED}"/etc/kea/*.conf.sample || die newconfd "${FILESDIR}"/${PN}-confd-r2 ${PN} newinitd "${FILESDIR}"/${PN}-initd-r4 ${PN} systemd_dounit "${FILESDIR}"/${PN}-ctrl-agent.service systemd_dounit "${FILESDIR}"/${PN}-ddns-server.service systemd_dounit "${FILESDIR}"/${PN}-dhcp4-server.service systemd_dounit "${FILESDIR}"/${PN}-dhcp6-server.service newtmpfiles "${FILESDIR}"/${PN}.tmpfiles.conf ${PN}.conf keepdir /var/lib/${PN} /var/log/${PN} fowners -R dhcp:dhcp /var/lib/${PN} /var/log/${PN} fperms 750 /var/lib/${PN} /var/log/${PN} python_optimize } pkg_postinst() { tmpfiles_process ${PN}.conf #fcaps cap_net_bind_service,cap_net_raw=+ep usr/sbin/kea-dhcp{4,6} }