[fix crash in regexec.c]
[p5sagit/p5-mst-13.2.git] / makedepend.SH
CommitLineData
8d063cd8 1case $CONFIG in
2'')
a0d0e21e 3 if test -f config.sh; then TOP=.;
4 elif 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 else
9 echo "Can't find config.sh."; exit 1
10 fi
11 . $TOP/config.sh
12 ;;
8d063cd8 13esac
a0d0e21e 14: This forces SH files to create target in same directory as SH file.
15: This is so that make depend always knows where to find SH derivatives.
8d063cd8 16case "$0" in
17*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
18esac
19echo "Extracting makedepend (with variable substitutions)"
7b0cd887 20rm -f makedepend
a0d0e21e 21$spitshell >makedepend <<'!NO!SUBS!'
22# makedepend.SH
8d063cd8 23#
8d063cd8 24
25export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh \$0; kill \$\$)
26
a0d0e21e 27case $CONFIG in
28'')
29 if test -f config.sh; then TOP=.;
30 elif test -f ../config.sh; then TOP=..;
31 elif test -f ../../config.sh; then TOP=../..;
32 elif test -f ../../../config.sh; then TOP=../../..;
33 elif test -f ../../../../config.sh; then TOP=../../../..;
34 else
35 echo "Can't find config.sh."; exit 1
36 fi
37 . $TOP/config.sh
38 ;;
39esac
8d063cd8 40
7b0cd887 41PATH="$PATH:."
42export PATH
43
8d063cd8 44$cat /dev/null >.deptmp
45$rm -f *.c.c c/*.c.c
46if test -f Makefile; then
352d5a3a 47 cp Makefile makefile
8d063cd8 48fi
352d5a3a 49mf=makefile
8d063cd8 50if test -f $mf; then
51 defrule=`<$mf sed -n \
52 -e '/^\.c\.o:.*;/{' \
53 -e 's/\$\*\.c//' \
54 -e 's/^[^;]*;[ ]*//p' \
55 -e q \
56 -e '}' \
57 -e '/^\.c\.o: *$/{' \
58 -e N \
59 -e 's/\$\*\.c//' \
60 -e 's/^.*\n[ ]*//p' \
61 -e q \
62 -e '}'`
63fi
64case "$defrule" in
65'') defrule='$(CC) -c $(CFLAGS)' ;;
66esac
67
85e6fe83 68: Create files in UU directory to avoid problems with long filenames
69: on systems with 14 character filename limits so file.c.c and file.c
70: might be identical
71$test -d UU || mkdir UU
72
8d063cd8 73make clist || ($echo "Searching for .c files..."; \
a687059c 74 $echo *.c | $tr ' ' '\012' | $egrep -v '\*' >.clist)
8d063cd8 75for file in `$cat .clist`; do
76# for file in `cat /dev/null`; do
77 case "$file" in
78 *.c) filebase=`basename $file .c` ;;
7b0cd887 79 *.y) filebase=`basename $file .y` ;;
80 esac
81 case "$file" in
82 */*) finc="-I`echo $file | sed 's#/[^/]*$##`" ;;
83 *) finc= ;;
8d063cd8 84 esac
85 $echo "Finding dependencies for $filebase.o."
7b0cd887 86 ( $echo "#line 1 \"$file\""; \
87 $sed -n <$file \
8d063cd8 88 -e "/^${filebase}_init(/q" \
2304df62 89 -e '/^#line/d' \
8d063cd8 90 -e '/^#/{' \
91 -e 's|/\*.*$||' \
92 -e 's|\\$||' \
93 -e p \
85e6fe83 94 -e '}' ) >UU/$file.c
95 $cppstdin $finc -I/usr/local/include -I. $cppflags $cppminus <UU/$file.c |
8d063cd8 96 $sed \
7b0cd887 97 -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
55204971 98 -e 's/^[ ]*#[ ]*line/#/' \
7b0cd887 99 -e '/^# *[0-9][0-9]* *[".\/]/!d' \
8d063cd8 100 -e 's/^.*"\(.*\)".*$/'$filebase'.o: \1/' \
7b0cd887 101 -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'.o: \1/' \
8d063cd8 102 -e 's|: \./|: |' \
103 -e 's|\.c\.c|.c|' | \
104 $uniq | $sort | $uniq >> .deptmp
105done
106
352d5a3a 107$sed <$mf >$mf.new -e '1,/^# AUTOMATICALLY/!d'
8d063cd8 108
109make shlist || ($echo "Searching for .SH files..."; \
a687059c 110 $echo *.SH | $tr ' ' '\012' | $egrep -v '\*' >.shlist)
8d063cd8 111if $test -s .deptmp; then
112 for file in `cat .shlist`; do
a0d0e21e 113 $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
8d063cd8 114 /bin/sh $file >> .deptmp
115 done
352d5a3a 116 $echo "Updating $mf..."
8d063cd8 117 $echo "# If this runs make out of memory, delete /usr/include lines." \
352d5a3a 118 >> $mf.new
8d063cd8 119 $sed 's|^\(.*\.o:\) *\(.*/.*\.c\) *$|\1 \2; '"$defrule \2|" .deptmp \
352d5a3a 120 >>$mf.new
8d063cd8 121else
122 make hlist || ($echo "Searching for .h files..."; \
a687059c 123 $echo *.h | $tr ' ' '\012' | $egrep -v '\*' >.hlist)
8d063cd8 124 $echo "You don't seem to have a proper C preprocessor. Using grep instead."
125 $egrep '^#include ' `cat .clist` `cat .hlist` >.deptmp
352d5a3a 126 $echo "Updating $mf..."
8d063cd8 127 <.clist $sed -n \
128 -e '/\//{' \
129 -e 's|^\(.*\)/\(.*\)\.c|\2.o: \1/\2.c; '"$defrule \1/\2.c|p" \
130 -e d \
131 -e '}' \
352d5a3a 132 -e 's|^\(.*\)\.c|\1.o: \1.c|p' >> $mf.new
8d063cd8 133 <.hlist $sed -n 's|\(.*/\)\(.*\)|s= \2= \1\2=|p' >.hsed
134 <.deptmp $sed -n 's|c:#include "\(.*\)".*$|o: \1|p' | \
135 $sed 's|^[^;]*/||' | \
352d5a3a 136 $sed -f .hsed >> $mf.new
8d063cd8 137 <.deptmp $sed -n 's|h:#include "\(.*\)".*$|h: \1|p' | \
352d5a3a 138 $sed -f .hsed >> $mf.new
8d063cd8 139 for file in `$cat .shlist`; do
a0d0e21e 140 $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
352d5a3a 141 /bin/sh $file >> $mf.new
8d063cd8 142 done
143fi
352d5a3a 144$rm -f $mf.old
145$cp $mf $mf.old
146$cp $mf.new $mf
147$rm $mf.new
148$echo "# WARNING: Put nothing here or make depend will gobble it up!" >> $mf
85e6fe83 149$rm -rf .deptmp UU .shlist .clist .hlist .hsed
8d063cd8 150
151!NO!SUBS!
152$eunicefix makedepend
378cc40b 153chmod +x makedepend
8d063cd8 154case `pwd` in
155*SH)
156 $rm -f ../makedepend
157 ln makedepend ../makedepend
158 ;;
159esac