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

Revision 14545, 6.0 KB checked in by ghudson, 24 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.
RevLine 
[10723]1#! /bin/sh
[14544]2case $CONFIGDOTSH in
[9008]3'')
[10723]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        ;;
[9008]14esac
[10723]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.
[9008]17case "$0" in
18*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
19esac
[10723]20
[9008]21echo "Extracting makedepend (with variable substitutions)"
22rm -f makedepend
23$spitshell >makedepend <<!GROK!THIS!
24$startsh
[10723]25# makedepend.SH
[9008]26#
[10723]27MAKE=$make
[14544]28trnl='$trnl'
[10723]29!GROK!THIS!
30$spitshell >>makedepend <<'!NO!SUBS!'
[9008]31
[10723]32# This script should be called with
33#     sh ./makedepend MAKE=$(MAKE)
34case "$1" in
35        MAKE=*) eval $1 ;;
36esac
37
[9008]38export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh \$0; kill \$\$)
39
[14544]40case $CONFIGDOTSH in
[10723]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
[9008]53
[10723]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.
[14544]58PATH=".$path_sep..$path_sep$PATH"
[9008]59export PATH
60
61$cat /dev/null >.deptmp
62$rm -f *.c.c c/*.c.c
63if test -f Makefile; then
[10723]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) ;;
[14544]70    netbsd) ;;
[10723]71    *) $touch $firstmakefile ;;
72    esac
[9008]73fi
[10723]74mf=$firstmakefile
[9008]75if test -f $mf; then
76    defrule=`<$mf sed -n                \
[10723]77        -e '/^\.c\$(OBJ_EXT):.*;/{'     \
[9008]78        -e    's/\$\*\.c//'             \
79        -e    's/^[^;]*;[        ]*//p' \
80        -e    q                         \
81        -e '}'                          \
[10723]82        -e '/^\.c\$(OBJ_EXT): *$/{'     \
[9008]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
[10723]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..."; \
[14544]99        $echo *.c | $tr ' ' $trnl | $egrep -v '\*' >.clist)
[9008]100for file in `$cat .clist`; do
101# for file in `cat /dev/null`; do
[14544]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
[9008]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
[14544]123    $echo "Finding dependencies for $filebase$_o."
[9008]124    ( $echo "#line 1 \"$file\""; \
125      $sed -n <$file \
126        -e "/^${filebase}_init(/q" \
[10723]127        -e '/^#line/d' \
[9008]128        -e '/^#/{' \
129        -e 's|/\*.*$||' \
130        -e 's|\\$||' \
131        -e p \
[10723]132        -e '}' ) >UU/$file.c
[14544]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 |
[9008]137    $sed \
[14544]138        -e '1d' \
[10723]139        -e '/^#.*<stdin>/d' \
140        -e '/^#.*"-"/d' \
[9008]141        -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
142        -e 's/^[         ]*#[    ]*line/#/' \
143        -e '/^# *[0-9][0-9]* *[".\/]/!d' \
[10723]144        -e 's/^.*"\(.*\)".*$/'$filebase'\$(OBJ_EXT): \1/' \
145        -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'\$(OBJ_EXT): \1/' \
[9008]146        -e 's|: \./|: |' \
[14544]147        -e 's|\.c\.c|.c|' $uwinfix | \
[9008]148    $uniq | $sort | $uniq >> .deptmp
149done
150
151$sed <$mf >$mf.new -e '1,/^# AUTOMATICALLY/!d'
152
[10723]153$MAKE shlist || ($echo "Searching for .SH files..."; \
[14544]154        $echo *.SH | $tr ' ' $trnl | $egrep -v '\*' >.shlist)
[10723]155
156# Now extract the dependencies on makedepend.SH and Makefile.SH
157# (they should reside in the main Makefile):
[14544]158rm -f .shlist.old
[10723]159mv .shlist .shlist.old
160$egrep -v '^makedepend\.SH' <.shlist.old >.shlist
[14544]161rm -f .shlist.old
[10723]162mv .shlist .shlist.old
163$egrep -v '^Makefile\.SH' <.shlist.old >.shlist
[14544]164rm -f .shlist.old
[10723]165mv .shlist .shlist.old
166$egrep -v '^perl_exp\.SH' <.shlist.old >.shlist
[14544]167rm -f .shlist.old
[10723]168mv .shlist .shlist.old
169$egrep -v '^config_h\.SH' <.shlist.old >.shlist
170rm .shlist.old
171
[9008]172if $test -s .deptmp; then
173    for file in `cat .shlist`; do
[10723]174        $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
175            $sh $file >> .deptmp
[9008]176    done
177    $echo "Updating $mf..."
178    $echo "# If this runs make out of memory, delete /usr/include lines." \
179        >> $mf.new
[10723]180    $sed 's|^\(.*\$(OBJ_EXT):\) *\(.*/.*\.c\) *$|\1 \2; '"$defrule \2|" .deptmp \
[9008]181       >>$mf.new
182else
[10723]183    $MAKE hlist || ($echo "Searching for .h files..."; \
[14544]184        $echo *.h | $tr ' ' $trnl | $egrep -v '\*' >.hlist)
[9008]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 '/\//{'                                                      \
[10723]190        -e   's|^\(.*\)/\(.*\)\.c|\2\$(OBJ_EXT): \1/\2.c; '"$defrule \1/\2.c|p" \
[9008]191        -e   d                                                          \
192        -e '}'                                                          \
[10723]193        -e 's|^\(.*\)\.c|\1\$(OBJ_EXT): \1.c|p' >> $mf.new
[9008]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
[10723]201        $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
202            $sh $file >> $mf.new
[9008]203    done
204fi
205$rm -f $mf.old
206$cp $mf $mf.old
[10723]207$rm -f $mf
[9008]208$cp $mf.new $mf
209$rm $mf.new
210$echo "# WARNING: Put nothing here or make depend will gobble it up!" >> $mf
[10723]211$rm -rf .deptmp UU .shlist .clist .hlist .hsed
[9008]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.