<project name="Build All Elements" default="main">

<!-- ===================================================================== -->
<!-- Global properties.  See the build.properties for information on -->
<!-- the properties which callers can control. -->
<!-- ===================================================================== -->
<property name="builder" location="${user.dir}"/>
<property name="builderDirectory" location="${builder}"/>
<property name="buildProperties" location="${builder}/build.properties"/>
<property file="${buildProperties}"/>
<property name="customTargets" location="${builderDirectory}/customTargets.xml"/>
<property name="genericTargets" location="genericTargets.xml"/>

<!-- ===================================================================== -->
<!-- main entry point to setup, fetch, generate, build etc. Use -->
<!-- the customTargets.xml to modify the build behaviour. -->
<!-- ===================================================================== -->

<!-- ******* add in the descriptions for each of the top level targets to teh target decl -->
<target name="main" description="the main build target">	
  	<antcall target="preBuild" /> 
 	<antcall target="fetch" />
	<antcall target="generate" /> 
	<antcall target="process" /> 
	<antcall target="assemble" />
	<antcall target="package" />
	<antcall target="postBuild" />
</target>

<!-- ===================================================================== -->
<!-- Steps to do before starting the build.  Typical setup includes -->
<!-- fetching the map files and building the directory.  -->
<!-- ===================================================================== -->
<target name="preBuild">
	<mkdir dir="${buildDirectory}" />
	<ant antfile="${customTargets}" target="preSetup" /> 
	<ant antfile="${customTargets}" target="getMapFiles" /> 
	<concat destfile="${buildDirectory}/directory.txt" fixlastline="yes">
		<fileset dir="${buildDirectory}" includes="maps/**/*.map"/>
	</concat>
	<ant antfile="${customTargets}" target="postSetup" />
</target>

<!-- ===================================================================== -->
<!-- Fetch the elements identified in the customTargets -->
<!-- ===================================================================== -->
<target name="fetch" unless="skipFetch">
	<ant antfile="${customTargets}" target="preFetch"/>
	<!-- Generates and then execute the fetch scripts for each build element-->
	<ant antfile="${customTargets}" target="allElements">
		<property name="target" value="fetchElement" />
	</ant>
	
	<ant antfile="${customTargets}" target="postFetch"/>
</target>

<!-- ===================================================================== -->
<!-- Generate the build scripts for each element identified in the customTargets -->
<!-- ===================================================================== -->
<target name="generate">
	<ant antfile="${customTargets}" target="preGenerate"/>
	<!-- Generate the build.xml for each build element-->
	<ant antfile="${customTargets}" target="allElements">
		<property name="target" value="generateScript" />
	</ant>
	<ant antfile="${customTargets}" target="postGenerate"/>	
</target>

<!-- ===================================================================== -->
<!-- Run the build scripts for each element identified in the customTargets -->
<!-- ===================================================================== -->
<target name="process">
	<!-- Run custom tasks before processing, i.e. creating source build zip files -->
	<ant antfile="${customTargets}" target="preProcess" />

	<!-- Process all of the build elements-->
	<ant antfile="${customTargets}" target="allElements">
		<property name="target" value="processElement" />
	</ant>

	<!-- Run custom tasks after compiling, i.e. reporting compile errors -->
	<ant antfile="${customTargets}" target="postProcess" />
</target>

<!-- ===================================================================== -->
<!-- Assemble the build elements into final distributions -->
<!-- ===================================================================== -->
<target name="assemble">
	<ant antfile="${customTargets}" target="preAssemble"/>
	<ant antfile="${customTargets}" target="allElements">
		<property name="target" value="assembleElement"/>
	</ant>
	<ant antfile="${customTargets}" target="postAssemble"/>	
</target>

<!-- ===================================================================== -->
<!-- Package the build elements into final distributions -->
<!-- ===================================================================== -->
<target name="package" if="runPackager">
	<ant antfile="${customTargets}" target="prePackage"/>
	<ant antfile="${customTargets}" target="allElements">
		<property name="target" value="packageElement"/>
	</ant>
	<ant antfile="${customTargets}" target="postPackage"/>	
</target>

<!-- ===================================================================== -->
<!-- Do any steps required after the build (e.g., posting, testing, ...) -->
<!-- ===================================================================== -->
<target name="postBuild">
	<ant antfile="${customTargets}" target="postBuild" />
</target>

<!-- ===================================================================== -->
<!-- Clean the build elements.  This target is here as an entry -->
<!-- point to the customTargets.  It is not called directly in the normal -->
<!-- course of events. -->
<!-- ===================================================================== -->
<target name="clean">
  <ant antfile="${customTargets}" target="allElements">
     <property name="target" value="cleanElement"/>
  </ant>
</target>

</project>
