mozilla-devscripts is a collection of scripts based on Makefile inheritance
usable by Mozilla packages in Ubuntu.

- xpi provides hooks to help package extensions in an elegant way

============================================================================

In addition there is a xpi.mk which provides standard rules/targets to package
XPI extensions for mozilla/toolkit based applications.

=== xpi.mk ===

targets:
---------
 install-xpi - unpack and install the contents of the .xpi file to the
               package named by the MOZ_EXTENSION_PKG parameter
 clean-xpi   - clean build cruft from install-xpi

parameters:
------------
 MOZ_EXTENSION_PKG - the binary package that will ship the extension
 MOZ_XPI_FILE      - the XPI file to unpack and install to the binary package
                     named by MOZ_EXTENSION_PKG. If not set, xpi.mk will use
                     the first |*.xpi| file found in the packages top level
                     directory
 MOZ_XPI_EMID      - use the given EMID to name the links in the applications
                     |extensions| directory. If not set, xpi.mk will try to
                     guess the right EMID by introspecting the |install.rdf|
                     shipped by the XPI
 MOZ_XPI_BUILD_COMMAND
                   - use the given command _before_ running the normal
                     |install-xpi| procedure. This parameter is useful for all
                     those extension sources that have a command/make target
                     to produce a XPI. If a developer doesn't provide the
                     command, the default one will be used.
 MOZ_XPI_MOZILLA_DIRS
                   - link the extension to the global |extensions| directory
                     of the given MOZILLAs. The default value is |firefox| and
                     |firefox-addons|, which will link the extension to the
                     /usr/lib/firefox/extensions and /usr/lib/firefox-addons/extensions
                     directories, respectively.

cdbs:
------
 If you are using cdbs (debhelper.mk) xpi.mk hooks in appropriately.
 cdbs targets to build the packages without any rule. The only thing required
 is to include the debhelper.mk from cdbs _before_ including xpi.mk.

examples:
----------
 A template is available in the branch available under the following URL:
   https://code.launchpad.net/~mozillateam/firefox-extensions/XPI.TEMPLATE

=== xpi-unpack ===

This script unpacks XPI file to the provided output directory. After unpacking
the XPI file, it will look for JAR files in the output directory. All JAR files
will be unpacked to $JAR_FILE with "!" appended. For example, "test.jar" is
unpacked to "test.jar!" directory. After unpacking, the script removes all JAR
files.
To run it, pass the name of the XPI file, and the name of the output directory:

$ xpi-unpack ubufox.xpi output

In case some of the parameters are missing, input XPI file doesn't exist, or
output directory already exists, it will report an error and exit.


=== xpi-pack ===

This script prepares a XPI file from the provided input directory. First, it
will look for all unpacked JAR files in the input directory. Directories with
the unpacked JAR files have the format explained in xpi-unpack section. The
script will pack the contents of the directory to the JAR file, named like the
JAR directory, with stripped "!" sign. For example, contents of "test.jar!" are
packed to "test.jar" file. After that, it will remove all JAR directories.
Finally, it will pack the contents of the input directory to the XPI file,
which is placed inside the provided input directory. This behaviour is because
xpi.mk will look for XPI file inside top-level extension directory, which is
the input directory in that case. The script doesn't pack debian/ and temp-*/
directories to the XPI file. After XPI file is produced, it will unpack all JAR
files, in order to leave intact source.
To run it, pass the name of the input directory, and the name of the XPI file:

$ xpi-pack . ubufox.xpi

In case some of the parameters are missing, or input directory doesn't exist,
it will report an error and exit.
