#---------------------------------------------- Macros and utilities ----------

### MACROS ###

# File suffixes definition
ObjSuf        := o
SrcSuf        := cc
cSrcSuf       := c
ExeSuf        := exe
DllSuf        := so
HeaderSuf     := h
OutPutOpt     := -o

# Path to datadisplay sources
SRC           := $(shell cd ../src;pwd)

# Libraries definition
ROOTLIBS      := -L$(ROOTSYSLIB) -lCore -lCint -lHist -lGraf -lGraf3d -lMatrix \
                -lGpad -lPostscript -lGui
ROOTGLIBS     := 

FDLIBS        := $(DIRFD)/$(UNAME)/libFd.a
FRLIBS        := $(DIRFR)/$(UNAME)/libFrame.a
XFORMLIBS     := $(DIRXFORMS)/$(UNAME)/libforms.a
CFGLIBS       := $(DIRCFG)/$(UNAME)/libCfg.a
CBFLIBS       := $(DIRCBF)/$(UNAME)/libCbf.a
CMLIBS        := $(DIRCM)/$(UNAME)/libCm.a
CSETLIBS      := $(DIRCSET)/$(UNAME)/libCSet.a $(DIRCSET)/$(UNAME)/libReg.a

ifeq ($(NOCM),NOCM)
GLIBS         := $(ROOTLIBS) $(ROOTGLIBS) $(GENLIBS) $(FRLIBS) $(XFORMLIBS) 
else
GLIBS         := $(ROOTLIBS) $(ROOTGLIBS) $(GENLIBS) \
                $(FDLIBS) $(FRLIBS) $(CFGLIBS) $(CBFLIBS) $(XFORMLIBS) $(CMLIBS) $(CSETLIBS) \
                $(DIRDB)/$(UNAME)/libDb.a $(DIREL)/$(UNAME)/libEl.a $(DIRSU)/$(UNAME)/libSu.a
endif


# Compiler flags
CXXALLFL      := $(CXXOPTFL) $(CXXGENFL)

# Includes
CXXINC        := -I$(SRC) -I$(SRC)/xform -I$(SRC)/mysiesta -I$(DIRCBF)/src -I$(DIRCFG)/src \
                -I$(DIRFR)/src -I$(ROOTSYS)/include -I$(DIRXFORMS)/src \
                -I$(DIRFD)/src -I$(DIRCSET)/src -I$(DIRCM)/src \
                -I$(DIRDB)/src -I$(DIREL)/src -I$(DIRSU)/src
CXXFLAGS      := $(CXXALLFL) $(CXXINC)

#----------------------------------------------- Programs -------
### Main program ###

MAINDDS    := $(SRC)/dataDisplay.c
MAINDDO    := $(OBJD)/dataDisplay.$(ObjSuf)
DDMAIN     := $(OBJD)/dataDisplay

### Wrapper for fl_check_forms ###

CHECKS     := $(SRC)/Wrapper_fl_check_forms.$(SrcSuf)
CHECKH     := $(SRC)/Wrapper_fl_check_forms.$(SrcSuf) \
             $(SRC)/Wrapper_LinkDef.h
CHECKDICTS := $(OBJD)/Wrapper_checkDict.$(SrcSuf)
CHECKDICTH := $(OBJD)/Wrapper_checkDict.$(HeaderSuf)
CHECKDICTO := $(OBJD)/Wrapper_checkDict.$(ObjSuf)

### Zoom X as last ###

ZOOMS     := $(SRC)/mysiesta/URZoomSeveral.$(SrcSuf)
ZOOMH     := $(SRC)/mysiesta/URZoomSeveral.$(SrcSuf) \
             $(SRC)/mysiesta/URZoomSeveral_LinkDef.h
ZOOMDICTS := $(OBJD)/URZoomSeveralDict.$(SrcSuf)
ZOOMDICTH := $(OBJD)/URZoomSeveralDict.$(HeaderSuf)
ZOOMDICTO := $(OBJD)/URZoomSeveralDict.$(ObjSuf)

### Plot class ###

VDYPLOTS     := $(SRC)/mysiesta/VDyPlot.$(SrcSuf)
VDYPLOTH     := $(SRC)/mysiesta/VDyPlot.$(HeaderSuf)
VDYPLOTDICTS := $(OBJD)/VDyPlotDict.$(SrcSuf)
VDYPLOTDICTH := $(OBJD)/VDyPlotDict.$(HeaderSuf)
VDYPLOTDICTO := $(OBJD)/VDyPlotDict.$(ObjSuf)

### dataDisplay objects ###

DDO       := $(OBJD)/DyXform.o \
             $(OBJD)/DyVar.o \
             $(OBJD)/DyCm.o \
             $(OBJD)/DyDd.o \
             $(OBJD)/DyConfig.o \
             $(OBJD)/DyDump.o \
             $(OBJD)/DyFiles.o \
             $(OBJD)/DyHelp.o \
             $(OBJD)/DyPlot.o \
             $(OBJD)/DySiesta.o \
             $(OBJD)/DyVisu.o \
             $(OBJD)/cmservers.o \
             $(OBJD)/dumpdata.o \
             $(OBJD)/getdd.o \
             $(OBJD)/inputfile.o \
             $(OBJD)/mainbrowser.o \
             $(OBJD)/plot1d.o \
             $(OBJD)/mainpanel.o \
             $(OBJD)/plot2d.o \
             $(OBJD)/plotaudio.o \
             $(OBJD)/plotgenepar.o \
             $(OBJD)/plotfft.o \
             $(OBJD)/plotffttime.o \
             $(OBJD)/plottrfct.o \
             $(OBJD)/plottime.o \
             $(OBJD)/UArrayL.o \
             $(OBJD)/UFrameL.o \
             $(OBJD)/UJobL.o \
             $(OBJD)/UMathL.o \
             $(OBJD)/URPlot.o \
             $(OBJD)/USignalL.o \
             $(OBJD)/URootAccess.o \
             $(OBJD)/VDyPlot.o \
             $(OBJD)/VDyPlotDict.o \
             $(OBJD)/URZoomSeveralDict.o \
             $(OBJD)/Wrapper_checkDict.o \
             $(OBJD)/fselector.o

#--------------------------------------------------------- All ----------------

PROGRAMS   := $(DDMAIN)

#------------------------------------------------------ Rules ----------------
### General object generation

#.SUFFIXES: .$(ObjSuf) .$(cSrcSuf) .$(SrcSuf)
.SUFFIXES: .$(ObjSuf) .$(cSrcSuf)

$(OBJD)/%.$(ObjSuf): $(SRC)/%.$(cSrcSuf)
	$(CC) $(CXXFLAGS) -c $< -o $(OBJD)/$*.o

$(OBJD)/%.$(ObjSuf): $(SRC)/mysiesta/%.$(SrcSuf)
	$(CXX) $(CXXFLAGS) -c $< -o $(OBJD)/$*.o

$(OBJD)/%.$(ObjSuf): $(SRC)/mysiesta/%.$(cSrcSuf)
	$(CC) $(CXXFLAGS) -c $< -o $(OBJD)/$*.o

$(OBJD)/%.$(ObjSuf): $(SRC)/xform/%.$(cSrcSuf)
	$(CC) $(CXXFLAGS) -c $< -o $(OBJD)/$*.o

#$(OBJD)/%.$(ObjSuf): $(SRC)/xform/%.$(SrcSuf)
#	$(CXX) $(CXXFLAGS) -c $< -o $(OBJD)/$*.o

$(OBJD)/%.$(ObjSuf): $(SRC)/%.$(SrcSuf)
	$(CXX) $(CXXFLAGS) -c $< -o $(OBJD)/$*.o

#--------------------------------------------------------- Targets ------------

### ALL ############################################

all:           $(PROGRAMS)

### Main program dataDisplay ################################

$(DDMAIN): $(DDO) $(MAINDDO)
		$(LD) $(LDFLAGS) $(MAINDDO) $(DDO) $(GLIBS) -L$(OBJD) $(OutPutOpt) $(DDMAIN)

### Plot class ################################

$(VDYPLOTDICTS): $(VDYPLOTS)
	@echo "Generating dictionary $(VDYPLOTDICTS)..."
#  rootcint doesn't accept generation of files in other directories
#  NOT TRUE anymore, have to change
	$(ROOTSYSBIN)/rootcint -f $(VDYPLOTDICTS) -c $(VDYPLOTH)

$(VDYPLOTDICTO): $(VDYPLOTDICTS)
	$(CXX) $(CXXFLAGS) -c $(VDYPLOTDICTS) -o $(VDYPLOTDICTO)

### Wrapper to fl_check_forms for ROOT ################################

$(CHECKDICTS): $(CHECKS)
	@echo "Generating dictionary $(CHECKDICTS)..."
#  rootcint doesn't accept generation of files in other directories
#  NOT TRUE anymore, have to change
	$(ROOTSYSBIN)/rootcint -f $(CHECKDICTS) -c $(CHECKH)

$(CHECKDICTO): $(CHECKDICTS)
	$(CXX) $(CXXFLAGS) -c $(CHECKDICTS) -o $(CHECKDICTO)

### Zoom X as last ################################

$(ZOOMDICTS): $(ZOOMS)
	@echo "Generating dictionary $(ZOOMDICTS)..."
#  rootcint doesn't accept generation of files in other directories
#  NOT TRUE anymore, have to change
	$(ROOTSYSBIN)/rootcint -f $(ZOOMDICTS) -c -D__CINT__ $(ZOOMH)

$(ZOOMDICTO): $(ZOOMDICTS)
	$(CXX) $(CXXFLAGS) -c $(ZOOMDICTS) -o $(ZOOMDICTO)

### Standard targets ###########################################

clean:
		@rm -f $(MAINDDO)
		@rm -f $(DDO) $(CHECKDICTS) $(CHECKDICTO) $(CHECKDICTH)
		@rm -f $(ZOOMDICTS) $(ZOOMDICTO) $(ZOOMDICTH)
		@rm -f $(VDYPLOTDICTS) $(VDYPLOTDICTO) $(VDYPLOTDICTH)
		@rm -rf core so_locations cxx_repository Make-depend.bak

distclean:
		@rm -f $(MAINVGO) $(DDMAIN) $(MAINDDO)
		@rm -f $(DDO) $(CHECKDICTS) $(CHECKDICTO) $(CHECKDICTH)
		@rm -f $(ZOOMDICTS) $(ZOOMDICTO) $(ZOOMDICTH)
		@rm -f $(VDYPLOTDICTS) $(VDYPLOTDICTO) $(VDYPLOTDICTH)
		@rm -rf core so_locations cxx_repository Make-depend.bak

depend:
		@$(ROOTSYS)/bin/rmkdepend -Y -w 3000 -f Make-depend \
          --  -I$(SRC)/mysiesta -I$(SRC)/xform -I$(SRC) --  \
          $(SRC)/*/*.cc $(SRC)/*/*.c $(SRC)/*.cc $(SRC)/*.c > /dev/null 2>&1

#include Make-depend
