#
# Generalized rules for all:

REGISTRY        =       Registry
FCBASEOPTS      =       $(FCTYPE) $(FCBASE) $(FCFORM) $(FCHOST) $(FCDEBUG) -I.
FC_FFT_RF_OPTS  =       $(FCTYPE) $(FC_FFT_RF) $(FCFORM) $(FCHOST) $(FCDEBUG) -I.
FCFLAGS         =       $(FCOPTIM) $(FCBASEOPTS)
INCLUDE_MODULES =       -I../$(NETCDF_IO_PATH) -I../external/io_int  \
                        -I../frame -I../share -I../inc

#
# Generalized rules for WRF-3DVAR:

REGISTRY        =      Registry_3dvar

INC_MOD_3DVAR   =       -I../../da_3dvar -I../../$(NETCDF_IO_PATH) \
                        -I../../external/io_int  \
                        -I../../frame -I../../share -I../../inc
FCFLAGS_3DVAR   =       $(FCOPTIM) $(FCBASEOPTS)
FCFLAGS_FFT_RF  =       $(FCOPTIM) $(FC_FFT_RF_OPTS)
F77FLAGS_BUFR   =       $(FCTYPE) $(FCBUFR)  $(FCHOST) $(FCDEBUG) -I.
F77FLAGS_3DVAR  =       $(FCTYPE) $(FCBASE)  $(FCHOST) $(FCDEBUG) -I.
CPPFLAGS_3DVAR  =       $(TRADFLAG) \
                        -I$(LIBINCLUDE) -I../../inc \
                        -C -P $(ARCHFLAGS) \
                        -C -P `cat ../../inc/dm_comm_cpp_flags`
FUFLAGS         =       $(FCOPTIM) $(FCBASE) $(FCFORM) $(FCDEBUG)

#
# compile these for all platforms:

wrfio_nf :
	( cd ../external/io_netcdf ; \
          make NETCDFPATH="$(NETCDFPATH)" \
               FC="$(FC_NETCDF) $(FCBASE) $(FCFORM) $(FCDEBUG) -I." \
               TRADFLAG="$(TRADFLAG)" ; \
               FFLAGS="$(FCFLAGS) -I$(NETCDFPATH)/include" ; \
           /bin/cp wrf_io_flags.h wrf_status_codes.h ../../inc )

wrfio_int :
	( cd ../external/io_int ; \
          make CC=$(CC) TRADFLAG="$(TRADFLAG)" \
               FC="$(FC) $(FCBASE) $(FCFORM) $(FCDEBUG) -I../../inc" all )

#
# compile these without high optimization to speed compile
module_io.o : module_io.F
module_dm.o : module_dm.F
module_start.o : module_start.F
start_domain.o : start_domain.F
module_io_wrf.o : module_io_wrf.F
module_domain.o : module_domain.F
module_io_domain.o : module_io_domain.F

# to prevent having to call our service representative
module_io.o module_io_domain.o \
module_io_wrf.o module_domain.o \
module_start.o module_dm.o start_domain.o :
	$(RM) $@
	sed /\!.\*\'/s/\'//g $*.F > $*.b
	$(CPP) -I../inc $(CPPFLAGS) $*.b > $*.f
	$(RM) $*.b
	$(FC) -c -g $(FCBASEOPTS) $(MODULE_DIRS) $*.f

#	There is probably no reason to modify these rules

.F.i:
	$(RM) $@
	$(CPP) -I../inc $(CPPFLAGS) $*.F > $@
	mv $*.i $(DEVTOP)/pick/$*.f
	cp $*.F $(DEVTOP)/pick

.F.o:
	$(RM) $@
	sed /\!.\*\'/s/\'//g $*.F > $*.b 
	$(CPP) -I../inc $(CPPFLAGS) $*.b > $*.f
	$(RM) $*.b
	$(FC) -c $(FCFLAGS) $(MODULE_DIRS) $*.f

.F.f:
	$(RM) $@
	sed /\!.\*\'/s/\'//g $*.F > $*.b 
	$(CPP) -I../inc $(CPPFLAGS) $*.b > $@
	$(RM) $*.b

.f.o:
	$(RM) $@
	$(FC) -c $(FCFLAGS) $*.f

.c.o:
	$(RM) $@
	$(CC) -c $(CFLAGS) $*.c

