#
# Steering Makefile to create gpamelaX11 and gpamela executable
# First of all define the src files. One for each subdirectory
#
GPAMELASRCS= gpamela/ffuser.F gpamela/gdraws.F gpamela/gpadigi.F \
	gpamela/gpal.F gpamela/gpdat.F \
	gpamela/gpffr.F gpamela/gpfil.F gpamela/gpgaus.F \
	gpamela/gpgeo.F gpamela/gphbk.F \
	gpamela/gphit.F gpamela/gplook.F \
	gpamela/gpmapa.F gpamela/gpmat.F gpamela/gpmed.F \
	gpamela/gpn2g.F gpamela/gpnhit.F gpamela/gppama.F \
	gpamela/gprhit.F gpamela/gprsht.F \
	gpamela/gpsed.F gpamela/gpsptm.F \
	gpamela/gpudat.F gpamela/gpudig.F gpamela/gpuffr.F  \
	gpamela/gpufil.F gpamela/gpugeo.F gpamela/gpuhbk.F \
	gpamela/gpuhit.F gpamela/gpuini.F \
	gpamela/gpukin.F gpamela/gpulas.F \
	gpamela/gpumat.F gpamela/gpumed.F gpamela/gpuout.F \
	gpamela/gpused.F gpamela/gpustep.F gpamela/gputra.F \
	gpamela/gputre.F gpamela/gudigi.F \
	gpamela/guhadr.F gpamela/gukine.F gpamela/guout.F \
	gpamela/guphad.F gpamela/gustep.F \
	gpamela/gutrak.F gpamela/gutrev.F \
	gpamela/gviewyz.F gpamela/n2g.F \
	gpamela/uginit.F gpamela/uglast.F
GPCALSRCS = gpcal/gpcalv.F gpcal/gpce.F gpcal/gpdcal.F \
	gpcal/gpg10c.F gpcal/gpg10.F gpcal/gpsica.F \
	gpcal/gpucal.F gpcal/gpw2.F gpcal/gpw.F 
GPCASSRCS = gpcas/gpcasv.F gpcas/gpdcas.F gpcas/gpucas.F
GPCATSRCS = gpcat/gpcatv.F gpcat/gpdcat.F gpcat/gpucat.F 
GPFIELDSRCS = gpfield/flin3.F gpfield/gufld.F 
GPGARSRCS = gpgar/gpgacl.F  gpgar/gpgapart.F gpgar/gpgarin.F \
	gpgar/gpgarsel.F gpgar/gptogar.F gpgar/grinit.F 
GPHYSSRCSRCS = gphys/gfluct.F
GPMAINSRCS = gpmain/gpmain.F 
GPSPESRCS  = gpspe/gpcp.F gpspe/gpdspe.F gpspe/gpfe.F \
	gpspe/gpkap.F gpspe/gpmaspe.F gpspe/gproa.F \
	gpspe/gpsitr.F gpspe/gpspema.F gpspe/gpspev.F gpspe/gpuspe.F 
GPTOFSRCS = gptof/gpdtof.F gptof/gpscin.F gptof/gpscint.F \
	gptof/gptofv.F gptof/gputof.F 
GPTRDSRCS = gptrd/gpdtrd.F gptrd/gptrad.F gptrd/gptrdv.F \
	gptrd/gputrd.F gptrd/gpxe.F gptrd/gpxtr.F \
	gptrd/npoiss.F gptrd/xescape.F gptrd/xtrinteg.F \
	gptrd/xtrinter.F gptrd/xtryield.F 
GPXINTSRCS = gpxint/gxint.F gpxint/qnext.F
#
GPSRCS = $(GPAMELASRCS) $(GPCALSRCS) $(GPCASSRCS) $(GPCATSRCS) $(GPFIELDSRCS)  $(GPGARSRCS) $(GPHYSSRCS) \
	$(GPSPESRCS) $(GPTOFSRCS) $(GPTRDSRCS) 
GPOBJS =$(addsuffix .o,$(basename ${GPSRCS}) )
GPDEPENDS =$(GPOBJS:.o=.d)
GPMAINOBJS =$(addsuffix .o,$(basename ${GPMAINSRCS}) )
GPMAINDEPENDS =$(GPMAINOBJS:.o=.d)
GPXINTOBJS =$(addsuffix .o,$(basename ${GPXINTSRCS}) )
GPXINTDEPENDS =$(GPXINTOBJS:.o=.d)
#
GEANTINC = gcdes
GPINC = gpcdes
CERNLIB = `cernlib geant,genlib,pawlib,graflib/X11,packlib,mathlib`
GPLIBDIR = ./lib
GPLIB = ${GPLIBDIR}/libgarfield-7.a 
#
BIN = ./bin
AUX = ./aux
AUXFILES = ${AUX}/gpfield.rz ${AUX}/GPAMELA.FFR ${AUX}/TRD_ATT.DAT ${AUX}/PROVA.GAR \
$(AUX)/xe_80_co2_20.gas
GARFIELDSRC = ./garfield/src
#
INTERFLAGS = -DGPAMELA_UNIX -DGPAMELA_TYPE -DGPAMELA_X11 -DGPAMELA_INTER -DGPAMELA_HIGZ \
	-DGPAMELA_GARFIELD  -DGPAMELA_MANYWIRE  -DGPAMELA_LONGLIST  -DGPAMELA_BIGMAP 
BATCHFLAGS = -DGPAMELA_UNIX -DGPAMELA_TYPE -DGPAMELA_GARFIELD  -DGPAMELA_MANYWIRE  -DGPAMELA_LONGLIST  -DGPAMELA_BIGMAP 
#
CC = gcc
FC = g77
DEBFLAGS =  -g -fdebug-kludge
FFLAGS = -fvxt -fno-automatic -Wno-globals -I${GPINC} -I${GEANTINC} ${BATCHFLAGS}
LDFLAGS= ${GPLIB} ${CERNLIB}

PHONY: distclean clean createdir install 

gpamelax11.exe: FFLAGS =  -fvxt -fno-automatic -Wno-globals -I${GPINC} -I${GEANTINC} ${INTERFLAGS}
gpamelax11.exe: createdir  ${GPLIBDIR}/libgarfield-7.a ${GPSRCS} ${GPOBJS} ${GPDEPENDS}  ${GPXINTSRCS} ${GPXINTOBJS} ${GPXINTDEPENDS} 
	@echo Creating $@ .....
	$(FC) -o ${BIN}/$@ ${GPOBJS} ${GPXINTOBJS} ${LDFLAGS}
	@echo Removing object files ..... 
	@rm -f ${GPOBJS} ${GPXINTOBJS}

gpamela.exe:  FFLAGS =  -fvxt -fno-automatic -Wno-globals -I${GPINC} -I${GEANTINC} ${BATCHFLAGS}
gpamela.exe: createdir ${GPLIBDIR}/libgarfield-7.a ${GPSRCS} ${GPOBJS}  ${GPDEPENDS} ${GPMAINSRCS} ${GPMAINOBJS} ${GPMAINDEPENDS} 
	@echo Creating $@ .....
	$(FC) -o ${BIN}/$@ ${GPOBJS} ${GPMAINOBJS} ${LDFLAGS}
	@echo Removing object files .....
	@rm -f ${GPOBJS} ${GPMAINOBJS}

gpamelax11_deb.exe: FFLAGS =  -fvxt -fno-automatic -Wno-globals ${DEBFLAGS} -I${GPINC} -I${GEANTINC} ${INTERFLAGS}
gpamelax11_deb.exe: createdir ${GPLIBDIR}/libgarfield-7.a ${GPSRCS} ${GPOBJS} ${GPDEPENDS}  ${GPXINTSRCS} ${GPXINTOBJS} ${GPXINTDEPENDS}
	@echo Creating $@ .....
	$(FC) -o ${BIN}/$@ ${GPOBJS} ${GPXINTOBJS} ${LDFLAGS}
	@echo Removing object files .....
	@rm -f ${GPOBJS) ${GPXINTOBJS}

gpamela_deb.exe: FFLAGS =  -fvxt -fno-automatic -Wno-globals  ${DEBFLAGS} -I${GPINC} -I${GEANTINC} ${BATCHFLAGS}
gpamela_deb.exe: createdir ${GPLIBDIR}/libgarfield-7.a ${GPSRCS} ${GPOBJS} ${GPDEPENDS}  ${GPMAINSRCS} ${GPMAINOBJS} ${GPMAINDEPENDS}
	@echo Creating $@ .....
	$(FC) -o ${BIN}/$@ ${GPOBJS} ${GPMAINOBJS} ${LDFLAGS}
	@echo Removing object files .....
	@rm -f ${GPOBJS) ${GPMAINOBJS}

depend: ${GPXINTDEPENDS} ${GPMAINDEPENDS} ${GPDEPENDS}

%.d: %.F
	@echo Creating $@ from $< ;
	@$(SHELL) -ec '$(FC) -M $(FFLAGS) $< \
                | sed '\''s/\($(*F)\)\.o[ :]*/ $(*D)\/\1.o $(*D)\/$(*F)\.d : /g'\'' > $@; \
                [ -s $@ ] || rm -f $@'

# Move binaries from the local repository to the official repositories
install :
	@test -d "$(GPAMELA_BIN)" && \
	(echo "Now moving executable and auxiliary files to $(GPAMELA_BIN)"; \
	 mv -f $(BIN)/*.exe $(GPAMELA_BIN)/. ; cp -f ${AUXFILES} $(GPAMELA_BIN)/. )

${GPLIBDIR}/libgarfield-7.a:  
	@echo Creating  libgarfield-7.a it will take few minutes .....
	@cd  ${GARFIELDSRC}; make -f makefile_linux libgarfield-7.a 
	@test -d "${GPLIBDIR}" || (echo "Creating ${GPLIBDIR}"; mkdir ${GPLIBDIR})
	@echo Copyng $(@F) to ${GPLIBDIR}
	@cp ${GARFIELDSRC}/$(@F)  ${GPLIBDIR}

# Create binary local repository if non existent
createdir :
	@test -d "${BIN}" || (echo "Creating ${BIN}"; mkdir ${BIN})

distclean: clean
	@echo Removing garfield sources, objects and libraries
	@cd  ${GARFIELDSRC}; rm -f *.f *.o libgarfield-7.a
	@rm -f ${GPLIBDIR}/libgarfield-7.a
	@rm -fr ${GPLIBDIR}
	@echo Removing executables ..... 
	@rm -fr ${BIN}



clean:
	@echo Removing object files .....
	@rm -f ${GPOBJS}	${GPMAINOBJS} ${GPXINTOBJS}
	@echo Removing dependencies files .....
	@rm -f ${GPDEPENDS} ${GPMAINDEPENDS} ${GPXINTDEPENDS}

include ${GPDEPENDS}