#
# Makefile for Interlude
# this should compile out of the box on AIX, SUN, Ultrix with correct
# g++ libraries.
#
# Linux users need to add -DLINUX to CCoptions and -ldbm to LIBS

cc = gcc
CC = g++
CCoptions = -g -fenum-int-equiv
LEX = flex

LIBS = -lm -L/usr/local/lib -lg++

inter:	main.o List.o value.o sockets.o Structures.o storage.o Object.o command.o Method.o parser.o lex.yy.o tokentable.o Process.o Scheduler.o Subrange.o User.o
	$(CC) $(CCoptions) List.o sockets.o Structures.o value.o tokentable.o Object.o command.o Method.o storage.o parser.o Process.o Scheduler.o lex.yy.o User.o Subrange.o main.o ${LIBS} -o inter

#
# textdb is a little utility to allow you to convert a binary DB to a text
# file so it can be edited by hand, etc.
#
textdb:	maindump.o List.o value.o sockets.o command.o Structures.o storage.o Object.o Method.o parser.o lex.yy.o tokentable.o Process.o Scheduler.o Subrange.o User.o
	$(CC) $(CCoptions) List.o sockets.o Structures.o command.o value.o tokentable.o Object.o Method.o storage.o parser.o Process.o Scheduler.o lex.yy.o User.o Subrange.o maindump.o ${LIBS} -o textdb

main.o:	main.C main.h Scheduler.h
	$(CC) $(CCoptions) main.C -c

maindump.o: maindump.C main.h
	$(CC) $(CCoptions) maindump.C -c

List.o:	List.C List.h value.h
	$(CC) $(CCoptions) List.C -c

value.o:	value.C value.h List.h tokentable.o Structures.h
	$(CC) $(CCoptions) value.C -c

Subrange.o:	Subrange.C Subrange.h value.h
	$(CC) $(CCoptions) Subrange.C -c

sockets.o:  sockets.C sockets.h
	$(CC) $(CCoptions) sockets.C -c

Method.o:  value.o Method.h Method.C
	$(CC) $(CCoptions) Method.C -c

User.o:    value.o User.h User.C
	$(CC) $(CCoptions) User.C -c

storage.o:	storage.C storage.h Structures.h
	$(CC) $(CCoptions) storage.C -c

Object.o:	Object.C Object.h
	$(CC) $(CCoptions) Object.C -c

Structures.o:	Structures.C Structures.h value.h
	$(CC) $(CCoptions) Structures.C -c

command.o:	command.h command.C
	$(CC) $(CCoptions) command.C -c

lex.yy.c:  lexer.l tokentable.h
	$(LEX) lexer.l
lex.yy.o:  lex.yy.c
	$(CC) $(CCoptions) -c lex.yy.c

tokentable.o: tokentable.h tokentable.C
	$(CC) $(CCoptions) -c tokentable.C

parser.o: parser.h parser.C tokentable.h lex.yy.o tokentable.o
	$(CC) $(CCoptions) -c parser.C

Process.o:	Process.C Process.h value.h List.h Scheduler.h
	$(CC) $(CCoptions) -c Process.C

Scheduler.o:	Scheduler.C Scheduler.h Process.o
	$(CC) $(CCoptions) -c Scheduler.C

testlex:	lex.yy.o testlex.C Structures.o parser.o Method.o List.o
	$(CC) $(CCoptions) List.o Method.o value.o Structures.o lex.yy.o parser.o tokentable.o testlex.C -o testlex

db.txt:	db/0 db/1 db/2 db/3 db/4 db/5 db/6 db/7 db/8 db/9 db/10 db/11 db/12 db/13 db/14 db/15 db/16 db/17 db/18 db/19 db/20 db/21 db/22
	cat db/0 db/1 db/2 db/3 db/4 db/5 db/6 db/7 db/8 db/9 db/10 db/11 db/12 db/13 db/14 db/15 db/16 db/17 db/18 db/19 db/20 db/21 db/22 > db.txt

nuke:	clean
	-rm *.pag *.dir
	-rm inter textdb

clean:
	-rm *~
	-rm *.o
	-rm docs/*~ docs/#*#
	-rm lm4/*~ lm4/#*#
	-rm db/*~ db/#*#
	-rm core