CFLAGS    =
FFLAGS    =
SOURCEC   =
SOURCEF   =
SOURCEH   = petsc.h petscdef.h petsclog.h petscvec.h petscsnes.h petscda.h petscdraw.h petscmat.h \
            petscksp.h petscpc.h petscviewer.h petscis.h petscao.h petscmg.h \
            petscsys.h petscts.h petscis.h90 petscvec.h90 petscmat.h90 petscda.h90
OBJSC     =
OBJSF     =
LIBBASE   = libpetscvec
DIRS      = 
MANSEC    = Sys
LOCDIR    = include/finclude/
NOADIC    = true

include ${PETSC_DIR}/bmake/common/base
include ${PETSC_DIR}/bmake/common/test







.SUFFIXES:
.SUFFIXES: .mod .inc .use

# don't remake moddeps, makefile
moddeps:
        touch moddeps
makefile:
        touch makefile

# remake all
forceall: clean_all all

# remake anly if we havn't allinone.h
all: makemodules allinone.h tidy_up

# clean all
clean_all: tidy_up
        rm -f *.mod

# leave only final files
tidy_up:
        rm -f ipath __tmp *.xinc *.f90.h *.f90 *.use *.inc modorder makefile.tmp allinone.h *.o *.f90

makefile.tmp: moddeps
        cp makefile makefile.tmp;\
        cat moddeps|grep -v '^ *#'|grep ':'|\
        sed 's/^ *\([^ ]*\)\(.*\)/\1\2 \1.f90.h/' >> makefile.tmp;\
        MODS=`cat moddeps|grep -v '^ *#'|grep ':'|sed 's/^ *\([^ ]*\).*/\1 /'`;\
        echo modules : $$MODS >> makefile.tmp

makemodules: makefile.tmp
        if [ ! -e allinone.h ]; then\
          rm -f modorder;\
          make -f makefile.tmp modules;\
        fi

allinone.h: modorder
        LAST=`tail -n 1 modorder`;if [ -e $$LAST.xinc ]; then cat $$LAST.xinc >>allinone.h;fi;\

# ---------------------------------- for "modules" target

# rule to make *.mod and *.xinc - cpp directives only file
# can not use %.mod rule as make is too clever :-(
%.f90.h : %.use %.inc
        echo "$*" >>modorder        
        # create source
        echo "      module $*" >$*.f90.h
        cat $*.use >>$*.f90.h
        cat $*.inc >>$*.f90.h
        echo "      end module $*" >>$*.f90.h
        ${CPP} ${FCPPFLAGS} $*.f90.h |grep -v "^ *#" >$*.f90
        ${FC} -c ${FC_FLAGS} ${FFLAGS} $*.f90
        # leave just preprocessor's directives in *.xinc
        cat $*.inc|grep "^ *#">$*.xinc

%.use : moddeps
        echo "USE: $*"
        cat moddeps|grep "^ *$*[ :]"|sed 's/^[^:]*: *//'|sed 's/  */\n/g'|\
        grep -v '^ *$$'|sed 's/^/      use /' >$*.use 

# find header file and all what it includes, merge it together, prepend by
# previous *.xinc
%.inc : ipath
        # search and copy header files
        for dir in `cat ipath`;\
        do if [ -e "$${dir}/${RPATH}/$*.h" ];\
          then cat "$${dir}/${RPATH}/$*.h" >$*.xinc;\
            if [ -e "$${dir}/${RPATH}/$*.h90" ];\
              then cat "$${dir}/${RPATH}/$*.h90" >>$*.xinc;\
            fi;\
            break;\
          fi;\
        done;\
        # make *.inc for all included headers and insert them
        INCLUDED=`cat $*.xinc|grep "^ *#include"|sed 's/^[^"<]*["<]\([^">]*\).*/\1 /'`;\
        for i in $$INCLUDED;\
        do name="$${i##*/}";rpath="$${i%$$name}";\
          make -f makefile.tmp RPATH=$$rpath "$${name%.h}.inc";\
          cat $*.xinc|sed "\%^ *#include *[\"<]$$i%r $${name%.h}.inc">__tmp;\
          mv -f __tmp $*.xinc;\
        done
        # insert *.xinc of previous modules
        rm -f $*.inc;touch $*.inc;\
        if [ -e modorder ]; then LAST=`tail -n 1 modorder`;fi;\
        if [ -e $$LAST.xinc ]; then cat $$LAST.xinc >>$*.inc;fi;\
        cat $*.xinc|grep -v "^ *#include" >>$*.inc;\


ipath:
        echo "-I/usr/include ${PETSC_DIR}/bmake/${PETSC_ARCH} ${PETSC_DIR}/include/finclude ${PETSC_DIR}/include ${PETSC_DIR} ${PACKAGES_INCLUDES}  "|sed 's/-I//g' > ipath