bodewig 2003/11/21 05:53:57 Modified: proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet antlib.xml Added: proposal/sandbox/dotnet/src/etc/testcases msbuild.xml nant.xml proposal/sandbox/dotnet/src/etc/testcases/src msbuild.proj nant.build proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet AbstractBuildTask.java MSBuildTask.java NAntTask.java Log: NAnt and MSBuild tasks Revision Changes Path 1.1 ant/proposal/sandbox/dotnet/src/etc/testcases/msbuild.xml Index: msbuild.xml =================================================================== <project name="msbuild" basedir="." default="echo" xmlns:dn="antlib:org.apache.tools.ant.taskdefs.optional.dotnet"> <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="echo"> <msbuild buildfile="src/msbuild.proj" xmlns="antlib:org.apache.tools.ant.taskdefs.optional.dotnet" > <target name="echo"/> <property name="foo" value="bar"/> </msbuild> </target> </project> 1.1 ant/proposal/sandbox/dotnet/src/etc/testcases/nant.xml Index: nant.xml =================================================================== <project name="nant" basedir="." default="echo" xmlns:dn="antlib:org.apache.tools.ant.taskdefs.optional.dotnet"> <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="echo"> <nant buildfile="src/nant.build" xmlns="antlib:org.apache.tools.ant.taskdefs.optional.dotnet" > <target name="echo"/> <property name="foo" value="bar"/> </nant> </target> </project> 1.1 ant/proposal/sandbox/dotnet/src/etc/testcases/src/msbuild.proj Index: msbuild.proj =================================================================== <Project DefaultTargets="empty"> <Target Name="empty"/> <Target Name="echo"> <Task Name="Echo" Message="foo is ${foo}"/> </Target> </Project> 1.1 ant/proposal/sandbox/dotnet/src/etc/testcases/src/nant.build Index: nant.build =================================================================== <project basedir="." default="empty"> <target name="empty"/> <target name="echo"> <echo message="foo is ${foo}"/> </target> </project> 1.2 +8 -0 ant/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml Index: antlib.xml =================================================================== RCS file: /home/cvs/ant/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/antlib.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- antlib.xml 21 Nov 2003 12:39:31 -0000 1.1 +++ antlib.xml 21 Nov 2003 13:53:57 -0000 1.2 @@ -3,4 +3,12 @@ name="dotnetexec" classname="org.apache.tools.ant.taskdefs.optional.dotnet.DotNetExecTask" /> + <taskdef + name="msbuild" + classname="org.apache.tools.ant.taskdefs.optional.dotnet.MSBuildTask" + /> + <taskdef + name="nant" + classname="org.apache.tools.ant.taskdefs.optional.dotnet.NAntTask" + /> </antlib> 1.1 ant/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/AbstractBuildTask.java Index: AbstractBuildTask.java =================================================================== /* * 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 [EMAIL PROTECTED] * * 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.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(); } } 1.1 ant/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/MSBuildTask.java Index: MSBuildTask.java =================================================================== /* * 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 [EMAIL PROTECTED] * * 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 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]; } } } 1.1 ant/proposal/sandbox/dotnet/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NAntTask.java Index: NAntTask.java =================================================================== /* * 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 [EMAIL PROTECTED] * * 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 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()]); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]