view SCRIPTS/process.sh @ 6:c4ee2ab22c38

Run individual plugin tests separately; put output in reports dir. Move scripts to subdir
author Chris Cannam
date Sat, 26 Jul 2014 20:41:13 +0100
parents process.sh@57da88814766
children 5b720d5c7bc1
line wrap: on
line source
#!/bin/bash

# Run this from the top-level vamp-build-and-test directory

## Things to test:
##   the plugin builds!
##   plugin loads
##   passes vamp-plugin-tester tests
##   does not export any unnecessary symbols
##   has valid .cat and .n3

platform=linux
bits=64

reportdir="REPORTS/$platform$bits"
mkdir -p "$reportdir" || exit 1

configure() {
    dir="$1"
    if [ -f "$dir/configure" ] ; then
	( cd "$dir" ; ./configure ) 2>&1 | tee "$reportdir/$dir.configure.txt"
    fi
}

configure_maybe() {
    dir="$1"
    if [ ! -f "$dir/Makefile" ] ; then
	configure "$dir"
    fi
}

find_makefile() {
    dir="$1"
    for f in Makefile Makefile.$platform Makefile.$platform$bits build/$platform/Makefile build/$platform/Makefile.$platform build/$platform/Makefile.$platform$bits; do
	if [ -f "$dir/$f" ]; then
	    echo $f
	    break
	fi
    done
}

build() {
    dir="$1"
    if configure_maybe "$dir"; then
	mfile=$(find_makefile "$dir")
	if [ -n "$mfile" ]; then
	    make -C "$dir" -f "$mfile" 2>&1 | tee "$reportdir/$dir.build.txt"
	else
	    echo "Failed to find a Makefile in $dir"
	    return 1
	fi
    fi
}

rebuild() {
    dir="$1"
    if configure "$dir"; then
	mfile=$(find_makefile "$dir")
	if [ -n "$mfile" ]; then
	    make -C "$dir" -f "$mfile" clean
	    make -C "$dir" -f "$mfile" 2>&1 | tee "$reportdir/$dir.build.txt"
	else
	    echo "Failed to find a Makefile in $dir"
	    return 1
	fi
    fi
}

run_tester() {
    ##!!! todo: list the plugins in each library and run the tester
    ##!!! separately on each -- that way we can report on specific
    ##!!! plugins rather than whole libraries (though for the
    ##!!! "printout" report we should include the whole library test,
    ##!!! just for information's sake?) and we can have separate
    ##!!! nondeterministic statuses
    dir="$1"
    ids=$(VAMP_PATH="$dir" vamp-plugin-sdk/host/vamp-simple-host --list-ids | sed 's/^vamp://')
    if [ -z "$ids" ]; then
	echo 
	echo "No plugins reported to test in $dir"
	return 1
    else
	for id in $ids; do
	    extra=""
	    if grep -q "^$id\$" nondeterministic.txt; then
		extra="-n"
	    fi
	    if VAMP_PATH="$dir" vamp-plugin-tester/vamp-plugin-tester "$extra" "$id" 2>&1 | tee "$reportdir/$dir.test.txt" ; then
		echo "OK"
	    else
		echo
		echo "Tester failed for id $id: running again with valgrind and verbose for a report..."
		echo "$dir" >> "$testfailed"
		VAMP_PATH="$dir" valgrind vamp-plugin-tester/vamp-plugin-tester -v "$extra" "$id" 2>&1 | tee -a "$reportdir/$dir.test.txt"
	    fi
	done
    fi
}

built="/tmp/built.$$.txt"
testfailed="/tmp/testfailed.$$.txt"
notbuilt="/tmp/notbuilt.$$.txt"
trap 'rm -f "$built" "$testfailed" "$notbuilt"' 0

if ! build "vamp-plugin-sdk"; then 
    echo "Failed to build Vamp plugin SDK!"
    exit 1
fi

if ! build "vamp-plugin-tester"; then 
    echo "Failed to build Vamp plugin tester!"
    exit 1
fi

for dir in $(cat .hgsub | grep -v vamp-plugin-sdk | grep -v vamp-plugin-tester | awk '{ print $1; }') ; do
    echo
    echo "Processing: $dir"
    if rebuild "$dir"; then
	echo "$dir" >> "$built"
	run_tester "$dir"
    else
	echo "$dir" >> "$notbuilt"
    fi
done

truncate -s0 "$reportdir/$dir.summary.txt"

echo
echo "** Successfully built and tested:"
cat "$built" | while read d; do
    if ! grep -q "^$d\$" "$testfailed"; then
	echo "$d"
	echo "Success" >> "$reportdir/$d.summary.txt"
    fi
done | sort

echo
echo "** Built, but failed tests:"
cat "$testfailed" | sort | uniq | while read d; do
    echo "$d"
    echo "Built successfully, but failed tests" >> "$reportdir/$d.summary.txt"
done

echo
echo "** Failed to build:"	    
cat "$notbuilt" | sort | while read d; do
    echo "$d"
    echo "Failed to build" >> "$reportdir/$d.summary.txt"
done

echo