141 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
#!/bin/sh -
 | 
						|
#
 | 
						|
# Copyright (c) 1994, 1996
 | 
						|
#	The Regents of the University of California.  All rights reserved.
 | 
						|
#
 | 
						|
# 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.11 (Berkeley) 5/5/88
 | 
						|
#
 | 
						|
 | 
						|
MAKE=Makefile			# default makefile name is "Makefile"
 | 
						|
CC=cc				# default C compiler is "cc"
 | 
						|
DEPENDENCY_CFLAG=-M		# default dependency-generation flag is -M
 | 
						|
SOURCE_DIRECTORY=.		# default source directory is the current directory
 | 
						|
 | 
						|
# No command-line flags seen yet.
 | 
						|
flags=""
 | 
						|
while :
 | 
						|
	do case "$1" in
 | 
						|
		# -c allows you to specify the C compiler
 | 
						|
		-c)
 | 
						|
			CC=$2
 | 
						|
			shift; shift ;;
 | 
						|
 | 
						|
		# -f allows you to select a makefile name
 | 
						|
		-f)
 | 
						|
			MAKE=$2
 | 
						|
			shift; shift ;;
 | 
						|
 | 
						|
		# -m allows you to specify the dependency-generation flag
 | 
						|
		-m)
 | 
						|
			DEPENDENCY_CFLAG=$2
 | 
						|
			shift; shift ;;
 | 
						|
 | 
						|
		# the -p flag produces "program: program.c" style dependencies
 | 
						|
		# so .o's don't get produced
 | 
						|
		-p)
 | 
						|
			SED='s;\.o;;'
 | 
						|
			shift ;;
 | 
						|
 | 
						|
		# -s allows you to specify the source directory
 | 
						|
		-s)
 | 
						|
			SOURCE_DIRECTORY=$2
 | 
						|
			shift; shift ;;
 | 
						|
 | 
						|
		# -include takes an argument
 | 
						|
		-include)
 | 
						|
			flags="$flags $1 $2"
 | 
						|
			shift; shift ;;
 | 
						|
 | 
						|
		# other command-line flag
 | 
						|
		-*)
 | 
						|
			flags="$flags $1"
 | 
						|
			shift ;;
 | 
						|
 | 
						|
		*)
 | 
						|
			break ;;
 | 
						|
	esac
 | 
						|
done
 | 
						|
 | 
						|
if [ $# = 0 ] ; then
 | 
						|
	echo 'usage: mkdep [-p] [-c cc] [-f makefile] [-m dependency-cflag] [-s source-directory] [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_
 | 
						|
 | 
						|
# If your compiler doesn't have -M, add it.  If you can't, the next two
 | 
						|
# lines will try and replace the "cc -M".  The real problem is that this
 | 
						|
# hack can't deal with anything that requires a search path, and doesn't
 | 
						|
# even try for anything using bracket (<>) syntax.
 | 
						|
#
 | 
						|
# egrep '^#include[ 	]*".*"' /dev/null $* |
 | 
						|
# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' |
 | 
						|
 | 
						|
#
 | 
						|
# Construct a list of source files with paths relative to the source directory.
 | 
						|
#
 | 
						|
sources=""
 | 
						|
for srcfile in $*
 | 
						|
do
 | 
						|
	sources="$sources $SOURCE_DIRECTORY/$srcfile"
 | 
						|
done
 | 
						|
 | 
						|
# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait"
 | 
						|
$CC $DEPENDENCY_CFLAG $flags $sources |
 | 
						|
sed "
 | 
						|
	s; \./; ;g
 | 
						|
	$SED" |
 | 
						|
awk '{
 | 
						|
	if ($1 != prev) {
 | 
						|
		if (rec != "")
 | 
						|
			print rec;
 | 
						|
		rec = $0;
 | 
						|
		prev = $1;
 | 
						|
	}
 | 
						|
	else {
 | 
						|
		if (length(rec $2) > 78) {
 | 
						|
			print rec;
 | 
						|
			rec = $0;
 | 
						|
		}
 | 
						|
		else
 | 
						|
			rec = rec " " $2
 | 
						|
	}
 | 
						|
}
 | 
						|
END {
 | 
						|
	print rec
 | 
						|
}' >> $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
 |