#! /bin/csh -f

# shell script for updating Makefile dependencies

# Mark Phillips, Wed Jun  6 13:57:09 1990

# usage: mkdep [-cflags flags] [ [-omit string] ... ] makefile sourcefiles

# This script generates a list of make dependencies for sourcefiles
# and puts them in makefile after the line
# 
# # BEGIN DEPENDENCY LIST
# 
# Anything currently in makefile after this line is deleted before
# the new dependency list is appended.  If the above line does not
# appear in makefile, it is appended to the makefile before the
# dependency list.
#
# The old makefile is renamed to makefile~.
#
# flags are passed to the cc command which generates dependency list.
# If any -omit options are present, pathnames in the dependency list
# containing string are eliminated before being appended to the
# makefile.  There may be multiple -omit options.  We always omit
# pathnames containing '/usr/include'.


#
# parse arguments
#

if ( $#argv < 1 ) goto usage

if ( "$1" == "-cflags" ) then
  set cflags = "$2"
  shift ; shift
else
  set cflags = ""
endif

set omitstrings = ()
while ( "$1" == "-omit" )
  set omitstrings = ( $omitstrings $2 )
  shift ; shift
end

set makefile = $1
shift
set sourcefiles = "$*"
set noglob
set deplistline = '# BEGIN DEPENDENCY LIST'
set deplistregexp = "^$deplistline *"

set deplist = mkdep.$$
set makefile0 = mkdep.$$.m0
set makefile1 = mkdep.$$.m1
onintr abort

#
# generate the dependency list
#
/bin/rm -f $deplist
cc $cflags -M $sourcefiles | grep -v '/usr/include' > $deplist

#
# weed out pathnames to be omitted
#
foreach string ( $omitstrings )
  grep -v $string < $deplist > $deplist.new
  /bin/mv $deplist.new $deplist
end

#
# edit the makefile
# 
sed -e "/$deplistregexp/,$ d" < $makefile > $makefile0
cat $makefile0 - $deplist > $makefile1 <<STOP
$deplistline

STOP
/bin/rm -f $makefile0 $deplist
onintr -
/bin/mv $makefile $makefile~
/bin/mv $makefile1 $makefile

exit 0

abort:
  /bin/rm -f $deplist $makefile0 $makefile1
  echo "mkdep aborted, $makefile unchanged."
  exit 0

usage:
  echo 'usage: mkdep [-cflags flags] [ [-omit string] ... ] makefile sourcefiles'
  exit -1
