Blame mkdep

Packit 209cc3
#!/bin/sh -
Packit 209cc3
#
Packit 209cc3
# Copyright (c) 1994, 1996
Packit 209cc3
#	The Regents of the University of California.  All rights reserved.
Packit 209cc3
#
Packit 209cc3
# Redistribution and use in source and binary forms are permitted
Packit 209cc3
# provided that this notice is preserved and that due credit is given
Packit 209cc3
# to the University of California at Berkeley. The name of the University
Packit 209cc3
# may not be used to endorse or promote products derived from this
Packit 209cc3
# software without specific prior written permission. This software
Packit 209cc3
# is provided ``as is'' without express or implied warranty.
Packit 209cc3
#
Packit 209cc3
#	@(#)mkdep.sh	5.11 (Berkeley) 5/5/88
Packit 209cc3
#
Packit 209cc3
Packit 209cc3
MAKE=Makefile			# default makefile name is "Makefile"
Packit 209cc3
CC=cc				# default C compiler is "cc"
Packit 209cc3
DEPENDENCY_CFLAG=-M		# default dependency-generation flag is -M
Packit 209cc3
Packit 209cc3
while :
Packit 209cc3
	do case "$1" in
Packit 209cc3
		# -c allows you to specify the C compiler
Packit 209cc3
		-c)
Packit 209cc3
			CC=$2
Packit 209cc3
			shift; shift ;;
Packit 209cc3
Packit 209cc3
		# -f allows you to select a makefile name
Packit 209cc3
		-f)
Packit 209cc3
			MAKE=$2
Packit 209cc3
			shift; shift ;;
Packit 209cc3
Packit 209cc3
		# -m allows you to specify the dependency-generation flag
Packit 209cc3
		-m)
Packit 209cc3
			DEPENDENCY_CFLAG=$2
Packit 209cc3
			shift; shift ;;
Packit 209cc3
Packit 209cc3
		# the -p flag produces "program: program.c" style dependencies
Packit 209cc3
		# so .o's don't get produced
Packit 209cc3
		-p)
Packit 209cc3
			SED='s;\.o;;'
Packit 209cc3
			shift ;;
Packit 209cc3
		*)
Packit 209cc3
			break ;;
Packit 209cc3
	esac
Packit 209cc3
done
Packit 209cc3
Packit 209cc3
if [ $# = 0 ] ; then
Packit 209cc3
	echo 'usage: mkdep [-p] [-c cc] [-f makefile] [-m dependency-cflag] [flags] file ...'
Packit 209cc3
	exit 1
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
if [ ! -w $MAKE ]; then
Packit 209cc3
	echo "mkdep: no writeable file \"$MAKE\""
Packit 209cc3
	exit 1
Packit 209cc3
fi
Packit 209cc3
Packit 209cc3
TMP=/tmp/mkdep$$
Packit 209cc3
Packit 209cc3
trap 'rm -f $TMP ; exit 1' 1 2 3 13 15
Packit 209cc3
Packit 209cc3
cp $MAKE ${MAKE}.bak
Packit 209cc3
Packit 209cc3
sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
Packit 209cc3
Packit 209cc3
cat << _EOF_ >> $TMP
Packit 209cc3
# DO NOT DELETE THIS LINE -- mkdep uses it.
Packit 209cc3
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
Packit 209cc3
Packit 209cc3
_EOF_
Packit 209cc3
Packit 209cc3
# If your compiler doesn't have -M, add it.  If you can't, the next two
Packit 209cc3
# lines will try and replace the "cc -M".  The real problem is that this
Packit 209cc3
# hack can't deal with anything that requires a search path, and doesn't
Packit 209cc3
# even try for anything using bracket (<>) syntax.
Packit 209cc3
#
Packit 209cc3
# egrep '^#include[ 	]*".*"' /dev/null $* |
Packit 209cc3
# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' |
Packit 209cc3
Packit 209cc3
# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait"
Packit 209cc3
$CC $DEPENDENCY_CFLAG $* |
Packit 209cc3
sed "
Packit 209cc3
	s; \./; ;g
Packit 209cc3
	$SED" |
Packit 209cc3
awk '{
Packit 209cc3
	if ($1 != prev) {
Packit 209cc3
		if (rec != "")
Packit 209cc3
			print rec;
Packit 209cc3
		rec = $0;
Packit 209cc3
		prev = $1;
Packit 209cc3
	}
Packit 209cc3
	else {
Packit 209cc3
		if (length(rec $2) > 78) {
Packit 209cc3
			print rec;
Packit 209cc3
			rec = $0;
Packit 209cc3
		}
Packit 209cc3
		else
Packit 209cc3
			rec = rec " " $2
Packit 209cc3
	}
Packit 209cc3
}
Packit 209cc3
END {
Packit 209cc3
	print rec
Packit 209cc3
}' >> $TMP
Packit 209cc3
Packit 209cc3
cat << _EOF_ >> $TMP
Packit 209cc3
Packit 209cc3
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
Packit 209cc3
_EOF_
Packit 209cc3
Packit 209cc3
# copy to preserve permissions
Packit 209cc3
cp $TMP $MAKE
Packit 209cc3
rm -f ${MAKE}.bak $TMP
Packit 209cc3
exit 0