include Make.$(systype)

CFLAGS=$(XCFLAGS) -I.
LIBS=$(XLIBS) libtra.a libzlib/libzlib.a libbio/libbio.a libc/libc.a
LDFLAGS=$(LIBS) $(LIBS) $(XLDFLAGS)
BINARIES=\
	minisync\
	stdmerge\
	stdsplit\
	tradump\
	trafixdb\
	tramkdb\
	trascan\
	trasrv

MISCBIN=\
	mstress\
	testdb\
	testlabel\
	testmap\
	testsrv\
	teststore\
	thrstdmerge\
	tprimes

all: lib $(BINARIES)

misc: $(MISCBIN)

lib:
	@( cd lib`echo $(systype) | tr '[A-Z]' '[a-z]'` && make ) || exit 1
	@( cd libbio && make ) || exit 1
	@( cd libc && make ) || exit 1
	@( cd libunix && make ) || exit 1
	@( cd libzlib && make ) || exit 1

clean:
	rm -f *.o *.a
	rm -f $(BINARIES)
	rm -f $(MISCBIN)

nuke: clean
	rm -f */*.o */*.a

OFILES=\
	avl.o\
	banner.o\
	clist.o\
	clnt.o\
	copythread.o\
	dat.o\
	db.o\
	fdbuf.o\
	hash.o\
	list.o\
	ignore.o\
	path.o\
	queue.o\
	repl.o\
	rpc.o\
	sha1.o\
	srv.o\
	stat.o\
	storage.o\
	sync.o\
	time.o\
	util.o\
	work.o

libtra.a: $(OFILES)
	ar rvu libtra.a $(OFILES)
	$(RANLIB) libtra.a

test: tramkdb minisync trasrv tradump
	TRASRV=./trasrv export TRASRV
	TRADUMP=./tradump export TRADUMP
	TRAMKDB=./tramkdb export TRAMKDB
	SYNC=./minisync export SYNC
	TRATMP=./tmp export TRATMP
	rc ../testfn.rc ../test/[0-9]*

test.%: tramkdb textui trasrv tradump
	TRASRV=./trasrv
	TRADUMP=./tradump
	TRAMKDB=./tramkdb
	SYNC=./testui
	TRATMP=./tmp
	rc ../testfn.rc ../test/$*

install: $(BINARIES)
	cp $(BINARIES) $(HOME)/bin/`uname`/`uname -m`

install-sys: $(BINARIES)
	cp $(BINARIES) /usr/local/bin
	cp tra.man /usr/local/man/man1/tra.1
	cp tra-aux.man /usr/local/man/man1/tra-aux.1

install-wkj: $(BINARIES)
	cp tra.man $(HOME)/etc/man/man1/tra.1
	cp tra-aux.man $(HOME)/etc/man/man1/tra-aux.1
	cp $(BINARIES) $(HOME)/bin/$$systype/$$objtype/tra


# how i wish we could write general rules.

%.o: tra.h os.h copythread.h storage.h avl.h

copythread.o: copythread.c
	$(CC) $(ARCHFLAGS) $(CFLAGS) -c copythread.c -o copythread.o

minisync: minisync.o $(LIBS)
	$(CC) -o $@ minisync.o $(LDFLAGS)

stdmerge: stdmerge.o $(LIBS)
	$(CC) -o $@ stdmerge.o

stdsplit: stdsplit.o $(LIBS)
	$(CC) -o $@ stdsplit.o $(LDFLAGS)

mstress: mstress.o $(LIBS)
	$(CC) -o $@ mstress.o $(LDFLAGS)

testdb: testdb.o $(LIBS)
	$(CC) -o $@ testdb.o $(LDFLAGS)

testlabel: testlabel.o $(LIBS)
	$(CC) -o $@ testlabel.o $(LDFLAGS)

testmap: testmap.o $(LIBS)
	$(CC) -o $@ testmap.o $(LDFLAGS)

testsrv: testsrv.o $(LIBS)
	$(CC) -o $@ testsrv.o $(LDFLAGS)

teststore: teststore.o $(LIBS)
	$(CC) -o $@ teststore.o $(LDFLAGS)

tradump: tradump.o noclist.o $(LIBS)
	$(CC) -o $@ tradump.o $(LDFLAGS)

trafixdb: trafixdb.o noclist.o $(LIBS)
	$(CC) -o $@ trafixdb.o $(LDFLAGS)

tramkdb: tramkdb.o $(LIBS)
	$(CC) -o $@ tramkdb.o $(LDFLAGS)

trascan: trascan.o $(LIBS)
	$(CC) -o $@ trascan.o $(LDFLAGS)

trasrv: trasrv.o $(LIBS)
	$(CC) -o $@ trasrv.o $(LDFLAGS)

thrstdmerge: thrstdmerge.o $(LIBS)
	$(CC) -o $@ thrstdmerge.o $(LDFLAGS)

tprimes: tprimes.o $(LIBS)
	$(CC) -o $@ tprimes.o $(LDFLAGS)

