annotate SCRIPTS/process.sh @ 80:dc4da16ace47

Cope with directories that (like VamPy) have actual plugins in a subdir. Also update subrepos.
author Chris Cannam
date Mon, 17 Nov 2014 13:00:08 +0000
parents ab0dbbb58119
children 5936362b8a40
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@75 15 . "$mydir"/include.sh
Chris@75 16
Chris@57 17 have_all=true
Chris@66 18 for program in make perl git svn hg zip tar ; do
Chris@57 19 if ! $program --version >/dev/null 2>&1; then
Chris@57 20 if ! $program -v 2>&1 | grep -q version; then
Chris@57 21 echo " ** $program program not found"
Chris@57 22 have_all=false
Chris@57 23 fi
Chris@57 24 fi
Chris@57 25 done
Chris@57 26 if [ "$have_all" != "true" ]; then
Chris@57 27 echo "Not all dependencies found, exiting"
Chris@57 28 exit 1
Chris@57 29 fi
Chris@57 30
Chris@22 31 do_rebuild=""
Chris@14 32
Chris@22 33 usage() {
Chris@22 34 echo
Chris@22 35 echo "Usage: $0 <platform> [-c] [<dir> ...]"
Chris@22 36 echo
Chris@31 37 echo " <platform> one of native, linux32, linux64, mingw32, mingw64, osx32, osx64"
Chris@22 38 echo " -c build from clean"
Chris@22 39 echo " <dir> directory to build (default is all of them)"
Chris@22 40 echo
Chris@22 41 echo "Platform usually should match the platform you are running this"
Chris@22 42 echo "script on, unless you have a cross-compile toolset installed and"
Chris@31 43 echo "this script knows how to run it. The special platform 'native'"
Chris@31 44 echo "tries to guess the currently running platform."
Chris@22 45 echo
Chris@22 46 exit 2
Chris@22 47 }
Chris@21 48
Chris@31 49 platform_arg="$1"
Chris@31 50
Chris@31 51 if [ "$platform_arg" = "native" ]; then
Chris@31 52 case `uname -a` in
Chris@31 53 Linux*x86_64*) platform_arg=linux64;;
Chris@31 54 Linux*) platform_arg=linux32;;
Chris@31 55 Darwin*) platform_arg=osx64;;
Chris@31 56 CYG*) platform_arg=mingw32;;
Chris@31 57 MINGW*) platform_arg=mingw32;;
Chris@31 58 esac
Chris@31 59 fi
Chris@31 60
Chris@78 61 platform=
Chris@78 62 bits=32
Chris@78 63 altbits=
Chris@78 64 toolprefix=
Chris@78 65 pluginext=
Chris@78 66 hostwrapper=
Chris@78 67 hostext=
Chris@78 68 valgrind=
Chris@78 69 archflags=
Chris@78 70 identpattern=
Chris@78 71
Chris@31 72 case "$platform_arg" in
Chris@22 73 linux32)
Chris@22 74 platform=linux
Chris@22 75 pluginext=.so
Chris@38 76 valgrind=valgrind
Chris@42 77 identpattern='ELF 32'
Chris@22 78 ;;
Chris@22 79 linux64)
Chris@22 80 platform=linux
Chris@22 81 bits=64
Chris@22 82 pluginext=.so
Chris@38 83 valgrind=valgrind
Chris@42 84 identpattern='ELF 64'
Chris@22 85 ;;
Chris@22 86 mingw32)
Chris@22 87 platform=mingw
Chris@22 88 toolprefix=i686-w64-mingw32-
Chris@22 89 pluginext=.dll
Chris@22 90 hostwrapper=wine
Chris@22 91 hostext=.exe
Chris@36 92 identpattern='PE32.*386.*Windows'
Chris@22 93 ;;
Chris@22 94 mingw64)
Chris@22 95 platform=mingw
Chris@22 96 bits=64
Chris@78 97 altbits=32 # We can usually use a mingw32 Makefile if toolprefix is OK
Chris@22 98 toolprefix=x86_64-w64-mingw32-
Chris@22 99 pluginext=.dll
Chris@22 100 hostwrapper=wine
Chris@22 101 hostext=.exe
Chris@78 102 identpattern='PE32.*x86-64.*Windows'
Chris@22 103 ;;
Chris@22 104 osx32)
Chris@22 105 platform=osx
Chris@22 106 pluginext=.dylib
Chris@22 107 archflags="-arch i386"
Chris@40 108 identpattern='Mach-O .*i386'
Chris@22 109 ;;
Chris@22 110 osx64)
Chris@22 111 platform=osx
Chris@22 112 bits=64
Chris@22 113 pluginext=.dylib
Chris@26 114 # This is a difficult choice for various reasons... have to ponder
Chris@26 115 archflags="-mmacosx-version-min=10.6 -arch x86_64 -arch i386"
Chris@40 116 identpattern='Mach-O 64-bit .*x86_64'
Chris@22 117 ;;
Chris@22 118 esac;
Chris@22 119
Chris@22 120 shift
Chris@22 121
Chris@22 122 if [ -z "$platform" ]; then
Chris@22 123 usage
Chris@22 124 else
Chris@22 125 echo "(Platform is $platform, $bits bits)"
Chris@22 126 fi
Chris@22 127
Chris@78 128 if [ -z "$pluginext" ]; then
Chris@78 129 echo "Internal error: pluginext not set for platform $platform" 1>&2
Chris@78 130 exit 2
Chris@78 131 fi
Chris@78 132
Chris@78 133 if [ -z "$identpattern" ]; then
Chris@78 134 echo "Internal error: identpattern not set for platform $platform" 1>&2
Chris@78 135 exit 2
Chris@78 136 fi
Chris@78 137
Chris@22 138 if [ t"$1" = t"-c" ]; then
Chris@22 139 echo "(Building from clean)"
Chris@22 140 do_rebuild=yes
Chris@22 141 shift
Chris@22 142 fi
Chris@15 143
Chris@19 144 depincdir="$mydir"/../DEPENDENCIES/$platform$bits/include
Chris@19 145 deplibdir="$mydir"/../DEPENDENCIES/$platform$bits/lib
Chris@19 146
Chris@19 147 depincdir_generic="$mydir"/../DEPENDENCIES/generic/include
Chris@1 148
Chris@11 149 plugindirs="$@"
Chris@11 150 if [ -z "$plugindirs" ]; then
Chris@11 151 plugindirs=$(cat .hgsub | grep -v vamp-plugin-sdk | grep -v vamp-plugin-tester | awk '{ print $1; }')
Chris@61 152 else
Chris@61 153 for dir in $plugindirs ; do
Chris@61 154 if [ ! -d "$dir" ]; then
Chris@61 155 echo "ERROR: Directory $dir not found"
Chris@61 156 usage
Chris@61 157 fi
Chris@61 158 done
Chris@11 159 fi
Chris@11 160
Chris@6 161 reportdir="REPORTS/$platform$bits"
Chris@49 162 packagedir="PACKAGES/$platform$bits"
Chris@49 163
Chris@49 164 mkdir -p "$reportdir" "$packagedir" || exit 1
Chris@6 165
Chris@9 166 built="/tmp/built.$$.txt"
Chris@9 167 testfailed="/tmp/testfailed.$$.txt"
Chris@19 168 envcheckfailed="/tmp/envcheckfailed.$$.txt"
Chris@9 169 notbuilt="/tmp/notbuilt.$$.txt"
Chris@49 170
Chris@19 171 trap 'rm -f "$built" "$envcheckfailed" "$testfailed" "$notbuilt"' 0
Chris@19 172 touch "$built" "$envcheckfailed" "$testfailed" "$notbuilt"
Chris@9 173
Chris@4 174 configure() {
Chris@4 175 dir="$1"
Chris@4 176 if [ -f "$dir/configure" ] ; then
Chris@6 177 ( cd "$dir" ; ./configure ) 2>&1 | tee "$reportdir/$dir.configure.txt"
Chris@4 178 fi
Chris@4 179 }
Chris@4 180
Chris@1 181 find_makefile() {
Chris@1 182 dir="$1"
Chris@9 183 for f in \
Chris@19 184 build/$platform$bits/Makefile.$platform$bits \
Chris@13 185 build/$platform/Makefile.$platform$bits \
Chris@19 186 build/$platform$bits/Makefile.$platform \
Chris@19 187 build/$platform$bits/Makefile \
Chris@19 188 build/Makefile.$platform$bits \
Chris@19 189 Makefile.$platform$bits \
Chris@13 190 build/$platform/Makefile.$platform \
Chris@13 191 build/$platform/Makefile \
Chris@13 192 build/Makefile.$platform \
Chris@9 193 Makefile.$platform \
Chris@78 194 build/$platform$altbits/Makefile.$platform$altbits \
Chris@78 195 build/$platform/Makefile.$platform$altbits \
Chris@78 196 build/$platform$altbits/Makefile.$platform \
Chris@78 197 build/$platform$altbits/Makefile \
Chris@78 198 build/Makefile.$platform$altbits \
Chris@78 199 Makefile.$platform$altbits \
Chris@13 200 Makefile ; do
Chris@1 201 if [ -f "$dir/$f" ]; then
Chris@1 202 echo $f
Chris@1 203 break
Chris@1 204 fi
Chris@1 205 done
Chris@1 206 }
Chris@1 207
Chris@13 208 configure_maybe() {
Chris@13 209 dir="$1"
Chris@43 210 if [ t"$do_rebuild" = t"yes" ]; then
Chris@43 211 configure "$dir"
Chris@43 212 else
Chris@43 213 mfile=$(find_makefile "$dir")
Chris@43 214 if [ -z "$mfile" ]; then
Chris@43 215 configure "$dir"
Chris@43 216 fi
Chris@13 217 fi
Chris@13 218 }
Chris@13 219
Chris@19 220 target_for() {
Chris@19 221 dir="$1"
Chris@19 222 if grep -q "^$dir: " METADATA/maketarget.txt ; then
Chris@19 223 grep "^$dir: " METADATA/maketarget.txt | head -1 | sed 's/^[^:]*: //'
Chris@19 224 fi
Chris@19 225 }
Chris@19 226
Chris@80 227 plugin_dir_for() {
Chris@80 228 dir="$1"
Chris@80 229 if grep -q "^$dir: " METADATA/plugindir.txt ; then
Chris@80 230 echo "$dir"/$(grep "^$dir: " METADATA/plugindir.txt | head -1 | sed 's/^[^:]*: //')
Chris@80 231 fi
Chris@80 232 }
Chris@80 233
Chris@44 234 logfile_for() {
Chris@44 235 activity="$1"
Chris@44 236 dir="$2"
Chris@44 237 echo "$reportdir/$dir.$activity.txt"
Chris@44 238 }
Chris@44 239
Chris@4 240 build() {
Chris@4 241 dir="$1"
Chris@44 242 log=$(logfile_for build "$dir")
Chris@1 243 if configure_maybe "$dir"; then
Chris@1 244 mfile=$(find_makefile "$dir")
Chris@1 245 if [ -n "$mfile" ]; then
Chris@19 246 target=$(target_for "$dir")
Chris@19 247 TOOLPREFIX="$toolprefix" \
Chris@21 248 CXXFLAGS="-I${depincdir} -I${depincdir_generic} -I../vamp-plugin-sdk" \
Chris@21 249 LDFLAGS="-L${deplibdir} -L../vamp-plugin-sdk" \
Chris@21 250 ARCHFLAGS="$archflags" \
Chris@19 251 make -C "$dir" -f "$mfile" $target 2>&1 | \
Chris@44 252 tee "$log"
Chris@9 253 return ${PIPESTATUS[0]}
Chris@1 254 else
Chris@44 255 echo "Failed to find a Makefile in $dir!" | tee "$log"
Chris@4 256 return 1
Chris@1 257 fi
Chris@1 258 fi
Chris@4 259 }
Chris@4 260
Chris@4 261 rebuild() {
Chris@4 262 dir="$1"
Chris@44 263 log=$(logfile_for build "$dir")
Chris@13 264 if configure_maybe "$dir"; then
Chris@4 265 mfile=$(find_makefile "$dir")
Chris@4 266 if [ -n "$mfile" ]; then
Chris@77 267 if make -C "$dir" -f "$mfile" distclean; then
Chris@77 268 build "$dir"
Chris@77 269 elif make -C "$dir" -f "$mfile" clean; then
Chris@32 270 build "$dir"
Chris@32 271 else
Chris@44 272 echo "Failed to 'make clean' in $dir!" | tee "$log"
Chris@32 273 return 1
Chris@32 274 fi
Chris@4 275 else
Chris@44 276 echo "Failed to find a Makefile in $dir!" | tee "$log"
Chris@4 277 return 1
Chris@4 278 fi
Chris@4 279 fi
Chris@4 280 }
Chris@4 281
Chris@22 282 build_or_rebuild() {
Chris@22 283 dir="$1"
Chris@22 284 if [ -n "$do_rebuild" ]; then
Chris@22 285 rebuild "$dir"
Chris@22 286 else
Chris@22 287 build "$dir"
Chris@22 288 fi
Chris@22 289 }
Chris@22 290
Chris@19 291 have_plugin() {
Chris@19 292 dir="$1"
Chris@44 293 log=$(logfile_for build "$dir")
Chris@19 294 for x in "$dir/"*"$pluginext"; do
Chris@19 295 if [ -f "$x" ]; then
Chris@36 296 if file "$x" | grep -q "$identpattern" ; then
Chris@36 297 return 0
Chris@36 298 else
Chris@44 299 echo "Plugin $x exists, but fails to match file type for correct platform (file type is: `file $x`, expected pattern is: $identpattern)" | tee "$log"
Chris@36 300 return 1
Chris@36 301 fi
Chris@19 302 fi
Chris@19 303 done
Chris@19 304 return 1
Chris@19 305 }
Chris@19 306
Chris@19 307 is_nondeterministic() {
Chris@19 308 plugin_id="$1"
Chris@19 309 grep -q "^$id\$" METADATA/nondeterministic.txt
Chris@19 310 }
Chris@19 311
Chris@44 312 plugin_ids_in() {
Chris@5 313 dir="$1"
Chris@80 314 pdir=$(plugin_dir_for "$dir")
Chris@40 315 # can't use sed to remove \r from DOS line endings -- BSD and GNU
Chris@44 316 # vary in how they interpret \r escape -- so we use perl for that...
Chris@80 317 VAMP_PATH="$dir:$pdir" $hostwrapper \
Chris@44 318 vamp-plugin-sdk/host/vamp-simple-host$hostext --list-ids | \
Chris@44 319 grep '^vamp:' | \
Chris@44 320 sed 's/^vamp://' | \
Chris@44 321 perl -p -e 's/\r//g'
Chris@44 322 }
Chris@44 323
Chris@44 324 run_tester() {
Chris@44 325 ##!!! todo: timeout if the plugin takes too long and report as failure
Chris@44 326 dir="$1"
Chris@44 327 log=$(logfile_for test "$dir")
Chris@44 328 ids=$(plugin_ids_in "$dir")
Chris@80 329 pdir=$(plugin_dir_for "$dir")
Chris@44 330 cat /dev/null > "$log"
Chris@6 331 if [ -z "$ids" ]; then
Chris@6 332 echo
Chris@44 333 echo "No plugins reported to test in $dir" | tee -a "$log"
Chris@44 334 echo "$dir" >> "$testfailed"
Chris@44 335 return 1
Chris@44 336 fi
Chris@44 337 good=yes
Chris@44 338 for id in $ids; do
Chris@44 339 extra=""
Chris@44 340 if is_nondeterministic "$id"; then
Chris@44 341 extra="-n"
Chris@44 342 fi
Chris@80 343 echo "Running command: VAMP_PATH=\"$dir:$pdir\" $hostwrapper vamp-plugin-tester/vamp-plugin-tester$hostext \"$extra\" \"$id\"" | tee -a "$log"
Chris@80 344 if ( VAMP_PATH="$dir:$pdir" $hostwrapper vamp-plugin-tester/vamp-plugin-tester$hostext "$extra" "$id" 2>&1 | tee -a "$log" ; exit ${PIPESTATUS[0]} ) ; then
Chris@62 345 echo "OK" | tee -a "$log"
Chris@44 346 else
Chris@62 347 echo | tee -a "$log"
Chris@44 348 echo "Tester failed for id $id: running again with valgrind (if available) and verbose for a report..." | tee -a "$log"
Chris@80 349 VAMP_PATH="$dir:$pdir" $valgrind $hostwrapper vamp-plugin-tester/vamp-plugin-tester$hostext -v "$extra" "$id" 2>&1 | tee -a "$log"
Chris@44 350 good=no
Chris@44 351 fi
Chris@44 352 done
Chris@44 353 if [ "$good" != "yes" ]; then
Chris@23 354 echo "$dir" >> "$testfailed"
Chris@6 355 return 1
Chris@5 356 else
Chris@44 357 return 0
Chris@5 358 fi
Chris@5 359 }
Chris@5 360
Chris@44 361 public_symbols_in() {
Chris@9 362 lib="$1"
Chris@23 363 # nm -g prints global symbols in both OS/X and GNU tools, but
Chris@23 364 # printing only global *defined* symbols is harder. In GNU it is
Chris@23 365 # nm -g --defined-only; the OS/X docs suggest nm -gu should work,
Chris@23 366 # but it doesn't. What I think will work with both is simply
Chris@23 367 # grepping out the undefineds:
Chris@23 368 "$toolprefix"nm -g "$lib" | grep -v ' U ' | awk '{ print $3; }'
Chris@9 369 }
Chris@9 370
Chris@44 371 env_test_exports() {
Chris@44 372 dir="$1"
Chris@44 373 log=$(logfile_for envtest "$dir")
Chris@44 374 good=yes
Chris@44 375 for lib in "$dir"/*"$pluginext"; do
Chris@44 376 if [ ! -f "$lib" ]; then
Chris@44 377 # This should only happen if the glob was not expanded at all
Chris@44 378 echo "NOTE: no library found in $dir?" | tee -a "$log"
Chris@44 379 good=no
Chris@44 380 break
Chris@44 381 fi
Chris@44 382 echo
Chris@44 383 echo "Testing for exported symbols in $lib..."
Chris@44 384 if public_symbols_in "$lib" | grep -q vampGetPluginDescriptor; then
Chris@44 385 others=`public_symbols_in "$lib" | grep -v vampGetPluginDescriptor`
Chris@44 386 if [ -n "$others" ]; then
Chris@44 387 count=`echo "$others" | wc -l`
Chris@44 388 echo "ERROR: library $lib exports $count extra symbols in addition to vampGetPluginDescriptor" | tee -a "$log"
Chris@44 389 good=no
Chris@44 390 else
Chris@44 391 echo "GOOD: library $lib only exports vampGetPluginDescriptor" | tee -a "$log"
Chris@44 392 fi
Chris@44 393 else
Chris@44 394 echo "NOTE: found library $lib that is not a Vamp plugin library" | tee -a "$log"
Chris@44 395 fi
Chris@44 396 done
Chris@44 397 [ "$good" = "yes" ]
Chris@44 398 }
Chris@44 399
Chris@44 400 env_test_stdout() {
Chris@44 401 dir="$1"
Chris@44 402 log=$(logfile_for envtest "$dir")
Chris@80 403 pdir=$(plugin_dir_for "$dir")
Chris@44 404 good=yes
Chris@80 405 ids=$(VAMP_PATH="$dir:$pdir" $hostwrapper vamp-plugin-sdk/host/vamp-simple-host$hostext --list-ids);
Chris@44 406 echo
Chris@44 407 echo "Testing for any unwanted output to stdout..."
Chris@44 408 for id in $ids; do
Chris@44 409 case "$id" in
Chris@44 410 vamp:*) ;;
Chris@44 411 *)
Chris@44 412 echo "ERROR: plugin in $dir prints to stdout as it runs: found text $id (should use stderr for debug logging to avoid mixing with batch output stream)" | tee -a "$log"
Chris@44 413 good=no
Chris@44 414 ;;
Chris@44 415 esac
Chris@44 416 done
Chris@44 417 [ "$good" = "yes" ]
Chris@44 418 }
Chris@44 419
Chris@44 420 env_test_cat() {
Chris@44 421 dir="$1"
Chris@44 422 log=$(logfile_for envtest "$dir")
Chris@80 423 pdir=$(plugin_dir_for "$dir")
Chris@80 424 cdir=$(if test -n "$pdir" ; then echo "$pdir" ; else echo "$dir" ; fi)
Chris@44 425 good=yes
Chris@44 426 first=yes
Chris@44 427 echo
Chris@44 428 echo "Testing some details of .cat files..."
Chris@80 429 for catfile in "$cdir"/*".cat"; do
Chris@44 430 if [ ! -f "$catfile" ]; then
Chris@44 431 # This should only happen if the glob was not expanded at all
Chris@44 432 echo "ERROR: no .cat file found in $dir" | tee -a "$log"
Chris@44 433 good=no
Chris@44 434 break
Chris@44 435 fi
Chris@44 436 if [ "$first" = "yes" ]; then
Chris@44 437 first=no
Chris@44 438 else
Chris@80 439 echo "NOTE: multiple .cat files found in $cdir" | tee -a "$log"
Chris@44 440 fi
Chris@44 441 done
Chris@44 442 if [ "$good" = "yes" ]; then
Chris@46 443 excess=$(plugin_ids_in "$dir" | sed 's/^/vamp:/' | \
Chris@80 444 cat "$cdir"/*".cat" - | \
Chris@47 445 sed 's/::.*//' | \
Chris@47 446 sort | \
Chris@47 447 uniq -u)
Chris@44 448 if [ -n "$excess" ]; then
Chris@47 449 echo "ERROR: excess or missing definitions in .cat file? $excess" | tee -a "$log"
Chris@44 450 good=no
Chris@44 451 else
Chris@47 452 echo "GOOD: no excess or missing definitions in .cat files" | tee -a "$log"
Chris@44 453 fi
Chris@44 454 fi
Chris@44 455 [ "$good" = "yes" ]
Chris@44 456 }
Chris@44 457
Chris@44 458 env_test_ttl() {
Chris@44 459 dir="$1"
Chris@44 460 log=$(logfile_for envtest "$dir")
Chris@80 461 pdir=$(plugin_dir_for "$dir")
Chris@80 462 rdir=$(if test -n "$pdir" ; then echo "$pdir" ; else echo "$dir" ; fi)
Chris@44 463 good=yes
Chris@44 464 first=yes
Chris@44 465 echo
Chris@44 466 echo "Testing existence of RDF files..."
Chris@80 467 for ttlfile in "$rdir"/*.{n3,ttl}; do
Chris@44 468 if [ ! -f "$ttlfile" ]; then
Chris@44 469 # Because we have two different extensions, this isn't an
Chris@44 470 # error as it is with e.g. .cat (because one or the other
Chris@44 471 # of .n3 and .ttl almost certainly won't exist). But if we
Chris@44 472 # drop out the bottom and first is still true, then we
Chris@44 473 # know neither matched.
Chris@44 474 :
Chris@44 475 elif [ "$first" = "yes" ]; then
Chris@44 476 first=no
Chris@44 477 else
Chris@80 478 echo "NOTE: multiple .ttl or .n3 files found in $rdir" | tee -a "$log"
Chris@44 479 fi
Chris@44 480 done
Chris@80 481 if [ "$first" = "yes" ]; then
Chris@80 482 echo "ERROR: no .ttl or .n3 files found in $rdir" | tee -a "$log"
Chris@45 483 good=no;
Chris@45 484 else
Chris@45 485 echo "GOOD: found one or more .ttl or .n3 files (we don't actually test their validity or content here though)" | tee -a "$log"
Chris@45 486 fi
Chris@45 487 [ "$good" = "yes" ]
Chris@45 488 }
Chris@45 489
Chris@45 490 env_test_accompaniments() {
Chris@45 491 dir="$1"
Chris@45 492 log=$(logfile_for envtest "$dir")
Chris@45 493 good=yes
Chris@46 494 echo
Chris@46 495 echo "Testing existence of README and accompanying files..."
Chris@66 496 if ! ls -1 "$dir" | egrep -qi "^readme(.txt)?$"; then
Chris@45 497 echo "ERROR: no README file found" | tee -a "$log"
Chris@45 498 good=no
Chris@45 499 fi
Chris@53 500 if ! ls -1 "$dir" | egrep -qi "^(copying|licen[cs]e)(.txt)?$"; then
Chris@45 501 echo "ERROR: no COPYING or LICEN[CS]E file found" | tee -a "$log"
Chris@45 502 good=no
Chris@45 503 fi
Chris@53 504 if ! ls -1 "$dir" | egrep -qi "^citation(.txt)?$"; then
Chris@45 505 echo "NOTE: no CITATION file found" | tee -a "$log"
Chris@45 506 fi
Chris@44 507 [ "$good" = "yes" ]
Chris@44 508 }
Chris@44 509
Chris@9 510 run_environmental_tests() {
Chris@9 511 dir="$1"
Chris@44 512 log=$(logfile_for envtest "$dir")
Chris@44 513 allgood=yes
Chris@44 514 cat /dev/null > "$log"
Chris@45 515 for test in exports stdout cat ttl accompaniments; do
Chris@44 516 "env_test_$test" "$dir" || allgood=no
Chris@9 517 done
Chris@44 518 if [ "$allgood" != "yes" ]; then
Chris@19 519 echo "$dir" >> "$envcheckfailed"
Chris@44 520 return 1
Chris@44 521 else
Chris@44 522 return 0
Chris@19 523 fi
Chris@9 524 }
Chris@4 525
Chris@49 526 package() {
Chris@49 527 dir="$1"
Chris@49 528 id=$(vcs_id "$dir")
Chris@53 529 pstub="$dir-$platform$bits-$id"
Chris@53 530 pdir="$packagedir/$pstub"
Chris@49 531 mkdir -p "$pdir"
Chris@49 532 ( cd "$dir" ;
Chris@49 533 cp -av \
Chris@49 534 *"$pluginext" \
Chris@49 535 *.cat \
Chris@49 536 *.n3 \
Chris@49 537 *.ttl \
Chris@49 538 [Rr][Ee][Aa][Dd][Mm][Ee]* \
Chris@49 539 [Cc][Oo][Pp][Yy][Ii][Nn][Gg]* \
Chris@49 540 [Ll][Ii][Cc][Ee][Nn][CcSs][Ee]* \
Chris@49 541 [Cc][Ii][Tt][Aa][Tt][Ii][Oo][Nn]* \
Chris@49 542 [Cc][Hh][Aa][Nn][Gg][Ee][Ll][Oo][Gg]* \
Chris@49 543 ../"$pdir"/
Chris@49 544 )
Chris@49 545 ( cd "$packagedir";
Chris@49 546 if [ "$platform" = "mingw" ]; then
Chris@54 547 zip -r "$pstub".zip "$pstub"
Chris@49 548 else
Chris@53 549 tar cvjf "$pstub".tar.bz2 "$pstub"
Chris@49 550 fi;
Chris@53 551 rm -rf "$pstub"
Chris@49 552 )
Chris@49 553 }
Chris@49 554
Chris@22 555 if ! build_or_rebuild "vamp-plugin-sdk"; then
Chris@5 556 echo "Failed to build Vamp plugin SDK!"
Chris@5 557 exit 1
Chris@5 558 fi
Chris@5 559
Chris@26 560 # Ensure we can only link statically against these
Chris@26 561 for x in vamp-hostsdk vamp-sdk; do
Chris@26 562 for y in dylib dll so; do
Chris@26 563 rm -f "vamp-plugin-sdk/lib$x.$y"
Chris@26 564 rm -f "vamp-plugin-sdk/$x.$y"
Chris@26 565 done
Chris@26 566 done
Chris@26 567
Chris@22 568 if ! build_or_rebuild "vamp-plugin-tester"; then
Chris@5 569 echo "Failed to build Vamp plugin tester!"
Chris@5 570 exit 1
Chris@5 571 fi
Chris@5 572
Chris@11 573 for dir in $plugindirs ; do
Chris@31 574 dir=${dir%/*}
Chris@4 575 echo
Chris@4 576 echo "Processing: $dir"
Chris@31 577 if [ ! -d "$dir" ]; then
Chris@31 578 echo "Directory $dir not found!"
Chris@31 579 echo "$dir" >> "$notbuilt"
Chris@31 580 elif build_or_rebuild "$dir"; then
Chris@19 581 if have_plugin "$dir" ; then
Chris@19 582 echo "$dir" >> "$built"
Chris@19 583 run_tester "$dir"
Chris@19 584 run_environmental_tests "$dir"
Chris@19 585 else
Chris@44 586 log=$(logfile_for build "$dir")
Chris@44 587 echo "Build apparently succeeded, but no resulting plugin(s) found, or plugin(s) have wrong file type or platform" | tee -a "$log"
Chris@19 588 echo "$dir" >> "$notbuilt"
Chris@19 589 fi
Chris@4 590 else
Chris@6 591 echo "$dir" >> "$notbuilt"
Chris@4 592 fi
Chris@44 593 slog=$(logfile_for summary "$dir")
Chris@44 594 cat /dev/null > "$slog"
Chris@1 595 done
Chris@1 596
Chris@49 597 cat "$built" | while read dir; do
Chris@49 598 package "$dir"
Chris@49 599 done
Chris@49 600
Chris@4 601 echo
Chris@49 602 echo "** Built, tested, checked, and packaged:"
Chris@44 603 cat "$built" | while read dir; do
Chris@44 604 slog=$(logfile_for summary "$dir")
Chris@44 605 if ! grep -q "^$dir\$" "$testfailed"; then
Chris@44 606 if ! grep -q "^$dir\$" "$envcheckfailed"; then
Chris@44 607 echo "$dir"
Chris@59 608 echo "$dir: OK: Success" >> "$slog"
Chris@32 609 fi
Chris@6 610 fi
Chris@6 611 done | sort
Chris@4 612
Chris@4 613 echo
Chris@19 614 echo "** Failed tests:"
Chris@44 615 cat "$testfailed" | sort | uniq | while read dir; do
Chris@44 616 slog=$(logfile_for summary "$dir")
Chris@44 617 echo "$dir"
Chris@59 618 echo "$dir: TEST_FAILED: Built successfully, but failed tests" >> "$slog"
Chris@6 619 done
Chris@5 620
Chris@5 621 echo
Chris@19 622 echo "** Failed environmental checks:"
Chris@44 623 cat "$envcheckfailed" | sort | uniq | while read dir; do
Chris@44 624 slog=$(logfile_for summary "$dir")
Chris@44 625 echo "$dir"
Chris@59 626 echo "$dir: ENV_FAILED: Built successfully, but failed environmental checks" >> "$slog"
Chris@19 627 done
Chris@19 628
Chris@19 629 echo
Chris@4 630 echo "** Failed to build:"
Chris@44 631 cat "$notbuilt" | sort | while read dir; do
Chris@44 632 slog=$(logfile_for summary "$dir")
Chris@44 633 echo "$dir"
Chris@59 634 echo "$dir: BUILD_FAILED: Failed to compile" >> "$slog"
Chris@6 635 done
Chris@4 636
Chris@4 637 echo