mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-24 06:54:13 +00:00
228 lines
3.8 KiB
C++
228 lines
3.8 KiB
C++
XCOMM!/bin/sh
|
|
XCOMM
|
|
XCOMM $XConsortium: mdepend.cpp,v 1.7 91/08/22 11:42:53 rws Exp $
|
|
XCOMM
|
|
XCOMM Do the equivalent of the 'makedepend' program, but do it right.
|
|
XCOMM
|
|
XCOMM Usage:
|
|
XCOMM
|
|
XCOMM makedepend [cpp-flags] [-w width] [-s magic-string] [-f makefile]
|
|
XCOMM [-o object-suffix]
|
|
XCOMM
|
|
XCOMM Notes:
|
|
XCOMM
|
|
XCOMM The C compiler used can be overridden with the environment
|
|
XCOMM variable "CC".
|
|
XCOMM
|
|
XCOMM The "-v" switch of the "makedepend" program is not supported.
|
|
XCOMM
|
|
XCOMM
|
|
XCOMM This script should
|
|
XCOMM work on both USG and BSD systems. However, when System V.4 comes out,
|
|
XCOMM USG users will probably have to change "silent" to "-s" instead of
|
|
XCOMM "-" (at least, that is what the documentation implies).
|
|
XCOMM
|
|
CC=PREPROC
|
|
|
|
silent='-'
|
|
|
|
TMP=/tmp/mdep$$
|
|
CPPCMD=${TMP}a
|
|
DEPENDLINES=${TMP}b
|
|
TMPMAKEFILE=${TMP}c
|
|
MAGICLINE=${TMP}d
|
|
ARGS=${TMP}e
|
|
|
|
trap "rm -f ${TMP}*; exit 1" 1 2 15
|
|
trap "rm -f ${TMP}*; exit 0" 1 2 13
|
|
|
|
echo " \c" > $CPPCMD
|
|
if [ `wc -c < $CPPCMD` -eq 1 ]
|
|
then
|
|
c="\c"
|
|
n=
|
|
else
|
|
c=
|
|
n="-n"
|
|
fi
|
|
|
|
echo $n "$c" >$ARGS
|
|
|
|
files=
|
|
makefile=
|
|
magic_string='# DO NOT DELETE'
|
|
objsuffix='.o'
|
|
width=78
|
|
endmarker=""
|
|
verbose=n
|
|
|
|
while [ $# != 0 ]
|
|
do
|
|
if [ "$endmarker"x != x -a "$endmarker" = "$1" ]; then
|
|
endmarker=""
|
|
else
|
|
case "$1" in
|
|
-D*|-I*)
|
|
echo $n " '$1'$c" >> $ARGS
|
|
;;
|
|
|
|
-g|-o)
|
|
;;
|
|
|
|
*)
|
|
if [ "$endmarker"x = x ]; then
|
|
case "$1" in
|
|
-w)
|
|
width="$2"
|
|
shift
|
|
;;
|
|
-s)
|
|
magic_string="$2"
|
|
shift
|
|
;;
|
|
-f)
|
|
makefile="$2"
|
|
shift
|
|
;;
|
|
-o)
|
|
objsuffix="$2"
|
|
shift
|
|
;;
|
|
|
|
--*)
|
|
echo "$1" | sed 's/^\-\-//' >${TMP}end
|
|
endmarker="`cat ${TMP}end`"
|
|
rm -f ${TMP}end
|
|
if [ "$endmarker"x = x ]; then
|
|
endmarker="--"
|
|
fi
|
|
;;
|
|
-v)
|
|
verbose="y"
|
|
;;
|
|
|
|
-cc)
|
|
CC="$2"
|
|
shift
|
|
;;
|
|
|
|
-*)
|
|
echo "Unknown option '$1' ignored" 1>&2
|
|
;;
|
|
*)
|
|
files="$files $1"
|
|
;;
|
|
esac
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
shift
|
|
done
|
|
echo ' $*' >> $ARGS
|
|
|
|
echo "exec $CC `cat $ARGS`" > $CPPCMD
|
|
chmod +x $CPPCMD
|
|
rm $ARGS
|
|
|
|
case "$makefile" in
|
|
'')
|
|
if [ -r makefile ]
|
|
then
|
|
makefile=makefile
|
|
elif [ -r Makefile ]
|
|
then
|
|
makefile=Makefile
|
|
else
|
|
echo 'no makefile or Makefile found' 1>&2
|
|
exit 1
|
|
fi
|
|
;;
|
|
-)
|
|
makefile=$TMPMAKEFILE
|
|
;;
|
|
esac
|
|
|
|
if [ "$verbose"x = "y"x ]; then
|
|
cat $CPPCMD
|
|
fi
|
|
|
|
echo '' > $DEPENDLINES
|
|
for i in $files
|
|
do
|
|
$CPPCMD $i \
|
|
| sed -n "/^#/s;^;$i ;p"
|
|
done \
|
|
| sed -e 's|/[^/.][^/]*/\.\.||g' -e 's|/\.[^.][^/]*/\.\.||g' \
|
|
-e 's|"||g' -e 's| \./| |' \
|
|
| awk '{
|
|
if ($1 != $4 && $2 != "#ident")
|
|
{
|
|
ofile = substr ($1, 1, length ($1) - 2) "'"$objsuffix"'"
|
|
print ofile, $4
|
|
}
|
|
}' \
|
|
| sort -u \
|
|
| awk '
|
|
{
|
|
newrec = rec " " $2
|
|
if ($1 != old1)
|
|
{
|
|
old1 = $1
|
|
if (rec != "")
|
|
print rec
|
|
rec = $1 ": " $2
|
|
}
|
|
else if (length (newrec) > '"$width"')
|
|
{
|
|
print rec
|
|
rec = $1 ": " $2
|
|
}
|
|
else
|
|
rec = newrec
|
|
}
|
|
END \
|
|
{
|
|
if (rec != "")
|
|
print rec
|
|
}' \
|
|
| egrep -v '^[^:]*:[ ]*$' >> $DEPENDLINES
|
|
|
|
trap "" 1 2 13 15 # Now we are committed
|
|
case "$makefile" in
|
|
$TMPMAKEFILE)
|
|
;;
|
|
*)
|
|
rm -f $makefile.bak
|
|
cp $makefile $makefile.bak
|
|
echo "Appending dependencies to $makefile"
|
|
;;
|
|
esac
|
|
|
|
XCOMM
|
|
XCOMM Append the magic string and a blank line so that /^$magic_string/+1,\$d
|
|
XCOMM can be used to delete everything from after the magic string to the end
|
|
XCOMM of the file. Then, append a blank line again and then the dependencies.
|
|
XCOMM
|
|
cat >> $makefile << END_OF_APPEND
|
|
|
|
$magic_string
|
|
|
|
END_OF_APPEND
|
|
ed $silent $makefile << END_OF_ED_SCRIPT
|
|
/^$magic_string/+1,\$d
|
|
w
|
|
q
|
|
END_OF_ED_SCRIPT
|
|
echo '' >>$makefile
|
|
cat $DEPENDLINES >>$makefile
|
|
|
|
case "$makefile" in
|
|
$TMPMAKEFILE)
|
|
cat $TMPMAKEFILE
|
|
;;
|
|
|
|
esac
|
|
|
|
rm -f ${TMP}*
|
|
exit 0
|