source: trunk/third/perl/makedepend.SH @ 20075

Revision 20075, 7.1 KB checked in by zacheiss, 21 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r20074, which included commits to RCS files with non-trunk default branches.
Line 
1#! /bin/sh
2case $PERL_CONFIG_SH in
3'')
4        if test -f config.sh; then TOP=.;
5        elif test -f ../config.sh; then TOP=..;
6        elif test -f ../../config.sh; then TOP=../..;
7        elif test -f ../../../config.sh; then TOP=../../..;
8        elif test -f ../../../../config.sh; then TOP=../../../..;
9        else
10                echo "Can't find config.sh."; exit 1
11        fi
12        . $TOP/config.sh
13        ;;
14esac
15: This forces SH files to create target in same directory as SH file.
16: This is so that make depend always knows where to find SH derivatives.
17case "$0" in
18*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
19esac
20
21echo "Extracting makedepend (with variable substitutions)"
22rm -f makedepend
23$spitshell >makedepend <<!GROK!THIS!
24$startsh
25# makedepend.SH
26#
27MAKE=$make
28trnl='$trnl'
29!GROK!THIS!
30$spitshell >>makedepend <<'!NO!SUBS!'
31
32if test -d .depending; then
33        echo "$0: Already running, exiting."
34        exit 0
35fi
36
37mkdir .depending
38
39# This script should be called with
40#     sh ./makedepend MAKE=$(MAKE)
41case "$1" in
42        MAKE=*) eval $1 ;;
43esac
44
45export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh \$0; kill \$\$)
46
47case $PERL_CONFIG_SH in
48'')
49        if test -f config.sh; then TOP=.;
50        elif test -f ../config.sh; then TOP=..;
51        elif test -f ../../config.sh; then TOP=../..;
52        elif test -f ../../../config.sh; then TOP=../../..;
53        elif test -f ../../../../config.sh; then TOP=../../../..;
54        else
55                echo "Can't find config.sh."; exit 1
56        fi
57        . $TOP/config.sh
58        ;;
59esac
60
61# Avoid localized gcc messages
62case "$ccname" in
63    gcc) LC_ALL=C ; export LC_ALL ;;
64esac
65
66# We need .. when we are in the x2p directory if we are using the
67# cppstdin wrapper script.
68# Put .. and . first so that we pick up the present cppstdin, not
69# an older one lying about in /usr/local/bin.
70PATH=".$path_sep..$path_sep$PATH"
71export PATH
72
73case "$osname" in
74amigaos) cat=/bin/cat ;; # must be absolute
75esac
76
77$cat /dev/null >.deptmp
78$rm -f *.c.c c/*.c.c
79if test -f Makefile; then
80    rm -f $firstmakefile
81    cp Makefile $firstmakefile
82    # On QNX, 'cp' preserves timestamp, so $firstmakefile appears
83    # to be out of date.  I don't know if OS/2 has touch, so do this:
84    case "$osname" in
85    os2) ;;
86    netbsd) ;;
87    *) $touch $firstmakefile ;;
88    esac
89fi
90mf=$firstmakefile
91if test -f $mf; then
92    defrule=`<$mf sed -n                \
93        -e '/^\.c\$(OBJ_EXT):.*;/{'     \
94        -e    's/\$\*\.c//'             \
95        -e    's/^[^;]*;[        ]*//p' \
96        -e    q                         \
97        -e '}'                          \
98        -e '/^\.c\$(OBJ_EXT): *$/{'     \
99        -e    N                         \
100        -e    's/\$\*\.c//'             \
101        -e    's/^.*\n[  ]*//p'         \
102        -e    q                         \
103        -e '}'`
104fi
105case "$defrule" in
106'') defrule='$(CC) -c $(CFLAGS)' ;;
107esac
108
109: Create files in UU directory to avoid problems with long filenames
110: on systems with 14 character filename limits so file.c.c and file.c
111: might be identical
112$test -d UU || mkdir UU
113
114$MAKE clist || ($echo "Searching for .c files..."; \
115        $echo *.c | $tr ' ' $trnl | $egrep -v '\*' >.clist)
116for file in `$cat .clist`; do
117# for file in `cat /dev/null`; do
118    case "$osname" in
119    uwin)     uwinfix="-e s,\\\\\\\\,/,g -e s,\\([a-zA-Z]\\):/,/\\1/,g" ;;
120    os2)      uwinfix="-e s,\\\\\\\\,/,g" ;;
121    cygwin)   uwinfix="-e s,\\\\\\\\,/,g" ;;
122    posix-bc) uwinfix="-e s/\\*POSIX(\\(.*\\))/\\1/" ;;
123    vos)      uwinfix="-e s/\#/\\\#/" ;;
124    *)        uwinfix="" ;;
125    esac
126    case "$file" in
127    *.c) filebase=`basename $file .c` ;;
128    *.y) filebase=`basename $file .y` ;;
129    esac
130    case "$file" in
131    */*) finc="-I`echo $file | sed 's#/[^/]*$##`" ;;
132    *)   finc= ;;
133    esac
134    $echo "Finding dependencies for $filebase$_o."
135    ( $echo "#line 1 \"$file\""; \
136      $sed -n <$file \
137        -e "/^${filebase}_init(/q" \
138        -e '/^#line/d' \
139        -e '/^#/{' \
140        -e 's|/\*.*$||' \
141        -e 's|\\$||' \
142        -e p \
143        -e '}' ) >UU/$file.c
144
145    if [ "$osname" = os390 -a "$file" = perly.c ]; then
146        $echo '#endif' >>UU/$file.c
147    fi
148
149    if [ "$osname" = os390 ]; then
150        $cppstdin $finc -I. $cppflags $cppminus <UU/$file.c |
151        $sed \
152            -e '/^#.*<stdin>/d' \
153            -e '/^#.*"-"/d' \
154            -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
155            -e 's/^[     ]*#[    ]*line/#/' \
156            -e '/^# *[0-9][0-9]* *[".\/]/!d' \
157            -e 's/^.*"\(.*\)".*$/'$filebase'\$(OBJ_EXT): \1/' \
158            -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'\$(OBJ_EXT): \1/' \
159            -e 's|: \./|: |' \
160            -e 's|\.c\.c|.c|' $uwinfix | \
161        $uniq | $sort | $uniq >> .deptmp
162    else
163        $cppstdin $finc -I. $cppflags $cppminus <UU/$file.c >.cout 2>.cerr
164        $sed \
165            -e '1d' \
166            -e '/^#.*<stdin>/d' \
167            -e '/^#.*<builtin>/d' \
168            -e '/^#.*<built-in>/d' \
169            -e '/^#.*<command line>/d' \
170            -e '/^#.*"-"/d' \
171            -e '/: file path prefix .* never used$/d' \
172            -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
173            -e 's/^[     ]*#[    ]*line/#/' \
174            -e '/^# *[0-9][0-9]* *[".\/]/!d' \
175            -e 's/^.*"\(.*\)".*$/'$filebase'\$(OBJ_EXT): \1/' \
176            -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'\$(OBJ_EXT): \1/' \
177            -e 's|: \./|: |' \
178           -e 's|\.c\.c|.c|' $uwinfix .cout .cerr| \
179        $uniq | $sort | $uniq >> .deptmp
180    fi
181done
182
183$sed <$mf >$mf.new -e '1,/^# AUTOMATICALLY/!d'
184
185$MAKE shlist || ($echo "Searching for .SH files..."; \
186        $echo *.SH | $tr ' ' $trnl | $egrep -v '\*' >.shlist)
187
188# Now extract the dependencies on makedepend.SH and Makefile.SH
189# (they should reside in the main Makefile):
190rm -f .shlist.old
191mv .shlist .shlist.old
192$egrep -v '^makedepend\.SH' <.shlist.old >.shlist
193rm -f .shlist.old
194mv .shlist .shlist.old
195$egrep -v '^Makefile\.SH' <.shlist.old >.shlist
196rm -f .shlist.old
197mv .shlist .shlist.old
198$egrep -v '^perl_exp\.SH' <.shlist.old >.shlist
199rm -f .shlist.old
200mv .shlist .shlist.old
201$egrep -v '^config_h\.SH' <.shlist.old >.shlist
202rm .shlist.old
203
204if $test -s .deptmp; then
205    for file in `cat .shlist`; do
206        $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
207            $sh $file >> .deptmp
208    done
209    $echo "Updating $mf..."
210    $echo "# If this runs make out of memory, delete /usr/include lines." \
211        >> $mf.new
212    $sed 's|^\(.*\$(OBJ_EXT):\) *\(.*/.*\.c\) *$|\1 \2; '"$defrule \2|" .deptmp \
213       >>$mf.new
214else
215    $MAKE hlist || ($echo "Searching for .h files..."; \
216        $echo *.h | $tr ' ' $trnl | $egrep -v '\*' >.hlist)
217    $echo "You don't seem to have a proper C preprocessor.  Using grep instead."
218    $egrep '^#include ' `cat .clist` `cat .hlist`  >.deptmp
219    $echo "Updating $mf..."
220    <.clist $sed -n                                                     \
221        -e '/\//{'                                                      \
222        -e   's|^\(.*\)/\(.*\)\.c|\2\$(OBJ_EXT): \1/\2.c; '"$defrule \1/\2.c|p" \
223        -e   d                                                          \
224        -e '}'                                                          \
225        -e 's|^\(.*\)\.c|\1\$(OBJ_EXT): \1.c|p' >> $mf.new
226    <.hlist $sed -n 's|\(.*/\)\(.*\)|s= \2= \1\2=|p' >.hsed
227    <.deptmp $sed -n 's|c:#include "\(.*\)".*$|o: \1|p' | \
228       $sed 's|^[^;]*/||' | \
229       $sed -f .hsed >> $mf.new
230    <.deptmp $sed -n 's|h:#include "\(.*\)".*$|h: \1|p' | \
231       $sed -f .hsed >> $mf.new
232    for file in `$cat .shlist`; do
233        $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
234            $sh $file >> $mf.new
235    done
236fi
237$rm -f $mf.old
238$cp $mf $mf.old
239$rm -f $mf
240$cp $mf.new $mf
241$rm $mf.new
242$echo "# WARNING: Put nothing here or make depend will gobble it up!" >> $mf
243$rm -rf .deptmp UU .shlist .clist .hlist .hsed .cout .cerr
244rmdir .depending
245
246!NO!SUBS!
247$eunicefix makedepend
248chmod +x makedepend
249case `pwd` in
250*SH)
251    $rm -f ../makedepend
252    ln makedepend ../makedepend
253    ;;
254esac
Note: See TracBrowser for help on using the repository browser.