# Makefile for FIAIF 
# Version: $Id: Makefile,v 1.128 2004/02/25 22:57:43 afu Exp $
#
# Copyright (C) 2002 Anders Peter Fugmann <anders at fugmann dot dhs dot org>
# This package comes with ABSOLUTELY NO WARRANTY
# Use strictly at your own risk.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

INSTALL_SRC_PATH=/usr/share/fiaif
INSTALL_DOC_PATH=/usr/share/doc/fiaif
INSTALL_CONF_PATH=/etc/fiaif
INSTALL_INIT_PATH=/etc/init.d
INSTALL_MAN_PATH=/usr/share/man/man
INSTALL_PROG_PATH=/usr/sbin
INSTALL_CRON_PATH=/etc/cron.daily/

HTML_PATH=/home/afu/fiaif
DIST_PATH=$(HTML_PATH)/dist
BETA_PATH=$(HTML_PATH)/beta

SRC_PATH=src/
CONF_PATH=conf/
MAN_PATH=man
DOC_PATH=doc/
PROG_PATH=prog/
CRON_PATH=cron

INITD_LEVEL=09
INIT_FILE=fiaif
CRON_FILE=fiaif.cron

FAQ=doc/faq.txt
CHANGELOG=changelog
DOC_FILES=$(CHANGELOG) debian/copyright doc/DHCP.txt \
	doc/reporting_bugs.txt doc/upgrade.txt

CONF_FILES=fiaif.conf zone.int zone.ext zone.dmz \
	reserved_networks private_networks \
	type_of_services aliases

VERSION:=$(shell head -n1 changelog | cut -d" " -f 3)
DEB_VERSION:=$(shell VER=$$(head -n1 debian/changelog | sed "s/.*(\(.*\)).*/\1/g"); \
	            if [[ $$VER == $(VERSION)* ]]; then echo $$VER; \
                    else echo $(VERSION)-1; fi)
SPEC_VERSION:=$(shell VER=$$(grep "Version" fiaif.spec | cut -f 2); \
		     REL=$$(grep "Release" fiaif.spec | cut -f 2); \
	            if [[ $$VER == "$(VERSION)" ]]; then echo "$$VER-$$REL"; \
                    else echo "$(VERSION)-0.1"; fi)

.PHONY: install uninstall install-config install-initd \
	clean all dist debian tar rpm html fiaif.ps

all: install install-initd

install: VERSION fiaif.ps
	install -d $(DESTDIR)/$(INSTALL_SRC_PATH) 
	install -d $(DESTDIR)/$(INSTALL_DOC_PATH) 
	install -m 700 -d $(DESTDIR)/$(INSTALL_CONF_PATH) 
	install -d $(DESTDIR)/$(INSTALL_INIT_PATH)
	install -d $(DESTDIR)/$(INSTALL_MAN_PATH)5
	install -d $(DESTDIR)/$(INSTALL_MAN_PATH)8
	install -d $(DESTDIR)/$(INSTALL_PROG_PATH)
	install -d $(DESTDIR)/var/lib/fiaif
	install -d $(DESTDIR)/var/lock/subsys
	install -d $(DESTDIR)/$(INSTALL_CRON_PATH)

	install -m 644 $(SRC_PATH)/*sh $(DESTDIR)/$(INSTALL_SRC_PATH) 
	install -m 644 $(SRC_PATH)/*awk $(DESTDIR)/$(INSTALL_SRC_PATH) 
	install -m 644 $(DOC_FILES) $(DESTDIR)/$(INSTALL_DOC_PATH)
	[ -f fiaif.ps ] && \
		gzip -9 -c fiaif.ps > $(DESTDIR)/$(INSTALL_DOC_PATH)/fiaif.ps.gz || echo ok
	gzip -9 -c changelog >  $(DESTDIR)/$(INSTALL_DOC_PATH)/changelog.gz
	install -m 644 $(MAN_PATH)/*.8 $(DESTDIR)/$(INSTALL_MAN_PATH)8/
	install -m 644 $(MAN_PATH)/*.5 $(DESTDIR)/$(INSTALL_MAN_PATH)5/
	install -m 755 $(PROG_PATH)/$(INIT_FILE) $(DESTDIR)/$(INSTALL_INIT_PATH)
	install -m 755 $(PROG_PATH)/fiaif-* $(DESTDIR)/$(INSTALL_PROG_PATH)
	install -m 644 VERSION $(DESTDIR)/$(INSTALL_SRC_PATH) 
	rm -f $(DESTDIR)/var/lib/fiaif/iptables

	install -m 755 $(CRON_PATH)/fiaif $(DESTDIR)/$(INSTALL_CRON_PATH)

install-initd: 
	if [[ -d $(DESTDIR)/etc/rcS.d/ ]] ; then \
		if [[ ! -f $(DESTDIR)/etc/rcS.d/S$(INITD_LEVEL)$(INIT_FILE) ]]; then \
			ln -sf ../init.d/$(INIT_FILE) $(DESTDIR)/etc/rcS.d/S$(INITD_LEVEL)$(INIT_FILE) ; \
		fi \
	elif [[ -d $(DESTDIR)/etc/init.d/ && ! -L $(DESTDIR)/etc/init.d ]]; then \
		if [[ ! -f $(DESTDIR)/etc/init.d/rc3.d/S$(INITD_LEVEL)$(INIT_FILE) ]]; then \
			ln -sf ../init.d/$(INIT_FILE) $(DESTDIR)/etc/init.d/rc3.d/S$(INITD_LEVEL)$(INIT_FILE) ; \
			ln -sf ../init.d/$(INIT_FILE) $(DESTDIR)/etc/init.d/rc5.d/S$(INITD_LEVEL)$(INIT_FILE) ; \
		fi \
	elif [[ -d $(DESTDIR)/etc/rc.d/ ]]; then \
		if [[ ! -f $(DESTDIR)/etc/rc.d/rc3.d/S$(INITD_LEVEL)$(INIT_FILE) ]]; then \
			ln -sf ../init.d/$(INIT_FILE) $(DESTDIR)/etc/rc.d/rc3.d/S$(INITD_LEVEL)$(INIT_FILE) ; \
			ln -sf ../init.d/$(INIT_FILE) $(DESTDIR)/etc/rc.d/rc5.d/S$(INITD_LEVEL)$(INIT_FILE) ; \
		fi \
	fi

install-config: 
	install -m 600 --backup --suffix ".orig" $(addprefix $(CONF_PATH), $(CONF_FILES)) $(DESTDIR)$(INSTALL_CONF_PATH)

uninstall:
	$(RM) -r $(DESTDIR)/$(INSTALL_DOC_PATH)
	$(RM) $(DESTDIR)/$(INSTALL_INIT_PATH)/$(INIT_FILE)
	$(RM) -r $(DESTDIR)/$(CONF_PATH)	
	$(RM) $(DESTDIR)/etc/rc?.d/S$(LEVEL)$(INIT_FILE)

html: fiaif.ps
#cvs update -d -P
	install -d $(HTML_PATH)/img
	install -d $(HTML_PATH)/dist
	install -d $(HTML_PATH)/beta
	install -d $(HTML_PATH)/man
	install -d $(HTML_PATH)/conf

	install -m 644 $(FAQ) $(HTML_PATH)
	install -m 644 html/favicon.ico $(HTML_PATH)
	install -m 644 html/*php $(HTML_PATH)/
	install -m 644 html/img/*png $(HTML_PATH)/img

	install -m 644 $(addprefix $(CONF_PATH), $(CONF_FILES)) $(HTML_PATH)/conf	
	for manpage in $(MAN_PATH)/*{5,8}; do \
		groff -man -Thtml $$manpage > $(HTML_PATH)/$$manpage.html; \
	done	

	install -m 644 fiaif.ps $(HTML_PATH)
	$(MAKE) -C doc/fiaif html HTML_DIR=$(HTML_PATH)/doc

fiaif.ps:
	$(MAKE) -C doc/fiaif fiaif.ps
	cp doc/fiaif/fiaif.ps . 

deb: VERSION 
	fakeroot dpkg-buildpackage
	rm -fr debian/fiaif

rpm: tar VERSION
# RedHat is more than fucked up. It cannot make packages in `pwd`,
# but need to do it in /usr/src/rpm....
	cp ../fiaif_$(VERSION).tar.gz /usr/src/rpm/SOURCES/fiaif_$(VERSION).tar.gz
	rpmbuild -ba --rmsource --clean fiaif.spec
	mv /usr/src/rpm/RPMS/noarch/fiaif-$(SPEC_VERSION).noarch.rpm ../fiaif_$(SPEC_VERSION).noarch.rpm
	mv /usr/src/rpm/SRPMS/fiaif-$(SPEC_VERSION).src.rpm ../fiaif_$(SPEC_VERSION).src.rpm

tar: clean VERSION fiaif.ps 
	cd ..; find fiaif -type d -name .svn > /tmp/exclude
	cd ..; find fiaif -type f -name .cvsignore >> /tmp/exclude
	echo fiaif/html >> /tmp/exclude
	echo update_changelog.sh >> /tmp/exclude
	cd ..; tar zcf fiaif_$(VERSION).tar.gz -X /tmp/exclude fiaif/* 
	tar zxf ../fiaif_$(VERSION).tar.gz --directory debian
	mv debian/fiaif debian/fiaif-$(VERSION)
	cd debian; tar zcf ../../fiaif_$(VERSION).tar.gz fiaif-$(VERSION)/*
	rm -fr debian/fiaif-$(VERSION)
	rm -f /tmp/exclude

VERSION: $(CHANGELOG)
	./update_changelog.sh
	echo $(VERSION) > VERSION 

dist: clean tar deb rpm VERSION
#cvs tag -F "Fiaif-$$(echo $(VERSION) | sed s/\\\./_/g)"
	install -m 644 ../fiaif_$(DEB_VERSION).dsc $(DIST_PATH)
	install -m 644 ../fiaif_$(DEB_VERSION)_all.deb $(DIST_PATH)
	install -m 644 ../fiaif_$(DEB_VERSION)_*.changes $(DIST_PATH)
	install -m 644 ../fiaif_$(SPEC_VERSION).noarch.rpm $(DIST_PATH)
	install -m 644 ../fiaif_$(SPEC_VERSION).src.rpm $(DIST_PATH)
	install -m 644 ../fiaif_$(VERSION).tar.gz $(DIST_PATH)

	cd $(DIST_PATH); apt-ftparchive packages . | gzip > Packages.gz
	cd $(DIST_PATH); apt-ftparchive sources . | gzip > Sources.gz

	echo "$(VERSION)" > $(HTML_PATH)/VERSION
	echo "$(DEB_VERSION)" > $(HTML_PATH)/DEB_VERSION
	echo "$(SPEC_VERSION)" > $(HTML_PATH)/SPEC_VERSION
	install -m 644 $(CHANGELOG) $(HTML_PATH)/

	rm -f $(DIST_PATH)/LATEST-IS-*
	touch $(DIST_PATH)/LATEST-IS-$(VERSION)

	cd $(DIST_PATH)/; md5sum fiaif* > md5sums

beta: clean tar deb rpm html VERSION
	install -m 644 ../fiaif_$(DEB_VERSION).dsc $(BETA_PATH)
	install -m 644 ../fiaif_$(DEB_VERSION)_all.deb $(BETA_PATH)
	install -m 644 ../fiaif_$(DEB_VERSION)_i386.changes $(BETA_PATH)
	install -m 644 ../fiaif_$(SPEC_VERSION).noarch.rpm $(BETA_PATH)
	install -m 644 ../fiaif_$(SPEC_VERSION).src.rpm $(BETA_PATH)
	install -m 644 ../fiaif_$(VERSION).tar.gz $(BETA_PATH)

	cd $(BETA_PATH); apt-ftparchive packages . | gzip -9c > Packages.gz
	cd $(BETA_PATH); apt-ftparchive sources . | gzip -9c > Sources.gz

	install -m 644 $(CHANGELOG) $(HTML_PATH)/

	rm -f $(BETA_PATH)/LATEST-IS-*
	touch $(BETA_PATH)/LATEST-IS-$(VERSION)

	cd $(BETA_PATH)/; md5sum fiaif* > md5sums

clean:
	$(MAKE) -C doc/fiaif clean
	find . -name \*~ | xargs rm -f  
	$(RM) ../fiaif_*
	$(RM) -r debian/fiaif 
	$(RM) -r debian/fiaif_$(VERSION)
	$(RM) debian/*debhelper debian/files debian/*substvars 
	$(RM) /usr/src/rpm/SOURCES/* /usr/src/rpm/RPMS/noarch/*
	$(RM) fiaif.ps
	$(RM) VERSION
	$(RM) build-stamp
