BOT = expenses
LEX = src/$(BOT)/lex.l
YACC = src/$(BOT)/grammar.y
BUILDPATH = ./build
LOCPATH = ./bin
OLEX = $(BUILDPATH)/$(BOT)/lex.yy.c
OYACC = $(BUILDPATH)/$(BOT)/grammar.tab.c
SRC = src/$(BOT)/types.c src/$(BOT)/task.c src/$(BOT)/csv.c $(OLEX) $(OYACC) src/core/handlers.c src/core/context.c src/main.c
INSTALLPATH = /usr/local
CFLAGS = `pkg-config --cflags glib-2.0`
LFLAGS =  -lstrophe -lpthread -lssl -lcrypto `pkg-config --libs glib-2.0` 
DEBFLAGS = -g -Wall
OFLAGS = -O2
NAME = xmpp-bot

all: grammar
	mkdir -p $(LOCPATH)
	gcc $(SRC) -o $(LOCPATH)/$(NAME) $(CFLAGS) $(OFLAGS) $(LFLAGS) $(LFLAGS_STATUS)
nostatus: grammar
	mkdir -p $(LOCPATH)
	gcc $(SRC) -o $(LOCPATH)/$(NAME) $(OFLAGS) $(LFLAGS)
debug: grammar
	mkdir -p $(LOCPATH)/debug
	gcc $(SRC) -o $(LOCPATH)/debug/$(NAME)_debug $(CFLAGS) $(LFLAGS) $(DEBFLAGS) $(LFLAGS_STATUS)
prof: grammar
	mkdir -p $(LOCPATH)/prof
	gcc $(SRC) -o $(LOCPATH)/prof/$(NAME)_prof $(CFLAGS) $(LFLAGS) $(LFLAGS_STATUS) -pg
asan: grammar
	gcc $(SRC) -o $(LOCPATH)/debug/$(NAME)_debug_asan $(CFLAGS) $(LFLAGS) $(DEBFLAGS) $(LFLAGS_STATUS) -fsanitize=address
grammar:
	mkdir -p $(BUILDPATH)/$(BOT)
	flex -o $(OLEX) $(LEX)
	bison -o $(OYACC) -d $(YACC)
clean:
	rm -rf $(BUILDPATH)
	rm -f $(LOCPATH)/debug/$(NAME)_debug
	rm -f $(LOCPATH)/$(NAME)
	rm -f $(LOCPATH)/debug/$(NAME)_debug
distclean:
	rm -rf $(BUILDPATH)
	rm -r $(LOCPATH)
install:
	cp $(LOCPATH)/$(NAME) $(INSTALLPATH)/bin/$(NAME)
uninstall:
	rm $(INSTALLPATH)/bin/$(NAME)
