DST = /usr/local/lib/lmlc
YFLAGS = -dv
CFLAGS = -DYYMAXDEPTH=2000 -g
UGEN = ugen
MYBIN = ../../bin

LMLOBJS = lmllex.o lml.tab.o
CURRYOBJS = currylex.o curry.tab.o
AOBJS = id.o atype.o ttype.o tree.o expid.o import.o \
	list.o bind.o pdef.o impid.o finfo.o util.o icmd.o aux.o qual.o \
	main.o yyerror.o

all:	lmlp curryp

lmlp:	${LMLOBJS} $(AOBJS)
	$(CC) $(CFLAGS) ${LMLOBJS} $(AOBJS) -o lmlp

curryp:	${AOBJS} $(CURRYOBJS)
	$(CC) $(CFLAGS) ${AOBJS} $(CURRYOBJS) -o curryp

main.o 		: main.c include.h
util.o		: util.c include.h curry.h
lmllex.o	: lmllex.c lml.h
currylex.o	: currylex.c curry.h
id.o		: id.c id.h
ttype.c ttype.h	: ttype.u
		${UGEN} ttype.u
ttype.o		: ttype.c include.h
impid.c impid.h	: impid.u
		${UGEN} impid.u
impid.o		: impid.c include.h
finfo.c finfo.h	: finfo.u
		${UGEN} finfo.u
finfo.o		: finfo.c include.h
pdef.c pdef.h	: pdef.u
		${UGEN} pdef.u
pdef.o		: pdef.c include.h
bind.c bind.h	: bind.u
		${UGEN} bind.u
bind.o		: bind.c include.h
atype.c atype.h	: atype.u
		${UGEN} atype.u
atype.o		: atype.c include.h
tree.c tree.h	: tree.u 
		${UGEN} tree.u
tree.o		: tree.c include.h
list.c list.h	: list.u 
		${UGEN} list.u
list.o		: list.c include.h
icmd.c icmd.h	: icmd.u 
		${UGEN} icmd.u
icmd.o		: icmd.c include.h
qual.c qual.h	: qual.u 
		${UGEN} qual.u
qual.o		: qual.c include.h
import.c import.h	: import.u
		${UGEN} import.u
import.o		: import.c include.h
expid.c expid.h	: expid.u
		${UGEN} expid.u
expid.o		: expid.c include.h
# 
curry.tab.h curry.tab.c	: curry.y
		yacc ${YFLAGS} curry.y
		mv y.tab.h curry.h
		mv y.tab.c curry.tab.c
icurry.tab.c	: icurry.y
		yacc -v ${YFLAGS} icurry.y
		mv y.tab.c icurry.tab.c
# yacc should give 10 shift/reduce conflicts
lml.tab.h lml.tab.c	: lml.y
		yacc ${YFLAGS} lml.y
		mv y.tab.h lml.h
		mv y.tab.c lml.tab.c
ilml.tab.c	: ilml.y
		yacc -v ${YFLAGS} ilml.y
		mv y.tab.c ilml.tab.c
yyerror.o	: yyerror.c
include.h	: ttype.h id.h list.h tree.h atype.h bind.h pdef.h impid.h finfo.h icmd.h
parseimp	: parseimp.c
		$(CC) $(CFLAGS) -o parseimp parseimp.c
clean		:
		rm -f *.o lml.lex.c lml.tab.c tree.c tree.h y.output

print		:
		@pr -l${PS} defs.h main.c id.c id.h \
		            yyerror.c lml.y tree.u lml.lex.l Makefile
install		: lmlp curryp
		cp lmlp curryp $(DST)/bin
myinstall	: lmlp curryp parseimp
		cp lmlp curryp parseimp $(MYBIN)
