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

Revision 14545, 6.0 KB checked in by ghudson, 25 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14544, 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                                uwinfix=
112                        fi
113                fi
114        fi
115    case "$file" in
116    *.c) filebase=`basename $file .c` ;;
117    *.y) filebase=`basename $file .y` ;;
118    esac
119    case "$file" in
120    */*) finc="-I`echo $file | sed 's#/[^/]*$##`" ;;
121    *)   finc= ;;
122    esac
123    $echo "Finding dependencies for $filebase$_o."
124    ( $echo "#line 1 \"$file\""; \
125      $sed -n <$file \
126        -e "/^${filebase}_init(/q" \
127        -e '/^#line/d' \
128        -e '/^#/{' \
129        -e 's|/\*.*$||' \
130        -e 's|\\$||' \
131        -e p \
132        -e '}' ) >UU/$file.c
133    if [ "$osname" = os390 -a "$file" = perly.c ]; then
134        $echo '#endif' >>UU/$file.c
135    fi
136    $cppstdin $finc -I. $cppflags $cppminus <UU/$file.c |
137    $sed \
138        -e '1d' \
139        -e '/^#.*<stdin>/d' \
140        -e '/^#.*"-"/d' \
141        -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
142        -e 's/^[         ]*#[    ]*line/#/' \
143        -e '/^# *[0-9][0-9]* *[".\/]/!d' \
144        -e 's/^.*"\(.*\)".*$/'$filebase'\$(OBJ_EXT): \1/' \
145        -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'\$(OBJ_EXT): \1/' \
146        -e 's|: \./|: |' \
147        -e 's|\.c\.c|.c|' $uwinfix | \
148    $uniq | $sort | $uniq >> .deptmp
149done
150
151$sed <$mf >$mf.new -e '1,/^# AUTOMATICALLY/!d'
152
153$MAKE shlist || ($echo "Searching for .SH files..."; \
154        $echo *.SH | $tr ' ' $trnl | $egrep -v '\*' >.shlist)
155
156# Now extract the dependencies on makedepend.SH and Makefile.SH
157# (they should reside in the main Makefile):
158rm -f .shlist.old
159mv .shlist .shlist.old
160$egrep -v '^makedepend\.SH' <.shlist.old >.shlist
161rm -f .shlist.old
162mv .shlist .shlist.old
163$egrep -v '^Makefile\.SH' <.shlist.old >.shlist
164rm -f .shlist.old
165mv .shlist .shlist.old
166$egrep -v '^perl_exp\.SH' <.shlist.old >.shlist
167rm -f .shlist.old
168mv .shlist .shlist.old
169$egrep -v '^config_h\.SH' <.shlist.old >.shlist
170rm .shlist.old
171
172if $test -s .deptmp; then
173    for file in `cat .shlist`; do
174        $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
175            $sh $file >> .deptmp
176    done
177    $echo "Updating $mf..."
178    $echo "# If this runs make out of memory, delete /usr/include lines." \
179        >> $mf.new
180    $sed 's|^\(.*\$(OBJ_EXT):\) *\(.*/.*\.c\) *$|\1 \2; '"$defrule \2|" .deptmp \
181       >>$mf.new
182else
183    $MAKE hlist || ($echo "Searching for .h files..."; \
184        $echo *.h | $tr ' ' $trnl | $egrep -v '\*' >.hlist)
185    $echo "You don't seem to have a proper C preprocessor.  Using grep instead."
186    $egrep '^#include ' `cat .clist` `cat .hlist`  >.deptmp
187    $echo "Updating $mf..."
188    <.clist $sed -n                                                     \
189        -e '/\//{'                                                      \
190        -e   's|^\(.*\)/\(.*\)\.c|\2\$(OBJ_EXT): \1/\2.c; '"$defrule \1/\2.c|p" \
191        -e   d                                                          \
192        -e '}'                                                          \
193        -e 's|^\(.*\)\.c|\1\$(OBJ_EXT): \1.c|p' >> $mf.new
194    <.hlist $sed -n 's|\(.*/\)\(.*\)|s= \2= \1\2=|p' >.hsed
195    <.deptmp $sed -n 's|c:#include "\(.*\)".*$|o: \1|p' | \
196       $sed 's|^[^;]*/||' | \
197       $sed -f .hsed >> $mf.new
198    <.deptmp $sed -n 's|h:#include "\(.*\)".*$|h: \1|p' | \
199       $sed -f .hsed >> $mf.new
200    for file in `$cat .shlist`; do
201        $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
202            $sh $file >> $mf.new
203    done
204fi
205$rm -f $mf.old
206$cp $mf $mf.old
207$rm -f $mf
208$cp $mf.new $mf
209$rm $mf.new
210$echo "# WARNING: Put nothing here or make depend will gobble it up!" >> $mf
211$rm -rf .deptmp UU .shlist .clist .hlist .hsed
212
213!NO!SUBS!
214$eunicefix makedepend
215chmod +x makedepend
216case `pwd` in
217*SH)
218    $rm -f ../makedepend
219    ln makedepend ../makedepend
220    ;;
221esac
Note: See TracBrowser for help on using the repository browser.