# Makefile for custom scripts

.SUFFIXES:
.SUFFIXES: .o .cpp .rc _osm.cpp _res.o

srcdir = .
LGDIR = ../lg
DHDIR = ../DH2

GAME = 2

# This Makefile is targetted for GCC in Cygwin/Mingw32 
# Possible command-line for Borland: -P -tWD -w-inl -w-par

CC = g++
AR = ar
LD = g++
DLLTOOL = dlltool
RC = windres
# GNU ar updates the symbols automatically.
# Set this if you need to do it yourself
RANLIB = echo

DEFINES = -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 -DWIN32_LEAN_AND_MEAN -D_DARKGAME=$(GAME)

ifdef DEBUG
D = -d
else
D =
endif

SCRLIB = libScript$(D).a

ARFLAGS = rc
LIBS = $(SCRLIB) -ldh2 -llg$(D) -lstdc++ -luuid
LDFLAGS = -mno-cygwin -mwindows -mdll -Wl,--enable-auto-image-base -L. -L$(DHDIR) -L$(LGDIR)
INCLUDEDIRS = -I. -I$(srcdir) -I$(DHDIR) -I$(LGDIR)
# If you care for this... # -Wno-unused-variable 
# A lot of the callbacks have unused parameters, so I turn that off.
CXXFLAGS =  -W -Wall -Wno-unused-parameter -Wno-pmf-conversions \
			$(INCLUDEDIRS) -mno-cygwin -masm=att \
			-fno-pcc-struct-return -mms-bitfields
DLLFLAGS = --add-underscore

ifdef DEBUG
CXXDEBUG = -g -DDEBUG 
LDDEBUG = -g
else
#CXXDEBUG = -O3 -march=pentium -DNDEBUG
CXXDEBUG = -O2 -DNDEBUG
LDDEBUG =
endif

SCRLIB_SRCS = ScriptLib/ScriptLib.cpp \
	ScriptLib/GlobalParamCache.cpp \
	ScriptLib/ParamCache.cpp \
	ScriptLib/AddMetaProperty.cpp \
	ScriptLib/AddSingleMetaProperty.cpp \
	ScriptLib/CalcTextTime.cpp \
	ScriptLib/CDSend.cpp \
	ScriptLib/DebugPrintf.cpp \
	ScriptLib/DeleteAllLinks.cpp \
	ScriptLib/DeleteAllLinksByData.cpp \
	ScriptLib/DisplayPrintf.cpp \
	ScriptLib/DisplayPrintfColour.cpp \
	ScriptLib/FixupPlayerLinks.cpp \
	ScriptLib/GetAnyLink.cpp \
	ScriptLib/GetAnyLinkByData.cpp \
	ScriptLib/GetAnyLinkByDataDest.cpp \
	ScriptLib/GetAnyLinkByDataInheritedSrc.cpp \
	ScriptLib/GetAnyLinkDest.cpp \
	ScriptLib/GetAnyLinkInheritedSrc.cpp \
	ScriptLib/GetObjectParamBool.cpp \
	ScriptLib/GetObjectParamFloat.cpp \
	ScriptLib/GetObjectParamInt.cpp \
	ScriptLib/GetObjectParamObject.cpp \
	ScriptLib/GetObjectParams.cpp \
	ScriptLib/GetObjectParamsNoInherit.cpp \
	ScriptLib/GetObjectParamString.cpp \
	ScriptLib/GetObjectParamTime.cpp \
	ScriptLib/GetOneLink.cpp \
	ScriptLib/GetOneLinkByData.cpp \
	ScriptLib/GetOneLinkByDataDest.cpp \
	ScriptLib/GetOneLinkByDataInheritedSrc.cpp \
	ScriptLib/GetOneLinkDest.cpp \
	ScriptLib/GetOneLinkInheritedSrc.cpp \
	ScriptLib/GetParamBool.cpp \
	ScriptLib/GetParamFloat.cpp \
	ScriptLib/GetParamInt.cpp \
	ScriptLib/GetParamObject.cpp \
	ScriptLib/GetParamString.cpp \
	ScriptLib/GetParamTime.cpp \
	ScriptLib/HexTable.cpp \
	ScriptLib/IterateLinks.cpp \
	ScriptLib/IterateLinksByData.cpp \
	ScriptLib/MultiParmAssignFloat.cpp \
	ScriptLib/MultiParmAssignInt.cpp \
	ScriptLib/MultiParmAssignString.cpp \
	ScriptLib/MultiParmAssignVector.cpp \
	ScriptLib/ParamExists.cpp \
	ScriptLib/ParamExistsDirect.cpp \
	ScriptLib/ParamGetBool.cpp \
	ScriptLib/ParamGetFloat.cpp \
	ScriptLib/ParamGetInt.cpp \
	ScriptLib/ParamGetObject.cpp \
	ScriptLib/ParamGetObjectRel.cpp \
	ScriptLib/ParamGetString.cpp \
	ScriptLib/ParamGetTime.cpp \
	ScriptLib/ParamRemove.cpp \
	ScriptLib/ParamSetBool.cpp \
	ScriptLib/ParamSetFloat.cpp \
	ScriptLib/ParamSetInt.cpp \
	ScriptLib/ParamSetString.cpp \
	ScriptLib/RemoveObjectParam.cpp \
	ScriptLib/RemoveMetaProperty.cpp \
	ScriptLib/RemoveSingleMetaProperty.cpp \
	ScriptLib/SetObjectParamBool.cpp \
	ScriptLib/SetObjectParamFloat.cpp \
	ScriptLib/SetObjectParamInt.cpp \
	ScriptLib/SetObjectParams.cpp \
	ScriptLib/SetObjectParamString.cpp \
	ScriptLib/SetParamBool.cpp \
	ScriptLib/SetParamFloat.cpp \
	ScriptLib/SetParamInt.cpp \
	ScriptLib/SetParamString.cpp \
	ScriptLib/ShowBook.cpp \
	ScriptLib/ShowString.cpp \
	ScriptLib/SimplePost.cpp \
	ScriptLib/SimpleSend.cpp \
	ScriptLib/strqsep.cpp \
	ScriptLib/strsep.cpp \
	ScriptLib/strtocolor.cpp \
	ScriptLib/StrToObject.cpp \
	ScriptLib/StrToObjectRel.cpp \
	ScriptLib/strtotime.cpp \
	ScriptLib/stpcpy.cpp
SCRLIB_OBJS = $(SCRLIB_SRCS:%.cpp=%.o)
SCRLIB_OBJSD = $(SCRLIB_SRCS:%.cpp=%-d.o)

COMMON_SRCS =  Script.cpp ScriptModule.cpp ScrInstance.cpp scriptvars.cpp
COMMON_OBJS =  Script.o ScriptModule.o ScrInstance.o scriptvars.o exports.o
VENDOR_SRCS = VendorLib.cpp
VENDOR_OBJS = VendorLib$(D).o
GEN_SRCS = GenericScript.cpp GenericTrap.cpp GenericScale.cpp GenericControl.cpp GenericTrigger.cpp
GEN_OBJS = GenericScript.o GenericTrap.o GenericScale.o GenericControl.o GenericTrigger.o

SRCS =  tnhScript.cpp NewScript.cpp Interaction.cpp tnhScript_osm.cpp \
		#tnhTest.cpp tnhTest_osm.cpp

OSMS = tnhScript.osm 


.PRECIOUS: %_osm.cpp %.o

%_osm.cpp: %.h
	perl $(srcdir)/genosm.pl $(DEFINES) $(INCLUDEDIRS) -o $@ $<

%.o: %.cpp
	$(CC) $(CXXFLAGS) $(CXXDEBUG) $(DEFINES) -o $@ -c $<

%-d.o: %.cpp
	$(CC) $(CXXFLAGS) $(CXXDEBUG) $(DEFINES) -o $@ -c $<

%_res.o: %.rc version.rc
	$(RC) $(DEFINES) -o $@ -i $<

%.osm: %.o %_osm.o exports.o
	$(LD) $(LDFLAGS) $(LDDEBUG) -o $@ $^ $(LIBS) 


ALL:	$(OSMS)

libs:	libScript.a libScript-d.a

clean:
	$(RM) *.osm *.o *.obj

deps:
	$(CC) -MM $(CXXFLAGS) $(DEFINES) $(SRCS) $(GEN_SRCS) $(COMMON_SRCS) $(SCRLIB_SRCS) >$(srcdir)/deps.mak

.INTERMEDIATE: exports.o

exports.o: ScriptModule.o
	$(DLLTOOL) $(DLLFLAGS) --output-exp $@ $^

libScript.a: CXXDEBUG = -O2 -DNDEBUG
libScript.a: LDDEBUG =
libScript.a: $(SCRLIB_OBJS)
	$(AR) $(ARFLAGS) $@ $?
	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1

libScript-d.a: CXXDEBUG = -g -DDEBUG -DDEBUG_PARAMCACHE
libScript-d.a: LDDEBUG = -g
libScript-d.a: $(SCRLIB_OBJSD)
	$(AR) $(ARFLAGS) $@ $?
	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1

ScriptModuleNP.o: ScriptModule.cpp ScriptModule.h ScriptLib.h
	$(CC) $(CXXFLAGS) $(CXXDEBUG) -DNO_PARAMCACHE $(DEFINES) -o $@ -c $<

tnhTest.osm: CXXDEBUG = -g -DDEBUG 
tnhTest.osm: LDDEBUG = -g
tnhTest.osm: D = -d
tnhTest.osm: Script.o ScriptModule.o ScrInstance.o

tnhScript.osm: tnhScript.o tnhScript_osm.o Interaction.o NewScript.o $(GEN_OBJS) $(VENDOR_OBJS) $(COMMON_OBJS) tnhScript_res.o $(SCRLIB)
	$(LD) $(LDFLAGS) $(LDDEBUG) -Wl,--image-base=0x11100000 -o $@ \
		tnhScript.o tnhScript_osm.o Interaction.o NewScript.o \
		$(GEN_OBJS) $(VENDOR_OBJS) $(COMMON_OBJS) \
		tnhScript_res.o $(LIBS) 

tnhScript_osm.cpp: tnhScript.h Interaction.h NewScript.h
	perl $(srcdir)/genosm.pl $(DEFINES) $(INCLUDEDIRS) -o $@ $^


-include deps.mak

