#!/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 $?