Home | History | Annotate | Download | only in tests
      1 #!/bin/sh
      2 
      3 # Verify consistency of the regression test files present in a directory with
      4 # the contents of the EXTRA_DIST Makefile.am variable.
      5 
      6 # Expand variables in a Makefile ($(NAME) syntax), evaluate $(add_suffix ...)
      7 # and ignore $(noinst_SCRIPTS).
      8 parse_makefile() {
      9   cat "$1" |
     10   awk '/\\$/ {
     11          n = $0
     12          sub("\\\\$", "", n)
     13          if (line != "")
     14            line = line " " n
     15          else
     16            line = n
     17        }
     18        /[^\\]$/ {
     19          if (line != "") {
     20            print line " " $0
     21            line = ""
     22          } else {
     23            print
     24          }
     25        }' |
     26   awk '{
     27          if (match($0, "^ *[A-Za-z_]* *= *.*$")) {
     28            varname = $0
     29            gsub("^ *", "", varname)
     30            gsub(" *=.*", "", varname)
     31            value = $0
     32            gsub("^ *[A-Za-z_]* *= *", "", value)
     33            var[varname] = value
     34          }
     35          for (v in var)
     36            gsub("\\$\\( *" v " *\\)", var[v])
     37          while ((pos = match($0, "\\$\\( *addsuffix *[^,)]*, *[^)]*\\)")) >= 1) {
     38            suffix = substr($0, pos)
     39            gsub("^\\$\\( *addsuffix *", "", suffix)
     40            gsub(",.*", "", suffix)
     41            names = substr($0, pos)
     42            gsub("^\\$\\( *addsuffix *[^,)]*, *", "", names)
     43            gsub("\\).*", "", names)
     44            split(names, name)
     45            name_and_suff=""
     46            for (n in name)
     47              name_and_suff = name_and_suff " " name[n] suffix
     48            sub("\\$\\( *addsuffix *[^,)]*, *[^)]*\\)", name_and_suff)
     49          }
     50          print
     51        }' |
     52   sed 's/\$(noinst_SCRIPTS)//'
     53 }
     54 
     55 if [ $# = 0 ]; then
     56   echo "Error: tool name argument is missing."
     57   exit 1
     58 fi
     59 
     60 rc=0
     61 
     62 # For all directories specified as an argument, find the Makefile.am files
     63 # beneath and check the consistency of the files *.vgtest and *.exp* files
     64 # in that directory with the filenames specified in EXTRA_DIST in Makefile.am.
     65 for t in "$@"
     66 do
     67   find $t -name Makefile.am |
     68   while read m; do
     69     d="$(dirname "$m")"
     70     (
     71       rc=0
     72       if cd $d; then
     73         parsed_makefile="$(parse_makefile Makefile.am)"
     74         for f in $(ls -d *.exp* *.gdb *.vgtest 2>/dev/null)
     75         do
     76           if [ "$f" = "*.exp*" -o "$f" = "*.gdb" -o "$f" = "*.vgtest" ]; then
     77             continue
     78           fi
     79           if ! echo "${parsed_makefile}" 2>/dev/null | grep '^ *EXTRA_DIST *=' |
     80                grep -qw "$f"
     81           then
     82             echo "$m:1: error: $f is missing in EXTRA_DIST"
     83             rc=1
     84           fi
     85         done
     86   
     87         for f in $(ls -d filter* 2>/dev/null)
     88         do
     89           if ! echo "${parsed_makefile}" 2>/dev/null | grep '^ *dist_noinst_SCRIPTS *=' |
     90                grep -qw "$f"
     91           then
     92             echo "$m:1: error: $f is missing in dist_noinst_SCRIPTS"
     93             rc=1
     94           fi
     95         done
     96 
     97         for f in $(parse_makefile Makefile.am | sed -n 's/^ *EXTRA_DIST *=//p')
     98         do
     99           if [ ! -e "$f" ]; then
    100             echo "$m:1: error: $f is in EXTRA_DIST but doesn't exist"
    101             rc=1
    102           fi
    103         done
    104 
    105         for f in $(parse_makefile Makefile.am | sed -n 's/^ *dist_noinst_SCRIPTS *=//p')
    106         do
    107           if [ ! -e "$f" ]; then
    108             echo "$m:1: error: $f is in dist_noinst_SCRIPTS but doesn't exist"
    109             rc=1
    110           fi
    111         done
    112       fi
    113       [ $rc = 0 ]
    114     )
    115     if [ $? != 0 ]; then
    116       rc=1
    117     fi
    118     [ $rc = 0 ]
    119   done
    120   if [ $? != 0 ]; then
    121     rc=1
    122   fi
    123   [ $rc = 0 ]
    124 done
    125 exit $?
    126