# $Header$

EMHOME=../..
CFILES=main.c getline.c lookup.c var.c process.c backward.c util.c\
	alloc.c putline.c cleanup.c peephole.c flow.c reg.c
OFILES=main.o getline.o lookup.o var.o process.o backward.o util.o\
	alloc.o putline.o cleanup.o peephole.o flow.o
ONOGLOB=regnoglob.o
OGLOB=regglob.o
LIBS=$(EMHOME)/lib/em_data.a
CFLAGS=-O -DNDEBUG -I$(EMHOME)/h
LDFLAGS=-i
LINT=lint
OPR=opr
PROPTS=
# LEXLIB is implementation dependent, try -ll or -lln first
LEXLIB=-ll

all:	opt opt2

opt:    $(OFILES) $(ONOGLOB) pattern.o $(LIBS)
	$(CC) $(LDFLAGS) $(CFLAGS) $(OFILES) $(ONOGLOB) pattern.o $(LIBS) -o opt

opt2:   $(OFILES) $(OGLOB) pattern.o $(LIBS)
	$(CC) $(LDFLAGS) $(CFLAGS) $(OFILES) $(OGLOB) pattern.o $(LIBS) -o opt2

test:   opt testopt
	testopt

cmp :	all
	-cmp opt $(EMHOME)/lib/em_opt
	-cmp opt2 $(EMHOME)/lib/em_opt2
	-cmp em_opt.6 $(EMHOME)/man/em_opt.6

install:all
	-size opt $(EMHOME)/lib/em_opt
	rm -f $(EMHOME)/lib/em_opt
	cp opt $(EMHOME)/lib/em_opt
	-size opt2 $(EMHOME)/lib/em_opt2
	rm -f $(EMHOME)/lib/em_opt2
	cp opt2 $(EMHOME)/lib/em_opt2
	rm -f $(EMHOME)/man/em_opt.6
	cp em_opt.6 $(EMHOME)/man/em_opt.6

pattern.c:      patterns mktab
	$(EMHOME)/lib/cpp patterns | mktab > pattern.c

mktab:  mktab.o $(LIBS)
	$(CC) $(CFLAGS) mktab.o $(LIBS) $(LEXLIB) -o mktab

mktab.o:	scan.c optim.h param.h pattern.h types.h

depend: pattern.c
	sed '/^#AUTOAUTO/,$$d' Makefile >Makefile.new
	echo '#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO' >> Makefile.new
	cp reg.c regglob.c
	cp reg.c regnoglob.c
	mkdep $(CFILES) pattern.c regglob.c regnoglob.c | sed 's/\.c:/.o:/' >> Makefile.new
	rm -f regglob.c regnoglob.c
	mv Makefile Makefile.old
	mv Makefile.new Makefile

lint:   $(CFILES) pattern.c
	$(LINT) $(CFILES) pattern.c>lint 2>&1

printall:
	-pr $(PROPTS) Makefile -n *.h `ls $(CFILES)` mktab.y scan.l patterns|$(OPR)
	touch print

print:  Makefile *.h $(CFILES) mktab.y scan.l patterns
	-pr $(PROPTS) -n $? | $(OPR)
	touch print

opr:
	make pr | $(OPR)

pr:
	@pr $(PROPTS) -n Makefile *.h $(CFILES) mktab.y scan.l patterns

clean:
	rm -f *.o opt mktab mktab.c scan.c pattern.c opt2 Out

regnoglob.o:	reg.c
		$(CC) $(CFLAGS) -c -o regnoglob.o reg.c

regglob.o:	reg.c
		$(CC) $(CFLAGS) -c -DGLOBAL_OPT -o regglob.o reg.c

# the next lines are generated automatically
#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO
main.o: alloc.h
main.o: ext.h
main.o: param.h
main.o: types.h
getline.o: alloc.h
getline.o: ext.h
getline.o: line.h
getline.o: lookup.h
getline.o: param.h
getline.o: proinf.h
getline.o: types.h
lookup.o: alloc.h
lookup.o: lookup.h
lookup.o: param.h
lookup.o: proinf.h
lookup.o: types.h
var.o: lookup.h
var.o: param.h
var.o: proinf.h
var.o: types.h
process.o: alloc.h
process.o: assert.h
process.o: ext.h
process.o: line.h
process.o: lookup.h
process.o: param.h
process.o: proinf.h
process.o: types.h
backward.o: alloc.h
backward.o: assert.h
backward.o: ext.h
backward.o: line.h
backward.o: lookup.h
backward.o: param.h
backward.o: proinf.h
backward.o: types.h
util.o: assert.h
util.o: ext.h
util.o: lookup.h
util.o: optim.h
util.o: param.h
util.o: proinf.h
util.o: types.h
alloc.o: alloc.h
alloc.o: assert.h
alloc.o: line.h
alloc.o: lookup.h
alloc.o: param.h
alloc.o: proinf.h
alloc.o: types.h
putline.o: alloc.h
putline.o: assert.h
putline.o: ext.h
putline.o: line.h
putline.o: lookup.h
putline.o: optim.h
putline.o: param.h
putline.o: proinf.h
putline.o: types.h
cleanup.o: assert.h
cleanup.o: ext.h
cleanup.o: lookup.h
cleanup.o: param.h
cleanup.o: types.h
peephole.o: alloc.h
peephole.o: assert.h
peephole.o: ext.h
peephole.o: line.h
peephole.o: lookup.h
peephole.o: optim.h
peephole.o: param.h
peephole.o: pattern.h
peephole.o: proinf.h
peephole.o: types.h
flow.o: alloc.h
flow.o: ext.h
flow.o: line.h
flow.o: optim.h
flow.o: param.h
flow.o: proinf.h
flow.o: types.h
reg.o: alloc.h
reg.o: assert.h
reg.o: ext.h
reg.o: line.h
reg.o: param.h
reg.o: proinf.h
reg.o: types.h
pattern.o: param.h
pattern.o: pattern.h
pattern.o: types.h
regglob.o: alloc.h
regglob.o: assert.h
regglob.o: ext.h
regglob.o: line.h
regglob.o: param.h
regglob.o: proinf.h
regglob.o: types.h
regnoglob.o: alloc.h
regnoglob.o: assert.h
regnoglob.o: ext.h
regnoglob.o: line.h
regnoglob.o: param.h
regnoglob.o: proinf.h
regnoglob.o: types.h
