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

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