blob: 9860f0972ac4244897cb90e4fac2ed95edb54530 [file] [log] [blame]
<?xml version="1.0"?>
<project name="dotnet" basedir="." default="init"
xmlns:dn="antlib:org.apache.ant.dotnet"
xmlns:au="antlib:org.apache.ant.antunit">
<property environment="env"/>
<property name="build.dir" location="build"/>
<property name="src.dir" location="src"/>
<property name="out.csc" location="${src.dir}/out.cs"/>
<property name="out.app" location="${build.dir}/out.exe"/>
<property name="out.type" value="exe"/>
<target name="probe_for_apps" >
<condition property="ilasm.found">
<or>
<available file="ilasm" filepath="${env.PATH}" />
<available file="ilasm.exe" filepath="${env.PATH}" />
<available file="ilasm.exe" filepath="${env.Path}" />
</or>
</condition>
<echo> ilasm.found=${ilasm.found}</echo>
<condition property="csc.found">
<or>
<available file="csc" filepath="${env.PATH}" />
<available file="csc.exe" filepath="${env.PATH}" />
<available file="csc.exe" filepath="${env.Path}" />
</or>
</condition>
<echo> csc.found=${csc.found}</echo>
<!-- visual basic compiler -->
<condition property="vbc.found">
<or>
<available file="vbc" filepath="${env.PATH}" />
<available file="vbc.exe" filepath="${env.PATH}" />
<available file="vbc.exe" filepath="${env.Path}" />
</or>
</condition>
<echo> vbc.found=${vbc.found}</echo>
<!-- visual J# compiler -->
<condition property="jsharp.found">
<or>
<available file="vjc" filepath="${env.PATH}" />
<available file="vjc.exe" filepath="${env.PATH}" />
<available file="vjc.exe" filepath="${env.Path}" />
</or>
</condition>
<echo> jsharp.found=${jsharp.found}</echo>
<!-- Mono C# compiler -->
<condition property="mcs.found">
<available file="mcs" filepath="${env.PATH}" />
</condition>
<echo> mcs.found=${mcs.found}</echo>
<!-- any C# compiler -->
<condition property="c#.found">
<or>
<isset property="csc.found"/>
<isset property="mcs.found"/>
</or>
</condition>
<!-- Mono's ilasm -->
<condition property="mono.ilasm.found">
<available file="ilasm" filepath="${env.PATH}" />
</condition>
<echo> mono.ilasm.found=${mono.ilasm.found}</echo>
<condition property="ildasm.found">
<or>
<available file="ildasm" filepath="${env.PATH}" />
<available file="ildasm.exe" filepath="${env.PATH}" />
<available file="ildasm.exe" filepath="${env.Path}" />
</or>
</condition>
<echo> ildasm.found=${ildasm.found}</echo>
<condition property="dotnetapps.found">
<or>
<and>
<isset property="mcs.found"/>
<isset property="mono.ilasm.found"/>
</and>
<and>
<isset property="csc.found"/>
<!-- <isset property="vbc.found"/> -->
<isset property="ilasm.found"/>
</and>
</or>
</condition>
<echo> dotnetapps.found=${dotnetapps.found}</echo>
<condition property="mono.executable" value="mono">
<or>
<available file="mono" filepath="${env.PATH}" />
<available file="mono.exe" filepath="${env.PATH}" />
</or>
</condition>
<property name="mono.executable" value="mint"/>
<!-- now set a prop of the compiler name to whatever we found -->
<condition property="cs.compiler" value="csc">
<isset property="csc.found"/>
</condition>
<condition property="cs.compiler" value="mcs">
<isset property="mcs.found"/>
</condition>
</target>
<target name="init" depends="probe_for_apps">
<mkdir dir="${build.dir}"/>
</target>
<target name="tearDown">
<delete dir="${build.dir}"/>
</target>
<target name="validate_csc" depends="init">
<fail unless="c#.found">Needed C# compiler is missing</fail>
</target>
<target name="validate_ilasm" depends="init">
<fail unless="ilasm.found">Needed ilasm is missing</fail>
</target>
<target name="validate_jsharp" depends="init">
<fail unless="jsharp.found">No vjc on the path</fail>
</target>
<target name="testCSC" depends="CSC-Mono,CSC-MS"/>
<target name="CSC-MS" depends="validate_csc" if="csc.found">
<property name="testCSC.exe"
location="${build.dir}/ExampleCsc.exe" />
<dn:csc
destFile="${testCSC.exe}"
targetType="exe"
srcDir="${src.dir}"
>
</dn:csc>
<au:assertFileExists file="${testCSC.exe}"/>
<exec executable="${testCSC.exe}" failonerror="true" />
<delete file="${testCSC.exe}"/>
</target>
<target name="CSC-Mono" depends="validate_csc" if="mcs.found">
<property name="testCSC.exe"
location="${build.dir}/ExampleCsc.exe" />
<dn:csc
destFile="${testCSC.exe}"
targetType="exe"
includedefaultreferences="true"
srcDir="${src.dir}"
>
</dn:csc>
<au:assertFileExists file="${testCSC.exe}"/>
<exec executable="${mono.executable}" failonerror="true">
<arg value="${testCSC.exe}"/>
</exec>
<delete file="${testCSC.exe}"/>
</target>
<target name="testCSCResources" depends="CSCResources-Mono,CSCResources-MS"/>
<target name="CSCResources-MS" depends="validate_csc" if="csc.found">
<property name="testCSCRes.exe"
location="${build.dir}/ExampleCscRes.exe" />
<dn:csc
destFile="${testCSCRes.exe}"
targetType="exe"
srcDir="${src.dir}"
>
<resource file="${src.dir}/res.resources"/>
</dn:csc>
<au:assertFileExists file="${testCSCRes.exe}"/>
<exec executable="${testCSCRes.exe}" failonerror="true" />
<delete file="${testCSCRes.exe}"/>
<dn:csc
destFile="${testCSCRes.exe}"
targetType="exe"
srcDir="${src.dir}"
>
<resource namespace="some.namespace" embed="true">
<fileset file="${src.dir}/res.resources"/>
</resource>
</dn:csc>
<au:assertFileExists file="${testCSCRes.exe}"/>
<exec executable="${testCSCRes.exe}" failonerror="true" />
<delete file="${testCSCRes.exe}"/>
</target>
<target name="CSCResources-Mono" depends="validate_csc" if="mcs.found">
<property name="testCSCRes.exe"
location="${build.dir}/ExampleCscRes.exe" />
<dn:csc
destFile="${testCSCRes.exe}"
targetType="exe"
includedefaultreferences="true"
srcDir="${src.dir}"
>
<resource file="${src.dir}/res.resources"/>
</dn:csc>
<au:assertFileExists file="${testCSCRes.exe}"/>
<exec executable="${mono.executable}" failonerror="true">
<arg value="${testCSCRes.exe}"/>
</exec>
<delete file="${testCSCRes.exe}"/>
</target>
<target name="testCSCintrinsicFileset"
depends="CSCintrinsicFileset-MS,CSCintrinsicFileset-Mono"/>
<target name="CSCintrinsicFileset-MS" depends="validate_csc" if="csc.found">
<property name="testCSC.exe"
location="${build.dir}/ExampleCsc.exe"/>
<dn:csc
destFile="${testCSC.exe}"
targetType="exe"
srcDir="${src.dir}"
includes="**/*.cs"
>
</dn:csc>
<au:assertFileExists file="${testCSC.exe}"/>
<exec executable="${testCSC.exe}" failonerror="true" />
<delete file="${testCSC.exe}"/>
</target>
<target name="CSCintrinsicFileset-Mono" depends="validate_csc" if="mcs.found">
<property name="testCSC.exe"
location="${build.dir}/ExampleCsc.exe"/>
<dn:csc
destFile="${testCSC.exe}"
targetType="exe"
srcDir="${src.dir}"
includes="**/*.cs"
includedefaultreferences="true"
>
</dn:csc>
<au:assertFileExists file="${testCSC.exe}"/>
<exec executable="${mono.executable}" failonerror="true">
<arg value="${testCSC.exe}"/>
</exec>
<delete file="${testCSC.exe}"/>
</target>
<target name="testCSCdll" depends="CSCdll-MS,CSCdll-Mono"/>
<target name="CSCdll-MS" depends="validate_csc" if="csc.found">
<property name="testCSC.dll"
location="${build.dir}/Example2.dll" />
<dn:csc
destFile="${testCSC.dll}"
targetType="library"
executable="csc"
>
<src dir="${src.dir}" includes="example2.cs"/>
</dn:csc>
<au:assertFileExists file="${testCSC.dll}"/>
<property name="testCSC2.dll"
location="${build.dir}/folder with dir/Example3.dll" />
<mkdir dir="${build.dir}/folder with dir"/>
<dn:csc
destFile="${testCSC2.dll}"
targetType="library"
executable="csc"
>
<src dir="${src.dir}" includes="example3.cs"/>
</dn:csc>
<au:assertFileExists file="${testCSC2.dll}"/>
</target>
<target name="CSCdll-Mono" depends="validate_csc" if="mcs.found">
<property name="testCSC.dll"
location="${build.dir}/Example2.dll" />
<dn:csc
destFile="${testCSC.dll}"
targetType="library"
includedefaultreferences="true"
>
<src dir="${src.dir}" includes="example2.cs"/>
</dn:csc>
<au:assertFileExists file="${testCSC.dll}"/>
</target>
<target name="CscReferences"
depends="CscReferences-MS,CscReferences-Mono"/>
<target name="CscReferences-MS" depends="validate_csc,CSCdll-MS"
if="csc.found">
<property name="testCscReferences.exe"
location="${build.dir}/ExampleCsc2.exe" />
<dn:csc
destFile="${testCscReferences.exe}"
targetType="exe"
>
<src file="${src.dir}/example.cs"/>
<reference file="${testCSC.dll}" />
<reference file="${testCSC2.dll}" />
<define name="RELEASE" />
<define name="DEBUG" if="undefined.property"/>
<define name="def3" unless="undefined.property"/>
</dn:csc>
<au:assertFileExists file="${testCscReferences.exe}"/>
<copy file="${testCSC2.dll}" todir="${build.dir}"/>
<exec executable="${testCscReferences.exe}" failonerror="true" />
</target>
<target name="CscReferences-Mono" depends="validate_csc,CSCdll-Mono"
if="mcs.found">
<property name="testCscReferences.exe"
location="${build.dir}/ExampleCsc2.exe" />
<dn:csc
destFile="${testCscReferences.exe}"
targetType="exe"
includedefaultreferences="true"
>
<src file="${src.dir}/example.cs"/>
<reference file="${testCSC.dll}" />
<define name="RELEASE" />
<define name="DEBUG" if="undefined.property"/>
<define name="def3" unless="undefined.property"/>
</dn:csc>
<au:assertFileExists file="${testCscReferences.exe}"/>
<exec executable="${mono.executable}" failonerror="true">
<arg value="${testCscReferences.exe}"/>
</exec>
</target>
<target name="ILASM-deps" depends="ILASM-Mono,ILASM-MS"/>
<target name="testILASM"
depends="ILASM-deps"
if="ilasm.found"/>
<target name="ilasm" depends="validate_ilasm"
if="ilasm.found">
<property name="testILASM.exe"
location="${build.dir}/ExampleIlasm.exe" />
<dn:ilasm
destFile="${testILASM.exe}"
targetType="exe"
>
<src dir="${src.dir}" includes="*.il"/>
</dn:ilasm>
<au:assertFileExists file="${testILASM.exe}"/>
</target>
<target name="ILASM-MS" depends="ilasm"
if="ilasm.found" unless="mono.ilasm.found">
<exec executable="${testILASM.exe}"
failonerror="true"/>
</target>
<target name="ILASM-Mono" depends="ilasm"
if="mono.ilasm.found">
<exec executable="${mono.executable}"
failonerror="true">
<arg value="${testILASM.exe}"/>
</exec>
</target>
<!-- not including this in the test as it creates an exe in the src dir -->
<target name="XtestIlasmNoDestFile" depends="validate_ilasm">
<dn:ilasm
targetType="exe"
>
<src dir="${src.dir}" includes="**/*.il"/>
</dn:ilasm>
</target>
<!-- just here to look at fileset refid conversion by hand -->
<target name="echoFileset">
<fileset id="ilasm" dir="${src.dir}" includes="**/*.il" />
<property name="ilasm.string" refid="ilasm"/>
<echo>${ilasm.string}</echo>
</target>
<target name="testILDASM" depends="ILASM-deps" if="ildasm.found">
<property name="testILDASM.il"
location="${build.dir}/ExampleIldasm.il" />
<dn:ildasm
srcFile="${testILASM.exe}"
destFile="${testILDASM.il}"
metadata="true"
header="true"
linenumbers="true"
encoding="ascii"
/>
<au:assertFileExists file="${testILDASM.il}"/>
</target>
<!-- this is an error -->
<target name="testILDASM_empty" depends="validate_ilasm" >
<au:expectfailure>
<dn:ildasm/>
</au:expectfailure>
</target>
<target name="testJsharp" depends="init" if="jsharp.found" >
<property name="jsharp.exe"
location="${build.dir}/jsharp.exe" />
<dn:jsharpc
destFile="${jsharp.exe}"
targetType="exe"
>
<src dir="${src.dir}" includes="*.java"/>
</dn:jsharpc>
<exec executable="${jsharp.exe}" failonerror="true" />
</target>
<target name="testCSCresponseFile" depends="validate_csc" >
<property name="testCSCresponseFile.exe"
location="${build.dir}/testCSCresponseFile.exe" />
<dn:csc
destFile="${testCSCresponseFile.exe}"
targetType="exe"
executable="${cs.compiler}"
useResponseFile="true"
srcDir="${src.dir}"
>
</dn:csc>
<au:assertFileExists file="${testCSCresponseFile.exe}"/>
<delete file="${testCSCresponseFile.exe}"/>
</target>
</project>