mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-07 16:06:09 +00:00
126 lines
3.4 KiB
Bash
Executable File
126 lines
3.4 KiB
Bash
Executable File
#!/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 $?
|