#!/usr/bin/make -f
# -*- makefile -*-

# Copyrigth: 2005-2013 Instituto Superior Técnico
# Author: Jose M Calhariz <jose.calhariz@ist.utl.pt>

# License: GPL2+ with OpenSSL exception


# "based" on template Makefile for most debian packages version 0.24

PACKNAME=$(shell dh_listpackages)
SOURCENAME=$(shell dpkg-parsechangelog | grep "Source:" | cut -d ' ' -f 2)
DEBVER=$(shell dpkg-parsechangelog | grep "Version:" | cut -d ' ' -f 2)
VER=$(shell dpkg-parsechangelog | grep "Version:" | cut -d ' ' -f 2 | cut -f 1 -d -)
ifeq ($(DEBVER),$(VER))
NATIVE=1
else
NATIVE=0
endif
MDIST=wheezy
DIST=$(shell dpkg-parsechangelog | grep "Distribution" | cut -d ' ' -f 2)
SECTION=main
CATEG=my_sources
#CATEG=other_sources
BINDIR=/usr/bin
SBINDIR=/usr/sbin
USRSHAREBASE=/usr/share
USRLIBBASE=/usr/lib
VARLIBBASE=/var/lib
SHAREDIR=$(USRSHAREBASE)/$(PACKNAME)
LIBDIR=$(USRLIBBASE)/$(PACKNAME)
DOCDIR=/usr/share/doc/$(PACKNAME)
ETCBASE=/etc
ETCDIR=$(ETCBASE)/$(PACKNAME)
MANDIR=/usr/share/man/man8
LOGROTATEDIR=/etc/logrotate.d
GCONFDEFDIR=/usr/share/gconf/defaults
INSSERVOVER=/etc/insserv/overrides
SYSCTLCONFDIR=/etc/sysctl.d
UDEVRULESD=/etc/udev/rules.d
KERNELOOKSPOSTINST=/etc/kernel/postinst.d
KERNELOOKSPOSTRM=/etc/kernel/postrm.d
ZIPFILE=file-2.0.0.zip
ZIPDIR=file-2.0.0
TARFILE=file-$(VER).tar.gz
TARDIR=untar/$(PACKNAME)-$(VER)
ifeq ($(NATIVE),0)
DISTFILE=$(SOURCENAME)_$(VER).orig.tar.gz
#DISTFILES=$(DISTFILE) $(SOURCENAME)_$(DEBVER).diff.gz
DISTFILES=$(DISTFILE) $(SOURCENAME)_$(DEBVER).debian.tar.gz
else
DISTFILE=$(SOURCENAME)_$(DEBVER).tar.gz
DISTFILES=$(DISTFILE)
endif


all:
	echo $(VER) $(DEBVER) $(MDIST) $(DIST) $(PACKNAME) $(SOURCENAME) $(NATIVE)
	echo $(DEB_HOST_GNU_TYPE) $(DEB_BUILD_GNU_TYPE)


unpack:unpack-up-stamp
unpack-up-stamp:
	#unzip $(ZIPFILE)
	#unzip $(ZIPFILE) -d $(ZIPDIR)
	#mkdir untar
	#tar xzf $(TARFILE) -C untar
	#Prepare files for patching
	touch unpack-up-stamp


configure:unpack configure-up-stamp configure-tp-conf-srv
configure-up-stamp:
	touch configure-up-stamp


configure-tp-srv-conf:configure-tp-srv-conf-up-stamp
configure-tp-srv-conf-up-stamp:
	gen-spatch tp-srv-conf / /etc/tp-srv-conf
	mv spatch spatch-tp-srv-conf
	touch configure-tp-srv-conf-up-stamp


configure-tp-conf-srv:configure-tp-conf-srv-up-stamp
configure-tp-conf-srv-up-stamp:
	gen-spatch tp-conf-srv / /etc/tp-conf-srv
	mv spatch spatch-tp-conf-srv
	touch configure-tp-conf-srv-up-stamp


configure-test:configure-test-up-stamp
configure-test-up-stamp:
	gen-spatch $(PACKNAME) tmp tmp
	touch configure-test-up-stamp


build-arch: configure build-arch-up-stamp
build-arch-up-stamp:
	touch build-arch-up-stamp


build-indep: configure build-indep-up-stamp
build-indep-up-stamp:
	touch build-indep-up-stamp


build: build-arch build-indep


install:build install-up-stamp
install-up-stamp:
	touch install-up-stamp

install-%:build
	echo $*
	mkdir -p $(DESTDIR)/$(ETCBASE)/$*/debian
	mkdir -p $(DESTDIR)/$(SBINDIR)
	mkdir -p $(DESTDIR)/$(USRSHAREBASE)/$*
	mkdir -p $(DESTDIR)/$(GCONFDEFDIR)
	mkdir -p $(DESTDIR)$(INSSERVOVER)
	mkdir -p $(DESTDIR)$(SYSCTLCONFDIR)
	mkdir -p $(DESTDIR)$(UDEVRULESD)
	mkdir -p $(DESTDIR)$(KERNELOOKSPOSTINST) $(DESTDIR)$(KERNELOOKSPOSTRM)
	tar cf - --exclude=.svn --exclude=CVS rules patches |  tar xf - -C $(DESTDIR)/$(ETCBASE)/$*/debian
	cp changelog $(DESTDIR)/$(ETCBASE)/$*/debian
	install -m 755 spatch-$* $(DESTDIR)/$(USRSHAREBASE)/$*/spatch
	cp update-$** $(DESTDIR)/$(SBINDIR)/
	cp upgrade-$* $(DESTDIR)/$(USRSHAREBASE)/$*
	cp -f $*-config $(DESTDIR)/$(USRSHAREBASE)/$*/ || true
	cp -a update-tripwire $(DESTDIR)/$(USRSHAREBASE)/$*
	cp *.preseed $(DESTDIR)/$(USRSHAREBASE)/$*
	cp $*.conf $(DESTDIR)/$(ETCBASE)/$*
	mkdir -p $(DESTDIR)/etc/apt/apt.conf.d
	cp 20_galeon_cache $(DESTDIR)/$(GCONFDEFDIR)/
	cp 80_tp-conf-srv.conf z99personal.conf $(DESTDIR)$(SYSCTLCONFDIR)
	cp insserv/* $(DESTDIR)$(INSSERVOVER)
	#cp rules.d/* $(DESTDIR)$(UDEVRULESD)
	cp tp-conf-srv.apt $(DESTDIR)/etc/apt/apt.conf.d/95tp-conf-srv
	cp kernel_hooks/* $(DESTDIR)$(KERNELOOKSPOSTINST)
	cp kernel_hooks/* $(DESTDIR)$(KERNELOOKSPOSTRM)
	tar cf - --exclude=.svn --exclude=CVS orig.v* | tar xf - -C $(DESTDIR)/$(USRSHAREBASE)/$*



# 	mkdir -p $(DESTDIR)/$(ETCDIR)/debian
# 	mkdir -p $(DESTDIR)/$(BINDIR)
# 	mkdir -p $(DESTDIR)/$(USRSHARE)
# 	tar cf - --exclude=.svn --exclude=CVS rules patches |  tar xf - -C $(DESTDIR)/$(ETCDIR)/debian
# 	install -m 755 spatch $(DESTDIR)/$(USRSHARE)/spatch
# 	cp update-$(PACKNAME) $(DESTDIR)/$(BINDIR)/update-$(PACKNAME)
# 	cp $(PACKNAME)-config $(DESTDIR)/$(USRSHARE)
# 	cp -a update-tripwire $(DESTDIR)/$(USRSHARE)
# 	cp *.preseed $(DESTDIR)/$(USRSHARE)
# 	cp $(PACKNAME).conf $(DESTDIR)/$(ETCDIR)
# 	tar cf - --exclude=.svn --exclude=CVS orig | tar xf - -C $(DESTDIR)/$(USRSHARE)



clean:
	find -name '*~' -exec rm {} \;
	rm -rf $(ZIPDIR) untar build-dir
	rm -f  configure-up-stamp unpack-up-stamp build-up-stamp install-up-stamp
	rm -f *-up-stamp spatch-*


# Create the files ready for distribution, need to be run in a dir
# without SVN control files

# Non-native package
#dist: clean
#	if test -e ../$(DISTFILE) ; then echo "$(DISTFILE) file should be generated only once" ; false ; fi
#	cd .. && GZIP=-9 tar --exclude='.svn' --exclude='debian' --exclude='tmp' --exclude='*~' -czf $(DISTFILE) $(SOURCENAME)
#	cd .. && svn add $(DISTFILE)

# Create the files ready for distribution
# Debian native package
#dist: clean
#	cd .. && GZIP=-9 tar --exclude='.svn' --exclude='tmp' --exclude='*~' -czf $(DISTFILE) $(SOURCENAME)
#	cd .. && svn add $(DISTFILE)


# Experimental rule to build archive for public distribution
# Non-native package
dist-exp: clean
ifeq ($(NATIVE),0)
	# Non native package
	if test -e ../$(DISTFILE) ; then echo "$(DISTFILE) file should be generated only once" ; false ; fi
	#cp -al ../$(SOURCENAME) ../$(SOURCENAME)-$(VER)
	cd .. && GZIP=-9 tar --exclude='.svn' --exclude='debian' --exclude='tmp' --exclude='*~' -czf $(DISTFILE) $(SOURCENAME)
	cd .. && svn add $(SOURCENAME)_$(VER).orig.tar.gz
else
	# native package
	cd .. && GZIP=-9 tar --exclude='.svn' --exclude='tmp' --exclude='*~' -czf $(DISTFILE) $(SOURCENAME)
	cd .. && svn add $(DISTFILE)
endif


# Create the deb file
deb:
	debuild -i
	debc

packages: deb


# Upload the packages and the distribution files into the rigth places
upload:	
	make -f ../upload upload

# Make tags of the sources as documented by subversion
tag:
	cd .. ; svn add $(DISTFILES) ;\
		echo $(PWD)
	cd .. ; svn add $(SOURCENAME)_$(DEBVER)_*.changes \
			$(SOURCENAME)_$(DEBVER)_*.build \
			$(SOURCENAME)_$(DEBVER).dsc
	cd .. ; svn add *_$(DEBVER)_*.deb
	cd .. ; svn st ; echo "enter to continue" ; read enter
	cd .. ; shopt -s nullglob ; svn ci -m "released v$(DEBVER)" \
		$(DISTFILES) \
		$(SOURCENAME)_$(DEBVER)_*.changes \
		$(SOURCENAME)_$(DEBVER)_*.build \
		$(SOURCENAME)_$(DEBVER).dsc \
		*_$(DEBVER)_*.deb
	svn mkdir --parents -m "Preparing tag directory for release v$(DEBVER)" $(shell svn info | grep "Repository Root" | cut -d ' ' -f 3)/tags/src/$(SOURCENAME)/$(SOURCENAME)-$(DEBVER)
	cd .. ; shopt -s nullglob ; svn copy -m "released v$(DEBVER)" \
		$(DISTFILES) \
		$(SOURCENAME)_$(DEBVER)_*.changes \
		$(SOURCENAME)_$(DEBVER)_*.build \
		$(SOURCENAME)_$(DEBVER).dsc \
		*_$(DEBVER)_*.deb \
		$(shell svn info | grep "Repository Root" | cut -d ' ' -f 3)/tags/src/$(SOURCENAME)/$(SOURCENAME)-$(DEBVER)
	debchange -i "New release"


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