Chris@120
|
1 #!/bin/bash
|
Chris@120
|
2
|
Chris@120
|
3 set -e
|
Chris@120
|
4
|
Chris@120
|
5 mydir=$(dirname "$0")
|
Chris@120
|
6 case "$mydir" in /*);; *) mydir=$(pwd)/"$mydir";; esac
|
Chris@120
|
7
|
Chris@120
|
8 . "$mydir"/include.sh
|
Chris@120
|
9
|
Chris@120
|
10 do_rebuild=""
|
Chris@120
|
11
|
Chris@120
|
12 pubtag="piper"
|
Chris@120
|
13
|
Chris@120
|
14 if [ t"$1" = t"-c" ]; then
|
Chris@120
|
15 echo "(Building from clean)"
|
Chris@120
|
16 do_rebuild=yes
|
Chris@120
|
17 shift
|
Chris@120
|
18 fi
|
Chris@120
|
19
|
Chris@120
|
20 plugindirs="$@"
|
Chris@120
|
21 if [ -z "$plugindirs" ]; then
|
Chris@120
|
22 plugindirs=$(cat METADATA/repos.txt |
|
Chris@120
|
23 grep -v vamp-plugin-sdk |
|
Chris@120
|
24 grep -v vamp-plugin-tester |
|
Chris@120
|
25 grep -v '^piper' |
|
Chris@120
|
26 awk '{ print $1; }')
|
Chris@120
|
27 else
|
Chris@120
|
28 for dir in $plugindirs ; do
|
Chris@120
|
29 if [ ! -d "$dir" ]; then
|
Chris@120
|
30 echo "ERROR: Directory $dir not found"
|
Chris@120
|
31 usage
|
Chris@120
|
32 fi
|
Chris@120
|
33 done
|
Chris@120
|
34 fi
|
Chris@120
|
35
|
Chris@120
|
36 set -u
|
Chris@120
|
37
|
Chris@120
|
38 reportdir="REPORTS/piper-js"
|
Chris@120
|
39 packagedir="PACKAGES/piper-js"
|
Chris@120
|
40
|
Chris@120
|
41 mkdir -p "$reportdir" "$packagedir" || exit 1
|
Chris@120
|
42
|
Chris@120
|
43 built="/tmp/built.$$.txt"
|
Chris@120
|
44 testfailed="/tmp/testfailed.$$.txt"
|
Chris@120
|
45 envcheckfailed="/tmp/envcheckfailed.$$.txt"
|
Chris@120
|
46 notbuilt="/tmp/notbuilt.$$.txt"
|
Chris@120
|
47
|
Chris@120
|
48 trap 'rm -f "$built" "$envcheckfailed" "$testfailed" "$notbuilt"' 0
|
Chris@120
|
49 touch "$built" "$envcheckfailed" "$testfailed" "$notbuilt"
|
Chris@120
|
50
|
Chris@120
|
51 logfile_for() {
|
Chris@120
|
52 local activity="$1"
|
Chris@120
|
53 local dir="$2"
|
Chris@120
|
54 echo "$reportdir/$dir.$activity.txt"
|
Chris@120
|
55 }
|
Chris@120
|
56
|
Chris@120
|
57 build_dir_for() {
|
Chris@120
|
58 local dir="$1"
|
Chris@120
|
59 echo "piper-vamp-js-builds/$dir"
|
Chris@120
|
60 }
|
Chris@120
|
61
|
Chris@120
|
62 build() {
|
Chris@120
|
63 local dir="$1"
|
Chris@120
|
64 local log=$(logfile_for build "$dir")
|
Chris@120
|
65 local build_dir=$(build_dir_for "$dir")
|
Chris@120
|
66 make -C "$build_dir" em 2>&1 | tee "$log"
|
Chris@120
|
67 return ${PIPESTATUS[0]}
|
Chris@120
|
68 }
|
Chris@120
|
69
|
Chris@120
|
70 rebuild() {
|
Chris@120
|
71 local dir="$1"
|
Chris@120
|
72 local log=$(logfile_for build "$dir")
|
Chris@120
|
73 local build_dir=$(build_dir_for "$dir")
|
Chris@120
|
74 if make -C "$build_dir" distclean; then
|
Chris@120
|
75 build "$dir"
|
Chris@120
|
76 elif make -C "$build_dir" clean; then
|
Chris@120
|
77 build "$dir"
|
Chris@120
|
78 else
|
Chris@120
|
79 echo "*** Failed to 'make clean' in $dir!" | tee "$log"
|
Chris@120
|
80 return 1
|
Chris@120
|
81 fi
|
Chris@120
|
82 }
|
Chris@120
|
83
|
Chris@120
|
84 build_or_rebuild() {
|
Chris@120
|
85 local dir="$1"
|
Chris@120
|
86 if [ -n "$do_rebuild" ]; then
|
Chris@120
|
87 rebuild "$dir"
|
Chris@120
|
88 else
|
Chris@120
|
89 build "$dir"
|
Chris@120
|
90 fi
|
Chris@120
|
91 }
|
Chris@120
|
92
|
Chris@120
|
93 package() {
|
Chris@120
|
94 local dir="$1"
|
Chris@120
|
95 local id=$(vcs_id "$dir")
|
Chris@120
|
96 local pstub="$dir-$pubtag-$id"
|
Chris@120
|
97 local pdir="$packagedir/$pstub"
|
Chris@120
|
98 local build_dir=piper-vamp-js-builds/"$dir"
|
Chris@120
|
99 mkdir -p "$pdir"
|
Chris@120
|
100 ( cd "$dir" ;
|
Chris@120
|
101 cp -av \
|
Chris@120
|
102 [Rr][Ee][Aa][Dd][Mm][Ee]* \
|
Chris@120
|
103 [Cc][Oo][Pp][Yy][Ii][Nn][Gg]* \
|
Chris@120
|
104 [Ll][Ii][Cc][Ee][Nn][CcSs][Ee]* \
|
Chris@120
|
105 [Cc][Ii][Tt][Aa][Tt][Ii][Oo][Nn]* \
|
Chris@120
|
106 [Cc][Hh][Aa][Nn][Gg][Ee][Ll][Oo][Gg]* \
|
Chris@120
|
107 ../"$pdir"/ || true
|
Chris@120
|
108 )
|
Chris@120
|
109 cp "$build_dir"/*.js "$pdir/"
|
Chris@120
|
110 ( cd "$packagedir";
|
Chris@120
|
111 tar cvjf "$pstub".tar.bz2 "$pstub"
|
Chris@120
|
112 rm -rf "$pstub"
|
Chris@120
|
113 )
|
Chris@120
|
114 }
|
Chris@120
|
115
|
Chris@120
|
116 for dir in $plugindirs ; do
|
Chris@120
|
117 dir=${dir%/*}
|
Chris@120
|
118 build_dir=piper-vamp-js-builds/"$dir"
|
Chris@120
|
119 echo
|
Chris@120
|
120 echo "Processing: $dir"
|
Chris@120
|
121 if [ ! -d "$dir" ]; then
|
Chris@120
|
122 echo "Directory $dir not found!"
|
Chris@120
|
123 echo "$dir" >> "$notbuilt"
|
Chris@120
|
124 elif [ ! -d "$build_dir" ]; then
|
Chris@120
|
125 echo "Directory $dir lacks Piper build dir $build_dir"
|
Chris@120
|
126 echo "Skipping"
|
Chris@120
|
127 echo "$dir" >> "$notbuilt"
|
Chris@120
|
128 elif build_or_rebuild "$dir"; then
|
Chris@120
|
129 echo "$dir" >> "$built"
|
Chris@120
|
130 else
|
Chris@120
|
131 echo "$dir" >> "$notbuilt"
|
Chris@120
|
132 fi
|
Chris@120
|
133 slog=$(logfile_for summary "$dir")
|
Chris@120
|
134 echo "initialising logfile $slog for $dir"
|
Chris@120
|
135 cat /dev/null > "$slog"
|
Chris@120
|
136 done
|
Chris@120
|
137
|
Chris@120
|
138 cat "$built" | while read dir; do
|
Chris@120
|
139 package "$dir"
|
Chris@120
|
140 done
|
Chris@120
|
141
|
Chris@120
|
142 echo
|
Chris@120
|
143 echo "** Built and packaged:"
|
Chris@120
|
144 cat "$built" | while read dir; do
|
Chris@120
|
145 slog=$(logfile_for summary "$dir")
|
Chris@120
|
146 echo "$dir"
|
Chris@120
|
147 echo "$dir: OK: Success" >> "$slog"
|
Chris@120
|
148 done | sort
|
Chris@120
|
149
|
Chris@120
|
150 echo
|
Chris@120
|
151 echo "** Failed to build:"
|
Chris@120
|
152 cat "$notbuilt" | sort | while read dir; do
|
Chris@120
|
153 slog=$(logfile_for summary "$dir")
|
Chris@120
|
154 echo "$dir"
|
Chris@120
|
155 echo "$dir: BUILD_FAILED: Failed to build" >> "$slog"
|
Chris@120
|
156 done
|
Chris@120
|
157
|
Chris@120
|
158 echo
|