##################################################################
#
#   makefile
# 
#   for the MARS software
#
##################################################################
# @maintitle

# @code

#
#  please change all system depend values in the 
#  config.mk.${OSTYPE} file 
#
#
include Makefile.conf.$(OSTYPE)
include Makefile.conf.general

#
#PROGRAMS = readraw merpp mars test mona status
PROGRAMS = readdaq readraw merpp mars mona showlog callisto showplot star
SOLIB    = libmars.so
CINT     = M

#
#  connect the include files defined in the config.mk file
#
#    WARNING: the result (whether the linkage works or not) depends on the
#             order of the libraries. It seems, that the most base library
#             must be the last one
#

#
#  ----->>>   mars libraries
#
SUBDIRS = mbase \
	  mastro \
	  mmain \
          mfbase \
          mfilter \
          mdata \
          mhbase \
          mhvstime \
          mhist \
          manalysis \
          msignal \
          mbadpixels \
          mhcalib \
          mhflux \
	  mcalib \
          mpedestal \
          mfileio \
          mreflector \
          mgeom \
          msql \
          mimage \
          mmontecarlo \
          mhft \
          mmc \
          mraw \
          mcamera \
	  mtrigger \
          mpointing \
          mreport \
          mgui \
          mranforest \
          mhistmc \
          mjobs \
          mtools \
	  mstarcam

#LIBRARIES = $(SUBDIRS:%=lib/lib%.a)
LIBRARIES = $(SUBDIRS:=.a)
MRPROPERS = $(SUBDIRS:=.mrproper)
CLEANERS  = $(SUBDIRS:=.clean)
LIBS      = $(SOLIB)

#------------------------------------------------------------------------------
.SUFFIXES: .c .cc .h .o 

SRCFILES =

############################################################
all: $(SOLIB) $(PROGRAMS)
	@echo " Done. "
	@echo " "

static: LIBS=$(SUBDIRS:=/*.o) $(OBJS)
#static: rmlib $(LIBRARIES) $(PROGRAMS)
static: $(LIBRARIES) $(PROGRAMS)
	@echo " Done. "
	@echo " "

include Makefile.rules

#
# Use $(CXX) -v ... for a more verbose output
#
# ROOTGLIBS must be there - why? How can I link the libraries?
$(SOLIB): $(LIBRARIES) $(OBJS) $(HEADERS)
	@echo " Linking shared object $(SOLIB) ..."
	$(CXX) $(CXXFLAGS) $(SOFLAG) $(OBJS) $(SUBDIRS:=/*.o) $(ROOTGLIBS) -o $@

# This is a special workaround to create the shared object (bundle, plugin)
# for root and the dynlib (to be linked with the executable) on Mac OSX
ifneq ($(OSTYPE),darwin)
$(PROGRAMS): $(SOLIB) $(PROGRAMS:=.o)
	@echo " Linking $@ ..." 
	$(CXX) $(CXXFLAGS) $(ROOTGLIBS) $(SOLIB) $@.o $(MARS_LIB) -o $@

# Use this to link the programs statically - for gprof
#$(PROGRAMS): $(OBJS) $(HEADERS) $(PROGRAMS:=.o)
#	@echo " Linking $@ ..." 
#	$(CXX) $(CXXFLAGS) $(ROOTGLIBS) $(OBJS) $(SUBDIRS:=/*.o) $@.o $(MARS_LIB) -o $@
else
$(DYLIB): $(LIBRARIES) $(OBJS) $(HEADERS)
	@echo " Linking dylib $(DYLIB) ..."
	$(CXX) $(CXXFLAGS) $(DYFLAG) $(OBJS) $(SUBDIRS:=/*.o) $(ROOTGLIBS) -o $@

$(PROGRAMS): $(DYLIB) $(PROGRAMS:=.o)
	@echo " Linking mac executable $@ ..." 
	$(CXX) $(CXXFLAGS) $(ROOTGLIBS) $(DYLIB) $@.o $(MARS_LIB) -o $@
endif

dox: $(SOLIB)
	@echo
	@echo " Creating html documentation and logfile dohtml.log..."
	rm -f dohtml.log
	root -b -q dohtml.C 2>&1 >> dohtml.log | tee -a dohtml.log
	@echo " done."
	@echo

#clean:	rmcint rmobjs rmdep rmcore rmlib

mrproper:	$(MRPROPERS) rmbin rmbak rmbakmac rmhtml clean
	@echo " Done."
	@echo " "

tar:	mrproper
	@echo "Making tar-file"
	root -b -q -l -n tar.C
#	@tar cvf ../mars.tar --exclude=Root .rootrc *
#	@gzip -9 ../mars.tar

#Makefile.depend:
#	(! find ./ Makefile.depend -maxdepth 1 -empty 2> /dev/null && \
#	echo " Generating dependancies into Makefile.depend" && \
#	makedepend -- $(INCLUDES) -- $(PROGRAMS:=.cc) $(SRCS) $(SUBDIRS:=/*.cc) -w1024 -f- 2> /dev/null | grep -v Cint | grep -v "/usr/" > Makefile.depend && \
#	echo " ") || find -maxdepth 0 -true > /dev/null
#
#depend:	Makefile.depend	

# @endcode
