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}
53 echo "Building Generic Updates only"
57 echo "Building Windows Updates only"
61 echo "Building Linux Updates only"
65 echo "Building Extension Updates only"
69 echo "Building All Updates"
78 echo "Extension only - No client"
81 echo "Building Client(s)"
85 echo "Not Building Client(s)"
89 function unwrap_update
94 find "$2" -type f -exec mv {} {}.bz2 \;
95 find "$2" -type f -name '*.bz2' -exec $BZIP2 -d {} \;
103 MANIFEST="$WORK/update.manifest"
104 ARCHIVEFILES="update.manifest"
108 for FILE in `find "$NEW" -type f`; do
111 for FILE in `find "$OLD" -type f`; do
114 $BZIP2 -z9 "$MANIFEST"
115 mv "$MANIFEST.bz2" "$MANIFEST"
121 CHECK_FILE="${1#$NEW/}"
122 if [ $CHECK_FILE == "update.manifest" ]; then
125 DIR=$(dirname "$WORK/$CHECK_FILE")
126 if [ ! -f "$OLD/$CHECK_FILE" ]; then
127 echo "add \"$CHECK_FILE\"" >> "$MANIFEST"
129 $BZIP2 -cz9 "$NEW/$CHECK_FILE" > "$WORK/$CHECK_FILE"
130 if [ -x "$NEW/$CHECK_FILE" ]; then
131 chmod 0755 "$WORK/$CHECK_FILE"
133 chmod 0644 "$WORK/$CHECK_FILE"
135 ARCHIVEFILES="$ARCHIVEFILES \"$CHECK_FILE\""
137 elif ! diff "$OLD/$CHECK_FILE" "$NEW/$CHECK_FILE" > /dev/null; then
139 $MBSDIFF "$OLD/$CHECK_FILE" "$NEW/$CHECK_FILE" "$WORK/$CHECK_FILE.patch"
140 $BZIP2 -z9 "$WORK/$CHECK_FILE.patch"
141 $BZIP2 -cz9 "$NEW/$CHECK_FILE" > "$WORK/$CHECK_FILE"
142 PATCHSIZE=`du -b "$WORK/$CHECK_FILE.patch.bz2"`
143 FULLSIZE=`du -b "$WORK/$CHECK_FILE"`
144 PATCHSIZE="${PATCHSIZE%% *}"
145 FULLSIZE="${FULLSIZE%% *}"
146 if [ $PATCHSIZE -lt $FULLSIZE ]; then
147 rm -f "$WORK/$CHECK_FILE"
148 mv "$WORK/$CHECK_FILE.patch.bz2" "$WORK/$CHECK_FILE.patch"
149 echo "patch \"$CHECK_FILE.patch\" \"$CHECK_FILE\"" >> "$MANIFEST"
150 ARCHIVEFILES="$ARCHIVEFILES \"$CHECK_FILE.patch\""
152 rm -f "$WORK/$CHECK_FILE.patch.bz2"
153 if [ -x "$NEW/$CHECK_FILE" ]; then
154 chmod 0755 "$WORK/$CHECK_FILE"
156 chmod 0644 "$WORK/$CHECK_FILE"
158 echo "add \"$CHECK_FILE\"" >> "$MANIFEST"
159 ARCHIVEFILES="$ARCHIVEFILES \"$CHECK_FILE\""
162 rm -f "$OLD/$CHECK_FILE"
168 if [ $RM_FILE != "update.manifest" ]; then
169 echo "remove \"$RM_FILE\"" >> "$MANIFEST"
173 function build_update
175 eval "$MAR -C \"$WORK\" -c output.mar $ARCHIVEFILES"
176 mv "$WORK/output.mar" "$1"
185 if which mbsdiff; then
186 MBSDIFF=${MBSDIFF:-mbsdiff}
188 if [ ! -x "$MAR" -o ! -x "$MBSDIFF" ]; then
189 if [ ! -f "external/mar" -o ! -f "external/mbsdiff" ]; then
190 wget ftp://ftp.mozilla.org/pub/mozilla.org/xulrunner/mar-generation-tools/mar-generation-tools-linux.zip
191 unzip mar-generation-tools-linux.zip -d external
193 MAR="$PWD/external/mar"
194 MBSDIFF="$PWD/external/mbsdiff"
198 function make_full_update
200 echo "Making full update"
203 prep_update client oldclient client.working
204 build_update "full_update.mar"
206 mv full_update.mar "$PUBPATH/$VERSION.mar"
207 echo "Making full update patch def"
208 mkdir -p "$PATCHPATH"
209 HASH=$(sha512sum "$PUBPATH/$VERSION.mar")
210 SIZE=$(du -b "$PUBPATH/$VERSION.mar")
211 echo "<patch type=\"complete\" URL=\"$VERSION.mar\" hashFunction=\"sha512\" hashValue=\"${HASH%% *}\" size=\"${SIZE%% *}\"/>" > "$PATCHPATH/$VERSION.patchline"
214 function make_partial_update
216 PREV_VERSION="${1%.mar}"
217 if [ "$VERSION" == "$PREV_VERSION" ]; then
218 echo "Skipping partial update for same version"
221 echo "Making partial update from $PREV_VERSION"
224 unwrap_update "$ARCHIVEPATH/$1" oldclient
225 prep_update client oldclient client.working
226 build_update "partial_update.mar"
227 mv partial_update.mar "$PUBPATH/$PREV_VERSION-$VERSION.mar"
228 echo "Making partial update patch def"
229 mkdir -p "$PATCHPATH"
230 HASH=$(sha512sum "$PUBPATH/$PREV_VERSION-$VERSION.mar")
231 SIZE=$(du -b "$PUBPATH/$PREV_VERSION-$VERSION.mar")
232 echo "<patch type=\"partial\" URL=\"$PREV_VERSION-$VERSION.mar\" hashFunction=\"sha512\" hashValue=\"${HASH%% *}\" size=\"${SIZE%% *}\"/>" > "$PATCHPATH/$PREV_VERSION-$VERSION.patchline"
235 function make_partial_updates
237 echo "Checking for partial update source files"
238 if [ -d "$ARCHIVEPATH" ]; then
239 for OLDVER in `find "$ARCHIVEPATH" -maxdepth 1 -name '*.mar'`; do
240 make_partial_update "${OLDVER##*/}"
243 mkdir -p "$ARCHIVEPATH"
244 echo "Copying full update to archive"
245 cp "$PUBPATH/$VERSION.mar" "$ARCHIVEPATH"
246 echo "Updating current version file"
247 echo "$VERSION" > "$PATCHPATH/VERSION"
250 function cleanup_files
252 echo "Cleaning up previous update mar files and update patch files"
253 find "$PUBPATH" -maxdepth 1 -name "*.mar" ! -name "*$VERSION.mar" -delete -print
254 find "$PATCHPATH" -maxdepth 1 -name "*.patch" ! -name "*$VERSION.patch" -delete -print
257 # First, do we have the mar and mbsdiff tools?
259 VERSION=`cat build/VERSION`
261 # Generic Updates - No XULRunner packaged, channel of "release"
262 # NOTE: Generic updates CAN update Windows/Linux builds, and will do so if you don't build platform specific ones
263 if [ $GEN_UPDATES -eq 1 ]; then
264 PATCHPATH="$prefix/patch"
265 PUBPATH="$prefix/pub"
266 ARCHIVEPATH="$prefix/archives"
267 if [ $CLIENTS -eq 1 ]; then
269 mkdir -p "$prefix/pub/clients/"
270 find "$prefix/pub/clients/" -name '*_client.xpi' -delete
271 mv evergreen_staff_client.xpi "$prefix/pub/clients/${VERSION}_client.xpi"
280 # Windows Updates - Windows XULRunner, update channel of "win"
281 if [ $WIN_UPDATES -eq 1 ]; then
282 PATCHPATH="$prefix/patch/win"
283 PUBPATH="$prefix/pub/win"
284 ARCHIVEPATH="$prefix/archives/win"
285 if [ $CLIENTS -eq 1 ]; then
287 mkdir -p "$prefix/pub/clients/"
288 find "$prefix/pub/clients/" -name '*_setup.exe' -delete
289 mv evergreen_staff_client_setup.exe "$prefix/pub/clients/${VERSION}_setup.exe"
298 # Linux Updates - Linux XULRunner, update channel of "lin'
299 if [ $LINUX_UPDATES -eq 1 ]; then
300 PATCHPATH="$prefix/patch/lin"
301 PUBPATH="$prefix/pub/lin"
302 ARCHIVEPATH="$prefix/archives/lin"
303 if [ $CLIENTS -eq 1 ]; then
305 mkdir -p "$prefix/pub/clients/"
306 find "$prefix/pub/clients/" -name '*.tar.bz2' -delete
307 mv evergreen_staff_client.tar.bz2 "$prefix/pub/clients/${VERSION}.tar.bz2"
317 # Not really "Updates" so much as "Update", plural for consistency in command.
318 # Extensions don't do partial updates. Or at least not that I found docs for.
319 if [ $EXT_UPDATES -eq 1 ]; then
321 mkdir -p "$prefix/pub/"
322 find "$prefix/pub/" -maxdepth 1 -name '*_extension.xpi' -delete
323 mv evergreen.xpi "$prefix/pub/${VERSION}_extension.xpi"
324 SHA512=$(sha512sum "$prefix/pub/${VERSION}_extension.xpi")
326 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"