# $Id: Makefile,v 1.1 2010/02/11 10:49:59 ak Exp $
# Haineko.mk
#  __  __       _         __ _ _      
# |  \/  | __ _| | _____ / _(_) | ___ 
# | |\/| |/ _` | |/ / _ \ |_| | |/ _ \
# | |  | | (_| |   <  __/  _| | |  __/
# |_|  |_|\__,_|_|\_\___|_| |_|_|\___|
# ---------------------------------------------------------------------------
HERE = $(shell `pwd`)
TIME = $(shell date '+%s')
NEKO = 'http://127.0.0.1:2794/submit'
MAKE = /usr/bin/make
PERL = /usr/local/bin/perl
CURL = /usr/bin/curl -X POST
PROVE= /usr/local/bin/prove -Ilib --timer
MINIL= /usr/local/bin/minil
CF = ./etc/haineko.cf-debug
JQ = /usr/local/bin/jq -M .
CP = /bin/cp
RM = /bin/rm -f
MV = /bin/mv
GIT = /usr/bin/git
CTL = ./bin/hainekoctl
PID = ./run/haineko.pid

.PHONY: clean

start:
	if [ -f "$(PID)" ]; then \
		kill -0 `head -1 $(PID)` 2> /dev/null || true ;\
	else \
		export HAINEKO_PROC=1;\
		$(CTL) start -d -C $(CF) & \
		sleep 1 ;\
	fi

start-with-cover:
	if [ -f "$(PID)" ]; then \
		kill -0 `head -1 $(PID)` 2> /dev/null || true ;\
	else \
		export HAINEKO_PROC=1 ;\
		perl -MDevel::Cover $(CTL) start -d -C $(CF) &
		sleep 1 ;\
	fi

stop:
	$(CTL) stop

send: start
	$(CURL) -d'@tmp/email.json' $(NEKO) | $(JQ)
	test -n $$HAINEKO_PROC && $(CTL) stop

test: user-test author-test

user-test:
	$(PROVE) t/

author-test: start
	$(CTL) make-setup-data
	sleep 2
	$(PROVE) xt/
	test -n $$HAINEKO_PROC && $(CTL) stop

cover-test:
	$(MAKE) -f Haineko.mk start-with-cover
	cp Haineko.mk ./makefile
	cover -test
	$(MAKE) -f Haineko.mk stop
	$(RM) ./makefile

release-test: start
	$(CP) ./README.md /tmp/README.$(TIME).md
	$(MAKE) -f Haineko.mk clean
	$(MINIL) test
	$(CP) /tmp/README.$(TIME).md ./README.md
	$(PERL) -i -ple 's|<.+[@]gmail.com>|<perl.org\@azumakuniyuki.org>|' META.json
	test -n $$HAINEKO_PROC && $(CTL) stop

dist: start
	$(CP) ./README.md /tmp/README.$(TIME).md
	$(MAKE) -f Haineko.mk clean
	$(MINIL) dist
	$(CP) /tmp/README.$(TIME).md ./README.md
	$(PERL) -i -ple 's|<.+[@]gmail.com>|<perl.org\@azumakuniyuki.org>|' META.json
	test -n $$HAINEKO_PROC && $(CTL) stop

push:
	for G in pchan github; do \
		$(GIT) push --tags $$G master; \
	done

clean:
	yes | $(MINIL) clean
	$(RM) -r nytprof*
	$(RM) -r cover_db
	$(RM) -r ./build
	for F in authinfo haineko.cf mailertable password recipients relayhosts sendermt; do \
		$(RM) etc/$$F; \
	done