#! /usr/bin/make -f
#
# Debian build rules for "Gnats" by Brian White <bcwhite@pobox.com>
# Taken over by Milan Zamazal <pdm@debian.org>

export DH_COMPAT=3

package	:= gnats

DATADIR := /var/lib
HOMEDIR := $(DATADIR)/gnats
DBDIR   := $(DATADIR)/gnats/gnats-db
LISPDIR := /usr/share/emacs/site-lisp/gnats
MANDIR  := /usr/share/man
SYSCONFDIR := /etc
CONFDIR := $(SYSCONFDIR)/$(package)
USER_ACCESS_FILE := $(CONFDIR)/gnatsd.user_access
HOST_ACCESS_FILE := $(CONFDIR)/gnatsd.host_access
DATABASES := $(CONFDIR)/databases
GSITE	:= unknown-site
GADDR	:= unknown-addr
GORG	:= unknown-org
GADMIN  := gnats-admin
GUSER   := gnats
MAKEDEFS:= DEFAULT_SITE=$(GSITE) GNATS_SITE=$(GSITE) GNATS_ADMIN=$(GADMIN) \
	   GNATS_ADDR=$(GADDR) DEFAULT_ORGANIZATION=$(GORG) SUBMITTER=$(GORG) \
	   GNATS_USER=$(GUSER)
GTKDEFS	:= CHECK_CFG=no
CFLAGS := -O2
ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
  CFLAGS += -g
endif
CONF_SENDMAIL := SENDMAIL=/usr/sbin/sendmail

# The ugly Alpha build-error hack
ifeq ($(DEB_HOST_ARCH),)
  ARCH:=$(shell dpkg-architecture -qDEB_HOST_ARCH 2>/dev/null)
else
  ARCH:=$(DEB_HOST_ARCH)
endif
ifeq ($(ARCH),alpha)
  MAKEDEFS := GCC_CFLAGS='-W -Wall -ansi -pedantic -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings -Wno-format' $(MAKEDEFS)
endif

CONFLAGS:= --prefix=/usr --libexecdir='$${prefix}/lib' --infodir='$${prefix}/share/info' --mandir=$(MANDIR) --sysconfdir=$(SYSCONFDIR) --with-gnats-root=$(DBDIR) --with-gnats-service=gnats --with-gnats-default-db=/var/lib/gnats/gnats-db --with-gnatsd-user-access-file=$(USER_ACCESS_FILE) --with-gnatsd-host-access-file=$(HOST_ACCESS_FILE) --with-gnats-dblist-file=$(DATABASES)
PWD	:= $(shell pwd)
TKGNATS := tkgnats

default:
	@echo "What to do?"
	@echo " - build-server, build-user, build-tk,"
	@echo " - binary, binary-server, binary-user, binary-tk, "
	@echo " - clean, distclean"
	@echo " "

build:
	@echo "There is no general 'build' rule."
	@echo "(appropriate builds will be done as required by the binaries)"

build-server:
	dh_testdir
	rm -f stamp-build-user
	$(CONF_SENDMAIL) ./configure $(CONFLAGS)
	$(MAKE) all info CFLAGS="$(CFLAGS)" datadir=$(DATADIR) $(MAKEDEFS)
	cd doc && texi2html -split_chapter gnats.texi
	touch stamp-build

build-user:
	dh_testdir
	rm -f stamp-build
	$(CONF_SENDMAIL) ./configure $(CONFLAGS)
	$(MAKE) all-tools info CFLAGS="$(CFLAGS)" datadir=$(DATADIR) \
		$(MAKEDEFS)
	cd doc && texi2html -split_chapter gnats.texi
	touch stamp-build-user

build-tk:
	dh_testdir
	$(MAKE) -C contrib/$(TKGNATS) LDIR=/usr SHRDIR=$(DATADIR) \
		$(MAKEDEFS) $(GTKDEFS) clean
	$(MAKE) -C contrib/$(TKGNATS) LDIR=/usr SHRDIR=$(DATADIR) \
		$(MAKEDEFS) $(GTKDEFS) prefix=/usr LIBEXECDIR=/usr/lib
	touch stamp-build-tkgnats

gnatsclean:
	dh_testdir
	-rm -f stamp-*
	$(CONF_SENDMAIL) ./configure $(CONFLAGS)
	-$(MAKE) -C contrib/$(TKGNATS) clean
	-$(MAKE) distclean
	cd doc && rm -f *.html

clean: gnatsclean
	dh_testdir
	-rm -f build build-user build-tk
	dh_clean

binary-server:
	dh_testdir
	dh_testroot
	test -f stamp-build || $(MAKE) -f debian/rules gnatsclean build-server
	dh_installdirs -p$(package) etc/cron.daily etc/cron.d \
		etc/emacs/site-start.d \
		etc/gnats/db-config usr/bin usr/share/doc/$(package)/html \
		usr/share/info usr/share/lintian/overrides \
		usr/lib/emacsen-common/packages/install \
		usr/lib/emacsen-common/packages/remove \
		usr/lib/gnats usr/share/man/man1 usr/share/man/man5 \
		usr/share/man/man7 usr/share/man/man8
	$(MAKE) -C gnats CFLAGS="$(CFLAGS)" prefix=$(PWD)/debian/gnats/usr \
		install $(MAKEDEFS) \
		datadir=$(PWD)/debian/gnats$(DATADIR) \
		sysconfdir=$(PWD)/debian/gnats$(SYSCONFDIR) \
		lispdir=$(PWD)/debian/gnats$(LISPDIR) \
		mandir=$(PWD)/debian/gnats$(MANDIR) \
		GNATS_ROOT=$(PWD)/debian/gnats$(DBDIR) \
		GNATSD_USER_ACCESS_FILE=$(PWD)/debian/gnats$(USER_ACCESS_FILE)\
		GNATSD_HOST_ACCESS_FILE=$(PWD)/debian/gnats$(HOST_ACCESS_FILE)\
		GLOBAL_DB_LIST_FILE=$(PWD)/debian/gnats$(DATABASES)
	$(MAKE) -C send-pr CFLAGS="$(CFLAGS)" prefix=$(PWD)/debian/gnats/usr \
		install $(MAKEDEFS) \
		datadir=$(PWD)/debian/gnats$(DATADIR) \
		sysconfdir=$(PWD)/debian/gnats$(SYSCONFDIR) \
		lispdir=$(PWD)/debian/gnats$(LISPDIR) \
		mandir=$(PWD)/debian/gnats$(MANDIR) \
		GNATS_ROOT=$(PWD)/debian/gnats$(DBDIR) \
		GNATSD_USER_ACCESS_FILE=$(PWD)/debian/gnats$(USER_ACCESS_FILE)\
		GNATSD_HOST_ACCESS_FILE=$(PWD)/debian/gnats$(HOST_ACCESS_FILE)\
		GLOBAL_DB_LIST_FILE=$(PWD)/debian/gnats$(DATABASES)
	$(MAKE) -C doc CFLAGS="$(CFLAGS)" prefix=$(PWD)/debian/gnats/usr \
		install $(MAKEDEFS) \
		datadir=$(PWD)/debian/gnats$(DATADIR) \
		sysconfdir=$(PWD)/debian/gnats$(SYSCONFDIR) \
		lispdir=$(PWD)/debian/gnats$(LISPDIR) \
		mandir=$(PWD)/debian/gnats$(MANDIR) \
		GNATS_ROOT=$(PWD)/debian/gnats$(DBDIR) \
		GNATSD_USER_ACCESS_FILE=$(PWD)/debian/gnats$(USER_ACCESS_FILE)\
		GNATSD_HOST_ACCESS_FILE=$(PWD)/debian/gnats$(HOST_ACCESS_FILE)\
		GLOBAL_DB_LIST_FILE=$(PWD)/debian/gnats$(DATABASES)
	install -m 644 debian/misc/send-pr.conf debian/gnats$(CONFDIR)/
	cp debian/gnats.el debian/gnats/etc/emacs/site-start.d/50gnats.el
	install -m 644 doc/*.html debian/gnats/usr/share/doc/$(package)/html/
	install -m 644 debian/dhelp \
		debian/gnats/usr/share/doc/$(package)/html/.dhelp
	ln -s gnats_toc.html \
		debian/gnats/usr/share/doc/$(package)/html/index.html
	dh_installchangelogs ChangeLog -p$(package)
	dh_installdocs -p$(package)
	dh_installdebconf -p$(package)
	set -e; for i in install remove; do \
		sed 's/|PACKAGE|/gnats/' debian/emacs.$$i \
		>debian/gnats/usr/lib/emacsen-common/packages/$$i/gnats; \
		chmod 755 \
			debian/gnats/usr/lib/emacsen-common/packages/$$i/gnats;\
	done
	install debian/cron.daily debian/gnats/etc/cron.daily/gnats
	install -m 644 debian/cron.d debian/gnats/etc/cron.d/gnats
	install -m 644 debian/user/profile debian/gnats$(HOMEDIR)/.profile
	chown -R gnats.gnats debian/gnats$(DATADIR)/gnats
	chown -R gnats.gnats debian/gnats$(SYSCONFDIR)
	install -m 644 debian/overrides.$(package) \
		debian/gnats/usr/share/lintian/overrides/$(package)
	dh_compress -p$(package)
#	gzip -9 debian/gnats/var/lib/gnats/dist/*
	set -e; for i in debian/gnats/usr/bin/*; do \
		j=`basename $$i`; \
		if [ ! -f debian/gnats/usr/share/man/man1/$$j.1.gz -a \
		     ! -f debian/gnats/usr/share/man/man8/$$j.8.gz ]; then \
			ln -s ../man7/gnats.7.gz \
			      debian/gnats$(MANDIR)/man8/$$j.8.gz; \
		fi; \
	done
	ln -s ../man7/gnats.7.gz debian/gnats$(MANDIR)/man8/check-db.8.gz
	dh_strip -p$(package)
	dh_installdeb -p$(package)
	sed 's/^PACKAGE=$$/PACKAGE=$(package)/' debian/scripts/init \
		>debian/gnats/DEBIAN/preinst
	set -e; for s in fixprobs; do \
		sed -e 1,3d debian/scripts/$$s >>debian/gnats/DEBIAN/preinst; \
	done
	sed 's/^PACKAGE=$$/PACKAGE=$(package)/' debian/scripts/init \
		>debian/gnats/DEBIAN/postinst
	set -e; for s in addinfo adduser addinetd addmail addconfig \
		addemacs addfhs addhtml upgrade; do \
		sed -e 1,3d debian/scripts/$$s >>debian/gnats/DEBIAN/postinst;\
	done
	sed 's/^PACKAGE=$$/PACKAGE=$(package)/' debian/scripts/init \
		>debian/gnats/DEBIAN/prerm
	set -e; for s in rmconfig rmemacs rmmail rminfo rmfhs; do \
		sed -e 1,3d debian/scripts/$$s >>debian/gnats/DEBIAN/prerm; \
	done
	sed 's/^PACKAGE=$$/PACKAGE=$(package)/' debian/scripts/init \
		>debian/gnats/DEBIAN/postrm
	set -e; for s in rmdebconf rminetd; do \
		sed -e 1,3d debian/scripts/$$s >>debian/gnats/DEBIAN/postrm; \
	done
	chmod 755 debian/gnats/DEBIAN/p*
	dh_shlibdeps -p$(package)
	dh_gencontrol -p$(package)
	chmod 644 debian/gnats$(MANDIR)/man7/gnats.7.gz
	chmod -R u+w,go=rX debian/gnats
	find debian/gnats -name 'gnatsd.*access' | xargs -r chmod 600
	find debian/gnats$(DATADIR)/gnats -type d -print | xargs -r chmod g+s
	dh_md5sums -p$(package)
	dh_builddeb -p$(package)

binary-user:
	dh_testdir
	dh_testroot
	test -f stamp-build-user || $(MAKE) -f debian/rules gnatsclean \
		build-user
	dh_installdirs -p$(package)-user etc/emacs/site-start.d usr/bin \
		usr/lib/emacsen-common/packages/install \
		usr/lib/emacsen-common/packages/remove \
		usr/lib/gnats usr/share/info \
		usr/share/doc/$(package)-user/html \
		usr/share/lintian/overrides \
		usr/share/man/man1 usr/share/man/man5 usr/share/man/man7 \
		usr/share/man/man8 \
		var/lib/gnats/dist
	$(MAKE) -C gnats CFLAGS="$(CFLAGS)" \
		prefix=$(PWD)/debian/gnats-user/usr \
		install-tools $(MAKEDEFS) \
		datadir=$(PWD)/debian/gnats-user$(DATADIR) \
		sysconfdir=$(PWD)/debian/gnats-user$(SYSCONFDIR) \
		lispdir=$(PWD)/debian/gnats-user$(LISPDIR)-user \
		mandir=$(PWD)/debian/gnats-user$(MANDIR) \
		GNATS_ROOT=$(PWD)/debian/gnats-user$(DBDIR) \
		GNATSD_USER_ACCESS_FILE=$(PWD)/debian/gnats-user$(USER_ACCESS_FILE) \
		GNATSD_HOST_ACCESS_FILE=$(PWD)/debian/gnats-user$(HOST_ACCESS_FILE) \
		GLOBAL_DB_LIST_FILE=$(PWD)/debian/gnats-user$(DATABASES)
	$(MAKE) -C send-pr CFLAGS="$(CFLAGS)" prefix=$(PWD)/debian/gnats-user/usr \
		install-tools $(MAKEDEFS) \
		datadir=$(PWD)/debian/gnats-user$(DATADIR) \
		sysconfdir=$(PWD)/debian/gnats-user$(DEFAULTSDIR) \
		lispdir=$(PWD)/debian/gnats-user$(LISPDIR)-user \
		mandir=$(PWD)/debian/gnats-user$(MANDIR) \
		GNATS_ROOT=$(PWD)/debian/gnats-user$(DBDIR) \
		GNATSD_USER_ACCESS_FILE=$(PWD)/debian/gnats-user$(USER_ACCESS_FILE) \
		GNATSD_HOST_ACCESS_FILE=$(PWD)/debian/gnats-user$(HOST_ACCESS_FILE) \
		GLOBAL_DB_LIST_FILE=$(PWD)/debian/gnats-user$(DATABASES)
	$(MAKE) -C doc CFLAGS="$(CFLAGS)" prefix=$(PWD)/debian/gnats-user/usr \
		install-tools $(MAKEDEFS) \
		datadir=$(PWD)/debian/gnats-user$(DATADIR) \
		sysconfdir=$(PWD)/debian/gnats-user$(DEFAULTSDIR) \
		lispdir=$(PWD)/debian/gnats-user$(LISPDIR)-user \
		mandir=$(PWD)/debian/gnats-user$(MANDIR) \
		GNATS_ROOT=$(PWD)/debian/gnats-user$(DBDIR) \
		GNATSD_USER_ACCESS_FILE=$(PWD)/debian/gnats-user$(USER_ACCESS_FILE) \
		GNATSD_HOST_ACCESS_FILE=$(PWD)/debian/gnats-user$(HOST_ACCESS_FILE) \
		GLOBAL_DB_LIST_FILE=$(PWD)/debian/gnats-user$(DATABASES)
	install -m 644 debian/misc/send-pr.conf debian/gnats-user$(CONFDIR)/
	rm -rf debian/gnats-user$(DATADIR)/gnats/*
	cp debian/gnats.el debian/gnats-user/etc/emacs/site-start.d/50gnats.el
	install -m 644 doc/*.html \
		debian/gnats-user/usr/share/doc/$(package)-user/html/
	install -m 644 debian/dhelp \
		debian/gnats-user/usr/share/doc/$(package)-user/html/.dhelp
	mv debian/gnats-user/usr/share/doc/$(package)-user/html/gnats_toc.html\
		debian/gnats-user/usr/share/doc/$(package)-user/html/index.html
	dh_installchangelogs ChangeLog -p$(package)-user
	dh_installdocs -p$(package)-user
	dh_installdebconf -p$(package) -Pdebian/gnats-user # really $(package)
	set -e; for i in install remove; do \
		sed 's/|PACKAGE|/gnats-user/' debian/emacs.$$i \
		>debian/gnats-user/usr/lib/emacsen-common/packages/$$i/gnats-user; \
		chmod 755 debian/gnats-user/usr/lib/emacsen-common/packages/$$i/gnats-user;\
	done
	install -m 644 debian/overrides.$(package)-user \
		debian/gnats-user/usr/share/lintian/overrides/$(package)-user
	dh_compress -p$(package)-user
	set -e; for i in debian/gnats-user/usr/bin/*; do \
		j=`basename $$i`; \
		if [ ! -f debian/gnats-user/usr/share/man/man1/$$j.1 -a \
		     ! -f debian/gnats-user/usr/share/man/man8/$$j.8 ]; then \
			ln -s ../man7/gnats.7.gz \
			      debian/gnats-user$(MANDIR)/man8/$$j.8.gz; \
		fi; \
	done
	dh_strip -p$(package)-user
	dh_shlibdeps -p$(package)-user
	dh_installdeb -p$(package)-user
	install -d debian/gnats-user/DEBIAN
	sed 's/^PACKAGE=$$/PACKAGE=$(package)-user/' debian/scripts/init \
		 >debian/gnats-user/DEBIAN/postinst
	set -e; for s in addinfo-user adduser addconfig-user \
		addemacs-user addfhs addhtml-user; do \
		sed -e 1,3d debian/scripts/$$s \
			>>debian/gnats-user/DEBIAN/postinst; \
	done
	sed 's/^PACKAGE=$$/PACKAGE=$(package)-user/' debian/scripts/init \
		>debian/gnats-user/DEBIAN/prerm
	set -e; for s in rmconfig-user rmemacs-user rmfhs rminfo-user; do \
		sed -e 1,3d debian/scripts/$$s \
			>>debian/gnats-user/DEBIAN/prerm; \
	done
	sed 's/^PACKAGE=$$/PACKAGE=$(package)/' debian/scripts/init \
		>debian/gnats-user/DEBIAN/postrm
	set -e; for s in rmdebconf; do \
		sed -e 1,3d debian/scripts/$$s \
			>>debian/gnats-user/DEBIAN/postrm; \
	done
	chmod 755 debian/gnats-user/DEBIAN/p*
	dh_gencontrol -p$(package)-user
	chmod -R u+w,go=rX debian/gnats-user
	dh_md5sums -p$(package)-user
	dh_builddeb -p$(package)-user

binary-tk:
	dh_testdir
	dh_testroot
	test -f stamp-build-tkgnats || $(MAKE) -f debian/rules build-tk
	dh_installdirs -p$(package)-tk usr/share/doc/$(package)-tk/examples \
		usr/share/man/man1
	$(MAKE) -C contrib/$(TKGNATS) prefix=$(PWD)/debian/$(package)-tk/usr \
		$(GTKDEFS) install
	cp contrib/$(TKGNATS)/tkgnats.1 debian/$(package)-tk/usr/share/man/man1
	dh_installdocs -p$(package)-tk \
		contrib/$(TKGNATS)/FILES \
		contrib/$(TKGNATS)/README* \
		contrib/$(TKGNATS)/TECHNOTES \
		contrib/$(TKGNATS)/TO-DO \
		contrib/$(TKGNATS)/VERSION
	install -m 644 contrib/$(TKGNATS)/CONFIG* \
		debian/$(package)-tk/usr/share/doc/gnats-tk/examples/
	dh_installchangelogs contrib/$(TKGNATS)/CHANGES -p$(package)-tk
	dh_installmenu -p$(package)-tk
	dh_compress -p$(package)-tk
	install -d debian/$(package)-tk/DEBIAN
	sed 's/^PACKAGE=$$/PACKAGE=$(package)-tk/' debian/scripts/init \
		 >debian/$(package)-tk/DEBIAN/postinst
	set -e; for s in addfhs addmenu; do \
		sed -e 1,3d debian/scripts/$$s \
			>>debian/$(package)-tk/DEBIAN/postinst; \
	done
	sed 's/^PACKAGE=$$/PACKAGE=$(package)-tk/' debian/scripts/init \
		>debian/$(package)-tk/DEBIAN/postrm
	set -e; for s in rmmenu; do \
		sed -e 1,3d debian/scripts/$$s \
			>>debian/$(package)-tk/DEBIAN/postrm; \
	done
	sed 's/^PACKAGE=$$/PACKAGE=$(package)-tk/' debian/scripts/init \
		>debian/$(package)-tk/DEBIAN/prerm
	set -e; for s in rmfhs; do \
		sed -e 1,3d debian/scripts/$$s \
			>>debian/$(package)-tk/DEBIAN/prerm; \
	done
	dh_gencontrol -p$(package)-tk
	chmod -R u+w,go=rX debian/$(package)-tk
	chmod 755 debian/$(package)-tk/DEBIAN/p*
	dh_md5sums -p$(package)-tk
	dh_builddeb -p$(package)-tk

binary-arch:
	$(MAKE) -f debian/rules binary-server
	$(MAKE) -f debian/rules binary-user
	@echo "All architecture-dependant binaries built!"

binary-indep:
#	$(MAKE) -f debian/rules binary-tk
	@echo "All architecture-independant binaries built!"

binary:
	$(MAKE) -f debian/rules binary-arch
	$(MAKE) -f debian/rules binary-indep
	@echo "All binaries built!"


.PHONY: binary binary-arch binary-indep binary-server binary-user binary-tk \
	build-server build-user build-tk clean gnatsclean checkroot distfiles
