diff --git a/proposal/sandbox/dotnet/src/etc/testcases/msbuild.xml b/proposal/sandbox/dotnet/src/etc/testcases/msbuild.xml new file mode 100644 index 000000000..a9d7f08c2 --- /dev/null +++ b/proposal/sandbox/dotnet/src/etc/testcases/msbuild.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/proposal/sandbox/dotnet/src/etc/testcases/nant.xml b/proposal/sandbox/dotnet/src/etc/testcases/nant.xml new file mode 100644 index 000000000..c5ce1f4b7 --- /dev/null +++ b/proposal/sandbox/dotnet/src/etc/testcases/nant.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/proposal/sandbox/dotnet/src/etc/testcases/src/msbuild.proj b/proposal/sandbox/dotnet/src/etc/testcases/src/msbuild.proj new file mode 100644 index 000000000..f75233eb2 --- /dev/null +++ b/proposal/sandbox/dotnet/src/etc/testcases/src/msbuild.proj @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/proposal/sandbox/dotnet/src/etc/testcases/src/nant.build b/proposal/sandbox/dotnet/src/etc/testcases/src/nant.build new file mode 100644 index 000000000..8bc3a7a47 --- /dev/null +++ b/proposal/sandbox/dotnet/src/etc/testcases/src/nant.build @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/AbstractBuildTask.java b/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/AbstractBuildTask.java new file mode 100644 index 000000000..a3fa5d91a --- /dev/null +++ b/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/AbstractBuildTask.java @@ -0,0 +1,205 @@ +/* + * 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 + * . + */ + +package org.apache.tools.ant.taskdefs.optional.dotnet; + +import org.apache.tools.ant.Task; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * Base class for NAntTask and MSBuildTask. + */ +public abstract class AbstractBuildTask extends Task { + + /** + * The buildfile to invoke the build tool for. + */ + private File buildFile; + + /** + * The targets to execute. + */ + private List targets = new ArrayList(); + + /** + * Properties to set. + */ + private List properties = new ArrayList(1); + + /** + * Empty constructor. + */ + protected AbstractBuildTask() { + } + + /** + * Sets the name of the build file. + */ + public final void setBuildfile(File f) { + buildFile = f; + } + + /** + * A target. + */ + public static class Target { + private String name; + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + } + + /** + * A target to execute. + */ + public final void addTarget(Target t) { + targets.add(t); + } + + /** + * A property. + */ + // XXX, could have reused Property or Environment.Variable + // - not decided so far + public static class Property { + private String name; + private String value; + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setValue(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + } + + /** + * A target to execute. + */ + public final void addProperty(Property t) { + properties.add(t); + } + + /** + * Must return the executable. + * + * @return must not return null + */ + protected abstract String getExecutable(); + + /** + * Must return buildfile argument(s). + * + * @param buildFile the absolute File for the buildfile or null if + * the user didn't specify a buildfile. + * + * @return must not return null + */ + protected abstract String[] getBuildfileArguments(File buildFile); + + /** + * Must return target argument(s). + * + * @return must not return null + */ + protected abstract String[] getTargetArguments(List targets); + + /** + * Must return property argument(s). + * + * @return must not return null + */ + protected abstract String[] getPropertyArguments(List properties); + + /** + * Perform the build. + */ + public void execute() { + DotNetExecTask exec = new DotNetExecTask(); + exec.setProject(getProject()); + exec.setExecutable(getExecutable()); + exec.setTaskName(getTaskName()); + String[] args = getPropertyArguments(properties); + for (int i = 0; i < args.length; i++) { + exec.createArg().setValue(args[i]); + } + args = getTargetArguments(targets); + for (int i = 0; i < args.length; i++) { + exec.createArg().setValue(args[i]); + } + args = getBuildfileArguments(buildFile); + for (int i = 0; i < args.length; i++) { + exec.createArg().setValue(args[i]); + } + exec.execute(); + } +} diff --git a/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/MSBuildTask.java b/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/MSBuildTask.java new file mode 100644 index 000000000..f830ec2d1 --- /dev/null +++ b/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/MSBuildTask.java @@ -0,0 +1,122 @@ +/* + * 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 + * . + */ + +package org.apache.tools.ant.taskdefs.optional.dotnet; + +import java.io.File; +import java.util.Iterator; +import java.util.ArrayList; +import java.util.List; + +/** + * Runs a MSBuild build process. + */ +public class MSBuildTask extends AbstractBuildTask { + + public MSBuildTask() { + super(); + } + + protected String getExecutable() { + return "MSBuild.exe"; + } + + protected String[] getBuildfileArguments(File buildFile) { + if (buildFile != null) { + return new String[] { + buildFile.getAbsolutePath() + }; + } else { + return new String[0]; + } + } + + protected String[] getTargetArguments(List targets) { + if (targets.size() > 0) { + StringBuffer sb = new StringBuffer("/targets:"); + Iterator iter = targets.iterator(); + boolean first = true; + while (iter.hasNext()) { + AbstractBuildTask.Target t = + (AbstractBuildTask.Target) iter.next(); + if (!first) { + sb.append(";"); + } + sb.append(t.getName()); + } + return new String[]{sb.toString()}; + } else { + return new String[0]; + } + } + + protected String[] getPropertyArguments(List properties) { + if (properties.size() > 0) { + StringBuffer sb = new StringBuffer("/property:"); + Iterator iter = properties.iterator(); + boolean first = true; + while (iter.hasNext()) { + AbstractBuildTask.Property p = + (AbstractBuildTask.Property) iter.next(); + if (!first) { + sb.append(";"); + } + sb.append(p.getName()).append("=").append(p.getValue()); + } + return new String[]{sb.toString()}; + } else { + return new String[0]; + } + } +} diff --git a/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NAntTask.java b/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NAntTask.java new file mode 100644 index 000000000..bd228e9fa --- /dev/null +++ b/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NAntTask.java @@ -0,0 +1,105 @@ +/* + * 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 + * . + */ + +package org.apache.tools.ant.taskdefs.optional.dotnet; + +import java.io.File; +import java.util.Iterator; +import java.util.ArrayList; +import java.util.List; + +/** + * Runs a NAnt build process. + */ +public class NAntTask extends AbstractBuildTask { + + public NAntTask() { + super(); + } + + protected String getExecutable() { + return "NAnt.exe"; + } + + protected String[] getBuildfileArguments(File buildFile) { + if (buildFile != null) { + return new String[] { + "-buildfile:" + buildFile.getAbsolutePath() + }; + } else { + return new String[0]; + } + } + + protected String[] getTargetArguments(List targets) { + ArrayList al = new ArrayList(targets.size()); + Iterator iter = targets.iterator(); + while (iter.hasNext()) { + AbstractBuildTask.Target t = (AbstractBuildTask.Target) iter.next(); + al.add(t.getName()); + } + return (String[]) al.toArray(new String[al.size()]); + } + + protected String[] getPropertyArguments(List properties) { + ArrayList al = new ArrayList(properties.size()); + Iterator iter = properties.iterator(); + while (iter.hasNext()) { + AbstractBuildTask.Property p = + (AbstractBuildTask.Property) iter.next(); + al.add("-D:" + p.getName() + "=" + p.getValue()); + } + return (String[]) al.toArray(new String[al.size()]); + } +} diff --git a/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml b/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml index 80260cdc4..ade2099b1 100644 --- a/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml +++ b/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml @@ -3,4 +3,12 @@ name="dotnetexec" classname="org.apache.tools.ant.taskdefs.optional.dotnet.DotNetExecTask" /> + +