#!/bin/sh

[ "x$SMLSHARP" = "x" ] && SMLSHARP=smlsharp
[ "x$OBJEXT" = "x" ] && OBJEXT=o

files_mk=files.mk
depend_mk=depend.mk

dep_objfiles () {
  echo $SMLSHARP -Bsrc -nostdpath -Ml "$1" 1>&2
  $SMLSHARP -Bsrc -nostdpath -Ml "$1" \
    | awk '{sub(" *\\\\$","");sub("^ *","");gsub("  *","\n");print}' \
    | sed '1d;$d' \
  || exit $?
}

dep_srcfiles () { \
  if test -f `echo "$1" | sed 's,\.smi$,.sml,'`; then
    sedscript="1d"
  else
    sedscript="1,2d"
  fi
  echo $SMLSHARP -Bsrc -nostdpath -M "$1" 1>&2
  $SMLSHARP -Bsrc -nostdpath -M "$1" \
    | awk '{sub(" *\\\\$","");sub("^ *","");gsub("  *","\n");print}' \
    | sed "$sedscript" \
  || exit $?
}

ALL_OBJECTS=
INSTALL_FILES=
GEN_SOURCES=
CLEAN_FILES=

read_smi () { \
  obj=`dep_objfiles "$2"`
  ALL_OBJECTS="$ALL_OBJECTS $obj"
  obj=`echo "$obj" | awk '{a[NR]=$0}END{for(i=NR;i>0;i--)print a[i]}'`
  echo "$1""_OBJECTS = $obj" | sed '$q;s,$, \\,' >> $files_mk
  src=`dep_srcfiles "$2"`
  case "$1" in
    *_LIB)
      INSTALL_FILES="$INSTALL_FILES $obj $src $2"
      ;;
  esac
  { echo "$1"'_SOURCES ='; \
    echo "$src" | sed 's/\.smi$/.sml/' \
    | while read i; do test -f "$i" && echo "$i"; done; } \
  | sed '$q;s,$, \\,' >> $files_mk
}

echo '# auto-generated by mkdepend. DO NOT EDIT BY HAND.' > $files_mk
echo '# auto-generated by mkdepend. DO NOT EDIT BY HAND.' > $depend_mk

while [ "x$1" != "x" ] && [ "x$2" != "x" ]; do
  read_smi "$1" "$2"
  shift 2
done

INSTALL_FILES=`echo "$INSTALL_FILES" \
               | awk '{sub("^ *","");gsub("  *","\n");print}' \
               | sort | uniq`
echo "INSTALL_FILES = $INSTALL_FILES" | sed '$q;s,$, \\,' >> $files_mk

ALL_OBJECTS=`echo "$ALL_OBJECTS" \
             | awk '{sub("^ *","");gsub("  *","\n");print}' \
             | sort | uniq`
echo "ALL_OBJECTS = $ALL_OBJECTS" | sed '$q;s,$, \\,' >> $files_mk

for i in `echo "$ALL_OBJECTS" | sed "s,\.$OBJEXT\$,,"`; do
  case "$i" in
    src/ml-yacc/src/yacc.lex) ;;
    src/ml-yacc/src/yacc.grm) ;;
    src/ml-yacc2/src/yacc.lex) ;;
    src/ml-yacc2/src/yacc.grm) ;;
    *.ppg)
      GEN_SOURCES="$GEN_SOURCES $i.sml"
      echo "$i.sml: $i \$(SMLFORMAT_DEP)" >> $depend_mk
      ;;
    *.lex)
      GEN_SOURCES="$GEN_SOURCES $i.sml"
      echo "$i.sml: $i \$(MLLEX_DEP)" >> $depend_mk
      ;;
    *.grm)
      GEN_SOURCES="$GEN_SOURCES $i.sml $i.sig"
      CLEAN_FILES="$CLEAN_FILES $i.desc"
      echo "$i.sml $i.sig: $i \$(MLYACC_DEP)" >> $depend_mk
      ;;
  esac
  echo $SMLSHARP -Bsrc -nostdpath -M "$i.sml" 1>&2
  $SMLSHARP -Bsrc -nostdpath -M "$i.sml" | sed 's, *\\*$, \\,' \
  >> $depend_mk || exit $?
  echo '  $(SMLSHARP_DEP)' >> $depend_mk
done

GEN_SOURCES=`echo "$GEN_SOURCES" | awk '{sub("^ *","");gsub("  *","\n");print}'`
echo "GEN_SOURCES = $GEN_SOURCES" | sed '$q;s,$, \\,' >> $files_mk
CLEAN_FILES=`echo "$CLEAN_FILES" | awk '{sub("^ *","");gsub("  *","\n");print}'`
echo "CLEAN_FILES = $CLEAN_FILES" | sed '$q;s,$, \\,' >> $files_mk
