#---------------------------------------------------------
#-- start of constituents_header ------

include ${CMTROOT}/src/Makefile.core
#include ${CMTROOT}/mgr/Unix.make

ifdef tag
CMTEXTRATAGS = $(tag)
else
tag       = $(CMTCONFIG)
endif

tags      = $(tag),$(CMTEXTRATAGS)

PACKAGE = CMT
${PACKAGE}_tag = $(tag)

cmt_local_tagfile = $(bin)$(${PACKAGE}_tag).make

#-include $(cmt_local_tagfile)
#include $(cmt_local_tagfile)
include ${CMTROOT}/mgr/Unix.make

#cmt_final_setup = $(bin)setup.make

ifneq ($(wildcard $(cmtexe)),)
all :: cmt
	$(silent)\cd $(bin) && \rm -f cmt && ln -s cmt.exe cmt
	$(echo) all ok
else
#---------------------------------------------------------
#
# Re-building CMT
#
#---------------------------------------------------------
ifneq ($(cppdepflags),)
all :: cmt
else
all :: cmt post_build done
endif
	$(silent)\cd $(bin) && \rm -f cmt && ln -s cmt.exe cmt
	$(echo) all ok
#@cd $(bin); /bin/rm -f cmt; cp cmt.exe cmt

done : cmt post_build 
	@echo "CMT has been succesfully rebuilt."

#---------------------------------------------------------
#post_build :: cmt cmt_dependencies.make $(bin)/cmt_dependencies.make
post_build :: cmt cmt_dependencies.make
	@echo post_build done

#cmt_dependencies.make $(bin)/cmt_dependencies.make : $(cmtexe)
cmt_dependencies.make : $(cmtexe)
	$(cmtexe) -quiet build dependencies cmt -all_sources -no_stamps -out=$(bin)/cmt_dependencies.make
	cp $(bin)/cmt_dependencies.make ../mgr
	$(cmtexe) -quiet build dependencies cmt -all_sources -out=$(bin)/cmt_dependencies.make
#---------------------------------------------------------
endif

dirs :: requirements
	@if test ! -d $(bin) ; then $(mkdir) -p $(bin) ; fi

requirements :
	@if test ! -r requirements ; then echo "No requirements file" ; fi

#-- end of constituents_header ------

#-- start of constituent ------
CONSTITUENT = cmt
#cmt_final_setup_${CONSTITUENT} = $(bin)setup.make
cmt_final_setup_cmt = requirements
cmt_local_${CONSTITUENT}_makefile = $(bin)${CONSTITUENT}.make
#cmt_local_tagfile_${CONSTITUENT} = $(bin)$(${PACKAGE}_tag).make
cmt_local_tagfile_${CONSTITUENT} = ${CMTROOT}/mgr/Unix.make

ifdef STRUCTURED_OUTPUT
${CONSTITUENT}dirs :
	@if test ! -d $(bin)${CONSTITUENT}; then $(mkdir) -p $(bin)${CONSTITUENT}; fi
	$(echo) "STRUCTURED_OUTPUT="$(bin)${CONSTITUENT}
else
${CONSTITUENT}dirs : ;
endif

ifneq ($(wildcard $(cmtexe)),)

ifndef QUICK
$(cmt_local_${CONSTITUENT}_makefile) :: $(${CONSTITUENT}_dependencies) dirs
	$(echo) "(GNUmakefile) Building ${CONSTITUENT}.make"; \
	  $(cmtexe) -tag=$(tags) $(${CONSTITUENT}_extratags) build constituent_config -out=$(cmt_local_${CONSTITUENT}_makefile) ${CONSTITUENT}
else
$(cmt_local_${CONSTITUENT}_makefile) : $(${CONSTITUENT}_dependencies) dirs
	if [ ! -f $@ ] || [ ! -f $(cmt_local_tagfile_${CONSTITUENT}) ] || \
	  [ ! -f $(cmt_final_setup_${CONSTITUENT}) ]; then \
	  test -z "$(cmtmsg)" || \
	  echo "$(CMTMSGPREFIX)" "(GNUmakefile) Building ${CONSTITUENT}.make"; \
	  $(cmtexe) -tag=$(tags) $(${CONSTITUENT}_extratags) build constituent_config -out=$(cmt_local_${CONSTITUENT}_makefile) ${CONSTITUENT}; \
	  fi
endif

else

build_dependencies = test -f $(bin)CMT_setup.make || touch $(bin)CMT_setup.make ; echo 
#build_dependencies = test -d $(bin) || mkdir -p $(binshort); test -f $(cmtexe) || cp ../mgr/cmt_dependencies.make $(bin); test -f $(bin)CMT_setup.make || touch $(bin)CMT_setup.make ; echo 

${CONSTITUENT}_dependencies += $(bin)/cmt_dependencies.make

$(bin)/cmt_dependencies.make : dirs
	if [ ! -f $@ ]; then \
	  test -z "$(cmtmsg)" || \
	  echo "$(CMTMSGPREFIX)" "(GNUmakefile) Copying $(@F)"; \
	  \cp ${CMTROOT}/mgr/$(@F) $@; \
	  fi

$(cmt_local_${CONSTITUENT}_makefile) :: $(${CONSTITUENT}_dependencies) dirs
	if [ ! -f $@ ]; then \
	  test -z "$(cmtmsg)" || \
	  echo "$(CMTMSGPREFIX)" "(GNUmakefile) Copying $(@F)"; \
	  \cp ${CMTROOT}/mgr/$(@F) $@; \
	  fi

endif

${CONSTITUENT} :: $(${CONSTITUENT}_dependencies) $(cmt_local_${CONSTITUENT}_makefile) dirs ${CONSTITUENT}dirs
	$(echo) "(GNUmakefile) Starting ${CONSTITUENT}"
	@$(MAKE) -f $(cmt_local_${CONSTITUENT}_makefile) ${CONSTITUENT} cmt_local_tagfile_${CONSTITUENT}=${CMTROOT}/mgr/Unix.make cmt_final_setup_cmt=$(cmt_final_setup_cmt)
	$(echo) "(GNUmakefile) ${CONSTITUENT} done"
#-- end of constituent ------

cmt_makefile = $(bin)cmt.make
build_cmt_makefile : build_cmt_tagfile
	@echo "Building $(cmt_local_${CONSTITUENT}_makefile)"; \
	  $(cmtexe) -tag=$(tags) $(${CONSTITUENT}_extratags) build constituent_makefile -out=$(cmt_local_${CONSTITUENT}_makefile) ${CONSTITUENT}

build_cmt_tagfile : $(cmtexe)
	@echo "Building $(cmt_local_tagfile)"; \
	  $(cmtexe) -tag=$(tags) build tag_makefile | grep -v '^CMTINSTALLAREA=' >$(cmt_local_tagfile)
#---------------------------------------------------------

#---------------------------------------------------------
# This procedure installs a hook into the commitinfo management file.
# then the 
#---------------------------------------------------------
installcvs :
	cd `echo ${CVSROOT} | cut -f4 -d':'`/CVSROOT;\
	if [ "`grep cmt_buildcvsinfos loginfo`" = "" ] ; then \
	  echo "======== Configuring loginfo in `pwd`>>>>>> "; \
	  chmod u+w loginfo; \
	  echo '.cmtcvsinfos $${CVSROOT}/CVSROOT/cmt_buildcvsinfos2.sh' >> loginfo; \
	  chmod u-w loginfo; \
	else \
	  echo "======== loginfo already configured in `pwd` >>>>>> "; \
	fi; \
	cp ${CMTROOT}/mgr/cmt_buildcvsinfos2.sh .; \
	/bin/rm -rf ../.cmtcvsinfos/*

#---------------------------------------------------------

#---------------------------------------------------------
###binaries = Linux OSF1 HP-UX VisualC
##binaries = $(shell '/usr/bin/find ../ -name cmt.exe')


#---------------------------------------------------------
# Regenerates the Doxygen documentation of CMT
# A priori as it is written it works at LAL only
# The result is also transported to the Web site
#---------------------------------------------------------
doxygen ::
	. /lal/Doxygen/Linux/setup.sh; cd ../doc; /bin/rm -Rf Doxygen; doxygen
	${CMTROOT}/mgr/cmt_export.sh CMT/ ${CMTROOT}/doc/Doxygen

#---------------------------------------------------------
# Converts CMTDoc.html CMTFAQ.html into pdf and ps
#---------------------------------------------------------
pdf ::
	html2ps -nu -o ../doc/CMTDoc.ps ../doc/CMTDoc.html
	ps2pdf ../doc/CMTDoc.ps ../doc/CMTDoc.pdf
	html2ps -nu -o ../doc/CMTFAQ.ps ../doc/CMTFAQ.html
	ps2pdf ../doc/CMTFAQ.ps ../doc/CMTFAQ.pdf

#python = python
python = /afs/cern.ch/sw/lcg/external/Python/2.3.4/rh73_gcc323/bin/python
#python = /cygdrive/c/Arnault/Python23/python.exe

#---------------------------------------------------------
# Generates the html form of the doc from the XML form
#---------------------------------------------------------
gendoc ::
	@cd ../doc; python gendoc.py CMTDoc.xml > CMTDoc.html
	@echo "CMTDoc.html generated from CMTDoc.xml"


#---------------------------------------------------------
# Transfer the docs into the Web site.
#---------------------------------------------------------
docs ::
	${CMTROOT}/mgr/cmt_export.sh CMT/ ${CMTROOT}/doc/CMTDoc.html
	${CMTROOT}/mgr/cmt_export.sh CMT/ ${CMTROOT}/doc/CMTDoc.ps
	${CMTROOT}/mgr/cmt_export.sh CMT/ ${CMTROOT}/doc/CMTDoc.pdf
	${CMTROOT}/mgr/cmt_export.sh CMT/ ${CMTROOT}/doc/CMTFAQ.html
	${CMTROOT}/mgr/cmt_export.sh CMT/ ${CMTROOT}/doc/ReleaseNotes.html
	${CMTROOT}/mgr/cmt_export.sh CMT/ ${CMTROOT}/ChangeLog
	${CMTROOT}/mgr/cmt_export.sh CMT/ ${CMTROOT}/mgr/ChangeLog.php
	${CMTROOT}/mgr/cmt_export.sh CMT/ ${CMTROOT}/doc/CMTFAQ.ps
	${CMTROOT}/mgr/cmt_export.sh CMT/ ${CMTROOT}/doc/CMTFAQ.pdf

#        echo '  <tr><td><a href="CMT-'$${version}'-1.i386.rpm">RPM for redhat 7.2</a></td></tr>' >>doc/CMTDownload.html;

#---------------------------------------------------------
# Construct the pacman file from the generic form
#---------------------------------------------------------
pacman ::
	version=`cmt version`; \
	sed -e 's#<version>#'"$${version}"'#g' CMT.pacman >CMT-$${version}.pacman

#---------------------------------------------------------
# Construct the tar balls for the binary kits for all
# existing binaries available in ../*.cmt.exe
# Binary kits are now autonomous (ie they don't require
# the source kit)
#---------------------------------------------------------
bintar ::
	cd ..; root=`pwd`; \
	tag=`cmt version`; \
	version=`basename $${root}`; \
	tag=$${version} ; \
	cat doc/CMTDownload1.html >| doc/CMTDownload.html; \
        echo '  <tr><td><a href="CMT'$${version}'.tar.gz">Source kit</a> </td></tr>' >> doc/CMTDownload.html; \
	binaries=`/usr/bin/find ./ -name cmt.exe | sed -e 's#[.]/##' -e 's#/.*##'`; \
        for f in `echo $${binaries}`; do \
          echo '  <tr><td><a href="CMT'$${version}$${f}'.tar.gz">'$${f}'</a> </td></tr>' >> doc/CMTDownload.html; \
        done; \
	cat doc/CMTDownload2.html >> doc/CMTDownload.html; \
	${CMTROOT}/mgr/cmt_export.sh CMT/ $${root}/doc/CMTDownload.html $${tag}; \
	if test -d rpm; then \
	  ${CMTROOT}/mgr/cmt_export.sh CMT/ $${root}/rpm/CMT-$${version}-1.i386.rpm $${tag}; \
	fi; \
	cd ../../; \
	for branch in `echo $${binaries}` ; \
	do \
	  if test $${branch} = VisualC; then \
	    /bin/rm -rf CMT/$${version}/$${branch}/cmt ; \
	  else \
	    /bin/rm -rf CMT/$${version}/$${branch}/*.o ; \
	    ln -s cmt.exe CMT/$${version}/$${branch}/cmt ; \
	  fi ; \
	  echo $${branch} ; \
	  tarfile=CMT/CMT$${version}$${branch}.tar; \
	  tar cf $${tarfile} CMT/$${version}/mgr CMT/$${version}/src CMT/$${version}/$${branch} ; \
	  gzip $${tarfile}; \
	  ${CMTROOT}/mgr/cmt_export.sh CMT/ $${tarfile}.gz $${tag} ; \
	done


#----------------------------------------------------------
#
#  Building an RPM for CMT.
#
#   reinstallation is done by:
#
#  rpm -Uvh --relocate /CMT=/newdir/CMT CMT-${version}-1.i386.rpm
#
#----------------------------------------------------------
rpm ::
	version=`$(cmtexe) -quiet version`; \
	tempdir=/tmp/CMT; \
	rm -rf $${tempdir}; \
	for f in BUILD RPMS SOURCES SPECS SRPMS ; do \
	  mkdir -p $${tempdir}/$${f}; \
	done; \
	(cd ../; tar cf $${tempdir}/SOURCES/CMT$${version}.tar --exclude mgr src source); \
	gzip $${tempdir}/SOURCES/CMT$${version}.tar; \
	if test ! -d ../rpm; then mkdir -p ../rpm; fi; \
	rpmbuild -ba --define "_topdir $${tempdir}" --define "_version $${version}" CMT.spec; \
	cp $${tempdir}/RPMS/i386/CMT-$${version}-1.i386.rpm ../rpm ; \
	cp $${tempdir}/SRPMS/CMT-$${version}-1.src.rpm ../rpm ; \
	rm -r $${tempdir}

#
#        cp CMT.spec $${tempdir}; \
#        find ../fragments ../mgr ../src ! -path '*/CVS*' ! -name '*~' ! -type d | \
#          sed -e 's#[.][.]#%{prefix}/%{version}#' >>$${tempdir}/CMT.spec ; \
#


#----------------------------------------------------------
# Construct a source kit
#----------------------------------------------------------
srctar ::
	${CMTROOT}/mgr/cmt_tar_export.sh source mgr src Visual java doc


#----------------------------------------------------------
# Construct the kits
#----------------------------------------------------------
Export :: docs srctar bintar
	@echo Export done

democlean ::
	/bin/rm -rf ../demo/*

demo_location = ../demo
demo_sequence = demo1

#----------------------------------------------------------
# Run the autotest sequence
#----------------------------------------------------------
demo :: democlean
	@echo "------------------------------------------"
	@echo "Starting general auto test sequence"
	@echo "  Creating $(demo_location) work area..."
	@mkdir -p $(demo_location)
	@echo "  Creating all $(demo_sequence) packages..."
	cd $(demo_location); \
	version=`$(cmtexe) -quiet version`; \
	($(cmtexe) -quiet run_sequence ${CMTROOT}/src/demo/$(demo_sequence).cmt | \
	  sed -e "s#$${CMTROOT}#"'$${CMTROOT}'"#" \
	      -e "s#$${version}#"'$${version}'"#" \
	      -e "s#$${CMTCONFIG}#"'$${CMTCONFIG}'"#"; \
	  ) >$(demo_sequence).txt
	@echo "  Comparing results with reference output (${CMTROOT}/src/demo/$(demo_sequence).out) ..."
	@cd $(demo_location); \
	diff $(demo_sequence).txt ${CMTROOT}/src/demo/$(demo_sequence).out; s=$$?; \
	if test $${s} = 0; then \
	  echo "    => no differences"; \
	else \
	  echo "    => errors?"; \
	  cp $(demo_sequence).txt ${CMTROOT}/src/demo/$(demo_sequence).out; \
	fi

#---------------------------------------------------------


tprivate :: democlean
	@echo "------------------------------------------"; \
	sequence=tprivate; \
	location=../demo; \
	echo "Starting auto test sequence on private uses"; \
	echo "  Creating $${location} work area..."; \
	mkdir -p $${location}; \
	cd $${location}; \
	version=`$(cmtexe) -quiet version`; \
	echo "  Creating all $${sequence} packages..."; \
	($(cmtexe) -quiet run_sequence ${CMTROOT}/src/demo/$${sequence}.cmt | \
	  sed -e "s#$${CMTROOT}#"'$${CMTROOT}'"#" \
	      -e "s#$${version}#"'$${version}'"#" \
	      -e "s#$${CMTCONFIG}#"'$${CMTCONFIG}'"#"; \
	  ) >$${sequence}.txt; \
	echo "  Comparing results with reference output (${CMTROOT}/src/demo/$${sequence}.out) ..."; \
	diff $${sequence}.txt ${CMTROOT}/src/demo/$${sequence}.out; s=$$?; \
	if test $${s} = 0; then \
	  echo "    => no differences"; \
	else \
	  echo "    => errors?"; \
	  cp $${sequence}.txt ${CMTROOT}/src/demo/$${sequence}.out; \
	fi



#---------------------------------------------------------

help ::
	@echo "------------------------------------------------------------"
	@echo "  [all]      : Default target"
	@echo "  "
	@echo "  installcvs : "
	@echo "  doxygen    : Documentation generation"
	@echo "  docs       : Documentation production and installation"
	@echo "  pdf        : Convert html docs into pdf and ps"
	@echo "  gendoc     : Convert xml doc into html"
	@echo "  srctar     : Production and installation of source tar-ball"
	@echo "                (include Linux binary directory)"
	@echo "  bintar     : Production and installation of binary tar-balls"
	@echo "  rpm        : Production of the RPM"
	@echo "  Export     : Installation in the web site"
	@echo "  democlean  : Cleaning the demo area"
	@echo "  demo       : Run the demo sequence on private uses"
	@echo "      (Site-specific targets for building CMT)"
	@echo "  LAL        : asc lx1 papou1-fe hp2 #virgo-control1"
	@echo "  LHCB       : lxtest hpplus dxplus rsplus"
	@echo "  Atlas      : atlinux atlas50"
	@echo "  Virgo      : ax7 vmpc13a rio0a"
	@echo "  CCIN2P3    : ccars ccahp ccali ccasn"
	@echo "------------------------------------------------------------"

