# Makefile for custom scripts

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

srcdir = .
LGDIR = ..

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
DLLWRAP = dllwrap
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

ARFLAGS = rc
LIBS = -llg$(D) -lstdc++ -luuid
LDFLAGS = -mno-cygwin -mwindows -L. -L$(LGDIR)
INCLUDEDIRS = -I. -I$(srcdir) -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 = --def script.def --add-underscore --target i386-mingw32

ifdef DEBUG
CXXDEBUG = -g -DDEBUG 
LDDEBUG = -g
else
# Could someone kindly tell me why std::map<const char*, ... >::find("")
# doesn't work with -march=pentium
CXXDEBUG = -O3 -DNDEBUG
LDDEBUG =
endif

COMMON_SRCS =  Script.cpp ScriptModule.cpp ScriptLib.cpp
COMMON_OBJS =  Script.o ScriptModule.o ScriptLib$(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 =  scrversion.cpp  \
		tnhScript.cpp NewScript.cpp Interaction.cpp tnhScript_osm.cpp \
		#tnhTest.cpp tnhTest_osm.cpp

OSMS = tnhScript.osm #version.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
	$(DLLWRAP) $(DLLFLAGS) -o $@ $^ $(LDFLAGS) $(LDDEBUG) $(LIBS) 


ALL:	$(OSMS)

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

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


#ScriptModule.o: ScriptModule.cpp ScriptModule.h ScriptLib.h
#	$(CC) $(CXXFLAGS) -fno-exceptions $(CXXDEBUG) $(DEFINES) -o $@ -c $<

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

amnesia.osm: $(COMMON_OBJS)

version.osm: scrversion.o $(COMMON_OBJS) scrversion_res.o
	$(DLLWRAP) $(DLLFLAGS) -o $@ $^ $(LDFLAGS) $(LDDEBUG) $(LIBS) -lversion 

tnhScript.osm: Interaction.o NewScript.o $(GEN_OBJS) $(COMMON_OBJS) tnhScript_res.o

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


-include deps.mak

