include version.py

DESTDIR=
progname=sagator
etcdir=$(DESTDIR)/etc
bindir=$(DESTDIR)/usr/bin
sbindir=$(bindir)/../sbin
libdir=$(DESTDIR)/usr/lib/$(progname)
docdir=$(DESTDIR)/usr/share/doc/$(progname)
chrootdir=/var/spool/vscan
MAKE=make
INCLUDES=""
CLAMAV=yes
TARDIR=.
PYTHON_PROGRAMS=sagator sgscan sqback timedel
SCANNER_MODULES=\
	interscan/file.py interscan/match.py interscan/actions.py \
	interscan/report.py interscan/modify.py \
	interscan/parsemail.py interscan/mimeparse.py interscan/decompress.py \
	av/basic.py av/dazuko.py av/clamav.py av/avg.py av/bdc.py av/nod.py \
	av/icap.py av/sophie.py av/kav.py \
	as/spamassassin.py as/bogofilter.py as/qsf.py

# Python
PYTHON=$(shell for v in 2 2.2 2.3 ""; do python$$v -c "print 'python$$v'" 2>/dev/null && break; done)
PYTHONVER=$(shell $(PYTHON) pythonver.py 2>/dev/null)
PYTHONPREFIX=/usr
PYTHONPREFIX_SLASHED=$(shell echo $(PYTHONPREFIX) | sed 's/\//\\\//g')

all:	README.scanners compile

info:
	@echo "PYTHON=$(PYTHON)"
	@echo "PYTHONVER=$(PYTHONVER)"

libclamav/libclamav.so: libclamav/libclamav.pyx
	[ $(CLAMAV) = yes ] && $(MAKE) -C libclamav PYTHONVER=$(PYTHONVER) PYTHONPREFIX=$(PYTHONPREFIX)

compile: libclamav/libclamav.so
	# replace interpreter for sagator's programs
	for i in $(PYTHON_PROGRAMS); do \
	  grep '^#!$(PYTHONPREFIX)/bin/$(PYTHON)$$' $$i.py > /dev/null 2>&1 || \
	    echo -e ',s/^#!\/.*$$/#!$(PYTHONPREFIX_SLASHED)\/bin\/$(PYTHON)/\nw\nq' | ed $$i.py; \
	done || true
	# compile modules
	for i in . as av interscan; do \
	  $(PYTHON) $(PYTHONPREFIX)/lib/$(PYTHONVER)/compileall.py -l -d $$i $$i; \
	done
	# replace config, if not found
	[ -f config.py ] || cp config.py-template config.py

install: compile
	mkdir -p $(bindir) $(libdir) $(etcdir)/cron.daily $(docdir) \
	  $(DESTDIR)/$(chrootdir) $(sbindir) $(etcdir)/logrotate.d
	[ -f $(libdir)/config.py ] && mv $(libdir)/config.py $(libdir)/config.py.save || true
	cp -f *.py *.py[co] $(libdir)
	cp -rf as av interscan $(libdir)
	ln -sf ../lib/$(progname)/sgscan.py $(bindir)/sgscan
	ln -sf ../lib/$(progname)/sagator.py $(sbindir)/sagator
	ln -sf ../lib/$(progname)/sqback.py $(sbindir)/sqback
	[ -f $(etcdir)/$(progname).conf ] || \
	  cp -f config.py $(etcdir)/$(progname).conf
	rm -f $(libdir)/config.py
	ln -sf ../../../etc/$(progname).conf $(libdir)/config.py
	# install logrotate script
	[ -f $(etcdir)/logrotate.d/sagator ] || \
	  cp -f scripts/sagator.logrotate $(etcdir)/logrotate.d/sagator
	# install libclamav
	cp -f libclamav/libclamav.so $(libdir) || true
	# install init script
	if [ ! -f /etc/debian_version ]; then \
	  mkdir -p $(etcdir)/rc.d/init.d $(etcdir)/sysconfig; \
	  cp scripts/sagator.init $(etcdir)/rc.d/init.d/sagator; \
	  chmod +x $(etcdir)/rc.d/init.d/sagator; \
	  [ -f $(etcdir)/sysconfig/sagator ] || \
	    cp -f scripts/sysconfig-example $(etcdir)/sysconfig/sagator; \
	fi
	# install mkchroot
	cp scripts/mkchroot.sh $(sbindir)/mkchroot.sagator
	# install sagator's cron script
	sed "s/%{CHROOT}/`echo $(chrootdir) | sed 's/\\//\\\\\\//g'`/" \
	  < scripts/cron > $(etcdir)/cron.daily/sagator
	chmod +x $(etcdir)/cron.daily/sagator
	echo "Don't forget to set chroot!"

makeroot:
	./scripts/mkchroot.sh $(DESTDIR)$(chrootdir)

clean:
	$(MAKE) -C libclamav clean
	rm -rf *~ */*~ *.py[co] */*.py[co] scripts/sagator.spec

distclean:	clean
	rm -f config.py config.py[co]
	
mrproper:	distclean
	rm -f libclamav/libclamav.c scripts/sagator.spec

# documentation
README.scanners:	libclamav/libclamav.so $(SCANNER_MODULES) stats.py
	rm -f README.scanners.t
	echo "Helpyfying ..."; \
	$(PYTHONPREFIX)/lib/$(PYTHONVER)/pydoc.py $(SCANNER_MODULES) \
	  >> README.scanners.t; \
	$(PYTHON) -c 'import stats; help(stats.status)' >> README.scanners.t
	awk 'BEGIN {class=1} / *class / {class=1} \
	     /^Help on module/ {class=1} \
	     /^NAME/ {class=0} \
	     / *class / {class=1} \
	     /-------/ {if (class==1) {print ""};class=0} \
	     /Method resolution order:/ {if (class==1) {print ""};class=0} \
	     /Methods defined here:/ {if (class==1) {print ""};class=0} \
	     /__doc__/ {if (class==1) {print ""};class=0} \
	     / *[a-z]* = / {class=0} \
	     {if (class==1) print}' \
	README.scanners.t | sed 's/^ *//g' > README.scanners
	rm -f README.scanners.t

version:
	echo "%define version $(VERSION)" > scripts/sagator.spec
	echo "%define rel $(RELEASE)" >> scripts/sagator.spec
	cat scripts/sagator.spec.in >> scripts/sagator.spec
	sed -e "s/%VERSION%/$(VERSION)-$(RELEASE)/" \
	  -e "s/%DATE%/`date -R`/" debian/changelog.in \
	  > debian/changelog

pack:	README.scanners distclean version
	(cd ..; \
	 tar cvjf $(TARDIR)/sagator-$(VERSION).tar.bz2 \
	     --exclude '*CVS*' sagator/*\
	)

rpm:	pack
	rpmbuild -ta ../$(TARDIR)/sagator-$(VERSION).tar.bz2

deb:	README.scanners distclean version
	dpkg-buildpackage -rfakeroot

.PHONY:	info compile install makeroot clean distclean mrproper version pack rpm deb
