.SUFFIXES:
.SUFFIXES : .f .h .o .d
#---------------------------------------------
# declaration of definitions (macros)

# remember to delete previous *.o files when you change the compiler
#FC = pgf90
FC = gfortran

#OMPFLAGS = -mp -fast
OMPFLAGS =
#FFLAGS =  $(OMPFLAGS ) -g -fimplicit-none  -Wall  #-ffpe-trap=invalid,zero,overflow
FFLAGS =  $(OMPFLAGS ) -O3 -mcmodel=large -fdefault-real-8
LIBDIR = ./LIB
OBJDIR = ./OBJ
INCDIR = ./LIB
RUNDIR = ./RUN
#---------------------------------------------
# VPATH specifies directories to search, in order: VPATH = dir1:dir2:dir3
# so that dependency file.o : file.f is interpreted file.o : dir1/file.f
# vpath (lower case) allows selective specification, e.g.
# vpath %.f ../LIB means files *.f in dir ../LIB

#vpath %.f $(LIBDIR):$(LIBDIR)/AQPHASE
vpath %.f $(LIBDIR)
vpath %.h $(LIBDIR)
vpath %.d $(OBJDIR)
vpath %.o $(OBJDIR)

#INCLUDES = general.h organic.h common.h isomer.h

EXC = cm


# find all sources *.f in LIB and subdirectories
SOURCES := $(wildcard $(LIBDIR)/*.f) $(wildcard $(LIBDIR)/**/*.f)
#create list of *.o files
OBJS := $(patsubst $(LIBDIR)/%.f,$(OBJDIR)/%.o,$(SOURCES))


# create dependencies list -> *.d files
$(OBJDIR)/%.d: %.f
	@set -e;
	$(eval DF := $(patsubst $(LIBDIR)/%.f,$(OBJDIR)/%.d,$<))
	$(eval OF := $(patsubst $(LIBDIR)/%.f,$(OBJDIR)/%.o,$<))
	@rm -f $(DF)
	$(FC) -cpp -M $(FFLAGS) -I $(INCDIR) $< > $(DF).temp
	@sed '1s,.*\.o[ :],$(OF) $(DF) :,g' < $(DF).temp > $(DF); \
	rm -f $(DF).temp


include $(OBJS:$(OBJDIR)/%.o=$(OBJDIR)/%.d)


#---------------------------------------------
# relationship (dependency) between executable (target) & object files,
#       command to compile executable
#       $@ means 'current target'


# rule to compile objs
$(OBJDIR)/%.o : %.f
	$(FC) $(FFLAGS) -c $< -o$@

#$(EXC) : $(OBJS) compteur compteur_aq findname
$(EXC) : $(OBJDIR)/geckolib.a $(RUNDIR)/main.f compteur findname_cmv
	$(FC) $(FFLAGS) $(RUNDIR)/main.f $(OBJDIR)/geckolib.a -I $(INCDIR) -o ./$(RUNDIR)/$@


#rule to compile geckolib.a
$(OBJDIR)/geckolib.a : $(OBJS)
	ar -r $@ $(OBJS)

compteur : ./$(RUNDIR)/COMPTEUR/compteur.f $(OBJDIR)/geckolib.a
	$(FC) $(FFLAGS) $+ -I $(INCDIR) -o ./$(RUNDIR)/COMPTEUR/compteur

#compteur_aq : ./RUN/COMPTEUR_AQ/compteur_aq.f  ./OBJ/grbond.o ./OBJ/cnum.o
#	$(FC) $(FFLAGS) $+ -I $(INCDIR) -o ./RUN/COMPTEUR_AQ/compteur_aq

findname_cmv : ./$(RUNDIR)/findname_cmv.f $(OBJDIR)/geckolib.a
	$(FC) $(FFLAGS) $+ -I $(INCDIR) -o ./$(RUNDIR)/findname_cmv

all: $(EXC) findname_cmv compteur

clean:
	rm -f $(OBJDIR)/* $(OBJDIR)/*/* ./$(RUNDIR)/$(EXC) ./$(RUNDIR)/findname_cmv ./$(RUNDIR)/COMPTEUR/compteur


