build.xml
<project name="eurekster" default="xpi" basedir=".">
<!-- build properties -->
<property file="build.properties"/>
<property file="../application.properties"/>
<!-- used directories -->
<property name="build.dir" value="build"/>
<!-- update test profile -->
<target name="copyjar" depends="jar" if="copyjar.dir" description="Copy new jar file into Firefox chrome folder.">
<copy todir="${copyjar.dir}" overwrite="true" file="${build.dir}/chrome/${chrome.jar.filename}"/>
</target>
<!-- init -->
<target name="init" description="Initialize project.">
<tstamp/>
</target>
<!-- clean -->
<target name="clean" description="Clean up created files.">
<delete dir="${build.dir}" />
<delete file="${chrome.xpi.filename}" />
</target>
<!-- ask for target browser if not set -->
<target name="ask-browser" unless="browser.name" description="Ask for target browser.">
<input addproperty="browser.name" message="Enter the target browser " validargs="mozilla,firefox" defaultvalue="firefox"/>
</target>
<!-- prepare build -->
<target name="prepare-build" depends="init,ask-browser" description="Prepare files.">
<property name="chrome.xpi.filename" value="${chrome.ident}-${browser.name}-${extension.version}.xpi" />
<mkdir dir="${build.dir}"/>
<copy todir="${build.dir}">
<fileset dir="${basedir}">
<include name="content/**"/>
<include name="locale/**"/>
<include name="skin/**"/>
<include name="defaults/**"/>
</fileset>
</copy>
<copy todir="${build.dir}">
<fileset dir="${basedir}/config/"/>
</copy>
</target>
<!-- do all the messing around with the code -->
<target name="patch" depends="prepare-build" description="Patch files for specified browser.">
<antcall target="strip-debug">
<param name="patch.dir" value="${build.dir}"/>
</antcall>
<!-- target dependent code -->
<condition property="target.is.mozilla">
<equals arg1="${browser.name}" arg2="mozilla"/>
</condition>
<condition property="target.is.firefox">
<equals arg1="${browser.name}" arg2="firefox"/>
</condition>
<antcall target="patch-mozilla"/>
<antcall target="patch-firefox"/>
</target>
<!-- mozila specific patching -->
<target name="patch-mozilla" depends="prepare-build" if="target.is.mozilla" description="Patching for Mozilla.">
<echo message="Patching for Mozilla"/>
<antcall target="preproccess">
<param name="patch.dir" value="${build.dir}"/>
<param name="enable.pattern" value="mozilla"/>
<param name="disable.pattern" value="firefox"/>
</antcall>
<property name="browser.id" value="${browser.mz.id}"/>
<property name="browser.minVersion" value="${browser.mz.minVersion}"/>
<property name="browser.maxVersion" value="${browser.mz.maxVersion}"/>
<property name="browser.chromename" value="${browser.mz.chromename}"/>
<antcall target="version">
<param name="patch.dir" value="${build.dir}"/>
</antcall>
</target>
<!-- firefox specific patching -->
<target name="patch-firefox" depends="prepare-build" if="target.is.firefox" description="Patching for firefox.">
<echo message="Patching for firefox"/>
<antcall target="preproccess">
<param name="patch.dir" value="${build.dir}"/>
<param name="enable.pattern" value="firefox"/>
<param name="disable.pattern" value="mozilla"/>
</antcall>
<property name="browser.id" value="${browser.fx.id}"/>
<property name="browser.minVersion" value="${browser.fx.minVersion}"/>
<property name="browser.maxVersion" value="${browser.fx.maxVersion}"/>
<property name="browser.chromename" value="${browser.fx.chromename}"/>
<antcall target="version">
<param name="patch.dir" value="${build.dir}"/>
</antcall>
</target>
<!-- version all source files -->
<target name="version" description="Ant property style substitutions.">
<echo message="Versioning ${patch.dir}/** ..."/>
<!-- '$$': escape Ant property expansion, '\': escape regexp '$' handling, '\}' required for JDK regexp implementation -->
<replaceregexp match="\$$\{extension.id\}" replace="${extension.id}" flags="g"><fileset dir="${patch.dir}"/></replaceregexp>
<replaceregexp match="\$$\{extension.version\}" replace="${extension.version}" flags="g"><fileset dir="${patch.dir}"/></replaceregexp>
<replaceregexp match="\$$\{extension.author\}" replace="${extension.author}" flags="g"><fileset dir="${patch.dir}"/></replaceregexp>
<replaceregexp match="\$$\{extension.name\}" replace="${extension.name}" flags="g"><fileset dir="${patch.dir}"/></replaceregexp>
<replaceregexp match="\$$\{extension.description\}" replace="${extension.description}" flags="g"><fileset dir="${patch.dir}"/></replaceregexp>
<replaceregexp match="\$$\{extension.homepage\}" replace="${extension.homepage}" flags="g"><fileset dir="${patch.dir}"/></replaceregexp>
<replaceregexp match="\$$\{browser.id\}" replace="${browser.id}" flags="g"><fileset dir="${patch.dir}"/></replaceregexp>
<replaceregexp match="\$$\{browser.minVersion\}" replace="${browser.minVersion}" flags="g"><fileset dir="${patch.dir}"/></replaceregexp>
<replaceregexp match="\$$\{browser.maxVersion\}" replace="${browser.maxVersion}" flags="g"><fileset dir="${patch.dir}"/></replaceregexp>
<replaceregexp match="\$$\{browser.chromename\}" replace="${browser.chromename}" flags="g"><fileset dir="${patch.dir}"/></replaceregexp>
<replaceregexp match="\$$\{chrome.ident\}" replace="${chrome.ident}" flags="g"><fileset dir="${patch.dir}"/></replaceregexp>
<replaceregexp match="\$$\{chrome.jar.filename\}" replace="${chrome.jar.filename}" flags="g"><fileset dir="${patch.dir}"/></replaceregexp>
</target>
<!-- preproccessor for conditional code -->
<target name="preproccess" description="Simple regexp based preproccessor.">
<echo message="Preproccess ${patch.dir}/** ..."/>
<!-- enable -->
<replaceregexp match="<#${enable.pattern}([^\#]*)#>" replace="\1" flags="gs"><fileset dir="${patch.dir}"/></replaceregexp>
<!-- disable -->
<replaceregexp match="(<#${disable.pattern}[^\#]*#>)" replace="" flags="gs"><fileset dir="${patch.dir}"/></replaceregexp>
</target>
<!-- strip debug code -->
<target name="strip-debug" if="nodebug" description="Remove debug code.">
<echo message="Remove debug code ${patch.dir}/** ..."/>
<!-- function calls -->
<replaceregexp match="\s+eurekster_dump\([^)]*\);\n?" replace="" flags="gm"><fileset dir="${patch.dir}"/></replaceregexp>
<replaceregexp match="\s+eurekster_trace\([^)]*\);\n?" replace="" flags="gm"><fileset dir="${patch.dir}"/></replaceregexp>
</target>
<!-- use new chrome.manifest -->
<target name="enable-manifest" if="manifest" description="Use new chrome.manifest.">
<echo message="Setup chrome.manifest ..."/>
<replaceregexp match="<em:file.*em:file>" replace="" flags="gs" file="${build.dir}/install.rdf"/>
<delete>
<fileset dir="${build.dir}" includes="**/contents.rdf"/>
</delete>
</target>
<!-- build extension jar -->
<target name="jar" depends="prepare-build,patch,enable-manifest" description="Build extension .jar file.">
<mkdir dir="${build.dir}/chrome/"/>
<zip zipfile="${build.dir}/chrome/${chrome.jar.filename}">
<zipfileset dir="${build.dir}">
<include name="content/**"/>
<include name="locale/**"/>
<include name="skin/**"/>
</zipfileset>
</zip>
</target>
<!-- build xip -->
<target name="xpi" depends="clean,jar" description="Build extension .xpi file.">
<mkdir dir="dist"/>
<zip zipfile="dist/${chrome.xpi.filename}">
<zipfileset dir="${build.dir}" includes="chrome/${chrome.jar.filename}"/>
<zipfileset dir="${build.dir}" includes="install*"/>
<zipfileset dir="${build.dir}" includes="defaults/**"/>
</zip>
</target>
</project>