SYSTEM = $(shell uname)
ifeq ($(SYSTEM), Darwin)
CC = i686-pc-linux-gcc
CXX = i686-pc-linux-g++
LD = i686-pc-linux-g++
STRIP = i686-pc-linux-strip
CPPFLAGS = -I/usr/local/cross-tools-linux/i686-pc-linux/include
LDFLAGS = -L/usr/local/cross-tools-linux/i686-pc-linux/lib
else
CC = gcc
CXX = g++
LD = g++
STRIP = strip
endif

INCLUDES = \
-I../../includes -I../../psxdev -I../../generic/include \
-I../../generic/lib/zlib/include \
-I../../generic/lib/lua/include -I../../generic/lib/lua/includes \
-I../../mogltk/include -I../../Dalos \
-I../.. `sdl-config --cflags`

CPPFLAGS += $(INCLUDES) -O4 -DSTDC_HEADERS -DREADLINE_STATIC -DHAVE_UNISTD_H -fexceptions `sdl-config --cflags` -DWORDS_LITTLEENDIAN -fexceptions

LDFLAGS += -O4 -fexception
#-O4 `sdl-config --libs`

vpath %.c ../../Dalos:../../:../../mogltk/lib:../../generic/lib:../../lib:../../psxdev:../../generic/lib/zlib/src:../../generic/lib/lua/src:../../generic/lib/lua/src/LuaLib
vpath %.cc ../../Dalos:../../:../../mogltk/lib:../../generic/lib:../../lib:../../psxdev:../../generic/lib/zlib/src:../../generic/lib/lua/src:../../generic/lib/lua/src/LuaLib
vpath %.cpp ../../Dalos:../../:../../mogltk/lib:../../generic/lib:../../lib:../../psxdev:../../generic/lib/zlib/src:../../generic/lib/lua/src:../../generic/lib/lua/src/LuaLib

CD_TOOL_SOURCES = cd-tool.cpp

DALOS_SOURCES = Dalos.cc Console.cc Hexview.cc

MOGLTK_SOURCES = \
base.cc      glwidgets.cc \
engine.cc    mcolor.cc \
font.cc      shape.cc \
glbase.cc    sprite.cc \
glfont.cc    texture.cc \
glshape.cc   widgets.cc \
glsprite.cc  contextmenu.cc \
inputtext.cc

BALTISOT_SOURCES = \
Image.cc       Main.cc \
BLua.cc        Buffer.cc \
ConfigFile.cc  Output.cc \
Exceptions.cc  Regex.cc \
Handle.cc      String.cc \
Input.cc       fileutils.cc \
LuaHandle.cc   generic.cc \
checkargs.c    datecalc.c \
LuaRegex.cc    LuaConfigFile.cc

ZLIB_SOURCES = \
adler32.c   inffast.c \
compress.c  inflate.c \
crc32.c     inftrees.c \
deflate.c   \
gzio.c      trees.c \
uncompr.c \
zutil.c

LUA_SOURCES = \
lapi.c      lparser.c \
lcode.c     lstate.c \
ldebug.c    lstring.c \
ldo.c       ltable.c \
ldump.c     ltests.c \
lfunc.c     ltm.c \
lgc.c       luacomp.c \
llex.c      lundump.c \
lmem.c      lvm.c \
lobject.c   lzio.c \
lopcodes.c \
lauxlib.c \
lbaselib.c \
ldblib.c \
liolib.c \
lmathlib.c \
loadlib.c \
lstrlib.c \
ltablib.c \
ldirlib.c

#HASH_SOURCES = \
#hashtab.c    lookupa.c \
#recycle.c
HASH_SOURCES = 

PSX_SOURCES = \
cdabstract.cpp  luacd.cpp  \
cdreader.cpp    luapsx.cpp \
cdutils.cpp     lzss.cpp   \
yazedc.cpp      isobuilder.cpp \
dvdabstract.cpp

PSXDEV_SOURCES = \
bs.c       jfdctint.c  xadecode.c \
idctfst.c  vlc.c

COMMON_SOURCES = \
$(BALTISOT_SOURCES) $(ZLIB_SOURCES) $(REGEX_SOURCES) $(GETOPT_SOURCES) \
$(LUA_SOURCES) $(PSX_SOURCES) $(PSXDEV_SOURCES) $(READLINE_SOURCES) \
$(HASH_SOURCES)

WHOLE_SOURCES = $(CD_TOOL_SOURCES) $(DALOS_SOURCES) $(COMMON_SOURCES) $(MOGLTK_SOURCES)

ALL_OBJECTS = $(addsuffix .o, $(notdir $(basename $(WHOLE_SOURCES))))
ALL_DEPS = $(addsuffix .dep, $(notdir $(basename $(WHOLE_SOURCES))))

DALOS_OBJECTS = $(addsuffix .o, $(notdir $(basename $(COMMON_SOURCES) $(MOGLTK_SOURCES) $(DALOS_SOURCES))))

CD_TOOL_OBJECTS = $(addsuffix .o, $(notdir $(basename $(COMMON_SOURCES) $(CD_TOOL_SOURCES))))

all: dep cd-tool cd-tool-static

dep: $(ALL_DEPS)

#stats:
#	@wc $(WHOLE_SOURCES)

dist: all ../../cd-tool.lua ../../FAQ-cd.txt ../../COPYING
	zip -j9 ../cd-tool-`date +%Y%m%d`-linux-dynamic.zip cd-tool ../../cd-tool.lua ../../FAQ-cd.txt ../../COPYING
	zip -j9 ../cd-tool-`date +%Y%m%d`-linux-static.zip cd-tool-static ../../cd-tool.lua ../../FAQ-cd.txt ../../COPYING
	zip -j9 ../Dalos-`date +%Y%m%d`-linux-dynamic.zip Dalos ../../Dalos/Dalos.paq ../../COPYING
	zip -j9 ../Dalos-`date +%Y%m%d`-linux-static.zip Dalos-static ../../Dalos/Dalos.paq ../../COPYING

Dalos: $(DALOS_OBJECTS)
	$(LD) -o Dalos $(DALOS_OBJECTS) -lGL -lGLU -lreadline -lSDL -lpthread
	$(STRIP) Dalos

Dalos-static: $(DALOS_OBJECTS)
	$(LD) -o Dalos-static $(DALOS_OBJECTS) -lGL -lGLU -lreadline -lSDL -lpthread -static -laa -lgpm -lncurses -lX11 -lslang -lXext -ldl -lvga -lasound -L/usr/X11R6/lib
	$(STRIP) Dalos-static

cd-tool: $(CD_TOOL_OBJECTS)
	$(LD) -o cd-tool $(CD_TOOL_OBJECTS) -lreadline -lncurses $(LDFLAGS)
	$(STRIP) cd-tool

cd-tool-static: $(CD_TOOL_OBJECTS)
	$(LD) $(LDFLAGS) -o cd-tool-static $(CD_TOOL_OBJECTS) -lreadline -lncurses -static $(LDFLAGS)
	$(STRIP) cd-tool-static

clean:
	rm -f Dalos Dalos-static cd-tool cd-tool-static *.o *.dep




#define OBJECT_C_template
#$(addsuffix .o, $(notdir $(basename $(1)))): $(src)
#	$$(CC) $$(CPPFLAGS) $$(CFLAGS) -c $(src)
#endef
#
#define OBJECT_CXX_template
#$(addsuffix .o, $(notdir $(basename $(1)))): $(src)
#	$$(CXX) $$(CPPFLAGS) $$(CXXFLAGS) -c $(src)
#endef
#
#$(foreach src, $(WHOLE_SOURCES), $(if $(filter %.c, $(src)), $(eval $(call OBJECT_C_template, $(src))), $(eval $(call OBJECT_CXX_template, $(src)))))


%.dep : %.c
	$(CC) $(CPPFLAGS) -M -MF $@ $<

%.dep : %.cpp
	$(CXX) $(CPPFLAGS) -M -MF $@ $<

%.dep : %.cc
	$(CXX) $(CPPFLAGS) -M -MF $@ $<

-include $(ALL_DEPS)