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