3 # ***** BEGIN LICENSE BLOCK *****
4 # Version: MPL 1.1/GPL 2.0/LGPL 2.1
6 # The contents of this file are subject to the Mozilla Public License Version
7 # 1.1 (the "License"); you may not use this file except in compliance with
8 # the License. You may obtain a copy of the License at
9 # http://www.mozilla.org/MPL/
11 # Software distributed under the License is distributed on an "AS IS" basis,
12 # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13 # for the specific language governing rights and limitations under the
16 # The Original Code is Mozilla Update Packaging.
18 # The Initial Developer of the Original Code is
19 # Merrimack Valley Library Consortium.
20 # Portions created by the Initial Developer are Copyright (C) 2010
21 # the Initial Developer. All Rights Reserved.
24 # Thomas Berezansky <tsbere@mvlc.org>
26 # Alternatively, the contents of this file may be used under the terms of
27 # either the GNU General Public License Version 2 or later (the "GPL"), or
28 # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29 # in which case the provisions of the GPL or the LGPL are applicable instead
30 # of those above. If you wish to allow use of your version of this file only
31 # under the terms of either the GPL or the LGPL, and not to allow others to
32 # use your version of this file under the terms of the MPL, indicate your
33 # decision by deleting the provisions above and replace them with the notice
34 # and other provisions required by the GPL or the LGPL. If you do not delete
35 # the provisions above, a recipient may use your version of this file under
36 # the terms of any one of the MPL, the GPL or the LGPL.
38 # ***** END LICENSE BLOCK *****
40 # Portions of this code were based on code by Darin Fisher found here:
41 # http://mxr.mozilla.org/mozilla/source/tools/update-packaging/
43 prefix=${1:-/openils/var/updates}
54 echo "Building Generic Updates only"
58 echo "Building Windows Updates only"
62 echo "Building Linux (32 bit) Updates only"
66 echo "Building Linux (64 bit) Updates only"
70 echo "Building Extension Updates only"
74 echo "Building All Updates"
84 echo "Extension only - No client"
87 echo "Building Client(s)"
91 echo "Not Building Client(s)"
95 function unwrap_update
100 find "$2" -type f -exec mv {} {}.bz2 \;
101 find "$2" -type f -name '*.bz2' -exec $BZIP2 -d {} \;
109 MANIFEST="$WORK/update.manifest"
110 ARCHIVEFILES="update.manifest"
114 for FILE in `find "$NEW" -type f`; do
117 for FILE in `find "$OLD" -type f`; do
120 $BZIP2 -z9 "$MANIFEST"
121 mv "$MANIFEST.bz2" "$MANIFEST"
127 CHECK_FILE="${1#$NEW/}"
128 if [ $CHECK_FILE == "update.manifest" -o $CHECK_FILE == "defaults/preferences/developers.js" -o $CHECK_FILE == "defaults/preferences/aa_per_machine.js" ]; then
129 echo "Skipping $CHECK_FILE";
132 DIR=$(dirname "$WORK/$CHECK_FILE")
133 if [ ! -f "$OLD/$CHECK_FILE" ]; then
134 echo "add \"$CHECK_FILE\"" >> "$MANIFEST"
136 $BZIP2 -cz9 "$NEW/$CHECK_FILE" > "$WORK/$CHECK_FILE"
137 if [ -x "$NEW/$CHECK_FILE" ]; then
138 chmod 0755 "$WORK/$CHECK_FILE"
140 chmod 0644 "$WORK/$CHECK_FILE"
142 ARCHIVEFILES="$ARCHIVEFILES \"$CHECK_FILE\""
144 elif ! diff "$OLD/$CHECK_FILE" "$NEW/$CHECK_FILE" > /dev/null; then
146 $MBSDIFF "$OLD/$CHECK_FILE" "$NEW/$CHECK_FILE" "$WORK/$CHECK_FILE.patch"
147 $BZIP2 -z9 "$WORK/$CHECK_FILE.patch"
148 $BZIP2 -cz9 "$NEW/$CHECK_FILE" > "$WORK/$CHECK_FILE"
149 PATCHSIZE=`du -b "$WORK/$CHECK_FILE.patch.bz2"`
150 FULLSIZE=`du -b "$WORK/$CHECK_FILE"`
151 PATCHSIZE="${PATCHSIZE%% *}"
152 FULLSIZE="${FULLSIZE%% *}"
153 if [ $PATCHSIZE -lt $FULLSIZE ]; then
154 rm -f "$WORK/$CHECK_FILE"
155 mv "$WORK/$CHECK_FILE.patch.bz2" "$WORK/$CHECK_FILE.patch"
156 echo "patch \"$CHECK_FILE.patch\" \"$CHECK_FILE\"" >> "$MANIFEST"
157 ARCHIVEFILES="$ARCHIVEFILES \"$CHECK_FILE.patch\""
159 rm -f "$WORK/$CHECK_FILE.patch.bz2"
160 if [ -x "$NEW/$CHECK_FILE" ]; then
161 chmod 0755 "$WORK/$CHECK_FILE"
163 chmod 0644 "$WORK/$CHECK_FILE"
165 echo "add \"$CHECK_FILE\"" >> "$MANIFEST"
166 ARCHIVEFILES="$ARCHIVEFILES \"$CHECK_FILE\""
169 rm -f "$OLD/$CHECK_FILE"
175 if [ $RM_FILE != "update.manifest" -a $RM_FILE != "defaults/preferences/developers.js" -a $RM_FILE != "defaults/preferences/aa_per_machine.js" -a $RM_FILE != "defaults/preferences/autoupdate.js" -a $RM_FILE != "defaults/preferences/autochannel.js" ]; then
176 echo "remove \"$RM_FILE\"" >> "$MANIFEST"
180 function build_update
182 eval "$MAR -C \"$WORK\" -c output.mar $ARCHIVEFILES"
183 mv "$WORK/output.mar" "$1"
192 if which mbsdiff; then
193 MBSDIFF=${MBSDIFF:-mbsdiff}
195 if [ ! -x "$MAR" -o ! -x "$MBSDIFF" ]; then
196 if [ ! -f "external/mar" -o ! -f "external/mbsdiff" ]; then
197 wget ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/mar-generation-tools/mar-generation-tools-linux.zip
198 unzip mar-generation-tools-linux.zip -d external
200 MAR="$PWD/external/mar"
201 MBSDIFF="$PWD/external/mbsdiff"
205 function make_full_update
207 echo "Making full update"
210 prep_update client oldclient client.working
211 build_update "full_update.mar"
213 mv full_update.mar "$PUBPATH/$VERSION.mar"
214 echo "Making full update patch def"
215 mkdir -p "$PATCHPATH"
216 HASH=$(sha512sum "$PUBPATH/$VERSION.mar")
217 SIZE=$(du -b "$PUBPATH/$VERSION.mar")
218 echo "<patch type=\"complete\" URL=\"$VERSION.mar\" hashFunction=\"sha512\" hashValue=\"${HASH%% *}\" size=\"${SIZE%% *}\"/>" > "$PATCHPATH/$VERSION.patchline"
221 function make_partial_update
223 PREV_VERSION="${1%.mar}"
224 if [ "$VERSION" == "$PREV_VERSION" ]; then
225 echo "Skipping partial update for same version"
228 echo "Making partial update from $PREV_VERSION"
231 unwrap_update "$ARCHIVEPATH/$1" oldclient
232 prep_update client oldclient client.working
233 build_update "partial_update.mar"
234 mv partial_update.mar "$PUBPATH/$PREV_VERSION-$VERSION.mar"
235 echo "Making partial update patch def"
236 mkdir -p "$PATCHPATH"
237 HASH=$(sha512sum "$PUBPATH/$PREV_VERSION-$VERSION.mar")
238 SIZE=$(du -b "$PUBPATH/$PREV_VERSION-$VERSION.mar")
239 echo "<patch type=\"partial\" URL=\"$PREV_VERSION-$VERSION.mar\" hashFunction=\"sha512\" hashValue=\"${HASH%% *}\" size=\"${SIZE%% *}\"/>" > "$PATCHPATH/$PREV_VERSION-$VERSION.patchline"
242 function make_partial_updates
244 echo "Checking for partial update source files"
245 if [ -d "$ARCHIVEPATH" ]; then
246 for OLDVER in `find "$ARCHIVEPATH" -maxdepth 1 -name '*.mar'`; do
247 make_partial_update "${OLDVER##*/}"
250 mkdir -p "$ARCHIVEPATH"
251 echo "Copying full update to archive"
252 cp "$PUBPATH/$VERSION.mar" "$ARCHIVEPATH"
253 echo "Updating current version file"
254 echo "$VERSION" > "$PATCHPATH/VERSION"
257 function cleanup_files
259 echo "Cleaning up previous update mar files and update patch files"
260 find "$PUBPATH" -maxdepth 1 -name "*.mar" ! -name "*$VERSION.mar" -delete -print
261 find "$PATCHPATH" -maxdepth 1 -name "*.patch" ! -name "*$VERSION.patch" -delete -print
264 # First, do we have the mar and mbsdiff tools?
266 VERSION=`cat build/VERSION`
268 # Generic Updates - No XULRunner packaged, channel of "release"
269 # NOTE: Generic updates CAN update Windows/Linux builds, and will do so if you don't build platform specific ones
270 if [ $GEN_UPDATES -eq 1 ]; then
271 PATCHPATH="$prefix/patch"
272 PUBPATH="$prefix/pub"
273 ARCHIVEPATH="$prefix/archives"
274 if [ $CLIENTS -eq 1 ]; then
276 mkdir -p "$prefix/pub/clients/"
277 find "$prefix/pub/clients/" -name '*_client.xpi' -delete
278 mv evergreen_staff_client.xpi "$prefix/pub/clients/${VERSION}_client.xpi"
287 # Windows Updates - Windows XULRunner, update channel of "win"
288 if [ $WIN_UPDATES -eq 1 ]; then
289 PATCHPATH="$prefix/patch/win"
290 PUBPATH="$prefix/pub/win"
291 ARCHIVEPATH="$prefix/archives/win"
292 if [ $CLIENTS -eq 1 ]; then
294 mkdir -p "$prefix/pub/clients/"
295 find "$prefix/pub/clients/" -name '*_setup.exe' -delete
296 mv evergreen_staff_client_setup.exe "$prefix/pub/clients/${VERSION}_setup.exe"
305 # Linux 32 bit Updates - Linux XULRunner, update channel of "lin"
306 if [ $LINUX32_UPDATES -eq 1 ]; then
307 PATCHPATH="$prefix/patch/lin"
308 PUBPATH="$prefix/pub/lin"
309 ARCHIVEPATH="$prefix/archives/lin"
310 if [ $CLIENTS -eq 1 ]; then
312 mkdir -p "$prefix/pub/clients/"
313 find "$prefix/pub/clients/" -name '*_i686.tar.bz2' -delete
314 mv evergreen_staff_client_i686.tar.bz2 "$prefix/pub/clients/${VERSION}_i686.tar.bz2"
316 make linux32-xulrunner
323 # Linux 64 bit Updates - Linux XULRunner, update channel of "lin64"
324 if [ $LINUX64_UPDATES -eq 1 ]; then
325 PATCHPATH="$prefix/patch/lin64"
326 PUBPATH="$prefix/pub/lin64"
327 ARCHIVEPATH="$prefix/archives/lin64"
328 if [ $CLIENTS -eq 1 ]; then
330 mkdir -p "$prefix/pub/clients/"
331 find "$prefix/pub/clients/" -name '*_x86_64.tar.bz2' -delete
332 mv evergreen_staff_client_x86_64.tar.bz2 "$prefix/pub/clients/${VERSION}_x86_64.tar.bz2"
334 make linux64-xulrunner
342 # Not really "Updates" so much as "Update", plural for consistency in command.
343 # Extensions don't do partial updates. Or at least not that I found docs for.
344 if [ $EXT_UPDATES -eq 1 ]; then
346 mkdir -p "$prefix/pub/"
347 find "$prefix/pub/" -maxdepth 1 -name '*_extension.xpi' -delete
348 mv evergreen.xpi "$prefix/pub/${VERSION}_extension.xpi"
349 SHA512=$(sha512sum "$prefix/pub/${VERSION}_extension.xpi")
351 sed -e "s|<em:version>.*</em:version>|<em:version>$VERSION</em:version>|" -e "s|<em:updateLink>.*</em:updateLink>|<em:updateLink>https://::HOSTNAME::/updates/${VERSION}_extension.xpi</em:updateLink>|" -e "s|<em:updateHash>.*</em:updateHash>|<em:updateHash>sha512:$SHA512</em:updateHash>|" update.rdf > "$prefix/patch/update.rdf"