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

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