<?xml-stylesheet type="text/xsl" href="file://C:\ant\etc\antex\antprettybuild\antprettybuild-3.1.1.xsl"?>
<project name="cs2jTranslator" default="launch" basedir="." xmlns:dn="antlib:org.apache.ant.dotnet">

	<description>
        This script builds the cs2j translator and translates C# code
  </description>

  <property name="builder.ant.lib" value="${basedir}/jar"/>
	<!-- load the ant-dotnet task, see http://ant.apache.org/antlibs/dotnet/index.html -->
	<taskdef uri="antlib:org.apache.ant.dotnet" resource="org/apache/ant/dotnet/antlib.xml" classpath="${builder.ant.lib}/ant-dotnet-1.0.jar" />

	<!-- Load AntForm tasks -->
	<taskdef name="antform" classname="com.sardak.antform.AntForm" classpath="${builder.ant.lib}/antform.jar"/>
	<taskdef name="antmenu" classname="com.sardak.antform.AntMenu" classpath="${builder.ant.lib}/antform.jar"/>

  <target name="launch" depends="launch-form,run" description="Simple Graphical Launch"/>
  <target name="launch-full" depends="launch-full-form,run" description="Graphical Launch with all options"/>

  <target name="launch-form">
    <property file="${basedir}/launch-simple.properties" />
    <antform title="C# to Java Translation" save="${basedir}/launch-simple.properties">
      <label>Configure the source and target locations for your translation:</label>
      <fileSelectionProperty label="C# Translation Root : " property="cs.tx.dir" directoryChooser="true" />
      <fileSelectionProperty label="Java Project src : " property="java.output.dir" directoryChooser="true" />
      <separator />
      <controlbar>
        <button label="Cancel" type="cancel" target="cancel" newproject="false"/>
        <button label="Reset" type="reset" />
        <button label="OK" type="ok" focus="true" newproject="false"/>
      </controlbar>
    </antform>
  </target>

  <target name="launch-full-form">
    <property file="${basedir}/launch-full.properties" />
    <antform title="C# to Java Translation" save="${basedir}/launch-full.properties">
      <label>Configure the source and target locations for your translation:</label>
      <fileSelectionProperty label="C# Application Root : " property="cs.app.dir" directoryChooser="true" />
      <fileSelectionProperty label="C# Translation Root : " property="cs.tx.dir" directoryChooser="true" />
      <fileSelectionProperty label="Java output directory : " property="java.output.dir" directoryChooser="true" />
      <fileSelectionProperty label="CS2J Translation Files : " property="cs2j.dir" directoryChooser="true" />
      <separator />
      <!-- <label>Enter the locations of the branches you want to translate from / to</label>
			<textProperty label="ScormEngineNet branch : " property="csharp.project.full" />
			<textProperty label="ScormEngineJava branch : " property="java.project.full" />
			<separator />
			<booleanProperty label="Commit Java code after translation " property="is.commit.javacode" />
			<booleanProperty label="Refresh and Rebuild cs2j executable " property="is.rebuild.cs2j" />
			-->
      <controlbar>
        <button label="Cancel" type="cancel" target="cancel" newproject="false"/>
        <button label="Reset" type="reset" />
        <button label="OK" type="ok" focus="true" newproject="false"/>
      </controlbar>
    </antform>
  </target>

  <target name="cancel">
		<echo message="Translation cancelled by user" />
		<property name="is.run.cancelled" value="true" />
	</target>

  <target name="ok">
  </target>
  
  <target name="run" depends="init,translateCS2J" unless="is.run.cancelled">
  </target>


  <!-- We could have left this in the msbuild script fed to buildTranslator, but it is clearer in Ant :) -->
	<target name="antlrTranslator" depends="init" unless="is.run.cancelled">
		<antlr target="${cs2jtx.src.dir}/UnicodeLexerBase.g">
			<classpath> <pathelement location="${builder.ant.lib}/antlr.jar"/> </classpath>
		</antlr>
		<antlr target="${cs2jtx.src.dir}/CSharpLexerBase.g" glib="${cs2jtx.src.dir}/UnicodeLexerBase.g">
			<classpath> <pathelement location="${builder.ant.lib}/antlr.jar"/> </classpath>
		</antlr>
		<antlr target="${cs2jtx.src.dir}/CSharpLexer.g" glib="${cs2jtx.src.dir}/UnicodeLexerBase.g;${cs2jtx.src.dir}/CSharpLexerBase.g">
			<classpath> <pathelement location="${builder.ant.lib}/antlr.jar"/> </classpath>
		</antlr>
		<antlr target="${cs2jtx.src.dir}/CSharpPreprocessorLexer.g" glib="${cs2jtx.src.dir}/UnicodeLexerBase.g;${cs2jtx.src.dir}/CSharpLexerBase.g">
			<classpath> <pathelement location="${builder.ant.lib}/antlr.jar"/> </classpath>
		</antlr>
		<antlr target="${cs2jtx.src.dir}/CSharpPreprocessorHooverLexer.g" glib="${cs2jtx.src.dir}/UnicodeLexerBase.g;${cs2jtx.src.dir}/CSharpLexerBase.g">
			<classpath> <pathelement location="${builder.ant.lib}/antlr.jar"/> </classpath>
		</antlr>
		<antlr target="${cs2jtx.src.dir}/CSharpParser.g">
			<classpath> <pathelement location="${builder.ant.lib}/antlr.jar"/> </classpath>
		</antlr>
		<antlr target="${cs2jtx.src.dir}/CSharpEnvBuilder.g">
			<classpath> <pathelement location="${builder.ant.lib}/antlr.jar"/> </classpath>
		</antlr>
		<antlr target="${cs2jtx.src.dir}/CSharpTranslator.g">
			<classpath id="antlrjar"> <pathelement location="${builder.ant.lib}/antlr.jar"/> </classpath>
		</antlr>
		<antlr target="${cs2jtx.src.dir}/NetTranslator.g">
			<classpath id="antlrjar"> <pathelement location="${builder.ant.lib}/antlr.jar"/> </classpath>
		</antlr>
		<antlr target="${cs2jtx.src.dir}/JavaPrettyPrinter.g">
			<classpath id="antlrjar"> <pathelement location="${builder.ant.lib}/antlr.jar"/> </classpath>
		</antlr>
	</target>

<!--    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /defin
e:DEBUG;TRACE /reference:C:\cygwin\antlr\build\lib\antlr.astframe.dll /reference:C:\cygwin\antlr\build\lib\antlr.runtime
.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framew
ork\v2.0.50727\System.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:C
:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /debug+ /debug:full /optimize- /out:obj\Debug\Translator.exe
 /target:exe 
	-->
	
  <target name="buildTranslator" depends="antlrTranslator" description="Builds CSharp to Java Translator" unless="is.run.cancelled">
    <mkdir dir="${cs2jtx.bin.dir}/"/>
    <dn:msbuild>
      <dn:build>
        <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
          <Target Name="Build">
            <!-- I am just mimicing the standard build options used by VS2005 here -->
            <Csc Sources="@(Compile)" References="@(Reference)" TargetType="exe"
							OutputAssembly="${cs2jtx.bin.dir}/Translator.exe"
							Optimize="false"
						    DebugType="full"
							DisabledWarnings="1701,1702"
					        EmitDebugInformation="true"
		                    ErrorReport="prompt"
							NoConfig="true"
							Warninglevel="4" />
          </Target>
          <ItemGroup>
            <Reference Include="${antlr.dll.dir}/antlr.astframe.dll" />
            <Reference Include="${antlr.dll.dir}/antlr.runtime.dll" />
            <Reference Include="${windows.dotnet.dir}/System.dll" />
            <Reference Include="${windows.dotnet.dir}/System.Data.dll" />
            <Reference Include="${windows.dotnet.dir}/System.Windows.Forms.dll" />
            <Reference Include="${windows.dotnet.dir}/System.Xml.dll" />
          </ItemGroup>
          <ItemGroup>
            <Compile Include="${cs2jtx.src.dir}\ASTNode.cs" />
            <Compile Include="${cs2jtx.src.dir}\ASTNodeFactory.cs" />
            <Compile Include="${cs2jtx.src.dir}\CodeMaskEnums.cs" />
            <Compile Include="${cs2jtx.src.dir}\CSharpEnvBuilder.cs" />
            <Compile Include="${cs2jtx.src.dir}\DirectoryHT.cs" />
            <Compile Include="${cs2jtx.src.dir}\SigEnv.cs" />
            <Compile Include="${cs2jtx.src.dir}\TranslationTemplate.cs" />
            <Compile Include="${cs2jtx.src.dir}\TypeTable.cs" />
            <Compile Include="${cs2jtx.src.dir}\NetTranslatorBase.cs" />
            <Compile Include="${cs2jtx.src.dir}\CSharpHooverTokenTypes.cs" />
            <Compile Include="${cs2jtx.src.dir}\CSharpJavaTokenTypes.cs" />
            <Compile Include="${cs2jtx.src.dir}\CSharpLexer.cs" />
            <Compile Include="${cs2jtx.src.dir}\CSharpLexerBase.cs" />
            <Compile Include="${cs2jtx.src.dir}\CSharpLexerBaseTokenTypes.cs" />
            <Compile Include="${cs2jtx.src.dir}\CSharpLexerTokenTypes.cs" />
            <Compile Include="${cs2jtx.src.dir}\CSharpParser.cs" />
            <Compile Include="${cs2jtx.src.dir}\CSharpPreprocessorHooverLexer.cs" />
            <Compile Include="${cs2jtx.src.dir}\CSharpPreprocessorLexer.cs" />
            <Compile Include="${cs2jtx.src.dir}\CSharpPreprocessTokenTypes.cs" />
            <Compile Include="${cs2jtx.src.dir}\CustomHiddenStreamToken.cs" />
            <Compile Include="${cs2jtx.src.dir}\CSharpTranslator.cs" />
            <Compile Include="${cs2jtx.src.dir}\Exception.cs" />
            <Compile Include="${cs2jtx.src.dir}\JavaPrettyPrinter.cs" />
            <Compile Include="${cs2jtx.src.dir}\JavaTreeParser.cs" />
            <Compile Include="${cs2jtx.src.dir}\Main.cs" />
            <Compile Include="${cs2jtx.src.dir}\NetTranslator.cs" />
            <Compile Include="${cs2jtx.src.dir}\Properties\AssemblyInfo.cs" />
            <Compile Include="${cs2jtx.src.dir}\Set.cs" />
            <Compile Include="${cs2jtx.src.dir}\SymbolTable.cs" />
            <Compile Include="${cs2jtx.src.dir}\TypeRep.cs" />
            <Compile Include="${cs2jtx.src.dir}\UnicodeLexerBase.cs" />
            <Compile Include="${cs2jtx.src.dir}\UnicodeLexerBaseTokenTypes.cs" />
          </ItemGroup>
        </Project>
      </dn:build>
    </dn:msbuild>
    <copy file="${antlr.dll.dir}/antlr.astframe.dll" todir="${cs2jtx.bin.dir}"/>
    <copy file="${antlr.dll.dir}/antlr.runtime.dll" todir="${cs2jtx.bin.dir}"/>
  </target>

  <!-- "C:\Documents and Settings\kevin.glynn\My Documents\Visual Studio
2005\Projects\Translator\Translator\bin\Debug\Translator.exe" -dumpxml
-odir "C:\Documents and
Settings\kevin.glynn\eclipsews\RusticiSoftware.ScormUntethered.Logic\src"
-netdir "c:\Documents and Settings\kevin.glynn\eclipsews\CS2JLibrary"
-appdir "c:\docume~1\kevin~1.gly\locals~1\temp\tmpk6_pcn" -cheatdir
"c:\Documents and Settings\kevin.glynn\My Documents\Cheats"
"c:\docume~1\kevin~1.gly\locals~1\temp\tmpk6_pcn\UntetheredLogic" -->
	
    <target name="translateCS2J" depends="init" description="run translator" unless="is.run.cancelled">
        <dn:dotnetexec executable="${cs2jtx.exe}">
            <arg value="-mindriver"/>
            <arg value="-version"/>
            <arg value="-v"/>
            <arg value="-dumpxml"/>
            <arg value="-xmldir"/>
            <arg file="${cs2jtx.build.dir}/xmls"/>
            <arg value="-dumpenums"/>
            <arg file="${cs2jtx.build.dir}/enums.xml"/>
            <arg value="-cheatdir"/>
            <arg file="${cheats.dir}"/>
            <arg value="-netdir"/>
            <arg file="${cs2j.dir}"/>
            <arg value="-exnetdir"/>
            <arg file="${cs2j.dir}/build.xml"/>
            <arg value="-appdir"/>
            <arg file="${cs.app.dir}"/>
            <arg value="-odir"/>
            <arg file="${java.output.dir}"/>
        	<arg file="${cs.tx.dir}" />
        </dn:dotnetexec>
    </target>

	<target name="dumpProperties" depends="init" description="output all set properties, a useful sanity check">
		<echoproperties />
	</target>

	<target name="init" depends="" unless="is.run.cancelled">
    <property file="${user.home}/${ant.project.name}.build.properties" />
    <property file="${user.home}/build.properties" />
    <property file="build.properties" />
    
    <mkdir dir="${cs2jtx.build.dir}" />
	</target>

  <target name="clean" depends="init" description="clean out build area">
    <!-- create dir if it doesn't exist, so delete only fails if there is a real problem -->
    <mkdir dir="${build.dir}"/>
    <delete failonerror="true" dir="${build.dir}" />
    <mkdir dir="${cs2jtx.build.dir}"/>
    <delete failonerror="true" dir="${cs2jtx.build.dir}" />
  </target>

  <target name="dist" depends="buildTranslator" description="Make a distribution of cs2j">
    <fail message="You must set the distribution version number (cs2j.dist.version)" unless="cs2j.dist.version" />
    <fail message="You must set the directory containing documentation (cs2j.doc.dir)" unless="cs2j.doc.dir" />
    <delete failonerror="false"  dir="${build.dir}/cs2j" />
    <mkdir dir="${build.dir}/cs2j" />
    <mkdir dir="${cs2j.dist.dir}" />
    <echo message="do dist :) ${cs2jtx.exe}" />
    <property name="cs2j.pack.dir" value="${build.dir}/cs2j/pack/cs2j_${cs2j.dist.version}/" />
    <!-- cs2j executable -->
    <copy todir="${cs2j.pack.dir}/Bin/">
      <fileset dir="${cs2jtx.bin.dir}"  excludes="*.vshost.exe*"/>
    </copy>
    <copy todir="${cs2j.pack.dir}/lib/">
      <fileset dir="./lib"  excludes="antlr.jar"/>
    </copy>
    <copy todir="${cs2j.pack.dir}">
      <fileset dir="${cs2j.doc.dir}" />
    </copy>
    <copy todir="${cs2j.pack.dir}" file="./build.xml" />
    <copy todir="${cs2j.pack.dir}" file="./dist/build.properties" />
    <copy todir="${cs2j.pack.dir}/CS2JLibrary">
      <fileset dir="${cs2j.proj.dir}">
        <include name="src/**/*" />
        <include name="LICENSE" />
        <include name="NOTICE" />
        <include name="build.*" />
        <include name=".project" />
        <include name=".classpath" />
        <include name="lib/*" />
        <include name="NetTranslations/**/*" />
      </fileset>
    </copy>
    <zip destfile="${cs2j.dist.dir}/cs2j_${cs2j.dist.version}.zip" basedir="${cs2j.pack.dir}/../" />
  </target>

</project>