#!/usr/bin/make -f
# Sample debian/rules that uses debhelper.
# GNU copyright 1997 to 1999 by Joey Hess.

export DEB_BUILD_MAINT_OPTIONS = hardening=+all
DPKG_EXPORT_BUILDFLAGS = 1

export DEB_CFLAGS_MAINT_APPEND = -fno-strict-aliasing -fno-delete-null-pointer-checks -DNO_VERSION_DATE -DDIG_SIGCHASE

export DPKG_GENSYMBOLS_CHECK_LEVEL := 4

include /usr/share/dpkg/default.mk

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

COMMA = ,
ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
  NJOBS := -j $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
endif

export arch = $(DEB_HOST_ARCH)

ifeq ($(DEB_HOST_ARCH_OS),kfreebsd)
EXTRA_FEATURES=--disable-linux-caps
endif

SED_NATIVE_PKCS11 := \
	sed -e 's,libisc\.,libisc-pkcs11.,g' \
	    -e 's,libisc-nosymtbl\.,libisc-pkcs11-nosymtbl.,g' \
	    -e 's,libdns\.,libdns-pkcs11.,g' \
	    -e 's,@CRYPTO@,@CRYPTO_PK11@,g' \
	    -e 's,ISC_INCLUDES,ISC_PKCS11_INCLUDES,g' \
	    -e 's,DNS_INCLUDES,DNS_PKCS11_INCLUDES,g' \
	    -e 's,\(dnssec-[^ ]*\)@EXEEXT@,\1-pkcs11@EXEEXT@,g' \
	    -e 's,/lib/isc/,/lib/isc-pkcs11/,g' \
	    -e 's,/lib/dns/,/lib/dns-pkcs11/,g' \
	    -e 's,named@EXEEXT@,named-pkcs11@EXEEXT@,g' \
	    -e 's,@CONTRIB_DLZ@,,g' \
	    -e 's,$${DLZDRIVER_INCLUDES} $${DBDRIVER_INCLUDES},,g' \
	    -e 's,$${DLZDRIVER_LIBS} $${DBDRIVER_LIBS},,g' \
	    -e 's,$${DLZDRIVER_OBJS} $${DBDRIVER_OBJS},,g' \
	    -e 's,$${DLZDRIVER_SRCS} $${DBDRIVER_SRCS},,g' \
	    -e 's,@DNS_CRYPTO_LIBS@,@DNS_CRYPTO_PK11_LIBS@,g'

%:
	dh $@ --with python3 --fail-missing --exclude=.la --exclude=lwresd --exclude=__pycache__

prepare_native_pkcs11:
	rm -rf bin/named-pkcs11 && cp -r bin/named bin/named-pkcs11
	rm -rf bin/dnssec-pkcs11 && cp -r bin/dnssec bin/dnssec-pkcs11
	rm -rf lib/isc-pkcs11 && cp -r lib/isc lib/isc-pkcs11
	rm -rf lib/dns-pkcs11 && cp -r lib/dns lib/dns-pkcs11
	$(SED_NATIVE_PKCS11) < bin/named/Makefile.in > bin/named-pkcs11/Makefile.in
	$(SED_NATIVE_PKCS11) < bin/dnssec/Makefile.in > bin/dnssec-pkcs11/Makefile.in
	$(SED_NATIVE_PKCS11) < lib/isc/Makefile.in > lib/isc-pkcs11/Makefile.in
	$(SED_NATIVE_PKCS11) < lib/dns/Makefile.in > lib/dns-pkcs11/Makefile.in

clean_native_pkcs11:
	rm -rf bin/named-pkcs11
	rm -rf bin/dnssec-pkcs11
	rm -rf lib/isc-pkcs11
	rm -rf lib/dns-pkcs11

override_dh_autoreconf: prepare_native_pkcs11
	dh_autoreconf

override_dh_auto_configure:
	dh_auto_configure -B build -- \
		--libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \
		--sysconfdir=/etc/bind \
		--with-python=python3 \
		--localstatedir=/ \
		--enable-threads \
		--enable-largefile \
		--with-libtool \
		--enable-shared \
		--enable-static \
		--with-gost=no \
		--with-openssl=/usr \
		--with-gssapi=/usr \
		--with-libjson=/usr \
		--with-gnu-ld \
		--with-geoip=/usr \
		--with-atf=no \
		--enable-ipv6 \
		--enable-rrl \
		--enable-filter-aaaa \
		--enable-native-pkcs11 \
		--with-pkcs11=\$${prefix}/lib/softhsm/libsofthsm2.so \
		--with-randomdev=/dev/urandom \
		$(EXTRA_FEATURES)
	dh_auto_configure -B build-udeb -- \
		--sysconfdir=/etc/bind \
		--with-python=python3 \
		--localstatedir=/ \
		--disable-epoll \
		--disable-kqueue \
		--disable-devpoll \
		--disable-threads \
		--disable-linux-caps \
		--with-openssl=/usr \
		--without-libxml2 \
		--without-libjson \
		--enable-ipv6 \
		--enable-shared \
		--with-libtool \
		--with-gssapi=no \
		--libdir=/lib/$(DEB_HOST_MULTIARCH) \
		--includedir=/usr/include/bind-export
	sh debian/apply-export-patch
	# no need to build these targets here
	sed -i 's/dnssec-pkcs11//;s/named-pkcs11//' build-udeb/bin/Makefile
	sed -i 's/dns-pkcs11//;s/isc-pkcs11//' build-udeb/lib/Makefile

override_dh_auto_build:
	dh_auto_build -B build
	dh_auto_build -B build-udeb

override_dh_auto_clean: clean_native_pkcs11
	dh_auto_clean -B build
	dh_auto_clean -B build-udeb

override_dh_auto_install:
	dh_auto_install -B build      --destdir=$(CURDIR)/debian/tmp
	dh_auto_install -B build-udeb --destdir=$(CURDIR)/debian/tmp-udeb

override_dh_install:
	# TODO: move this to bind9.install
	# Don't install on arch-all only builds
	if [ -d $(CURDIR)/debian/bind9 ]; then \
		install -c -o bin -g bin -m 444 debian/db.0 $(CURDIR)/debian/bind9/etc/bind/db.0; \
		install -c -o bin -g bin -m 444 debian/db.0 $(CURDIR)/debian/bind9/etc/bind/db.255; \
		install -c -o bin -g bin -m 444 debian/db.empty $(CURDIR)/debian/bind9/etc/bind; \
		install -c -o bin -g bin -m 444 debian/zones.rfc1918 $(CURDIR)/debian/bind9/etc/bind; \
		install -c -o bin -g bin -m 444 debian/db.127 $(CURDIR)/debian/bind9/etc/bind; \
		install -c -o bin -g bin -m 444 debian/db.local $(CURDIR)/debian/bind9/etc/bind; \
		install -c -o bin -g bin -m 444 debian/db.root $(CURDIR)/debian/bind9/etc/bind; \
		install -c -o bin -g bin -m 440 debian/named.conf $(CURDIR)/debian/bind9/etc/bind; \
		install -c -o bin -g bin -m 440 debian/named.conf.local $(CURDIR)/debian/bind9/etc/bind; \
		install -c -o bin -g bin -m 440 debian/named.conf.default-zones $(CURDIR)/debian/bind9/etc/bind; \
		install -c -o bin -g bin -m 440 bind.keys $(CURDIR)/debian/bind9/etc/bind; \
		install -c -o bin -g bin -m 440 debian/named.conf.options debian/bind9/usr/share/bind9/; \
		install -m 644 -o root -g root debian/apparmor-profile debian/bind9/etc/apparmor.d/usr.sbin.named; \
		install -m 0644 -o root -g root debian/extras/insserv.conf.d/bind9 $(CURDIR)/debian/bind9/etc/insserv.conf.d/; \
		\
		install debian/ip-up.d debian/bind9/etc/ppp/ip-up.d/bind9; \
		install debian/ip-down.d debian/bind9/etc/ppp/ip-down.d/bind9; \
		install debian/ip-up.d debian/bind9/etc/network/if-up.d/bind9; \
		install debian/ip-down.d debian/bind9/etc/network/if-down.d/bind9; \
		install -m644 debian/bind9.ufw.profile debian/bind9/etc/ufw/applications.d/bind9; \
	fi

	# Create path to fix FTBFS on arch-any-only builds
	mkdir -p debian/bind9-doc/usr/share/doc/bind9-doc/arm
	cp doc/arm/*.html debian/bind9-doc/usr/share/doc/bind9-doc/arm

	dh_install --exclude=.la --exclude=lwresd --exclude=__pycache__

	# Fix symlink for export libs to be absolute
	for lib in `find debian/tmp-udeb/lib/$(DEB_HOST_MULTIARCH)/ -type l -name 'lib*-export.so.*'`; do \
	  lib=$$(basename $$lib); \
	  dev=$$(echo $$lib | sed 's/\.so\..*/.so/'); \
	  echo /lib/$(DEB_HOST_MULTIARCH)/$$lib /usr/lib/$(DEB_HOST_MULTIARCH)/$$dev; \
	  dh_link -plibbind-export-dev /lib/$(DEB_HOST_MULTIARCH)/$$lib \
	    /usr/lib/$(DEB_HOST_MULTIARCH)/$$dev; \
	done

	dh_apparmor -pbind9 --profile-name=usr.bin.named

override_dh_systemd_enable:
	dh_systemd_enable -pbind9 --no-enable --name=bind9-resolvconf bind9-resolvconf.service
	dh_systemd_enable -pbind9 --no-enable --name=bind9-pkcs11 bind9-pkcs11.service
	dh_systemd_enable -pbind9 bind9.service

override_dh_makeshlibs:
	dh_makeshlibs -plibdns-export169 --add-udeb=libdns-export169-udeb
	dh_makeshlibs -plibirs-export160 --add-udeb=libirs-export160-udeb
	dh_makeshlibs -plibisccc-export160 --add-udeb=libisccc-export160-udeb
	dh_makeshlibs -plibisccfg-export160 --add-udeb=libisccfg-export160-udeb
	dh_makeshlibs -plibisc-export166 --add-udeb=libisc-export166-udeb
	dh_makeshlibs --remaining-packages

.PHONY: prepare_native_pkcs11 clean_native_pkcs11
