mkdepend 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #!/bin/sh
  2. : ${SMLSHARP:=./minismlsharp}
  3. : ${SMLFLAGS:=}
  4. : ${files_mk:=files.mk}
  5. : ${depend_mk:=depend.mk}
  6. LF='
  7. '
  8. smi=
  9. i=2
  10. while [ "$i" -le "$#" ]; do
  11. smi="$smi \"\${$i}\""
  12. i=$(($i+2))
  13. done
  14. set -e
  15. libfiles=`mktemp`
  16. allfiles=`mktemp`
  17. makefile=`mktemp`
  18. trap 'rm -f "$libfiles" "$allfiles" "$makefile"' EXIT
  19. trap 'exit 127' INT QUIT STOP
  20. smlsharp='$SMLSHARP -Bsrc -nostdpath $SMLFLAGS -Mm -dprintWidth=0'
  21. eval "echo $smlsharp $smi 1>&2"
  22. eval "$smlsharp $smi > \"\$makefile\""
  23. awk -v depend_mk="$depend_mk" \
  24. -v files_mk="$files_mk" \
  25. -v libfiles="$libfiles" \
  26. -v allfiles="$allfiles" \
  27. -v makefile="$makefile" \
  28. '
  29. BEGIN {
  30. for (i = 1; i < ARGC; i += 2) {
  31. sub("\\.smi$", ":", ARGV[i+1]);
  32. projects[ARGV[i+1]] = ARGV[i];
  33. delete ARGV[i];
  34. delete ARGV[i+1];
  35. }
  36. ARGV[1] = makefile;
  37. print "# auto-generated by mkdepend. DO NOT EDIT BY HAND." > depend_mk;
  38. print "# auto-generated by mkdepend. DO NOT EDIT BY HAND." > files_mk;
  39. }
  40. /^\t/ { next }
  41. /^[^ :]*\.o:/ {
  42. gsub(" ", " \\\n ");
  43. print $0" \\\n $(SMLSHARP_DEP)" >> depend_mk;
  44. next;
  45. }
  46. $1 in projects {
  47. proj = projects[$1];
  48. isLib = match(proj, "_LIB$");
  49. items = split($0, a);
  50. for (i = 2; i <= items; i++)
  51. files[a[i]] += isLib;
  52. out = "";
  53. for (i = 2; i <= items; i++) {
  54. if (match(a[i], "\\.o$"))
  55. out = out" \\\n"a[i];
  56. }
  57. print proj"_OBJECTS ="out >> files_mk;
  58. }
  59. END {
  60. for (i in files) {
  61. if (files[i] != 0) print i >> libfiles;
  62. print i >> allfiles;
  63. }
  64. }
  65. ' "$@"
  66. GEN_SOURCES='
  67. src/config/main/Version.sml
  68. src/config/main/SQLConfig.sml
  69. src/compiler/compilerIRs/absyn/main/AbsynConstFormatter.sml
  70. src/compiler/compilerIRs/absyn/main/AbsynFormatter.sml
  71. src/compiler/compilerIRs/absyn/main/AbsynSQLFormatter.sml
  72. src/compiler/compilerIRs/absyn/main/AbsynTyFormatter.sml'
  73. GEN_MISC_FILES=
  74. ALL_OBJECTS=`sed '/:/!d;s/:.*$//' "$depend_mk"`
  75. IFS=$LF
  76. for i in `echo "$ALL_OBJECTS" | sed 's/\.o$//'`; do
  77. case "$i" in
  78. src/ml-yacc/src/yacc.lex) ;;
  79. src/ml-yacc/src/yacc.grm) ;;
  80. src/smlnj-lib/JSON/json.lex) ;;
  81. *.ppg)
  82. GEN_SOURCES="$GEN_SOURCES$LF$i.sml"
  83. echo "$i.sml: \\" >> "$depend_mk"
  84. echo " $i \\" >> "$depend_mk"
  85. echo ' $(SMLFORMAT_DEP)' >> "$depend_mk"
  86. echo " \$(SMLSHARP_ENV) \$(MINISMLFORMAT) --output=$i.sml \$(srcdir)/$i" >> "$depend_mk"
  87. ;;
  88. *.lex)
  89. GEN_SOURCES="$GEN_SOURCES$LF$i.sml"
  90. echo "$i.sml: \\" >> "$depend_mk"
  91. echo " $i \\" >> "$depend_mk"
  92. echo ' $(SMLLEX_DEP)' >> "$depend_mk"
  93. echo " \$(SMLSHARP_ENV) \$(MINISMLLEX) -o $i.sml \$(srcdir)/$i" >> "$depend_mk"
  94. ;;
  95. *.grm)
  96. GEN_SOURCES="$GEN_SOURCES$LF$i.sml"
  97. GEN_MISC_FILES="$GEN_MISC_FILES$LF$i.desc"
  98. echo "$i.sml: \\" >> "$depend_mk"
  99. echo " $i \\" >> "$depend_mk"
  100. echo ' $(SMLYACC_DEP)' >> "$depend_mk"
  101. echo " \$(SMLSHARP_ENV) \$(MINISMLYACC) -s -p $i \$(srcdir)/$i" >> "$depend_mk"
  102. ;;
  103. esac
  104. done
  105. (echo 'INSTALL_FILES_OBJ ='; sed '/\.o$/!d' "$libfiles" | sort) \
  106. | sed '$!s/$/ \\/' >> "$files_mk"
  107. (echo 'INSTALL_FILES_SRC ='; sed '/\.o$/d' "$libfiles" | sort) \
  108. | sed '$!s/$/ \\/' >> "$files_mk"
  109. echo "ALL_OBJECTS =$LF$ALL_OBJECTS" | sed '$!s/$/ \\/' >> "$files_mk"
  110. echo "GEN_SOURCES =$GEN_SOURCES" | sed '$!s/$/ \\/' >> "$files_mk"
  111. echo "GEN_MISC_FILES =$GEN_MISC_FILES" | sed '$!s/$/ \\/' >> "$files_mk"
  112. if [ -d ../.hg ]; then
  113. export HG_PLAIN=1
  114. set +e
  115. cat "$allfiles" | sort | sed '
  116. /\.o$/s/\.o$/.sml/;
  117. \,^src/ml-yacc/src/yacc\.lex\.sml$,d;
  118. \,^src/ml-yacc/src/yacc\.grm\.sml$,d;
  119. \,^src/config/main/Version\.sml$,s/$/.in/;
  120. \,^src/config/main/SQLConfig\.sml$,s/$/.in/;
  121. \,^src/compiler/compilerIRs/absyn/main/AbsynFormatter\.sml$,d;
  122. \,^src/compiler/compilerIRs/absyn/main/AbsynConstFormatter\.sml$,d;
  123. \,^src/compiler/compilerIRs/absyn/main/AbsynTyFormatter\.sml$,d;
  124. \,^src/compiler/compilerIRs/absyn/main/AbsynSQLFormatter\.sml$,d;
  125. /\.ppg\.sml$/s/\.sml$//;
  126. /\.grm\.sml$/s/\.sml$//;
  127. /\.grm.sig/d;
  128. /\.lex\.sml$/s/\.sml$//;
  129. ' | xargs hg status -rdui 2>&1 | grep '^[^#]'
  130. if [ "$?" = "0" ]; then
  131. echo "*** Add these files to the repository."
  132. exit 1
  133. fi
  134. fi