home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.bin / mkdep / mkdep.old.compiler < prev    next >
Encoding:
Text File  |  1991-04-12  |  3.6 KB  |  144 lines

  1. #!/bin/sh -
  2. #
  3. # Copyright (c) 1991 The Regents of the University of California.
  4. # All rights reserved.
  5. #
  6. # Redistribution and use in source and binary forms, with or without
  7. # modification, are permitted provided that the following conditions
  8. # are met:
  9. # 1. Redistributions of source code must retain the above copyright
  10. #    notice, this list of conditions and the following disclaimer.
  11. # 2. Redistributions in binary form must reproduce the above copyright
  12. #    notice, this list of conditions and the following disclaimer in the
  13. #    documentation and/or other materials provided with the distribution.
  14. # 3. All advertising materials mentioning features or use of this software
  15. #    must display the following acknowledgement:
  16. #    This product includes software developed by the University of
  17. #    California, Berkeley and its contributors.
  18. # 4. Neither the name of the University nor the names of its contributors
  19. #    may be used to endorse or promote products derived from this software
  20. #    without specific prior written permission.
  21. #
  22. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  23. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25. # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  26. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32. # SUCH DAMAGE.
  33. #
  34. #    @(#)mkdep.old.compiler    5.4 (Berkeley) 4/12/91
  35. #
  36.  
  37. # This is a version of mkdep that works pretty well
  38. # with compilers that don't have -M.
  39. MAKE=Makefile            # default makefile name is "Makefile"
  40.  
  41. PATH=/bin:/usr/bin:/usr/ucb:/lib:/usr/lib
  42.  
  43. INCL=
  44.  
  45. while :
  46.     do case "$1" in
  47.         # -f allows you to select a makefile name
  48.         -f)
  49.             MAKE=$2
  50.             shift; shift ;;
  51.  
  52.         # the -p flag produces "program: program.c" style dependencies
  53.         # so .o's don't get produced
  54.         -p)
  55.             SED='s;\.o;;'
  56.             shift ;;
  57.         *)
  58.             break ;;
  59.     esac
  60. done
  61.  
  62. if [ $# = 0 ] ; then
  63.     echo 'usage: mkdep [-p] [-f makefile] [flags] file ...'
  64.     exit 1
  65. fi
  66.  
  67. if [ ! -w $MAKE ]; then
  68.     echo "mkdep: no writeable file \"$MAKE\""
  69.     exit 1
  70. fi
  71.  
  72. TMP=/tmp/mkdep$$
  73.  
  74. trap 'rm -f $TMP ; exit 1' 1 2 3 13 15
  75.  
  76. cp $MAKE ${MAKE}.bak
  77. sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
  78.  
  79. cat << _EOF_ >> $TMP
  80. # DO NOT DELETE THIS LINE -- mkdep uses it.
  81. # DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
  82.  
  83. _EOF_
  84.  
  85.  
  86. for i do
  87.     case "$i" in
  88.     -c|-M|-O)
  89.         ;;
  90.     -I*)
  91.         INCL="$INCL $i";;
  92.     -D*|-U*)
  93.         FLAGS="$FLAGS $i";;
  94.     *)
  95.         # assume source file
  96.         # put '$dep' in front of dependencies
  97.         dep=`echo "$i" | sed -e 's,/,\\\\/,g' -e 's/\.c$/.o/'`
  98.  
  99.         # Find includes, remove leading numerics, remove ./,
  100.         # remove double quotes, and remove trailing numerics.
  101.         # Sort that, discarding duplicates, and add '$dep'.
  102.         cpp $INCL $FLAGS "$i" | sed -e '
  103.             /^#/!d
  104.             s/# [0-9]* //
  105.             s,"./,",
  106.             s/"\(.*\)"/\1/
  107.             s/ [ 0-9]*$//' |
  108.         sort -u | sed -e "s/^/$dep: /";;
  109.     esac
  110. done |
  111. sed "
  112.     s; \./; ;g
  113.     /\.c:$/d
  114.     $SED" |
  115. awk '{
  116.     if ($1 != prev) {
  117.         if (rec != "")
  118.             print rec;
  119.         rec = $0;
  120.         prev = $1;
  121.     }
  122.     else {
  123.         if (length(rec $2) > 78) {
  124.             print rec;
  125.             rec = $0;
  126.         }
  127.         else
  128.             rec = rec " " $2
  129.     }
  130. }
  131. END {
  132.     print rec
  133. }' >> $TMP
  134.  
  135. cat << _EOF_ >> $TMP
  136.  
  137. # IF YOU PUT ANYTHING HERE IT WILL GO AWAY
  138. _EOF_
  139.  
  140. # copy to preserve permissions
  141. cp $TMP $MAKE
  142. rm -f $TMP
  143. exit 0
  144.