mkdep
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #!/bin/sh -
  2. #
  3. # Copyright (c) 1987 Regents of the University of California.
  4. # All rights reserved.
  5. #
  6. # Redistribution and use in source and binary forms are permitted
  7. # provided that this notice is preserved and that due credit is given
  8. # to the University of California at Berkeley. The name of the University
  9. # may not be used to endorse or promote products derived from this
  10. # software without specific prior written permission. This software
  11. # is provided ``as is'' without express or implied warranty.
  12. #
  13. # @(#)mkdep.sh 5.11 (Berkeley) 5/5/88
  14. #
  15. #PATH=/bin:/usr/bin:/usr/ucb
  16. #export PATH
  17. MAKE=Makefile # default makefile name is "Makefile"
  18. while :
  19. do case "$1" in
  20. # -f allows you to select a makefile name
  21. -f)
  22. MAKE=$2
  23. shift; shift ;;
  24. # the -p flag produces "program: program.c" style dependencies
  25. # so .o's don't get produced
  26. -p)
  27. SED='s;.o;;'
  28. shift ;;
  29. *)
  30. break ;;
  31. esac
  32. done
  33. if [ $# = 0 ] ; then
  34. echo 'usage: mkdep [-p] [-f makefile] [flags] file ...'
  35. exit 1
  36. fi
  37. if [ ! -w $MAKE ]; then
  38. echo "mkdep: no writeable file "$MAKE""
  39. exit 1
  40. fi
  41. TMP=/tmp/mkdep$$
  42. trap 'rm -f $TMP ; exit 1' 1 2 3 13 15
  43. cp $MAKE ${MAKE}.bak
  44. sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
  45. cat << _EOF_ >> $TMP
  46. # DO NOT DELETE THIS LINE -- mkdep uses it.
  47. # DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
  48. _EOF_
  49. awk=awk
  50. if [ -x /bin/nawk ] ; then
  51. awk=/bin/nawk
  52. fi
  53. # If your compiler doesn't have -M, add it.  If you can't, the next two
  54. # lines will try and replace the "cc -M".  The real problem is that this
  55. # hack can't deal with anything that requires a search path, and doesn't
  56. # even try for anything using bracket (<>) syntax.
  57. #
  58. #egrep '^#include[  ]*".*"' /dev/null $* |
  59. #sed -e 's/:[^"]*"([^"]*)".*/: 1/' -e 's/.cc/.o/' |
  60. g++ -M $* |
  61. sed "
  62. s; ./; ;g
  63. $SED" |
  64. $awk '
  65. END { 
  66. if (rec != "")
  67. print rec; 
  68. }
  69. {
  70. if ($1 != prev) {
  71. if (rec != "")
  72. print rec;
  73. rec = $0;
  74. prev = $1;
  75. }
  76. else {
  77. if (length(rec $2) > 78) {
  78. print rec;
  79. rec = $0;
  80. }
  81. else
  82. rec = rec " " $2
  83. }
  84. }' |
  85. $awk '{
  86. # GNU cpp outputs assumes objects land in current directory
  87. # but we put them in subdirectories, so fix up the rules accordingly
  88. # i.e., make "foo.o: dir/foo.cc blah" turn into "dir/foo.o: dir/..."
  89. if ($1 ~ /.*:/ && $2 ~ "/") {
  90. k = 1
  91. while (1) {
  92. s = substr($2, k);
  93. i = index(s,"/");
  94. if (i == 0)
  95. break;
  96. k += i
  97. }
  98. path = substr($2, 1, k - 1);
  99. line = "";
  100. for (i = 2; i <= NF; ++i)
  101. line = line " " $i;
  102. print path $1 " " line;
  103. } else
  104. print $0
  105. }' >> $TMP
  106. cat << _EOF_ >> $TMP
  107. # IF YOU PUT ANYTHING HERE IT WILL GO AWAY
  108. _EOF_
  109. # copy to preserve permissions
  110. cp $TMP $MAKE
  111. rm -f ${MAKE}.bak $TMP
  112. exit 0