#
# Whatever you put in for $(CC) must be able to grok ANSI C.
#
CC = dmc
LD = link
WINZIP = C:\apps\Winzip\wzzip
OPTIM = -o -6 
SYSDEFS = -DWIN32 -DWIN32_LEAN_AND_MEAN 

# The suffix appended to executables.  
# This should be set for Cygwin and Windows.
EXE = .exe
#EXE =

#
# To log failed commands (HUH's) to stderr, include -DLOG_FAILED_COMMANDS
# To restrict object-creating commands to users with the BUILDER bit,
#   include -DRESTRICTED_BUILDING
# To log all commands, include -DLOG_COMMANDS
# To force fork_and_dump() to use vfork() instead of fork(), include
#   -DUSE_VFORK.
# To force grow_database() to be clever about its memory management,
#   include -DDB_DOUBLING.  Use this only if your realloc does not allocate
#   in powers of 2 (if you already have a clever realloc, this option will
#   only cost you extra space).
# By default, db.c initially allocates enough space for 10000 objects, then
#   grows the space if needed.  To change this value, include
#   -DDB_INITIAL_SIZE=xxxx where xxxx is the new value (minimum 1).
# To include code for keeping track of the number of blocks allocated,
#   include -DTEST_MALLOC.
# To include code which attempts to compress string data, include -DCOMPRESS.
# To eliminate the message third parties see when a player whispers, include
#   -DQUIET_WHISPER.
# To include Stephen White's gender flags and pronoun substitution code,
#   include -DGENDER.
# To give set (!)WIZARD and extended WHO privs only to id #1,
#   include -DGOD_PRIV.  When this option is set, two other options
#   become meanigful
#       -DGOD_MODE              Restricts host names some commands to #1
#       -DGOD_ONLY_PCREATE      Restricts @pcreate to player #1
# To have logs and WHO use hostnames instead of addresses, include
#   -DHOST_NAME.
# To have messages for connect and disconnect, include -DCONNECT_MESSAGES.
# To use a hashed player list for player name lookups,
#   include -DPLAYER_LIST.
# To disable login-time creation of players, include -DREGISTRATION.
#    see GOD_ONLY_PCREATE above.
# To cause netmud to detach itself from the terminal on startup, include
#   -DDETACH.  The log file appears on LOG_FILE, set in config.h.
# To add the @count & @recycle command, include -DRECYCLE
# To disable core dump on errors, include -DNODUMPCORE
# To add the ROBOT flag (allowing robots to be excluded from some rooms
#   at each player's request), include -DROBOT_MODE
# To use Tinker instead of Wizard, Bobble instead of Toad, and
#    donate instead of sacrifice, include -DTINKER
# To prevent users from using confusing names
#   (currently A, An, The, You, Your, Going, Huh?), include -DNOFAKES
# To include code for marking all things with a timestamp/usecnt,
#   include -DTIMESTAMPS
#
# To Use Islandia values in config.h, include -DISLANDIA
# To Use TinyHELL values in config.h, include -DTINYHELL

#DEFS= $(SYSDEFS) -DGOD_PRIV -DCOMPRESS -DQUIET_WHISPER -DGENDER -DHOST_NAME \
#      -DCONNECT_MESSAGES -DPLAYER_LIST -DDETACH -DREGISTRATION \
#      -DGOD_ONLY_PCREATE -DROBOT_MODE -DRECYCLE -DNOFAKES \
#      -DTINYHELL

DEFS= $(SYSDEFS) -DGOD_PRIV -DCOMPRESS -DQUIET_WHISPER -DGENDER -DHOST_NAME \
	-DCONNECT_MESSAGES -DPLAYER_LIST -DROBOT_MODE \
	-DRECYCLE -DTINKER -DNOFAKES -DTIMESTAMPS


CFLAGS = $(OPTIM) $(DEFS) -w2 -w7
LFLAGS = 
LIBS= wsock32.lib

# Everything needed to use db.c
DBFILES= db.c compress.c player_list.c stringutil.c
# .obj versions of above
DBOFILES= db.obj compress.obj player_list.obj stringutil.obj

# Everything except interface.c --- allows for multiple interfaces
CFILES= create.c game.c help.c look.c match.c move.c player.c predicates.c \
	rob.c set.c speech.c utils.c wiz.c \
	boolexp.c unparse.c os.c $(DBFILES)

# .o versions of above
OFILES= create.obj game.obj help.obj look.obj match.obj move.obj player.obj \
	predicates.obj rob.obj set.obj speech.obj utils.obj wiz.obj \
	boolexp.obj unparse.obj os.obj $(DBOFILES)

# .dependency info for OFILES
OFILESDEPS = db.dep compress.dep player_list.dep stringutil.dep \
	create.dep game.dep help.dep look.dep match.dep move.dep player.dep \
	predicates.dep rob.dep set.dep speech.dep utils.dep wiz.dep  \
	interface.dep sanity-check.dep \
	extract.dep dump.dep decompress.dep os.dep	

# Files in the standard distribution
DISTFILES= $(CFILES) config.h db.h externs.h interface.h match.h \
	interface.c sanity-check.c extract.c dump.c decompress.c \
	help.txt small.db minimal.db restart-cmu do_gripes \
	restart-day restart-night tiny.docs tinymud.ps tinymud.tex \
	README small.db.README \
	CHANGES copyright.h announce.txt \
	Makefile Makefile.bor Makefile.dgm Makefile.vc Makefile.lcc \
	CHANGELOG os.h INSTALL_NOTES

RELEASE = dist

OUTFILES= netmud$(EXE) dump$(EXE) decompress$(EXE) sanity-check$(EXE) \
	extract$(EXE)

all: $(OUTFILES)

netmud$(EXE): interface.obj $(OFILES) 
	$(LD) $(LFLAGS) $**, $@,, $(LIBS)

dump$(EXE): dump.obj unparse.obj $(DBOFILES)
	$(LD) $(LFLAGS) $**, $@,, $(LIBS)

sanity-check$(EXE): sanity-check.obj utils.obj $(DBOFILES)
	$(LD) $(LFLAGS) $**, $@,, $(LIBS)

extract$(EXE): extract.obj utils.obj $(DBOFILES)
	$(LD) $(LFLAGS) $**, $@,, $(LIBS)

decompress$(EXE): decompress.obj compress.obj
	$(LD) $(LFLAGS) $**, $@,, $(LIBS)

clean:
	-@del *.obj *.dep *.map $(OUTFILES)

dist : $(DISTFILES)
	@echo "Building distribution..."
	@-md tinymud-1.5.4
	@&copy /y $** tinymud-1.5.4 1>NUL
	@$(WINZIP) -Pr tinymud-1.5.4-$(RELEASE).zip tinymud-1.5.4 1>NUL 2>NUL
	@rd /s /q tinymud-1.5.4
	@echo "Done."

# compile and generate dependency info;
db.obj : $(db.dep) db.c
	$(CC) -c -d $(CFLAGS) db 

compress.obj : $(compress.dep) compress.c
	$(CC) -c -d $(CFLAGS) compress 

player_list.obj : $(player_list.dep) player_list.c
	$(CC) -c -d $(CFLAGS) player_list 

stringutil.obj : $(stringutil.dep) stringutil.c
	$(CC) -c -d $(CFLAGS) stringutil 

create.obj : $(create.dep) create.c
	$(CC) -c -d $(CFLAGS) create 

game.obj : $(game.dep) game.c
	$(CC) -c -d $(CFLAGS) game 

help.obj : $(help.dep) help.c
	$(CC) -c -d $(CFLAGS) help 

look.obj : $(look.dep) look.c
	$(CC) -c -d $(CFLAGS) look 

match.obj : $(match.dep) match.c
	$(CC) -c -d $(CFLAGS) match 

move.obj : $(move.dep) move.c
	$(CC) -c -d $(CFLAGS) move 

player.obj : $(player.dep) player.c
	$(CC) -c -d $(CFLAGS) player 

predicates.obj : $(predicates.dep) predicates.c
	$(CC) -c -d $(CFLAGS) predicates 

rob.obj : $(rob.dep) rob.c
	$(CC) -c -d $(CFLAGS) rob 

set.obj : $(set.dep) set.c
	$(CC) -c -d $(CFLAGS) set 

speech.obj : $(speech.dep) speech.c
	$(CC) -c -d $(CFLAGS) speech 

utils.obj : $(utils.dep) utils.c
	$(CC) -c -d $(CFLAGS) utils 

wiz.obj : $(wiz.dep) wiz.c
	$(CC) -c -d $(CFLAGS) wiz 

boolexp.obj : $(boolexp.dep) boolexp.c
	$(CC) -c -d $(CFLAGS) boolexp 

unparse.obj : $(unparse.dep) unparse.c
	$(CC) -c -d $(CFLAGS) unparse 

interface.obj : $(interface.dep) interface.c
	$(CC) -c -d $(CFLAGS) interface 

dump.obj : $(dump.dep) dump.c
	$(CC) -c -d $(CFLAGS) dump 

sanity-check.obj : $(sanity-check.dep) sanity-check.c
	$(CC) -c -d $(CFLAGS) sanity-check 

extract.obj : $(extract.dep) extract.c
	$(CC) -c -d $(CFLAGS) extract 

decompress.obj : $(decompress.dep) decompress.c
	$(CC) -c -d $(CFLAGS) decompress 

os.obj : $(os.dep) os.c
	$(CC) -c -d $(CFLAGS) os