# =()<@<INCLUDE>@>()=
.include "../include/config.make"

DEST=$(NEWSBIN)/batch

BINS=batcher bencode c7encode
PROGS=$(BINS) batchih batchsm batchsplit compcun viainews viauux \
	sendbatches viamail \
	viarsh batchcheck batchra \
	batchsplitter bpfind nencode usenntpxmit
BP=batchparms.eg
ALL=$(PROGS) $(BP)

all:	$(ALL)
	$(MX) $(PROGS)

install:	$(ALL)
	$(MKDIR) $(DEST)
	$(TO) $(DEST) $(PROGS)

setup:	$(BP)
	$(MKDIR) $(NEWSARTS)/out.going $(NEWSARTS)/out.nntp
	$(TO) -n -e $(NEWSCTL) $(BP)

cmp:	$(ALL)
	@$(IN) $(DEST) $(PROGS)
	@$(IN) -i -e $(NEWSCTL) $(BP)
	: checking batchparms format
	@awk '$$0 !~ /^#/ && $$2 ~ /00/' $(NEWSCTL)/batchparms >bp.00 ; true
	@test ! -s bp.00 ;
	@rm -f bp.00
	: okay

$(BINS):	$(LIB)

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

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

bencode:	bencode.o crctab.o
	$(CC) $(LDFLAGS) bencode.o crctab.o $(LIBS) -o $@

bencode.o:	coder.h

rsetup:	test.1 test.2 test.3 test.good bin arts bp.huey bp.nobody

test.1:
	echo 'a test' >$@

test.2:
	echo 'another test' >$@

test.3:
	cat batcher.c batcher.c batcher.c batcher.c batcher.c >$@

test.good:
	echo "#! rnews `wc -c test.1 | awk '{print $$1}'`" >test.good
	cat test.1 >>test.good
	echo "#! rnews `wc -c test.2 | awk '{print $$1}'`" >>test.good
	cat test.2 >>test.good
	( echo --- ; cat test.good ) >test.out1
	( echo +++ ; echo 2 ; cat test.good ) >test.out2
	echo "#! rnews `wc -c test.3 | awk '{print $$1}'`" >test.temp
	cat test.3 >>test.temp
	cat test.temp >>test.good
	( echo --- ; cat test.temp ) >>test.out1

bin:	$(PROGS)
	mkdir bin
	echo 'cat' >bin/munch
	echo "( echo --- ; cat ) >>`pwd`/output" >bin/xmit
	echo 'echo 2 ; cat' >bin/munch2
	echo "( echo +++ ; cat ) >>`pwd`/output2" >bin/xmit2
	echo 'echo 4' >bin/queuelen
	echo 'echo 99' >bin/spacefor
	echo '' >bin/lock
	echo '' >bin/unlock
	echo 'echo $$* ; echo === ; cat ; echo ===' >bin/report
	echo 'cat >>$$NEWSSITEDIR/togo.leftover' >bin/staller
	$(MX) bin/*

arts:
	mkdir arts
	mkdir arts/out.going arts/out.going/foo arts/out.going/bar

bp.huey:
	echo "bpokay=y" >$@
	echo "bpsite='huey'" >>$@
	echo "bpclass='u'" >>$@
	echo "bpsize='500000'" >>$@
	echo "bpmax='750000'" >>$@
	echo "bpqueue='20'" >>$@
	echo "bpcmd='batcher | gzip -9 | viauux -d gunzip'" >>$@

bp.nobody:
	echo "bpokay=y" >$@
	echo "bpsite='/default/'" >>$@
	echo "bpclass='u'" >>$@
	echo "bpsize='500000'" >>$@
	echo "bpmax='1500000'" >>$@
	echo "bpqueue='20'" >>$@
	echo "bpcmd='batcher | compcun | viauux'" >>$@

r:	all rclean rsetup r.bpf r.split r.batcher r.sendwho r.sendbatches
	: success!

r.bpf:	bpfind
	$(MX) bpfind
	$(HERE) ./bpfind . huey batchparms.eg >bp.tmp
	cmp bp.huey bp.tmp || diff bp.huey bp.tmp
	$(HERE) ./bpfind u huey batchparms.eg >bp.tmp
	cmp bp.huey bp.tmp || diff bp.huey bp.tmp
	$(HERE) ./bpfind u nobody batchparms.eg >bp.tmp
	cmp bp.nobody bp.tmp || diff bp.nobody bp.tmp
	$(HERE) ./bpfind u donald batchparms.eg >bp.tmp
	test " `cat bp.tmp`" = " bpokay=x" ;

r.split:
	echo x 1 >togo
	echo a 1 >>togo
	echo b 1 >>togo
	echo c 1 >>togo
	echo d 1 >>togo
	echo e 1 >>togo
	echo f 1 >>togo
	echo g 1 >>togo
	echo h 1 >>togo
	echo i 1 >>togo
	echo j 3 >>togo
	echo k 20 >>togo
	echo l 99999 >>togo
	cp togo togo.save
	( cd arts ; touch x a b c d e f g h i j k l )
	$(HERE) ./batchsplit -X 16 1000000
	test -r togo ;
	test ! -s togo ;
	test " `cat togo.1`" = " x 1" ;
	test " `cat togo.2`" = " a 1" ;
	test " `cat togo.3`" = " b 1" ;
	test " `cat togo.4`" = " c 1" ;
	test " `cat togo.5`" = " d 1" ;
	test " `cat togo.6`" = " e 1" ;
	test " `cat togo.7`" = " f 1" ;
	sed '1,7d' togo.save >togo.sp
	cat togo.next togo.more >togo.tmp
	cmp togo.tmp togo.sp
	test " `wc -l <togo.next`" -eq 5 ;
	mv togo.save togo
	rm togo.*
	cp togo togo.save
	rm arts/x
	$(HERE) ./batchsplit -X 16 1000000
	test " `cat togo.1`" = " a 1" ;
	test " `cat togo.2`" = " b 1" ;
	test " `cat togo.3`" = " c 1" ;
	test " `cat togo.4`" = " d 1" ;
	test " `cat togo.5`" = " e 1" ;
	test " `cat togo.6`" = " f 1" ;
	test " `cat togo.7`" = " g 1" ;
	sed '1,8d' togo.save >togo.sp
	cat togo.next togo.more >togo.tmp
	cmp togo.tmp togo.sp
	test " `wc -l <togo.next`" -eq 4 ;

r.batcher:
	echo `pwd`/test.1 >togo
	echo ./test.2 >>togo
	cp test.2 arts
	echo `pwd`/test.3 666 >>togo
	./batcher togo >test.out
	cmp test.out test.good
	./batcher <togo >test.out
	cmp test.out test.good

r.sendwho:
	echo 'foo u 500 10 batcher | munch | xmit' >batchparms
	$(HERE) ./sendbatches -d >test.out
	echo foo >test.who
	cmp test.out test.who
	echo '/default/ u 10000 5 batcher | munch2 | xmit2' >>batchparms
	$(HERE) ./sendbatches -d | sort >test.out
	( echo foo ; echo bar ) | sort >test.who
	cmp test.out test.who
	$(HERE) ./sendbatches -d bletch >test.out
	echo bletch >test.who
	cmp test.out test.who
	egrep -v '^foo' batchparms >bp.n
	echo "bar n 10000 - usesomething" >>bp.n
	$(HERE) ./sendbatches -f `pwd`/bp.n -d -c n >test.out
	test " `cat test.out`" = " bar" ;

r.sendbatches:
	$(HERE) ./sendbatches
	test ! -s output ;
	test ! -s output2 ;
	echo `pwd`/test.1 200 >arts/out.going/foo/togo
	echo `pwd`/test.2 200 >>arts/out.going/foo/togo
	echo `pwd`/test.3 200 >>arts/out.going/foo/togo
	echo `pwd`/test.1 4000 >arts/out.going/bar/togo
	echo `pwd`/test.2 4000 >>arts/out.going/bar/togo
	echo `pwd`/test.3 4000 >>arts/out.going/bar/togo
	echo `pwd`/test.3 4000 >test.left
	echo 'foo u! 500 10 batcher | munch | xmit' >test.bp
	$(HERE) ./sendbatches -f `pwd`/test.bp
	test ! -s output ;
	test ! -s output2 ;
	$(HERE) ./sendbatches
	cmp output test.out1
	cmp output2 test.out2
	test ! -s arts/out.going/foo/togo ;
	test ! -s arts/out.going/bar/togo ;
	cmp test.left arts/out.going/bar/togo.next
	sed '/^$$/q' batchlog | sed '1d;$$d' | sed '$$d' >test.log
	test ! -s test.log ;
	sed '1,/^$$/d' batchlog | sed '/^$$/q' | sed '1d;$$d' | sed '$$d' >test.log
	sed 's;/[^ ]*/;/;' test.log >test.log2
	echo 'foo	backlog ? (disabled in /test.bp)' >test.logg
	cmp test.log2 test.logg
	sed '1,/^$$/d' batchlog | sed '1,/^$$/d' | sed '1d;$$d' | sed '$$d' >test.log
	echo 'bar	backlog 1 (batches flowing)' >test.bar
	cmp test.bar test.log
	echo 'bar n 5000000 - staller' >batchparms
	rm batchlog
	$(HERE) ./sendbatches
	sed '/^$$/d' batchlog | sed '1d;$$d' >test.log
	echo 'bar	backlog 1 (batching slow or stalled)' >test.bar
	cmp test.bar test.log

rclean:
	rm -rf bin arts
	rm -f test.* togo togo.* batchparms batchlog output output2
	rm -f [a-l] bp.*

clean:	rclean
	rm -f *.o $(BINS) bp.00


syntax highlighted by Code2HTML, v. 0.9.1