#-----------------------------------------------------------------------
# Makefile for coplot_magsphe
# Fortran 77 & 90 programs only
# P. Robert, LPP, 2010 April 21
#-----------------------------------------------------------------------


# ====================
# Choix du compilateur 
# ====================

#FC = ifort
#FC = f90
#FC = f95
 FC = gfortran
#FC = gfortran-4.4
#FC = g95

# ================================
# Choix des options de compilation
# ================================

# Compilateur Intel

ifeq ($(FC),ifort)
# remplacement du check all par tous les checks sauf le check arg_temp_created
   FCOMP = -c -CB -g -check format -check uninit -check output_conversion -traceback
   FLINK =    -CB -g -check format -check uninit -check output_conversion -traceback
endif

# Compilateur SUN f90

ifeq ($(FC),f90)
   FCOMP = -c -C  -xs
   FLINK =     -C -xs
endif

# Compilateur SUN f95 

ifeq ($(FC),f95)
   FCOMP = -c -C  -xs
   FLINK = -Bstatic -C -xs
endif

# Compilateur Windows/MinGW gfortran

ifeq ($(FC),gfortran)
   FCOMP = -c  -g -fbounds-check -Wconversion -Wall -Wunderflow -W -fno-automatic
   FLINK =     -g -fbounds-check -Wconversion -Wall -Wunderflow -W -fno-automatic
endif

# Compilateur Linux gfortran-4.4
ifeq ($(FC),gfortran-4.4)
   FCOMP = -c -fbounds-check -Wconversion -Wall
   FLINK =    -fbounds-check -Wconversion -Wall
endif

# Compilateur Windows/MinGW g95

ifeq ($(FC),g95)
   FCOMP = -c -ftrace=full -i4 -fbounds-check -Wall
   FLINK =    -ftrace=full -i4 -fbounds-check -Wall
endif

# ==========================
# Definition des directories
# ==========================

SRC_DIR = src/
OBJ_DIR = obj/
BIN_DIR = bin/

# =====================
# Liste des executables 
# =====================

EXEC =  $(BIN_DIR)coplot_magsphe.exe \
	$(BIN_DIR)co_magpau_3D.exe \
	$(BIN_DIR)coplot_magsphe_cluorbit.exe \
	$(BIN_DIR)coanim_magsphe_cluorbit.exe


# ========
# make all
# ========

# Creation de tous les executables et des link vers bin

all :  $(EXEC)
	@echo "-> Compilation done."
	@echo "-> Read lines above to check success."


# ===================================================
# Definition des dependances pour la creation des exe
# ===================================================

# Les objets sont pris dans $(OBJ_DIR), 
# Les executables sont mis dans $(BIN_DIR)
#
# On definit ici le nom de chaque cible (le .exe) et la liste
# de ses dependances.
# Ensuite, on lance le compilateur pour linker toutes les dependances
# (le $^) et fabriquer la cible (le $@ qui est l' .exe).

# _______________________________
$(BIN_DIR)coplot_magsphe.exe :          $(OBJ_DIR)coplot_magsphe.o \
				        $(OBJ_DIR)rocotlib.o \
				        $(OBJ_DIR)maglinelib.o \
				        $(OBJ_DIR)geopacklib.o \
				        $(OBJ_DIR)tsygalib.o \
				        $(OBJ_DIR)comagnetolib.o \
				        $(OBJ_DIR)tsauxlib.o \
				        $(OBJ_DIR)rogralib_V9p6.o \
				        $(OBJ_DIR)worldlib.o
	$(FC) $(FLINK) $^ -o $@
# _______________________________
$(BIN_DIR)co_magpau_3D.exe :            $(OBJ_DIR)co_magpau_3D.o \
				        $(OBJ_DIR)rocotlib.o \
				        $(OBJ_DIR)maglinelib.o \
				        $(OBJ_DIR)geopacklib.o \
				        $(OBJ_DIR)tsygalib.o \
				        $(OBJ_DIR)comagnetolib.o \
				        $(OBJ_DIR)tsauxlib.o \
				        $(OBJ_DIR)rogralib_V9p6.o \
				        $(OBJ_DIR)worldlib.o
	$(FC) $(FLINK) $^ -o $@
# _______________________________
$(BIN_DIR)coplot_magsphe_cluorbit.exe : $(OBJ_DIR)coplot_magsphe_cluorbit.o \
				        $(OBJ_DIR)comagnetolib.o \
				        $(OBJ_DIR)maglinelib.o \
				        $(OBJ_DIR)rocotlib.o \
				        $(OBJ_DIR)geopacklib.o \
				        $(OBJ_DIR)tsygalib.o \
				        $(OBJ_DIR)tsauxlib.o \
				        $(OBJ_DIR)rogralib_V9p6.o \
				        $(OBJ_DIR)worldlib.o \
				        $(OBJ_DIR)cluster_orbitlib.o 
	$(FC) $(FLINK) $^ -o $@
# _______________________________
$(BIN_DIR)coanim_magsphe_cluorbit.exe : $(OBJ_DIR)coanim_magsphe_cluorbit.o \
				        $(OBJ_DIR)comagnetolib.o \
				        $(OBJ_DIR)maglinelib.o \
				        $(OBJ_DIR)rocotlib.o \
				        $(OBJ_DIR)geopacklib.o \
				        $(OBJ_DIR)tsygalib.o \
				        $(OBJ_DIR)tsauxlib.o \
				        $(OBJ_DIR)rogralib_V9p6.o \
				        $(OBJ_DIR)worldlib.o \
				        $(OBJ_DIR)cluster_orbitlib.o  \
				        $(OBJ_DIR)animagnetolib.o
	$(FC) $(FLINK) $^ -o $@
# _______________________________


# ==========================
# Compilation des librairies
# ==========================
 
# On definit ici le nom de chaque cible (le .o de chaque librairy) 
# et sa source (le .f90)
# 
# Ensuite, on lance le compilateur pour compiler le source 
# (qui est la premiere dependance $<)
# et fabriquer la cible ("@" = l'objet .o)
# Attention: les librairies qui ne sont pas utilisees par les .exe
# ne seront pas compilees.

$(OBJ_DIR)comagnetolib.o     :    $(SRC_DIR)comagnetolib.f90
	  $(FC) $(FCOMP) $< -o $@

$(OBJ_DIR)maglinelib.o       :    $(SRC_DIR)maglinelib.f90
	  $(FC) $(FCOMP) $< -o $@

$(OBJ_DIR)rocotlib.o         :    $(SRC_DIR)rocotlib.f90
	  $(FC) $(FCOMP) $< -o $@

$(OBJ_DIR)geopacklib.o       :    $(SRC_DIR)geopacklib.f90
	  $(FC) $(FCOMP) $< -o $@

$(OBJ_DIR)tsygalib.o         :    $(SRC_DIR)tsygalib.f90
	  $(FC) $(FCOMP) $< -o $@

$(OBJ_DIR)tsauxlib.o         :    $(SRC_DIR)tsauxlib.f90
	  $(FC) $(FCOMP) $< -o $@

$(OBJ_DIR)rogralib_V9p6.o    :    $(SRC_DIR)rogralib_V9p6.f
	  $(FC) $(FCOMP) $< -o $@

$(OBJ_DIR)worldlib.o         :    $(SRC_DIR)worldlib.f
	  $(FC) $(FCOMP) $< -o $@

$(OBJ_DIR)cluster_orbitlib.o :    $(SRC_DIR)cluster_orbitlib.f90
	  $(FC) $(FCOMP) $< -o $@

$(OBJ_DIR)animagnetolib.o    :    $(SRC_DIR)animagnetolib.f
	  $(FC) $(FCOMP) $< -o $@


# ==========================
# Compilation des programmes
# ==========================


$(OBJ_DIR)coplot_magsphe.o          : $(SRC_DIR)coplot_magsphe.f90
	  $(FC) $(FCOMP) $< -o $@

$(OBJ_DIR)co_magpau_3D.o            : $(SRC_DIR)co_magpau_3D.f90
	  $(FC) $(FCOMP) $< -o $@

$(OBJ_DIR)coplot_magsphe_cluorbit.o : $(SRC_DIR)coplot_magsphe_cluorbit.f90
	  $(FC) $(FCOMP) $< -o $@

$(OBJ_DIR)coanim_magsphe_cluorbit.o : $(SRC_DIR)coanim_magsphe_cluorbit.f90
	  $(FC) $(FCOMP) $< -o $@

       
# ==========
# make clean
# ==========

# Efface les .o, .mod, .tmp, *~, core et out 
# mais garde les .resu et les .exe

clean :
	@echo "*** Removing *.o, .tmp, *~, core and .out files..."
	@find . -name "*.o"    -exec rm -f {}  \;
	@find . -name ".tmp"   -exec rm -f {}  \;
	@find . -name "*~"     -exec rm -f {}  \;
	@find . -name "*core*" -exec rm -f {}  \;
	@find . -name "*.out"  -exec rm -f {}  \;
	@echo "*** Done."


# =============
# make mrproper
# =============

# Fait un clean et efface en plus les .exe, .resu, .bak

mrproper : clean
	@echo "*** Removing *.exe, and *.bak..."
	@find . -name "*.exe"  -exec rm -f {}  \;
	@find . -name "*.bak"  -exec rm -f {}  \;
	@echo "*** Done."

#-----------------------------------------------------------------------
# End of Makefile for all Roproc
#-----------------------------------------------------------------------
