#!/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.3 2002/07/15 16:13:38 hmh Exp $

# DebHelper control
#export DH_VERBOSE=1
export DH_COMPAT=4
export DH_ALWAYS_EXCLUDE=CVS

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

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
EXTRA_IDENT="Debian`dpkg-parsechangelog | awk '/^Version:/ { print $$2 }'`"

# Enable debug package build if DEB_BUILD_OPTIONS contains debug
DEBUGFLAGS =
ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
	DEBUGFLAGS += -g -O0
else
	DEBUGFLAGS += -O2
endif

# Autoconf 2.13 arch support
CONFFLAGS =
ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
  CONFFLAGS += $(DEB_HOST_GNU_TYPE)
else
  CONFFLAGS += --host $(DEB_BUILD_GNU_TYPE) --build $(DEB_HOST_GNU_TYPE)
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
	-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 -f debian/cyrus-db-types.txt
	-rm -f config.sub config.guess
	dh_clean

configure:
	./autogen.sh

# The autotools target adds forced build-time dependencies on
# autotools-dev (for /usr/share/misc/config.*)
# It's also a .PHONY make target.
autotools:
	-rm -f config.sub config.guess
	ln -s /usr/share/misc/config.sub config.sub
	ln -s /usr/share/misc/config.guess config.guess

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

configure-stamp: autotools
	dh_testdir
	touch configure.in && touch aclocal.m4 && touch configure

	CFLAGS="-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-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 \
	 --enable-pidfile=/var/run/cyrmaster.pid

	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
	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

	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*

	touch build-indep-stamp

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

	$(MAKE) install DESTDIR=$(TMP)

	# 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 $(TMP)/usr/sbin
	mkdir -p $(TMP)/usr/lib/cyrus
	for i in master reconstruct quota deliver ; do \
		mv $(TMP)/usr/lib/cyrus/bin/$$i $(TMP)/usr/sbin/cyr$$i ;\
	done
	for i in fud mbpath ctl_mboxlist ctl_deliver ctl_cyrusdb squatter \
	         tls_prune ipurge cyrdump cvt_cyrusdb chk_cyrus ; do \
		mv $(TMP)/usr/lib/cyrus/bin/$$i $(TMP)/usr/sbin/$$i ;\
	done
	mkdir -p $(TMP)/usr/include
	mv $(TMP)/usr/share/include/cyrus $(TMP)/usr/include
	mv $(TMP)/bin/* $(TMP)/usr/bin

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

	# for stuff in /etc
	mkdir -p $(TMP)/etc/cyrus $(TMP)/etc/pam.d
	install -m 644 debian/imapd.conf    $(TMP)/etc
	install -m 644 debian/cyrus.conf    $(TMP)/etc
	(cd debian ; for i in *.pam ;\
		do install -m 644 $$i $(TMP)/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 $(TMP)/usr/share/man/man8/$$i.8 $(TMP)/usr/share/man/man8/cyr$${i}.8 ; \
	done

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

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

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

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

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

	# Install the stuff needed for 1.5/1.6.x to 2.1 upgrades
	for i in dohash rehash undohash translatesieve upgradesieve ; do \
		install -m 755 tools/$$i $(PKGDIR)/usr/lib/cyrus/upgrade ;\
	done
	install -m 644 debian/cyrus-db-types.txt $(PKGDIR)/usr/lib/cyrus

	# Install imtest and its symlinks
	mv $(TMP)/usr/bin/imtest $(CURDIR)/debian/cyrus21-clients/usr/bin
	for i in $(TMP)/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
	mkdir -p $(PKGDIR)/usr/share/lintian/overrides
	install -m 644 debian/cyrus21-common.lintian $(PKGDIR)/usr/share/lintian/overrides/cyrus21-common
	mkdir -p $(PKGDIR)/usr/share/linda/overrides
	install -m 644 debian/cyrus21-common.linda $(PKGDIR)/usr/share/linda/overrides/cyrus21-common

	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 install-indep-stamp
install-indep-stamp:
	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 debian/examples $(DOCDIR)
	install -m 644 doc/cyrusv2.mc $(DOCDIR)/examples

	dh_movefiles -i
	touch install-indep-stamp

binary-indep: install-indep
	dh_testdir -i
	dh_testroot -i
#	dh_installdebconf -i
	dh_installdocs -p cyrus21-admin -p cyrus21-docs
	dh_installexamples -p cyrus21-admin
	dh_installmenu -i
#	dh_installlogrotate -i
#	dh_installemacsen -i
#	dh_installpam -i
#	dh_installmime -i
#	dh_installcron -i
	dh_installman -i
	dh_installchangelogs -p cyrus21-admin doc/changes.html
	dh_strip -i
	#remove unneeded stuff that will be replaced by dh_link
	rm -rf debian/cyrus21-docs/usr/share/doc/cyrus21-docs
	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 libcyrus-imap-perl -p cyrus21-clients
	dh_installexamples -p $(MAINPKG) -p libcyrus-imap-perl -p cyrus21-clients
	dh_installmenu -a
#	dh_installlogrotate -a
#	dh_installemacsen -a
#	dh_installpam -a
#	dh_installmime -a
	dh_installinit -p $(MAINPKG) --noscripts --init-script=cyrus21
	dh_installcron -a
	dh_installman -a
	dh_undocumented -p $(MAINPKG) cyrus-makedirs.8
#	dh_installinfo -a
	dh_installchangelogs -p $(MAINPKG) -p cyrus21-clients doc/changes.html
	dh_installchangelogs -p libcyrus-imap-perl 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 autotools
