git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275662 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -0,0 +1,21 @@ | |||||
| <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> | |||||
| @@ -0,0 +1,21 @@ | |||||
| <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> | |||||
| @@ -0,0 +1,8 @@ | |||||
| <Project DefaultTargets="empty"> | |||||
| <Target Name="empty"/> | |||||
| <Target Name="echo"> | |||||
| <Task Name="Echo" Message="foo is ${foo}"/> | |||||
| </Target> | |||||
| </Project> | |||||
| @@ -0,0 +1,8 @@ | |||||
| <project basedir="." default="empty"> | |||||
| <target name="empty"/> | |||||
| <target name="echo"> | |||||
| <echo message="foo is ${foo}"/> | |||||
| </target> | |||||
| </project> | |||||
| @@ -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 | |||||
| * <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(); | |||||
| } | |||||
| } | |||||
| @@ -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 | |||||
| * <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]; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -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 | |||||
| * <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()]); | |||||
| } | |||||
| } | |||||
| @@ -3,4 +3,12 @@ | |||||
| name="dotnetexec" | name="dotnetexec" | ||||
| classname="org.apache.tools.ant.taskdefs.optional.dotnet.DotNetExecTask" | 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> | </antlib> | ||||