# Executable name
EXE=gray

# Objects list
MAINOBJ=gray.o
OTHOBJ=conical.o const_and_precisions.o dispersion.o eierf.o \
    graydata_flags.o graydata_par.o graydata_anequil.o grayl.o \
    green_func_p.o interp_eqprof.o magsurf_data.o math.o minpack.o \
    numint.o quadpack.o reflections.o utils.o
    

# Alternative search paths
vpath %.f90 src
vpath %.f src

# Fortran compiler name and flags
FC=gfortran
FFLAGS=-O3 #-Wall -g -fcheck=all

DIRECTIVES = -DREVISION="'$(shell svnversion src)'"

all: $(EXE)

# Build executable from object files
$(EXE): $(MAINOBJ) $(OTHOBJ)
	$(FC) $(FFLAGS) -o $@ $^

# Dependencies on modules
gray.o: const_and_precisions.o conical.o dispersion.o green_func_p.o \
        graydata_flags.o graydata_par.o graydata_anequil.o interp_eqprof.o \
        magsurf_data.o math.o minpack.o numint.o quadpack.o reflections.o \
        utils.o
grayl.o: const_and_precisions.o
green_func_p.o: const_and_precisions.o numint.o
numint.o: const_and_precisions.o
reflections.o: const_and_precisions.o utils.o
conical.o: const_and_precisions.o
dispersion.o: const_and_precisions.o eierf.o math.o quadpack.o
math.o: const_and_precisions.o
minpack.o: const_and_precisions.o
graydata_flags.o: const_and_precisions.o
graydata_par.o: const_and_precisions.o
graydata_anequil.o: const_and_precisions.o
magsurf_data.o: const_and_precisions.o
interp_eqprof.o: const_and_precisions.o
utils.o: const_and_precisions.o

# General object compilation command
%.o: %.f90
	$(FC) $(FFLAGS) -c $<

%.o: %.f
	$(FC) $(FFLAGS) -c $<

gray.o:gray.f
	$(FC) -cpp $(DIRECTIVES) $(FFLAGS) -c $< 

.PHONY: clean install
# Remove output files
clean:
	rm -rf *.o *.mod $(EXE)

install:
	@if [ -f $(EXE) ]; then \
	  cp $(EXE) ~/bin/; \
	else \
	  echo File $(EXE) does not exist. Run \'make\' first; \
	fi