#
# makefile - make and install for abaddrd client and server
#
# Copyright (C) 2008-2009 Taiji Yamada <taiji@aihara.co.jp>
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 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
# Affero General Public License for more details.
#
#
# build:
#	$ make CC='gcc -m64 -DPORTMAP -D_REENTRANT -DUSE_DRACD_DB -I/opt/local/sparcv9/db3/include' LDLIBS='-R/opt/local/sparcv9/lib -R/opt/local/sparcv9/tokyocabinet/lib -L/opt/local/sparcv9/db3/lib -R/opt/local/sparcv9/db3/lib -ldb -lpthread -lsocket -lnsl -lrt'	# 64bit Solaris & dracd.db
#	$ make CC='gcc -m64 -DPORTMAP -D_REENTRANT' LDLIBS='-R/opt/local/sparcv9/lib -R/opt/local/sparcv9/tokyocabinet/lib -lpthread -lsocket -lnsl -lrt'	# 64bit Solaris
#	$ make	# Mac OS X
#	$ make LDLIBS='-lpthread -lrt'	# Linux
#	$ make CC='cc -DDISABLE_SHM'	# OpenBSD without shm
#
PREFIX=/opt/local
ifeq ($(shell uname -s),SunOS)
CPPFLAGS=-Wall -O3 -I../tools -I/opt/local/sparcv9/tokyocabinet/include -I$(PREFIX)/sparcv9/include -DPREFIX=\"$(PREFIX)\"
LDFLAGS=-L$(PREFIX)/sparcv9/lib -L$(PREFIX)/sparcv9/tokyocabinet/lib -ltokyocabinet
else
CPPFLAGS=-Wall -O3 -I../tools -I$(PREFIX)/tokyocabinet/include -I$(PREFIX)/include -DPREFIX=\"$(PREFIX)\"
LDFLAGS=-L$(PREFIX)/lib -L$(PREFIX)/tokyocabinet/lib -ltokyocabinet
#CPPFLAGS=-DUSE_QDBM -Wall -O3 $(OFLAG) -I../tools -I$(PREFIX)/include
#LDFLAGS=-L$(PREFIX)/lib -lqdbm
endif
#CPPFLAGS+=-DDEBUG

RPC_X=abaddr.x
RPC_GENS=\
abaddr.h	\
abaddr_xdr.c	\
abaddr_svc.c	\
abaddr_clnt.c	\

RPC_OBJS=\
abaddr_xdr.o	\
abaddr_svc.o	\
abaddr_clnt.o	\

RPCD=abaddrd

RPC_APIS=\
abaddri.o	\

OBJS=\
abcidr.o	\
abmisc.o	\

LIBRPC=libabaddr.a

BINS=\
abaddrc	\
abmail	\

%.h %_xdr.c %_svc.c %_clnt.c: %.x
	rpcgen -C $<

%.a:
	$(AR) $(ARFLAGS) $@ $^

OUT_INCS=\
abcidr.h	\
abmisc.h	\

OUT_SRCS=\
abcidr.c	\
abmisc.c	\
abmail.c	\

OUT_RSCS=\
ams_reliable.lst	\
ams_unreliable.lst	\
\
ras_reliable.lst	\
rfs_reliable.lst	\
rhs_unreliable.lst	\
rns_reliable.lst	\
rns_unreliable.lst	\
rss_reliable.lst	\
\
abmail-echo	\
abmailecho	\
examples	\

VARS=\
abaddr.bdb	\
ams_trusted.lst.out.default	\
ams_reliable.lst.out.default	\
ams_unreliable.lst.out.default	\

all: $(OUT_INCS) $(OUT_SRCS) $(OBJS) $(RPC_GENS) $(RPC_OBJS) $(RPCD) $(LIBRPC) $(BINS) $(OUT_RSCS) $(VARS)

$(RPCD): $(RPCD:=.o) abaddr_xdr.o abaddr_svc.o $(OBJS)

$(LIBRPC): $(RPC_APIS) abaddr_xdr.o abaddr_clnt.o

abcidr.o: CPPFLAGS+='-Dmain=abcidr_main'
abaddrc: abaddrc.c $(LIBRPC) $(OBJS)
abmail: abmail.c $(LIBRPC) $(OBJS)
abmail: CPPFLAGS+=-DUSE_ABADDR_DB
abmail: LDFLAGS+=-lpcre

abcidr.h abcidr.c:
	ln -s ../tools/$@ .

abmisc.h abmisc.c abmail.c $(OUT_RSCS):
	ln -s ../$@ .

$(VARS): abaddrc
	./abaddrc -C -R -W
	for out in \
ams_trusted.lst.out	\
ams_reliable.lst.out	\
ams_unreliable.lst.out	\
	; do\
	  mv "$$out" "$$out".default;\
	done

install:
	cp $(BINS) $(PREFIX)/bin
	cp $(RPCD) $(PREFIX)/sbin
	cp abaddri.h $(PREFIX)/include
	cp $(LIBRPC) $(PREFIX)/lib
	test -d $(PREFIX)/var/abmail || mkdir $(PREFIX)/var/abmail
	cp $(VARS) $(PREFIX)/var/abmail

clean: clean.test
	rm -f $(OUT_INCS) $(OUT_SRCS)
	rm -f $(OBJS)
	rm -f $(RPC_GENS)
	rm -f $(RPC_OBJS) $(RPCD:=.o) $(RPCD) $(RPC_APIS) $(LIBRPC)
	rm -f $(BINS)
	rm -f $(OUT_RSCS)
	rm -f $(VARS)
	rm -rf result/regression

#ABMAILFLAGS=-b -g -d -c
#ABMAILFLAGS=-b -g -d -c --sm-client
ABMAILFLAGS=-b -g -d -c --am-dbfile=./abaddr.bdb
#ABMAILFLAGS=-b -g -d -c --am-daemon=localhost
test: all
	./abmail-echo $(ABMAILFLAGS) -v- -vvv -vvvv `find examples/nospam -name '[0-9]*' -print | sort` > examples_nospam.log
	-diff examples/nospam.log examples_nospam.log
	./abmailecho $(ABMAILFLAGS) -v -vvv -vvvv `find examples/spam -name '[0-9]*' -print | sort` > examples_spam.log
	-diff examples/spam.log examples_spam.log

clean.test:
	rm -f examples_*.log
