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
|