#Variables
include $(SCT_DAQ_ROOT)/build/Makefile.include
#Commands
include $(SCT_DAQ_ROOT)/build/Makefile.commands

#Lists of source files
HDRS := $(wildcard *.h)
ALLHDRS :=  $(shell find -name "*.h")
SRCS := $(wildcard *.cpp)
ALLSRCS := $(shell find -name "*.cpp") $(shell find -name "*.cc")
OBJS := $(SRCS:.cpp=.o)
ALLOBJS := $(ALLSRCS:.cpp=.o) $(ALLSRCS:.cc=.o)

#Flags
CPPFLAGS := $(filter-out -Woverloaded-virtual,$(CPPFLAGS)) $(ROOTINCLUDES)
LDLIBS += -lSct -lSctData -lSctApiIPC -lrcl -lrccomms -lchsm -lconfdb -loks -ldal
INCLUDES += $(ROOTINCLUDES)

#Phony Targets
.PHONY: all c++ java install clean distclean Ipc ConfigUpdater install_headers install_idl

all: c++

c++: ControlData Ipc
compile: $(OBJS) ConfigUpdater CalibrationController install

#Do nothing
java: install_idl

Ipc:
	$(MAKE) -C ipc
	$(MAKE) compile

ConfigUpdater:
	$(MAKE) -C ConfigUpdater

ControlData: IS IS/CalibrationControllerStatus.h

IS:
	$(MKDIR)

IS/CalibrationControllerStatus.h: ../data/ControlData.schema.xml
	is_generator.sh -cpp -d IS $<

install: $(BinDir)/CalibrationController install_headers install_idl

distclean: clean
	$(MAKE) -C ipc $(MAKECMDGOALS)
	$(MAKE) -C ConfigUpdater $(MAKECMDGOALS)		
	-rm -f *.d
	-rm -f IS/*.h

clean:
	$(MAKE) -C ipc $(MAKECMDGOALS)
	$(MAKE) -C ConfigUpdater $(MAKECMDGOALS)	
	-rm -f *.o CalibrationController

install_headers: $(addprefix $(IncludeDir)/CalibrationController/,$(HDRS) $(wildcard IS/*.h))
install_idl: $(IncludeDir)/CalibrationController/CalibrationController.idl

#Real targets
CalibrationController: LDLIBS += -lsctConfIPC
CalibrationController: $(ALLOBJS)
	$(BINCMD)

$(IncludeDir)/CalibrationController/ :
	$(MKDIR) 	

$(IncludeDir)/CalibrationController/IS/ :
	$(MKDIR) 	

$(IncludeDir)/CalibrationController/%.h: %.h $(IncludeDir)/CalibrationController $(IncludeDir)/CalibrationController/IS
	$(CPCMD)

$(IncludeDir)/CalibrationController/CalibrationController.idl: ipc/CalibrationController.idl $(IncludeDir)/CalibrationController
	$(CPCMD)

#Patterns
%.o: %.cpp
	$(CPPCMD)

$(BinDir)/%: %
	$(CPCMD)

#dependencies
CalibrationController: $(DEPENDLIBCMD)

%.d: %.cpp
	$(DEPENDCMD)

ifeq ($(INCLUDEDEPENDANCIES),)
include $(SRCS:.cpp=.d)
endif
