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

package=zsh-beta
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

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

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

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"
CONFIGFLAGS += --enable-cap --enable-pcre
CONFIGFLAGS += --enable-readnullcmd=pager

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

ifeq (zsh-beta,$(package))
ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
INSTALL_PROGRAM += -s
endif
endif

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

	cd obj && $(MAKE)

	-cd obj && HOME="$(CURDIR)/obj/testhome" $(MAKE) check

ifeq (zsh,$(package))
	cd obj && $(MAKE) pdf
endif

	touch build

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

	touch build-static

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

stamp-configure:
	$(checkdir)
ifneq (zsh-beta,$(package))
	touch stamp-h.in configure
else
	chmod 755 configure
endif
	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:
	$(checkdir)
	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:
	$(checkdir)
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))
	test ! -f Makefile || $(MAKE) distclean
endif
	-rm -f `find . -name "*~"` \
	        debian/files* core debian/*ubstvars \
	        stamp-configure stamp-configure-static \
		config.cache config.status config.status.lineno \
		Doc/zsh.idx config.h.in~
	-rm -rf debian/tmp debian/tmp-doc debian/tmp-static debian/tmp-dbg \
	        debian/tmp-dev config.cache obj obj-static \
		autom4te.cache

binary-indep:	checkroot build
	$(checkdir)
	-rm -rf debian/tmp-doc
	$(INSTALL_DIR) debian/tmp-doc
	cd debian/tmp-doc && $(INSTALL_DIR) usr/share/doc-base \
		usr/share/info \
		usr/share/doc/$(package)-doc/html \
		DEBIAN

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

ifeq (zsh,$(package))
	$(INSTALL_FILE) obj/Doc/zsh.pdf debian/tmp-doc/usr/share/doc/$(package)-doc/
endif

	$(INSTALL_FILE) debian/copyright debian/tmp-doc/usr/share/doc/$(package)-doc/copyright
	$(INSTALL_FILE) debian/changelog debian/tmp-doc/usr/share/doc/$(package)-doc/changelog.Debian
	gzip -9frq debian/tmp-doc/usr/share/doc/$(package)-doc/changelog.Debian
	$(INSTALL_FILE) debian/$(package).doc-base debian/tmp-doc/usr/share/doc-base/$(package)
	cd debian/tmp-doc && find * -type f ! -regex '^DEBIAN/.*' -print0 | xargs -r0 md5sum > DEBIAN/md5sums

	dpkg-gencontrol -isp -p$(package)-doc -Pdebian/tmp-doc
	chown -R root.root debian/tmp-doc
	chmod -R go=rX debian/tmp-doc
	dpkg --build debian/tmp-doc ..

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
	$(checkdir)

	-rm -rf debian/tmp debian/tmp-dbg
	$(INSTALL_DIR) debian/tmp debian/tmp-dbg/usr/lib/debug/bin debian/tmp-dbg/DEBIAN
	cd debian/tmp && $(INSTALL_DIR) etc/$(package) \
		bin \
		usr/lib/$(package) \
		usr/share/menu \
		usr/share/man \
		usr/share/$(package)/help \
		usr/share/doc/$(package)/examples/Functions \
		usr/share/doc/$(package)/examples/Misc \
		DEBIAN

	cd obj && $(MAKE) install.man DESTDIR=$(CURDIR)/debian/tmp
	nroff -mandoc -Tascii Doc/zshbuiltins.1 | colcrt - | \
	sed -e 's//{+|-}/' | ( cd debian/tmp/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/tmp/usr/share/man/man1/*.1
endif

# functions
	$(INSTALL_FILE) -m 644 Misc/* debian/tmp/usr/share/doc/$(package)/examples/Misc/.
	$(INSTALL_FILE) -m 644 Functions/Example/* debian/tmp/usr/share/doc/$(package)/examples/Functions/.
	sed -i -e '1!b;s:^#!.*[ /]zsh:#!/bin/$(package):;s#/usr/local/bin#/usr/bin#' \
	   debian/tmp/usr/share/doc/$(package)/examples/Misc/*
	$(INSTALL_FILE) StartupFiles/* debian/tmp/usr/share/doc/$(package)/examples/.
	$(INSTALL_FILE) Util/reporter debian/tmp/usr/share/doc/$(package)/examples/.

	$(INSTALL_FILE) debian/examples/ssh_completion debian/examples/ssh_completion2 debian/tmp/usr/share/doc/$(package)/examples/.
ifneq (zsh-beta,$(package))
	$(INSTALL_FILE) debian/examples/compctl.dpkg debian/examples/jhm.zshrc debian/tmp/usr/share/doc/$(package)/examples/old/.
endif

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

	rm -r debian/tmp/usr/local

	sed -i -e 's,^local HELPDIR=.*,local HELPDIR=$${HELPDIR:-/usr/share/$(package)/help},;s,:-more,:-/usr/bin/pager,;s,man zsh,man zsh-beta,;' debian/tmp/usr/share/$(package)/functions/Misc/run-help
# 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/tmp/bin/$(package) -fc 'setopt extendedglob; for i in debian/tmp/'`cat obj/Src/zshpaths.temp`'; do zcompile -U -M $$i.zwc $$i/*~*.zwc(^/) ; chmod 644 $$i.zwc ; done'

ifneq (zsh-beta,$(package))
	mv debian/tmp/bin/zsh debian/tmp/bin/zsh4
	rm debian/tmp/bin/zsh-4.[0-9]*
	ln -s zsh.1.gz debian/tmp/usr/share/man/man1/zsh4.1.gz

	for i in `find debian/tmp/usr/lib/zsh -type d | sed 's#^debian/tmp/##'`; \
		do mkdir -p debian/tmp-dbg/usr/lib/debug/"$$i"; done

	objcopy --only-keep-debug debian/tmp/bin/zsh4 \
	                          debian/tmp-dbg/usr/lib/debug/bin/zsh4.dbg
	strip --remove-section=.comment --remove-section=.note debian/tmp/bin/zsh4
	objcopy --add-gnu-debuglink=debian/tmp-dbg/usr/lib/debug/bin/zsh4.dbg debian/tmp/bin/zsh4

	for i in `find debian/tmp/usr/lib/zsh -name "*.so"`; \
		do objcopy --only-keep-debug $$i debian/tmp-dbg/usr/lib/debug/`echo $$i | sed 's#^debian/tmp/##'`.debug; \
		   strip --remove-section=.comment --remove-section=.note \
		         --strip-unneeded $$i; \
		   objcopy --add-gnu-debuglink=debian/tmp-dbg/usr/lib/debug/`echo $$i | sed 's#^debian/tmp/##'`.debug $$i; \
		done
else
	rm debian/tmp/bin/zsh-beta-*
ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
	strip --remove-section=.comment --remove-section=.note debian/tmp/bin/zsh-beta
	strip --remove-section=.comment --remove-section=.note \
	      --strip-unneeded `find debian/tmp/usr/lib/zsh-beta -name "*.so"`
endif
endif

	$(INSTALL_DIR) debian/tmp-dbg/usr/share/doc
	ln -s zsh debian/tmp-dbg/usr/share/doc/$(package)-dbg

	$(INSTALL_FILE) debian/zlogin debian/zlogout debian/zprofile debian/zshenv debian/zshrc debian/tmp/etc/$(package)/.

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

	$(INSTALL_FILE) Etc/ChangeLog* README META-FAQ Doc/zsh.texi Etc/BUGS Etc/CONTRIBUTORS FEATURES \
		Etc/FTP-README MACHINES NEWS Etc/TODO Etc/completion-style-guide Etc/zsh-development-guide Functions/README.zftp debian/tmp/usr/share/doc/$(package)/
	$(INSTALL_FILE) ChangeLog debian/tmp/usr/share/doc/$(package)/changelog
	chmod -R u+rw,go=rX debian/tmp/usr/share/doc
	$(INSTALL_FILE) debian/copyright debian/tmp/usr/share/doc/$(package)/copyright

	$(INSTALL_FILE) debian/changelog debian/tmp/usr/share/doc/$(package)/changelog.Debian
ifeq (zsh-beta,$(package))
	$(INSTALL_FILE) debian/NEWS debian/tmp/usr/share/doc/$(package)/NEWS.Debian
endif

	$(INSTALL_FILE) debian/README.Debian debian/tmp/usr/share/doc/$(package)/README.Debian

	$(INSTALL_FILE) debian/menu debian/tmp/usr/share/menu/$(package)

	chmod 644 `find debian/tmp/usr/share/man -type f` `find debian/tmp/usr/share/doc -type f`
	chmod 644 `find debian/tmp/usr/lib/$(package) -type f -name "*.so"`
	chmod 644 `find debian/tmp/usr/share/$(package) -type f -name "_*"`
	gzip -9f `find debian/tmp/usr/share/man -type f` `find debian/tmp/usr/share/doc -type f ! -name "copyright"`
	dpkg-shlibdeps -Tdebian/substvars -dDepends debian/tmp/bin/* -dRecommends debian/tmp/usr/lib/$(package)/*/zsh/*.so
	dpkg-gencontrol -ldebian/changelog -isp -p$(package) -Tdebian/substvars -Pdebian/tmp
ifneq (zsh-beta,$(package))
	cd debian/tmp-dbg && find * -type f ! -regex '^DEBIAN/.*' -print0 | xargs -r0 md5sum > DEBIAN/md5sums
	dpkg-gencontrol -ldebian/changelog -isp -p$(package)-dbg -Tdebian/substvars -Pdebian/tmp-dbg
endif

	$(INSTALL_SCRIPT) debian/postinst debian/tmp/DEBIAN/postinst
	$(INSTALL_SCRIPT) debian/postrm debian/tmp/DEBIAN/postrm
	$(INSTALL_SCRIPT) debian/prerm debian/tmp/DEBIAN/prerm
	$(INSTALL_FILE) debian/conffiles debian/tmp/DEBIAN/conffiles

	cd debian/tmp && find * -type f ! -path "etc/$(package)/zlogin" ! -path "etc/$(package)/zlogout" ! -path "etc/$(package)/zprofile" ! -path "etc/$(package)/zshenv" ! -path "etc/$(package)/zshrc"  ! -regex '^DEBIAN/.*' -print0 | xargs -r0 md5sum > DEBIAN/md5sums

ifneq (zsh-beta,$(package))
	chown -R root:root debian/tmp debian/tmp-dbg
	chmod -R go=rX debian/tmp debian/tmp-dbg
else
	chown -R root:root debian/tmp
	chmod -R go=rX debian/tmp
endif

	dpkg --build debian/tmp ..
ifneq (zsh-beta,$(package))
	dpkg --build debian/tmp-dbg ..
endif

define checkdir
	test -f debian/rules
endef

binary-arch-static:	checkroot build-static
	$(checkdir)

	-rm -rf debian/tmp-static
	$(INSTALL_DIR) debian/tmp-static/usr/share/man/man1/
	cd debian/tmp-static && $(INSTALL_DIR) bin \
		usr/share/lintian/overrides \
		usr/share/doc/$(package)-static \
		DEBIAN

	$(INSTALL_FILE) debian/lintianoverrides debian/tmp-static/usr/share/lintian/overrides/$(package)-static
	$(INSTALL_SCRIPT) debian/static.prerm debian/tmp-static/DEBIAN/prerm
	$(INSTALL_SCRIPT) debian/static.postinst debian/tmp-static/DEBIAN/postinst
	$(INSTALL_SCRIPT) debian/static.postrm debian/tmp-static/DEBIAN/postrm

	$(INSTALL_FILE) debian/changelog debian/tmp-static/usr/share/doc/$(package)-static/changelog.Debian

	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/tmp-static/usr/share/doc/$(package)-static/README.Debian

	$(INSTALL_FILE) debian/copyright debian/tmp-static/usr/share/doc/$(package)-static/copyright

	$(INSTALL_PROGRAM) obj-static/Src/zsh debian/tmp-static/bin/zsh4-static
	strip --remove-section=.comment --remove-section=.note debian/tmp-static/bin/zsh4-static

	gzip -9f debian/tmp-static/usr/share/doc/$(package)-static/changelog.Debian
	cd debian/tmp-static && find * -type f  ! -regex '^DEBIAN/.*' -print0 | xargs -r0 md5sum > DEBIAN/md5sums
	ln -s $(package).1.gz debian/tmp-static/usr/share/man/man1/zsh4-static.1.gz

ifneq (zsh-beta,$(package))
	dpkg-shlibdeps -Tdebian/$(package)-static.substvars -dDepends debian/tmp-static/bin/*
endif
	dpkg-gencontrol -ldebian/changelog -isp -p$(package)-static -Tdebian/$(package)-static.substvars -Pdebian/tmp-static
	chown -R root.root debian/tmp-static
	chmod -R go=rX debian/tmp-static
	dpkg --build debian/tmp-static ..

binary-arch-dev:	checkroot build
	$(INSTALL_DIR) debian/tmp-dev/usr/include/$(package) \
	               debian/tmp-dev/usr/share/$(package)-dev \
		       debian/tmp-dev/usr/share/doc/$(package)-dev \
		       debian/tmp-dev/usr/share/aclocal \
		       debian/tmp-dev/DEBIAN
	$(INSTALL_FILE) obj/Src/*.epro obj/Src/sigcount.h \
	                Src/hashtable.h Src/prototypes.h \
			Src/signals.h Src/system.h Src/zsh.h Src/ztype.h \
			debian/tmp-dev/usr/include/$(package)
	$(INSTALL_FILE) Src/makepro.awk debian/tmp-dev/usr/share/$(package)-dev
	$(INSTALL_FILE) Config/aczshoot.m4 debian/tmp-dev/usr/share/aclocal/$(package)oot.m4
	$(INSTALL_FILE) debian/changelog debian/tmp-dev/usr/share/doc/$(package)-dev/changelog.Debian
	$(INSTALL_FILE) debian/copyright debian/tmp-dev/usr/share/doc/$(package)-dev/
	gzip -9f debian/tmp-dev/usr/share/doc/$(package)-dev/changelog.Debian

	cd debian/tmp-dev && find * -type f ! -regex '^DEBIAN/.*' -print0 | xargs -r0 md5sum > DEBIAN/md5sums
	dpkg-gencontrol -ldebian/changelog -isp -p$(package)-dev -Tdebian/$(package)-dev.substvars -Pdebian/tmp-dev
	chown -R root.root debian/tmp-dev
	chmod -R go=rX debian/tmp-dev
	dpkg --build debian/tmp-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:
	$(checkdir)
	test root = "`whoami`"

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