####################################################
# Copyright (C) 2001-2009, CompHEP Collaboration   #
# Authors: A. Sherstnev, A.Kryukov                  #
####################################################
# Correct the value of this variable:
#
# The WDIR variable have to point to the 
# user directory where all necessary files 
# for user install will live.
####################################################
WDIR=../comphep_${VERSION}_test

######################################################################################
SHELL=/bin/sh
VERSION=4.5.1
COMPHEP_DISTR=comphep-${VERSION}
PWD=$(shell pwd)
OSTYPE=$(shell uname)
CHEPTMPDIR="/tmp/comphep$(shell id -u)"
ifeq (${LHAPDFPATH},)
LHAPDFLIBNAME=
else
LHAPDFLIBNAME=LHAPDF
LHAPDFLIBPATH=$LHAPDFPATH/lib
endif
F77=$(shell cat F77)
CC=$(shell cat CC)
CFLAGS=$(shell cat CFLAGS)
CLIBS=$(shell cat CLIBS)
FORLIBS=$(shell cat FORLIBS)
RANLIB=$(shell cat RANLIB)
ifneq (${ROOTSYS},)
ROOTFLAGS=$(shell cat ROOTFLAGS)
ROOTLIBS=$(shell cat ROOTLIBS)
else
ROOTFLAGS=
ROOTLIBS=
endif
SUBDIR:=service2 chep_crt polynom num plot symb tab mssmlib lanhep
CS=src
SUB_SUBDIR:=$(addprefix $(CS)/, $(SUBDIR))
COMPHEP_BIN_FILES=s_comphep.exe tab_view.exe archiv.exe slhasuspect.exe \
                  mix.exe diag_viewer.exe diag_viewer2.exe pdf_convertor.exe \
                  translator.exe cascade.exe rtupler.exe lanhep.exe \
                  oneclick.exe
BINDIST_FILES=${COMPHEP_BIN_FILES} models help usr include lib Makefile \
              CC CFLAGS CLIBS FORLIBS RANLIB ROOTFLAGS ROOTLIBS \
              launch_n_comphep configure \
              INSTALL strfun comphep32.png comphep64.png comphep128.png \
              RELEASE-NOTES README
DOC_FILES=${PWD}/doc/Makefile ${PWD}/doc/*HOWTO ${PWD}/doc/RELEASE-NOTES

######################################################################################
.PHONY: all precompile compile link doc pdf

all: link
	@echo ${VERSION} > version

pdf:
	$(CC)  $(CFLAGS) -o bin/pdf_convertor.exe src/service2/cteq_internal.c $(CLIBS)

link: compile
	if (test ! -f lib/libevents.a  ); then $(RANLIB) lib/libevents.a; fi
	if (test ! -f lib/libexternal.a); then $(RANLIB) lib/libexternal.a; fi
	if (test ! -f lib/libmix.a     ); then $(RANLIB) lib/libmix.a; fi
	if (test ! -f lib/libmssm.a    ); then $(RANLIB) lib/libmssm.a; fi
	if (test ! -f lib/libnum.a     ); then $(RANLIB) lib/libnum.a; fi
	if (test ! -f lib/libpdf.a     ); then $(RANLIB) lib/libpdf.a; fi
	if (test ! -f lib/libserv.a    ); then $(RANLIB) lib/libserv.a; fi
	if (test ! -f lib/libsymb.a    ); then $(RANLIB) lib/libsymb.a; fi
	if (test ! -f lib/libtab.a     ); then $(RANLIB) lib/libtab.a; fi
	if (test ! -f lib/libtranls.a  ); then $(RANLIB) lib/libtranls.a; fi
#	if (test ! -f lib/liboneclick.a); then $(RANLIB) lib/liboneclick.a; fi
#	if (test ! -f lib/liblanhep.a  ); then $(RANLIB) lib/liblanhep.a; fi

	$(CC) -o bin/tab_view.exe     src/plot/view_tab.o                    -lnum -lserv                          $(CLIBS)
	$(CC) -o bin/mix.exe          src/num/mix.o                          -lmix -levents -lnum -lserv           $(CLIBS)
	$(CC) -o bin/translator.exe   src/num/translator.o src/num/alphas2.o -ltranls -levents -lpdf -lserv        $(CLIBS)
	$(CC) -o bin/cascade.exe      src/num/cascade.o                      -ltranls -levents -lpdf -lserv        $(CLIBS)
#	$(CC) -o bin/oneclick.exe     src/num/oneclick.o                     -loneclick -levents -lpdf -lserv      $(CLIBS)
#	$(CC) -o bin/lanhep.exe       src/lanhep/main.o                      -llanhep                              $(CLIBS) $(FORLIBS)
	$(CC) -o bin/s_comphep.exe    src/symb/s_comphep.o                   -lsymb -lserv -lmssm -lexternal       $(CLIBS) $(FORLIBS)
	$(CC) -o bin/archiv.exe       src/symb/archiv.o                      -lsymb -lserv -lmssm -lexternal       $(CLIBS) $(FORLIBS)
	$(CC) -o bin/diag_viewer.exe  src/num/diag_viewer.o                  -lsymb -lserv -lmssm -lexternal       $(CLIBS) $(FORLIBS)
	$(CC) -o bin/diag_viewer2.exe src/num/diag_viewer2.o                 -lsymb -lserv -lmssm -lexternal       $(CLIBS) $(FORLIBS)
ifneq (${ROOTSYS},)
	$(CXX) $(CFLAGS) -o bin/rtupler.exe      src/num/rtuple.o                       -ltranls -lnum -levents -lpdf -lserv  $(CLIBS) $(FORLIBS) $(ROOTLIBS)
endif
	$(F77) $(CFLAGS) -o bin/slhasuspect.exe  external/suspect2_call.o               -lexternal                            $(CLIBS) $(FORLIBS)

	@echo " "
	@echo "******************************************************************"
	@echo "* Binaries for CompHEP-${VERSION} has been successfully prepared *"
	@echo "*                                                                *"
	@echo "*      Create a user working directory using the command         *"
	@echo "*         make setup WDIR=path_to_your_user_work_dir             *"
	@echo "*  Note 1: Do not use '~' to refer to you home directory         *"
	@echo "*          Use the environment variable HOME                     *"
	@echo "******************************************************************"


compile: precompile doc
	$(MAKE) -C src/service2
	$(MAKE) -C src/chep_crt
	$(MAKE) -C src/num
	$(MAKE) -C src/polynom
	$(MAKE) -C src/symb
	$(MAKE) -C src/mssmlib
	$(MAKE) -C src/plot
	$(MAKE) -C src/tab
#	$(MAKE) -C src/lanhep
	$(MAKE) -C external

precompile:
	@if (test ! -f CC); then \
	  echo " ";\
	  echo "*************************************";\
	  echo " 'make' can not find CC file.";\
	  echo " Launch 'configure' script first.";\
	  echo "*************************************";\
	  echo " ";\
	  exit 99; \
	fi
	@if (test ! -f CFLAGS); then \
	  echo " ";\
	  echo "*************************************";\
	  echo " 'make' can not find CFLAGS file.";\
	  echo " Launch 'configure' script first.";\
	  echo "*************************************";\
	  echo " ";\
	  exit 99; \
	fi
	@if (test ! -f CLIBS); then \
	  echo " ";\
	  echo "*************************************";\
	  echo " 'make' can not find CLIBS file.";\
	  echo " Launch 'configure' script first.";\
	  echo "*************************************";\
	  echo " ";\
	  exit 99; \
	fi
	@if (test ! -f FORLIBS); then \
	  echo " ";\
	  echo "*************************************";\
	  echo " 'make' can not find FORLIBS file.";\
	  echo " Launch 'configure' script first.";\
	  echo "*************************************";\
	  echo " ";\
	  exit 99; \
	fi

doc:
	$(MAKE) -C doc

######################################################################################
.PHONY: clean myclean execlean inclean distclean

distclean: clean execlean inclean
	@echo "Total cleaning has been done..."

execlean:
	@rm -f bin/*.exe lib/*.a
	@rm -f strfun/LHAIndex-comphep.txt

inclean:
	@rm -f CC F77 CFLAGS CLIBS FORLIBS RANLIB ROOTFLAGS ROOTLIBS version

clean: myclean
	${MAKE} -C external clean
	@echo "Cleaning has been done..."

myclean:
	@for dir in $(SUB_SUBDIR); do $(MAKE) -C $$dir clean; done
	${MAKE} -C doc clean 
	@rm -f test/results/* test/tmp/* test/core*
	@echo "Partial cleaning has been done..."

######################################################################################
.PHONY: setup lhapdf doc 

setup: lhapdf
####### Variables test
	@if test "x$(WDIR)" = "x"; then \
	   echo "***** Undefine WDIR in Makefile!"; \
	   exit 99; \
	fi

####### Making directories
	@if (test ! -d $(WDIR)); then \
	    mkdir -p $(WDIR); \
	else \
	  echo " ";\
	  echo "**************************************************************";\
	  echo " The directory WDIR=$(WDIR) exists!";\
	  echo " "; \
	  echo " Overwrite?"; \
	  echo " Press [Enter] to continue or ^C to stop."; \
	  echo "**************************************************************";\
	  read; \
	fi
	@if (test ! -d $(WDIR)/results); then mkdir -p $(WDIR)/results; fi
	@if (test ! -d $(WDIR)/models);  then mkdir -p $(WDIR)/models; fi
	@if (test ! -d $(WDIR)/tmp);     then mkdir -p $(WDIR)/tmp; fi
	@if (test ! -d $(WDIR)/usr);     then mkdir -p $(WDIR)/usr; fi

	@sed -e s!@CHEP@!'$(PWD)'!g usr/comphep > $(WDIR)/comphep
	@sed -e s!@CHEP@!'$(PWD)'!g usr/archiv > $(WDIR)/archiv
	@cp usr/comphep.ini $(WDIR)/comphep.ini
	@cp models/*.mdl $(WDIR)/models/.
ifneq (${LHAPDFPATH},)
	@mv $(WDIR)/models/beams-lhapdf.mdl $(WDIR)/models/beams.mdl
	@mv $(WDIR)/models/strfuns-lhapdf.mdl $(WDIR)/models/strfuns.mdl
endif
ifneq (${ROOTSYS},)
	rm -f usr/.rtupler_tmp
	@sed -e s!@RROOTT@!'$(ROOTSYS)'!g usr/rtupler > usr/.rtupler_tmp
	@sed -e s!@CHEP@!'$(PWD)'!g usr/.rtupler_tmp  > $(WDIR)/rtupler
	rm -f usr/.rtupler_tmp
	@chmod 744 $(WDIR)/rtupler
endif
	@cp usr/userFun* $(WDIR)/usr/.
	@sed -e s!@CHEP@!'$(PWD)'!g usr/Makefile         > $(WDIR)/usr/Makefile
	@sed -e s!@CHEP@!'$(PWD)'!g usr/Makefile.results > $(WDIR)/results/Makefile
	@sed -e s!@CHEP@!'$(PWD)'!g usr/diag_view        > $(WDIR)/results/diag_view
	@sed -e s!@CHEP@!'$(PWD)'!g usr/mk_tab           > $(WDIR)/mk_tab
	@sed -e s!@CHEP@!'$(PWD)'!g usr/mix              > $(WDIR)/mix
	@sed -e s!@CHEP@!'$(PWD)'!g usr/cascade          > $(WDIR)/cascade
	@sed -e s!@CHEP@!'$(PWD)'!g usr/translator       > $(WDIR)/translator
	@sed -e s!@CHEP@!'$(PWD)'!g usr/tab_view         > $(WDIR)/tab_view
	@sed -e s!@CHEP@!'$(PWD)'!g usr/slha.suspect     > $(WDIR)/SLHA.sh
	@sed -e s!@CHEP@!'$(PWD)'!g usr/n_comphep > /tmp/compheptmp
	@sed -e s!@LHAPDF@!'$(LHAPDFPATH)'!g /tmp/compheptmp > $(WDIR)/results/n_comphep
	@rm /tmp/compheptmp
	@cp usr/process.dat $(WDIR)/process.dat
	@cp usr/symb_batch.pl $(WDIR)/symb_batch.pl
	@cp usr/num_batch.pl $(WDIR)/num_batch.pl
	@chmod 744 $(WDIR)/archiv
	@chmod 744 $(WDIR)/comphep
	@chmod 744 $(WDIR)/mk_tab
	@chmod 744 $(WDIR)/mix
	@chmod 744 $(WDIR)/cascade
	@chmod 744 $(WDIR)/translator
	@chmod 744 $(WDIR)/tab_view
	@chmod 744 $(WDIR)/symb_batch.pl
	@chmod 744 $(WDIR)/num_batch.pl
	@chmod 744 $(WDIR)/SLHA.sh
	@chmod 744 $(WDIR)/results/n_comphep
	@chmod 744 $(WDIR)/results/diag_view

	$(MAKE) -C $(WDIR)/usr CC='$(CC)' CFLAGS='$(CFLAGS)'

	@echo " "
	@echo " "
	@echo "*****************************************************************"
	@echo " Setup of the user directory for CompHEP-${VERSION} has been"
	@echo " successfully performed"
	@echo " "
	@echo " To start CompHEP go to the user directory ${WDIR}"
	@echo " and enter the command './comphep'"
	@echo "*****************************************************************"

lhapdf:
ifneq (${LHAPDFPATH},)
	@rm -f lib/lib$(LHAPDFLIBNAME).a;
	@ln -s $(LHAPDFPATH)/lib/lib$(LHAPDFLIBNAME).a lib/.
endif

######################################################################################
.PHONY: dist bindist

dist: distclean
	@if [ ${COMPHEP_DISTR} != `basename ${PWD}` ]; then \
	  mkdir -p ${CHEPTMPDIR}/${COMPHEP_DISTR}; \
	  cd ${CHEPTMPDIR}; \
	  cp -a ${PWD}/* ${COMPHEP_DISTR}; \
	  mkdir -p ${COMPHEP_DISTR}/doc; \
	  cp -a ${DOC_FILES} ${COMPHEP_DISTR}/doc; \
	  rm -fr `find ${COMPHEP_DISTR} -name CVS`; \
	  rm -fr `find ${COMPHEP_DISTR} -name .svn`; \
	  tar czf ${PWD}/../${COMPHEP_DISTR}.tgz ${COMPHEP_DISTR}; \
	else \
	  cd ..; \
	  tar czf ${COMPHEP_DISTR}.tgz ${COMPHEP_DISTR}; \
	fi
	@cd ${PWD}

bindist:
	@if [ ! -e ${PWD}/bin/s_comphep.exe ]; then \
	  echo " ";\
	  echo "******************************************";\
	  echo " 'make' can not find 's_comphep.exe' file.";\
	  echo "     Please check if you built CompHEP.   ";\
	  echo "******************************************";\
	  echo " ";\
	  exit 99; \
	else \
	  mkdir -p ${CHEPTMPDIR}/${COMPHEP_DISTR}-${OSTYPE}; \
	  cd ${CHEPTMPDIR}; \
	  for x in ${BINDIST_FILES}; do \
		cp -a ${PWD}/$$x ${COMPHEP_DISTR}-${OSTYPE}; \
	  done; \
	  mkdir -p ${COMPHEP_DISTR}-${OSTYPE}/doc; \
	  cp -a ${DOC_FILES} ${COMPHEP_DISTR}-${OSTYPE}/doc; \
	  cp -a ${DOC_FILES} ${COMPHEP_DISTR}-${OSTYPE}/doc; \
	  mkdir -p ${COMPHEP_DISTR}-${OSTYPE}/src/num; \
	  cp -a ${PWD}/src/num/include ${COMPHEP_DISTR}-${OSTYPE}/src/num; \
	  tar czf ${PWD}/../${COMPHEP_DISTR}-${OSTYPE}.tgz \
	      ${COMPHEP_DISTR}-${OSTYPE}; \
	  rm -fr ${CHEPTMPDIR}/${COMPHEP_DISTR}-${OSTYPE}; \
	  cd ${PWD}; \
	fi
