# SMUG (TinyMUD 2.4.0) makefile 
.AUTODEPEND
BCCROOT = $(MAKEDIR)\..
CC = $(BCCROOT)\bin\bcc32
LD = $(BCCROOT)\bin\ilink32
AR = $(BCCROOT)\bin\tlib
YACC = yacc
YFLAGS= -v
WINZIP = C:\apps\Winzip\wzzip

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

# Compiler directives for debugging
!ifdef DEBUG
DEBUG_CFLAGS = -v -y -Od -r- 
DEBUG_LFLAGS = -v 
!else
DEBUG_CFLAGS = -v- -O2 -$(PROCESSOR_LEVEL) 
DEBUG_LFLAGS = -v- 
!endif
INCDIRS = -I$(BCCROOT)\include

# Compiler/linker directives for linking static or dynamic
!ifdef STATIC
STATIC_CFLAGS =
LIBS      = import32.lib cw32mt.lib ws2_32.lib
!else
STATIC_CFLAGS = -tWR
LIBS      = import32.lib cw32mti.lib ws2_32.lib
!endif
BCC32STARTUP = c0x32.obj

MSGS= -w -w-pia -w-par -w-sig -w-use -w-pin
DEFS= -DNOISY_GC -DLOG_COMMANDS -DDUMP_CORE -DWIN32 -DWIN32_LEAN_AND_MEAN -D_NO_VCL 
CFLAGS= $(STATIC_CFLAGS) $(DEBUG_CFLAGS) -tWM -tWC $(MSGS) $(DEFS)
LFLAGS = -Tpe -ap -c -Gn $(DEBUG_LFLAGS) 

HDR = alist.h  bytecode.h  config.h  db.h  externs.h  globals.h  interface.h \
    os.h  set.h

XTRA = language.pdf language.tex language.txt reserved.txt caveats.txt \
    INSTALL_NOTES COPYING TODO load.sh load.cmd init.db loadup.txt tiny.m4 \
    Makefile makefile.bor makefile.vc 

# Files needed to run the database 
DBSRC = db.c alist.c set.c utils.c vars.c predicates.c os.c
DBOBJ = $(DBSRC:.c=.obj)

# Files needed to run the interpreter
INTERSRC = move.c tell.c create.c syscall.c encrypt.c bytecode.c \
        compiler.y match.c delay.c 
INTEROBJ = move.obj tell.obj create.obj syscall.obj encrypt.obj \
        bytecode.obj compiler.obj match.obj delay.obj 
        
# Files needed to run the parser
PARSESRC = command.c
PARSEOBJ = $(PARSESRC:.c=.obj)

# Files needed to run the game (everything except the driver)
GAMESRC = game.c
GAMEOBJ = $(GAMESRC:.c=.obj)

# Files needed to run the network version
NETSRC = netdriver.c 
NETOBJ = $(NETSRC:.c=.obj)

# Files needed to run the tty version
TTYSRC = ttydriver.c 
TTYOBJ = $(TTYSRC:.c=.obj)

# Files needed for the loader utility
LDRSRC = loader.c 
LDROBJ = $(LDRSRC:.c=.obj)

# Files needed for the massager utility
MSRC = massager.c 
MOBJ = $(MSRC:.c=.obj)

# Files needed for the runtest program
RTSRC = runtest.c 
RTOBJ = $(RTSRC:.c=.obj)

# Files needed for the comptest program
CTSRC = comptest.c 
CTOBJ = $(CTSRC:.c=.obj)

OUTFILES= y.tab.h test.db y.output compiler.c

# Files in the standard distribution
DISTFILES = $(HDR) $(XTRA) $(DBSRC) $(INTERSRC) $(PARSESRC) $(GAMESRC) \
         $(NETSRC) $(TTYSRC) $(LDRSRC) $(MSRC) $(RTSRC) $(CTSRC)
!ifndef RELEASE
RELEASE = dist
!endif

# Dependency information
OBJDEPENDS = $(DBOBJ) $(INTEROBJ) $(PARSEOBJ) $(GAMEOBJ) $(NETOBJ) \
         $(TTYOBJ) $(LDROBJ) $(MOBJ) $(RTOBJ) $(CTOBJ)

TARGETS = netmud$(EXE) ttymud$(EXE) loader$(EXE) test.db \
       massager$(EXE) runtest$(EXE) comptest$(EXE)

all: $(TARGETS)

netmud$(EXE) : $(NETOBJ) $(GAMEOBJ) $(DBOBJ) $(INTEROBJ) $(PARSEOBJ)
	$(LD) $(LFLAGS) $(BCC32STARTUP) $**, $<,, $(LIBS) 

ttymud$(EXE) : $(TTYOBJ) $(GAMEOBJ) $(DBOBJ) $(INTEROBJ) $(PARSEOBJ)
	$(LD) $(LFLAGS) $(BCC32STARTUP) $**, $<,, $(LIBS) 

loader$(EXE) : $(LDROBJ) $(DBOBJ) $(INTEROBJ) $(PARSEOBJ)
	$(LD) $(LFLAGS) $(BCC32STARTUP) $**, $<,, $(LIBS) 

# builds the test database
test.db: init.db loadup.txt tiny.m4 loader$(EXE)
	load.cmd init.db test.db < loadup.txt

# build parser
compiler.c y.tab.h : compiler.y 
	$(YACC) $(YFLAGS) compiler.y
	move y.tab.c compiler.c

# utilities and test programs
massager$(EXE) : $(MOBJ)
	$(LD) $(LFLAGS) $(BCC32STARTUP) $**, $<,, $(LIBS) 

runtest$(EXE) : $(RTOBJ) $(DBOBJ) $(INTEROBJ) $(PARSEOBJ) 
	$(LD) $(LFLAGS) $(BCC32STARTUP) $**, $<,, $(LIBS) 

comptest$(EXE) : $(CTOBJ) compiler.obj $(DBOBJ)
	$(LD) $(LFLAGS) $(BCC32STARTUP) $**, $<,, $(LIBS) 

clean :
	@echo "Cleaning..."
	@-del *.tds *.map *.TR2 $(OUTFILES) $(TARGETS) $(OBJDEPENDS) 2>NUL
	@echo "Done."

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

.c.obj:
	$(CC) $(CFLAGS) $(INCDIRS) -c -n$(@D) $<