#!/usr/bin/make -f

tmpdir		:= $(shell pwd)/debian-pdns/tmp
be_tmpdir	:= $(shell pwd)/debian-pdns/tmp-backend
tools_tmpdir:= $(shell pwd)/debian-pdns/tmp-tools
backends	:= opendbx ldap pipe gmysql gpgsql gsqlite3
debs		:= opendbx ldap pipe pgsql sqlite sqlite3

binary-doc:
	-make -C pdns/docs html/index.html

	rm -rf "$(tmpdir)"

	install -d -m 755 -o root -g root \
		"$(tmpdir)"/usr/share/doc/pdns/html
	set -e ; for i in pdns/docs/html/* ; do \
		install -p -m 644 -o root -g root "$$i" \
			"$(tmpdir)"/usr/share/doc/pdns/html/ ; \
		done

	install -d -m 755 -o root -g root \
		"$(tmpdir)"/usr/share/doc/pdns-doc
	install -p -m 644 -o root -g root debian-pdns/changelog \
			"$(tmpdir)"/usr/share/doc/pdns-doc/changelog.Debian
	gzip -9 "$(tmpdir)"/usr/share/doc/pdns-doc/*
	install -p -m 644 -o root -g root debian-pdns/copyright \
			"$(tmpdir)"/usr/share/doc/pdns-doc/

	install -d -m 755 -o root -g root "$(tmpdir)"/usr/share/doc-base
	install -p -m 644 -o root -g root debian-pdns/doc-base \
			"$(tmpdir)"/usr/share/doc-base/pdns

	install -d -m 755 -o root -g root "$(tmpdir)"/DEBIAN
	install -p -m 755 -o root -g root debian-pdns/pdns-doc.prerm \
			"$(tmpdir)"/DEBIAN/prerm
	install -p -m 755 -o root -g root debian-pdns/pdns-doc.postinst \
			"$(tmpdir)"/DEBIAN/postinst

	dpkg-gencontrol -fdebian-pdns/files -cdebian-pdns/control -ldebian-pdns/changelog -isp -ppdns-doc -P"$(tmpdir)"
	dpkg --build "$(tmpdir)" ..


build-static stamp-build-static:
		./configure \
		CXX=$(shell pwd)/build-scripts/semistaticg++ \
		PKG_CONFIG_PATH=/opt/botan-1.10/lib/pkgconfig/ \
		--prefix=/usr \
		--libexecdir='$${prefix}/lib' \
		--libdir='$${prefix}/lib/powerdns' \
		--sysconfdir=/etc/powerdns \
		--infodir='$${datadir}/info' \
		--mandir='$${datadir}/man' \
		--with-pgsql-lib=/opt/postgresql/lib --with-pgsql-includes=/opt/postgresql/include \
		--with-modules="gmysql gpgsql pipe gsqlite3 lua geo tinydns mydns opendbx remote" \
		--with-dynmodules="" \
		--enable-botan1.10 \
		--enable-static-binaries \
		--enable-tools
	make -j4

	touch stamp-build-static


build stamp-build: configure
	./configure \
		--prefix=/usr \
		--libexecdir='$${prefix}/lib' \
		--libdir='$${prefix}/lib/powerdns' \
		--sysconfdir=/etc/powerdns \
		--infodir='$${datadir}/info' \
		--mandir='$${datadir}/man' \
		--with-dynmodules="$(backends)" \
		--with-modules="geo" 
	make
	touch stamp-build


binary-main-prepare: 
	rm -f debian-pdns/substvars
	rm -rf "$(tmpdir)" "$(tmpdir)"-*
	rm -rf "$(tools_tmpdir)" "$(tools_tmpdir)"-*
	install -d -m 755 -o root -g root "$(tmpdir)"
	install -d -m 755 -o root -g root "$(tools_tmpdir)"
	make DESTDIR="$(tmpdir)" install

	rm -f "$(tmpdir)"/usr/bin/binpatch
	rm -f "$(tmpdir)"/usr/bin/zone2ldap
	rm -rf "$(tmpdir)"/usr/lib
	rm -f "$(tmpdir)"/usr/share/man/man8/zone2ldap.8
	strip --remove-section=.comment --remove-section=.note \
		--strip-unneeded \
		"$(tmpdir)"/usr/bin/zone2sql \
		"$(tmpdir)"/usr/sbin/pdns_server \
		"$(tmpdir)"/usr/bin/pdns_control
	mv "$(tmpdir)"/etc/powerdns/pdns.conf-dist "$(tmpdir)"/etc/powerdns/pdns.conf

	install -d -m 755 -o root -g root "$(tmpdir)"/etc/init.d
	install -p -m 755 -o root -g root pdns/pdns \
		"$(tmpdir)"/etc/init.d/pdns

	install -d -m 755 -o root -g root \
		"$(tmpdir)"/usr/share/doc/pdns
	install -p -m 644 -o root -g root debian-pdns/changelog \
			"$(tmpdir)"/usr/share/doc/pdns/changelog.Debian
	gzip -9 "$(tmpdir)"/usr/share/doc/pdns/c*
	install -p -m 644 -o root -g root debian-pdns/copyright \
			"$(tmpdir)"/usr/share/doc/pdns/
	
	install -d -m 755 -o root -g root "$(tmpdir)"/DEBIAN
	install -p -m 755 -o root -g root debian-pdns/pdns.prerm \
			"$(tmpdir)"/DEBIAN/prerm
	install -p -m 755 -o root -g root debian-pdns/pdns.postrm \
			"$(tmpdir)"/DEBIAN/postrm
	install -p -m 755 -o root -g root debian-pdns/pdns.postinst \
			"$(tmpdir)"/DEBIAN/postinst
	install -p -m 644 -o root -g root debian-pdns/pdns.conffiles \
			"$(tmpdir)"/DEBIAN/conffiles


	install -d -m 755 -o root -g root \
		"$(tools_tmpdir)"/usr/bin
	install -d -m 755 -o root -g root \
		"$(tools_tmpdir)"/usr/share/man/man8
	install -d -m 755 -o root -g root \
		"$(tools_tmpdir)"/usr/share/man/man1
	install -d -m 755 -o root -g root \
		"$(tools_tmpdir)"/usr/share/doc/pdns-tools
	install -p -m 644 -o root -g root debian-pdns/changelog \
			"$(tools_tmpdir)"/usr/share/doc/pdns-tools/changelog.Debian
	gzip -9 "$(tools_tmpdir)"/usr/share/doc/pdns-tools/c*
	install -p -m 644 -o root -g root debian-pdns/copyright \
			"$(tools_tmpdir)"/usr/share/doc/pdns-tools/

	install -d -m 755 -o root -g root "$(tools_tmpdir)"/DEBIAN

	#FIXME: shell loops hide errors
	for prog in dnsbulktest dnsreplay dnsscan dnsscope dnstcpbench dnswasher nproxy nsec3dig ; do \
		mv "$(tmpdir)"/usr/bin/$$prog "$(tools_tmpdir)"/usr/bin ; \
		[ -e "$(tmpdir)"/usr/share/man/man8/"$$prog".8 ] && \
			mv "$(tmpdir)"/usr/share/man/man8/"$$prog".8 "$(tools_tmpdir)"/usr/share/man/man8/ ; \
		[ -e "$(tmpdir)"/usr/share/man/man1/"$$prog".1 ] && \
			mv "$(tmpdir)"/usr/share/man/man1/"$$prog".1 "$(tools_tmpdir)"/usr/share/man/man1/ ; \
		strip --remove-section=.comment --remove-section=.note \
			--strip-unneeded \
			"$(tools_tmpdir)"/usr/bin/"$$prog" ; \
	done



binary-main: stamp-build binary-main-prepare
	dpkg-shlibdeps -Tdebian-pdns/substvars "$(tmpdir)"/usr/bin/zone2sql \
		"$(tmpdir)"/usr/sbin/pdns_server \
		"$(tmpdir)"/usr/bin/pdns_control
	dpkg-gencontrol -fdebian-pdns/files -cdebian-pdns/control -ldebian-pdns/changelog  -isp -ppdns -P"$(tmpdir)"
	dpkg --build "$(tmpdir)" ..


binary-static: stamp-build-static binary-main-prepare
	dpkg-gencontrol -fdebian-pdns/files -cdebian-pdns/control -ldebian-pdns/changelog  -isp -ppdns-static -P"$(tmpdir)"
	dpkg-gencontrol -fdebian-pdns/files -cdebian-pdns/control -ldebian-pdns/changelog  -isp -ppdns-tools -P"$(tools_tmpdir)"
	dpkg --build "$(tmpdir)" ..
	dpkg --build "$(tools_tmpdir)" ..

binary-backend: stamp-build
	rm -rf "$(tmpdir)"

	install -d -m 755 -o root -g root "$(tmpdir)"
	make DESTDIR="$(tmpdir)" install

	chmod 644 "$(tmpdir)"/usr/lib/powerdns/*

	set -e ; for be in $(debs) ; do \
		rm -f debian-pdns/substvars ; \
		rm -rf "$(be_tmpdir)" ; \
		pkg=pdns-backend-$$be ; \
		\
		for file in $$(cd "$(tmpdir)" ; find . -name "*$$be*") ; do \
			install -d -m 755 -o root -g root "$(be_tmpdir)"/$$(dirname "$$file") ; \
			mv "$(tmpdir)"/"$$file" "$(be_tmpdir)"/"$$file" ; \
		done ; \
		\
		install -d -m 755 -o root -g root "$(be_tmpdir)"/usr/share/doc ; \
		ln -s pdns "$(be_tmpdir)"/usr/share/doc/$$pkg ; \
		\
		install -d -m 755 -o root -g root "$(be_tmpdir)"/DEBIAN ; \
		dpkg-shlibdeps -Tdebian-pdns/substvars "$(be_tmpdir)"/usr/lib/powerdns/*.so ; \
		dpkg-gencontrol -fdebian-pdns/files -cdebian-pdns/control -ldebian-pdns/changelog  -isp -p$$pkg -P"$(be_tmpdir)" ; \
		dpkg --build "$(be_tmpdir)" .. ; \
	done


binary: binary-indep binary-arch
binary-indep: binary-doc
binary-arch: binary-main binary-backend

clean:
	-make distclean
	-make -C pdns/docs clean
	rm -f debian-pdns/files debian-pdns/substvars stamp-build stamp-build-static
	rm -rf "$(tmpdir)" "$(be_tmpdir)"

.PHONY: clean build binary binary-arch binary-indep
.PHONY: binary-doc binary-main binary-backend

