mozilla-devscripts makes packaging Mozilla extensions easy. It provides the file /usr/share/mozilla-devscripts/xpi.mk, which can be included by debian/rules. You only have to build a .xpi file, everything else will be done by mozilla-devscripts. It will extract the xpi file, remove extra license files, install it and set the links.
debian/control
The debian/control file will normally look like:
Source: EXTENSIONNAME Section: web Priority: optional Maintainer: Debian Mozilla Extension Maintainers <pkg-mozext-maintainers@lists.alioth.debian.org> Uploaders: Your Fullname <your@email.tld> Build-Depends: cdbs, debhelper (>= 7), mozilla-devscripts (>= 0.16~) Standards-Version: 3.8.3 Homepage: http://example-extension.com/ Vcs-Git: git://git.debian.org/pkg-mozext/EXTENSIONNAME.git Vcs-Browser: http://git.debian.org/?p=pkg-mozext/EXTENSIONNAME.git;a=summary Package: xul-ext-EXTENSIONNAME Architecture: all Depends: ${misc:Depends} Recommends: ${xpi:Recommends} Provides: ${xpi:Provides} Enhances: ${xpi:Enhances} Description: one line for short description Long descriptions can span multiple lines . and as above empty lines
- We maintain the extensions in git in the pkg-mozext group.
- EXTENSIONNAME is the name of the extension. EXTENSIONNAME should not contain mozilla, iceape, icedove, iceape, firefox, thunderbird, seamonkey in it's name. Append -extension to the source package name if EXTENSIONNAME is too generic without these name (The source package name for firefoxnotify is notify-extension and the binary package name is xul-ext-notify).
- You need at least version 0.16~ of mozilla-devscripts for all features mentioned here.
debian/rules
building from source
You have to run one command if you build the xpi file from source. Some extensions will provide a makefile to create the xpi file and you have to run "make", some will use ant and you have to run "ant", some will provide a shell script and you have to run "sh build.sh". Your debian/rules file will look like:
#!/usr/bin/make -f MOZ_XPI_BUILD_COMMAND = sh build.sh include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/mozilla-devscripts/xpi.mk
An example for this design is notify-extension.
using xpi file
You should use med-xpi-unpack to create the source file if you use the xpi file from upstream. Please do not drop the xpi file into your sources. Your debian/rules file will be very simple if you use med-xpi-unpack to create the source. mozilla-devscripts will pack the files for you. You do not have to set MOZ_XPI_BUILD_COMMAND.
#!/usr/bin/make -f include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/mozilla-devscripts/xpi.mk
An example for this design is flashgot.
It is not recommended, but supported to have the xpi file in the source package. You have to set MOZ_XPI_BUILD_COMMAND to NULL. Otherwise the xpi file will be removed in the clean target.
#!/usr/bin/make -f MOZ_XPI_BUILD_COMMAND := $(NULL) include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/mozilla-devscripts/xpi.mk
An example for this design is adblock-plus 1.1.1-2 (the next upstream release will use med-xpi-unpack).
plain debhelper
You can use debhelper without CDBS if you do not like CDBS. mozilla-devscripts 0.19 makes it dead simple (You have to bump the build dependency to >= 0.19~):
#!/usr/bin/make -f %: dh --with xul-ext $@ override_dh_auto_build: # put here the commands used for building the xpi file, for example: xpi-pack $(CURDIR) foo.xpi override_dh_auto_install: install-xpi foo.xpi
multiple xpi files
The xpi.mk CDBS module supports only one xpi file. You can use plain debhelper to install multiple xpi files, but only one xpi file per binary package. This requires mozilla-devscripts 0.19 or newer. Here is an example:
#!/usr/bin/make -f %: dh --with xul-ext $@ override_dh_auto_build: # put here the commands used for building the xpi file, for example: make override_dh_auto_install: install-xpi -p xul-ext-bla bla.xpi install-xpi -p xul-ext-keks keks.xpi