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