##	Makefile for the MPD compiler, mpd.



CFLAGS = -g
SHELL = /bin/sh

YACC = yacc
YFLAGS =

## to get y.output from Yacc use:
# YFLAGS = -v
## to enable Yacc debugging use:
# CFLAGS = -g -DYYDEBUG



# source files built from other files:
BUILT = tokens.c tokens.h tkflags.h grammar.c print.h 

# object files:
#    the separation into parts is for use with Saber C
#    the ordering is intended to help with parallel make (start yacc early)

MAIN = 	main.o
GEN =	grammar.o tokens.o
UTIL = 	../util.o

SUBR =	alloc.o attest.o dynamic.o errors.o fold.o \
	gdecl.o gexpr.o ginput.o gloop.o gmisc.o gparam.o gstmt.o \
	import.o input.o list.o names.o node.o \
	op.o output.o params.o pregen.o presig.o print.o \
	resource.o signat.o symtab.o

OBJ =	$(MAIN) $(GEN) $(UTIL) $(SUBR)

SABER = $(MAIN:o=c) $(GEN) $(SUBR:o=c) $(UTIL:o=c)

# important files to save
SAVE =	[A-HJ-Z]* *.awk *.[chly] *.sh *.sed



mpd:$&	$(OBJ) $(UTIL)
	. ../paths.sh; $(CC) $(CFLAGS) -o mpd $(OBJ) $$LIBM $$LIBC

tokens.c: tokens.l
	lex tokens.l
	mv lex.yy.c tokens.c

grammar.c tokens.h: grammar.y
	@echo ...expect one shift/reduce conflict:
	$(YACC) $(YFLAGS) -d grammar.y 
	mv y.tab.c grammar.c
	mv y.tab.h tokens.h

tkflags.h: grammar.y
	echo '/*  Created mechanically;  DO NOT EDIT THIS FILE  */' >tkflags.h
	echo '' >>tkflags.h
	awk '/^%t[^*]*\*[BEG + END]*\*/{printf("TKFLAGS(%s,%s)\n",$$2,$$4);}' \
	    <grammar.y >>tkflags.h

print.h: includer.c enums.h structs.h compiler.h operators.h elabels.awk
	$(CC) $(CFLAGS) -E includer.c \
	    | sed 's/,/ ,/' | awk -f elabels.awk >print.h

# for building and debugging using CodeCenter (nee Saber C)
saber codecenter:  $(SABER) $(BUILT)
	# delete 1
	# load $(SABER) /usr/ccs/lib/libl.a -lm -lc
	# link
	# stop in kboom
upr:
	# userprint psym Symptr
	# userprint pnode Nodeptr
	# userprint pvar Varptr
	# userprint psig Sigptr


# various types of cleanup

clean:
	rm -rf *.o $(BUILT)
	rm -rf MPDinter y.output y.tab.[ch] lex.yy.c core TAGS Makefile.bak x?

cleanx:	clean
	rm -f mpd


# source file dependencies

depend:	$(BUILT)
	sh ../depend.sh



# check for identical sets of tokens in grammar and scanner
# if they differ, there's something defined but unused
tkcheck:
	sed -n 's/.*\(TK_[A-Za-z0-9_]*\).*/\1/p' tokens.l | sort | uniq >x1
	sed -n 's/.*\(TK_[A-Za-z0-9_]*\).*/\1/p' grammar.y | sort | uniq >x2
	diff x1 x2

lint: 	$(BUILT)
	-lint *.c ../util.c >lint.raw
	sed -f ../lint.sed <lint.raw >lint.out

tar:
	@tar cBf - $(SAVE)

bundle:
	@bundle $(SAVE)


tags:
	/usr/local/gnuemacs/etc/etags *.c
TAGS:
	ctags *.c




################################################################################
# The rest of this file is generated by `make depend'.  Don't change it by hand.
################################################################################

# >>DO NOT DELETE THIS LINE<< #
#   "make depend" was last run:  Tue Jan 2 14:50:43 MST 2001
alloc.o: alloc.c
alloc.o: compiler.h
alloc.o: ../gen.h
alloc.o: ../mpdmulti.h
alloc.o: ../mpd.h
alloc.o: ../util.h
alloc.o: ../config.h
alloc.o: enums.h
alloc.o: predefs.h
alloc.o: ../runerr.h
alloc.o: structs.h
alloc.o: operators.h
alloc.o: globals.h
alloc.o: protos.h
attest.o: attest.c
attest.o: compiler.h
attest.o: ../gen.h
attest.o: ../mpdmulti.h
attest.o: ../mpd.h
attest.o: ../util.h
attest.o: ../config.h
attest.o: enums.h
attest.o: predefs.h
attest.o: ../runerr.h
attest.o: structs.h
attest.o: operators.h
attest.o: globals.h
attest.o: protos.h
dynamic.o: dynamic.c
dynamic.o: compiler.h
dynamic.o: ../gen.h
dynamic.o: ../mpdmulti.h
dynamic.o: ../mpd.h
dynamic.o: ../util.h
dynamic.o: ../config.h
dynamic.o: enums.h
dynamic.o: predefs.h
dynamic.o: ../runerr.h
dynamic.o: structs.h
dynamic.o: operators.h
dynamic.o: globals.h
dynamic.o: protos.h
errors.o: errors.c
errors.o: compiler.h
errors.o: ../gen.h
errors.o: ../mpdmulti.h
errors.o: ../mpd.h
errors.o: ../util.h
errors.o: ../config.h
errors.o: enums.h
errors.o: predefs.h
errors.o: ../runerr.h
errors.o: structs.h
errors.o: operators.h
errors.o: globals.h
errors.o: protos.h
errors.o: tokens.h
fold.o: fold.c
fold.o: compiler.h
fold.o: ../gen.h
fold.o: ../mpdmulti.h
fold.o: ../mpd.h
fold.o: ../util.h
fold.o: ../config.h
fold.o: enums.h
fold.o: predefs.h
fold.o: ../runerr.h
fold.o: structs.h
fold.o: operators.h
fold.o: globals.h
fold.o: protos.h
gdecl.o: gdecl.c
gdecl.o: compiler.h
gdecl.o: ../gen.h
gdecl.o: ../mpdmulti.h
gdecl.o: ../mpd.h
gdecl.o: ../util.h
gdecl.o: ../config.h
gdecl.o: enums.h
gdecl.o: predefs.h
gdecl.o: ../runerr.h
gdecl.o: structs.h
gdecl.o: operators.h
gdecl.o: globals.h
gdecl.o: protos.h
gexpr.o: gexpr.c
gexpr.o: compiler.h
gexpr.o: ../gen.h
gexpr.o: ../mpdmulti.h
gexpr.o: ../mpd.h
gexpr.o: ../util.h
gexpr.o: ../config.h
gexpr.o: enums.h
gexpr.o: predefs.h
gexpr.o: ../runerr.h
gexpr.o: structs.h
gexpr.o: operators.h
gexpr.o: globals.h
gexpr.o: protos.h
gexpr.o: ../arch.h
ginput.o: ginput.c
ginput.o: compiler.h
ginput.o: ../gen.h
ginput.o: ../mpdmulti.h
ginput.o: ../mpd.h
ginput.o: ../util.h
ginput.o: ../config.h
ginput.o: enums.h
ginput.o: predefs.h
ginput.o: ../runerr.h
ginput.o: structs.h
ginput.o: operators.h
ginput.o: globals.h
ginput.o: protos.h
gloop.o: gloop.c
gloop.o: compiler.h
gloop.o: ../gen.h
gloop.o: ../mpdmulti.h
gloop.o: ../mpd.h
gloop.o: ../util.h
gloop.o: ../config.h
gloop.o: enums.h
gloop.o: predefs.h
gloop.o: ../runerr.h
gloop.o: structs.h
gloop.o: operators.h
gloop.o: globals.h
gloop.o: protos.h
gmisc.o: gmisc.c
gmisc.o: compiler.h
gmisc.o: ../gen.h
gmisc.o: ../mpdmulti.h
gmisc.o: ../mpd.h
gmisc.o: ../util.h
gmisc.o: ../config.h
gmisc.o: enums.h
gmisc.o: predefs.h
gmisc.o: ../runerr.h
gmisc.o: structs.h
gmisc.o: operators.h
gmisc.o: globals.h
gmisc.o: protos.h
gparam.o: gparam.c
gparam.o: compiler.h
gparam.o: ../gen.h
gparam.o: ../mpdmulti.h
gparam.o: ../mpd.h
gparam.o: ../util.h
gparam.o: ../config.h
gparam.o: enums.h
gparam.o: predefs.h
gparam.o: ../runerr.h
gparam.o: structs.h
gparam.o: operators.h
gparam.o: globals.h
gparam.o: protos.h
grammar.o: grammar.c
grammar.o: compiler.h
grammar.o: ../gen.h
grammar.o: ../mpdmulti.h
grammar.o: ../mpd.h
grammar.o: ../util.h
grammar.o: ../config.h
grammar.o: enums.h
grammar.o: predefs.h
grammar.o: ../runerr.h
grammar.o: structs.h
grammar.o: operators.h
grammar.o: globals.h
grammar.o: protos.h
gstmt.o: gstmt.c
gstmt.o: compiler.h
gstmt.o: ../gen.h
gstmt.o: ../mpdmulti.h
gstmt.o: ../mpd.h
gstmt.o: ../util.h
gstmt.o: ../config.h
gstmt.o: enums.h
gstmt.o: predefs.h
gstmt.o: ../runerr.h
gstmt.o: structs.h
gstmt.o: operators.h
gstmt.o: globals.h
gstmt.o: protos.h
import.o: import.c
import.o: compiler.h
import.o: ../gen.h
import.o: ../mpdmulti.h
import.o: ../mpd.h
import.o: ../util.h
import.o: ../config.h
import.o: enums.h
import.o: predefs.h
import.o: ../runerr.h
import.o: structs.h
import.o: operators.h
import.o: globals.h
import.o: protos.h
includer.o: includer.c
includer.o: compiler.h
includer.o: ../gen.h
includer.o: ../mpdmulti.h
includer.o: ../mpd.h
includer.o: ../util.h
includer.o: ../config.h
includer.o: enums.h
includer.o: predefs.h
includer.o: ../runerr.h
includer.o: structs.h
includer.o: operators.h
includer.o: globals.h
includer.o: protos.h
input.o: input.c
input.o: compiler.h
input.o: ../gen.h
input.o: ../mpdmulti.h
input.o: ../mpd.h
input.o: ../util.h
input.o: ../config.h
input.o: enums.h
input.o: predefs.h
input.o: ../runerr.h
input.o: structs.h
input.o: operators.h
input.o: globals.h
input.o: protos.h
input.o: tokens.h
input.o: tkflags.h
list.o: list.c
list.o: compiler.h
list.o: ../gen.h
list.o: ../mpdmulti.h
list.o: ../mpd.h
list.o: ../util.h
list.o: ../config.h
list.o: enums.h
list.o: predefs.h
list.o: ../runerr.h
list.o: structs.h
list.o: operators.h
list.o: globals.h
list.o: protos.h
main.o: main.c
main.o: compiler.h
main.o: ../gen.h
main.o: ../mpdmulti.h
main.o: ../mpd.h
main.o: ../util.h
main.o: ../config.h
main.o: enums.h
main.o: predefs.h
main.o: ../runerr.h
main.o: structs.h
main.o: operators.h
main.o: globals.h
main.o: protos.h
main.o: ../paths.h
main.o: ../arch.h
main.o: globals.h
names.o: names.c
names.o: compiler.h
names.o: ../gen.h
names.o: ../mpdmulti.h
names.o: ../mpd.h
names.o: ../util.h
names.o: ../config.h
names.o: enums.h
names.o: predefs.h
names.o: ../runerr.h
names.o: structs.h
names.o: operators.h
names.o: globals.h
names.o: protos.h
node.o: node.c
node.o: compiler.h
node.o: ../gen.h
node.o: ../mpdmulti.h
node.o: ../mpd.h
node.o: ../util.h
node.o: ../config.h
node.o: enums.h
node.o: predefs.h
node.o: ../runerr.h
node.o: structs.h
node.o: operators.h
node.o: globals.h
node.o: protos.h
node.o: operators.h
op.o: op.c
op.o: compiler.h
op.o: ../gen.h
op.o: ../mpdmulti.h
op.o: ../mpd.h
op.o: ../util.h
op.o: ../config.h
op.o: enums.h
op.o: predefs.h
op.o: ../runerr.h
op.o: structs.h
op.o: operators.h
op.o: globals.h
op.o: protos.h
output.o: output.c
output.o: compiler.h
output.o: ../gen.h
output.o: ../mpdmulti.h
output.o: ../mpd.h
output.o: ../util.h
output.o: ../config.h
output.o: enums.h
output.o: predefs.h
output.o: ../runerr.h
output.o: structs.h
output.o: operators.h
output.o: globals.h
output.o: protos.h
params.o: params.c
params.o: compiler.h
params.o: ../gen.h
params.o: ../mpdmulti.h
params.o: ../mpd.h
params.o: ../util.h
params.o: ../config.h
params.o: enums.h
params.o: predefs.h
params.o: ../runerr.h
params.o: structs.h
params.o: operators.h
params.o: globals.h
params.o: protos.h
pregen.o: pregen.c
pregen.o: compiler.h
pregen.o: ../gen.h
pregen.o: ../mpdmulti.h
pregen.o: ../mpd.h
pregen.o: ../util.h
pregen.o: ../config.h
pregen.o: enums.h
pregen.o: predefs.h
pregen.o: ../runerr.h
pregen.o: structs.h
pregen.o: operators.h
pregen.o: globals.h
pregen.o: protos.h
presig.o: presig.c
presig.o: compiler.h
presig.o: ../gen.h
presig.o: ../mpdmulti.h
presig.o: ../mpd.h
presig.o: ../util.h
presig.o: ../config.h
presig.o: enums.h
presig.o: predefs.h
presig.o: ../runerr.h
presig.o: structs.h
presig.o: operators.h
presig.o: globals.h
presig.o: protos.h
presig.o: predefs.h
print.o: print.c
print.o: compiler.h
print.o: ../gen.h
print.o: ../mpdmulti.h
print.o: ../mpd.h
print.o: ../util.h
print.o: ../config.h
print.o: enums.h
print.o: predefs.h
print.o: ../runerr.h
print.o: structs.h
print.o: operators.h
print.o: globals.h
print.o: protos.h
print.o: print.h
resource.o: resource.c
resource.o: compiler.h
resource.o: ../gen.h
resource.o: ../mpdmulti.h
resource.o: ../mpd.h
resource.o: ../util.h
resource.o: ../config.h
resource.o: enums.h
resource.o: predefs.h
resource.o: ../runerr.h
resource.o: structs.h
resource.o: operators.h
resource.o: globals.h
resource.o: protos.h
resource.o: ../paths.h
signat.o: signat.c
signat.o: compiler.h
signat.o: ../gen.h
signat.o: ../mpdmulti.h
signat.o: ../mpd.h
signat.o: ../util.h
signat.o: ../config.h
signat.o: enums.h
signat.o: predefs.h
signat.o: ../runerr.h
signat.o: structs.h
signat.o: operators.h
signat.o: globals.h
signat.o: protos.h
symtab.o: symtab.c
symtab.o: compiler.h
symtab.o: ../gen.h
symtab.o: ../mpdmulti.h
symtab.o: ../mpd.h
symtab.o: ../util.h
symtab.o: ../config.h
symtab.o: enums.h
symtab.o: predefs.h
symtab.o: ../runerr.h
symtab.o: structs.h
symtab.o: operators.h
symtab.o: globals.h
symtab.o: protos.h
symtab.o: predefs.h
tokens.o: tokens.c
tokens.o: compiler.h
tokens.o: ../gen.h
tokens.o: ../mpdmulti.h
tokens.o: ../mpd.h
tokens.o: ../util.h
tokens.o: ../config.h
tokens.o: enums.h
tokens.o: predefs.h
tokens.o: ../runerr.h
tokens.o: structs.h
tokens.o: operators.h
tokens.o: globals.h
tokens.o: protos.h
tokens.o: tokens.h
