###############################################################################
##    Makefile-gcc
##
##    This file is part of Object Script Library
##    Copyright (C) 2005-2007 Tom N Harris <telliamed@whoopdedo.org>
##
##    Permission is hereby granted, free of charge, to any person obtaining
##    a copy of this software and associated documentation files (the 
##    "Software"), to deal in the Software without restriction, including 
##    without limitation the rights to use, copy, modify, merge, publish, 
##    distribute, sublicense, and/or sell copies of the Software, and to 
##    permit persons to whom the Software is furnished to do so.
##    
##    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
##    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
##    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-
##    INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 
##    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 
##    AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 
##    IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
##    THE SOFTWARE.
##
###############################################################################


.SUFFIXES:
.SUFFIXES: .o .cpp .rc 

#GAME = 2

srcdir = ./source
bin1dir = ./bin1
bin2dir = ./bin2
bin3dir = ./bin3
bindirectories = $(bin1dir) $(bin2dir) $(bin3dir)

LGDIR = ../lg
LGLIB = -llg

CC = gcc
CXX = g++
AR = ar
DLLWRAP = dllwrap
RC = windres

DEFINES = -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 -DWIN32_LEAN_AND_MEAN

CXXDEBUG = -O3 -march=pentium -DNDEBUG
LDDEBUG =
D = 

ARFLAGS = rc
LDFLAGS = -mno-cygwin -mwindows -mdll -Wl,--enable-auto-image-base 
LIBDIRS = -L. -L$(LGDIR) 
LIBS = $(LGLIB) -luuid -lstdc++
INCLUDES = -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 -mno-cygwin -masm=intel \
	    -fno-pcc-struct-return -mms-bitfields
DLLFLAGS =  --target i386-mingw32

SRCS =  ScriptLib.cpp \
	GetObjectParams.cpp \
	SetObjectParams.cpp \
	GetObjectParamString.cpp \
	GetObjectParamInt.cpp \
	GetObjectParamFloat.cpp \
	GetObjectParamBool.cpp \
	GetObjectParamObject.cpp \
	GetObjectParamTime.cpp \
	SetObjectParamString.cpp \
	SetObjectParamInt.cpp \
	SetObjectParamFloat.cpp \
	SetObjectParamBool.cpp \
	GetParamString.cpp \
	GetParamInt.cpp \
	GetParamFloat.cpp \
	GetParamBool.cpp \
	GetParamObject.cpp \
	GetParamTime.cpp \
	SetParamString.cpp \
	SetParamInt.cpp \
	SetParamFloat.cpp \
	SetParamBool.cpp \
	RemoveObjectParam.cpp \
	AddSingleMetaProperty.cpp \
	RemoveSingleMetaProperty.cpp \
	AddMetaProperty.cpp \
	RemoveMetaProperty.cpp \
	GetOneLinkDest.cpp \
	GetOneLinkByData.cpp \
	GetOneLinkByDataDest.cpp \
	GetOneLinkInheritedSrc.cpp \
	GetOneLinkByDataInheritedSrc.cpp \
	GetAnyLink.cpp \
	GetAnyLinkDest.cpp \
	GetAnyLinkByData.cpp \
	GetAnyLinkByDataDest.cpp \
	GetAnyLinkInheritedSrc.cpp \
	GetAnyLinkByDataInheritedSrc.cpp \
	IterateLinks.cpp \
	IterateLinksByData.cpp \
	DeleteAllLinks.cpp \
	DeleteAllLinksByData.cpp \
	FixupPlayerLinks.cpp \
	SimpleSend.cpp \
	SimplePost.cpp \
	CDSend.cpp \
	CDSendData.cpp \
	StrToObject.cpp \
	ShowBook.cpp \
	ShowString.cpp \
	DebugPrintf.cpp \
	DisplayPrintf.cpp \
	MultiParmAssignFloat.cpp \
	MultiParmAssignInt.cpp \
	MultiParmAssignString.cpp \
	MultiParmAssignVector.cpp \
	CalcTextTime.cpp \
	strsep.cpp \
	strqsep.cpp \
	strtocolor.cpp \
	strtotime.cpp \

OBJS1 = $(SRCS:%.cpp=$(bin1dir)/%.o)
OBJS1D = $(SRCS:%.cpp=$(bin1dir)/%-d.o)
OBJS2 = $(SRCS:%.cpp=$(bin2dir)/%.o)
OBJS2D = $(SRCS:%.cpp=$(bin2dir)/%-d.o)
OBJS3 = $(SRCS:%.cpp=$(bin3dir)/%.o)
OBJS3D = $(SRCS:%.cpp=$(bin3dir)/%-d.o)

SCRIPTLIB1 = libScript1.a
SCRIPTLIB1D = libScript1-d.a
SCRIPTLIB2 = libScript2.a
SCRIPTLIB2D = libScript2-d.a
SCRIPTLIB3 = libScript3.a
SCRIPTLIB3D = libScript3-d.a

$(bin1dir)/%.o: $(srcdir)/%.cpp
	$(CXX) $(CXXFLAGS) $(CXXDEBUG) $(DEFINES) -D_DARKGAME=1 $(INCLUDES) -o $@ -c $<

$(bin1dir)/%-d.o: $(srcdir)/%.cpp
	$(CXX) $(CXXFLAGS) $(CXXDEBUG) $(DEFINES) -D_DARKGAME=1 $(INCLUDES) -o $@ -c $<

$(bin2dir)/%.o: $(srcdir)/%.cpp
	$(CXX) $(CXXFLAGS) $(CXXDEBUG) $(DEFINES) -D_DARKGAME=2 $(INCLUDES) -o $@ -c $<

$(bin2dir)/%-d.o: $(srcdir)/%.cpp
	$(CXX) $(CXXFLAGS) $(CXXDEBUG) $(DEFINES) -D_DARKGAME=2 $(INCLUDES) -o $@ -c $<

$(bin3dir)/%.o: $(srcdir)/%.cpp
	$(CXX) $(CXXFLAGS) $(CXXDEBUG) $(DEFINES) -D_DARKGAME=3 $(INCLUDES) -o $@ -c $<

$(bin3dir)/%-d.o: $(srcdir)/%.cpp
	$(CXX) $(CXXFLAGS) $(CXXDEBUG) $(DEFINES) -D_DARKGAME=3 $(INCLUDES) -o $@ -c $<


all: $(bindirectories) $(SCRIPTLIB1) $(SCRIPTLIB1D) $(SCRIPTLIB2) $(SCRIPTLIB2D) $(SCRIPTLIB3) $(SCRIPTLIB3D)

clean:
	$(RM) $(bin1dir)/*.o $(bin2dir)/*.o $(bin3dir)/*.o $(SCRIPTLIB1) $(SCRIPTLIB1D) $(SCRIPTLIB2) $(SCRIPTLIB2D) $(SCRIPTLIB3) $(SCRIPTLIB3D)

$(bin1dir):
	mkdir -p $@
$(bin2dir):
	mkdir -p $@
$(bin3dir):
	mkdir -p $@

$(SCRIPTLIB1): $(OBJS1)
	$(AR) $(ARFLAGS) $@ $?

$(SCRIPTLIB1D): CXXDEBUG = -g -DDEBUG
$(SCRIPTLIB1D): LDDEBUG = -g
$(SCRIPTLIB1D): $(OBJS1D)
	$(AR) $(ARFLAGS) $@ $?

$(SCRIPTLIB2): $(OBJS2)
	$(AR) $(ARFLAGS) $@ $?

$(SCRIPTLIB2D): CXXDEBUG = -g -DDEBUG
$(SCRIPTLIB2D): LDDEBUG = -g
$(SCRIPTLIB2D): $(OBJS2D)
	$(AR) $(ARFLAGS) $@ $?

$(SCRIPTLIB3): $(OBJS3)
	$(AR) $(ARFLAGS) $@ $?

$(SCRIPTLIB3D): CXXDEBUG = -g -DDEBUG
$(SCRIPTLIB3D): LDDEBUG = -g
$(SCRIPTLIB3D): $(OBJS3D)
	$(AR) $(ARFLAGS) $@ $?

