# Makefile for compiling Compose and sample codes for reading HDF5 tables
# generated by Compose code or downloaded from https://compose.obspm.fr
#
# ========================================================================
#
#
#
# Options:
# --------
#
#
# BOUNDCHECK=(0|1)
#
# Note: Switch on debug options Fortran part.
#
# HDF5=(0|1)
#
# Enable writing in HDF5-format for the data tables


USE_BOUNDCHECK =  0


NAME = compose
NAME_READ_EOS = test_read_hdf5
NAME_READ_KAPPA = test_read_opacity
EXEC = $(NAME)
EXEC_TEST = $(NAME_READ_EOS)
EXEC_TEST_KAPPA = $(NAME_READ_KAPPA)



# attention, the test codes need HDF5
# We introduce the initialisation by two environment variables :
# USE_BOUNDCHECK USE_HDF5
# Now we test if the environment variables was void. In this case we
# use the default flag settings (HDF5 = 1, BOUNDCHECK = 1)
ifndef USE_BOUNDCHECK
  BOUNDCHECK = 1 #default
else
  BOUNDCHECK = $(USE_BOUNDCHECK)
endif
ifndef USE_HDF5
  HDF5 = 1  #default
else
  HDF5 = $(USE_HDF5)
endif

# set here your choice if you want set a value
# BOUNDCHECK = 1
# HDF5 = 1


ifeq ($(BOUNDCHECK),1)
   DEBUG = -g -DDEBUG  --check=all -fbacktrace -Wall -ffpe-trap=zero,overflow,underflow
else
   DEBUG =
endif

ifeq ($(HDF5),1)
   HDF5_LIB = -lhdf5
   HDF5_C = -Dhave_hdf5
   FC = h5fc
   FC_FLAGS = -O3   -cpp -fopenmp $(DEBUG) $(HDF5_C)
else
   HDF5_LIB =
   HDF5_C =
   FC = gfortran
   FC_FLAGS = -O3   -cpp -fopenmp $(DEBUG)
endif

LINK = $(FC)

LD_LIB = $(HDF5_LIB)


ifeq ($(HDF5),1)
  SRC_F = composemodules.f90 \
          out_to_json.f90 \
          modhdf5.f90 \
          hdf5compose.f90 \
	  get_tables.f90 \
          compose.f90
  SRC_F_TEST = modhdf5.f90 \
          read_eos_table.f90
  SRC_F_KAPPA = modhdf5.f90 \
          read_opacities.f90
else
  SRC_F = composemodules.f90 \
          out_to_json.f90 \
	  get_tables.f90 \
          compose.f90
  SRC_F_TEST =
  SRC_F_KAPPA =
endif


OBJ_F := $(SRC_F:.f90=.o)
OBJ_F_TEST := $(SRC_F_TEST:.f90=.o)
OBJ_F_KAPPA := $(SRC_F_KAPPA:.f90=.o)

$(NAME):  $(OBJ_F)
	rm -f $(EXEC);
	@echo building compose;
	$(LINK)  $(FC_FLAGS) -o $(EXEC) $(OBJ_F) $(LD_LIB)

$(NAME_READ_EOS):  $(OBJ_F_TEST)
	rm -f $(EXEC_TEST);
	@echo building test_read_hdf5;
	$(LINK) -o $(EXEC_TEST) $(OBJ_F_TEST) $(LD_LIB)

$(NAME_READ_KAPPA):  $(OBJ_F_KAPPA)
	rm -f $(EXEC_TEST_KAPPA);
	@echo building test_read_opacity;
	$(LINK) -o $(EXEC_TEST_KAPPA) $(OBJ_F_KAPPA) $(LD_LIB)



$(NAME)_for_web : FC_FLAGS += -DHAVE_WEB
# 	HDF5 = 0
# 	BOUNDCHECK = 0


$(NAME)_for_web :  $(NAME)


%.o: %.f90
	$(FC) -c $(FC_FLAGS) $< -o $@


clean:
	rm -f *.o *.mod compose test_read_hdf5 test_read_opacity
