Annotation of src/usr.bin/mkdep/mkdep.old.compiler, Revision 1.5
1.1 deraadt 1: #!/bin/sh -
2: #
1.5 ! henning 3: # $OpenBSD: mkdep.old.compiler,v 1.4 1997/01/25 08:47:57 deraadt Exp $
1.1 deraadt 4: # $NetBSD: mkdep.old.compiler,v 1.2 1994/12/23 07:35:00 jtc Exp $
5: #
6: # Copyright (c) 1991, 1993
7: # The Regents of the University of California. All rights reserved.
8: #
9: # Redistribution and use in source and binary forms, with or without
10: # modification, are permitted provided that the following conditions
11: # are met:
12: # 1. Redistributions of source code must retain the above copyright
13: # notice, this list of conditions and the following disclaimer.
14: # 2. Redistributions in binary form must reproduce the above copyright
15: # notice, this list of conditions and the following disclaimer in the
16: # documentation and/or other materials provided with the distribution.
17: # 3. All advertising materials mentioning features or use of this software
18: # must display the following acknowledgement:
19: # This product includes software developed by the University of
20: # California, Berkeley and its contributors.
21: # 4. Neither the name of the University nor the names of its contributors
22: # may be used to endorse or promote products derived from this software
23: # without specific prior written permission.
24: #
25: # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26: # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27: # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28: # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29: # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30: # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31: # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32: # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33: # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34: # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35: # SUCH DAMAGE.
36: #
37: # @(#)mkdep.old.compiler 8.1 (Berkeley) 6/6/93
38: #
39:
40: # This is a version of mkdep that works pretty well
41: # with compilers that don't have -M.
42: MAKE=Makefile # default makefile name is "Makefile"
43:
44: INCL=
45:
46: while :
47: do case "$1" in
48: # -f allows you to select a makefile name
49: -f)
50: MAKE=$2
51: shift; shift ;;
52:
53: # the -p flag produces "program: program.c" style dependencies
54: # so .o's don't get produced
55: -p)
56: SED='s;\.o;;'
57: shift ;;
58: *)
59: break ;;
60: esac
61: done
62:
63: if [ $# = 0 ] ; then
64: echo 'usage: mkdep [-p] [-f makefile] [flags] file ...'
65: exit 1
66: fi
67:
68: if [ ! -w $MAKE ]; then
1.5 ! henning 69: echo "mkdep: no writable file \"$MAKE\""
1.1 deraadt 70: exit 1
71: fi
72:
1.3 deraadt 73: DTMP=/tmp/_mkdep$$
74: TMP=$DTMP/mkdep
1.1 deraadt 75:
1.3 deraadt 76: um=`umask`
77: umask 022
78: if ! mkdir $DTMP ; then
79: echo failed to create tmp dir $DTMP
80: exit 1
81: fi
82: umask $um
83: trap 'rm -rf $DTMP ; exit 1' 1 2 3 13 15
1.1 deraadt 84:
85: cp $MAKE ${MAKE}.bak
86: sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
87:
88: cat << _EOF_ >> $TMP
89: # DO NOT DELETE THIS LINE -- mkdep uses it.
90: # DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
91:
92: _EOF_
93:
94:
95: for i do
96: case "$i" in
97: -c|-M|-O)
98: ;;
99: -I*)
100: INCL="$INCL $i";;
101: -D*|-U*)
102: FLAGS="$FLAGS $i";;
103: *)
104: # assume source file
105: # put '$dep' in front of dependencies
106: dep=`echo "$i" | sed -e 's,/,\\\\/,g' -e 's/\.c$/.o/'`
107:
108: # Find includes, remove leading numerics, remove ./,
109: # remove double quotes, and remove trailing numerics.
110: # Sort that, discarding duplicates, and add '$dep'.
111: cpp $INCL $FLAGS "$i" | sed -e '
112: /^#/!d
113: s/# [0-9]* //
114: s,"./,",
115: s/"\(.*\)"/\1/
116: s/ [ 0-9]*$//' |
117: sort -u | sed -e "s/^/$dep: /";;
118: esac
119: done |
120: sed "
121: s; \./; ;g
122: /\.c:$/d
123: $SED" |
124: awk '{
125: if ($1 != prev) {
126: if (rec != "")
127: print rec;
128: rec = $0;
129: prev = $1;
130: }
131: else {
132: if (length(rec $2) > 78) {
133: print rec;
134: rec = $0;
135: }
136: else
137: rec = rec " " $2
138: }
139: }
140: END {
141: print rec
142: }' >> $TMP
143:
144: cat << _EOF_ >> $TMP
145:
146: # IF YOU PUT ANYTHING HERE IT WILL GO AWAY
147: _EOF_
148:
149: # copy to preserve permissions
150: cp $TMP $MAKE
1.3 deraadt 151: rm -rf $DTMP
1.1 deraadt 152: exit 0