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

.PHONY: all install jars install_bins install_libs clean distclean java javaTests c++ javacompile install_c++ install_java

all: c++ java install

c++:  config_server config_client configArchiveServer install_c++ c++Tests 
c++Tests:  doAll create

JARS := sctConf.jar

javaTests: test_client.class doAll.class

java: configuration.javaidl
	$(MAKE) javacompile

install: install_java install_c++

javacompile: classes $(JARS) javaTests install_java

# TDAQ includes already done by Makefile.include
JINCLUDES = -i $(TDAQ_INST_PATH)/include

LDLIBS += -lcmdline -lpthread
CPPFLAGS += `xml2-config --cflags`
XMLLIBS := $(filter-out -lm, $(shell xml2-config --libs))
LDLIBS += $(XMLLIBS) -lSct -lrccomms -lboost_thread

SRCS := config_client.cc configipc.cc configArchiveServer.cc configserver.cc configserverMain.cc sctConf.cc sctConf-server-stubs.cc doAll.cc
HDRS := sctConf.hh configipc.h marshalling.h

JAVAFLAGS += -d classes
JSRCS := $(shell find -name "*.java")

# The C++ wrapper for ILU config + the ILU stub
IPCSOOBJS := configipc.o sctConf.o

install_c++: install_bins install_libs install_headers install_idl
install_java: $(addprefix $(ShareLibDir)/,$(JARS)) install_idl
install_idl: $(IncludeDir)/sctConf $(IncludeDir)/sctConf/configuration.idl
install_headers: $(addprefix $(IncludeDir)/sctConf/,$(HDRS))
install_bins: $(BinDir)/config_server $(BinDir)/configArchiveServer $(ShareBinDir)/sctConfGUI
install_libs: $(LibDir)/libsctConfIPC.so



#	@echo "To run the java class, make sure . is in the classpath then type: java -Dipc.ref.file=$IPC_REF_FILE sct.test_client"

config_server: LDLIBS += -lsctconf
config_server: configserver.o configserverMain.o sctConf-server-stubs.o sctConf.o
	gcc $(LDLIBS) -o config_server configserver.o configserverMain.o sctConf-server-stubs.o sctConf.o

configArchiveServer: LDLIBS += -lsctconf -lSct
configArchiveServer: configArchiveServer.o configserver.o sctConf-server-stubs.o sctConf.o
	gcc $(LDLIBS) -o configArchiveServer configArchiveServer.o configserver.o sctConf-server-stubs.o sctConf.o

configserver.o: sctConf.hh

config_client: config_client.o sctConf.o
	gcc $(LDLIBS) -o config_client config_client.o sctConf.o

create: LDLIBS+= -lsctConfIPC -lsctconf
doAll: LDLIBS+= -lsctConfIPC -lsctconf 

libsctConfIPC.so: $(IPCSOOBJS)
	$(CC) -shared -o $@ $(filter %.o, $^) $(LDFLAGS) $(LDLIBS)

sctConf-server-stubs.cc sctConf.cc sctConf.hh: configuration.idl
	c++-stubber ./configuration.idl
	@echo "Check all methods overridden by configserver.h"
	@bash checkSctConf || (rm sctConf.hh && false)

$(LibDir)/libsctConfIPC.so: $(LibDir) libsctConfIPC.so
	cp libsctConfIPC.so $(LibDir)/libsctConfIPC.so

$(LibDir):
	mkdir -p $(LibDir)

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

$(ShareBinDir)/%: %
	$(CPCMD)

#Java stuff:

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

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

classes:
	$(MKDIR)

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

%.class: %.java built
	javac -sourcepath . $<


#Install copy stuff

$(ShareLibDir)/%.jar: %.jar
	$(CPCMD)

$(IncludeDir)/sctConf/%: %
	$(CPCMD)

$(IncludeDir)/sctConf:
	$(MKDIR)

clean:
	-$(RM) *.o *.so core *~ *.jar sctConf-server-stubs.cc sctConf.cc sctConf.hh built doAll.class test_client.class

distclean: clean
	-$(RM) -f *.d *.javaidl -r sctConf classes

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

#Standard patterns

%.o: %.cxx
	g++ $(CPPFLAGS) $(INCLUDES) -o $@ -c $<

%.d: %.c
	$(DEPENDCMD)

%.d: %.cpp
	$(DEPENDCMD)

%.d: %.cxx
	$(DEPENDCMD)

%.d: %.cc
	$(DEPENDCMD)

