
SRCS1	= $(shell ls $(COUPLE)/lib/psmile/src/*.F90)
OBJS0	= $(patsubst $(COUPLE)/lib/psmile/src/%.F90, %.o, $(SRCS1))
OBJS1   = $(OBJS0) GPTLget_memusage.o shr_reprosumx86.o

VPATH 	= .:$(COUPLE)/lib/psmile/src:\
	     $(COUPLE)/lib/psmile/include:\
	     $(NETCDF_INCLUDE):$(MPI_INCLUDE)

LIBRARY = $(ARCHDIR)/lib/libpsmile.${CHAN}.a

DYNLIBRARY = $(ARCHDIR)/lib/libpsmile.${CHAN}.so

clean:
	rm -f i.* *.o *.mod

all:	$(LIBRARY)

shared: $(DYNLIBRARY)

$(LIBRARY): PREBUILTDIR := $(LIBBUILD)
$(LIBRARY): $(OBJS1) 
	$(AR) $(ARFLAGS) $(LIBRARY) $(OBJS1) 

$(DYNLIBRARY): PREBUILTDIR := $(LIBBUILDSHARED)
$(DYNLIBRARY): F90FLAGS += $(DYNOPT)
$(DYNLIBRARY): CCFLAGS += $(DYNOPT)
$(DYNLIBRARY): LDFLAGS += $(DYNOPT) $(LDDYNOPT)
$(DYNLIBRARY): $(OBJS1)  $(OBJS3) $(OBJS4)
	$(F90) $(LDFLAGS) -o $(DYNLIBRARY) $(OBJS1) $(OBJS3) $(OBJS4) $(NETCDF_LIBRARY) -L$(ARCHDIR)/lib -lscrip -lmct -lmpeu

INCLS = -I$(COUPLE)/lib/psmile/include \
        -I$(PREBUILTDIR)/mct \
        -I$(PREBUILTDIR)/scrip

INCLSC = -I$(COUPLE)/lib/psmile/include
.SUFFIXES:
.SUFFIXES: .o .F90 .c

%.o: %.F90
	$(F90) $(F90FLAGS) $(INCLS)  -c   $<

%.o: %.c
	$(CC) $(CCFLAGS) $(INCLSC) -c   $<

GPTLget_memusage.o: GPTLget_memusage.c
	$(CC) $(CCFLAGS) -DHAVE_SLASHPROC -c   $<

shr_reprosumx86.o: shr_reprosumx86.c
	$(CC) $(CCFLAGS) -c   $<

mod_psmile_io.o: mod_psmile_io.F90
	$(F90) $(F90FLAGS) $(INCLS)  -c   $<

# problem is that mct_mod always has a new timestamp even when it shouldn't
# so just copy the file, but don't create a dependency for now.
# need to add a check whether mct_mod.o has changed and only copy if it has.
#mct_mod.o: $(ARCHDIR)/build/lib/mct/mct_mod.o
#	cp -p $(ARCHDIR)/build/lib/mct/mct_mod.o .
mct_mod.o: 
	cp -p $(PREBUILTDIR)/mct/mct_mod.o .

#
# ALL dependencies ...
#

shr_reprosumx86.o:
GPTLget_memusage.o:
mod_oasis_kinds.o:
mod_oasis_parameters.o: mod_oasis_kinds.o
mod_oasis_data.o: mod_oasis_kinds.o 
mod_oasis_sys.o: mod_oasis_kinds.o mod_oasis_data.o
mod_oasis_mem.o: mod_oasis_kinds.o GPTLget_memusage.o mod_oasis_sys.o
mod_oasis_timer.o: mod_oasis_kinds.o mod_oasis_sys.o mod_oasis_data.o
mod_oasis_load_balancing.o: mod_oasis_kinds.o mod_oasis_sys.o mod_oasis_data.o
mod_oasis_mpi.o: mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o mod_oasis_timer.o
mod_oasis_reprosum.o: mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_timer.o shr_reprosumx86.o mod_oasis_mpi.o
mod_oasis_string.o: mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_parameters.o
mod_oasis_namcouple.o: mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_parameters.o mod_oasis_mpi.o mod_oasis_string.o
mod_oasis_part.o: mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_parameters.o mod_oasis_timer.o mod_oasis_mpi.o mct_mod.o \
	mod_oasis_load_balancing.o mod_oasis_io.o
mod_oasis_var.o: mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_parameters.o mod_oasis_timer.o mod_oasis_mpi.o mod_oasis_part.o
mod_oasis_ioshr.o:  mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_mpi.o mod_oasis_string.o mct_mod.o
mod_oasis_io.o:  mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_parameters.o mod_oasis_ioshr.o mod_oasis_mpi.o mct_mod.o
mod_oasis_grid.o: mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_io.o mod_oasis_part.o mod_oasis_mpi.o mod_oasis_timer.o mct_mod.o
mod_oasis_map.o: mod_oasis_kinds.o  mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_parameters.o mod_oasis_mpi.o mod_oasis_var.o mod_oasis_part.o  \
        mod_oasis_string.o mod_oasis_namcouple.o mod_oasis_timer.o mod_oasis_io.o  mct_mod.o
mod_oasis_coupler.o: mod_oasis_kinds.o  mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_map.o mod_oasis_parameters.o mod_oasis_mpi.o mod_oasis_var.o mod_oasis_part.o  \
        mod_oasis_string.o mod_oasis_namcouple.o mod_oasis_timer.o mod_oasis_io.o \
        mod_oasis_mem.o mct_mod.o mod_oasis_load_balancing.o
mod_oasis_advance.o: mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_parameters.o mod_oasis_var.o mod_oasis_part.o mod_oasis_mpi.o \
        mod_oasis_coupler.o mod_oasis_timer.o mod_oasis_io.o mod_oasis_mem.o mct_mod.o \
        mod_oasis_map.o mod_oasis_reprosum.o mod_oasis_load_balancing.o
mod_oasis_method.o: mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_parameters.o mod_oasis_coupler.o mod_oasis_namcouple.o \
        mod_oasis_timer.o mod_oasis_ioshr.o mod_oasis_advance.o mod_oasis_grid.o \
        mod_oasis_mpi.o mod_oasis_part.o mod_oasis_var.o mod_oasis_mem.o mct_mod.o \
        mod_oasis_load_balancing.o
mod_oasis_getput_interface.o: mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o \
        mod_oasis_parameters.o mod_oasis_var.o mod_oasis_advance.o mct_mod.o
mod_oasis_auxiliary_routines.o: mod_oasis_kinds.o mod_oasis_data.o mod_oasis_sys.o \
	mod_oasis_parameters.o mod_oasis_var.o mod_oasis_mpi.o \
	mod_oasis_coupler.o mod_oasis_timer.o mod_oasis_io.o mct_mod.o
mod_prism.o: mod_oasis_kinds.o mod_oasis_part.o mod_oasis_sys.o \
	mod_oasis_getput_interface.o mod_oasis_parameters.o \
	mod_oasis_grid.o mod_oasis_method.o mod_oasis_var.o
mod_oasis.o: mod_oasis_kinds.o mod_oasis_part.o mod_oasis_sys.o \
	mod_oasis_getput_interface.o mod_oasis_parameters.o mod_oasis_auxiliary_routines.o \
	mod_oasis_grid.o mod_oasis_method.o mod_oasis_var.o

