# SHELL = /bin/sh
RAYDIR=$(shell pwd)
UN=$(shell echo $${USER})
HOST=$(shell echo $${HOSTNAME})
MAKE=make
EXEC=karine

FOR=gfortran
ARCH=-m64 #-march=i686
OPTI=-O3 -static #-std=legacy #-frepack-arrays #-std=gnu #-fast


#############################
# FFLAGS= -O
# FFLAGS= -ff90
# FFLAGS= -ftrength-reduce (les loop vont plus vite cf gcc)
# FFLAGS= -g -ftrenght-reduce (cf gcc option va unused corteu)
############################Mieux vaut ajuster par des directives de compilation
############################inserer dans le prog quand le compilateur le permet.
FFLAGS = $(ARCH) $(OPTI) $(WARNING) $(IEEE) $(EMUL90) $(DEBUG)

####################################################################################
#   DIR is the path to source files directory				#
#   OBJ is the path to object files directory				#
#   SRC_PROG is the list of source files to be compiled			#
#   INCLUDES is: -I+path to directory that contains 'include' files	#
####################################################################################

DIR=${RAYDIR}/source
OBJ=${RAYDIR}/objects
DATA_DIR=${RAYDIR}/data
RESULTS_DIR=${RAYDIR}/results


SRC_PROG = \
	$(DIR)/Planck.for \
	$(DIR)/Planck_Int_wavnb.for \
	$(DIR)/abs_gaz.for \
	$(DIR)/analytic_budgets.for \
	$(DIR)/analytic_dNERdT.for \
	$(DIR)/analytic_dNERdx.for \
	$(DIR)/analytic_fluxes.for \
	$(DIR)/analytic_NER.for \
	$(DIR)/calc_e2.for \
	$(DIR)/calc_nmax.for \
	$(DIR)/calc_stop.for \
	$(DIR)/calc_T.for \
	$(DIR)/check_results.for \
	$(DIR)/check_sizes.for \
	$(DIR)/choice_freq.for \
	$(DIR)/choice_ud.for \
	$(DIR)/compare.for \
	$(DIR)/coupure.for \
	$(DIR)/countd.for \
	$(DIR)/cumul_phase.for \
	$(DIR)/dBdLambda.for \
	$(DIR)/dBdT.for \
	$(DIR)/distri.for \
	$(DIR)/error.for \
	$(DIR)/expint.for \
	$(DIR)/find_max.for \
	$(DIR)/find_tab.for \
	$(DIR)/get_nlines.for \
	$(DIR)/get_pid.for \
	$(DIR)/init.for \
	$(DIR)/init_kcoeff.for \
	$(DIR)/init_nb_pdf.for \
	$(DIR)/init_results.for \
	$(DIR)/initz1.for \
	$(DIR)/initz2.for \
	$(DIR)/invert.for \
	$(DIR)/ksi.for \
	$(DIR)/look_for_errors.for \
	$(DIR)/look_for_zeroes.for \
	$(DIR)/main.for \
	$(DIR)/mesh.for \
	$(DIR)/num2str.for \
	$(DIR)/path.for \
	$(DIR)/pdf_angulaire.for \
	$(DIR)/pdf_freq.for \
	$(DIR)/pdf_tau_abs.for \
	$(DIR)/pdf_tau_diff.for \
	$(DIR)/postcalc.for \
	$(DIR)/print_state.for \
	$(DIR)/profiles.for \
	$(DIR)/rand_uniforme.for \
	$(DIR)/random_gen1.for \
	$(DIR)/random_gen2.for \
	$(DIR)/recombine.for \
	$(DIR)/read_data.for \
	$(DIR)/read_dkadT.for \
	$(DIR)/read_dkadx.for \
	$(DIR)/read_options.for \
	$(DIR)/read_pres2.for \
	$(DIR)/remesh.for \
	$(DIR)/sauvegarde.for \
	$(DIR)/scatter.for \
	$(DIR)/signal_handler.for \
	$(DIR)/screen.for \
	$(DIR)/sum_ACDEF.for \
	$(DIR)/tau.for \
	$(DIR)/update_tab.for \
	$(DIR)/urand.for \
	$(DIR)/utils.for \
	$(DIR)/wall.for \
	$(DIR)/write_atmos_data.for \
	$(DIR)/write_iseed.for \
	$(DIR)/write_pid.for

INCLUDES= -I./includes

#dependencies
#quoi compiler ?
OBJ_PROG=$(SRC_PROG:$(DIR)/%.for=$(OBJ)/%.o)
#comment compiler ?
$(OBJ)/%.o: $(DIR)/%.for
	$(FOR) $(FFLAGS) $(INCLUDES) -c -o $@ $(@:$(OBJ)/%.o=$(DIR)/%.for)

to :
	read leurre
	touch *

clean :
	@rm -f *.o $(OBJ)/*.o *.oub *.oup *.oug
	@rm -f *%
	@rm -f *~
	@rm -f $(DIR)/*.~
	@rm -f $(DIR)/*.*~
	@rm -f tmp.tmp
	@rm -f *.sum
	@rm -f *.eps
	@rm -f *.ps
	@rm -f *.jpg
	@rm -f core
	@rm -f last.kumac
	@rm -f paw.metafile
	@rm -f config/data_dir
	@rm -f config/results_dir
	@rm -f temp.txt
	@rm -f core
	@touch core
	@chmod 000 core
	@chmod a+r core
	@echo 'Files have been removed'

dat :
	@cd ./data;f0;make_data.exe
	@echo 'Program has been compiled'

wipe :
	@rm -f *%
	@rm -f *~
	@rm -f $(DIR)/*.~
	@rm -f $(DIR)/*.*~
	@rm -f tmp.tmp
	@rm -f *.sum
	@rm -f *.eps
	@rm -f *.ps
	@rm -f *.jpg
	@rm -f core
	@rm -f last.kumac
	@rm -f paw.metafile
	@rm -f config/data_dir
	@rm -f config/results_dir
	@rm -f temp.txt
	@rm -f core
	@touch core
	@chmod 000 core
	@echo 'Files have been removed'

skel :	clean
	rm -f $(EXEC)
	@echo 'Files have been removed'

where :
	@echo Current directory: $(RAYDIR)
	@echo Source directory: $(DIR)
	@echo Data directory: $(DATA_DIR)
	@echo Results directory: $(RESULTS_DIR)

info :
	@echo Host name: $(shell echo $${HOSTNAME})
	@echo Operating system: $(OSV)
	@echo Type of system: $(OSTYPEV)
	@echo User name: $(shell echo $${USER})
	@echo Special compilation options: $(SPEC)


all :
#	@echo "UN="$(UN)
#	@echo "HOST="$(HOST)
	@echo $(DIR)
	@echo '------ Compilation -------'
	make -f Makefile allend
	@echo ${DATA_DIR} > config/data_dir
	@echo ${RESULTS_DIR} > config/results_dir

allend :	ray
ray :	$(OBJ_PROG)
	@echo '------ Edition de liens -------'
	$(FOR) -v $(DEBUG) -o $(EXEC) $(OBJ_PROG) $(SPEC)
	@echo '--- Use program ' $(EXEC)  '(compiled for :' $(OSV) $(OSTYPEV) 'by:' $(USER) ')'
	@date > compdate.in
#	@echo 'ln -s ray'

run :
	@$(EXEC)
	@echo 'Done'

runmulti :
	@echo 'Differents MCM stationnaires'
	@echo '/!\Pousuivre si les fichiers *.in existent'
	@echo 'de 1 a 19'
	@echo '#! /bin/sh' > z1.txt
	@echo 'N=1' > z2.txt
	@echo 'FIN=19' > z3.txt
	read leurre
	cat z1.txt z2.txt z3.txt monlotmulti2_sstete.bat > monlotmulti2.bat
	rm z1.txt z2.txt z3.txt
	at now +0 minutes < monlotmulti.bat

#outils pour debugger autres que print
gbd :
	@echo 'gdb ou xxgdb (ray)'

#outils pour profiling : optimisations scalaire (ou vectorielle)
gprof :
#	@gprof -s -l ray.exe gmon.out > gprof_sl	
	@gprof $(EXEC) gmon.out > gprof_sl
	@more gprof_sl

edit :
	xemacs &

save :
	@sauve.1d
	@echo 'done'

shell :
	xterm

man :
	make help

help :
	@echo '|------------------------------------------|'
	@echo '|------------------------------------------|'
	@echo '|  AIDE-MEMOIRE                            |'
	@echo '|------------------------------------------|'
	@echo '| help, edit, shell                        |'
	@echo '| gdb, gprof for debug                     |'
	@echo '|------------------------------------------|'
	@echo '| clean: remove  (.o, *~, etc.)            |'
	@echo '| skel: remove ' $(EXEC) '                 |'
	@echo '| to, all, run, runmulti                   |'
	@echo '|------------------------------------------|'
