This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Promote v5.36 usage and feature bundles doc
[perl5.git] / makedepend.SH
CommitLineData
1e2cbf11 1#! /bin/sh
a02608de 2case $PERL_CONFIG_SH in
8d063cd8 3'')
a0d0e21e
LW
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 ;;
8d063cd8 14esac
a0d0e21e
LW
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.
8d063cd8
LW
17case "$0" in
18*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
19esac
1e2cbf11 20
8d063cd8 21echo "Extracting makedepend (with variable substitutions)"
7b0cd887 22rm -f makedepend
75f92628
AD
23$spitshell >makedepend <<!GROK!THIS!
24$startsh
a0d0e21e 25# makedepend.SH
8d063cd8 26#
6b9d15cb 27MAKE=$make
28e8609d 28trnl='$trnl'
1aef975c
AD
29!GROK!THIS!
30$spitshell >>makedepend <<'!NO!SUBS!'
8d063cd8 31
7fedbb54
JH
32if test -d .depending; then
33 echo "$0: Already running, exiting."
34 exit 0
35fi
36
37mkdir .depending
38
8d469d0e 39# This script should be called with
3b5ca523 40# sh ./makedepend MAKE=$(MAKE)
8d469d0e 41case "$1" in
3ae7e562 42 MAKE=*) eval $1; shift ;;
fb73857a 43esac
44
8d063cd8
LW
45export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh \$0; kill \$\$)
46
a02608de 47case $PERL_CONFIG_SH in
a0d0e21e
LW
48'')
49 if test -f config.sh; then TOP=.;
50 elif test -f ../config.sh; then TOP=..;
51 elif test -f ../../config.sh; then TOP=../..;
52 elif test -f ../../../config.sh; then TOP=../../..;
53 elif test -f ../../../../config.sh; then TOP=../../../..;
54 else
55 echo "Can't find config.sh."; exit 1
56 fi
57 . $TOP/config.sh
58 ;;
59esac
8d063cd8 60
ed9a7c0a
RGS
61# Avoid localized gcc messages
62case "$ccname" in
63 gcc) LC_ALL=C ; export LC_ALL ;;
64esac
65
16d20bd9
AD
66# We need .. when we are in the x2p directory if we are using the
67# cppstdin wrapper script.
8e07c86e
AD
68# Put .. and . first so that we pick up the present cppstdin, not
69# an older one lying about in /usr/local/bin.
39e571d4 70PATH=".$path_sep..$path_sep$PATH"
7b0cd887
LW
71export PATH
72
47359646
JH
73case "$osname" in
74amigaos) cat=/bin/cat ;; # must be absolute
75esac
76
8d063cd8
LW
77$cat /dev/null >.deptmp
78$rm -f *.c.c c/*.c.c
79if test -f Makefile; then
1e2cbf11 80 rm -f $firstmakefile
337e9004 81 cp Makefile $firstmakefile
ae26f3f3 82 # On QNX, 'cp' preserves timestamp, so $firstmakefile appears
83 # to be out of date. I don't know if OS/2 has touch, so do this:
84 case "$osname" in
85 os2) ;;
86 *) $touch $firstmakefile ;;
87 esac
8d063cd8 88fi
337e9004 89mf=$firstmakefile
8d063cd8
LW
90if test -f $mf; then
91 defrule=`<$mf sed -n \
2d9864fe 92 -e '/^\.c\$(OBJ_EXT):.*;/{' \
8d063cd8
LW
93 -e 's/\$\*\.c//' \
94 -e 's/^[^;]*;[ ]*//p' \
95 -e q \
96 -e '}' \
2d9864fe 97 -e '/^\.c\$(OBJ_EXT): *$/{' \
8d063cd8
LW
98 -e N \
99 -e 's/\$\*\.c//' \
100 -e 's/^.*\n[ ]*//p' \
101 -e q \
102 -e '}'`
103fi
104case "$defrule" in
105'') defrule='$(CC) -c $(CFLAGS)' ;;
106esac
107
85e6fe83
LW
108: Create files in UU directory to avoid problems with long filenames
109: on systems with 14 character filename limits so file.c.c and file.c
110: might be identical
111$test -d UU || mkdir UU
112
3b5ca523
GS
113$MAKE clist || ($echo "Searching for .c files..."; \
114 $echo *.c | $tr ' ' $trnl | $egrep -v '\*' >.clist)
8d469d0e
MM
115
116clist=`$cat .clist | $sed -e 's,$,.depends,'`
117
118# Now, create a Makefile from .clist and run that in parallel
119# Makefiles creating more Makefiles
120# A Makefile exists to beget more Makefiles. Perl is
121# just a vehicle.
122rm -f $clist
123$MAKE $clist
124$cat $clist >.deptmp
125rm -f $clist
8d063cd8 126
352d5a3a 127$sed <$mf >$mf.new -e '1,/^# AUTOMATICALLY/!d'
8d063cd8 128
8d063cd8 129if $test -s .deptmp; then
352d5a3a 130 $echo "Updating $mf..."
8d063cd8 131 $echo "# If this runs make out of memory, delete /usr/include lines." \
352d5a3a 132 >> $mf.new
3722f0dc 133 if [ "$osname" = vos ]; then
ef314d29 134 $sed 's|\.incl\.c|.h|' .deptmp >.deptmp.vos
3722f0dc
PG
135 mv -f .deptmp.vos .deptmp
136 fi
d58d97f6
TC
137 $sed -e 's|^\(.*\$(OBJ_EXT):\) *\(.*/.*\.c\) *$|\1 \2; '"$defrule \2|" \
138 -e 'h; s/mini\(perlmain\)/\1/p; g' \
139 .deptmp >>$mf.new
8d063cd8 140else
8d469d0e
MM
141 $echo "Should not get here"
142 exit 1
3b5ca523
GS
143 $MAKE hlist || ($echo "Searching for .h files..."; \
144 $echo *.h | $tr ' ' $trnl | $egrep -v '\*' >.hlist)
8d063cd8
LW
145 $echo "You don't seem to have a proper C preprocessor. Using grep instead."
146 $egrep '^#include ' `cat .clist` `cat .hlist` >.deptmp
352d5a3a 147 $echo "Updating $mf..."
8d063cd8
LW
148 <.clist $sed -n \
149 -e '/\//{' \
337e9004 150 -e 's|^\(.*\)/\(.*\)\.c|\2\$(OBJ_EXT): \1/\2.c; '"$defrule \1/\2.c|p" \
8d063cd8
LW
151 -e d \
152 -e '}' \
337e9004 153 -e 's|^\(.*\)\.c|\1\$(OBJ_EXT): \1.c|p' >> $mf.new
8d063cd8
LW
154 <.hlist $sed -n 's|\(.*/\)\(.*\)|s= \2= \1\2=|p' >.hsed
155 <.deptmp $sed -n 's|c:#include "\(.*\)".*$|o: \1|p' | \
156 $sed 's|^[^;]*/||' | \
352d5a3a 157 $sed -f .hsed >> $mf.new
8d063cd8 158 <.deptmp $sed -n 's|h:#include "\(.*\)".*$|h: \1|p' | \
352d5a3a 159 $sed -f .hsed >> $mf.new
8d063cd8 160fi
352d5a3a
LW
161$rm -f $mf.old
162$cp $mf $mf.old
1e2cbf11 163$rm -f $mf
352d5a3a
LW
164$cp $mf.new $mf
165$rm $mf.new
166$echo "# WARNING: Put nothing here or make depend will gobble it up!" >> $mf
9719c95b 167$rm -rf .deptmp UU .clist .hlist .hsed .cout .cerr
7fedbb54 168rmdir .depending
8d063cd8
LW
169
170!NO!SUBS!
171$eunicefix makedepend
378cc40b 172chmod +x makedepend