Mercurial > hg > vamp-build-and-test
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