Chris@120: #!/bin/bash Chris@120: Chris@120: set -e Chris@120: Chris@120: mydir=$(dirname "$0") Chris@120: case "$mydir" in /*);; *) mydir=$(pwd)/"$mydir";; esac Chris@120: Chris@120: . "$mydir"/include.sh Chris@120: Chris@120: do_rebuild="" Chris@120: Chris@120: pubtag="piper" Chris@120: Chris@120: if [ t"$1" = t"-c" ]; then Chris@120: echo "(Building from clean)" Chris@120: do_rebuild=yes Chris@120: shift Chris@120: fi Chris@120: Chris@120: plugindirs="$@" Chris@120: if [ -z "$plugindirs" ]; then Chris@120: plugindirs=$(cat METADATA/repos.txt | Chris@120: grep -v vamp-plugin-sdk | Chris@120: grep -v vamp-plugin-tester | Chris@120: grep -v '^piper' | Chris@120: awk '{ print $1; }') Chris@120: else Chris@120: for dir in $plugindirs ; do Chris@120: if [ ! -d "$dir" ]; then Chris@120: echo "ERROR: Directory $dir not found" Chris@120: usage Chris@120: fi Chris@120: done Chris@120: fi Chris@120: Chris@120: set -u Chris@120: Chris@120: reportdir="REPORTS/piper-js" Chris@120: packagedir="PACKAGES/piper-js" Chris@120: Chris@120: mkdir -p "$reportdir" "$packagedir" || exit 1 Chris@120: Chris@120: built="/tmp/built.$$.txt" Chris@120: testfailed="/tmp/testfailed.$$.txt" Chris@120: envcheckfailed="/tmp/envcheckfailed.$$.txt" Chris@120: notbuilt="/tmp/notbuilt.$$.txt" Chris@120: Chris@120: trap 'rm -f "$built" "$envcheckfailed" "$testfailed" "$notbuilt"' 0 Chris@120: touch "$built" "$envcheckfailed" "$testfailed" "$notbuilt" Chris@120: Chris@120: logfile_for() { Chris@120: local activity="$1" Chris@120: local dir="$2" Chris@120: echo "$reportdir/$dir.$activity.txt" Chris@120: } Chris@120: Chris@120: build_dir_for() { Chris@120: local dir="$1" Chris@120: echo "piper-vamp-js-builds/$dir" Chris@120: } Chris@120: Chris@120: build() { Chris@120: local dir="$1" Chris@120: local log=$(logfile_for build "$dir") Chris@120: local build_dir=$(build_dir_for "$dir") Chris@120: make -C "$build_dir" em 2>&1 | tee "$log" Chris@120: return ${PIPESTATUS[0]} Chris@120: } Chris@120: Chris@120: rebuild() { Chris@120: local dir="$1" Chris@120: local log=$(logfile_for build "$dir") Chris@120: local build_dir=$(build_dir_for "$dir") Chris@120: if make -C "$build_dir" distclean; then Chris@120: build "$dir" Chris@120: elif make -C "$build_dir" clean; then Chris@120: build "$dir" Chris@120: else Chris@120: echo "*** Failed to 'make clean' in $dir!" | tee "$log" Chris@120: return 1 Chris@120: fi Chris@120: } Chris@120: Chris@120: build_or_rebuild() { Chris@120: local dir="$1" Chris@120: if [ -n "$do_rebuild" ]; then Chris@120: rebuild "$dir" Chris@120: else Chris@120: build "$dir" Chris@120: fi Chris@120: } Chris@120: Chris@120: package() { Chris@120: local dir="$1" Chris@120: local id=$(vcs_id "$dir") Chris@120: local pstub="$dir-$pubtag-$id" Chris@120: local pdir="$packagedir/$pstub" Chris@120: local build_dir=piper-vamp-js-builds/"$dir" Chris@120: mkdir -p "$pdir" Chris@120: ( cd "$dir" ; Chris@120: cp -av \ Chris@120: [Rr][Ee][Aa][Dd][Mm][Ee]* \ Chris@120: [Cc][Oo][Pp][Yy][Ii][Nn][Gg]* \ Chris@120: [Ll][Ii][Cc][Ee][Nn][CcSs][Ee]* \ Chris@120: [Cc][Ii][Tt][Aa][Tt][Ii][Oo][Nn]* \ Chris@120: [Cc][Hh][Aa][Nn][Gg][Ee][Ll][Oo][Gg]* \ Chris@120: ../"$pdir"/ || true Chris@120: ) Chris@120: cp "$build_dir"/*.js "$pdir/" Chris@120: ( cd "$packagedir"; Chris@120: tar cvjf "$pstub".tar.bz2 "$pstub" Chris@120: rm -rf "$pstub" Chris@120: ) Chris@120: } Chris@120: Chris@120: for dir in $plugindirs ; do Chris@120: dir=${dir%/*} Chris@120: build_dir=piper-vamp-js-builds/"$dir" Chris@120: echo Chris@120: echo "Processing: $dir" Chris@120: if [ ! -d "$dir" ]; then Chris@120: echo "Directory $dir not found!" Chris@120: echo "$dir" >> "$notbuilt" Chris@120: elif [ ! -d "$build_dir" ]; then Chris@120: echo "Directory $dir lacks Piper build dir $build_dir" Chris@120: echo "Skipping" Chris@120: echo "$dir" >> "$notbuilt" Chris@120: elif build_or_rebuild "$dir"; then Chris@120: echo "$dir" >> "$built" Chris@120: else Chris@120: echo "$dir" >> "$notbuilt" Chris@120: fi Chris@120: slog=$(logfile_for summary "$dir") Chris@120: echo "initialising logfile $slog for $dir" Chris@120: cat /dev/null > "$slog" Chris@120: done Chris@120: Chris@120: cat "$built" | while read dir; do Chris@120: package "$dir" Chris@120: done Chris@120: Chris@120: echo Chris@120: echo "** Built and packaged:" Chris@120: cat "$built" | while read dir; do Chris@120: slog=$(logfile_for summary "$dir") Chris@120: echo "$dir" Chris@120: echo "$dir: OK: Success" >> "$slog" Chris@120: done | sort Chris@120: Chris@120: echo Chris@120: echo "** Failed to build:" Chris@120: cat "$notbuilt" | sort | while read dir; do Chris@120: slog=$(logfile_for summary "$dir") Chris@120: echo "$dir" Chris@120: echo "$dir: BUILD_FAILED: Failed to build" >> "$slog" Chris@120: done Chris@120: Chris@120: echo