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