#!/bin/sh -
#
# Copyright (c) 1987 Regents of the University of California.
#
# Redistribution and use in source and binary forms are permitted
# provided that this notice is preserved and that due credit is given
# to the University of California at Berkeley. The name of the University
# may not be used to endorse or promote products derived from this
# software without specific prior written permission. This software
# is provided ``as is'' without express or implied warranty.
#
#	@(#)mkdep.sh	5.9 (Berkeley) 1/1/88
#
# Changed by makholm@diku.dk, at 1998-05-01, to produce dependencies in
# more 'canonical' format: with exactly one depencendy per line, nicely
# sorted. This is supposed to interact better with revision control systems.
#

: ${GCC=g++}
: ${PERL=perl}

MAKE=Makefile			# default makefile name is "Makefile"

while :
	do case "$1" in
		# -f allows you to select a makefile name
		-f)
			MAKE=$2
			shift; shift ;;

		# the -p flag produces "program: program.c" style dependencies
		# so .o's don't get produced
		-p)
			SED='-e s;\.o;;'
			shift ;;
		*)
			break ;;
	esac
done

if [ $# = 0 ] ; then
	echo 'usage: mkdep [-p] [-f makefile] [flags] file ...'
	exit 1
fi

if [ ! -w $MAKE ]; then
	echo "mkdep: no writeable file \"$MAKE\""
	exit 1
fi

TMP=/tmp/mkdep$$

trap 'rm -f $TMP ; exit 1' 1 2 3 13 15

cp $MAKE ${MAKE}.bak

sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP

cat << _EOF_ >> $TMP
# DO NOT DELETE THIS LINE -- mkdep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.

_EOF_

${GCC} -M $*           | \
    ${PERL} -n \
    -e 'if ( s/^([^ \t]*):[ \t]// ) { $base=$1; } else {}' \
    -e 'while ( s/^[ \t]*([^\\ \t]+)[ \t\n]// ) {' \
    -e '   $dependency = $1;' \
    -e '   $base = "MKDEP.ERROR" if $base eq "" ;' \
    -e '   print "$base $dependency\n" unless $dependency =~ m(^/usr/) ; }' \
    -e '$base = "" unless /^[ \t]*\\$/ ;'  | \
    sort | \
    awk 'base != $1 { base = $1 ; printf("\n%s:",base); } \
             { printf(" \\\n %s",$2); } \
         END { printf("\n"); } ' >> $TMP

cat << _EOF_ >> $TMP

# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
_EOF_
# copy to preserve permissions
cp $TMP $MAKE
rm -f ${MAKE}.bak $TMP
exit 0
