#!/usr/bin/make -f

#export DH_VERBOSE=1
export DEB_BUILD_MAINT_OPTIONS=hardening=+all

DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)

ifeq (,$(filter noudeb, $(DEB_BUILD_PROFILES)))
  with_udeb = yes
endif

LEASE_PATH=/var/lib/dhcp
DHCLIENT_SCRIPT=/sbin/dhclient-script

CFLAGS+=-Wall
CFLAGS+=-DCALL_SCRIPT_ON_ONETRY_FAIL
CFLAGS+=$(shell dpkg-buildflags --get CFLAGS)

CFLAGS+=-D_PATH_DHCPD_CONF='\"/etc/dhcp/dhcpd.conf\"'
CFLAGS+=-D_PATH_DHCPD_DB='\"$(LEASE_PATH)/dhcpd.leases\"'
CFLAGS+=-D_PATH_DHCPD6_DB='\"$(LEASE_PATH)/dhcpd6.leases\"'

CFLAGS+=-D_PATH_DHCLIENT_SCRIPT='\"$(DHCLIENT_SCRIPT)\"'
CFLAGS+=-D_PATH_DHCLIENT_CONF='\"/etc/dhcp/dhclient.conf\"'
CFLAGS+=-D_PATH_DHCLIENT_DB='\"$(LEASE_PATH)/dhclient.leases\"'
CFLAGS+=-D_PATH_DHCLIENT6_DB='\"$(LEASE_PATH)/dhclient6.leases\"'
CFLAGS+=-fno-strict-aliasing

CONFFLAGS+=--prefix=/usr --enable-log-pid --enable-paranoia

include /usr/share/dpkg/buildtools.mk
# cross-architecture building
ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
CONFFLAGS+=--build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) --with-randomdev=/dev/random
export BUILD_CC=$(CC_FOR_BUILD)
endif

# hurd support
ifeq ($(DEB_HOST_ARCH_OS), hurd)
export DO_LPF=1
CONFFLAGS+=--enable-use-sockets
endif

# ppc64el workaround (for network-manager's regression)
ifeq ($(DEB_HOST_ARCH),ppc64el)
  export DEB_CFLAGS_MAINT_APPEND += -O2
  export DEB_CFLAGS_MAINT_STRIP += -O3
endif

%:
	dh $@ --with autoreconf

override_dh_clean:
	dh_clean $@ -Xkeama/tests/samples/*

# Ensure that the bind config.guess/config.sub are unpacked first,
# otherwise they won't be updated and isc-dhcp will FTBFS on new arches
# Thanks to Paul Wise
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1010807#30
# Closes: #1010807
execute_before_dh_update_autotools_config:
	cd bind && tar xf bind.tar.gz

# Ensure that the bind build system gets rebuilt too
override_dh_autoreconf:
	dh_autoreconf debian/autogen.sh

override_dh_auto_configure:

override_dh_auto_build:
	# ldap-enabled build
	test -f Makefile && $(MAKE) distclean || true
	./configure --with-ldap --with-ldapcrypto CFLAGS="$(CFLAGS) -DNSUPDATE" $(CONFFLAGS) LIBS="$(LIBS) -latomic"
	$(MAKE)
	mv server/dhcpd dhcpd
	# ddns-disabled build
	test -f Makefile && $(MAKE) distclean || true
	./configure CFLAGS="$(CFLAGS)" $(CONFFLAGS) LIBS="$(LIBS) -latomic"
	$(MAKE)
	mv client/dhclient dhclient
	# ldap-disabled build
	test -f Makefile && $(MAKE) distclean || true
	./configure CFLAGS="$(CFLAGS) -DNSUPDATE" $(CONFFLAGS) LIBS="$(LIBS) -latomic"
	$(MAKE)
	# keama build
	$(MAKE) -C keama

override_dh_auto_test:
	/bin/sh keama/tests/runall.sh 2> /tmp/keama-test-errors
	cat /tmp/keama-test-errors
	test -f /tmp/keama-test-errors
	test ! -s /tmp/keama-test-errors
	rm -f /tmp/keama-test-errors
	dh_auto_test $@

override_dh_auto_install:
	dh_auto_install
	# install keama
	dh_auto_install -- -C keama

override_dh_install:
	# rename some upstream files
	cp RELNOTES debian/tmp/changelog
	cp server/dhcpd.conf.example debian/tmp/dhcpd.conf
	cp doc/examples/dhcpd-dhcpv6.conf debian/tmp/dhcpd6.conf
	# install
	dh_install
	# rename scripts
	cp debian/dhclient-script.$(DEB_HOST_ARCH_OS) \
	    debian/isc-dhcp-client$(DHCLIENT_SCRIPT)
ifeq ($(with_udeb),yes)
	cp debian/dhclient-script.$(DEB_HOST_ARCH_OS).udeb \
	    debian/isc-dhcp-client-udeb$(DHCLIENT_SCRIPT)
endif
	cp debian/rfc3442-classless-routes.$(DEB_HOST_ARCH_OS) \
	    debian/isc-dhcp-client/etc/dhcp/dhclient-exit-hooks.d/rfc3442-classless-routes
	cp contrib/dhcp-lease-list.pl \
	    debian/isc-dhcp-server/usr/sbin/dhcp-lease-list
	# use actual paths rather than undefined variables in man pages
	sed -e 's|ETCDIR|/etc/dhcp|g' \
	    -e 's/RUNDIR/\/var\/run/g' \
	    -e 's/CLIENTBINDIR/\/sbin/g' \
	    -e 's/DBDIR/\/var\/lib\/dhcp/g' \
	    -i debian/tmp/usr/share/man/man*/*
	dh_apparmor -pisc-dhcp-client --profile-name=sbin.dhclient
	dh_apparmor -pisc-dhcp-server --profile-name=usr.sbin.dhcpd
	dh_apport -a

override_dh_installinit:
	dh_installinit -Nisc-dhcp-server
	dh_installinit -pisc-dhcp-server --error-handler=true

override_dh_installsystemd:
	dh_installsystemd -pisc-dhcp-server --name isc-dhcp-server
	dh_installsystemd -pisc-dhcp-server --name isc-dhcp-server6
	dh_installsystemd -pisc-dhcp-relay --name isc-dhcp-relay
	dh_installsystemd -pisc-dhcp-relay --name isc-dhcp-relay6
