CXXFLAGS= -Wall -g -std=c++0x -I .

lexor_objs=labs/lab01.o \
		   lexer/lexi.o \
		   lexer/token.o

parser_objs=labs/lab02.o \
		    lexer/lexi.o \
		    lexer/token.o \
			parser/parser.o \

rdbms_objs=labs/lab03.o \
		   lexer/lexi.o \
		   lexer/token.o \
		   parser/parser.o \

lab01=bin/lab01
lab02=bin/lab02
lab03=bin/lab03

all: $(lab01) $(lab02) $(lab03)

$(lab01): $(lexor_objs)
	$(CXX) $(CXXFLAGS) $(lexor_objs) -o $@

$(lab02): $(parser_objs)
	$(CXX) $(CXXFLAGS) $^ -o $@

$(lab03): $(rdbms_objs)
	$(CXX) $(CXXFLAGS) $^ -o $@

labs/lab01.o: labs/lab01.cpp lexer/util.h lexer/lexi.h lexer/token.h
lexer/lexi.o: lexer/lexi.cpp lexer/lexi.h
lexer/token.o: lexer/token.h lexer/token.cpp

labs/lab02.o: labs/lab02.cpp lexer/util.h lexer/lexi.h lexer/token.h \
           	  parser/scheme.h parser/fact.h parser/rule.h parser/query.h\
			  parser/predicate.h parser/parameter.h parser/parser.o

labs/lab03.o: labs/lab02.cpp lexer/util.h lexer/lexi.h lexer/token.h \
           	  parser/scheme.h parser/fact.h parser/rule.h parser/query.h\
			  parser/predicate.h parser/parameter.h parser/parser.o rdbms/db.h \
			  rdbms/relation.h rdbms/schema.h rdbms/Tuple.h
parser/parser.o: parser/parser.h parser/parser.cpp

clean:
	@rm -vf **/*.o
	@rm -vf $(EXE)
	@rm -vf **/*.1
	@rm -vf **/*.0
	@rm -vf test
	@rm -rvf **/*.dSYM
	@rm -vf output.txt
	@rm -vf bin/*

drun: main
	gdb ./main

valgrind: $(EXE)
	valgrind --tool=memcheck --leak-check=yes ./$(EXE) input.txt output.txt

pmc: **/*.h **/*.cpp
	pmccabe **/*.h **/*.cpp
