PRJ     := racer3d
BLD_DBG := NO
RM      := rm -f
MKDIR   := mkdir -p
LEDITOR := kate


# set build and target directory based on plateform
BLDD    := build
TARGET  := target
LDFLAGS=-lGL -lGLEW -lGLU
ifneq "$(findstring DPANDORA,$(CFLAGS))" ""
	BLDD   = build.pand
	TARGET = target.pand
	LDFLAGS=-lGLES_CM -lEGL -lX11
else 
  ifneq  "$(findstring DCAANOO,$(CFLAGS))" ""
	BLDD   = build.caan
	TARGET = target.caan
	LDFLAGS=-lts -lglport -lopengles_lite
  endif
endif
ifeq ($(BLD_DBG), YES)
	CXXFLAGS += -g -DDEBUG
else
	CXXFLAGS += -O3 -DNDEBUG
endif

INC_DIR := .
SOURCES := ./libtrack ./libtrack/document ./libtrack/Mesh ./libtrack/path ./racer ./racer/Engine ./racer/Engine/GameObjects ./racer/Engine/Physics  ./racer/Graphics ./racer/UI ./libtrack/edit_base
BIN_DIR := $(TARGET)

EXE := $(BIN_DIR)/$(PRJ)
COUNTER := $(BLDD)/.cnt.sh
OBJS   := $(foreach dir, $(SOURCES),   $(patsubst $(dir)/%.cpp,  $(BLDD)/%.o,$(wildcard $(dir)/*.cpp)))
SRCFILES:= $(foreach dir, $(SOURCES), $(wildcard $(dir)/*.cpp) $(wildcard $(dir)/*.h))

JUNK    := $(shell find . -name '*~')

LDFLAGS += $(foreach dir, $(LIB_DIR), -L$(wildcard $(dir))) -lm  $(shell sdl-config --libs) -lSDL_gfx -lSDL_ttf -lSDL_image -lSDL_mixer $(shell pkg-config --libs bullet sigc++-2.0 glibmm-2.4 ftgl fann openal) -lalut
CXXFLAGS  += $(shell pkg-config --cflags glibmm-2.4 bullet sigc++-2.0 fann openal) $(shell sdl-config --cflags) -Wall 
CXXFLAGS  += $(foreach dir, $(INC_DIR), -I$(wildcard $(dir)))
SHOW_BLD = printf "[%3d%%] \033[32mBuilding file \033[1m%s\033[0m\n"  `$(BLDD)/.cnt.sh`
SHOW_LNK     = printf "[%3d%%] \033[34mLinking binary \033[34;1m%s\033[0m\n"  `$(BLDD)/.cnt.sh`
SHOW_SUCESS  = printf "[%3d%%] \033[33;1mSuccessfully build target \033[0;33m%s\033[0m\n"  `$(BLDD)/.cnt.sh`


all: $(BLDD) $(COUNTER) $(OBJS) $(EXE)
	@$(SHOW_SUCESS) all

$(EXE): $(BLDD) $(OBJS)
	@$(SHOW_LNK) $@
	@$(CXX) $(OBJS) -o $(EXE) $(LDFLAGS)

$(BLDD)/%.o: ./libtrack/%.cpp
	@$(SHOW_BLD) $@
	@$(CXX) $(CXXFLAGS) -c $< -o $@

$(BLDD)/%.o: ./libtrack/document/%.cpp
	@$(SHOW_BLD) $@
	@$(CXX) $(CXXFLAGS) -c $< -o $@

$(BLDD)/%.o: ./libtrack/edit_base/%.cpp
	@$(SHOW_BLD) $@
	@$(CXX) $(CXXFLAGS) -Ilibtrack/edit_base -c $< -o $@

$(BLDD)/%.o: ./libtrack/Mesh/%.cpp
	@$(SHOW_BLD) $@
	@$(CXX) $(CXXFLAGS) -c $< -o $@

$(BLDD)/%.o: ./libtrack/path/%.cpp
	@$(SHOW_BLD) $@
	@$(CXX) $(CXXFLAGS) -c $< -o $@

$(BLDD)/%.o: ./racer/%.cpp
	@$(SHOW_BLD) $@
	@$(CXX) $(CXXFLAGS) -c $< -o $@

$(BLDD)/%.o: ./racer/Engine/%.cpp
	@$(SHOW_BLD) $@
	@$(CXX) $(CXXFLAGS) -c $< -o $@

$(BLDD)/%.o: ./racer/Engine/GameObjects/%.cpp
	@$(SHOW_BLD) $@
	@$(CXX) $(CXXFLAGS) -c $< -o $@

$(BLDD)/%.o: ./racer/Engine/Physics/%.cpp
	@$(SHOW_BLD) $@
	@$(CXX) $(CXXFLAGS) -c $< -o $@

$(BLDD)/%.o: ./racer/Graphics/%.cpp
	@$(SHOW_BLD) $@
	@$(CXX) $(CXXFLAGS) -c $< -o $@

$(BLDD)/%.o: ./racer/UI/%.cpp
	@$(SHOW_BLD) $@
	@$(CXX) $(CXXFLAGS) -c $< -o $@

$(COUNTER): Makefile $(SRCFILES) $(BLDD)
	@echo "#!/bin/sh">$@
	@echo 'expr 100 "*" `ls -1d $(BLDD)/*.o $(EXE) 2>/dev/null|wc -l` "/" `echo $(OBJS) $(EXE) |wc -w`' >> $@
	@chmod 700 $@

$(BLDD):
	@$(MKDIR) $(BLDD)

clean:
	@$(RM) $(OBJS) $(EXE) $(JUNK) $(BLDD)/.cnt.sh
	@$(RM) -r $(BLDD)

.PHONY:clean all editor player edtest runtest edit
.PRECIOUS: $(OBJS)
.SUFFIXES: .o .c .h .S .cpp .dat
