# /**********************************************************
#  SixXS - Automatic IPv6 Connectivity Configuration Utility
# ***********************************************************
#  Copyright 2003-2005 SixXS - http://www.sixxs.net
# ***********************************************************
#  Packaging Makefile
# ***********************************************************
#  $Author: jeroen $
#  $Id: Makefile,v 1.22 2007-01-11 00:29:33 jeroen Exp $
#  $Date: 2007-01-11 00:29:33 $
# **********************************************************/
#
# Note for BSD people: use GNU Make (gmake)

PROJECT=aiccu
PROJECT_DESC="Automatic IPv6 Connectivity Configuration Utility"
PROJECT_VERSION=$(shell grep "AICCU_VER" common/aiccu.h | head -n 1 | awk '{print $$3}' | tr -d \")

# Misc bins
RM=@rm -f
MAKE:=@${MAKE}
CP=@echo [Copy]; cp
RPMBUILD=@echo [RPMBUILD]; rpmbuild
RPMBUILD_SILENCE=>/dev/null 2>/dev/null

# Excludes for limited source release
EXCLUDES=--exclude "${PROJECT}/windows-*" --exclude "${PROJECT}/common/aiccu_win32.c" --exclude CVS --exclude "${PROJECT}/common/tsp*" --exclude "${PROJECT}/common/teepee*"
DEBEXCL=-Iwindows-* -Icommon/aiccu_win32.c -I*CVS* -Icommon/tsp* -Icommon/teepee*

# Change this if you want to install into another dirtree
# Required for eg the Debian Package builder
DESTDIR=
export DESTDIR

# This may be updated by RPM's for instance
CFLAGS=${RPM_OPT_FLAGS}

# Destination Paths (relative to DESTDIR)
dirsbin=/usr/sbin/
dirbin=/usr/bin/
diretc=/etc/
dirdoc=/usr/share/doc/${PROJECT}/

# Make sure the lower makefile also knows these
export PROJECT
export PROJECT_DESC
export PROJECT_VERSION
export PROJECT_COPYRIGHT
export DESTDIR
export RM
export MV
export CC
export CP
export MAKE
export dirsbin
export dirbin
export diretc
export dirdoc
export RPM_OPT_FLAGS
export CFLAGS

####################
## Makefile Targets
####################

all:	Makefile unix-console/
	@echo "Building  : $(PROJECT) - $(PROJECT_DESC)"
	@echo "Copyright : SixXS"
	@echo "Version   : $(PROJECT_VERSION)"
	$(MAKE) -C unix-console all
	@echo "Building done"

install: aiccu
	@echo "Installing into ${DESTDIR}..."
	@echo "Binaries..."
	@mkdir -p ${DESTDIR}${dirsbin}
	$(MAKE) -C unix-console install
	@mkdir -p ${DESTDIR}${dirdoc}
	@echo "Configuration..."
	@mkdir -p ${DESTDIR}${diretc}
ifeq ($(shell echo "A${RPM_BUILD_ROOT}"),A)
	$(shell [ -f ${DESTDIR}${diretc}${PROJECT}.conf ] || cp -R doc/${PROJECT}.conf ${DESTDIR}${diretc}${PROJECT}.conf)
	@echo "Documentation..."
	@cp doc/README ${DESTDIR}${dirdoc}
	@cp doc/LICENSE ${DESTDIR}${dirdoc}
	@cp doc/HOWTO  ${DESTDIR}${dirdoc}
	@echo "Installing Debian-style init.d"
	@mkdir -p ${DESTDIR}${diretc}init.d
	@cp doc/${PROJECT}.init.debian ${DESTDIR}${diretc}init.d/${PROJECT}
else
	@echo "Installing Redhat-style init.d"
	@mkdir -p ${DESTDIR}${diretc}init.d
	@cp doc/${PROJECT}.init.rpm ${DESTDIR}${diretc}init.d/${PROJECT}
	@cp doc/${PROJECT}.conf ${DESTDIR}${diretc}${PROJECT}.conf
endif
	@echo "Installation into ${DESTDIR}/ completed"

help:
	@echo "$(PROJECT) - $(PROJECT_DESC)"
	@echo
	@echo "Makefile targets:"
	@echo "all      : Build everything"
	@echo "help     : This little text"
	@echo "install  : Build & Install into ${DESTDIR}/"
	@echo "clean    : Clean the dirs to be pristine in bondage"
	@echo
	@echo "Distribution targets:"
	@echo "dist     : Make all distribution targets (except rpm's)"
	@echo "tar      : Make source tarball (tar.gz)"
	@echo "bz2      : Make source tarball (tar.bz2)"
	@echo "deb      : Make Debian binary package (.deb)"
	@echo "debsrc   : Make Debian source packages"
	@echo "rpm      : Make RPM package (.rpm)"
	@echo "rpmsrc   : Make RPM source packages"
	@echo
	@echo "SixXS targets:"
	@echo "tarfull  : Full tar including Windows directories" 
	@echo "bz2full  : Full bz2 including Windows directories" 

aiccu:	doc unix-console/
	$(MAKE) -C unix-console all

doc:	doc/aiccu.1

doc/aiccu.1: doc/aiccu.sgml
	docbook-to-man doc/aiccu.sgml >doc/aiccu.1

clean: debclean rpmclean
	$(MAKE) -C unix-console clean
	-${RM} -r windows-gui/Debug
	-${RM} -r windows-gui/Release
	-${RM} windows-gui/AICCU.APS
	-${RM} windows-gui/AICCU.ncb
	-${RM} -r windows-console/Debug
	-${RM} -r windows-console/Release
	-${RM} windows-console/AICCU.APS
	-${RM} windows-console/AICCU.ncb

# Generate Distribution files
dist:	tar bz2 deb

# tar.gz
tar:	clean
	-${RM} ../${PROJECT}_${PROJECT_VERSION}.tar.gz
	tar -zco -C .. ${EXCLUDES} -f ../${PROJECT}_${PROJECT_VERSION}.tar.gz ${PROJECT}

# tar.gz (full)
tarfull: clean
	-${RM} ../${PROJECT}_${PROJECT_VERSION}.tar.gz
	tar -zco -C .. -f ../${PROJECT}_${PROJECT_VERSION}-full.tar.gz ${PROJECT}

# tar.bz2
bz2:	clean
	-${RM} ../${PROJECT}_${PROJECT_VERSION}.tar.bz2
	tar -jco -C .. ${EXCLUDES} -f ../${PROJECT}_${PROJECT_VERSION}.tar.bz2 ${PROJECT}

# tar.bz2 (full)
bz2full: clean
	-${RM} ../${PROJECT}_${PROJECT_VERSION}.tar.bz2
	tar -jco -C .. -f ../${PROJECT}_${PROJECT_VERSION}-full.tar.bz2 ${PROJECT}

# .deb
deb:	clean
	# Copy the changelog
	${CP} doc/changelog debian/changelog
	${CP} doc/${PROJECT}.init.debian debian/${PROJECT}.init
	dpkg-buildpackage $(DEBEXCL) -rfakeroot
	${MAKE} clean

# Cleanup after debian
debclean:
	-${RM} debian/${PROJECT}.init debian/${PROJECT}.conffiles
	if [ -f build-stamp ]; then debian/rules clean; fi

# RPM
rpm:	clean tar
	-${RM} /usr/src/redhat/RPMS/i386/${PROJECT}-*.rpm
	${RPMBUILD} -tb --define '${PROJECT}_version ${PROJECT_VERSION}' ../${PROJECT}_${PROJECT_VERSION}.tar.gz ${RPMBUILD_SILENCE}
	@if [ -d /usr/src/redhat/RPMS/i386/ ]; then mv /usr/src/redhat/RPMS/i386/${PROJECT}-*.rpm ../; fi
	@if [ -d /usr/src/rpm/RPMS/i386/ ]; then mv /usr/src/rpm/RPMS/i386/${PROJECT}-*.rpm ../; fi
	@echo "Resulting RPM's:"
	@ls -l ../${PROJECT}-*.rpm
	${MAKE} clean
	@echo "RPMBuild done"

rpmsrc:	clean tar
	-${RM} /usr/src/redhat/RPMS/i386/${PROJECT}-*src.rpm
	${RPMBUILD} -ts --define '${PROJECT}_version ${PROJECT_VERSION}' ../${PROJECT}_${PROJECT_VERSION}.tar.gz ${RPMBUILD_SILENCE}
	@if [ -d /usr/src/redhat/RPMS/i386/ ]; then mv /usr/src/redhat/RPMS/i386/${PROJECT}-*.src.rpm ../; fi
	@if [ -d /usr/src/rpm/RPMS/i386/ ]; then mv /usr/src/rpm/RPMS/i386/${PROJECT}-*.src.rpm ../; fi
	@echo "Resulting RPM's:"
	@ls -l ../${PROJECT}-*.rpm
	${MAKE} clean
	@echo "RPMBuild-src done"

rpmclean:
	-${RM} ../${PROJECT}_${PROJECT_VERSION}.tar.gz

# Mark targets as phony
.PHONY : all install help clean dist tar bz2 deb debclean rpm rpmsrc

