# 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 -rf
		MKDIR = mkdir -p
	endif
	EXTENSION=.exe
	INC=-I C:\MinGW\lib
else
	RM = rm -rf
	MKDIR = mkdir -p
	EXTENSION=
	INC=
endif

SRC=src/RuneOptimizer/RuneOptimizer.c
CC=gcc
CFLAGS=
OPTS_DEBUG=-Wall -g
OPTS_TEST=
OPTS=-O3
OPTS_REPORT=-O3 -fdump-tree-all
LIBS=-lsqlite3 -lm -ljson-c -lpthread
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

DOC_COMMAND=doxygen

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

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

test : default
	@echo Generating tests...
	@$(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 :
	@echo Installing...
	@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)
	@echo Installed RuneOptimizer and RuneOptimizerGUI

docs :
        ifeq ($(shell which $(DOC_COMMAND)),)
	$(error "No $(DOC_COMMAND) commannd found. Install it and run 'make doc' to generate documentation")
        else
	@echo Generating documentation...
	@mkdir -p doc/cli
	@mkdir -p doc/gui
	@doxygen doxygen-cli.conf
	@doxygen doxygen-gui.conf 2>/dev/null
	@echo Documentation generated in doc/
        endif
clean :
	@echo Cleaning...
	@$(RM) bin/*
	@$(RM) doc/*
	@echo All clean
