.PHONY : CLEAN ALL TEST DOC
#CFLAGS = -c -O3
#CFLAGS = -c -O2
#CFLAGS = -c
CFLAGS = -c -g
ALLDP = Makefile

SRC = scan.l parse.y \
	intfc.cpp parse.cpp ordBase.cpp finitefuncOrd.cpp \
	iterfuncOrd.cpp admisOrd.cpp ordinal.cpp static.cpp mn.cpp

OBJS = parse.tab.o intfc.o parse.o ordBase.o  finitefuncOrd.o \
		iterfuncOrd.o admisOrd.o ordDebug.o \
		ordinal.o static.o mn.o validate.o validate1.o validate2.o \
		validate3.o lex.yy.o

HDRS = finitefuncOrd.h intfc.h iterfuncOrd.h ordBase.h ordDebug.h \
		ordinal.h ordTop.h parse.tab.h teeStream.h admisOrd.h

TST_OUT = base.tst cmdIntfcLog.tst cmdIntfcTest.tst iter.tst psi.tst try.tst

TST_DIFF = basediff cmdIntfcLogdiff cmdIntfcTestdiff iterdiff psidiff trydiff


SCRIPTS = update.sh srTest.sh cmdIntfcTesta.sord cmdIntfcTest.sord

ALL_FILES = ${SRC} ${HDRS} ${SCRIPTS} Makefile

ord : ${OBJS}
	g++ -g ${OBJS} -lgmp -lgmpxx -lreadline -lncurses \
		-o ord 

DOC : ord
	bash update.sh

ALL : ord
	bash update.sh

TEST test.log : ord
	time bash srTest.sh | tee test.log

##EXPORT : ${ALL_FILES}
##	cp ${ALL_FILES} export/src

CLEAN :
	rm -f ${TST_DIFF} ord *.o ${TST_OUT} parse.tab.c parse.tab.h \
		lex.yy.c lex.yy.c parse.output test.log

parse.tab.o: parse.tab.c parse.tab.h intfc.h version.h ordinal.h ${ALLDP}
	g++ ${CFLAGS} parse.tab.c

parse.tab.c parse.tab.h : parse.y  ${ALLDP}
	bison -d -v parse.y 

lex.yy.o: parse.tab.h lex.yy.c intfc.h version.h ${ALLDP}
	g++ ${CFLAGS} lex.yy.c

lex.yy.c : scan.l
	flex scan.l 

ordinal.o: ordinal.cpp ordinal.h ordBase.h  ordDebug.h \
	finitefuncOrd.h iterfuncOrd.h  admisOrd.h version.h validate.h intfc.h ${ALLDP}
	g++ ${CFLAGS} ordinal.cpp

ordBase.o: ordBase.cpp  ordDebug.h ordinal.h ordBase.h  version.h \
	iterfuncOrd.h admisOrd.h finitefuncOrd.h ${ALLDP}
	g++ ${CFLAGS} ordBase.cpp

finitefuncOrd.o: finitefuncOrd.cpp   ordDebug.h ordinal.h ordBase.h \
		finitefuncOrd.h version.h iterfuncOrd.h admisOrd.h ${ALLDP}
	g++ ${CFLAGS} finitefuncOrd.cpp

iterfuncOrd.o: iterfuncOrd.cpp  iterfuncOrd.h finitefuncOrd.h \
	admisOrd.h ordinal.h ordBase.h  ordDebug.h  version.h ${ALLDP}
	g++ ${CFLAGS} iterfuncOrd.cpp

admisOrd.o: admisOrd.cpp  iterfuncOrd.h admisOrd.h finitefuncOrd.h \
	ordinal.h ordBase.h  ordDebug.h  version.h validate.h ${ALLDP}
	g++ ${CFLAGS} admisOrd.cpp

validate.o : validate.cpp validate.h ordDebug.h ordinal.h ordBase.h \
	finitefuncOrd.h iterfuncOrd.h ordTop.h  version.h admisOrd.h ${ALLDP}
	g++ ${CFLAGS} validate.cpp

validate1.o : validate1.cpp validate.h ordDebug.h ordinal.h ordBase.h \
	finitefuncOrd.h iterfuncOrd.h ordTop.h  version.h admisOrd.h ${ALLDP}
	g++ ${CFLAGS} validate1.cpp

validate2.o : validate2.cpp validate.h ordDebug.h ordinal.h ordBase.h \
	finitefuncOrd.h iterfuncOrd.h ordTop.h  version.h admisOrd.h ${ALLDP}
	g++ ${CFLAGS} validate2.cpp

validate3.o : validate3.cpp validate.h ordDebug.h ordinal.h ordBase.h \
	finitefuncOrd.h iterfuncOrd.h ordTop.h  version.h admisOrd.h ${ALLDP}
	g++ ${CFLAGS} validate3.cpp

ordDebug.o : ordDebug.h ordDebug.cpp ${ALLDP}
	g++ ${CFLAGS} ordDebug.cpp

static.o: static.cpp iterfuncOrd.h finitefuncOrd.h  ordDebug.h \
	ordinal.h ordBase.h intfc.h version.h ${ALLDP}
	g++ ${CFLAGS} static.cpp

intfc.o: intfc.cpp  ordDebug.h ordinal.h ordBase.h finitefuncOrd.h \
	iterfuncOrd.h ordTop.h intfc.h  version.h
	g++ ${CFLAGS} intfc.cpp 

parse.o: parse.cpp  intfc.h parse.tab.h version.h ${ALLDP}
	g++ ${CFLAGS} parse.cpp 

mn.o: mn.cpp  ordDebug.h ordinal.h ordBase.h finitefuncOrd.h iterfuncOrd.h \
	ordTop.h  version.h admisOrd.h ${ALLDP}
	g++ ${CFLAGS} mn.cpp 

TSTS =  iter.tst  psi.tst base.tst play.tst try.tst



