mkdep
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
- #!/bin/sh -
- #
- # Copyright (c) 1987 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
- #
- #PATH=/bin:/usr/bin:/usr/ucb
- #export PATH
- 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='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_
- awk=awk
- if [ -x /bin/nawk ] ; then
- awk=/bin/nawk
- fi
- # 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/.cc/.o/' |
- g++ -M $* |
- sed "
- s; ./; ;g
- $SED" |
- $awk '
- END {
- if (rec != "")
- print rec;
- }
- {
- 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
- }
- }' |
- $awk '{
- # GNU cpp outputs assumes objects land in current directory
- # but we put them in subdirectories, so fix up the rules accordingly
- # i.e., make "foo.o: dir/foo.cc blah" turn into "dir/foo.o: dir/..."
- if ($1 ~ /.*:/ && $2 ~ "/") {
- k = 1
- while (1) {
- s = substr($2, k);
- i = index(s,"/");
- if (i == 0)
- break;
- k += i
- }
- path = substr($2, 1, k - 1);
- line = "";
- for (i = 2; i <= NF; ++i)
- line = line " " $i;
- print path $1 " " line;
- } else
- print $0
- }' >> $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