FC=gfortran
FFLAGS=-g
FLOPTS=-g
ARCHIVER=ar rv

OBJS=n3error.o n3object.o n3hash.o n3date.o n3fmt.o n3long.o n3io.o \
     n3blkio.o
SRCS=$(OBJS:.o=.f90)
BINS=hash object date long blkio io

UPPERINC=-I../tools
REFTABS=errref.txt
LIBNAME=nusdas3
LIBRARY=../lib$(LIBNAME).a

.SUFFIXES:
.SUFFIXES: .f90 .o

.f90.o:
	$(FC) $(FFLAGS) $(UPPERINC) -c $<

.PHONY: p1tools p2prepro p3libs p4test all test

all: p3libs

p1tools:
	@test -x ../tools/reftab || (cd ../tools; $(MAKE) p1tools)

p2prepro: p1tools reftab.inc errtab.inc

errref.txt: $(SRCS)
	ls -1 $(SRCS) | ../tools/prepro > tmp
	mv tmp errref.txt

reftab.inc: $(REFTABS)
	ls -1 $(REFTABS) | ../tools/reftab > tmp
	mv tmp reftab.inc

errtab.inc: error.txt
	echo error.txt | ../tools/errtab > tmp
	mv tmp errtab.inc

p3libs: p2prepro $(LIBRARY)

$(LIBRARY): $(OBJS)
	$(ARCHIVER) $(LIBRARY) $(OBJS) ../tools/n3*.o

test: p4test

p4test: p3libs $(BINS)
	./object
	./hash
	./date
	./long
	./blkio
	./io

object: object.o $(LIBRARY)
	$(FC) $(FLOPTS) -o object object.o $(LIBRARY)

hash: hash.o $(LIBRARY)
	$(FC) $(FLOPTS) -o hash hash.o $(LIBRARY)

date: date.o $(LIBRARY)
	$(FC) $(FLOPTS) -o date date.o $(LIBRARY)

long: long.o $(LIBRARY)
	$(FC) $(FLOPTS) -o long long.o $(LIBRARY)

blkio: blkio.o $(LIBRARY)
	$(FC) $(FLOPTS) -o blkio blkio.o $(LIBRARY)

io: io.o $(LIBRARY)
	$(FC) $(FLOPTS) -o io io.o $(LIBRARY)

clean:
	-rm -f *.o core *~ a.out *.mod $(BINS) 

n3error.o: errtab.inc reftab.inc
n3hash.o: n3object.o
n3object.o: n3error.o
n3date.o: n3fmt.o
n3blkio.o: n3error.o
n3io.o: n3blkio.o
