#!/usr/bin/make -f
INSTALL = install
INSTALL_PROGRAM = $(INSTALL) -p    -o root -g root  -m  755

package=zsh
ifeq (zsh-beta,$(package))
snapshot_date := $(shell dpkg-parsechangelog | sed -n '/^Version: [0-9.][0-9.]*.*+20[0-9][0-9]\([0-9][0-9][0-9][0-9]\)-[0-9][0-9]*$$/ {s//\1/;p}')
endif

-include /usr/share/dpkg/buildflags.mk
export CFLAGS LDFLAGS CPPFLAGS
H_LDFLAGS = $(LDFLAGS)

CFLAGS += -Wall -g
ifeq (zsh-beta,$(package))
CFLAGS += -W
endif

CONFIGFLAGS = --prefix=/usr --mandir=/usr/share/man --bindir=/bin LDFLAGS="-Wl,--as-needed -g $(H_LDFLAGS)"

ifeq (zsh-beta,$(package))
CONFIGFLAGS += --program-suffix=-beta
endif

CONFIGFLAGS += --infodir=/usr/share/info --enable-maildir-support
CONFIGFLAGS += --enable-max-jobtable-size=256 --enable-etcdir=/etc/$(package)
CONFIGFLAGS += --enable-function-subdirs
CONFIGFLAGS += --enable-site-fndir=/usr/local/share/$(package)/site-functions
CONFIGFLAGS += --enable-fndir=/usr/share/$(package)/functions
CONFIGFLAGS += --with-tcsetpgrp --with-term-lib="ncursesw tinfo"
CONFIGFLAGS += --enable-cap --enable-pcre
CONFIGFLAGS += --enable-readnullcmd=pager
CONFIGFLAGS += --enable-custom-patchlevel=Debian
CONFIGFLAGS += --enable-additional-fpath=/usr/share/zsh/vendor-functions,/usr/share/zsh/vendor-completions

STATICFLAGS = --disable-dynamic --enable-ldflags=-static
ifneq (zsh-beta,$(package))
STATICFLAGS += --disable-dynamic-nss
endif

ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
CONFIGFLAGS += --enable-zsh-debug --enable-zsh-mem-debug --enable-zsh-mem-warning --enable-zsh-secure-free --enable-zsh-hash-debug
endif

ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
CFLAGS += -O0
else
CFLAGS += -O2
endif

build: build-arch build-indep
build-stamp: stamp-configure
	dh_testdir
ifeq (zsh-beta,$(package))
	touch stamp-h.in
endif

build-arch: build-stamp
	cd obj && $(MAKE)
	cd obj && HOME="$(CURDIR)/obj/testhome" $(MAKE) check

	touch build-arch

build-indep: build-stamp
ifeq (zsh,$(package))
	cd obj && $(MAKE) pdf
endif

	touch build-indep

build-static: stamp-configure-static
	dh_testdir
	cd obj-static && $(MAKE)

	touch build-static

build-debug: DEB_BUILD_OPTIONS+=debug
build-debug: build

configure:
	touch stamp-h.in #configure
	dh_autoreconf

stamp-configure: configure
	dh_testdir
	chmod 755 configure
	mkdir -p obj/testhome
ifeq (zsh-beta,$(package))
	test -f Config/version.mk.orig || cp Config/version.mk Config/version.mk.orig
	sed -i -e 's/^VERSION=\([^+]*\)$$/VERSION=\1-cvs$(snapshot_date)/' Config/version.mk
endif
	cd obj && CFLAGS='$(CFLAGS)' ../configure $(CONFIGFLAGS)
	touch stamp-configure

stamp-configure-static: configure
	dh_testdir
	mkdir obj-static
	cd obj-static && CFLAGS='$(CFLAGS)' ../configure $(CONFIGFLAGS) $(STATICFLAGS)
#	cp debian/static.conf obj-static/Src/mymods.conf
	sed -i -e 's/files.mdd link=no/files.mdd link=static/;s/stat.mdd link=no/stat.mdd link=static/' obj-static/config.modules
	touch stamp-configure-static

clean:
	dh_testdir
	dh_autoreconf_clean
ifeq (zsh-beta,$(package))
	test ! -f Config/version.mk.orig || mv Config/version.mk.orig Config/version.mk
endif
	-rm -f build build-static
	if test -d obj && cd obj && test -f Makefile; then $(MAKE) distclean; fi
	if test -d obj-static && cd obj-static && test -f Makefile; then $(MAKE) distclean; fi
ifneq (zsh-beta,$(package))
	dh_auto_clean
endif
	dh_clean
	-rm -rf config.cache obj obj-static autom4te.cache

binary-indep:	checkroot build-indep
	dh_testdir
	dh_installdirs -p$(package)-doc

	-cd obj && $(MAKE) install.info DESTDIR=$(CURDIR)/debian/zsh-doc
	rm -f debian/zsh-doc/usr/share/info/dir*
	gzip -9frq debian/zsh-doc/usr/share/info/*
	cd obj && $(MAKE) install.html DESTDIR=$(CURDIR)/debian/zsh-doc htmldir=/usr/share/doc/$(package)-doc/html
# Work around texi2html unfriendliness
	sed -i -e 's/<BODY.*>/<BODY LANG="EN">/' debian/zsh-doc/usr/share/doc/$(package)-doc/html/*.html

	dh_installdocs -p$(package)-doc
	dh_installchangelogs -p$(package)-doc
	dh_compress -p$(package)-doc -Xpdf
	dh_fixperms -p$(package)-doc
	dh_installdeb -p$(package)-doc
	dh_md5sums -p$(package)-doc
	dh_gencontrol -p$(package)-doc
	dh_builddeb -p$(package)-doc -- -Zxz

ifneq (zsh-beta,$(package))
binary-arch: binary-arch-dynamic binary-arch-static binary-arch-dev
else
binary-arch: binary-arch-dynamic
endif
binary-arch-dynamic:	checkroot build-arch
	dh_testdir

	dh_installdirs -p$(package) -p$(package)-common -p$(package)-dbg

	cd obj && $(MAKE) install.man DESTDIR=$(CURDIR)/debian/$(package)-common
	nroff -mandoc -Tascii Doc/zshbuiltins.1 | colcrt - | \
	sed -e 's//{+|-}/' | ( cd debian/$(package)-common/usr/share/$(package)/help && \
	perl $(CURDIR)/Util/helpfiles )

ifeq (zsh-beta,$(package))
	sed -r -i -e \
	's/zsh(all|builtins|compctl|compsys|compwid|contrib|expn|misc|modules|options|param|roadmap|tcpsys|zftpsys|zle|calsys)/$(package)\1/g' \
	debian/$(package)-common/usr/share/man/man1/*.1
endif

# functions
	dh_installexamples -p$(package)-common -X.distfiles
	cd  debian/$(package)-common/usr/share/doc/$(package)-common/examples/; mv Example Functions
	sed -i -e '1!b;s:^#!.*[ /]zsh:#!/bin/$(package):;s#/usr/local/bin#/usr/bin#' \
	   debian/$(package)-common/usr/share/doc/$(package)-common/examples/Misc/*

	cd obj && $(MAKE) install.bin DESTDIR=$(CURDIR)/debian/$(package) INSTALL_PROGRAM='$(INSTALL_PROGRAM)'
	cd obj && $(MAKE) install.modules DESTDIR=$(CURDIR)/debian/$(package) INSTALL_PROGRAM='$(INSTALL_PROGRAM)'
	cd obj && $(MAKE) install.fns DESTDIR=$(CURDIR)/debian/$(package)-common

	rm -r debian/$(package)-common/usr/local

# move this to a non-root section; also drop it for cross-compiles
	awk '/^#define FPATH_DIR/ { head=$$3; gsub(/"/,"",head); }; /^#define FPATH_SUBDIRS/ { $$1=""; $$2=""; gsub(/[" ]/,""); tail=$$0; } END { printf "%s/%s\n", head, tail; };' obj/Src/zshpaths.h >obj/Src/zshpaths.temp
	debian/zsh/bin/$(package) -fc 'setopt extendedglob; for i in debian/$(package)-common/'`cat obj/Src/zshpaths.temp`'; do zcompile -U -M $$i.zwc $$i/*~*.zwc(^/) ; chmod 644 $$i.zwc ; done'

ifneq (zsh-beta,$(package))
	mv debian/zsh/bin/zsh debian/zsh/bin/zsh5
	rm debian/zsh/bin/zsh-5.[0-9]*

	dh_strip -p$(package) --dbg-package=$(package)-dbg
endif

	dh_link -p$(package) -p$(package)-common -p$(package)-dbg
	dh_install -p$(package) -p$(package)-common -p$(package)-dbg

	sed -i -e 's,^local HELPDIR=.*,local HELPDIR=$${HELPDIR:-/usr/share/$(package)/help},;s,:-more,:-/usr/bin/pager,;' debian/$(package)-common/usr/share/$(package)/functions/Misc/run-help
	sed -i -e '1!b;s:^#!.*[ /]zsh:#!/bin/$(package):;s#/usr/local/bin#/usr/bin#;' `find debian/$(package)-common/usr/share/$(package)/functions -type f`
	chmod 755 debian/$(package)-common/usr/share/$(package)/functions/Misc/checkmail \
	          debian/$(package)-common/usr/share/$(package)/functions/Misc/harden \
	          debian/$(package)-common/usr/share/$(package)/functions/Misc/run-help \
	          debian/$(package)-common/usr/share/$(package)/functions/Misc/zkbd \
	          debian/$(package)-common/usr/share/$(package)/functions/Misc/zcalc \

	dh_installmenu -p$(package)-common

	dh_shlibdeps -p$(package) -p$(package)-dbg -- -dDepends debian/zsh/bin/* -dRecommends debian/zsh/usr/lib/$(package)/*/zsh/*.so
	dh_installdocs -p$(package)-common -p$(package)-dbg
	dh_installchangelogs -p$(package)-common -p$(package)-dbg ChangeLog
	dh_lintian -p$(package) -p$(package)-common -p$(package)-dbg
	dh_compress -p$(package) -p$(package)-common -p$(package)-dbg
	dh_fixperms -p$(package) -p$(package)-common -p$(package)-dbg
	dh_installdeb -p$(package) -p$(package)-common -p$(package)-dbg
	dh_md5sums -p$(package) -p$(package)-common -p$(package)-dbg
	dh_gencontrol -p$(package) -p$(package)-common -p$(package)-dbg
	dh_builddeb -p$(package) -p$(package)-common -p$(package)-dbg -- -Zxz

binary-arch-static:	checkroot build-static
	dh_testdir

	dh_installdirs -p$(package)-static
	dh_lintian -p$(package)-static

	awk 'BEGIN { print "The following modules are statically-compiled into the static $(package) binary:\n"; } /link=static/ { printf "%s (%s %s)\n", substr($$1,6), $$4, $$5; }' obj-static/config.modules >debian/zsh-static/usr/share/doc/$(package)-static/README.Debian

	dh_install -p$(package)-static
	mv debian/$(package)-static/bin/zsh debian/$(package)-static/bin/zsh5-static

ifneq (zsh-beta,$(package))
	dh_shlibdeps -p$(package)-static
endif

	dh_strip -p$(package)-static
	dh_link -p$(package)-static
	dh_installdocs -p$(package)-static
	dh_installchangelogs -p$(package)-static
	dh_compress -p$(package)-static
	dh_fixperms -p$(package)-static
	dh_installdeb -p$(package)-static
	dh_md5sums -p$(package)-static
	dh_gencontrol -p$(package)-static
	dh_builddeb -p$(package)-static


binary-arch-dev:	checkroot build-arch
	dh_installdirs -p$(package)-dev
	dh_install -p$(package)-dev
	cd debian/$(package)-dev/usr/share/aclocal; mv aczshoot.m4 zshoot.m4
	dh_installdocs -p$(package)-dev
	dh_installchangelogs -p$(package)-dev
	dh_compress -p$(package)-dev
	dh_fixperms -p$(package)-dev
	dh_installdeb -p$(package)-dev
	dh_md5sums -p$(package)-dev
	dh_gencontrol -p$(package)-dev
	dh_builddeb -p$(package)-dev

ifneq (zsh-beta,$(package))
binary:		binary-indep binary-arch binary-arch-static binary-arch-dev
else
binary:		binary-indep binary-arch
endif

prebuild:
	Util/preconfig
	./configure
	make -C Doc
	make distclean
	rm -rf autom4te.cache

checkroot:
	dh_testdir
	test root = "`whoami`"

.PHONY: binary binary-arch binary-indep clean checkroot binary-arch-dynamic binary-arch-static prebuild binary-arch-dev
