#!/bin/sh

# make a file dependency list for .f files.  Assumed no nested
# file inclusion.
#
# REVISION HISTORY:
#
# Dark Ages    J. Guo    Wrote it.
# 23dec1999    da Silva  Added handling of external references through
#                        file Externals.depend.

c=`basename $0`
if [ $# -eq 0 ]; then
  echo "Usage: ${c} <*.[fF]>" 1>&2
  exit 1
fi

EXTERNALS=Externals.depend

tscr="${TMPDIR:-/tmp}/$$S"
rscr="${TMPDIR:-/tmp}/$$R"
tmp="${TMPDIR:-/tmp}/$$t"
trap "rm -f ${tscr} ${rscr}; trap '' 0; exit 0" 0
trap "rm -f ${tscr} ${rscr}; trap '' 1; exit 1" 1
trap "rm -f ${tscr} ${rscr}; trap '' 2; exit 2" 2
trap "rm -f ${tscr} ${rscr}; trap '' 3; exit 3" 3
trap "rm -f ${tscr} ${rscr}; trap '' 15; exit 15" 15

# Make sed script
#=================
cat <<'EOT' >$tscr
#n

/^\#include/{
s/^[^"<]*["<]//
s/[">].*$//
s/^\#include[ 	]*//
p
b
}

/^[ 	]*[Ii][Nn][Cc][Ll][Uu][Dd][Ee]/{
s/^[ 	]*[Ii][Nn][Cc][Ll][Uu][Dd][Ee][ 	]*//
s/\!.*$//
s/['"]//g
s/[ 	]*$//
p
b
}

/^[ 	]*[Uu][Ss][Ee][ 	]\b*/{
s/^[ 	]*[Uu][Ss][Ee][ 	]*//
s/[ 	]*\!.*$//
s/[ 	]*,[	 ]*[Oo][Nn][Ll][Yy].*$//
s/$/.o/
p
b
}
EOT


# Include external dependencies

    files=$@
    if [ -r ${EXTERNALS} ]; then

         touch $rscr
         ext=`cut -f1 -d: ${EXTERNALS}`
         set `cut -f2 -d: ${EXTERNALS}`
         i=1
         for old in $ext; do
             new=`eval echo '$'{$i}` 
             if [ "$new" = "IGNORE" ]; then
                  new=""
         fi 
             echo s/$old/$new/ >> $rscr 
             i=`expr $i + 1`
         done

    fi

# Processing loop
#=================
for f in $files; do
  if [ -f "$f" ]; then

#   Instead of using basename, sed is used to reserve the fullname
    o=`echo "$f" | sed -e "s:\.[fF]$:.o:" -e "s:\.[fF]90$:.o:"`

    if [ -r ${EXTERNALS} ]; then

      sed -f $tscr $f | sed -f $rscr | sort -u | \
        ( tr "\012" " "; echo "") | \
        sed -e "s;^;$o: ;" -e  "s/  *$//"

    else

      sed -f $tscr $f | sort -u | \
        ( tr "\012" " "; echo "") | \
        sed -e "s;^;$o: ;" -e  "s/  *$//"

    fi
  fi
done


#


