Browse Source

A <dotnetexec> task

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275661 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 21 years ago
parent
commit
887c8f256b
7 changed files with 544 additions and 0 deletions
  1. +74
    -0
      proposal/sandbox/dotnet/build.xml
  2. +87
    -0
      proposal/sandbox/dotnet/src/etc/testcases/dotnetexec.xml
  3. +62
    -0
      proposal/sandbox/dotnet/src/etc/testcases/src/example.cs
  4. +68
    -0
      proposal/sandbox/dotnet/src/etc/testcases/src/example2.cs
  5. +144
    -0
      proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotNetExecTask.java
  6. +6
    -0
      proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml
  7. +103
    -0
      proposal/sandbox/dotnet/src/testcases/org/apache/tools/ant/taskdefs/optional/dotnet/DotNetExecTaskTest.java

+ 74
- 0
proposal/sandbox/dotnet/build.xml View File

@@ -0,0 +1,74 @@
<project default="compile">

<target name="setup">
<property name="build" value="build"/>
<property name="build.classes" value="${build}/classes"/>
<property name="build.testclasses" value="${build}/test-classes"/>
<property name="build.lib" value="${build}/lib"/>
<property name="jarname" value="${build.lib}/dotnet.jar"/>
<mkdir dir="${build.classes}"/>
<mkdir dir="${build.testclasses}"/>
<mkdir dir="${build.lib}"/>
</target>

<target name="compile" depends="setup">
<javac
srcdir="src/main"
destdir="${build.classes}"
debug="true"
/>
</target>

<target name="antlib" depends="compile">
<copy todir="${build.classes}">
<fileset dir="src/main" includes="**/antlib.xml"/>
</copy>
<jar
destfile="${jarname}"
basedir="${build.classes}"
/>
</target>

<target name="setup-for-tests" depends="setup">
<ant
antfile="../../../build.xml"
target="test-jar"
inheritall="false"
/>
</target>

<target name="compile-tests" depends="setup-for-tests, antlib">
<javac
srcdir="src/testcases"
destdir="${build.testclasses}"
debug="true"
>
<classpath>
<pathelement location="${jarname}"/>
<pathelement location="../../../build/lib/ant-testutil.jar"/>
</classpath>
</javac>
</target>

<target name="test" depends="compile-tests">
<junit
printsummary="false"
haltonfailure="false"
failureproperty="tests.failed"
>
<classpath>
<pathelement location="${jarname}"/>
<pathelement location="../../../build/lib/ant-testutil.jar"/>
<pathelement location="${build.testclasses}"/>
</classpath>

<batchtest>
<fileset dir="src/testcases"/>
</batchtest>

<formatter type="plain" usefile="false"/>
</junit>

<fail if="tests.failed">At least one test has failed.</fail>
</target>
</project>

+ 87
- 0
proposal/sandbox/dotnet/src/etc/testcases/dotnetexec.xml View File

@@ -0,0 +1,87 @@
<?xml version="1.0"?>

<project name="dotnet" basedir="." default="testCSC"
xmlns:dn="antlib:org.apache.tools.ant.taskdefs.optional.dotnet">

<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"/>

<taskdef
uri="antlib:org.apache.tools.ant.taskdefs.optional.dotnet"
resource="org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml">
<classpath>
<pathelement location="../../../build/lib/dotnet.jar"/>
</classpath>
</taskdef>

<target name="probe_for_apps" >
<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>

<!-- 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>
</target>

<target name="init" depends="probe_for_apps">
<mkdir dir="${build.dir}"/>
<property name="testCSC.exe"
location="${build.dir}/ExampleCsc.exe" />
</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="testCSC" depends="testCSC-Mono,testCSC-MS">
<available property="app.created" file="${testCSC.exe}"/>
<fail unless="app.created">No app ${testCSC.exe} created</fail>
<dn:dotnetexec executable="${testCSC.exe}" failonerror="true" />
<delete file="${testCSC.exe}"/>
</target>

<target name="testCSC-MS" depends="validate_csc" if="csc.found">
<csc
destFile="${testCSC.exe}"
targetType="exe"
>
</csc>
</target>

<target name="testCSC-Mono" depends="validate_csc" if="mcs.found">
<csc
destFile="${testCSC.exe}"
targetType="exe"
executable="mcs"
includedefaultreferences="true"
>
</csc>
</target>

</project>


+ 62
- 0
proposal/sandbox/dotnet/src/etc/testcases/src/example.cs View File

@@ -0,0 +1,62 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "Ant" and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
using System;

public class Example {

public static void Main(String[] args) {
Example2.echo();
}
}

+ 68
- 0
proposal/sandbox/dotnet/src/etc/testcases/src/example2.cs View File

@@ -0,0 +1,68 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "Ant" and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
using System;

/**
* this is just here to create confusion
*/
public class Example2 {

public int some_variable=3;
public static void echo() {
Console.WriteLine("hello, I look like Java, but I'm really .NET");
}
}

+ 144
- 0
proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotNetExecTask.java View File

@@ -0,0 +1,144 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "Ant" and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/

package org.apache.tools.ant.taskdefs.optional.dotnet;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.ExecTask;
import org.apache.tools.ant.taskdefs.condition.Os;

/**
* Specialized <exec> that knows how to deal with Mono vs. Microsoft's
* VM - and maybe Rotor at some point.
*/
public class DotNetExecTask extends ExecTask {

/**
* "Magic" VM argument for Microsoft's VM.
*/
private static final String MS_VM = "microsoft";

/**
* The user supplied executable attribute.
*/
private String executable;

/**
* The .NET VM to use.
*
* <p>Defaults to Microsoft's on Windows and mono on any other
* platform.</p>
*/
private String vm = Os.isFamily("windows") ? MS_VM : "mono";

/**
* Empty Constructor.
*/
public DotNetExecTask() {
super();
}

/**
* Set the name of the executable program.
* @param value the name of the executable program
*/
public void setExecutable(String value) {
this.executable = value;
}

/**
* Set the name of the executable for the virtual machine or the
* magic name "microsoft" which implies that we can invoke the
* executable directly.
*
* @param value the name of the executable for the virtual machine
*/
public void setVm(String value) {
this.vm = value;
}

/**
* Do the work.
*
* @throws BuildException if executable is empty or &lt;exec&gt;
* throws an exception.
*/
public void execute() throws BuildException {
if (executable == null) {
throw new BuildException("The executable attribute is required");
}
setupCommandline();
super.execute();
}

/**
* If the inherited Commandline doesn't know about the executable
* yet, set it and deal with the vm attribute.
*
* <p>The inherited Commandline may know the executable already if
* this task instance is getting reused.</p>
*/
protected void setupCommandline() {
if (cmdl.getExecutable() == null) {
if (vm.equals(MS_VM)) {
// can invoke executable directly
super.setExecutable(executable);
} else {
super.setExecutable(vm);
cmdl.createArgument(true)
.setValue(resolveExecutable(executable));
}
}
}
}

+ 6
- 0
proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml View File

@@ -0,0 +1,6 @@
<antlib>
<taskdef
name="dotnetexec"
classname="org.apache.tools.ant.taskdefs.optional.dotnet.DotNetExecTask"
/>
</antlib>

+ 103
- 0
proposal/sandbox/dotnet/src/testcases/org/apache/tools/ant/taskdefs/optional/dotnet/DotNetExecTaskTest.java View File

@@ -0,0 +1,103 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "Ant" and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.taskdefs.optional.dotnet;

import org.apache.tools.ant.BuildFileTest;

/**
* Tests the DotNetExecTask task, based off Ant's DotnetTest.
*
* @author steve loughran
*/
public class DotNetExecTaskTest extends BuildFileTest {

/**
* Description of the Field
*/
private final static String TASKDEFS_DIR = "src/etc/testcases/";


/**
* Constructor
*
* @param name testname
*/
public DotNetExecTaskTest(String name) {
super(name);
}


/**
* The JUnit setup method
*/
public void setUp() {
configureProject(TASKDEFS_DIR + "dotnetexec.xml");
}


/**
* The teardown method for JUnit
*/
public void tearDown() {
executeTarget("teardown");
}


/**
* A unit test for JUnit
*/
public void testCSC() throws Exception {
executeTarget("testCSC");
}
}

Loading…
Cancel
Save