<!--
     Copyright (c) 2003, 2009 IBM Corporation and others.

     This program and the accompanying materials
     are made available under the terms of the Eclipse Public License 2.0
     which accompanies this distribution, and is available at
     https://www.eclipse.org/legal/epl-2.0/

     SPDX-License-Identifier: EPL-2.0
    
     Contributors:
         IBM Corporation - initial API and implementation
 -->
<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}"/>
<available property="customTargets" file="${builder}/customTargets.xml" value="${builder}/customTargets.xml"/>
<property name="customTargets" location="${eclipse.pdebuild.templates}/headless-build/customTargets.xml"/>
<property name="genericTargets" location="${eclipse.pdebuild.scripts}/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="processRepos"/>
 	<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>

<!-- ===================================================================== -->
<!-- This will transform the content of the repositories listed such that they   -->
<!-- are in a format against which PDE Build can succesfully build   -->
<!-- ===================================================================== -->
<target name="processRepos" if="repoBaseLocation">
	<subant target="preProcessRepos" failonerror="false" inheritAll="true" >
		<fileset file="${customTargets}" />
	</subant>
	<ant antfile="${customTargets}" target="allElements">
		<property name="target" value="transformRepos" />
	</ant>
	<subant target="postProcessRepos" failonerror="false" inheritAll="true" >
		<fileset file="${customTargets}" />
	</subant>
</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>
