OBJFILES = TestMain.o AnalysisNotifyModule.o AnalysisModuleManager.o ModuleGraph.o
MODULE_OBJ_FLAGS = -I ./include -D_LINUX_ -g
INCLUDES = ./include/AnalysisModuleInterface.h ./include/InOutPin.h 
GPP = g++
GCC = gcc

all:
	make clean
	make TestCase
	make DLL

TestCase : $(OBJFILES)
	$(GPP) -g -o TestCase $(OBJFILES) -ldl

TestMain.o : TestMain.cpp AnalysisModuleManager.h AnalysisNotifyModule.h $(INCLUDES)
	$(GPP) $(MODULE_OBJ_FLAGS) -c TestMain.cpp

AnalysisModuleManager.o : AnalysisModuleManager.cpp ModuleGraph.h AnalysisModuleManager.h
	$(GPP) $(MODULE_OBJ_FLAGS) -c AnalysisModuleManager.cpp

ModuleGraph.o : ModuleGraph.cpp ModuleGraph.h $(INCLUDES) 
	$(GPP) $(MODULE_OBJ_FLAGS) -c ModuleGraph.cpp

AnalysisNotifyModule.o : AnalysisNotifyModule.h $(INCLUDES)
	$(GPP) $(MODULE_OBJ_FLAGS) -c AnalysisNotifyModule.cpp 

DLL: 
	cd UNOLexer \
	&& make all
	cd UNOScriptLexer \
	&& make all
	cd OutOfBoundAccess/UNOOutOfBoundAccess \
	&& make all
	cd ImproperInitialization/UNOImproperInitialization \
	&& make all
	cd MemoryManagement/UNOMemoryManagement \
	&& make all
	cd UNOGlobalAnalysisInputGenerator \
	&& make all
	cd UNOGlobalAnalysis \
	&& make all
	#cd SplintAnalysis \
	#&& make all
	cd BufferOverflow/SplintBufferOverFlow \
	&& make all
	cd IncorrectCalculation/LSMIncorrectCalculation \
	&& make all

clean : 
	rm -rf *.o TestCase *.so
	cd UNOLexer \
	&& make clean
	cd UNOScriptLexer \
	&& make clean
	cd OutOfBoundAccess/UNOOutOfBoundAccess \
	&& make clean
	cd ImproperInitialization/UNOImproperInitialization \
	&& make clean
	cd MemoryManagement/UNOMemoryManagement \
	&& make clean
	cd UNOGlobalAnalysisInputGenerator \
	&& make clean
	cd UNOGlobalAnalysis \
	&& make clean
	#cd SplintAnalysis \
	#&& make clean
	cd BufferOverflow/SplintBufferOverFlow \
	&& make clean
	cd IncorrectCalculation/LSMIncorrectCalculation \
	&& make clean
	cd SwALinuxSource/Module \
	&& rm -rf *.so
	cd Modules \
	&& rm -rf *.so
