annotate SCRIPTS/process.sh @ 13:fb75075c8238

Toward win32 cross-compile
author Chris Cannam
date Mon, 04 Aug 2014 18:03:21 +0100
parents 8dd6da2a48ee
children 114c03877f21
rev   line source
Chris@1 1 #!/bin/bash
Chris@1 2
Chris@6 3 # Run this from the top-level vamp-build-and-test directory
Chris@6 4
Chris@1 5 ## Things to test:
Chris@1 6 ## the plugin builds!
Chris@1 7 ## plugin loads
Chris@1 8 ## passes vamp-plugin-tester tests
Chris@1 9 ## does not export any unnecessary symbols
Chris@1 10 ## has valid .cat and .n3
Chris@1 11
Chris@13 12 #platform=linux
Chris@13 13 #bits=64
Chris@13 14
Chris@13 15 platform=mingw
Chris@13 16 bits=32
Chris@13 17 toolprefix=i686-w64-mingw32-
Chris@1 18
Chris@11 19 plugindirs="$@"
Chris@11 20 if [ -z "$plugindirs" ]; then
Chris@11 21 plugindirs=$(cat .hgsub | grep -v vamp-plugin-sdk | grep -v vamp-plugin-tester | awk '{ print $1; }')
Chris@11 22 fi
Chris@11 23
Chris@6 24 reportdir="REPORTS/$platform$bits"
Chris@6 25 mkdir -p "$reportdir" || exit 1
Chris@6 26
Chris@9 27 built="/tmp/built.$$.txt"
Chris@9 28 testfailed="/tmp/testfailed.$$.txt"
Chris@9 29 notbuilt="/tmp/notbuilt.$$.txt"
Chris@9 30 trap 'rm -f "$built" "$testfailed" "$notbuilt"' 0
Chris@9 31 touch "$built" "$testfailed" "$notbuilt"
Chris@9 32
Chris@4 33 configure() {
Chris@4 34 dir="$1"
Chris@4 35 if [ -f "$dir/configure" ] ; then
Chris@6 36 ( cd "$dir" ; ./configure ) 2>&1 | tee "$reportdir/$dir.configure.txt"
Chris@4 37 fi
Chris@4 38 }
Chris@4 39
Chris@1 40 find_makefile() {
Chris@1 41 dir="$1"
Chris@9 42 for f in \
Chris@13 43 build/$platform/Makefile.$platform$bits \
Chris@13 44 build/$platform/Makefile.$platform \
Chris@13 45 build/$platform/Makefile \
Chris@13 46 build/Makefile.$platform$bits \
Chris@13 47 build/Makefile.$platform \
Chris@13 48 Makefile.$platform$bits \
Chris@9 49 Makefile.$platform \
Chris@13 50 Makefile ; do
Chris@1 51 if [ -f "$dir/$f" ]; then
Chris@1 52 echo $f
Chris@1 53 break
Chris@1 54 fi
Chris@1 55 done
Chris@1 56 }
Chris@1 57
Chris@13 58 configure_maybe() {
Chris@13 59 dir="$1"
Chris@13 60 mfile=$(find_makefile "$dir")
Chris@13 61 if [ -z "$mfile" ]; then
Chris@13 62 configure "$dir"
Chris@13 63 fi
Chris@13 64 }
Chris@13 65
Chris@4 66 build() {
Chris@4 67 dir="$1"
Chris@1 68 if configure_maybe "$dir"; then
Chris@1 69 mfile=$(find_makefile "$dir")
Chris@1 70 if [ -n "$mfile" ]; then
Chris@13 71 make -C "$dir" -f "$mfile" TOOLPREFIX="$toolprefix" 2>&1 | tee "$reportdir/$dir.build.txt"
Chris@9 72 return ${PIPESTATUS[0]}
Chris@1 73 else
Chris@1 74 echo "Failed to find a Makefile in $dir"
Chris@4 75 return 1
Chris@1 76 fi
Chris@1 77 fi
Chris@4 78 }
Chris@4 79
Chris@4 80 rebuild() {
Chris@4 81 dir="$1"
Chris@13 82 if configure_maybe "$dir"; then
Chris@4 83 mfile=$(find_makefile "$dir")
Chris@4 84 if [ -n "$mfile" ]; then
Chris@4 85 make -C "$dir" -f "$mfile" clean
Chris@13 86 make -C "$dir" -f "$mfile" TOOLPREFIX="$toolprefix" 2>&1 | tee "$reportdir/$dir.build.txt"
Chris@9 87 return ${PIPESTATUS[0]}
Chris@4 88 else
Chris@4 89 echo "Failed to find a Makefile in $dir"
Chris@4 90 return 1
Chris@4 91 fi
Chris@4 92 fi
Chris@4 93 }
Chris@4 94
Chris@5 95 run_tester() {
Chris@7 96 ##!!! todo: timeout if the plugin takes too long and report as failure?
Chris@5 97 dir="$1"
Chris@6 98 ids=$(VAMP_PATH="$dir" vamp-plugin-sdk/host/vamp-simple-host --list-ids | sed 's/^vamp://')
Chris@6 99 if [ -z "$ids" ]; then
Chris@6 100 echo
Chris@6 101 echo "No plugins reported to test in $dir"
Chris@6 102 return 1
Chris@5 103 else
Chris@6 104 for id in $ids; do
Chris@6 105 extra=""
Chris@10 106 if grep -q "^$id\$" METADATA/nondeterministic.txt; then
Chris@6 107 extra="-n"
Chris@6 108 fi
Chris@9 109 if ( VAMP_PATH="$dir" vamp-plugin-tester/vamp-plugin-tester "$extra" "$id" 2>&1 | tee "$reportdir/$dir.test.txt" ; exit ${PIPESTATUS[0]} ) ; then
Chris@6 110 echo "OK"
Chris@6 111 else
Chris@6 112 echo
Chris@6 113 echo "Tester failed for id $id: running again with valgrind and verbose for a report..."
Chris@6 114 echo "$dir" >> "$testfailed"
Chris@6 115 VAMP_PATH="$dir" valgrind vamp-plugin-tester/vamp-plugin-tester -v "$extra" "$id" 2>&1 | tee -a "$reportdir/$dir.test.txt"
Chris@9 116 return 1
Chris@6 117 fi
Chris@6 118 done
Chris@5 119 fi
Chris@5 120 }
Chris@5 121
Chris@9 122 public_symbols() {
Chris@9 123 lib="$1"
Chris@9 124 nm -g --defined-only "$lib" | awk '{ print $3; }'
Chris@9 125 }
Chris@9 126
Chris@9 127 run_environmental_tests() {
Chris@9 128 dir="$1"
Chris@9 129 for lib in $dir/*.so; do
Chris@9 130 if public_symbols "$lib" | grep -q vampGetPluginDescriptor; then
Chris@9 131 others=`public_symbols "$lib" | grep -v vampGetPluginDescriptor`
Chris@9 132 if [ -n "$others" ]; then
Chris@9 133 count=`echo "$others" | wc -l`
Chris@9 134 echo "WARNING: $count extra symbols exported by plugin library"
Chris@9 135 #!!! what to do about it?
Chris@9 136 else
Chris@9 137 echo "GOOD: library $lib only exports vampGetPluginDescriptor"
Chris@9 138 fi
Chris@9 139 else
Chris@9 140 echo "NOTE: found library $lib that is not a Vamp plugin library"
Chris@9 141 fi
Chris@9 142 done
Chris@9 143 }
Chris@4 144
Chris@13 145 if ! rebuild "vamp-plugin-sdk"; then
Chris@5 146 echo "Failed to build Vamp plugin SDK!"
Chris@5 147 exit 1
Chris@5 148 fi
Chris@5 149
Chris@13 150 if ! rebuild "vamp-plugin-tester"; then
Chris@5 151 echo "Failed to build Vamp plugin tester!"
Chris@5 152 exit 1
Chris@5 153 fi
Chris@5 154
Chris@11 155 for dir in $plugindirs ; do
Chris@4 156 echo
Chris@4 157 echo "Processing: $dir"
Chris@6 158 if rebuild "$dir"; then
Chris@6 159 echo "$dir" >> "$built"
Chris@6 160 run_tester "$dir"
Chris@9 161 run_environmental_tests "$dir"
Chris@4 162 else
Chris@6 163 echo "$dir" >> "$notbuilt"
Chris@4 164 fi
Chris@1 165 done
Chris@1 166
Chris@10 167 cat /dev/null > "$reportdir/$dir.summary.txt"
Chris@6 168
Chris@4 169 echo
Chris@5 170 echo "** Successfully built and tested:"
Chris@6 171 cat "$built" | while read d; do
Chris@6 172 if ! grep -q "^$d\$" "$testfailed"; then
Chris@6 173 echo "$d"
Chris@6 174 echo "Success" >> "$reportdir/$d.summary.txt"
Chris@6 175 fi
Chris@6 176 done | sort
Chris@4 177
Chris@4 178 echo
Chris@5 179 echo "** Built, but failed tests:"
Chris@6 180 cat "$testfailed" | sort | uniq | while read d; do
Chris@6 181 echo "$d"
Chris@6 182 echo "Built successfully, but failed tests" >> "$reportdir/$d.summary.txt"
Chris@6 183 done
Chris@5 184
Chris@5 185 echo
Chris@4 186 echo "** Failed to build:"
Chris@6 187 cat "$notbuilt" | sort | while read d; do
Chris@6 188 echo "$d"
Chris@6 189 echo "Failed to build" >> "$reportdir/$d.summary.txt"
Chris@6 190 done
Chris@4 191
Chris@4 192 echo