#
# Build recipes
#

ehddr   = adjustdate.h csv.h environ.h fdlist.h keyreader.h skt.h

adjdate = adjustdate.o
args    = argparse.o argval.o check_range.o getpath.o
csv     = csv.o
files   = config_handler.o \
	  diracc.o error.o fdlist.o filesize.o fixext.o fixpath.o fixname.o \
	  getdelcode.o getkey.o logmsg.o progname.o prstat.o\
          question.o \
	  searchpath.o sigtrap.o skt.o swapdir.o tempstore.o warn.o
key     = keyreader.o
math    = itoa.o ltoa.o numconv.o
memfns  = get_space.o
misc    = bitsout.o buffer.o byteout.o dumphex.o pluginlib.o setpause.o
nat     = autodate.o country.o
search  = chopinsert.o chopsearch.o
str     = capitalise.o strhex.o strlwr.o strmfe.o strupr.o trim.o
tabs    = tabnormal.o tabdefault.o tabspread.o tabclear.o tabset.o \
	  tabout.o tabexpand.o tabpos.o 

emods   = $(adjdate) $(args) $(csv) $(files) $(key) $(math) $(memfns) \
	  $(misc) $(nat) $(search) $(str) $(tabs)

lib     = libenviron.a
utils   = codes disptime environ national offsetdate
tests   = testadjustdate testacc testargs testbitsout testbyteout \
	  testcsv testcsv2 testcwd testdelcode \
          testfixe testfixn testfixp \
	  testitoa testlogmsg testltoa testlu \
          testmaxmin testnumconv testopt \
	  testpause testpopen testprogname testq testrand testrename \
	  testsearchpath testsearch testsize teststrhex teststrmfe \
          testt testtab testtab2 testtrim testwd
data    = data/country

exdocs  = doc/codes.1 doc/disptime.1 doc/national.1 doc/offsetdate.1
fndocs  = doc/chopsearch.3 doc/country.3 doc/csv.3 doc/keyreader.3
docs    = $(exdocs) $(fndocs)

BIN     = /usr/local/bin
ETC     = /usr/local/etc
INC     = /usr/local/include
LIBD    = /usr/local/lib
MAN1    = /usr/local/man/man1
MAN3    = /usr/local/man/man3
BINBALL = environ.tgz
CLASSES = /usr/java/jarlib/environ-1.4.jar:/usr/java/jarlib/cdoc.jar

cflags = -c -I.
ldflags = -L.

all:	$(lib) $(utils) $(tests)
	cd testpluginlib; make all
	echo All built

clean: 
	rm -f *.o $(utils) $(tests) *.tgz doc/*.html
	cd testpluginlib; make clean

docs:
	if [ ! -d doc ]; then mkdir doc; fi
	cd doc; java -cp $(CLASSES) cdoc -L ../*.h

install:
	chmod a-w $(lib)
	chmod a+rx $(lib) 
	chmod u+w $(lib)
	cp $(lib) $(LIBD)
	chmod a-wx $(ehddr)
	chmod a+r $(ehddr)
	chmod u+w $(ehddr)
	cp $(ehddr) $(INC)
	chmod a-w $(utils)
	chmod a+x $(utils)
	chmod u+x $(utils)
	cp $(utils) $(BIN)
	chmod a-wx $(data)
	chmod a+r $(data)
	chmod u+w $(data)
	cp $(data) $(ETC)
	chmod a-wx $(docs)
	chmod a+r $(docs)
	chmod u+w $(docs)
	cp $(exdocs) $(MAN1)
	cp $(fndocs) $(MAN3)
	rm -f $(MAN3)/chopinsert.3
	ln -s $(MAN3)/chopsearch.3 $(MAN3)/chopinsert.3

tarball:
	rm -f $(BINBALL)
	tar czvf $(BINBALL) $(lib) $(ehddr) $(utils)

libenviron.a: $(ehddr) $(emods)
	ar -r $(lib) $(emods)

adjustdate.o: adjustdate.c adjustdate.h
	cc $(cflags) adjustdate.c   

argparse.o: argparse.c environ.h
	cc $(cflags) argparse.c   

argval.o: argval.c environ.h
	cc $(cflags) argval.c   

autodate.o: autodate.c environ.h
	cc $(cflags) autodate.c   

bitsout.o: bitsout.c environ.h
	cc $(cflags) bitsout.c  

buffer.o: buffer.c environ.h
	cc $(cflags) buffer.c  

byteout.o: byteout.c environ.h
	cc $(cflags) byteout.c  

capitalise.o: capitalise.c environ.h
	cc $(cflags) capitalise.c   

check_range.o: check_range.c environ.h
	cc $(cflags) check_range.c   

chopinsert.o: chopinsert.c environ.h
	cc $(cflags) chopinsert.c   

chopsearch.o: chopsearch.c environ.h
	cc $(cflags) chopsearch.c   

config_handler.o: config_handler.c environ.h
	cc $(cflags) config_handler.c

country.o: country.c environ.h
	cc $(cflags) country.c   

csv.o: csv.c csv.h
	cc $(cflags) csv.c   

diracc.o: diracc.c environ.h
	cc $(cflags) diracc.c  

dumphex.o: dumphex.c environ.h
	cc $(cflags) dumphex.c  

error.o: error.c environ.h
	cc $(cflags) error.c  

fdlist.o: fdlist.c fdlist.h
	cc $(cflags) fdlist.c 

filesize.o: filesize.c environ.h
	cc $(cflags) filesize.c  

fixext.o: fixext.c environ.h
	cc $(cflags) fixext.c  

fixname.o: fixname.c environ.h
	cc $(cflags) fixname.c   

fixpath.o: fixpath.c environ.h
	cc $(cflags) fixpath.c   

get_space.o: get_space.c environ.h
	cc $(cflags) get_space.c 

getdelcode.o: getdelcode.c environ.h
	cc $(cflags) getdelcode.c   

getkey.o: getkey.c environ.h
	cc $(cflags) getkey.c   

getpath.o: getpath.c environ.h
	cc $(cflags) getpath.c   

itoa.o: itoa.c environ.h
	cc $(cflags) itoa.c   

keyreader.o: keyreader.c keyreader.h
	cc $(cflags) keyreader.c

logmsg.o : logmsg.c environ.h
	cc $(cflags) logmsg.c 

ltoa.o: ltoa.c environ.h
	cc $(cflags) ltoa.c   

numconv.o: numconv.c environ.h
	cc $(cflags) numconv.c   

numdisp.o: numdisp.c environ.h
	cc $(cflags) numdisp.c   

pluginlib.o: pluginlib.c environ.h
	cc $(cflags) pluginlib.c   

progname.o: progname.c environ.h
	cc $(cflags) progname.c  

prstat.o: prstat.c environ.h
	cc $(cflags) prstat.c  

question.o: question.c environ.h
	cc $(cflags) question.c  

searchpath.o: searchpath.c environ.h
	cc $(cflags) searchpath.c   

setpause.o: setpause.c environ.h
	cc $(cflags) setpause.c   

sigtrap.o: sigtrap.c environ.h
	cc $(cflags) sigtrap.c   

skt.o: skt.c skt.h
	cc $(cflags) skt.c 

strlwr.o: strlwr.c environ.h
	cc $(cflags) strlwr.c   

strhex.o: strhex.c environ.h
	cc $(cflags) strhex.c   

strmfe.o: strmfe.c environ.h
	cc $(cflags) strmfe.c   

strupr.o: strupr.c environ.h
	cc $(cflags) strupr.c   

swapdir.o: swapdir.c environ.h
	cc $(cflags) swapdir.c   

tabpos.o: tabpos.c environ.h
	cc $(cflags) tabpos.c   

tabexpand.o: tabexpand.c environ.h
	cc $(cflags) tabexpand.c   

tabout.o: tabout.c environ.h
	cc $(cflags) tabout.c   

tabset.o: tabset.c environ.h
	cc $(cflags) tabset.c   

tabclear.o: tabclear.c environ.h
	cc $(cflags) tabclear.c   

tabspread.o: tabspread.c environ.h
	cc $(cflags) tabspread.c   

tabnormal.o: tabnormal.c environ.h
	cc $(cflags) tabnormal.c   

tabdefault.o: tabdefault.c environ.h
	cc $(cflags) tabdefault.c  

tempstore.o: tempstore.c environ.h
	cc $(cflags) tempstore.c  

trim.o: trim.c environ.h
	cc $(cflags) trim.c  

warn.o: warn.c environ.h
	cc $(cflags) warn.c  

# 
# Utility programs
#
codes: codes.o libenviron.a
	cc $(ldflags) codes.o -lenviron -o codes
codes.o: codes.c environ.h
	cc $(cflags) codes.c   

disptime: disptime.o libenviron.a
	cc $(ldflags) disptime.o -lenviron -o disptime 
disptime.o: disptime.c environ.h
	cc $(cflags) disptime.c

environ: environ.c environ.h
	cc $(ldflags) environ.c -o environ 

national: national.o libenviron.a
	cc $(ldflags) national.o -lenviron -o national   
national.o: national.c environ.h
	cc $(cflags) national.c    

offsetdate: offsetdate.o libenviron.a
	cc $(ldflags) offsetdate.o -lenviron -o offsetdate   
offsetdate.o: offsetdate.c offsetdate.h environ.h
	cc $(cflags) offsetdate.c    

#
# Test programs start here
#
testadjustdate: testadjustdate.o libenviron.a
	cc $(ldflags) testadjustdate.o -lenviron -o testadjustdate  
testadjustdate.o: testadjustdate.c environ.h
	cc $(cflags) testadjustdate.c  

testacc: testacc.o libenviron.a
	cc $(ldflags) testacc.o -lenviron -o testacc  
testacc.o: testacc.c environ.h
	cc $(cflags) testacc.c  

testargs: testargs.o libenviron.a
	cc $(ldflags) testargs.o -lenviron -o testargs  
testargs.o: testargs.c environ.h
	cc $(cflags) testargs.c  

testbitsout: testbitsout.o libenviron.a 
	cc $(ldflags) testbitsout.o -lenviron -o testbitsout
testbitsout.o: testbitsout.c environ.h
	cc $(cflags) testbitsout.c

testbyteout: testbyteout.o libenviron.a 
	cc $(ldflags) testbyteout.o -lenviron -o testbyteout
testbyteout.o: testbyteout.c environ.h
	cc $(cflags) testbyteout.c

testcwd: testcwd.o libenviron.a
	cc $(ldflags) testcwd.o -lenviron -o testcwd  
testcwd.o: testcwd.c environ.h
	cc $(cflags) testcwd.c    

testcsv: testcsv.o libenviron.a
	cc $(ldflags) testcsv.o -lenviron -o testcsv  
testcsv.o: testcsv.c csv.h
	cc $(cflags) testcsv.c    

testcsv2: testcsv2.o libenviron.a
	cc $(ldflags) testcsv2.o -lenviron -o testcsv2  
testcsv2.o: testcsv2.c csv.h
	cc $(cflags) testcsv2.c    

testdelcode: testdelcode.o libenviron.a
	cc $(ldflags) testdelcode.o -lenviron -o testdelcode    
testdelcode.o: testdelcode.c environ.h
	cc $(cflags) testdelcode.c  

testfixe: testfixe.o libenviron.a
	cc $(ldflags) testfixe.o -lenviron -o testfixe  
testfixe.o: testfixe.c environ.h
	cc $(cflags) testfixe.c  

testfixn: testfixn.o libenviron.a 
	cc $(ldflags) testfixn.o -lenviron -o testfixn  
testfixn.o: testfixn.c environ.h
	cc $(cflags) testfixn.c  

testfixp: testfixp.o libenviron.a 
	cc $(ldflags) testfixp.o -lenviron -o testfixp  
testfixp.o: testfixp.c environ.h
	cc $(cflags) testfixp.c  

testitoa: testitoa.o libenviron.a
	cc $(ldflags) testitoa.o -lenviron -o testitoa  
testitoa.o: testitoa.c environ.h
	cc $(cflags) testitoa.c  

testlogmsg: testlogmsg.o libenviron.a
	cc $(ldflags) testlogmsg.o -lenviron -o testlogmsg
testlogmsg.o : testlogmsg.c environ.h
	cc $(cflags) testlogmsg.c

testltoa: testltoa.o libenviron.a
	cc $(ldflags) testltoa.o -lenviron -o testltoa  
testltoa.o: testltoa.c environ.h
	cc $(cflags) testltoa.c  

testlu: testlu.o libenviron.a
	cc $(ldflags) testlu.o -lenviron -o testlu  
testlu.o: testlu.c environ.h
	cc $(cflags) testlu.c  

testmaxmin: testmaxmin.o libenviron.a
	cc $(ldflags) testmaxmin.o -lenviron -o testmaxmin  
testmaxmin.o: testmaxmin.c environ.h
	cc $(cflags) testmaxmin.c  

testnumconv: testnumconv.o libenviron.a
	cc $(ldflags) testnumconv.o -lenviron -o testnumconv  
testnumconv.o: testnumconv.c environ.h
	cc $(cflags) testnumconv.c  

testopt: testopt.o libenviron.a
	cc $(ldflags) testopt.o -lenviron -o testopt
testopt.o: testopt.c environ.h
	cc $(cflags) testopt.c  

testpause: testpause.o libenviron.a
	cc $(ldflags) testpause.o -lenviron -o testpause    
testpause.o: testpause.c environ.h
	cc $(cflags) testpause.c  

testpopen: testpopen.o libenviron.a
	cc $(ldflags) testpopen.o -lenviron -o testpopen   
testpopen.o: testpopen.c environ.h 
	cc $(cflags) testpopen.c    

testprogname: testprogname.o libenviron.a
	cc $(ldflags) testprogname.o -lenviron -o testprogname    
testprogname.o: testprogname.c environ.h
	cc $(cflags) testprogname.c  

testq: testq.o libenviron.a
	cc $(ldflags) testq.o -lenviron -o testq    
testq.o: testq.c environ.h
	cc $(cflags) testq.c  

testrand: testrand.o libenviron.a
	cc $(ldflags) testrand.o -lenviron -o testrand  
testrand.o: testrand.c environ.h
	cc $(cflags) testrand.c  

testrename: testrename.o libenviron.a
	cc $(ldflags) testrename.o -lenviron -o testrename  
testrename.o: testrename.c environ.h
	cc $(cflags) testrename.c    

testsearchpath: testsearchpath.o libenviron.a
	cc $(ldflags) testsearchpath.o -lenviron -o testsearchpath   
testsearchpath.o: testsearchpath.c environ.h
	cc $(cflags) testsearchpath.c    

testsearch: testsearch.o libenviron.a
	cc $(ldflags) testsearch.o -lenviron -o testsearch   
testsearch.o: testsearch.c environ.h
	cc $(cflags) testsearch.c    

teststrhex: teststrhex.o libenviron.a
	cc $(ldflags) teststrhex.o -lenviron -o teststrhex  
teststrhex.o: teststrhex.c environ.h
	cc $(cflags) teststrhex.c  

teststrmfe: teststrmfe.o libenviron.a
	cc $(ldflags) teststrmfe.o -lenviron -o teststrmfe  
teststrmfe.o: teststrmfe.c environ.h
	cc $(cflags) teststrmfe.c  

testsize: testsize.o libenviron.a
	cc $(ldflags) testsize.o -lenviron -o testsize  
testsize.o: testsize.c environ.h
	cc $(cflags) testsize.c    

testt: testt.o libenviron.a
	cc $(ldflags) testt.o -lenviron -o testt
testt.o: testt.c environ.h 
	cc $(cflags) testt.c  

testtab: testtab.o libenviron.a
	cc $(ldflags) testtab.o -lenviron -o testtab  
testtab.o: testtab.c environ.h
	cc $(cflags) testtab.c    

testtab2: testtab2.o libenviron.a
	cc $(ldflags) testtab2.o -lenviron -o testtab2  
testtab2.o: testtab2.c environ.h
	cc $(cflags) testtab2.c    

testtrim: testtrim.o strhex.o libenviron.a
	cc $(ldflags) testtrim.o strhex.o -lenviron -o testtrim
testtrim.o: testtrim.c environ.h 
	cc $(cflags) testtrim.c  

testwd: testwd.o libenviron.a
	cc $(ldflags) testwd.o -lenviron -o testwd  
testwd.o: testwd.c environ.h
	cc $(cflags) testwd.c    

