Chris@1: #!/bin/bash Chris@1: Chris@1: ## Things to test: Chris@1: ## the plugin builds! Chris@1: ## plugin loads Chris@1: ## passes vamp-plugin-tester tests Chris@1: ## does not export any unnecessary symbols Chris@1: ## has valid .cat and .n3 Chris@1: Chris@1: platform=linux Chris@2: bits=64 Chris@1: Chris@4: configure() { Chris@4: dir="$1" Chris@4: if [ -f "$dir/configure" ] ; then Chris@4: ( cd "$dir" ; ./configure ) Chris@4: fi Chris@4: } Chris@4: Chris@1: configure_maybe() { Chris@1: dir="$1" Chris@1: if [ ! -f "$dir/Makefile" ] ; then Chris@4: configure "$dir" Chris@1: fi Chris@1: } Chris@1: Chris@1: find_makefile() { Chris@1: dir="$1" Chris@2: for f in Makefile Makefile.$platform Makefile.$platform$bits build/$platform/Makefile build/$platform/Makefile.$platform build/$platform/Makefile.$platform$bits; do Chris@1: if [ -f "$dir/$f" ]; then Chris@1: echo $f Chris@1: break Chris@1: fi Chris@1: done Chris@1: } Chris@1: Chris@4: build() { Chris@4: dir="$1" Chris@1: if configure_maybe "$dir"; then Chris@1: mfile=$(find_makefile "$dir") Chris@1: if [ -n "$mfile" ]; then Chris@1: make -C "$dir" -f "$mfile" Chris@1: else Chris@1: echo "Failed to find a Makefile in $dir" Chris@4: return 1 Chris@1: fi Chris@1: fi Chris@4: } Chris@4: Chris@4: rebuild() { Chris@4: dir="$1" Chris@4: if configure "$dir"; then Chris@4: mfile=$(find_makefile "$dir") Chris@4: if [ -n "$mfile" ]; then Chris@4: make -C "$dir" -f "$mfile" clean Chris@4: make -C "$dir" -f "$mfile" Chris@4: else Chris@4: echo "Failed to find a Makefile in $dir" Chris@4: return 1 Chris@4: fi Chris@4: fi Chris@4: } Chris@4: Chris@5: run_tester() { Chris@5: ##!!! todo: list the plugins in each library and run the tester Chris@5: ##!!! separately on each -- that way we can report on specific Chris@5: ##!!! plugins rather than whole libraries (though for the Chris@5: ##!!! "printout" report we should include the whole library test, Chris@5: ##!!! just for information's sake?) and we can have separate Chris@5: ##!!! nondeterministic statuses Chris@5: dir="$1" Chris@5: extra="" Chris@5: if grep -q "^$dir\$" nondeterministic.txt; then Chris@5: extra="-n" Chris@5: fi Chris@5: if VAMP_PATH="$dir" vamp-plugin-tester/vamp-plugin-tester "$extra" -a ; then Chris@5: echo "OK" Chris@5: else Chris@5: echo Chris@5: echo "Tester failed: running again with valgrind and verbose for a report..." Chris@5: VAMP_PATH="$dir" valgrind vamp-plugin-tester/vamp-plugin-tester -v "$extra" -a Chris@5: fi Chris@5: } Chris@5: Chris@4: successes="/tmp/successes.$$.txt" Chris@5: partials="/tmp/successes.$$.txt" Chris@4: failures="/tmp/failures.$$.txt" Chris@5: trap 'rm -f "$successes" "$partials" "$failures"' 0 Chris@4: Chris@5: if ! build "vamp-plugin-sdk"; then Chris@5: echo "Failed to build Vamp plugin SDK!" Chris@5: exit 1 Chris@5: fi Chris@5: Chris@5: if ! build "vamp-plugin-tester"; then Chris@5: echo "Failed to build Vamp plugin tester!" Chris@5: exit 1 Chris@5: fi Chris@5: Chris@5: for dir in $(cat .hgsub | grep -v vamp-plugin-sdk | grep -v vamp-plugin-tester | awk '{ print $1; }') ; do Chris@4: echo Chris@4: echo "Processing: $dir" Chris@4: if build "$dir"; then Chris@5: if run_tester "$dir"; then Chris@5: echo "$dir" >> "$successes" Chris@5: else Chris@5: echo "$dir" >> "$partials" Chris@5: fi Chris@4: else Chris@4: echo "$dir" >> "$failures" Chris@4: fi Chris@1: done Chris@1: Chris@4: echo Chris@5: echo "** Successfully built and tested:" Chris@4: cat "$successes" Chris@4: Chris@4: echo Chris@5: echo "** Built, but failed tests:" Chris@5: cat "$partials" Chris@5: Chris@5: echo Chris@4: echo "** Failed to build:" Chris@4: cat "$failures" Chris@4: Chris@4: echo