#############################################################
# Makefile modified by Matthew Little (Tijer) 14-Dec-2013   #
#############################################################

# If your server does not support ccache remove this from here

CC      := gcc
# -Wno-format-truncation: all sprintf calls use snprintf with sizeof, so any
# truncation is safe-by-design (no buffer overflow possible); the warning is a
# false positive for these game-bounded strings.
C_FLAGS = -O -DMERC  -g -ggdb -Dlinux -I include -DI3 -DI3MERC

# In case you want to enable all kinds of warnings, use
# the C_FLAGS below instead.
# C_FLAGS := -g -pedantic -Wall -W -Wno-unused-parameter -Wformat-extra-args -Wformat-security -Wchar-subscripts -Wcomment -Wno-system-headers -Wfloat-equal -Wundef -Wendif-labels -Wshadow -Wpointer-arith -Wcast-align -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls -Wdisabled-optimization -Werror

L_FLAGS := -lz -lcrypt -lpthread -lm -lc
#L_FLAGS := -O -lz -lcrypt -lm -lmysqlclient -fcommon


OBJ_DIR   := obj


# Change this to your executable name the only change needed to the Makefile
EXECFILE = ../bin/AoH

ECHOCMD = /bin/echo

#Colours Supported
L_RED   = \x1B[1;31m
L_GREEN = \x1B[1;32m
L_YELL  = \x1B[1;33m
L_BLUE  = \x1B[1;34m
L_CYAN  = \x1B[1;36m
L_WHITE = \x1B[1;37m
L_NRM   = \x1B[0;00m

# Ok Messages
OK_S    = $(L_GREEN)OK$(L_NRM)
ERR_S   = with $(L_RED)ERRORS$(L_NRM)
WARN_S  = with $(L_YELL)WARNINGS$(L_NRM)

# Source files
SRC_FILES := $(wildcard *.c)

O_FILES := $(patsubst %.c,$(OBJ_DIR)/%.o,$(SRC_FILES))
# Header Files need to find out where to put these in the make
H_FILES = $(wildcard *.h)
HDIR    = ./

.SUFFIXES:

# Actually compile the code!

$(EXECFILE): $(O_FILES)
	@rm -f $(EXECFILE)
	@$(ECHOCMD) -e "[$(L_WHITE)`date +%0r`$(L_NRM)] Linking Executable ..."
	@$(CC) -o $(EXECFILE) $(O_FILES) $(L_FLAGS)
	@chmod 755 $(EXECFILE)

# Increment .build and .version

	@if [ -f .build ]; then \
		expr `cat .build` + 1 > .build; \
	else \
		echo '1' > .build; \
	fi
	@if [ -f .version ]; then \
	expr `cat .version` + 1 > .version; \
	else \
		echo '10001' > .version; \
	fi
	@if [ `cat .build` -ge 101 ]; then \
	echo '1' > .build; \
	fi
	@echo '#ifndef BUILD_H' > $(HDIR)build.h
	@echo '#define BUILD_H' >> $(HDIR)build.h
	@echo "#define LINKCOUNT   `cat .build`" >> $(HDIR)build.h
	@echo '#endif' >> $(HDIR)build.h
	@echo '#ifndef VERSION_H' > $(HDIR)version.h
	@echo '#define VERSION_H' >> $(HDIR)version.h
	@echo "#define VERSION   `cat .version`" >> $(HDIR)version.h
	@echo '#endif' >> $(HDIR)version.h
	@$(ECHOCMD) -e "           -> $(L_NRM)Current Code Version: $(L_RED)$(shell echo "scale=2; `cat .version` / 10000" | bc)$(L_NRM). Build: $(L_RED)`cat .build`$(L_NRM).$(L_NRM)"

-include $(FILES:%=$(OBJ_DIR)/%.d)

%.o $(OBJ_DIR)/%.o : %.c
	@rm -f .temp.errors .temp.log
	@$(ECHOCMD) -e "[$(L_WHITE)`date +%0r`$(L_NRM)] Compiling $< ..."
	@$(CC) -c -MMD -MP $(C_FLAGS) $< -o $@ 2> .temp.log || touch .temp.errors
	@$(ECHOCMD) -en "[$(L_WHITE)`date +%0r`$(L_NRM)] $(L_NRM)$<$(L_NRM) compiled "
	@if test -e .temp.errors; then $(ECHOCMD) -e  "$(ERR_S)" && cat .temp.log; exit 2; elif test -s .temp.log; then $(ECHOCMD) -e "$(WARN_S)" && cat .temp.log; else $(ECHOCMD) -e  "$(OK_S)"; fi;
	@rm -f .temp.errors .temp.log


#backup:
#	@cp -f * ./backupsrc/

clean:
	@echo Cleaning up for a FULL Make...
#	@ccache --clean
	@rm -f $(OBJ_DIR)/*.o
	@rm -f $(OBJ_DIR)/*.d
	@rm -f *.*~
	make

distclean:
	@echo Cleaning up for a Distribution Make...
	@rm -f $(O_DIR)/*.o
	@rm -f $(O_DIR)/*.d
	@rm -f *.*~
	@rm -f $(EXECFILE)

