#######################################################################
# Makefile                                    Arthur.Taylor@noaa.gov
#                              Decision Support Branch, MDL/OSTI/NWS
#                                                       Dec 14, 2017
# Makefile for degrib
# Usage:
#   make         - Build the executable
#   make install - Move the built executable to the exec dir
#   make clean   - Start with a clean slate
#######################################################################
CC      = $(C_COMP)

# Various directories
BINDIR = ../../exec
LIBDIR = ../../lib
EMAPF_SRC = $(LIBDIR)/sorc/emapf-c
GD_SRC = /usr/include

# Compiler flags
CFLAGS = -O3 -Wall
# CFLAGS += -strict-ansi
# CFLAGS += -fsigned-char -Wextra -pedantic -ansi

# Program #defines
CFLAGS += -DSIZEOF_LONG_INT=8# # Compile on a 64 bit platform
CFLAGS += -D__64BIT__#         # Use 64 bit compilation
CFLAGS += -D_LINUX_#           # Assume linux (rather than windows)

# Include paths
INC     = -I$(G2C_INC)
INC    += -I$(EMAPF_SRC)
INC    += -I$(GD_SRC)
CFLAGS += -I. $(INC)

# Libraries and linker flags
EMAPF_LIB = $(LIBDIR)/libemapf.a
GD_LIB = -L /usr/lib64/ -lgd
LIBS    = $(G2C_LIB) $(GD_LIB) $(PNG_LIB) $(Z_LIB) $(JASPER_LIB) $(EMAPF_LIB)
LDFLAGS =

# Source, Headers and Objects
SOURCE=chain.c
SOURCE+=clock.c
SOURCE+=commands.c
SOURCE+=cube.c
SOURCE+=database.c
SOURCE+=degrib1.c
SOURCE+=degrib2.c
SOURCE+=drawgrib.c
SOURCE+=drawlib.c
SOURCE+=engribapi.c
SOURCE+=genprobe.c
SOURCE+=grib1tab.c
SOURCE+=grib2api.c
SOURCE+=grpprobe.c
SOURCE+=hazard.c
SOURCE+=interp.c
SOURCE+=inventory.c
SOURCE+=ioapi.c
SOURCE+=mapini.c
SOURCE+=metaname.c
SOURCE+=metaparse.c
SOURCE+=metaprint.c
SOURCE+=myassert.c
SOURCE+=myerror.c
SOURCE+=mymapf.c
SOURCE+=myutil.c
SOURCE+=myzip.c
SOURCE+=pack.c
SOURCE+=probe.c
# SOURCE+=readnc.c
SOURCE+=scan.c
SOURCE+=sector.c
SOURCE+=solar.c
SOURCE+=split.c
SOURCE+=tdlpack.c
SOURCE+=tendian.c
SOURCE+=userparse.c
SOURCE+=weather.c
SOURCE+=writecsv.c
SOURCE+=writeflt.c
SOURCE+=writegra.c
SOURCE+=writekml.c
# SOURCE+=writenc.c
SOURCE+=writeshp.c
SOURCE+=zip.c

HEADERS=chain.h
HEADERS+=clock.h
HEADERS+=commands.h
# HEADERS+=crypt.h
HEADERS+=cube.h
HEADERS+=database.h
HEADERS+=degrib1.h
HEADERS+=degrib2.h
HEADERS+=drawgrib.h
HEADERS+=drawlib.h
HEADERS+=genprobe.h
HEADERS+=grpprobe.h
HEADERS+=hazard.h
HEADERS+=interp.h
HEADERS+=inventory.h
HEADERS+=ioapi.h
HEADERS+=libaat.h
HEADERS+=libaat_type.h
HEADERS+=mapini.h
HEADERS+=mdl_g2c.h
HEADERS+=meta.h
HEADERS+=metaname.h
HEADERS+=myassert.h
HEADERS+=mycomplex.h
HEADERS+=myerror.h
HEADERS+=mymapf.h
HEADERS+=myutil.h
HEADERS+=myzip.h
HEADERS+=pack.h
HEADERS+=probe.h
HEADERS+=scan.h
HEADERS+=sector.h
HEADERS+=solar.h
HEADERS+=split.h
HEADERS+=tdlpack.h
HEADERS+=tendian.h
HEADERS+=type.h
HEADERS+=userparse.h
HEADERS+=weather.h
HEADERS+=write.h
HEADERS+=zip.h

OBJS=$(SOURCE:.c=.o)

# File with 'main()'
MAIN=cstart.c

CMD     = degrib
# CMDFLAGS  = $(CFLAGS) -DPKGVERS=\"1.1\" -DPKGDATE=\"2016-03-16\"
# CMDFLAGS += $(CFLAGS) -DHOLD_CONSTANT#  # Allow stationary storms during cubic spline

#######################################################################
# Actual rules to build the program
#######################################################################
#all: check_prereqs $(CMD)
all: $(CMD)

$(CMD): $(OBJS) $(HEADERS) $(MAIN)
	$(CC) $(MAIN) $(CMDFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -o $(CMD)

install: $(CMD)
	mv $(CMD) ${BINDIR}/

clean:
	-rm -f $(OBJS) $(CMD)
#	(cd $(GRIB2_SRC) && make clean)
#	(cd $(EMAPF_SRC) && make clean)
#	(cd $(GD_SRC) && make clean)
#	-rm -f $(GRIB2_LIB)
#	-rm -f $(EMAPF_LIB) $(GD_LIB)

#check_prereqs: $(GRIB2_LIB) $(EMAPF_LIB) $(GD_LIB)
#check_prereqs: $(EMAPF_LIB) $(GD_LIB)
#	$(SPADIR)/check_libs.bash $(LIBS)

.c.o: $(HEADERS)
	$(CC) -c $(CFLAGS) $<

#$(GRIB2_LIB): $(GRIB2_SRC)/Makefile
#	(cd $(GRIB2_SRC) && make clean install)
#
$(EMAPF_LIB): $(EMAPF_SRC)/Makefile
	(cd $(EMAPF_SRC) && make clean install)

$(GD_LIB): $(GD_SRC)/Makefile
	(cd $(GD_SRC) && make clean)
	(cd $(GD_SRC) && make)
	cp $(GD_SRC)/libgd.a $(GD_LIB)