# User options are in src/include/makefile.inc
# This Makefile is designed for gnu make version 3.75 or newer
# Please report problems to smart@fsl.noaa.gov


SRCROOT=.
include $(SRCROOT)/src/include/makefile.inc

LIBDIRS = src/lib \
          src/lib/w3lib \
          src/io_netcdf \
          src/mod

EXEDIRS = src/grid \
          src/grib_prep \
          src/hinterp \
          src/vinterp \
          src/util \
          src/staticpost

all: exe
gui: cgui cguiinstall

debug: debuglib debugggm debughinterp debugvinterp debuggp debugcgui debugspost

buildlib: lib debuglib
buildggm: exe
realclean: cleanlib cleanall

exe: lib
	@for dir in $(EXEDIRS) ;\
	  do \
	  echo " ";\
	  echo Making in directory $$dir ;\
	  (cd $$dir; if [ $$? != 0 ] ; then \
	        echo "Exit status from cd $$dir was $$?" ; exit 1 ; fi ;\
	  $(MAKE) all ; if [ $$? != 0 ] ; then \
	        echo "Exit status from make was $$?" ; exit 1 ; fi ;) ;\
	  done

lib:
	@for dir in $(LIBDIRS) ;\
	  do \
	  echo " ";\
	  echo Making in directory $$dir ;\
	  (cd $$dir; if [ $$? != 0 ] ; then \
	        echo "Exit status from cd $$dir was $$?" ; exit 1 ; fi ;\
	  $(MAKE) all ; if [ $$? != 0 ] ; then \
	        echo "Exit status from make was $$?" ; exit 1 ; fi ;) ;\
	  done

debuglib:
	@for dir in $(LIBDIRS) ;\
	  do \
	  echo " ";\
	  echo Making in directory $$dir ;\
	  (cd $$dir; if [ $$? != 0 ] ; then \
	        echo "Exit status from cd $$dir was $$?" ; exit 1 ; fi ;\
	  $(MAKE) debug ; if [ $$? != 0 ] ; then \
	        echo "Exit status from make was $$?" ; exit 1 ; fi ;) ;\
	  done

debugggm: ggmclean
	(cd src/grid ; \
	$(MAKE) debug )

debughinterp:
	(cd src/hinterp ; \
	$(MAKE) clean ; \
  	$(MAKE) debug )

debugvinterp:
	(cd src/vinterp ; \
	$(MAKE) clean ; \
	$(MAKE) debug )

debugspost:
	(cd src/staticpost ; \
	$(MAKE) clean ; \
	$(MAKE) debug )

debuggp:
	(cd src/grib_prep ; \
	$(MAKE) clean ; \
	$(MAKE) debug )

debugcgui:
	(cd gui/src ; \
	$(MAKE) clean ; \
	$(MAKE) debug )

install: all gprepinstall hinterpinstall vinterpinstall ggminstall utilinstall cguiinstall spostinstall

ggminstall:
	(cd src/grid ; \
	$(MAKE) install )

mkdirs:
	mkdir -p $(INSTALLROOT)
	ls -l  $(SRCROOT)/util; cp -r $(SRCROOT)/util $(INSTALLROOT) ; ls -l $(INSTALLROOT)/util 
	ls -l  $(SRCROOT)/etc;  cp -r $(SRCROOT)/etc  $(INSTALLROOT) ; ls -l $(INSTALLROOT)/etc 
	ls -l  $(SRCROOT)/gui/guiTk;  cp -r $(SRCROOT)/gui/guiTk  $(INSTALLROOT) ; ls -l $(INSTALLROOT)/gui/guiTk

cleanall: hinterpclean vinterpclean gprepclean ggmclean utilclean cleanlib cguiclean spostclean

cleanlib:
	@for dir in $(LIBDIRS);\
	  do \
	  echo " ";\
	  echo Making clean in directory $$dir ;\
	  (cd $$dir; if [ $$? != 0 ] ; then \
	        echo "Exit status from cd $$dir was $$?" ; exit 1 ; fi ;\
	  $(MAKE) clean ; if [ $$? != 0 ] ; then \
	        echo "Exit status from make was $$?" ; exit 1 ; fi ;) ;\
	  done

mod:
	(cd $(SRCROOT)/src/mod ; \
	$(MAKE) )

moddebug:
	(cd $(SRCROOT)/src/mod ; \
	$(MAKE) debug )
hinterp:
	(cd $(SRCROOT)/src/hinterp ; \
	$(MAKE) )

hinterpinstall:
	(cd $(SRCROOT)/src/hinterp ; \
	$(MAKE) install )

hinterpclean:
	(cd $(SRCROOT)/src/hinterp ; \
	$(MAKE) clean )

util:
	(cd $(SRCROOT)/src/util ; \
	$(MAKE) )

utilinstall:
	(cd $(SRCROOT)/src/util ; \
	$(MAKE) install )

utilclean:
	(cd $(SRCROOT)/src/util ; \
	$(MAKE) clean )

vinterp:
	(cd $(SRCROOT)/src/vinterp ; \
	$(MAKE) )

vinterpinstall:
	(cd $(SRCROOT)/src/vinterp ; \
	$(MAKE) install )

vinterpclean:
	(cd $(SRCROOT)/src/vinterp ; \
	$(MAKE) clean )

spost:
	(cd $(SRCROOT)/src/staticpost ; \
	$(MAKE) )

spostclean:
	(cd $(SRCROOT)/src/staticpost ; \
	$(MAKE) clean )

spostinstall:
	(cd $(SRCROOT)/src/staticpost ; \
	$(MAKE) install )

gribprep:
	(cd $(SRCROOT)/src/grib_prep ; \
	$(MAKE) )

gprepinstall:
	(cd $(SRCROOT)/src/grib_prep ; \
	$(MAKE) install )

gprepclean:
	(cd $(SRCROOT)/src/grib_prep ; \
	$(MAKE) clean )

ggmclean:
	(cd src/grid ; \
	$(MAKE) clean )

cgui:
	(cd $(SRCROOT)/gui/src/ ; \
	$(MAKE) )

cguiinstall:
	(cd $(SRCROOT)/gui/src/ ; \
	$(MAKE) install )

cguiclean:
	(cd gui/src ; \
	$(MAKE) clean )
