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

Package := SctTest
IDLS := SctTestApi.idl
BINS := SctTest SctHighLevelTest
JARS := SctTest.jar
SCRIPTS := $(wildcard *.pl)
JAVAFLAGS += -d classes
IDLFLAGS := $(IDLS:.idl=.cppidl)
JIDLFLAGS := $(IDLS:.idl=.javaidl)

#Flags

CPPFLAGS += $(ROOTINCLUDES)
LDLIBS +=  -lsctConfIPC $(ROOTLIBS)

#Phony Targets
.PHONY: all c++ java test install clean install_bin install_idl idls jidls javacompile jinstall install_scripts

all: c++ java
c++: idls
compile: $(BINS) install
javacompile: classes $(JARS) jinstall
jinstall: $(ShareLibDir)/$(JARS) install_scripts
java: jidls
idls: $(IDLFLAGS)
	$(MAKE) compile

jidls: $(JIDLFLAGS)
	$(MAKE) javacompile

install: install_bin install_idl install_scripts
distclean: clean
	-rm -rf *.cc *.hh *.cppidl *.d classes SctTestApi SctTestApi.javaidl
clean:
	-rm -f *.o $(BINS) built *.jar
install_bin: $(addprefix $(BinDir)/,$(BINS))
install_idl: $(IncludeDir)/$(Package) $(addprefix $(IncludeDir)/$(Package)/,$(IDLS))
install_scripts: $(addprefix $(ShareBinDir)/,$(SCRIPTS)) $(ConfigDir)/TestConfig/templateRod.xml

#Real targets

SRCS := $(filter-out HighLevel%,$(wildcard *.cpp))
OBJS := $(SRCS:.cpp=.o) SctTestApi-server-stubs.o SctTestApi.o
JSRCS := $(shell find -name "*.java")

SctTest: LDLIBS += -lDSctApiServer
SctTest: $(OBJS)
	$(BINCMD)

SctHighLevelTest: LDLIBS += -lSctData -lSct
SctHighLevelTest: HighLevelMain.o HighLevelApi.o $(filter-out TestApi.o SctTestMain.o, $(OBJS))
	$(BINCMD)

classes:
	$(MKDIR)

$(JARS): built $(JARMANIFEST)
	$(JARCMD) -C classes .

built: $(JSRCS)
	$(JAVACMD) && touch $@

$(ShareLibDir)/$(JARS): $(JARS)
	$(CPCMD)


#Patterns
%.o: %.cpp
	$(CPPCMD)
%.o: %.cc
	$(CPPCMD)
%.cppidl: $(CURDIR)/%.idl
	@echo $^
	$(CPPIDLCMD) && touch $@
$(ConfigDir)/TestConfig/%: %
	$(CPCMD)
$(ShareBinDir)/%: %
	$(CPCMD)
$(BinDir)/%: %
	$(CPCMD)
$(IncludeDir)/$(Package)/%.idl: %.idl
	$(CPCMD)
$(IncludeDir)/$(Package):
	$(MKDIR)

%.javaidl: %.idl
	$(JAVAIDLCMD) && touch $@


#dependencies
$(BINS): $(DEPENDLIBCMD)

%.d: %.cpp
	$(DEPENDCMD)

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