#!/bin/bash

# NOTE: this default version of makefile_header
# assumes you will be using the mesasdk.
# if you do not want that, you can use the
# makefile_header_non_mesasdk file as a template.


# step 1) specify your compilers

FC = gfortran
CC = gcc

# step 2) specify whether isnan is supported or not

UTILS_ISNAN = utils_isnan_okay

# step 3) specify which BLAS and LAPACK libraries to use for mesa/mtx

WHICH_LAPACK =
WHICH_BLAS =
LOAD_LAPACK = `mesasdk_lapack_link`
LOAD_BLAS = `mesasdk_blas_link`

# step 4) do you want to use PGPLOT with mesa/star?                                                                                     

USE_PGSTAR = YES
LOAD_PGPLOT = `mesasdk_pgplot_link`

# step 5) do you want to use SE with mesa/star?   (ask Falk about it)

USE_SE = YES
LOAD_SE = `mesasdk_se_link`
INCLUDE_SE = -I${MESASDK_ROOT}/include

# step 6) now do the mesa install

#################################################################

# Unless you are adding a new compiler to the list of options,
# you shouldn't need to change any of the following stuff.
# It simply defines things for use by the module makefiles.

FCbasic = -fno-range-check $(SPECIAL_FC_FLAGS)
FCimpno = -fimplicit-none  
FCchecks = -fbounds-check
FCwarn = -Wunused-value -Werror -W
FCfixed = -ffixed-form -ffixed-line-length-132
FCfixed72 = -ffixed-form
FCfree = -ffree-form
FCopt = -O2
FCdebug = -g
FCstatic =

FCopenmp = -fopenmp
#FCopenmp = 
FC_fixed_preprocess = -x f77-cpp-input
FC_free_preprocess = -x f95-cpp-input

# some definitions used in the module makefiles
MODULE_DIR = ..
MOD_PUBLIC_DIR = $(MODULE_DIR)/public
MOD_PRIVATE_DIR = $(MODULE_DIR)/private
MODULE_INCLUDES = -I$(MOD_PUBLIC_DIR) -I$(MOD_PRIVATE_DIR)
OTHER_INCLUDES = -I$(MESA_DIR)/include
INCLUDES = $(MODULE_INCLUDES) $(OTHER_INCLUDES)

COMPILE_BASIC_FLAGS = $(FCbasic) $(FCopenmp) $(FCstatic) $(INCLUDES)
COMPILE_BASIC = $(FC) $(COMPILE_BASIC_FLAGS)

COMPILE_TO_TEST   = $(COMPILE_BASIC) $(FCwarn) $(FCimpno) $(FCchecks) $(FCopt) $(FCdebug) -c
COMPILE_TO_DEPLOY = $(COMPILE_BASIC) $(FCwarn) $(FCimpno) $(FCopt) -c

COMPILE_NO_OPENMP_NO_OPT = \
   $(FC) $(FCbasic) $(INCLUDES) $(FCwarn) $(FCimpno) $(FCchecks) $(FCdebug) -c -O
COMPILE_ASAP = \
   $(FC) $(FCbasic) $(INCLUDES) $(FCwarn) $(FCimpno) $(FCdebug) -c -O

COMPILE_FAST = $(COMPILE_BASIC) -c
COMPILE_NO_CHECKS = $(COMPILE_BASIC) $(FCopt) -c
COMPILE_NO_OPT    = $(COMPILE_BASIC) $(FCwarn) $(FCimpno) $(FCchecks) $(FCdebug) -c -O
COMPILE_DEVEL     = $(COMPILE_NO_OPT)


# some definitions used in the module makefiles
MODULE_DIR = ..
MOD_PUBLIC_DIR = $(MODULE_DIR)/public
MOD_PRIVATE_DIR = $(MODULE_DIR)/private
MODULE_INCLUDES = -I$(MOD_PUBLIC_DIR) -I$(MOD_PRIVATE_DIR)
OTHER_INCLUDES = -I$(MESA_DIR)/include
INCLUDES = $(MODULE_INCLUDES) $(OTHER_INCLUDES)

COMPILE_BASIC_FLAGS = $(FCbasic) $(FCopenmp) $(FCstatic) $(INCLUDES)
COMPILE_BASIC = $(FC) $(COMPILE_BASIC_FLAGS)

COMPILE_TO_TEST   = $(COMPILE_BASIC) $(FCwarn) $(FCimpno) $(FCchecks) $(FCopt) $(FCdebug) -c
COMPILE_TO_DEPLOY = $(COMPILE_BASIC) $(FCwarn) $(FCimpno) $(FCopt) -c

COMPILE_NO_OPENMP_NO_OPT = \
   $(FC) $(FCbasic) $(INCLUDES) $(FCwarn) $(FCimpno) $(FCchecks) $(FCdebug) -c -O
COMPILE_ASAP = \
   $(FC) $(FCbasic) $(INCLUDES) $(FCwarn) $(FCimpno) $(FCdebug) -c -O

COMPILE_FAST = $(COMPILE_BASIC) -c
COMPILE_NO_CHECKS = $(COMPILE_BASIC) $(FCopt) -c
COMPILE_NO_OPT    = $(COMPILE_BASIC) $(FCwarn) $(FCimpno) $(FCchecks) $(FCdebug) -c -O
COMPILE_DEVEL     = $(COMPILE_NO_OPT)

# some definitions used in the test makefiles and client makefiles
TEST_DIR = ..
TEST_SRC_DIR = $(TEST_DIR)/src
PACKAGE_DIR = ../..
LOCAL_LIB_DIR = $(PACKAGE_DIR)/make
MESA_LIB_DIR = $(MESA_DIR)/lib
MESA_INCLUDE_DIR = $(MESA_DIR)/include
TEST_INCLUDES = -I$(LOCAL_LIB_DIR) -I$(PACKAGE_DIR)/public -I$(MESA_INCLUDE_DIR) $(INCLUDE_SE)
TEST_COMPILE_FLAGS = $(FCbasic) $(FCopenmp) $(TEST_INCLUDES) $(FCchecks) $(FCdebug) -c
TEST_COMPILE = $(FC) $(TEST_COMPILE_FLAGS)

LOAD_MATRIX = -lmtx -lmesaklu $(LOAD_LAPACK) $(LOAD_BLAS)
LOAD_MESA_NUMERICS = -linterp_2d -linterp_1d -lnum -lutils -lalert -lconst $(LOAD_MATRIX)

# micro uses numerics
LOAD_MESA_MICRO = -leos -lkap \
   -lnet -lscreen -lrates -lreaclib -lweak -lneu -lchem $(LOAD_MESA_NUMERICS)

# macro uses micro
LOAD_MESA_MACRO = \
   -ldiffusion -lionization -latm -lcolors -lmlt $(LOAD_MESA_MICRO)

# star_support uses macro (for now, LOAD_MESA_STAR_SUPPORT just = LOAD_MESA_MACRO)
LOAD_MESA_STAR_SUPPORT = $(LOAD_MESA_MACRO)

# star uses star_support
LOAD_STAR_MODS = -lstar $(LOAD_MESA_STAR_SUPPORT)

# this does the -L for mesa star
LOAD_MESA_STAR = -L$(MESA_LIB_DIR) $(LOAD_STAR_MODS) $(LOAD_PGPLOT) $(LOAD_SE)

# LOADER creates executables
ifeq ($(USE_MPI),YES)
   LOADER = mpif77
else
   LOADER = $(FC)
endif

# LIB_TOOL creates libraries
LIB_TOOL = ar crs


STAR_WORK_OBJS = \
   run_star_extras.o run_star.o 


