# *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
# ** Copyright UCAR (c) 1992 - 2005
# ** University Corporation for Atmospheric Research(UCAR)
# ** National Center for Atmospheric Research(NCAR)
# ** Research Applications Lab (RAL)
# ** P.O.Box 3000, Boulder, Colorado, 80307-3000, USA
# *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

###############################################################################
#
# Makefile for the Model Evaluation Tools Project
# for use with the Intel Compilers
#
###############################################################################

###############################################################################
#
# Begin Variables to be modified before building
#
###############################################################################

# Path to GNU Make command
MAKE         = /usr/bin/make

# Architecture flags
ARCH_FLAGS   = -DBLOCK4

# Path to the C++ Compiler
# C++ compiler flags
# Any additional required libraries
CXX          = /usr/bin/g++
CXX_FLAGS    = -Wall -Wshadow -static # -g
CXX_LIBS     =

# Path to the Fortran Compiler
# Fortran compiler flags
# Any additional required libraries
FC           = /usr/bin/ifort
FC_FLAGS     = -static # -g
FC_LIBS      = -lifcore

# Make print options
PRINT_OPTS   = --no-print-directory

# Top level directory for the NetCDF library
# NetCDF include directory specified as: -I/your/include/path
# NetCDF library directory specified as: -L/your/library/path
NETCDF_BASE  = /usr/local
NETCDF_INCS  = -I$(NETCDF_BASE)/include
NETCDF_LIBS  = -L$(NETCDF_BASE)/lib

# Top level directory for BUFRLIB
# BUFRLIB include directory specified as: -I/your/include/path
# BUFRLIB library directory specified as: -L/your/library/path
BUFR_BASE    = /usr/local
BUFR_INCS    = -I$(BUFR_BASE)
BUFR_LIBS    = -L$(BUFR_BASE)

# Top level directory for the GNU Scientific Library (GSL) if it's not
# installed in a standard location.
# GSL include directory specified as: -I/your/include/path
# GSL library directory specified as: -L/your/library/path
GSL_BASE     = /usr/local
GSL_INCS     = -I$(GSL_BASE)/include/gsl
GSL_LIBS     = -L$(GSL_BASE)/lib

# Top level directory for the F2C or G2C Library if it's not installed in a
# standard location.
# F2C include directory specified as: -I/your/include/path
# F2C library directory containing libf2c.a or libg2c.a and specified as:
# -L/your/library/path
# Name of the library to be used: -lf2c or -lg2c
F2C_BASE     = /usr/local
F2C_INCS     = -I$(F2C_BASE)/include
F2C_LIBS     = -L$(F2C_BASE)/lib
F2C_LIBNAME  = -lf2c

# Optional flags to disable the compilation of MET tools
# Specify a non-zero value to disable the compilation of the tool
DISABLE_PCP_COMBINE   = 0
DISABLE_GEN_POLY_MASK = 0
DISABLE_MODE          = 0
DISABLE_GRID_STAT     = 0
DISABLE_PB2NC         = 0
DISABLE_ASCII2NC      = 0
DISABLE_POINT_STAT    = 0
DISABLE_WAVELET_STAT  = 0
DISABLE_STAT_ANALYSIS = 0
DISABLE_MODE_ANALYSIS = 0

###############################################################################
#
# End Variables to be modified before building
#
###############################################################################

###############################################################################
#
# Export variables to be used by submakes
#
###############################################################################

export MAKE
export ARCH_FLAGS

export CXX
export CXX_FLAGS
export CXX_LIBS

export FC
export FC_FLAGS
export FC_LIBS

export NETCDF_INCS
export NETCDF_LIBS

export BUFR_INCS
export BUFR_LIBS

export GSL_INCS
export GSL_LIBS

export F2C_INCS
export F2C_LIBS
export F2C_LIBNAME

# Top level directory for the MET build
MET_BASE     = ${PWD}

export MET_BASE

###############################################################################
#
# End export variables to be used by submakes
#
###############################################################################

FAKES		= all clean libs targets

LIB_DIR		= lib

INC_DIR		= lib

SRC_DIR		= src

OUT_DIR		= out

VX_AFM		= $(LIB_DIR)/vx_afm
VX_ANALYSIS_UTIL= $(LIB_DIR)/vx_analysis_util
VX_CAL		= $(LIB_DIR)/vx_cal
VX_COLOR	= $(LIB_DIR)/vx_color
VX_CONTABLE	= $(LIB_DIR)/vx_contable
VX_DATA_GRIDS	= $(LIB_DIR)/vx_data_grids
VX_ECONFIG	= $(LIB_DIR)/vx_econfig
VX_GNOMON	= $(LIB_DIR)/vx_gnomon
VX_GRIB_CLASSES	= $(LIB_DIR)/vx_grib_classes
VX_GSL_PROB	= $(LIB_DIR)/vx_gsl_prob
VX_MATH		= $(LIB_DIR)/vx_math
VX_MET_UTIL	= $(LIB_DIR)/vx_met_util
VX_NAV		= $(LIB_DIR)/vx_nav
VX_PLOT_UTIL	= $(LIB_DIR)/vx_plot_util
VX_PS		= $(LIB_DIR)/vx_ps
VX_PXM		= $(LIB_DIR)/vx_pxm
VX_RENDER	= $(LIB_DIR)/vx_render
VX_UTIL		= $(LIB_DIR)/vx_util
VX_PB_UTIL	= $(LIB_DIR)/vx_pb_util
VX_WRFDATA	= $(LIB_DIR)/vx_wrfdata
VX_WRFMODE	= $(LIB_DIR)/vx_wrfmode
PCP_COMBINE	= $(SRC_DIR)/pcp_combine
GEN_POLY_MASK	= $(SRC_DIR)/gen_poly_mask
MODE		= $(SRC_DIR)/mode
GRID_STAT	= $(SRC_DIR)/grid_stat
PB2NC		= $(SRC_DIR)/pb2nc
ASCII2NC	= $(SRC_DIR)/ascii2nc
POINT_STAT	= $(SRC_DIR)/point_stat
WAVELET_STAT	= $(SRC_DIR)/wavelet_stat
STAT_ANALYSIS	= $(SRC_DIR)/stat_analysis
MODE_ANALYSIS	= $(SRC_DIR)/mode_analysis

all:
	@ echo
	@ echo "*** Making the Model Evaluation Tools Project ***"
	@ echo
	@ $(MAKE) libs    $(PRINT_OPTS)
	@ $(MAKE) targets $(PRINT_OPTS)
	@ echo
	@ echo "*** Finished Making the Model Evaluation Tools Project ***"
	@ echo

libs:
	@ cd $(VX_AFM);		 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_ANALYSIS_UTIL);$(MAKE) $(PRINT_OPTS)
	@ cd $(VX_CAL);		 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_COLOR);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_CONTABLE);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_DATA_GRIDS);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_ECONFIG);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_GNOMON);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_GRIB_CLASSES); $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_GSL_PROB);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_MATH);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_MET_UTIL);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_NAV);		 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_PLOT_UTIL);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_PS);		 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_PXM);		 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_RENDER);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_UTIL);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_PB_UTIL);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_WRFDATA);	 $(MAKE) $(PRINT_OPTS)
	@ cd $(VX_WRFMODE);	 $(MAKE) $(PRINT_OPTS)

targets:
ifeq ($(DISABLE_PCP_COMBINE), 0)
	@ cd $(PCP_COMBINE);	 $(MAKE) $(PRINT_OPTS)
endif
ifeq ($(DISABLE_GEN_POLY_MASK), 0)
	@ cd $(GEN_POLY_MASK);	 $(MAKE) $(PRINT_OPTS)
endif
ifeq ($(DISABLE_MODE), 0)
	@ cd $(MODE);		 $(MAKE) $(PRINT_OPTS)
endif
ifeq ($(DISABLE_GRID_STAT), 0)
	@ cd $(GRID_STAT);	 $(MAKE) $(PRINT_OPTS)
endif
ifeq ($(DISABLE_PB2NC), 0)
	@ cd $(PB2NC);		 $(MAKE) $(PRINT_OPTS)
endif
ifeq ($(DISABLE_ASCII2NC), 0)
	@ cd $(ASCII2NC);	 $(MAKE) $(PRINT_OPTS)
endif
ifeq ($(DISABLE_POINT_STAT), 0)
	@ cd $(POINT_STAT);	 $(MAKE) $(PRINT_OPTS)
endif
ifeq ($(DISABLE_WAVELET_STAT), 0)
	@ cd $(WAVELET_STAT);	 $(MAKE) $(PRINT_OPTS)
endif
ifeq ($(DISABLE_STAT_ANALYSIS), 0)
	@ cd $(STAT_ANALYSIS);	 $(MAKE) $(PRINT_OPTS)
endif
ifeq ($(DISABLE_MODE_ANALYSIS), 0)
	@ cd $(MODE_ANALYSIS);	 $(MAKE) $(PRINT_OPTS)
endif

clean:
	@ cd $(VX_AFM);		 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_ANALYSIS_UTIL);$(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_CAL);		 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_COLOR);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_CONTABLE);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_DATA_GRIDS);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_ECONFIG);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_GNOMON);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_GRIB_CLASSES); $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_GSL_PROB);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_MATH);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_MET_UTIL);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_NAV);		 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_PLOT_UTIL);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_PS);		 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_PXM);		 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_RENDER);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_UTIL);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_PB_UTIL);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_WRFDATA);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(VX_WRFMODE);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(PCP_COMBINE);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(GEN_POLY_MASK);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(MODE);		 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(GRID_STAT);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(PB2NC);		 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(ASCII2NC);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(POINT_STAT);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(WAVELET_STAT);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(STAT_ANALYSIS);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(MODE_ANALYSIS);	 $(MAKE) clean $(PRINT_OPTS)
	@ cd $(OUT_DIR);	 rm -f */*
	rm -r -f *.a *.o junk temp core log c.ps a.out

.PHONY: $(FAKES)
