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