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