<?xml version="1.0" ?>

<!-- This Ant build file was contributed by Paul McLanahan.  pmclanahan@gmail.com.
    Added template and version numbers johnjbarton@johnjbarton.com
    Added unexplore targets to strip trace for distribution version.
-->

<project name="firebug" default="createBranchXPI">


    <!-- Setting properties -->
    <target name="local-check">
        <available file="${basedir}/local.properties"
           property="local.properties.available"/>
    </target>

    <target name="properties-local"
          if="local.properties.available"
          depends="local-check">
      <echo message="Loading local properties file"/>
      <property file="local.properties"/>
    </target>

    <target name="no-properties-local"
            unless="local.properties.available"
            depends="local-check">
          <echo message="No local properties file, setting defaults"/>
        <property name="install.dir" value="OperatingSystemPathTo:Profiles/fireclipse/"/>
        <property name="xpidl.exe" value="OperatingSystemPathTo:xpidl.exe"/>
        <property name="update.path" value="http://getfirebug.com/releases/firebug"/>
    </target>

    <target name="version" depends="properties-local, no-properties-local" description="Compute version number">
        <tstamp/>
        <property name="build_dir" location="./build" />
        <property name="VERSION"  value="${BRANCH}${RELEASE}${TRUNK}"/>
        <mkdir dir="${build_dir}/dist" />
        <property name="dist_dir" location="${build_dir}/dist" />
        <property name="FIREBUG-XPI" value="firebug-${VERSION}.xpi"/>
    </target>

    <!-- eg
        RELEASE=.88
        BRANCH=eval
        TRUNK=.1.05
        -->
    <property file="branch.properties" />

    <!-- Project directories -->
    <property name="src_dir" location="." />
    <property name="build_dir" location="./build" />
    <property name="dist_dir" location="./dist" />
    <property name="unexplore.dir" location="../../trunk" />
    <!-- relative to branches/firebug1.1 should be unexplore.dir -->

    <property name="excludes" value="**/.*, **/*.jar, **/*.db" />
    <property name="components_dir" location="${src_dir}/components" />
    <available file="${src_dir}/aptanadebugger" property="aptanadebugger"/>

    <!-- Targets -->
    <target name="clean">
        <delete dir="${build_dir}" />
        <delete dir="${dist_dir}" />
    </target>

    <!-- Expand templates -->
    <target name="install-dependency" description="test tpl files">
        <uptodate property="install.expansion.notRequired" targetfile="install.rdf">
            <srcfiles dir="${src_dir}" includes="install.rdf.tpl.xml, branch.properties"/>
        </uptodate>
    </target>

    <target name="update-dependency" description="test update files">
        <condition property="update.expansion.notRequired">
            <or>
                <not>
                    <available file="update.rdf.tpl.xml"/>
                </not>
                <uptodate targetfile="update.rdf">
                    <srcfiles dir="${src_dir}" includes="update.rdf.tpl.xml, branch.properties"/>
                </uptodate>
            </or>
        </condition>
    </target>

    <target name="expand-templates" depends="expand-install-template, expand-update-template, verify-update-template-expansion" description="Fill in version info">
    </target>
    <target name="expand-install-template" depends="install-dependency, version" unless="install.expansion.notRequired" >
        <copy file="${src_dir}/install.rdf.tpl.xml"
               tofile="install.rdf"
               overwrite="true">
               <filterchain>
                       <replacetokens>
                            <token key="VERSION" value="${VERSION}"/>
                            <token key="UPDATEPATH" value="${update.path}/${BRANCH}"/>
                              <token key="EXPERIMENTORURL" value="http://www.almaden.ibm.com/u/bartonjj"/>
                       </replacetokens>
               </filterchain>
        </copy>
    </target>

    <target name="expand-update-template" depends="update-dependency, version" unless="update.expansion.notRequired" >
        <copy file="${src_dir}/update.rdf.tpl.xml"
               tofile="update.rdf"
               overwrite="true">
               <filterchain>
                       <replacetokens>
                            <token key="VERSION" value="${VERSION}"/>
                            <token key="UPDATEPATH" value="${update.path}/${BRANCH}"/>
                              <token key="EXPERIMENTORURL" value="http://www.almaden.ibm.com/u/bartonjj"/>
                       </replacetokens>
               </filterchain>
        </copy>
        <echo message="expanded ${src_dir}/update.rdf.tpl.xml"/>
    </target>
    <target name="verify-update-template-expansion" depends="update-dependency" if="update.expansion.notRequired">
        <echo message="update.expansion.notRequired true"/>
    </target>

    <!-- Incremental Build Targets -->
    <target name="incremental" depends="version, expand-templates, copy-to-extensions, adjust-chrome-manifests" />
    <target name="copy-to-extensions" depends="clean-reg, clean-xpti"
        description="Incremental Development">
        <copy todir="${install.dir}extensions/firebug@software.joehewitt.com" >
            <fileset dir=".">
                <exclude name="build/**"/>
                <exclude name="dist/**"/>
                <exclude name="lite/**"/>
            </fileset>
        </copy>
    </target>

    <target name="adjust-chrome-manifests">
        <!-- Adjust chrome.manifest for direct read not jar files -->
        <replaceregexp match="jar:chrome/firebug\.jar!/" replace="" flags="g">
            <fileset dir="${install.dir}extensions/firebug@software.joehewitt.com" includes="**/chrome.manifest"/>
        </replaceregexp>
    </target>

    <target name="firebug-service" description="Check compreg.dat when service changes">
        <uptodate property="deleteCompreg.notRequired" srcfile="./components/firebug-service.js" targetfile="${install.dir}/compreg.dat" />
    </target>
    <target name="clean-reg" depends="firebug-service" unless="deleteCompreg.notRequired"
        description="Delete compreg.dat to reload service" >
        <delete file="${install.dir}/compreg.dat"/>
    </target>

    <!-- IDL/XPT Targets -->
    <target name="idl" description="test idl">
        <uptodate property="xpidl.notRequired" srcfile="./components/nsIFireBug.idl" targetfile="./components/nsIFireBug.xpt" />
    </target>

    <target name="xpt" depends="idl" description="compile idl" unless="xpidl.notRequired">
        <exec dir="./components" executable="${xpidl.exe}"><arg  line="-v -m typelib nsIFireBug.idl"/></exec>
    </target>

    <target name="xpti" depends="xpt" description="Check xpti.dat to when .xpt changes">
        <uptodate property="deleteXPTI.notRequired" srcfile="./components/nsIFireBug.xpt" targetfile="${install.dir}/xpti.dat" />
    </target>

    <target name="clean-xpti" depends="xpti" unless="deleteXPTI.notRequired"
        description="Delete xpti.dat to reload xpt" >
            <delete file="${install.dir}/xpti.dat"/>
    </target>

    <target name="copy-xpt" depends="xpt">
        <copy todir="./components">
            <fileset dir="firebug">
                <include name="*.idl"/>
                <include name="*.xpt"/>
            </fileset>
        </copy>
    </target>

    <!-- Distribution XPI Targets -->
    <target name="createChromeJAR">
        <mkdir dir="${build_dir}" />
        <zip destfile="${build_dir}/${ant.project.name}.jar" update="true" basedir="${src_dir}"
            includes="content/**, locale/**, skin/**" excludes="${excludes}"/>
    </target>

    <target name="createPlatformJARs">
        <mkdir dir="${build_dir}/Darwin" />
        <mkdir dir="${build_dir}/Linux" />
        <mkdir dir="${build_dir}/linux-gnu" />
        <mkdir dir="${build_dir}/WINNT" />
        <zip destfile="${build_dir}/Darwin/${ant.project.name}.jar" update="true"
            basedir="${src_dir}/platform/Darwin" includes="skin/**" excludes="${excludes}" />
        <zip destfile="${build_dir}/Linux/${ant.project.name}.jar" update="true"
            basedir="${src_dir}/platform/Linux"
            includes="skin/**"
            excludes="${excludes}"
        />
        <zip destfile="${build_dir}/linux-gnu/${ant.project.name}.jar" update="true"
            basedir="${src_dir}/platform/linux-gnu"
            includes="skin/**"
            excludes="${excludes}"
        />
        <zip destfile="${build_dir}/WINNT/${ant.project.name}.jar" update="true"
            basedir="${src_dir}/platform/WINNT"
            includes="skin/**"
            excludes="${excludes}"
        />
    </target>

    <target name="zipIntoXPI" depends="clean, createChromeJAR, createAptanaJAR">
        <mkdir dir="${dist_dir}" />
        <copy todir="${build_dir}">
            <fileset dir="${src_dir}" includes="*.manifest"/>
        </copy>
        <antcall target="integrateAptana"/>
        <zip destfile="${dist_dir}/${ant.project.name}.xpi" update="true">
            <zipfileset dir="${build_dir}" includes="*.jar" prefix="chrome" />
            <zipfileset dir="${src_dir}" includes="icons/**" prefix="chrome" excludes="${excludes}" />
            <zipfileset dir="${src_dir}/platform" includes="**" prefix="platform" excludes="${excludes}, **/skin/**" />
            <zipfileset dir="${src_dir}/components" includes="*.js" prefix="components" />
            <zipfileset dir="${src_dir}/components" includes="*.xpt" prefix="components" />
            <zipfileset dir="${src_dir}/defaults" includes="**" prefix="defaults" excludes="${excludes}" />
            <zipfileset dir="${src_dir}" includes="install.rdf" />
            <zipfileset dir="${build_dir}" includes="*.manifest" />
        </zip>
    </target>

    <target name="createDistributionXPI" depends="zipIntoXPI" >
        <copy file="${dist_dir}/${ant.project.name}.xpi" tofile="${dist_dir}/${ant.project.name}.xpi.zip" />
    </target>

    <target name="createBranchXPI" depends="version, expand-templates, zipIntoXPI" >
        <move file="${dist_dir}/firebug.xpi" tofile="${dist_dir}/${FIREBUG-XPI}"/>
        <copy file="update.rdf" tofile="${dist_dir}/update.rdf" />
    </target>


    <!-- Trace Removal Targets: copy this dir to unexplore.dir, strip lines with /*@explore*/ -->
    <target name="clean-unexplore"
        description="Delete contents of unexplore directory" >
        <fail>
            <condition>
                   <not>
                    <isset property="unexplore.dir"/>
               </not>
             </condition>
        </fail>
        <delete includeEmptyDirs="true">
            <fileset dir="${unexplore.dir}" includes="**/*" excludes="**/.svn"/>
        </delete>
    </target>

    <target name="copy-to-unexplore" depends="xpt"
        description="copy to clean out tracing code before xpi">
        <copy todir="${unexplore.dir}" >
            <fileset dir=".">
                <exclude name="build/**"/>
                <exclude name="dist/**"/>
                <exclude name="lite/**"/>
                <exclude name="aptanadebugger/**"/>
                <exclude name="**/.svn"/>
                <exclude name="update.rdf"/>
                <exclude name="install.rdf"/>
            </fileset>
        </copy>
    </target>


    <target name="unexplore" depends="version, expand-templates, clean-unexplore, copy-to-unexplore">
        <replaceregexp match=".*/\*@explore\*/.*\n" replace="" flags="g">
            <fileset dir="${unexplore.dir}" includes="**/*.js"/>
            <fileset dir="${unexplore.dir}" includes="**/*.xul"/>
        </replaceregexp>
        <echo message="Removing X for explore from RELEASE in ${unexplore.dir}/branch.properties"/>
        <replaceregexp match="(RELEASE=[^X]*)X" replace="\1" file="${unexplore.dir}/branch.properties"/>
        <echo message="Build Distribution XPI in ${unexplore.dir}"/>
        <ant target="createBranchXPI" dir="${unexplore.dir}" inheritAll="false"/>
        <delete file="${unexplore.dir}/update.rdf.tpl.xml"/> <!-- Freeze update.rdf in future builds -->
        <echo message="** Now use McCoy to sign update.rdf **"/>
    </target>

    <target name="createAptanaJAR" if="aptanadebugger">
        <echo message="Create aptanadebugger.jar"/>
        <mkdir dir="${build_dir}" />
        <zip destfile="${build_dir}/aptanadebugger.jar" update="true" basedir="${src_dir}/aptanadebugger/"
            includes="content/**, locale/**, skin/**" excludes="${excludes}"/>
    </target>

    <target name="integrateAptana" if="aptanadebugger">
        <echo message="Integrate AptanaDebugger"/>
        <concat destfile="${build_dir}/chrome.manifest" force="yes">
            <fileset file="${src_dir}/chrome.manifest"/>
            <fileset file="${src_dir}/aptanadebugger/chrome.manifest"/>
        </concat>
    </target>


</project>
