#
# Whatever you put in for $(CC) must be able to grok ANSI C.
#

# GCC:
#CC=gcc
#OPTIM= -pg -g -pipe -W -Wreturn-type -Wunused -Wcomment -Wwrite-strings

# IBM RT C compiler:
#CC=cc
#OPTIM=-g

# Dec 3100 C compiler
# Note: the version of this compiler I tried went mad in bits2alpha
#  in encrypt.c; hence USE_UNIX_CRYPT, which avoids the des stuff
CC=cc
OPTIM= -g -Dconst= -DUSE_UNIX_CRYPT

DEFS= -DDEBUG -DNOISY_GC -DYYDEBUG -DLOG_COMMANDS -DDUMP_CORE
CFLAGS= $(OPTIM) $(DEFS)

# Uncomment these lines to use bison instead of yacc
#YACC= /usr/misc/.gnu-comp/bin/bison
#YFLAGS= -y -v

# malloc test library, you almost certainly want to leave this commented out
#LIBS= -lmalloc

OUTFILES= runtest comptest y.tab.c TAGS loader test.db massager y.output \
	netmud ttymud load

# Files needed to run the database 
DBFILES= db.o alist.o set.o utils.o vars.o predicates.o 

# Files needed to run the interpreter
INTERPFILES= move.o tell.o create.o syscall.o encrypt.o \
	des.o bytecode.o compiler.o match.o delay.o $(DBFILES)

# Files needed to run the parser
PARSERFILES= $(INTERPFILES) command.o

# Files needed to run the game (everything except the driver)
GAMEFILES= $(PARSERFILES) game.o

all: netmud test.db TAGS

netmud: netdriver.o $(GAMEFILES)
	-rm -f netmud
	$(CC) $(CFLAGS) -o netmud netdriver.o $(GAMEFILES) $(LIBS)

ttymud: ttydriver.o $(GAMEFILES)
	-rm -f ttymud
	$(CC) $(CFLAGS) -o ttymud ttydriver.o $(GAMEFILES) $(LIBS)

loader: loader.o $(PARSERFILES)
	-rm -f loader
	$(CC) $(CFLAGS) -o loader loader.o $(PARSERFILES) $(LIBS)

test.db: init.db load loadup.txt tiny.m4
	load init.db test.db < loadup.txt

load: load.sh loader
	cp load.sh load
	chmod 755 load

#massager: massager.o
#	-rm -f massager
#	$(CC) $(CFLAGS) -o massager massager.o

runtest: runtest.o $(PARSERFILES)
	-rm -f runtest
	$(CC) $(CFLAGS) -o runtest runtest.o $(PARSERFILES) $(LIBS)

comptest: comptest.o compiler.o $(DBFILES)
	-rm -f comptest
	$(CC) $(CFLAGS) -o comptest comptest.o compiler.o $(DBFILES) $(LIBS)

TAGS: *.c *.y *.h
	etags *.c *.y *.h

clean:
	-rm -f *.o a.out core gmon.out $(OUTFILES)

# DO NOT REMOVE THIS LINE OR CHANGE ANYTHING AFTER IT #
alist.o: alist.c alist.h
bytecode.o: bytecode.c db.h bytecode.h set.h globals.h
command.o: command.c config.h db.h bytecode.h globals.h
compiler.o: compiler.y config.h bytecode.h
comptest.o: comptest.c globals.h db.h bytecode.h
create.o: create.c db.h globals.h
db.o: db.c db.h config.h
delay.o: delay.c db.h config.h globals.h
encrypt.o: encrypt.c db.h
game.o: game.c db.h config.h interface.h globals.h
loader.o: loader.c db.h config.h
massager.o: massager.c
match.o: match.c db.h config.h
move.o: move.c db.h globals.h
netdriver.o: netdriver.c db.h config.h interface.h
predicates.o: predicates.c db.h
runtest.o: runtest.c db.h globals.h bytecode.h
set.o: set.c set.h db.h
syscall.o: syscall.c db.h config.h globals.h interface.h
tell.o: tell.c db.h globals.h
ttydriver.o: ttydriver.c interface.h
utils.o: utils.c db.h
vars.o: vars.c db.h globals.h
alist.h: config.h
bytecode.h: config.h
config.h:
db.h: alist.h set.h
externs.h:
globals.h: db.h
interface.h: db.h config.h
set.h: alist.h