# Try to detect operating system
ifeq ($(OS),Windows_NT)
	ifeq ($(shell uname -s),) # not in a bash-like shell
		RM = del /F /Q
		MKDIR = mkdir
	else # in a bash-like shell, like msys
		RM = rm -f
		MKDIR = mkdir -p
	endif
	EXTENSION=.exe
	INC=-I C:\MinGW\lib
else
	RM = rm -f
	MKDIR = mkdir -p
	EXTENSION=
	INC=
endif

SRC=src/RuneOptimizer/RuneOptimizer.c
CC=gcc
CFLAGS=
OPTS_DEBUG=-Wall -g
OPTS_TEST=
OPTS=-O3
LIBS=-lsqlite3 -lm -ljson-c
OUT=bin/RuneOptimizer
OUT_DEBUG=bin/RuneOptimizer_DEBUG
TEST_SRC=src/test/RuneOptimizerTest.c
TEST_SRC_UNIT=src/test/RuneOptimizerUnitTest.c
TEST_SRC_INTEGRATION=src/test/RuneOptimizerIntegrationTest.c
TEST_SRC_E2E=srctest/RuneOptimizerE2ETest.c
TEST_OUT_UNIT=bin/RuneOptimizerUnitTest
TEST_OUT_INTEGRATION=bin/RuneOptimizerIntegrationTest
TEST_OUT_E2E=bin/RuneOptimizerE2ETest
#TEST_FUNCTION=-nostartfiles -Wl,-emain_test
TEST_FUNCTION=

INSTALL_DIR=/usr/local/bin/
GUI_INSTALL_DIR=/usr/share/
GUI_EXECUTABLE_SRC=/usr/share/RuneOptimizerGUI/RuneOptimizer.py
GUI_EXECUTABLE_DST=/usr/local/bin/RuneOptimizerGUI

default :
	@$(CC) -o $(OUT)$(EXTENSION) $(SRC) $(INC) $(LIBS) $(OPTS)
	@echo Compiled executable $(OUT)$(EXTENSION)

debug :
	$(CC) -o $(OUT_DEBUG)$(EXTENSION) $(SRC) $(INC) $(LIBS)
	@echo Compiled debug executable $(OUT_DEBUG)

test : default
	@$(CC) $(OPTS_TEST) -o $(TEST_OUT_UNIT)$(EXTENSION) $(TEST_SRC_UNIT) $(INC) $(LIBS) $(TEST_FUNCTION)
	@echo Compiled testing executable $(TEST_OUT_UNIT)$(EXTENSION)
	@$(CC) $(OPTS_TEST) -o $(TEST_OUT_INTEGRATION)$(EXTENSION) $(TEST_SRC_INTEGRATION) $(INC) $(LIBS) $(TEST_FUNCTION)
	@echo Compiled testing executable $(TEST_OUT_INTEGRATION)$(EXTENSION)
	@$(CC) $(OPTS_TEST) -o $(TEST_OUT_E2E)$(EXTENSION) $(TEST_SRC_E2E) $(INC) $(LIBS) $(TEST_FUNCTION)
	@echo Compiled testing executable $(TEST_OUT_E2E)$(EXTENSION)
install :
	@mkdir -p $(INSTALL_DIR)
	@cp $(OUT)$(EXTENSION) $(INSTALL_DIR)
	@cp -rf RuneOptimizerGUI $(GUI_INSTALL_DIR)
	-@rm $(GUI_EXECUTABLE_DST)
	@ln -s $(GUI_EXECUTABLE_SRC) $(GUI_EXECUTABLE_DST)
clean :
# TODO: Delete database?
	@$(RM) $(OUT)$(EXTENSION)
	@$(RM) $(OUT_DEBUG)$(EXTENSION)
	@echo All clean
