HDRS=y.tab.h defs.h
OBJS=y.tab.o trees.o sym.o main.o error.o
OBJS2=y.tab.o trees.o sym.o graf.main.o error.o
IB=y.tab.o trees.o sym.o error.o ib.o
SRCS=y.tab.c trees.c sym.c main.c error.c 
YSRC=p.y
LSRC=lex.l

CFLAGS=-O2 -m486
YFLAGS=-vd
LIBS=-lm -lfl
CDEST=parse

OUT=
DOC=*.doc
TESTS=*.m
OTHER=cmain.c m

LFLAGS=-hxac
LDEST=lint.err

REF=ref

all: parse load

install:
	cp parse ${DESTDIR}

ib:
	cc -c -DLEXDEBUG lex.yy.c
	cc -c y.tab.c 
	ld -r $(IB) -o forib.o $(LIBS)

parse: $(OBJS2)
	cc $(OBJS2) $(LIBS) -o parse 

load: m.o 

m.o: $(OBJS)
	ld -r $(OBJS) -o m.o 

lansky:
	cc -c y.tab.c
	cc -c lex.yy.c
	cc -c main.m
	ld -r $(OBJS) -o m.o 

lex.yy.c: $(LSRC)
	lex $(LSRC)

y.tab.c: $(YSRC)
	yacc $(YFLAGS) $(YSRC)

lint:
	lint $(LFLAGS) $(SRCS) | fgrep -v "never used" > $(LDEST)

print:
	print $(HDRS) $(LSRC) $(YSRC) $(SRCS)

ctags: $(SRCS)
	ctags $(HDRS) $(SRCS) 
	echo "se tags=tags" >> .exrc

cxref:
	cxref $(HDRS) $(SRCS) > $(REF)

vgrind:
	vgrind Makefile $(HDRS) $(LSRC) $(YSRC) $(SRCS) $(OUT) $(DOC)
bundle:
	bundle Makefile $(HDRS) $(LSRC) $(YSRC) $(SRCS) $(OTHER) $(OUT) $(DOC) $(TESTS) > bund.all

back:
	chmod 700 safe
	rm -f safe/*
	cp *.c safe
	cp $(YSRC) safe
	cp $(LSRC) safe
	chmod 500 safe

clean:
	rm -f *.o

grafall:
	make lint > $(LDEST) &
	make depend &
	make cxref &
	make back &
	make vgrind &

depend:
	grep '^#[ 	]*include[ 	]*"' ${SRCS} ${HDRS} ${YSRC} ${LSRC}| \
	      sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' \
	          -e 's/\.c/.o/' \
		  -e 's,../[a-z]*/,,' | \
	awk ' { if ($$1 != prev) { print rec; rec = $$0; prev = $$1; } \
		else { if (length(rec $$2) > 78) { print rec; rec = $$0; } \
		       else rec = rec " " $$2 } } \
	      END { print rec } ' > Makedep
	echo '/^# DO NOT DELETE THIS LINE/+2,$$d' >eddep
	echo '$$r Makedep' >>eddep
	echo 'w' >>eddep
	cp Makefile Makefile.bak
	ed - Makefile < eddep
	rm eddep Makedep
	echo '# DEPENDENCIES MUST END AT END OF FILE' >> Makefile
	echo '# IF YOU PUT STUFF HERE IT WILL GO AWAY' >> Makefile
	echo '# see make depend above' >> Makefile


# DO NOT DELETE THIS LINE


y.tab.o: defs.h lex.yy.c
trees.o: defs.h
sym.o: defs.h
main.o: defs.h
error.o: defs.h
p.y: defs.h lex.yy.o
lex.l: y.tab.h
# DEPENDENCIES MUST END AT END OF FILE
# IF YOU PUT STUFF HERE IT WILL GO AWAY
# see make depend above
