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

Revision 18450, 6.9 KB checked in by zacheiss, 22 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18449, 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# We need .. when we are in the x2p directory if we are using the
62# cppstdin wrapper script.
63# Put .. and . first so that we pick up the present cppstdin, not
64# an older one lying about in /usr/local/bin.
65PATH=".$path_sep..$path_sep$PATH"
66export PATH
67
68case "$osname" in
69amigaos) cat=/bin/cat ;; # must be absolute
70esac
71
72$cat /dev/null >.deptmp
73$rm -f *.c.c c/*.c.c
74if test -f Makefile; then
75    rm -f $firstmakefile
76    cp Makefile $firstmakefile
77    # On QNX, 'cp' preserves timestamp, so $firstmakefile appears
78    # to be out of date.  I don't know if OS/2 has touch, so do this:
79    case "$osname" in
80    os2) ;;
81    netbsd) ;;
82    *) $touch $firstmakefile ;;
83    esac
84fi
85mf=$firstmakefile
86if test -f $mf; then
87    defrule=`<$mf sed -n                \
88        -e '/^\.c\$(OBJ_EXT):.*;/{'     \
89        -e    's/\$\*\.c//'             \
90        -e    's/^[^;]*;[        ]*//p' \
91        -e    q                         \
92        -e '}'                          \
93        -e '/^\.c\$(OBJ_EXT): *$/{'     \
94        -e    N                         \
95        -e    's/\$\*\.c//'             \
96        -e    's/^.*\n[  ]*//p'         \
97        -e    q                         \
98        -e '}'`
99fi
100case "$defrule" in
101'') defrule='$(CC) -c $(CFLAGS)' ;;
102esac
103
104: Create files in UU directory to avoid problems with long filenames
105: on systems with 14 character filename limits so file.c.c and file.c
106: might be identical
107$test -d UU || mkdir UU
108
109$MAKE clist || ($echo "Searching for .c files..."; \
110        $echo *.c | $tr ' ' $trnl | $egrep -v '\*' >.clist)
111for file in `$cat .clist`; do
112# for file in `cat /dev/null`; do
113    case "$osname" in
114    uwin)     uwinfix="-e s,\\\\\\\\,/,g -e s,\\([a-zA-Z]\\):/,/\\1/,g" ;;
115    os2)      uwinfix="-e s,\\\\\\\\,/,g" ;;
116    cygwin)   uwinfix="-e s,\\\\\\\\,/,g" ;;
117    posix-bc) uwinfix="-e s/\\*POSIX(\\(.*\\))/\\1/" ;;
118    vos)      uwinfix="-e s/\#/\\\#/" ;;
119    *)        uwinfix="" ;;
120    esac
121    case "$file" in
122    *.c) filebase=`basename $file .c` ;;
123    *.y) filebase=`basename $file .y` ;;
124    esac
125    case "$file" in
126    */*) finc="-I`echo $file | sed 's#/[^/]*$##`" ;;
127    *)   finc= ;;
128    esac
129    $echo "Finding dependencies for $filebase$_o."
130    ( $echo "#line 1 \"$file\""; \
131      $sed -n <$file \
132        -e "/^${filebase}_init(/q" \
133        -e '/^#line/d' \
134        -e '/^#/{' \
135        -e 's|/\*.*$||' \
136        -e 's|\\$||' \
137        -e p \
138        -e '}' ) >UU/$file.c
139    if [ "$osname" = os390 ]; then
140        $cppstdin $finc -I. $cppflags $cppminus <UU/$file.c |
141        $sed \
142            -e '/^#.*<stdin>/d' \
143            -e '/^#.*"-"/d' \
144            -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
145            -e 's/^[     ]*#[    ]*line/#/' \
146            -e '/^# *[0-9][0-9]* *[".\/]/!d' \
147            -e 's/^.*"\(.*\)".*$/'$filebase'\$(OBJ_EXT): \1/' \
148            -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'\$(OBJ_EXT): \1/' \
149            -e 's|: \./|: |' \
150            -e 's|\.c\.c|.c|' $uwinfix | \
151        $uniq | $sort | $uniq >> .deptmp
152    else
153        $cppstdin $finc -I. $cppflags $cppminus <UU/$file.c >.cout 2>.cerr
154        $sed \
155            -e '1d' \
156            -e '/^#.*<stdin>/d' \
157            -e '/^#.*<builtin>/d' \
158            -e '/^#.*<built-in>/d' \
159            -e '/^#.*<command line>/d' \
160            -e '/^#.*"-"/d' \
161            -e '/: file path prefix .* never used$/d' \
162            -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
163            -e 's/^[     ]*#[    ]*line/#/' \
164            -e '/^# *[0-9][0-9]* *[".\/]/!d' \
165            -e 's/^.*"\(.*\)".*$/'$filebase'\$(OBJ_EXT): \1/' \
166            -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'\$(OBJ_EXT): \1/' \
167            -e 's|: \./|: |' \
168           -e 's|\.c\.c|.c|' $uwinfix .cout .cerr| \
169        $uniq | $sort | $uniq >> .deptmp
170    fi
171done
172
173$sed <$mf >$mf.new -e '1,/^# AUTOMATICALLY/!d'
174
175$MAKE shlist || ($echo "Searching for .SH files..."; \
176        $echo *.SH | $tr ' ' $trnl | $egrep -v '\*' >.shlist)
177
178# Now extract the dependencies on makedepend.SH and Makefile.SH
179# (they should reside in the main Makefile):
180rm -f .shlist.old
181mv .shlist .shlist.old
182$egrep -v '^makedepend\.SH' <.shlist.old >.shlist
183rm -f .shlist.old
184mv .shlist .shlist.old
185$egrep -v '^Makefile\.SH' <.shlist.old >.shlist
186rm -f .shlist.old
187mv .shlist .shlist.old
188$egrep -v '^perl_exp\.SH' <.shlist.old >.shlist
189rm -f .shlist.old
190mv .shlist .shlist.old
191$egrep -v '^config_h\.SH' <.shlist.old >.shlist
192rm .shlist.old
193
194if $test -s .deptmp; then
195    for file in `cat .shlist`; do
196        $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
197            $sh $file >> .deptmp
198    done
199    $echo "Updating $mf..."
200    $echo "# If this runs make out of memory, delete /usr/include lines." \
201        >> $mf.new
202    $sed 's|^\(.*\$(OBJ_EXT):\) *\(.*/.*\.c\) *$|\1 \2; '"$defrule \2|" .deptmp \
203       >>$mf.new
204else
205    $MAKE hlist || ($echo "Searching for .h files..."; \
206        $echo *.h | $tr ' ' $trnl | $egrep -v '\*' >.hlist)
207    $echo "You don't seem to have a proper C preprocessor.  Using grep instead."
208    $egrep '^#include ' `cat .clist` `cat .hlist`  >.deptmp
209    $echo "Updating $mf..."
210    <.clist $sed -n                                                     \
211        -e '/\//{'                                                      \
212        -e   's|^\(.*\)/\(.*\)\.c|\2\$(OBJ_EXT): \1/\2.c; '"$defrule \1/\2.c|p" \
213        -e   d                                                          \
214        -e '}'                                                          \
215        -e 's|^\(.*\)\.c|\1\$(OBJ_EXT): \1.c|p' >> $mf.new
216    <.hlist $sed -n 's|\(.*/\)\(.*\)|s= \2= \1\2=|p' >.hsed
217    <.deptmp $sed -n 's|c:#include "\(.*\)".*$|o: \1|p' | \
218       $sed 's|^[^;]*/||' | \
219       $sed -f .hsed >> $mf.new
220    <.deptmp $sed -n 's|h:#include "\(.*\)".*$|h: \1|p' | \
221       $sed -f .hsed >> $mf.new
222    for file in `$cat .shlist`; do
223        $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
224            $sh $file >> $mf.new
225    done
226fi
227$rm -f $mf.old
228$cp $mf $mf.old
229$rm -f $mf
230$cp $mf.new $mf
231$rm $mf.new
232$echo "# WARNING: Put nothing here or make depend will gobble it up!" >> $mf
233$rm -rf .deptmp UU .shlist .clist .hlist .hsed .cout .cerr
234rmdir .depending
235
236!NO!SUBS!
237$eunicefix makedepend
238chmod +x makedepend
239case `pwd` in
240*SH)
241    $rm -f ../makedepend
242    ln makedepend ../makedepend
243    ;;
244esac
Note: See TracBrowser for help on using the repository browser.