<!-- 

	For use in development of the External tools plugin 
	This script can be used to update a target for testing/debugging
	Export a jar of .class files for the org.eclipse.ant.core Eclipse plugin
    along with other important plugin files to the "plugin-export" subdirectory
    of the target Eclipse installation
	As well the export of the plugin is copied to a target installation.
 -->
<project name="org.eclipse.ui.externaltools" default="export" basedir="..">

	<!-- Set the timestamp and important properties -->
	<target name="init">
		<tstamp/>
		<property name="bootclasspath" value=""/>
		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
		<property name="destdir" value="../../plugin-export" />
		<property name="pluginName" value= "org.eclipse.ui.externaltools_2.1.0"/>
		<property name="destBin"  value="${destdir}/${pluginName}" />
		<property name="destSrc"  value="${destdir}/org.eclipse.platform.source/src/org.eclipse.ui.externaltools_2.1.0" />
		<property name="temp.folder" value="${destdir}/temp.folder"/>

		<property name="currentBuild" value="../../Debugger/Ant/eclipse"/>
		<property name="currentBuildPlugins" value="${currentBuild}/plugins/${pluginName}"/>
	</target>

	<!-- Create the jar of .class files, and copy other important files to export dir -->
	<target name="export" depends="init">
		<mkdir dir="${destdir}" />
		<delete dir="${destBin}" />
		<mkdir dir="${destBin}" />
		<delete dir="${destSrc}" />
		<mkdir dir="${destSrc}" />
		<delete dir="${destBin}/lib" />
		<jar 
			jarfile="${destBin}/externaltools.jar"
			basedir="bin"
			excludes="bin/org/eclipse/ui/externaltools/internal/ui/ant"
		/>
		<!-- Create the source zip -->
		<zip zipfile="${destSrc}/externaltoolssrc.zip">
			<fileset dir="External Tools"/>
		</zip>
		<copy file="plugin.xml" todir="${destBin}"/>
		<copy file="plugin.properties" todir="${destBin}"/>
		<copy file="about.html" todir="${destBin}"/>
		<copy file=".classpath" todir="${destBin}"/>
		<copy file=".options" todir="${destBin}"/>
		
		<delete dir="${temp.folder}/lib/antbuilder.jar.bin"/>
		<mkdir dir="${temp.folder}/lib/antbuilder.jar.bin"/>
		<!-- compile the source code -->
		<javac destdir="${temp.folder}/lib/antbuilder.jar.bin" failonerror="false" verbose="false" debug="on" includeAntRuntime="no" bootclasspath="${bootclasspath}" classpath="${basedir}/../org.eclipse.core.runtime/runtime.jar;${basedir}/../org.apache.ant/ant.jar;${basedir}/../org.apache.xerces/xercesImpl.jar;${basedir}/../org.apache.xerces/xmlParserAPIs.jar;${basedir}/bin;${basedir}/../org.eclipse.core.boot/boot.jar;${basedir}/../org.eclipse.swt.win32/ws/win32/swt.jar;${basedir}/../org.eclipse.ant.core/bin">
			<src path="Ant Builder/"/>
		</javac>
		<!-- copy any necessary resources -->
		<copy todir="${temp.folder}/lib/antbuilder.jar.bin">
			<fileset dir="Ant Builder/" excludes="**/*.java"/>
		</copy>
		<mkdir dir="${destBin}/lib"/>
		<jar jarfile="${destBin}/lib/antbuilder.jar" basedir="${temp.folder}/lib/antbuilder.jar.bin"/>
		<delete dir="${temp.folder}"/>
		
	</target>
	
	<target name="copy" depends="init">
		<copy todir="${currentBuildPlugins}">
			<fileset dir="${destBin}"/>
		</copy>
	</target>
	
</project>
