-<?xml version="1.0"?>
-<!-- =================================
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
- Trustedbird and add-ons packager
+Trustedbird and add-ons packager
- Olivier Parniere
- Olivier Brun
- Raphael Fairise
+Olivier Parniere
+Olivier Brun
+Raphael Fairise
- To enable SVN write access through SSH:
- - copy the file server.properties.template to server.properties
- and set your Adullact SSH username in server.properties
+To enable SVN write access through SSH:
+- copy the file server.properties.template to server.properties
+and set your Adullact SSH username in server.properties
- Build and package everything:
- $ ant build-all
+Build and package everything:
+$ ant build-all
- Build and package Trustedbird:
- $ ant extract-archive-tb update-tb package-tb-src build-tb package-tb
+Build and package Trustedbird:
+$ ant extract-archive-tb update-tb package-tb-src build-tb package-tb
- Package all add-ons:
- $ ant package-addons
+Package all add-ons:
+$ ant package-addons
- Package only MRS add-on:
- $ ant package-mrs
+Package only MRS add-on:
+$ ant package-mrs
- Get target list:
- $ ant -projecthelp
+Get target list:
+$ ant -projecthelp
- Generate development builds (install.rdf and
- update.rdf linked to nightly builds):
- $ ant -Dnightly=1 build-all
+Generate development builds (install.rdf and
+update.rdf linked to nightly builds):
+$ ant -Dnightly=1 build-all
- Generate builds for addons.mozilla.org without updateURL/updateKey in install.rdf
- $ ant -Damo=1 package-addons
+Generate builds for addons.mozilla.org without updateURL/updateKey in install.rdf
+$ ant -Damo=1 package-addons
- ================================= -->
+-->
<project name="Trustedbird Packager" default="build-all">
- <description>Build Trustedbird and add-ons</description>
-
- <property file="server.properties" />
- <property file="package.properties" />
-
- <property name="local.build.dir" value="work" />
- <property name="local.dist.dir" value="dist" />
- <property name="local.tools.dir" value="tools" />
- <property name="local.archive.file" value="trustedbird.svnarchive.tar.gz" />
-
- <!-- ant-contrib library -->
- <taskdef resource="net/sf/antcontrib/antlib.xml">
- <classpath>
- <pathelement location="${local.tools.dir}/ant-contrib-1.0b3.jar" />
- </classpath>
- </taskdef>
-
-
- <!-- =================================
- build-all
- ================================= -->
- <target name="build-all"
- description="Checkout/extract from archive, update and build Trustedbird and add-ons"
- depends="distclean, extract-archive-tb, update-tb, build-tb, package-tb, package-addons">
- </target>
-
-
- <!-- =================================
- distclean
- ================================= -->
- <target name="distclean" description="Clean build/ and dist/ directories">
- <delete dir="${local.build.dir}" />
- <delete dir="${local.dist.dir}" />
- </target>
-
-
- <!-- =================================
- clean-tb
- ================================= -->
- <target name="clean-tb" description="Clean Trustedbird build directory">
- <delete dir="${local.build.dir}/mozilla" />
- </target>
-
-
- <!-- =================================
- clean-addons
- ================================= -->
- <target name="clean-addons" description="Clean built add-ons">
- <delete failonerror="false">
- <fileset dir="${local.dist.dir}">
- <include name="*.xpi" />
- <include name="*.zip" />
- </fileset>
- </delete>
- <delete dir="${local.dist.dir}/updates" />
- </target>
-
-
- <!-- =================================
- checkout-tb
- ================================= -->
- <target name="checkout-tb"
- description="Checkout Trustedbird from SVN"
- depends="clean-tb">
- <mkdir dir="${local.build.dir}" />
- <exec executable="svn" dir="${local.build.dir}" failonerror="true">
- <arg value="co" />
- <arg value="${tb.repository.url}" />
- <arg value="mozilla" />
- </exec>
- </target>
-
-
- <!-- =================================
- extract-archive-tb
- ================================= -->
- <target name="extract-archive-tb"
- description="Extract local archive of Trustedbird"
- depends="clean-tb">
- <if>
- <not>
- <!-- Check if archive exists -->
- <available file="${local.archive.file}" />
- </not>
- <then>
- <antcall target="create-archive-tb" />
- </then>
- <else>
- <!-- Extract archive -->
- <mkdir dir="${local.build.dir}" />
- <exec executable="tar" failonerror="true">
- <arg value="xzf" />
- <arg value="${local.archive.file}" />
- <arg value="-C" />
- <arg value="${local.build.dir}/" />
- </exec>
- </else>
- </if>
- </target>
-
-
- <!-- =================================
- create-archive-tb
- ================================= -->
- <target name="create-archive-tb"
- description="Create local archive of Trustedbird"
- depends="checkout-tb">
- <exec executable="tar" failonerror="true">
- <arg value="czf" />
- <arg value="${local.archive.file}" />
- <arg value="-C" />
- <arg value="${local.build.dir}/" />
- <arg value="mozilla" />
- </exec>
- </target>
-
-
- <!-- =================================
- update-tb
- ================================= -->
- <target name="update-tb" description="Update Trustedbird from SVN">
- <available file="${local.build.dir}/mozilla"
- property="sources.available" />
- <fail message="Trustedbird sources not found! Use targets 'checkout-tb' or 'extract-archive-tb' first."
- unless="sources.available" />
-
- <exec executable="svn" dir="${local.build.dir}" failonerror="true">
- <arg value="up" />
- <arg value="mozilla" />
- </exec>
- </target>
-
-
- <!-- =================================
- -define-config-tb (private)
- ================================= -->
- <target name="-define-config-tb">
- <available file="${local.build.dir}/mozilla"
- property="sources.available" />
- <fail message="Trustedbird sources not found! Use targets 'checkout-tb' or 'extract-archive-tb' first."
- unless="sources.available" />
-
- <condition property="isUnix">
- <os family="unix" />
- </condition>
-
- <if>
- <isset property="isUnix" />
- <then>
- <property name="local.checkbuild.file"
- value="dist/bin/trustedbird" />
- </then>
- <else>
- <property name="local.checkbuild.file"
- value="dist/bin/trustedbird.exe" />
- </else>
- </if>
-
- <!-- Get version -->
- <loadfile property="local.tb.versionfile"
- srcfile="${local.build.dir}/mozilla/version">
- <filterchain>
- <striplinebreaks />
- </filterchain>
- </loadfile>
-
- <!-- Get revision from SVN -->
- <exec executable="sh"
- outputproperty="local.tb.revision"
- failonerror="true">
- <arg value="${local.tools.dir}/getLastChangedRev.sh" />
- <arg value="${local.build.dir}/mozilla" />
- </exec>
-
- <if>
- <isset property="nightly" />
- <then>
- <property name="local.tb.version"
- value="${local.tb.versionfile}.${local.tb.revision}-nightly" />
- </then>
- <else>
- <property name="local.tb.version"
- value="${local.tb.versionfile}.${local.tb.revision}" />
- </else>
- </if>
-
- <!-- Patch config -->
- <copy file="${local.tools.dir}/mozconfig"
- tofile="${local.build.dir}/mozilla/.mozconfig" />
- <touch file="${local.build.dir}/mozilla/directory/c-sdk/ldap/libraries/msdos/winsock/nsldappr32.def" />
- <touch file="${local.build.dir}/mozilla/directory/c-sdk/ldap/libraries/msdos/winsock/nsldap32.def" />
- </target>
-
-
- <!-- =================================
- package-tb-src
- ================================= -->
- <target name="package-tb-src"
- description="Create source Trustedbird package"
- depends="-define-config-tb">
- <available file="${local.build.dir}/mozilla/.mozconfig.out"
- property="not.clean" />
- <fail message="Clean Trustedbird first (targets 'clean-tb' or 'distclean')."
- if="not.clean" />
-
- <mkdir dir="${local.dist.dir}" />
-
- <delete dir="${local.build.dir}/src-package" />
- <mkdir dir="${local.build.dir}/src-package" />
-
- <!-- Make a copy of the directory with cp because ant removes permissions -->
- <exec executable="cp" failonerror="true">
- <arg value="-a" />
- <arg value="${local.build.dir}/mozilla" />
- <arg value="${local.build.dir}/src-package/" />
- </exec>
-
- <!-- Clean directory -->
- <delete includeemptydirs="true">
- <fileset dir="${local.build.dir}/src-package"
- defaultexcludes="false">
- <include name="**/.svn/" />
- </fileset>
- </delete>
-
- <!-- Create source package -->
- <exec executable="tar" failonerror="true">
- <arg value="cjf" />
- <arg value="${local.dist.dir}/${tb.name}_${local.tb.version}_src.tar.bz2" />
- <arg value="-C" />
- <arg value="${local.build.dir}/src-package/" />
- <arg value="mozilla" />
- </exec>
- </target>
-
-
- <!-- =================================
- build-tb
- ================================= -->
- <target name="build-tb"
- description="Build Trustedbird"
- depends="-define-config-tb">
- <!-- Set version file -->
- <if>
- <not>
- <available file="${local.build.dir}/mozilla/mail/config/version.txt-orig" />
- </not>
- <then>
- <move file="${local.build.dir}/mozilla/mail/config/version.txt"
- tofile="${local.build.dir}/mozilla/mail/config/version.txt-orig" />
- </then>
- </if>
- <loadfile property="local.mozilla.version"
- srcfile="${local.build.dir}/mozilla/mail/config/version.txt-orig">
- <filterchain>
- <striplinebreaks />
- </filterchain>
- </loadfile>
- <echo message="${local.mozilla.version}-${tb.name}${local.tb.version}"
- file="${local.build.dir}/mozilla/mail/config/version.txt" />
-
- <!-- Build -->
- <exec executable="make"
- dir="${local.build.dir}/mozilla"
- failonerror="true">
- <!-- Workaround multiple crashes in xulrunner in Ubuntu 8.10 and later
- where "-D_FORTIFY_SOURCE=2" is set by default in GCC -->
- <arg value="CPPFLAGS=-U_FORTIFY_SOURCE" />
- <arg value="-f" />
- <arg value="client.mk" />
- <arg value="build" />
- </exec>
-
- <!-- Restore version file -->
- <move file="${local.build.dir}/mozilla/mail/config/version.txt-orig"
- tofile="${local.build.dir}/mozilla/mail/config/version.txt" />
- </target>
-
-
- <!-- =================================
- package-tb
- ================================= -->
- <target name="package-tb"
- description="Create Trustedbird package"
- depends="-define-config-tb">
- <available file="${local.build.dir}/mozilla/obj/${local.checkbuild.file}"
- property="build.success" />
- <fail message="File ${local.checkbuild.file} not found! Build Trustedbird first."
- unless="build.success" />
-
- <mkdir dir="${local.dist.dir}" />
-
- <if>
- <isset property="isUnix" />
- <then>
- <!-- Create package -->
- <exec executable="make"
- dir="${local.build.dir}/mozilla/obj"
- failonerror="true">
- <arg value="-C" />
- <arg value="mail/installer" />
- </exec>
-
- <!-- Remove existing packages -->
- <delete failonerror="false">
- <fileset dir="${local.dist.dir}">
- <include name="*.tar.gz" />
- <include name="*.deb" />
- </fileset>
- </delete>
-
- <!-- Rename package -->
- <copy todir="${local.dist.dir}/">
- <fileset dir="${local.build.dir}/mozilla/obj/dist">
- <include name="*.tar.gz" />
- </fileset>
- <mapper type="regexp"
- from=".*\.([^\.]+)\.tar\.gz$"
- to="${tb.name}_${local.tb.version}_\1.tar.gz" />
- </copy>
-
- <!-- Create Debian package -->
- <if>
- <available file="/usr/bin/dpkg-deb" />
- <then>
- <copy todir="${local.build.dir}/">
- <fileset dir="${local.build.dir}/mozilla/obj/dist">
- <include name="*.tar.gz" />
- </fileset>
- <mapper type="regexp"
- from="(.*)$"
- to="${tb.name}_${local.tb.version}.tar.gz" />
- </copy>
- <exec executable="sh" failonerror="true">
- <arg value="${local.tools.dir}/createDebianPackage.sh" />
- <arg value="${local.build.dir}" />
- <arg value="${local.build.dir}/${tb.name}_${local.tb.version}.tar.gz" />
- <arg value="${local.tb.version}" />
- <arg value="${local.tools.dir}" />
- </exec>
- <copy file="${local.build.dir}/trustedbird.deb"
- tofile="${local.dist.dir}/${tb.name}_${local.tb.version}_i686.deb" />
- </then>
- </if>
- </then>
- <else>
- <!-- Create package -->
- <exec executable="make"
- dir="${local.build.dir}/mozilla/obj"
- failonerror="true">
- <arg value="-C" />
- <arg value="mail/installer" />
- <arg value="installer" />
- </exec>
-
- <!-- Rename package -->
- <copy todir="${local.dist.dir}/">
- <fileset dir="${local.build.dir}/mozilla/obj/dist/install/sea">
- <include name="*.exe" />
- </fileset>
- <mapper type="regexp"
- from="(.*)$"
- to="${tb.name}_${local.tb.version}_win32.installer.exe" />
- </copy>
- </else>
- </if>
- </target>
-
-
- <!-- =================================
- package-addons
- ================================= -->
- <target name="package-addons"
- description="Get add-ons from SVN and create packages"
- depends="clean-addons">
- <foreach list="${addon.list}"
- target="-package-addon"
- param="local.addon.tempname" />
- </target>
-
-
- <!-- =================================
- package-mrs
- ================================= -->
- <target name="package-mrs"
- description="Get from SVN and package only MRS add-on">
-
- <antcall target="-package-addon">
- <param name="local.addon.tempname" value="mrs" />
- </antcall>
-
- </target>
-
- <!-- =================================
- -define-config-addons (private)
- ================================= -->
- <target name="-define-config-addons">
-
- <mkdir dir="${local.build.dir}" />
- <mkdir dir="${local.dist.dir}" />
-
- <condition property="isUnix">
- <os family="unix" />
- </condition>
-
- <!-- Use a more recent version of sed on Windows -->
- <if>
- <isset property="isUnix" />
- <then>
- <property name="sed.name" value="sed" />
- </then>
- <else>
- <property name="sed.name" value="c:\cygwin\bin\sed.exe" />
- </else>
- </if>
-
- </target>
-
-
- <!-- =================================
- -package-addon (private)
- ================================= -->
- <target name="-package-addon" depends="-define-config-addons">
- <tstamp />
-
- <!-- Get URL of the repository -->
- <propertycopy name="local.addon.repository.url"
- from="addon.${local.addon.tempname}.repository.url" />
-
- <!-- Rename MRS addon for Linux/Windows -->
- <if>
- <equals arg1="${local.addon.tempname}" arg2="mrs" />
- <then>
- <if>
- <isset property="isUnix" />
- <then>
- <property name="local.addon.name"
- value="${local.addon.tempname}-linux-x86" />
- <property name="local.addon.target.platform"
- value="Linux_x86-gcc3" />
- </then>
- <else>
- <property name="local.addon.name"
- value="${local.addon.tempname}-win" />
- <property name="local.addon.target.platform"
- value="WINNT_x86-msvc" />
- </else>
- </if>
- </then>
- <else>
- <property name="local.addon.name"
- value="${local.addon.tempname}" />
- <property name="local.addon.target.platform" value="" />
- </else>
- </if>
-
- <!-- Get addon from SVN -->
- <delete dir="${local.build.dir}/${local.addon.name}" />
- <exec executable="svn" dir="${local.build.dir}" failonerror="true">
- <arg value="co" />
- <arg value="${local.addon.repository.url}" />
- <arg value="${local.addon.name}" />
- </exec>
-
- <!-- Get version -->
- <loadfile property="local.addon.versionfile"
- srcfile="${local.build.dir}/${local.addon.name}/version">
- <filterchain>
- <striplinebreaks />
- </filterchain>
- </loadfile>
-
- <!-- Get update key (public key for signing updates) -->
- <loadfile property="local.update.key" srcfile="updateKey" failonerror="false">
- <filterchain>
- <striplinebreaks />
- </filterchain>
- </loadfile>
- <!-- Default update key if file not found -->
- <property name="local.update.key" value="updates disabled" />
-
- <!-- Get revision from SVN -->
- <if>
- <equals arg1="${local.addon.name}"
- arg2="all-addons-tb2" />
- <then>
- <!-- Get last project revision for all-addons-tb2 -->
- <exec executable="sh"
- outputproperty="local.addon.revision"
- failonerror="true">
- <arg value="${local.tools.dir}/getRevision.sh" />
- <arg value="${local.build.dir}/${local.addon.name}" />
- </exec>
- </then>
- <else>
- <!-- Get last revision of the add-on -->
- <exec executable="sh"
- outputproperty="local.addon.revision"
- failonerror="true">
- <arg value="${local.tools.dir}/getLastChangedRev.sh" />
- <arg value="${local.build.dir}/${local.addon.name}" />
- </exec>
- </else>
- </if>
-
- <if>
- <isset property="nightly" />
- <then>
- <property name="local.addon.version"
- value="${local.addon.versionfile}.${local.addon.revision}-nightly" />
- <property name="local.addon.update.rdf.filename"
- value="update-nightly.rdf" />
- <property name="local.addon.path"
- value="${addon.nightly.url}/${DSTAMP}" />
- </then>
- <else>
- <property name="local.addon.version"
- value="${local.addon.versionfile}.${local.addon.revision}" />
- <property name="local.addon.update.rdf.filename"
- value="update.rdf" />
- <property name="local.addon.path"
- value="${addon.releases.url}/${local.addon.name}" />
- </else>
- </if>
-
- <!-- Copy libtrustedbird.js if file libtrustedbird.js-path exists -->
- <if>
- <available file="${local.build.dir}/${local.addon.name}/libtrustedbird.js-path" />
- <then>
- <exec executable="sh"
- failonerror="true">
- <arg value="${local.tools.dir}/copyLibtrustedbird.sh" />
- <arg value="${local.build.dir}/${local.addon.name}" />
- </exec>
- </then>
- </if>
-
- <!-- XPI file name -->
- <property name="local.addon.filename"
- value="${local.addon.name}_${local.addon.version}.xpi" />
-
- <!-- Remove updateURL and updateKey for addons.mozilla.org -->
- <if>
- <isset property="amo" />
- <then>
- <exec executable="${sed.name}" failonerror="true">
- <arg value="-i" />
- <arg value="s|<em:updateURL>.*</em:updateURL>||" />
- <arg value="${local.build.dir}/${local.addon.name}/install.rdf" />
- </exec>
- <exec executable="${sed.name}" failonerror="true">
- <arg value="-i" />
- <arg value="s|<em:updateKey>.*</em:updateKey>||" />
- <arg value="${local.build.dir}/${local.addon.name}/install.rdf" />
- </exec>
- </then>
- </if>
-
- <!-- Add version -->
- <exec executable="${sed.name}" failonerror="true">
- <arg value="-i" />
- <arg value="s|__VERSION__|${local.addon.version}|" />
- <arg value="${local.build.dir}/${local.addon.name}/install.rdf" />
- <arg value="${local.build.dir}/${local.addon.name}/update.rdf" />
- </exec>
-
- <!-- Add update.rdf URL -->
- <exec executable="${sed.name}" failonerror="true">
- <arg value="-i" />
- <arg value="s|__UPDATE_RDF_URL__|${addon.updates.url}/${local.addon.name}/${local.addon.update.rdf.filename}|" />
- <arg value="${local.build.dir}/${local.addon.name}/install.rdf" />
- </exec>
-
- <!-- Add update key -->
- <exec executable="${sed.name}" failonerror="true">
- <arg value="-i" />
- <arg value="s|__UPDATE_KEY__|${local.update.key}|" />
- <arg value="${local.build.dir}/${local.addon.name}/install.rdf" />
- </exec>
-
- <!-- Add target platform -->
- <exec executable="${sed.name}" failonerror="true">
- <arg value="-i" />
- <arg value="s|__TARGET_PLATFORM__|${local.addon.target.platform}|" />
- <arg value="${local.build.dir}/${local.addon.name}/install.rdf" />
- </exec>
-
- <!-- Add XPI URL -->
- <exec executable="${sed.name}" failonerror="true">
- <arg value="-i" />
- <arg value="s|__XPI_URL__|${local.addon.path}/${local.addon.filename}|" />
- <arg value="${local.build.dir}/${local.addon.name}/update.rdf" />
- </exec>
-
- <!-- Call ant if available -->
- <if>
- <available file="${local.build.dir}/${local.addon.name}/build.xml" />
- <then>
- <ant inheritall="false"
- dir="${local.build.dir}/${local.addon.name}" />
- <property name="local.zip.basedir"
- value="${local.build.dir}/${local.addon.name}/xpi" />
- </then>
- <else>
- <property name="local.zip.basedir"
- value="${local.build.dir}/${local.addon.name}" />
- </else>
- </if>
-
- <!-- Only for special add-on 'all-addons-tb2': copy all already built add-ons -->
- <if>
- <equals arg1="${local.addon.name}"
- arg2="all-addons-tb2" />
- <then>
- <copy todir="${local.build.dir}/${local.addon.name}/">
- <fileset dir="${local.dist.dir}" includes="*.xpi" excludes="mrs-* trustedbird-l10n-* xsmtp* ximfmail* mailXForms* directoryContactTabs*" />
- </copy>
- </then>
- </if>
-
- <!-- Create package -->
- <if>
- <available file="${local.build.dir}/${local.addon.name}/${addon.excludesfile}" />
- <then>
- <zip destfile="${local.dist.dir}/${local.addon.filename}"
- basedir="${local.build.dir}/${local.addon.name}"
- excludes="${addon.excludes}"
- excludesfile="${local.build.dir}/${local.addon.name}/${addon.excludesfile}" />
- </then>
- <else>
- <zip destfile="${local.dist.dir}/${local.addon.filename}"
- basedir="${local.zip.basedir}"
- excludes="${addon.excludes}" />
- </else>
- </if>
-
- <!-- Get hash of XPI file -->
- <exec executable="sh"
- outputproperty="local.update.hash"
- failonerror="true">
- <arg value="${local.tools.dir}/getHash.sh" />
- <arg value="${local.dist.dir}/${local.addon.filename}" />
- </exec>
-
- <!-- Add XPI hash -->
- <exec executable="${sed.name}" failonerror="true">
- <arg value="-i" />
- <arg value="s|__UPDATE_HASH__|${local.update.hash}|" />
- <arg value="${local.build.dir}/${local.addon.name}/update.rdf" />
- </exec>
-
- <!-- Copy update.rdf -->
- <mkdir dir="${local.dist.dir}/updates/${local.addon.name}" />
- <copy file="${local.build.dir}/${local.addon.name}/update.rdf"
- tofile="${local.dist.dir}/updates/${local.addon.name}/${local.addon.update.rdf.filename}" />
-
- <!-- Only for MRS: build and package client API -->
- <if>
- <equals arg1="${local.addon.tempname}" arg2="mrs" />
- <then>
- <ant dir="${local.build.dir}/${local.addon.name}/api/java" />
- <move file="${local.build.dir}/${local.addon.name}/api/java/dist/MessageRemoteServicesJavaAPI.zip"
- tofile="${local.dist.dir}/${local.addon.tempname}-JavaAPI_${local.addon.version}.zip" />
- </then>
- </if>
-
- </target>
+ <description>Build Trustedbird and add-ons</description>
+
+ <property file="server.properties"/>
+ <property file="package.properties"/>
+
+ <property name="local.build.dir" value="work"/>
+ <property name="local.dist.dir" value="dist"/>
+ <property name="local.tools.dir" value="tools"/>
+ <property name="local.archive.file" value="trustedbird.svnarchive.tar.gz"/>
+
+ <!-- ant-contrib library -->
+ <taskdef resource="net/sf/antcontrib/antlib.xml">
+ <classpath>
+ <pathelement location="${local.tools.dir}/ant-contrib-1.0b3.jar"/>
+ </classpath>
+ </taskdef>
+
+
+ <!-- Target: build-all -->
+ <target name="build-all"
+ description="Checkout/extract from archive, update and build Trustedbird and add-ons"
+ depends="distclean, extract-archive-tb, update-tb, build-tb, package-tb, package-addons">
+ </target>
+
+
+ <!-- Target: distclean -->
+ <target name="distclean" description="Clean build/ and dist/ directories">
+ <delete dir="${local.build.dir}"/>
+ <delete dir="${local.dist.dir}"/>
+ </target>
+
+
+ <!-- Target: clean-tb -->
+ <target name="clean-tb" description="Clean Trustedbird build directory">
+ <delete dir="${local.build.dir}/mozilla"/>
+ </target>
+
+
+ <!-- Target: clean-addons -->
+ <target name="clean-addons" description="Clean built add-ons">
+ <delete failonerror="false">
+ <fileset dir="${local.dist.dir}">
+ <include name="*.xpi"/>
+ <include name="*.zip"/>
+ </fileset>
+ </delete>
+ <delete dir="${local.dist.dir}/updates"/>
+ </target>
+
+
+ <!-- Target: checkout-tb -->
+ <target name="checkout-tb" description="Checkout Trustedbird from SVN" depends="clean-tb">
+ <mkdir dir="${local.build.dir}"/>
+ <exec executable="svn" dir="${local.build.dir}" failonerror="true">
+ <arg value="co"/>
+ <arg value="${tb.repository.url}"/>
+ <arg value="mozilla"/>
+ </exec>
+ </target>
+
+
+ <!-- Target: extract-archive-tb -->
+ <target name="extract-archive-tb" description="Extract local archive of Trustedbird" depends="clean-tb">
+ <if>
+ <not>
+ <!-- Check if archive exists -->
+ <available file="${local.archive.file}"/>
+ </not>
+ <then>
+ <antcall target="create-archive-tb"/>
+ </then>
+ <else>
+ <!-- Extract archive -->
+ <mkdir dir="${local.build.dir}"/>
+ <exec executable="tar" failonerror="true">
+ <arg value="xzf"/>
+ <arg value="${local.archive.file}"/>
+ <arg value="-C"/>
+ <arg value="${local.build.dir}/"/>
+ </exec>
+ </else>
+ </if>
+ </target>
+
+
+ <!-- Target: create-archive-tb -->
+ <target name="create-archive-tb" description="Create local archive of Trustedbird" depends="checkout-tb">
+ <exec executable="tar" failonerror="true">
+ <arg value="czf"/>
+ <arg value="${local.archive.file}"/>
+ <arg value="-C"/>
+ <arg value="${local.build.dir}/"/>
+ <arg value="mozilla"/>
+ </exec>
+ </target>
+
+
+ <!-- Target: update-tb -->
+ <target name="update-tb" description="Update Trustedbird from SVN">
+ <available file="${local.build.dir}/mozilla" property="sources.available"/>
+ <fail message="Trustedbird sources not found! Use targets 'checkout-tb' or 'extract-archive-tb' first." unless="sources.available"/>
+
+ <exec executable="svn" dir="${local.build.dir}" failonerror="true">
+ <arg value="up"/>
+ <arg value="mozilla"/>
+ </exec>
+ </target>
+
+
+ <!-- Target: -define-config-tb (private) -->
+ <target name="-define-config-tb">
+ <available file="${local.build.dir}/mozilla" property="sources.available"/>
+ <fail message="Trustedbird sources not found! Use targets 'checkout-tb' or 'extract-archive-tb' first." unless="sources.available"/>
+
+ <condition property="isUnix">
+ <os family="unix"/>
+ </condition>
+
+ <if>
+ <isset property="isUnix"/>
+ <then>
+ <property name="local.checkbuild.file"
+ value="dist/bin/trustedbird"/>
+ </then>
+ <else>
+ <property name="local.checkbuild.file"
+ value="dist/bin/trustedbird.exe"/>
+ </else>
+ </if>
+
+ <!-- Get version -->
+ <loadfile property="local.tb.versionfile"
+ srcfile="${local.build.dir}/mozilla/version">
+ <filterchain>
+ <striplinebreaks/>
+ </filterchain>
+ </loadfile>
+
+ <!-- Get revision from SVN -->
+ <exec executable="sh"
+ outputproperty="local.tb.revision"
+ failonerror="true">
+ <arg value="${local.tools.dir}/getLastChangedRev.sh"/>
+ <arg value="${local.build.dir}/mozilla"/>
+ </exec>
+
+ <if>
+ <isset property="nightly"/>
+ <then>
+ <property name="local.tb.version"
+ value="${local.tb.versionfile}.${local.tb.revision}-nightly"/>
+ </then>
+ <else>
+ <property name="local.tb.version"
+ value="${local.tb.versionfile}.${local.tb.revision}"/>
+ </else>
+ </if>
+
+ <!-- Patch config -->
+ <copy file="${local.tools.dir}/mozconfig"
+ tofile="${local.build.dir}/mozilla/.mozconfig"/>
+ </target>
+
+
+ <!-- Target: package-tb-src -->
+ <target name="package-tb-src" description="Create source Trustedbird package" depends="-define-config-tb">
+ <available file="${local.build.dir}/mozilla/.mozconfig.out" property="not.clean"/>
+ <fail message="Clean Trustedbird first (targets 'clean-tb' or 'distclean')." if="not.clean"/>
+
+ <mkdir dir="${local.dist.dir}"/>
+
+ <delete dir="${local.build.dir}/src-package"/>
+ <mkdir dir="${local.build.dir}/src-package"/>
+
+ <!-- Make a copy of the directory with cp because ant removes permissions -->
+ <exec executable="cp" failonerror="true">
+ <arg value="-a"/>
+ <arg value="${local.build.dir}/mozilla"/>
+ <arg value="${local.build.dir}/src-package/"/>
+ </exec>
+
+ <!-- Clean directory -->
+ <delete includeemptydirs="true">
+ <fileset dir="${local.build.dir}/src-package"
+ defaultexcludes="false">
+ <include name="**/.svn/"/>
+ </fileset>
+ </delete>
+
+ <!-- Create source package -->
+ <exec executable="tar" failonerror="true">
+ <arg value="cjf"/>
+ <arg value="${local.dist.dir}/${tb.name}_${local.tb.version}_src.tar.bz2"/>
+ <arg value="-C"/>
+ <arg value="${local.build.dir}/src-package/"/>
+ <arg value="mozilla"/>
+ </exec>
+ </target>
+
+
+ <!-- Target: build-tb -->
+ <target name="build-tb" description="Build Trustedbird" depends="-define-config-tb">
+ <!-- Set version file -->
+ <if>
+ <not>
+ <available file="${local.build.dir}/mozilla/mail/config/version.txt-orig"/>
+ </not>
+ <then>
+ <move file="${local.build.dir}/mozilla/mail/config/version.txt"
+ tofile="${local.build.dir}/mozilla/mail/config/version.txt-orig"/>
+ </then>
+ </if>
+ <loadfile property="local.mozilla.version"
+ srcfile="${local.build.dir}/mozilla/mail/config/version.txt-orig">
+ <filterchain>
+ <striplinebreaks/>
+ </filterchain>
+ </loadfile>
+ <echo message="${local.mozilla.version}-${tb.name}${local.tb.version}"
+ file="${local.build.dir}/mozilla/mail/config/version.txt"/>
+
+ <!-- Build -->
+ <exec executable="make"
+ dir="${local.build.dir}/mozilla"
+ failonerror="true">
+ <!-- Workaround multiple crashes in xulrunner in Ubuntu 8.10 and later
+ where "-D_FORTIFY_SOURCE=2" is set by default in GCC -->
+ <arg value="CPPFLAGS=-U_FORTIFY_SOURCE"/>
+ <arg value="-f"/>
+ <arg value="client.mk"/>
+ <arg value="build"/>
+ </exec>
+
+ <!-- Restore version file -->
+ <move file="${local.build.dir}/mozilla/mail/config/version.txt-orig"
+ tofile="${local.build.dir}/mozilla/mail/config/version.txt"/>
+ </target>
+
+
+ <!-- Target: package-tb -->
+ <target name="package-tb" description="Create Trustedbird package" depends="-define-config-tb">
+ <available file="${local.build.dir}/mozilla/obj/${local.checkbuild.file}" property="build.success"/>
+ <fail message="File ${local.checkbuild.file} not found! Build Trustedbird first." unless="build.success"/>
+
+ <mkdir dir="${local.dist.dir}"/>
+
+ <if>
+ <isset property="isUnix"/>
+ <then>
+ <!-- Create package -->
+ <exec executable="make"
+ dir="${local.build.dir}/mozilla/obj"
+ failonerror="true">
+ <arg value="-C"/>
+ <arg value="mail/installer"/>
+ </exec>
+
+ <!-- Remove existing packages -->
+ <delete failonerror="false">
+ <fileset dir="${local.dist.dir}">
+ <include name="*.tar.gz"/>
+ <include name="*.deb"/>
+ </fileset>
+ </delete>
+
+ <!-- Rename package -->
+ <copy todir="${local.dist.dir}/">
+ <fileset dir="${local.build.dir}/mozilla/obj/dist">
+ <include name="*.tar.gz"/>
+ </fileset>
+ <mapper type="regexp"
+ from=".*\.([^\.]+)\.tar\.gz$"
+ to="${tb.name}_${local.tb.version}_\1.tar.gz"/>
+ </copy>
+
+ <!-- Create Debian package -->
+ <if>
+ <available file="/usr/bin/dpkg-deb"/>
+ <then>
+ <copy todir="${local.build.dir}/">
+ <fileset dir="${local.build.dir}/mozilla/obj/dist">
+ <include name="*.tar.gz"/>
+ </fileset>
+ <mapper type="regexp"
+ from="(.*)$"
+ to="${tb.name}_${local.tb.version}.tar.gz"/>
+ </copy>
+ <exec executable="sh" failonerror="true">
+ <arg value="${local.tools.dir}/createDebianPackage.sh"/>
+ <arg value="${local.build.dir}"/>
+ <arg value="${local.build.dir}/${tb.name}_${local.tb.version}.tar.gz"/>
+ <arg value="${local.tb.version}"/>
+ <arg value="${local.tools.dir}"/>
+ </exec>
+ <copy file="${local.build.dir}/trustedbird.deb"
+ tofile="${local.dist.dir}/${tb.name}_${local.tb.version}_i686.deb"/>
+ </then>
+ </if>
+ </then>
+ <else>
+ <!-- Create package -->
+ <exec executable="make"
+ dir="${local.build.dir}/mozilla/obj"
+ failonerror="true">
+ <arg value="-C"/>
+ <arg value="mail/installer"/>
+ <arg value="installer"/>
+ </exec>
+
+ <!-- Rename package -->
+ <copy todir="${local.dist.dir}/">
+ <fileset dir="${local.build.dir}/mozilla/obj/dist/install/sea">
+ <include name="*.exe"/>
+ </fileset>
+ <mapper type="regexp"
+ from="(.*)$"
+ to="${tb.name}_${local.tb.version}_win32.installer.exe"/>
+ </copy>
+ </else>
+ </if>
+ </target>
+
+
+ <!-- Target: package-addons -->
+ <target name="package-addons" description="Get add-ons from SVN and create packages" depends="clean-addons">
+ <foreach list="${addon.list}" target="-package-addon" param="local.addon.tempname"/>
+ </target>
+
+
+ <!-- Target: package-mrs -->
+ <target name="package-mrs"
+ description="Get from SVN and package only MRS add-on">
+
+ <antcall target="-package-addon">
+ <param name="local.addon.tempname" value="mrs"/>
+ </antcall>
+
+ </target>
+
+ <!-- Target: -define-config-addons (private) -->
+ <target name="-define-config-addons">
+
+ <mkdir dir="${local.build.dir}"/>
+ <mkdir dir="${local.dist.dir}"/>
+
+ <condition property="isUnix">
+ <os family="unix"/>
+ </condition>
+
+ <!-- Use a more recent version of sed on Windows -->
+ <if>
+ <isset property="isUnix"/>
+ <then>
+ <property name="sed.name" value="sed"/>
+ </then>
+ <else>
+ <property name="sed.name" value="c:\cygwin\bin\sed.exe"/>
+ </else>
+ </if>
+
+ </target>
+
+
+ <!-- Target: -package-addon (private) -->
+ <target name="-package-addon" depends="-define-config-addons">
+ <tstamp/>
+
+ <!-- Get URL of the repository -->
+ <propertycopy name="local.addon.repository.url"
+ from="addon.${local.addon.tempname}.repository.url"/>
+
+ <!-- Rename MRS addon for Linux/Windows -->
+ <if>
+ <equals arg1="${local.addon.tempname}" arg2="mrs"/>
+ <then>
+ <if>
+ <isset property="isUnix"/>
+ <then>
+ <property name="local.addon.name"
+ value="${local.addon.tempname}-linux-x86"/>
+ <property name="local.addon.target.platform"
+ value="Linux_x86-gcc3"/>
+ </then>
+ <else>
+ <property name="local.addon.name"
+ value="${local.addon.tempname}-win"/>
+ <property name="local.addon.target.platform"
+ value="WINNT_x86-msvc"/>
+ </else>
+ </if>
+ </then>
+ <else>
+ <property name="local.addon.name"
+ value="${local.addon.tempname}"/>
+ <property name="local.addon.target.platform" value=""/>
+ </else>
+ </if>
+
+ <!-- Get addon from SVN -->
+ <delete dir="${local.build.dir}/${local.addon.name}"/>
+ <exec executable="svn" dir="${local.build.dir}" failonerror="true">
+ <arg value="co"/>
+ <arg value="${local.addon.repository.url}"/>
+ <arg value="${local.addon.name}"/>
+ </exec>
+
+ <!-- Get version -->
+ <loadfile property="local.addon.versionfile"
+ srcfile="${local.build.dir}/${local.addon.name}/version">
+ <filterchain>
+ <striplinebreaks/>
+ </filterchain>
+ </loadfile>
+
+ <!-- Get update key (public key for signing updates) -->
+ <loadfile property="local.update.key" srcfile="updateKey" failonerror="false">
+ <filterchain>
+ <striplinebreaks/>
+ </filterchain>
+ </loadfile>
+ <!-- Default update key if file not found -->
+ <property name="local.update.key" value="updates disabled"/>
+
+ <!-- Get revision from SVN -->
+ <if>
+ <or>
+ <equals arg1="${local.addon.name}"
+ arg2="all-addons-tb2"/>
+ <equals arg1="${local.addon.name}"
+ arg2="all-addons-tb3"/>
+ </or>
+ <then>
+ <!-- Get last project revision for all-addons -->
+ <exec executable="sh"
+ outputproperty="local.addon.revision"
+ failonerror="true">
+ <arg value="${local.tools.dir}/getRevision.sh"/>
+ <arg value="${local.build.dir}/${local.addon.name}"/>
+ </exec>
+ </then>
+ <else>
+ <!-- Get last revision of the add-on -->
+ <exec executable="sh"
+ outputproperty="local.addon.revision"
+ failonerror="true">
+ <arg value="${local.tools.dir}/getLastChangedRev.sh"/>
+ <arg value="${local.build.dir}/${local.addon.name}"/>
+ </exec>
+ </else>
+ </if>
+
+ <if>
+ <isset property="nightly"/>
+ <then>
+ <property name="local.addon.version"
+ value="${local.addon.versionfile}.${local.addon.revision}-nightly"/>
+ <property name="local.addon.update.rdf.filename"
+ value="update-nightly.rdf"/>
+ <property name="local.addon.path"
+ value="${addon.nightly.url}/${DSTAMP}"/>
+ </then>
+ <else>
+ <property name="local.addon.version"
+ value="${local.addon.versionfile}.${local.addon.revision}"/>
+ <property name="local.addon.update.rdf.filename"
+ value="update.rdf"/>
+ <property name="local.addon.path"
+ value="${addon.releases.url}/${local.addon.name}"/>
+ </else>
+ </if>
+
+ <!-- Copy libtrustedbird.js if file libtrustedbird.js-path exists -->
+ <if>
+ <available file="${local.build.dir}/${local.addon.name}/libtrustedbird.js-path"/>
+ <then>
+ <exec executable="sh"
+ failonerror="true">
+ <arg value="${local.tools.dir}/copyLibtrustedbird.sh"/>
+ <arg value="${local.build.dir}/${local.addon.name}"/>
+ </exec>
+ </then>
+ </if>
+
+ <!-- XPI file name -->
+ <property name="local.addon.filename"
+ value="${local.addon.name}_${local.addon.version}.xpi"/>
+
+ <!-- Remove updateURL and updateKey for addons.mozilla.org -->
+ <if>
+ <isset property="amo"/>
+ <then>
+ <exec executable="${sed.name}" failonerror="true">
+ <arg value="-i"/>
+ <arg value="s|<em:updateURL>.*</em:updateURL>||"/>
+ <arg value="${local.build.dir}/${local.addon.name}/install.rdf"/>
+ </exec>
+ <exec executable="${sed.name}" failonerror="true">
+ <arg value="-i"/>
+ <arg value="s|<em:updateKey>.*</em:updateKey>||"/>
+ <arg value="${local.build.dir}/${local.addon.name}/install.rdf"/>
+ </exec>
+ </then>
+ </if>
+
+ <!-- Add version -->
+ <exec executable="${sed.name}" failonerror="true">
+ <arg value="-i"/>
+ <arg value="s|__VERSION__|${local.addon.version}|"/>
+ <arg value="${local.build.dir}/${local.addon.name}/install.rdf"/>
+ <arg value="${local.build.dir}/${local.addon.name}/update.rdf"/>
+ </exec>
+
+ <!-- Add update.rdf URL -->
+ <exec executable="${sed.name}" failonerror="true">
+ <arg value="-i"/>
+ <arg value="s|__UPDATE_RDF_URL__|${addon.updates.url}/${local.addon.name}/${local.addon.update.rdf.filename}|"/>
+ <arg value="${local.build.dir}/${local.addon.name}/install.rdf"/>
+ </exec>
+
+ <!-- Add update key -->
+ <exec executable="${sed.name}" failonerror="true">
+ <arg value="-i"/>
+ <arg value="s|__UPDATE_KEY__|${local.update.key}|"/>
+ <arg value="${local.build.dir}/${local.addon.name}/install.rdf"/>
+ </exec>
+
+ <!-- Add target platform -->
+ <exec executable="${sed.name}" failonerror="true">
+ <arg value="-i"/>
+ <arg value="s|__TARGET_PLATFORM__|${local.addon.target.platform}|"/>
+ <arg value="${local.build.dir}/${local.addon.name}/install.rdf"/>
+ </exec>
+
+ <!-- Add XPI URL -->
+ <exec executable="${sed.name}" failonerror="true">
+ <arg value="-i"/>
+ <arg value="s|__XPI_URL__|${local.addon.path}/${local.addon.filename}|"/>
+ <arg value="${local.build.dir}/${local.addon.name}/update.rdf"/>
+ </exec>
+
+ <!-- Call ant if available -->
+ <if>
+ <available file="${local.build.dir}/${local.addon.name}/build.xml"/>
+ <then>
+ <ant inheritall="false"
+ dir="${local.build.dir}/${local.addon.name}"/>
+ <property name="local.zip.basedir"
+ value="${local.build.dir}/${local.addon.name}/xpi"/>
+ </then>
+ <else>
+ <property name="local.zip.basedir"
+ value="${local.build.dir}/${local.addon.name}"/>
+ </else>
+ </if>
+
+ <!-- Only for special add-ons 'all-addons-tb2': copy all already built add-ons -->
+ <if>
+ <equals arg1="${local.addon.name}"
+ arg2="all-addons-tb2"/>
+ <then>
+ <copy todir="${local.build.dir}/${local.addon.name}/">
+ <fileset dir="${local.dist.dir}" includes="*.xpi" excludes="all-addons* mailXForms* mrs-* directoryContactTabs* trustedbird-l10n-* ximfmail* xsmtp*"/>
+ </copy>
+ </then>
+ </if>
+
+ <!-- Only for special add-ons 'all-addons-tb3': copy all already built add-ons -->
+ <if>
+ <equals arg1="${local.addon.name}"
+ arg2="all-addons-tb3"/>
+ <then>
+ <copy todir="${local.build.dir}/${local.addon.name}/">
+ <fileset dir="${local.dist.dir}" includes="*.xpi" excludes="all-addons* card-viewer-extended* check-recipients* mdn-extended* mrs-* send-format-ldap* trustedbird-l10n-* ximfmail* xsmtp*"/>
+ </copy>
+ </then>
+ </if>
+
+ <!-- Create package -->
+ <if>
+ <available file="${local.build.dir}/${local.addon.name}/${addon.excludesfile}"/>
+ <then>
+ <zip destfile="${local.dist.dir}/${local.addon.filename}"
+ basedir="${local.build.dir}/${local.addon.name}"
+ excludes="${addon.excludes}"
+ excludesfile="${local.build.dir}/${local.addon.name}/${addon.excludesfile}"/>
+ </then>
+ <else>
+ <zip destfile="${local.dist.dir}/${local.addon.filename}"
+ basedir="${local.zip.basedir}"
+ excludes="${addon.excludes}"/>
+ </else>
+ </if>
+
+ <!-- Get hash of XPI file -->
+ <exec executable="sh"
+ outputproperty="local.update.hash"
+ failonerror="true">
+ <arg value="${local.tools.dir}/getHash.sh"/>
+ <arg value="${local.dist.dir}/${local.addon.filename}"/>
+ </exec>
+
+ <!-- Add XPI hash -->
+ <exec executable="${sed.name}" failonerror="true">
+ <arg value="-i"/>
+ <arg value="s|__UPDATE_HASH__|${local.update.hash}|"/>
+ <arg value="${local.build.dir}/${local.addon.name}/update.rdf"/>
+ </exec>
+
+ <!-- Copy update.rdf -->
+ <mkdir dir="${local.dist.dir}/updates/${local.addon.name}"/>
+ <copy file="${local.build.dir}/${local.addon.name}/update.rdf"
+ tofile="${local.dist.dir}/updates/${local.addon.name}/${local.addon.update.rdf.filename}"/>
+
+ <!-- Only for MRS add-on: build and package client API -->
+ <if>
+ <equals arg1="${local.addon.tempname}" arg2="mrs"/>
+ <then>
+ <ant dir="${local.build.dir}/${local.addon.name}/api/java"/>
+ <move file="${local.build.dir}/${local.addon.name}/api/java/dist/MessageRemoteServicesJavaAPI.zip"
+ tofile="${local.dist.dir}/${local.addon.tempname}-JavaAPI_${local.addon.version}.zip"/>
+ </then>
+ </if>
+
+ </target>
</project>