home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / makedepend.SH < prev    next >
Linux/UNIX/POSIX Shell Script  |  2000-03-02  |  6KB  |  222 lines

  1. #! /bin/sh
  2. case $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.     ;;
  14. esac
  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.
  17. case "$0" in
  18. */*) cd `expr X$0 : 'X\(.*\)/'` ;;
  19. esac
  20.  
  21. echo "Extracting makedepend (with variable substitutions)"
  22. rm -f makedepend
  23. $spitshell >makedepend <<!GROK!THIS!
  24. $startsh
  25. # makedepend.SH
  26. #
  27. MAKE=$make
  28. trnl='$trnl'
  29. !GROK!THIS!
  30. $spitshell >>makedepend <<'!NO!SUBS!'
  31.  
  32. # This script should be called with 
  33. #     sh ./makedepend MAKE=$(MAKE)
  34. case "$1" in 
  35.     MAKE=*) eval $1 ;;
  36. esac
  37.  
  38. export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh \$0; kill \$\$)
  39.  
  40. case $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.     ;;
  52. esac
  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.
  58. PATH=".$path_sep..$path_sep$PATH"
  59. export PATH
  60.  
  61. $cat /dev/null >.deptmp
  62. $rm -f *.c.c c/*.c.c
  63. if 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
  73. fi
  74. mf=$firstmakefile
  75. if 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 '}'`
  88. fi
  89. case "$defrule" in
  90. '') defrule='$(CC) -c $(CFLAGS)' ;;
  91. esac
  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)
  100. for 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
  149. done
  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):
  158. rm -f .shlist.old
  159. mv .shlist .shlist.old
  160. $egrep -v '^makedepend\.SH' <.shlist.old >.shlist
  161. rm -f .shlist.old
  162. mv .shlist .shlist.old
  163. $egrep -v '^Makefile\.SH' <.shlist.old >.shlist
  164. rm -f .shlist.old
  165. mv .shlist .shlist.old
  166. $egrep -v '^perl_exp\.SH' <.shlist.old >.shlist
  167. rm -f .shlist.old
  168. mv .shlist .shlist.old
  169. $egrep -v '^config_h\.SH' <.shlist.old >.shlist
  170. rm .shlist.old
  171.  
  172. if $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
  182. else
  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
  204. fi
  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
  215. chmod +x makedepend
  216. case `pwd` in
  217. *SH)
  218.     $rm -f ../makedepend
  219.     ln makedepend ../makedepend
  220.     ;;
  221. esac
  222.