Bash build script

From MozillaZine Knowledge Base
Revision as of 17:55, 26 January 2005 by Asqueella (talk | contribs) (new version)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This page is part of the extension development documentation project.

Ask your questions in MozillaZine Forums. Also try browsing example code.

Note: development documentation is in process of being moved to Mozilla Development Center (MDC).

Here is a bash script I'm using to package my extensions (under Cygwin). For Windows script see cmd build script.

#!/bin/bash
# build.sh -- builds JAR and XPI files for mozilla extensions
#   by Nickolay Ponomarev <asqueella@gmail.com>
#   based on Nathan Yergler's build script

# this script assumes the following directory structure:
# ./
#   (files listed in $ROOT_FILES)
#   content/
#   locale/
#   skin/
#   defaults/    (only if $HAS_DEFAULTS=1)
#   components/  (only if $HAS_COMPONENTS=1)
#
# It uses a temporary directory ./build; don't use that!
# Its output is:
# ./$APP_NAME.xpi
# ./$APP_NAME.jar  (only if $KEEP_JAR=1)
# ./files -- the list of packaged files

#### editable items (none of these can be blank)
APP_NAME=infolister  # short-name, jar and xpi files name.
HAS_DEFAULTS=1       # whether the ext. provides default values for user prefs etc.
HAS_COMPONENTS=1     # whether the ext. includes any components
KEEP_JAR=1           # leave the jar when done?
ROOT_FILES="license.txt install.rdf" # put these files in root of xpi
VERSION=0.8.1        # version (for preprocessor which replaces __VERSION__ in 
                     # install.rdf with $VERSION.builddate, eg 0.8.1.20050126)
#### editable items end

ROOT_DIR=`pwd`
TMP_DIR=build

#uncomment to debug
#set -x

# remove any left-over files
rm $APP_NAME.jar
rm $APP_NAME.xpi
rm files
rm -rf $TMP_DIR

mkdir --parents --verbose $TMP_DIR/chrome

# generate the JAR file, excluding CVS and temporary files
JAR_FILE=$TMP_DIR/chrome/$APP_NAME.jar
echo "Generating $JAR_FILE..."
for CHROME_SUBDIR in content locale skin; do
  find $CHROME_SUBDIR -path '*CVS*' -prune -o -type f -print | grep -v \~ >> files
done

zip -0 -r $JAR_FILE `cat files`
# The following statement should be used instead if you don't wish to use the JAR file
#cp --verbose --parents `cat files` $TMP_DIR/chrome

# prepare components and defaults
echo "Copying various files to '$TMP_DIR'..."
if [ $HAS_COMPONENTS = 1 ]; then
  mkdir $TMP_DIR/components
  COMPONENT_FILES="`find components -path '*CVS*' -prune -o -type f -print | grep -v \~`"
  echo $COMPONENT_FILES >> files
  cp --verbose --parents $COMPONENT_FILES $TMP_DIR
fi

if [ $HAS_DEFAULTS = 1 ]; then
  DEFAULT_FILES="`find defaults -path '*CVS*' -prune -o -type f -print | grep -v \~`"
  echo $DEFAULT_FILES >> files
  cp --verbose --parents $DEFAULT_FILES $TMP_DIR
fi

# Copy other files to the root of future XPI.
for ROOT_FILE in $ROOT_FILES; do
  echo $ROOT_FILE >> files
  cp --verbose $ROOT_FILE $TMP_DIR
done

cd $TMP_DIR
# Preprocess install.rdf (insert current date)
# XXX preprocess customizable set of files (about.xul)
if [ -f "install.rdf" ]; then
  echo "Preprocessing install.rdf..."
  cat install.rdf | sed s/__VERSION__/$VERSION.`date "+%Y%m%d"`/ > install.rdf
fi

# generate the XPI file
echo "Generating $APP_NAME.xpi..."
zip -r ../$APP_NAME.xpi *

cd $ROOT_DIR

echo "Cleanup..."
if [ $KEEP_JAR = 1 ]; then
  # save the jar file
  mv $TMP_DIR/chrome/$APP_NAME.jar .
fi

# remove the working files
rm -rf $TMP_DIR
echo "Done!"