##############################################################################
#This is the top makefile for compiling OASIS3-MCT coupling library including
#  mct/mpeu, scrip and psmile (i.e. interpolation and communication)
#Platform dependent settings, compiler options, cpp keys, 
#paths and other stuff has to be set in an include file indicated in make.inc.
# 
# default : mct/mpeu, scrip and psmile
# oasis3_psmile (for OASIS3 upward compatibility): mct/mpeu, scrip and psmile
# realclean : Automatic recompilation of all sources
#
#######
include make.inc
#
SHELL = /bin/sh
MAKEf = $(MAKE) -f TopMakefileOasis3
#
# Defining path for FORTRAN and C sources
LIBSRC  = $(COUPLE)/lib
#
# Log and error files for compiling
LOG = $(COUPLE)/util/make_dir/COMP.log
ERR = $(COUPLE)/util/make_dir/COMP.err
#
#######
default: 
	 rm -f $(LOG) $(ERR)
	 $(MAKEf) makedirs
	 $(MAKEf) makemct
	 $(MAKEf) makelibs
	 $(MAKEf) makepsmile
#
oasis3_psmile:
	rm -f $(LOG) $(ERR)
	$(MAKEf) makedirs
	$(MAKEf) makemct
	$(MAKEf) makelibs
	$(MAKEf) makepsmile
#
realclean:
	$(MAKEf) cleanlibs
#
# Rules for creating build and library directories
#
makedirs:
	@mkdir -p $(ARCHDIR)/build/lib/scrip
	@mkdir -p $(ARCHDIR)/build/lib/mctdir
	@mkdir -p $(ARCHDIR)/build/lib/mct
	@mkdir -p $(ARCHDIR)/build/lib/psmile.$(CHAN)
	@mkdir -p $(ARCHDIR)/lib
#
# Rules for compiling mpeu/mct library
# 
makemct:
	@echo "=> Compiling library mpeu and mct"
	(cd $(ARCHDIR)/build/lib/mctdir; cp -f -r -p $(LIBSRC)/mct/* .;\
         ./configure MPIFC="$(F90)" FC="$(F90)" CC="$(CC)" \
         1>> $(LOG) 2>> $(ERR) ;\
         $(MAKE) 1>> $(LOG) 2>> $(ERR) ; \
         cp -f ./*/lib*.a   $(ARCHDIR)/lib/; \
         cp -f ./*/*.o    $(ARCHDIR)/build/lib/mct/; \
         cp -f ./*/*.mod  $(ARCHDIR)/build/lib/mct/;)
#
# Rules for compiling the libraries scrip and psmile
#
makelibs:
	@echo "=> Compiling library scrip"
	(cd $(ARCHDIR)/build/lib/scrip; cp -f $(LIBSRC)/scrip/src/Makefile .;\
         $(modifmakefile) ; $(MAKE) all 1>> $(LOG) 2>> $(ERR) )

makepsmile:
	@echo "=> Compiling library psmile"
	(cd $(ARCHDIR)/build/lib/psmile.$(CHAN) ; \
         cp -f $(LIBSRC)/psmile/src/Makefile . ; $(modifmakefile) ; \
         $(MAKE) all 1>> $(LOG) 2>> $(ERR) )
#
# Rules for cleaning
#
cleanlibs:
	@echo cleaning oasis3-mct libraries
	rm -f $(ARCHDIR)/build/lib/scrip/*
	rm -f $(ARCHDIR)/build/lib/mct/*
	rm -f -r $(ARCHDIR)/build/lib/mctdir/*
	rm -f $(ARCHDIR)/build/lib/psmile.$(CHAN)/*
	rm -f $(ARCHDIR)/lib/libscrip.a
	rm -f $(ARCHDIR)/lib/libmct.a
	rm -f $(ARCHDIR)/lib/libmpeu.a
	rm -f $(ARCHDIR)/lib/libpsmile.$(CHAN).a
#
## Some rules to modify/add variables in makefiles
#
modifmakefile =	( echo 'include $(COUPLE)/util/make_dir/make.inc' \
                         > infile; cat Makefile >> infile ; cp -f infile Makefile )
#
########################################################################################
