# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
# Contributor: Steve Holweg <skytep@gmail.com>
# Contributor: Baptiste Jonglez <baptiste--aur@jonglez.org>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
pkgname=kea
pkgver=1.7.4
pkgrel=0
pkgdesc="DHCPv4 and DHCPv6 server from ISC"
url="http://kea.isc.org"
# armhf, armv7: limited by log4cplus
# s390x: tests fail
arch="all !armhf !armv7 !s390x"
license="MPL2"
depends="kea-dhcp4 kea-dhcp6"
depends_dev="boost-dev log4cplus-dev"
checkdepends="procps"
makedepends="
	$depends_dev
	bison
	botan-dev
	flex
	libcap
	mariadb-dev
	postgresql-dev
	python3-dev
	"
pkgusers="kea"
pkggroups="kea"
install="$pkgname-common.pre-install"
subpackages="
	$pkgname-doc
	$pkgname-static
	$pkgname-dev
	$pkgname-admin::noarch
	$pkgname-ctrl-agent:ctrlagent
	$pkgname-dhcp-ddns:dhcpddns
	$pkgname-dhcp4
	$pkgname-dhcp6
	$pkgname-http
	$pkgname-shell::noarch
	$pkgname-hook-mysql-cb:hook_mysql_cb
	$pkgname-hook-ha:hook_ha
	$pkgname-hook-stat-cmds:hook_stat_cmds
	$pkgname-hook-lease-cmds:hook_lease_cmds
	$pkgname-hook-flex-option:hook_flex_option
	$pkgname-common
	"
source="https://ftp.isc.org/isc/$pkgname/$pkgver/$pkgname-$pkgver.tar.gz
	disable-db-tests.patch
	configs-fix-paths.patch
	use-runstatedir-for-pid-file-location.patch
	put-LOCKFILE_DIR-to-runstatedir.patch
	kea-admin-remove-builddir.patch
	kea.initd.in
	"
validpgpkeys="BE0E9748B718253A28BB89FFF1B11BF05CF02E57" # Internet Systems Consortium, Inc. (Signing key, 2017-2018) <codesign@isc.org>

# secfixes:
#   1.7.2-r0:
#     - CVE-2019-6472
#     - CVE-2019-6473
#     - CVE-2019-6474

prepare() {
	default_prepare

	# Remove the builddir path from the scripts.
	# NOTE: There's a new script each release, so using patch file would be
	# very inconvenient.
	find src/share/database/scripts/ \
		-name '*.sh.in' \
		-exec sed -i 's|^\s*. @abs_top_builddir@/src/bin/admin/admin-utils.sh.*|echo "admin-utils.sh not found!"; exit 1|' {} \;
}

build() {
	# Complete build for dev and doc

	./configure \
		--build=$CBUILD \
		--host=$CHOST \
		--prefix=/usr \
		--sysconfdir=/etc \
		--localstatedir=/var \
		--libexecdir=/usr/lib \
		--runstatedir=/run \
		--with-mysql \
		--with-pgsql \
		--disable-rpath \
		--enable-generate-messages \
		--enable-generate-parser \
		--enable-shell
	make
}

check() {
	make check
}

package() {
	make DESTDIR="$pkgdir" install

	cd "$pkgdir"

	# Allow kea to run under unpriviliged user.
	local name; for name in kea-dhcp-ddns kea-dhcp6; do
		setcap 'cap_net_bind_service=+ep' ./usr/sbin/$name
	done
	setcap 'cap_net_bind_service,cap_net_raw=+ep' ./usr/sbin/kea-dhcp4

	install -d -m 0750 -o kea -g kea ./var/log/kea ./var/lib/kea

	# keactrl is unnecessary since we provide OpenRC init scripts.
	rm ./usr/sbin/keactrl ./etc/kea/keactrl.conf

	rm -Rf ./run
}

dev() {
	default_dev

	amove ./usr/bin/kea-msg-compiler
}

admin() {
	pkgdesc="Databases administration tools for Kea DHCP server"
	depends="$pkgname-common=$pkgver-r$pkgrel"

	amove ./usr/sbin/kea-admin
	amove ./usr/share/kea/
}

ctrlagent() {
	pkgdesc="Kea Control Agent - REST service for controlling Kea DHCP server"
	depends="$pkgname-common=$pkgver-r$pkgrel"

	amove usr/sbin/kea-ctrl-agent
	amove ./etc/kea/kea-ctrl-agent.conf

	_install_initd kea-ctrl-agent
}

dhcpddns() {
	pkgdesc="Kea DHCP Dynamic DNS Server"
	depends="$pkgname-common=$pkgver-r$pkgrel"

	amove ./usr/sbin/kea-dhcp-ddns
	amove ./etc/kea/kea-dhcp-ddns.conf
	amove ./usr/lib/libkea-asiodns.so.*

	_install_initd kea-dhcp-ddns
}

dhcp4() {
	pkgdesc="Kea IPv4 DHCP Server"
	depends="$pkgname-common=$pkgver-r$pkgrel"

	amove ./usr/sbin/kea-dhcp4
	amove ./etc/kea/kea-dhcp4.conf

	_install_initd kea-dhcp4
}

dhcp6() {
	pkgdesc="Kea IPv6 DHCP Server"
	depends="$pkgname-common=$pkgver-r$pkgrel"

	amove ./usr/sbin/kea-dhcp6
	amove ./etc/kea/kea-dhcp6.conf

	_install_initd kea-dhcp6
}

hooks() {
	pkgdesc="Hooks libraries for Kea DHCP server"
	depends=""

	amove ./usr/lib/kea/hooks/
}

# Needed only by ctrl-agent and hooks.
http() {
	depends=""

	amove ./usr/lib/libkea-http.so*
}

shell() {
	pkgdesc="Text client for Kea DHCP Control Agent"
	depends="python3"

	amove ./usr/sbin/kea-shell
	amove ./usr/lib/python3*
}

hook_mysql_cb() {
	pkgdesc="Kea MySQL Configuration Backend hooks library"
	depends=""

	amove ./usr/lib/kea/hooks/libdhcp_mysql_cb.so
}

hook_ha() {
	pkgdesc="Kea High Availability hooks library"
	depends="$pkgname-hook-lease-cmds"

	amove ./usr/lib/kea/hooks/libdhcp_ha.so
}

hook_stat_cmds() {
	pkgdesc="Kea Statistics Commands hooks library"
	depends=""

	amove ./usr/lib/kea/hooks/libdhcp_stat_cmds.so
}

hook_lease_cmds() {
	pkgdesc="Kea Lease Commands hooks library"
	depends=""

	amove ./usr/lib/kea/hooks/libdhcp_lease_cmds.so
}

hook_flex_option() {
	pkgdesc="Kea Flexible Option hooks library"
	depends=""

	amove ./usr/lib/kea/hooks/libdhcp_flex_option.so
}

common() {
	pkgdesc="Common files and libraries for Kea DHCP Server"
	replaces="kea-utils"  # for backward compatibility
	provides="kea-utils=$pkgver-r$pkgrel"  # for backward compatibility
	depends=""

	mkdir -p "$subpkgdir"
	mv "$pkgdir"/* "$subpkgdir"/
}

_install_initd() {
	local name="$1"

	install -Dm755 "$srcdir"/kea.initd.in "$subpkgdir"/etc/init.d/$name
	sed -i "s|@@NAME@@|$name|g" "$subpkgdir"/etc/init.d/$name
}

sha512sums="ae2117b5add65abed1603be2393cc300fea181376c598c2facdd76cc868d53fabb5714d41f7a5647b0ae508d05e98b50fa101a7917503835928f274a157ed6ca  kea-1.7.4.tar.gz
55780bbcbd79b81d55bdccd46da6ca6babe8b7894aa82948308dc4f8a0e2b5d33fad633276696c8ba7bd063026bb11ae529a096375d0572833c66e2132888775  disable-db-tests.patch
6d142d7ede2bd29a9133fe4e4a3ca6bab2b51a56926b268fab218921edd49250b240c0f59efa8a389b49a5478db5bda95acf531382b14cdf9327dddddcdb2d4d  configs-fix-paths.patch
574b4aacef03c2d4a556b4ff8b152b66efd6fdc27ad09373d41c72df15f8a2cd2386e0bbe7e07f1370d9cd11e0954fc679f3d57e6b647d601cc06e0c63bc8712  use-runstatedir-for-pid-file-location.patch
062e6eb88c49aeeac5d78c37c43cda1ff753e19f833aaa1525e37f66eede819910d4849bd954f3ef8ceb1b13e747953c99e2a9a4d9755b6da8d82c4e08b2b55c  put-LOCKFILE_DIR-to-runstatedir.patch
5b93d96f2cbdce327ffceef5ace19ba5327a0c7d0d61714e35a0d72912ecbbec6a1864249612b48f8db20dffc3622170c3e21b1a67297fd834f47b94db85b9d7  kea-admin-remove-builddir.patch
4029a526a210cb49ca480fea728dfae5933371244df6348411081db1e8b23924cbbdde5fa745ab4c14552a95451953a18a65d7660227bc0bb1d51be708fab92f  kea.initd.in"
