<project name="Build specific targets and properties" default="build" basedir=".">

    <!-- Note to be cross-platform, "environment variables" are only appropriate for
        some variables, e.g. ones we set, since properties are case sensitive, even if
        the environment variables on your operating system are not, e.g. it will
        be ${env.Path} not ${env.PATH} on Windows -->
    <property environment="env" />
    <!-- 
     	Let users override standard properties, if desired.
     	If directory, file, or some properties do not exist,  
     	then standard properties will be used.
      -->
     <property file="${env.LOCAL_BUILD_PROPERTIES_DIR}/${ant.project.name}.properties" />

     <!-- load standard properties for production environment -->
     <property file="${env.STANDARD_PROPERTIES_DIR}/${ant.project.name}.properties" />
     <!-- = = = end standard properties pattern = = = -->

    <echo message="ant.file: ${ant.file}"/>
    <target name="build">
        <java jar="${eclipse.launcher}" fork="true"  failonerror="true">
            <jvmarg value="-Dosgi.clean=true" />
            <jvmarg value="-Dosgi.ws=${env.BASEWS}" />
            <jvmarg value="-Dosgi.os=${env.BASEOS}" />
            <jvmarg value="-Dosgi.arch=${env.BASEARCH}" />
            <jvmarg value="-Dbuild.trial=${build.trial}" />
            <jvmarg value="-DbuildBranch=${buildBranch}" />
            <jvmarg value="-Dbuild.pack-all-in-one=${build.pack-all-in-one}" />
            <jvmarg value="-DbuildType=${buildType}" />
            <jvmarg value="-DbuildId=${buildId}" />
            <jvmarg value="-DjavacDebugInfo=on" />
            <jvmarg value="-DmapVersionTag=${mapVersionTag}" />
            <jvmarg value="-Dbuild.distribution=${build.distribution}" />
            <jvmarg value="-DbuildDirectory=${buildDirectory}" />
            <jvmarg value="-Ddltk.builder.home=${dltk.builder.home}" />
            <arg value="-data" />
            <arg value="${basedir}/workspace" />
            <arg value="-application" />
            <arg value="org.eclipse.ant.core.antRunner" />
            <arg value="-buildfile" />
            <arg value="${ant.file}" />
            <arg value="publish" />
        </java>
    </target>

    <!-- ===================================================================== -->
    <!-- Steps to do to publish the build results -->
    <!-- ===================================================================== -->
    <target name="publish">
        <dirname file="${ant.file}" property="component.dir" />
        <ant antfile="${dltk.builder.home}/scripts/build/label.xml" />
        <property file="${buildDirectory}/label.properties" />

        <property name="publish.xml" value="${component.dir}/publish.xml" />

        <property name="indexFileName" value="index.php" />
        <property name="result" value="${buildDirectory}/${buildLabel}" />
        <property name="indexTemplateFilename" value="index.html.template" />
		
    	<copy file="${dltk.builder.home}/distribution/dltk.site/templateFiles/${indexTemplateFilename}" tofile="${buildDirectory}/${indexFileName}" />
    	
        <condition property="isBuildTested" value="true">
            <available file="${buildDirectory}/${buildLabel}/testResults/html" />
        </condition>

        <ant antfile="${publish.xml}" dir="${component.dir}">
            <property name="dropTokenList" value="%dltkruntime%,%dltksdk%,%dltktest%,%core%,%core-sdk%,%core-tests%,%ruby-tests%,%core-perf-tests%,%ruby-perf-tests%,%tcl-runtime%,%tcl-sdk%,%tcl-tests%,%python-runtime%,%python-sdk%,%python-tests%,%javascript-runtime%,%javascript-sdk%,%javascript-tests%,%xotcl-runtime%,%xotcl-sdk%,%xotcl-tests%" />
            <property name="webtoolsDownloadURL" value="http://www.eclipse.org/downloads/download.php?file=/technology/dltk/drops"/>

            <property name="buildBranch" value="${buildBranch}" />
            <property name="build.pack-all-in-one" value="${build.pack-all-in-one}"/>

            <property name="isBuildTested" value="${isBuildTested}" />
            <property name="indexTemplateFilename" value="${indexTemplateFilename}" />
        </ant>

        <!--  Get the build map over for the results to point to. -->
        <copy file="${buildDirectory}/directory.txt" tofile="${result}/directory.txt" />

        <!-- Copy info for build identification -->
        <copy file="${buildDirectory}/buildmachineinfo.properties" tofile="${result}/buildmachineinfo.properties" />

    	<!-- final count files -->
    	<countBuildFiles sourceDirectory="${buildDirectory}/${buildLabel}"
                    filterString=".zip,.tar.gz"
                    outputFile="${buildDirectory}/${buildLabel}/files.count" />
    	
    </target>


</project>
