#!/usr/bin/make -f
# debian/rules for CMU Cyrus IMAP version 2.1
# GNU copyright 1997 by Joey Hess.
# Copyright (c) 2001 by Henrique de Moraes Holschuh
# Published under the GNU GPL license
# Based on previous work by Michael-John Turner <mj@debian.org>,
#			    David Parker <david@neongoat.com>
#
# $Id: rules,v 1.4 2004/08/08 19:27:20 hmh Exp $

# DebHelper control
export DH_ALWAYS_EXCLUDE=CVS

export MAINPKG=cyrus21-common
export DOCPKG=cyrus21-doc
export TMPPKG := $(CURDIR)/debian/tmp
export PKGDIR := $(CURDIR)/debian/$(MAINPKG)
export DOCDIR := $(CURDIR)/debian/$(DOCPKG)/usr/share/doc/$(DOCPKG)

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

# Extra version information to add to Cyrus IMAPd ID
DEBVERSION:=$(shell LCALL=C dpkg-parsechangelog | sed -ne 's/^Version: \(.*-\)/\1/p')
EXTRA_IDENT:="Debian-$(DEBVERSION)"

# DB engine version
DBENGINE=BerkeleyDB3.2

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

# FOR AUTOCONF 2.52 AND NEWER ONLY
CONFFLAGS =
ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
  CONFFLAGS += --build $(DEB_HOST_GNU_TYPE)
else
  CONFFLAGS += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE)
endif

# Other oddities
ifneq (,$(findstring strict,$(DEB_BUILD_OPTIONS)))
	CONFFLAGS += --enable-warnings-are-errors
endif

# The clean target will remove any and all cruft (as defined by 
# configure ; make distclean ; cd intl; make distclean ). 
# This is done to make sure the build daemon's source tree is the 
# same as the one I am using to produce the i386 debs. 
clean:	configure
	dh_testdir
	dh_testroot
	-xargs -t -r chmod +x < debian/executable.files
	-rm -f build-indep-stamp build-arch-stamp configure-stamp install-arch-stamp install-indep-stamp build-stamp
	-$(MAKE) -i distclean
	-rm -f config.h config.cache config.status config.log stamp-config confdefs.h
	-rm -f netnews/Makefile perl/imap/Makefile.old perl/sieve/acap/Makefile.old perl/sieve/managesieve/Makefile.old snmp/Makefile Makefile et/Makefile
	-rm -f doc/pod2htmd.x~~ doc/pod2htmi.x~~ imap/imap_err.[ch] imap/pushstats.[ch] imap/lmtpstats.[ch] master/makedepend.log 
	-rm -f sieve/addr.[ch] sieve/addr-lex.[ch] sieve/sieve.[ch] sieve/sieve-lex.c sieve/sieve_err.[ch]
	-rm -f man/sieveshell.1 doc/murder.png
	-rm -rf doc/man
	-rm -f debian/cyrus-db-types.txt debian/cyrus-hardwired-config.txt
	-rm -f config.sub config.guess
	-rm -rf et/
	-xargs -t -r rm -f < debian/deletable.files
	dh_clean

configure:
	./autogen.sh

build: 
	@echo Use the build-arch or build-indep targets to build...

configure-stamp:
	dh_testdir
	-rm -f config.sub config.guess
	ln -s /usr/share/misc/config.sub config.sub
	ln -s /usr/share/misc/config.guess config.guess
	touch configure.in && touch aclocal.m4 && touch configure

	# IF YOU CHANGE BERKELEY DB VERSION, MAKE SURE TO UPDATE
	# DBENGINE AT THE TOP OF THIS MAKEFILE!
	CFLAGS="-fno-strict-aliasing -Wall -pipe $(DEBUGFLAGS)" ./configure $(CONFFLAGS) \
	 --with-extraident=$(EXTRA_IDENT) \
	 --prefix=/usr/share --exec-prefix=/usr --libexecdir=/usr/sbin \
	 --bindir=/usr/sbin --sbindir=/usr/sbin \
	 --includedir=/usr/include/cyrus \
	 --datadir=/usr/share/cyrus --sysconfdir=/etc \
	 --with-statedir=/var/state \
	 --sharedstatedir=/usr/share/cyrus \
	 --localstatedir=/var/lib/cyrus \
	 --with-cyrus-prefix=/usr/lib/cyrus --with-lock=fcntl \
	 --with-perl=/usr/bin/perl \
	 --with-openssl=/usr --with-auth=unix --enable-murder \
	 --enable-listext --enable-annotatemore --with-sasl=/usr \
	 --with-idle=poll --with-drac=/usr \
	 --with-cyrus-user=cyrus --with-cyrus-group=mail \
	 --with-tclsh=/usr/bin/tclsh --with-com_err=/usr \
	 --with-pidfile=/var/run/cyrmaster.pid \
	 --with-syslogfacility=MAIL \
	 --with-seen-db=skiplist --with-mboxlist-db=skiplist \
	 --with-ucdsnmp=/usr

	touch configure-stamp

build-arch: build-arch-stamp
build-arch-stamp: configure-stamp
	dh_testdir

	PERL_MM_OPT="INSTALLDIRS=vendor" $(MAKE)
	# store database configuration for possible automatic
	# upgrading later
	echo "DBENGINE $(DBENGINE)" >>debian/cyrus-db-types.txt
	grep -E 'CONFIG_DB_[A-Z]+[[:space:]]+[(]' config.h |\
	  sed -e 's/&cyrusdb_//' -e 's/.*CONFIG_DB_//' -e 's/(//' -e 's/)//' \
	  >>debian/cyrus-db-types.txt
	# store some useful state about the current package
	echo "PACKAGE_VERSION $(DEBVERSION)" >debian/cyrus-hardwired-config.txt
	if grep -q -s -n -E '^[[:space:]]*#define[[:space:]]+USE_DIR_FULL[[:space:]]+1' config.h ; then \
		echo "USE_DIR_FULL 1" >>debian/cyrus-hardwired-config.txt ;\
	else \
		echo "USE_DIR_FULL 0" >>debian/cyrus-hardwired-config.txt ;\
	fi

	touch build-arch-stamp

# We aren't actually able to build arch-indep independently from
# arch-dep, so we guarantee that the arch build has been done first
build-indep: build-indep-stamp
build-indep-stamp: configure-stamp build-arch
	dh_testdir

	cd doc &&\
	pod2man ../perl/sieve/scripts/sieveshell.pl > ../man/sieveshell.1 &&\
	fig2dev -L png murder.fig murder.png &&\
	rm -f groff-html-*.png pod2htm*
	cd doc &&\
	mkdir -p man &&\
	for man in ../man/*.[1-9] ../debian/*.[1-9]; do \
	   echo "Generating html manpage for $$man..."; \
	   groff -man -Thtml $$man > man/`basename $$man`.html; \
	done
	pod2html perl/imap/cyradm.sh > doc/man/cyradm.1.html
	rm -f pod2htm*

	touch build-indep-stamp

install-arch: build-arch 
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs -a

	$(MAKE) install DESTDIR=$(TMPPKG)

	# fix totaly broken location of the include files;
	# while at it, also avoid namespace colision, and move
	# lots of admin-only/system-only stuff to sbin and lib
	# also, do the renaming needed for alternatives
	# and fix the weird side-effect of setting the proper cyrus
	# location in configure.
	mkdir -p $(TMPPKG)/usr/sbin
	mkdir -p $(TMPPKG)/usr/lib/cyrus
	for i in master reconstruct quota deliver ; do \
		mv $(TMPPKG)/usr/lib/cyrus/bin/$$i $(TMPPKG)/usr/sbin/cyr$$i ;\
	done
	for i in mbpath ctl_mboxlist ctl_deliver ctl_cyrusdb squatter \
	         tls_prune ipurge cyrdump cvt_cyrusdb chk_cyrus arbitron; do \
		mv $(TMPPKG)/usr/lib/cyrus/bin/$$i $(TMPPKG)/usr/sbin/$$i ;\
	done
	mkdir -p $(TMPPKG)/usr/include
	mv $(TMPPKG)/usr/share/include/cyrus $(TMPPKG)/usr/include
	#mv $(TMPPKG)/bin/* $(TMPPKG)/usr/bin

	# Move the perl crap to a saner place
	mkdir -p $(TMPPKG)/usr/lib
	mkdir -p $(TMPPKG)/usr/share/perl5
	#mv $(TMPPKG)/lib/perl5/Cyrus $(TMPPKG)/usr/share/perl5/Cyrus
	#mv $(TMPPKG)/lib/* $(TMPPKG)/usr/lib

	# for stuff in /etc
	mkdir -p $(TMPPKG)/etc/cyrus $(TMPPKG)/etc/pam.d
	install -m 644 debian/imapd.conf    $(TMPPKG)/etc
	install -m 644 debian/cyrus.conf    $(TMPPKG)/etc
	(cd debian ; for i in *.pam ;\
		do install -m 644 $$i $(TMPPKG)/etc/pam.d/$${i%.pam} ;\
	done)

	# We rename some utils, so we need to sort out the manpages
	for i in master reconstruct quota deliver ; do \
		mv $(TMPPKG)/usr/share/man/man8/$$i.8 $(TMPPKG)/usr/share/man/man8/cyr$${i}.8 ; \
	done

	# And add our own manpages
	mkdir -p $(TMPPKG)/usr/share/man/man8
	install -m 644 debian/cyrdump.8 $(TMPPKG)/usr/share/man/man8/cyrdump.8
	install -m 644 debian/arbitronsort.8 $(TMPPKG)/usr/share/man/man8/arbitronsort.8

	# SNMP files
	mkdir -p $(TMPPKG)/usr/share/snmp/mibs
	install -m 644 master/CYRUS-MASTER.mib $(TMPPKG)/usr/share/snmp/mibs/CYRUS-MASTER-MIB.txt

	# Install cyradm icons
	mkdir -p $(TMPPKG)/usr/share/icons/mini
	install -m 644 debian/cyradm-32x32.xpm $(TMPPKG)/usr/share/icons/cyradm.xpm
	install -m 644 debian/cyradm-16x16.xpm $(TMPPKG)/usr/share/icons/mini/cyradm.xpm

	# Install debian-provided scripts
	install debian/cyrus-makedirs $(TMPPKG)/usr/sbin/cyrus-makedirs
	install -m 644 debian/get-backtrace.gdb $(TMPPKG)/usr/lib/cyrus/get-backtrace.gdb

	# and logcheck files
	install -m 644 debian/logcheck.ignore \
	  $(PKGDIR)/etc/logcheck/ignore.d.server/cyrus21

	# Install the stuff needed for upgrades
	for i in convert-sieve.pl dohash rehash undohash translatesieve \
		 upgradesieve ; do \
		install -m 755 tools/$$i $(PKGDIR)/usr/lib/cyrus/upgrade ;\
	done
	install -m 644 debian/cyrus-db-types.upgrading_from_1.5.txt $(PKGDIR)/usr/lib/cyrus/upgrade
	# And other upgrade helpers
	install -m 644 debian/cyrus-db-types.txt debian/cyrus-hardwired-config.txt \
		   $(PKGDIR)/usr/lib/cyrus
	# And other misc useful tools
	install -m 755 tools/arbitronsort.pl $(TMPPKG)/usr/sbin/arbitronsort

	# Install imtest and its symlinks
	mv $(TMPPKG)/usr/bin/imtest $(CURDIR)/debian/cyrus21-clients/usr/bin
	for i in $(TMPPKG)/usr/bin/*test ; do \
		rm -f "$$i" || true ;\
		(cd $(CURDIR)/debian/cyrus21-clients/usr/bin &&\
		 ln -s imtest `basename $$i`) ;\
	done

	# Lintian and Linda overrides
	cd debian ; \
	for i in *.linda ; do \
		mkdir -p "$${i%%.linda}/usr/share/linda/overrides" ;\
		install  -m 644 "$$i" "$${i%%.linda}/usr/share/linda/overrides/$${i%%.linda}" ;\
	done ;\
	for i in *.lintian ; do \
		mkdir -p "$${i%%.lintian}/usr/share/lintian/overrides" ;\
		install  -m 644 "$$i" "$${i%%.lintian}/usr/share/lintian/overrides/$${i%%.lintian}" ;\
	done

	dh_movefiles -a
	touch install-arch-stamp

# We aren't actually able to install arch-indep independently from
# arch-dep, so we guarantee that the arch build has been done first
install-indep: build-indep install-arch
	dh_testdir
	dh_testroot
	#dh_clean -k
	dh_installdirs -i

	# Massage the documentation into place
	#mkdir -p $(DOCDIR)
	#find doc/text -name '[Ra-z]*' -type f -exec cp -f {} $(PKGDIR)/usr/share/doc/$(MAINPKG) \;
	#-(cd $(PKGDIR)/usr/share/doc/$(MAINPKG) && rm copyrights changes htmlstrip.c)
	#find $(PKGDIR)/usr/share/doc/$(MAINPKG) -type f ! -name '*txt' ! -name '*.*' -exec mv {} {}.txt \;

	# Install the html docs and examples
	mkdir -p $(DOCDIR)/html
	install -m 644 doc/*.html doc/murder.png $(DOCDIR)/html
	cp -a doc/man $(DOCDIR)/html
	cp -a debian/examples $(DOCDIR)
	install -m 644 doc/cyrusv2.mc $(DOCDIR)/examples

	# Install contrib/ files
	mkdir -p $(DOCDIR)/contrib
	xargs < debian/cyrus21-common.contrib -rti cp -r '{}' $(DOCDIR)/contrib

	dh_movefiles -i

binary-indep: install-indep
	dh_testdir -i
	dh_testroot -i
#	dh_installdebconf -i
	dh_installdocs -p cyrus21-admin -p cyrus21-doc
	dh_installexamples -p cyrus21-admin
	dh_installmenu -i
#	dh_installlogrotate -i
#	dh_installpam -i
#	dh_installmime -i
#	dh_installcron -i
	dh_installman -i
	dh_installchangelogs -p cyrus21-admin doc/changes.html
	dh_installchangelogs -p cyrus21-doc
	dh_strip -i
	dh_link -i
	dh_compress -i
	dh_fixperms -i
	dh_makeshlibs -i
	dh_installdeb -i
	dh_perl -i
	dh_shlibdeps -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

binary-arch: install-arch
	dh_testdir -a
	dh_testroot -a
	dh_installdebconf -a
	dh_installdocs -p $(MAINPKG) -p cyrus21-clients -p libcyrus-imap-perl21
	dh_installexamples -p $(MAINPKG) -p libcyrus-imap-perl21 -p cyrus21-clients
	dh_installmenu -a
#	dh_installlogrotate -a
#	dh_installpam -a
#	dh_installmime -a
	dh_installinit -p $(MAINPKG) --noscripts --name=cyrus21
	dh_installcron -a
	dh_installman -a
#	dh_installinfo -a
	dh_installchangelogs -p $(MAINPKG) -p cyrus21-clients doc/changes.html
	dh_installchangelogs -p libcyrus-imap-perl21 perl/imap/Changes
	dh_strip -a
	dh_link -a
	dh_compress -a
	dh_fixperms -a
	dh_makeshlibs -a
	dh_installdeb -a
	dh_perl -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

binary: binary-indep binary-arch
.PHONY: build build-indep build-arch clean binary-indep binary-arch binary install-arch install-indep
