annotate SCRIPTS/process.sh @ 19:b7f35acc8561

Further fixes for mingw32 cross-compile
author Chris Cannam
date Tue, 05 Aug 2014 11:12:50 +0100
parents 663ca0da4350
children ee6b7d71155b
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@19 12 mydir=$(dirname "$0")
Chris@19 13 case "$mydir" in /*);; *) mydir=$(pwd)/"$mydir";; esac
Chris@19 14
Chris@13 15 #platform=linux
Chris@13 16 #bits=64
Chris@19 17 #toolprefix=""
Chris@19 18 #pluginext=.so
Chris@19 19 #hostwrapper=""
Chris@19 20 #hostext=""
Chris@14 21
Chris@13 22 platform=mingw
Chris@13 23 bits=32
Chris@13 24 toolprefix=i686-w64-mingw32-
Chris@19 25 pluginext=.dll
Chris@19 26 hostwrapper=wine
Chris@19 27 hostext=.exe
Chris@15 28
Chris@19 29 depincdir="$mydir"/../DEPENDENCIES/$platform$bits/include
Chris@19 30 deplibdir="$mydir"/../DEPENDENCIES/$platform$bits/lib
Chris@19 31
Chris@19 32 depincdir_generic="$mydir"/../DEPENDENCIES/generic/include
Chris@1 33
Chris@11 34 plugindirs="$@"
Chris@11 35 if [ -z "$plugindirs" ]; then
Chris@11 36 plugindirs=$(cat .hgsub | grep -v vamp-plugin-sdk | grep -v vamp-plugin-tester | awk '{ print $1; }')
Chris@11 37 fi
Chris@11 38
Chris@6 39 reportdir="REPORTS/$platform$bits"
Chris@6 40 mkdir -p "$reportdir" || exit 1
Chris@6 41
Chris@9 42 built="/tmp/built.$$.txt"
Chris@9 43 testfailed="/tmp/testfailed.$$.txt"
Chris@19 44 envcheckfailed="/tmp/envcheckfailed.$$.txt"
Chris@9 45 notbuilt="/tmp/notbuilt.$$.txt"
Chris@19 46 trap 'rm -f "$built" "$envcheckfailed" "$testfailed" "$notbuilt"' 0
Chris@19 47 touch "$built" "$envcheckfailed" "$testfailed" "$notbuilt"
Chris@9 48
Chris@4 49 configure() {
Chris@4 50 dir="$1"
Chris@4 51 if [ -f "$dir/configure" ] ; then
Chris@6 52 ( cd "$dir" ; ./configure ) 2>&1 | tee "$reportdir/$dir.configure.txt"
Chris@4 53 fi
Chris@4 54 }
Chris@4 55
Chris@1 56 find_makefile() {
Chris@1 57 dir="$1"
Chris@9 58 for f in \
Chris@19 59 build/$platform$bits/Makefile.$platform$bits \
Chris@13 60 build/$platform/Makefile.$platform$bits \
Chris@19 61 build/$platform$bits/Makefile.$platform \
Chris@19 62 build/$platform$bits/Makefile \
Chris@19 63 build/Makefile.$platform$bits \
Chris@19 64 Makefile.$platform$bits \
Chris@13 65 build/$platform/Makefile.$platform \
Chris@13 66 build/$platform/Makefile \
Chris@13 67 build/Makefile.$platform \
Chris@9 68 Makefile.$platform \
Chris@13 69 Makefile ; do
Chris@1 70 if [ -f "$dir/$f" ]; then
Chris@1 71 echo $f
Chris@1 72 break
Chris@1 73 fi
Chris@1 74 done
Chris@1 75 }
Chris@1 76
Chris@13 77 configure_maybe() {
Chris@13 78 dir="$1"
Chris@13 79 mfile=$(find_makefile "$dir")
Chris@13 80 if [ -z "$mfile" ]; then
Chris@13 81 configure "$dir"
Chris@13 82 fi
Chris@13 83 }
Chris@13 84
Chris@19 85 target_for() {
Chris@19 86 dir="$1"
Chris@19 87 if grep -q "^$dir: " METADATA/maketarget.txt ; then
Chris@19 88 grep "^$dir: " METADATA/maketarget.txt | head -1 | sed 's/^[^:]*: //'
Chris@19 89 fi
Chris@19 90 }
Chris@19 91
Chris@4 92 build() {
Chris@4 93 dir="$1"
Chris@1 94 if configure_maybe "$dir"; then
Chris@1 95 mfile=$(find_makefile "$dir")
Chris@1 96 if [ -n "$mfile" ]; then
Chris@19 97 target=$(target_for "$dir")
Chris@19 98 TOOLPREFIX="$toolprefix" \
Chris@19 99 CXXFLAGS="-I${depincdir} -I${depincdir_generic} -I../vamp-plugin-sdk" LDFLAGS="-L${deplibdir} -L../vamp-plugin-sdk" \
Chris@19 100 make -C "$dir" -f "$mfile" $target 2>&1 | \
Chris@19 101 tee "$reportdir/$dir.build.txt"
Chris@9 102 return ${PIPESTATUS[0]}
Chris@1 103 else
Chris@1 104 echo "Failed to find a Makefile in $dir"
Chris@4 105 return 1
Chris@1 106 fi
Chris@1 107 fi
Chris@4 108 }
Chris@4 109
Chris@4 110 rebuild() {
Chris@4 111 dir="$1"
Chris@13 112 if configure_maybe "$dir"; then
Chris@4 113 mfile=$(find_makefile "$dir")
Chris@4 114 if [ -n "$mfile" ]; then
Chris@4 115 make -C "$dir" -f "$mfile" clean
Chris@19 116 build "$dir"
Chris@4 117 else
Chris@4 118 echo "Failed to find a Makefile in $dir"
Chris@4 119 return 1
Chris@4 120 fi
Chris@4 121 fi
Chris@4 122 }
Chris@4 123
Chris@19 124 have_plugin() {
Chris@19 125 dir="$1"
Chris@19 126 for x in "$dir/"*"$pluginext"; do
Chris@19 127 if [ -f "$x" ]; then
Chris@19 128 return 0
Chris@19 129 fi
Chris@19 130 done
Chris@19 131 return 1
Chris@19 132 }
Chris@19 133
Chris@19 134 is_nondeterministic() {
Chris@19 135 plugin_id="$1"
Chris@19 136 grep -q "^$id\$" METADATA/nondeterministic.txt
Chris@19 137 }
Chris@19 138
Chris@5 139 run_tester() {
Chris@7 140 ##!!! todo: timeout if the plugin takes too long and report as failure?
Chris@5 141 dir="$1"
Chris@19 142 ids=$(VAMP_PATH="$dir" $hostwrapper vamp-plugin-sdk/host/vamp-simple-host$hostext --list-ids | sed 's/^vamp://' | sed 's/\r//g' )
Chris@6 143 if [ -z "$ids" ]; then
Chris@6 144 echo
Chris@6 145 echo "No plugins reported to test in $dir"
Chris@6 146 return 1
Chris@5 147 else
Chris@6 148 for id in $ids; do
Chris@6 149 extra=""
Chris@19 150 if is_nondeterministic "$id"; then
Chris@6 151 extra="-n"
Chris@6 152 fi
Chris@19 153 echo "Running command: VAMP_PATH=\"$dir\" $hostwrapper vamp-plugin-tester/vamp-plugin-tester$hostext \"$extra\" \"$id\""
Chris@19 154 if ( VAMP_PATH="$dir" $hostwrapper vamp-plugin-tester/vamp-plugin-tester$hostext "$extra" "$id" 2>&1 | tee "$reportdir/$dir.test.txt" ; exit ${PIPESTATUS[0]} ) ; then
Chris@6 155 echo "OK"
Chris@6 156 else
Chris@6 157 echo
Chris@6 158 echo "Tester failed for id $id: running again with valgrind and verbose for a report..."
Chris@6 159 echo "$dir" >> "$testfailed"
Chris@19 160 VAMP_PATH="$dir" valgrind $hostwrapper vamp-plugin-tester/vamp-plugin-tester$hostext -v "$extra" "$id" 2>&1 | tee -a "$reportdir/$dir.test.txt"
Chris@9 161 return 1
Chris@6 162 fi
Chris@6 163 done
Chris@5 164 fi
Chris@5 165 }
Chris@5 166
Chris@9 167 public_symbols() {
Chris@9 168 lib="$1"
Chris@19 169 "$toolprefix"nm -g --defined-only "$lib" | awk '{ print $3; }'
Chris@9 170 }
Chris@9 171
Chris@9 172 run_environmental_tests() {
Chris@9 173 dir="$1"
Chris@19 174 good=yes
Chris@19 175 for lib in $dir/*$pluginext; do
Chris@19 176 if [ ! -f "$lib" ]; then
Chris@19 177 echo "NOTE: no library found in $dir?"
Chris@19 178 good=no
Chris@19 179 else
Chris@19 180 echo
Chris@19 181 echo "Testing for exported symbols in $lib..."
Chris@19 182 if public_symbols "$lib" | grep -q vampGetPluginDescriptor; then
Chris@19 183 others=`public_symbols "$lib" | grep -v vampGetPluginDescriptor`
Chris@19 184 if [ -n "$others" ]; then
Chris@19 185 count=`echo "$others" | wc -l`
Chris@19 186 echo "WARNING: $count extra symbols exported by plugin library"
Chris@19 187 good=no
Chris@19 188 else
Chris@19 189 echo "GOOD: library $lib only exports vampGetPluginDescriptor"
Chris@19 190 fi
Chris@9 191 else
Chris@19 192 echo "NOTE: found library $lib that is not a Vamp plugin library"
Chris@9 193 fi
Chris@9 194 fi
Chris@9 195 done
Chris@19 196 if [ "$good" != "yes" ]; then
Chris@19 197 echo "$dir" >> "$envcheckfailed"
Chris@19 198 fi
Chris@9 199 }
Chris@4 200
Chris@15 201 if ! build "vamp-plugin-sdk"; then
Chris@5 202 echo "Failed to build Vamp plugin SDK!"
Chris@5 203 exit 1
Chris@5 204 fi
Chris@5 205
Chris@19 206 if ! build "vamp-plugin-tester"; then
Chris@5 207 echo "Failed to build Vamp plugin tester!"
Chris@5 208 exit 1
Chris@5 209 fi
Chris@5 210
Chris@11 211 for dir in $plugindirs ; do
Chris@4 212 echo
Chris@4 213 echo "Processing: $dir"
Chris@19 214 if build "$dir"; then
Chris@19 215 if have_plugin "$dir" ; then
Chris@19 216 echo "$dir" >> "$built"
Chris@19 217 run_tester "$dir"
Chris@19 218 run_environmental_tests "$dir"
Chris@19 219 else
Chris@19 220 echo "Build apparently succeeded, but no resulting plugin(s) found" | tee -a "$reportdir/$dir.build.txt"
Chris@19 221 echo "$dir" >> "$notbuilt"
Chris@19 222 fi
Chris@4 223 else
Chris@6 224 echo "$dir" >> "$notbuilt"
Chris@4 225 fi
Chris@1 226 done
Chris@1 227
Chris@10 228 cat /dev/null > "$reportdir/$dir.summary.txt"
Chris@6 229
Chris@4 230 echo
Chris@19 231 echo "** Successfully built, tested, and checked:"
Chris@6 232 cat "$built" | while read d; do
Chris@6 233 if ! grep -q "^$d\$" "$testfailed"; then
Chris@6 234 echo "$d"
Chris@6 235 echo "Success" >> "$reportdir/$d.summary.txt"
Chris@6 236 fi
Chris@6 237 done | sort
Chris@4 238
Chris@4 239 echo
Chris@19 240 echo "** Failed tests:"
Chris@6 241 cat "$testfailed" | sort | uniq | while read d; do
Chris@6 242 echo "$d"
Chris@6 243 echo "Built successfully, but failed tests" >> "$reportdir/$d.summary.txt"
Chris@6 244 done
Chris@5 245
Chris@5 246 echo
Chris@19 247 echo "** Failed environmental checks:"
Chris@19 248 cat "$envcheckfailed" | sort | uniq | while read d; do
Chris@19 249 echo "$d"
Chris@19 250 echo "Built successfully, but failed environmental checks" >> "$reportdir/$d.summary.txt"
Chris@19 251 done
Chris@19 252
Chris@19 253 echo
Chris@4 254 echo "** Failed to build:"
Chris@6 255 cat "$notbuilt" | sort | while read d; do
Chris@6 256 echo "$d"
Chris@6 257 echo "Failed to build" >> "$reportdir/$d.summary.txt"
Chris@6 258 done
Chris@4 259
Chris@4 260 echo