#
# Murk++ build for visual c++
#
CPP = cl
CC = cl
AR = link
LD = cl
WINZIP = C:\apps\Winzip\wzzip

# Compiler directives for debugging
!ifdef DEBUG
DEBUG_CFLAGS = /MTd /ZI /Od /EHsc /DDEBUG 
DEBUG_LFLAGS = /DEBUG /PDBTYPE:SEPT 
LIBS= libcmtd.lib kernel32.lib ws2_32.lib libcpmtd.lib
!else
DEBUG_CFLAGS = /MT /Ot /Oy /Ob2 /Gs /GF /Gy /EHsc /DNDEBUG   
DEBUG_LFLAGS = 
LIBS= libcmt.lib kernel32.lib ws2_32.lib libcpmt.lib
!endif

DEFS= -DWIN32 -DWIN32_LEAN_AND_MEAN -D_CONSOLE -D_MBCS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_USE_32BIT_TIME_T -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_RTREE 
OPTIM= /nologo /W1 $(DEBUG_CFLAGS) 

CFLAGS= $(OPTIM) $(DEFS)
LFLAGS = /link /NOLOGO /NODEFAULTLIB /SUBSYSTEM:CONSOLE $(DEBUG_LFLAGS) 

INCS = /Isqlite3

SQLITE_SRC = sqlite3\sqlite3.c
SQLITE_OBJ = $(SQLITE_SRC:.c=.obj)
SQLITE_LIB = sqlite3\sqlite3.lib

SQLITE_PRG_SRC = sqlite3\shell.c 
SQLITE_PRG_OBJ = $(SQLITE_PRG_SRC:.c=.obj)
SQLITE_PRG = sqlite3\sqlite3.exe 

SQLITE_XTRA = sqlite3\sqlite3.h sqlite3\sqlite3ext.h \
	sqlite3\libsqlite3.vcxproj sqlite3\sqlite3.vcxproj \
	sqlite3\libsqlite3.cbproj sqlite3\sqlite3.cbproj

MURK_UTIL_SRC = loadhelps.cpp
MURK_UTIL_OBJ = $(MURK_UTIL_SRC:.cpp=.obj)
MURK_SRC = murk.cpp os.cpp descriptor.cpp utils.cpp commands.cpp io.cpp \
	room.cpp object.cpp character.cpp spells.cpp objproto.cpp mobproto.cpp \
	affect.cpp exit.cpp area.cpp reset.cpp extra.cpp shop.cpp pcdata.cpp \
	symbols.cpp database.cpp world.cpp
MURK_OBJ = $(MURK_SRC:.cpp=.obj)
MURK_HDR = os.hpp config.hpp descriptor.hpp character.hpp pcdata.hpp utils.hpp \
	globals.hpp object.hpp note.hpp room.hpp area.hpp mobproto.hpp \
	objproto.hpp affect.hpp exit.hpp extra.hpp ban.hpp shop.hpp reset.hpp \
	io.hpp symbols.hpp database.hpp spell_list.hpp cmd_list.hpp \
	baseobject.hpp world.hpp

# Data files Areas, Mobprogs and Players
DATAFILES = area.lst limbo.are mid_cit.prg midgaard.are school.are help.are \
        vagabond.prg beggar.prg crier.prg drunk.prg gategrd.prg gategrd2.prg \
	janitor.prg One schema item_types socials titles

# Files in the standard distribution
DISTFILES = $(MURK_SRC) $(MURK_UTIL_SRC) $(MURK_HDR) $(DATAFILES) \
	$(SQLITE_SRC) $(SQLITE_PRG_SRC) $(SQLITE_XTRA) \
	makefile makefile.bor makefile.vc makefile.dgm makefile.vc15 \
	doc.txt startup startup.bash startup.cmd \
	license.crypt license.diku license.merc license.murk++ \
	loadhelps.vcxproj murk.vcxproj murk++.sln \
	loadhelps.cbproj murk.cbproj murk++.groupproj
  
!ifndef RELEASE
RELEASE=dist
!endif

TARGETS = $(SQLITE_LIB) $(SQLITE_PRG) murk.exe loadhelps.exe

all: $(TARGETS)

$(SQLITE_LIB): $(SQLITE_OBJ)
	$(AR) /LIB -OUT:$@ $**

$(SQLITE_PRG): $(SQLITE_PRG_OBJ) $(SQLITE_LIB)
	$(AR) -OUT:$@ $**

murk.exe: $(MURK_OBJ) $(SQLITE_LIB)
	@-del murkold.exe 
	@-ren murk.exe murkold.exe 
	$(LD) $** $(LIBS) /Fe$@ $(LFLAGS)

loadhelps.exe: $(MURK_UTIL_OBJ) io.obj $(SQLITE_LIB) 
	$(LD) $** $(LIBS) /Fe$@ $(LFLAGS)

database: $(SQLITE_PRG) loadhelps.exe
	@echo "Building database..."
	@-copy murk.db murk.db.bkup
	@-del murk.db
	@sqlite3\sqlite3 murk.db < schema
	@loadhelps
	@echo "Done."

clean:
	@-del *.pdb *.ilk *.idb murk.exe loadhelps.exe $(MURK_OBJ) \
	$(MURK_UTIL_OBJ) 2>NUL

cleanall:
	@-del *.pdb *.ilk *.idb $(TARGETS) $(MURK_OBJ) $(SQLITE_OBJ) \
	$(SQLITE_PRG_OBJ) $(MURK_UTIL_OBJ) 2>NUL

dist : $(DISTFILES)
	@echo "Building distribution..."
	@-md murk++
	@!copy /y "$**" "murk++" 1>NUL
	@echo .svn > ex.tmp
        @xcopy sqlite3 "murk++\sqlite3" /I /E /Y /Q /EXCLUDE:ex.tmp 
        @del ex.tmp
	@$(WINZIP) -Pr murk++-$(RELEASE).zip murk++ 1>NUL 2>NUL
	@rd /s /q murk++
	@echo "Done."

.c.obj:
	$(CC) $(CFLAGS) $(INCS) /Fo$@ /c $<


.cpp.obj:
	$(CC) $(CFLAGS) $(INCS) /Fo$@ /c $<