#!/bin/sh

# Verify consistency of the regression test files present in a directory with
# the contents of the EXTRA_DIST Makefile.am variable.

# Expand variables in a Makefile ($(NAME) syntax), evaluate $(add_suffix ...)
# and ignore $(noinst_SCRIPTS).
parse_makefile() {
  cat "$1" |
  awk '/\\$/ {
         n = $0
         sub("\\\\$", "", n)
         if (line != "")
           line = line " " n
         else
           line = n
       }
       /[^\\]$/ {
         if (line != "") {
           print line " " $0
           line = ""
         } else {
           print
         }
       }' |
  awk '{
         if (match($0, "^ *[A-Za-z_]* *= *.*$")) {
           varname = $0
           gsub("^ *", "", varname)
           gsub(" *=.*", "", varname)
           value = $0
           gsub("^ *[A-Za-z_]* *= *", "", value)
           var[varname] = value
         }
         for (v in var)
           gsub("\\$\\( *" v " *\\)", var[v])
         while ((pos = match($0, "\\$\\( *addsuffix *[^,)]*, *[^)]*\\)")) >= 1) {
           suffix = substr($0, pos)
           gsub("^\\$\\( *addsuffix *", "", suffix)
           gsub(",.*", "", suffix)
           names = substr($0, pos)
           gsub("^\\$\\( *addsuffix *[^,)]*, *", "", names)
           gsub("\\).*", "", names)
           split(names, name)
           name_and_suff=""
           for (n in name)
             name_and_suff = name_and_suff " " name[n] suffix
           sub("\\$\\( *addsuffix *[^,)]*, *[^)]*\\)", name_and_suff)
         }
         print
       }' |
  sed 's/\$(noinst_SCRIPTS)//'
}

if [ $# = 0 ]; then
  echo "Error: tool name argument is missing."
  exit 1
fi

rc=0

# For all directories specified as an argument, find the Makefile.am files
# beneath and check the consistency of the files *.vgtest and *.exp* files
# in that directory with the filenames specified in EXTRA_DIST in Makefile.am.
for t in "$@"
do
  find $t -name Makefile.am |
  while read m; do
    d="$(dirname "$m")"
    (
      rc=0
      if cd $d; then
        parsed_makefile="$(parse_makefile Makefile.am)"
        for f in $(ls -d *.exp* *.gdb *.vgtest 2>/dev/null)
        do
          if [ "$f" = "*.exp*" -o "$f" = "*.gdb" -o "$f" = "*.vgtest" ]; then
            continue
          fi
          if ! echo "${parsed_makefile}" 2>/dev/null | grep '^ *EXTRA_DIST *=' |
               grep -qw "$f"
          then
            echo "$m:1: error: $f is missing in EXTRA_DIST"
            rc=1
          fi
        done
  
        for f in $(ls -d filter* 2>/dev/null)
        do
          if ! echo "${parsed_makefile}" 2>/dev/null | grep '^ *dist_noinst_SCRIPTS *=' |
               grep -qw "$f"
          then
            echo "$m:1: error: $f is missing in dist_noinst_SCRIPTS"
            rc=1
          fi
        done

        for f in $(parse_makefile Makefile.am | sed -n 's/^ *EXTRA_DIST *=//p')
        do
          if [ ! -e "$f" ]; then
            echo "$m:1: error: $f is in EXTRA_DIST but doesn't exist"
            rc=1
          fi
        done

        for f in $(parse_makefile Makefile.am | sed -n 's/^ *dist_noinst_SCRIPTS *=//p')
        do
          if [ ! -e "$f" ]; then
            echo "$m:1: error: $f is in dist_noinst_SCRIPTS but doesn't exist"
            rc=1
          fi
        done
      fi
      [ $rc = 0 ]
    )
    if [ $? != 0 ]; then
      rc=1
    fi
    [ $rc = 0 ]
  done
  if [ $? != 0 ]; then
    rc=1
  fi
  [ $rc = 0 ]
done
exit $?
