# Makefile for analysis shared files

ANALYSIS_HEADER_PATH := include/
ANALYSIS_SRC_PATH := src/
BUILD_PATH := .build/

ANALYSIS_FILE := $(wildcard $(ANALYSIS_SRC_PATH)*.cc)
ANALYSIS_OBJ := $(patsubst $(ANALYSIS_SRC_PATH)%.cc, $(BUILD_PATH)%.o,$(ANALYSIS_FILE))
ANALYSIS_SO := $(patsubst $(ANALYSIS_SRC_PATH)%.cc, %.so, $(ANALYSIS_FILE))

ECHO := echo
RM := rm
MKDIR := mkdir

CPP := c++
CPPFLAGS := -fPIC -g -Werror
CPPSOFLAGS := -fPIC -shared

CERN_ROOT_FLAGS := $(shell root-config --cflags)
CERN_ROOT_LINK := $(shell root-config --glibs)
TBMON2_INCLUDE := -I../core/include/ -I../style/include -I$(ANALYSIS_HEADER_PATH)


.PHONY: build rebuild cleanall

.SUFFIXES: .so .o .cc

build: $(ANALYSIS_SO)
	@if [ -d $(BUILD_PATH) ]; \
	then \
		$(RM) -f -r $(BUILD_PATH); \
		$(ECHO) "Compilation done."; \
	else \
		$(ECHO) "Nothing to do."; \
	fi
	
rebuild: cleanall build
	
%.so: $(BUILD_PATH)%.o
	$(CPP) $(CPPSOFLAGS) -o $@ $< $(CERN_ROOT_LINK)
	
$(BUILD_PATH)%.o: $(ANALYSIS_SRC_PATH)%.cc $(ANALYSIS_HEADER_PATH)%.h
	@if ! [ -d $(BUILD_PATH) ]; \
	then \
		$(MKDIR) -p $(BUILD_PATH);\
	fi
	$(CPP) $(CPPFLAGS) $(CERN_ROOT_FLAGS) $(TBMON2_INCLUDE) -std=c++11 -c -MMD -MP -MF $@.d -o $@ $<
		
cleanall:
	@if [ $(shell ls | grep ".*\.so" | wc -l) != "0" ]; \
	then \
		$(RM) $(ANALYSIS_SO); \
		$(ECHO) "Clean up done."; \
	else \
		$(ECHO) "Nothing to do."; \
	fi
		
