You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by al...@apache.org on 2005/10/28 18:06:30 UTC
svn commit: r329234 - in /ant/core/trunk/src:
etc/testcases/taskdefs/optional/ etc/testcases/taskdefs/optional/dotnet/
main/org/apache/tools/ant/taskdefs/optional/dotnet/
testcases/org/apache/tools/ant/taskdefs/optional/
Author: alexeys
Date: Fri Oct 28 09:06:03 2005
New Revision: 329234
URL: http://svn.apache.org/viewcvs?rev=329234&view=rev
Log:
Bugzilla 28773
* added support for nested filesets into DotnetResource
* fixed problem when compiling with several references
Added:
ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/example3.cs
ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/res.resources (with props)
Modified:
ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet.xml
ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/example.cs
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetCompile.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetResource.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/JSharp.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/VisualBasicCompile.java
ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/optional/DotnetTest.java
Modified: ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet.xml
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet.xml?rev=329234&r1=329233&r2=329234&view=diff
==============================================================================
--- ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet.xml (original)
+++ ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet.xml Fri Oct 28 09:06:03 2005
@@ -97,15 +97,15 @@
</condition>
<property name="mono.executable" value="mint"/>
- <!-- now set a prop of the compiler name to whatever we found -->
+ <!-- now set a prop of the compiler name to whatever we found -->
<condition property="cs.compiler" value="csc">
<isset property="csc.found"/>
- </condition>
+ </condition>
<condition property="cs.compiler" value="mcs">
<isset property="mcs.found"/>
- </condition>
-
+ </condition>
+
</target>
<target name="init" depends="probe_for_apps">
@@ -164,6 +164,56 @@
<delete file="${testCSC.exe}"/>
</target>
+ <target name="testCSCResources" depends="testCSCResources-Mono,testCSCResources-MS"/>
+
+ <target name="testCSCResources-MS" depends="validate_csc" if="csc.found">
+ <property name="testCSCRes.exe"
+ location="${build.dir}/ExampleCscRes.exe" />
+ <csc
+ destFile="${testCSCRes.exe}"
+ targetType="exe"
+ srcDir="${src.dir}"
+ >
+ <resource file="${src.dir}/res.resources"/>
+ </csc>
+ <available property="app-res.created" file="${testCSCRes.exe}"/>
+ <fail unless="app-res.created">No app ${testCSC.exe} created</fail>
+ <exec executable="${testCSCRes.exe}" failonerror="true" />
+ <delete file="${testCSCRes.exe}"/>
+ <csc
+ destFile="${testCSCRes.exe}"
+ targetType="exe"
+ srcDir="${src.dir}"
+ >
+ <resource namespace="some.namespace" embed="true">
+ <fileset file="${src.dir}/res.resources"/>
+ </resource>
+ </csc>
+ <available property="app-res-2.created" file="${testCSCRes.exe}"/>
+ <fail unless="app-res-2.created">No app ${testCSC.exe} created</fail>
+ <exec executable="${testCSCRes.exe}" failonerror="true" />
+ <delete file="${testCSCRes.exe}"/>
+ </target>
+
+ <target name="testCSCResources-Mono" depends="validate_csc" if="mcs.found">
+ <property name="testCSCRes.exe"
+ location="${build.dir}/ExampleCscRes.exe" />
+ <csc
+ destFile="${testCSCRes.exe}"
+ targetType="exe"
+ includedefaultreferences="true"
+ srcDir="${src.dir}"
+ >
+ <resource file="${src.dir}/res.resources"/>
+ </csc>
+ <available property="app-res.created" file="${testCSCRes.exe}"/>
+ <fail unless="app-res.created">No app ${testCSC.exe} created</fail>
+ <exec executable="${mono.executable}" failonerror="true">
+ <arg value="${testCSCRes.exe}"/>
+ </exec>
+ <delete file="${testCSCRes.exe}"/>
+ </target>
+
<target name="testCSCintrinsicFileset"
depends="testCSCintrinsicFileset-MS,testCSCintrinsicFileset-Mono"/>
@@ -216,6 +266,18 @@
</csc>
<available property="dll.created" file="${testCSC.dll}"/>
<fail unless="dll.created">No file ${testCSC.dll} created</fail>
+ <property name="testCSC2.dll"
+ location="${build.dir}/folder with dir/Example3.dll" />
+ <mkdir dir="${build.dir}/folder with dir"/>
+ <csc
+ destFile="${testCSC2.dll}"
+ targetType="library"
+ executable="csc"
+ >
+ <src dir="${src.dir}" includes="example3.cs"/>
+ </csc>
+ <available property="dll2.created" file="${testCSC2.dll}"/>
+ <fail unless="dll2.created">No file ${testCSC2.dll} created</fail>
</target>
<target name="testCSCdll-Mono" depends="validate_csc" if="mcs.found">
@@ -245,12 +307,14 @@
>
<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"/>
</csc>
<available property="refapp.created" file="${testCscReferences.exe}"/>
<fail unless="refapp.created">No app ${testCscReferences.exe} created</fail>
+ <copy file="${testCSC2.dll}" todir="${build.dir}"/>
<exec executable="${testCscReferences.exe}" failonerror="true" />
</target>
@@ -280,7 +344,7 @@
depends="testILASM-Mono,testILASM-MS"
if="ilasm.found"/>
- <target name="ilasm" depends="validate_ilasm"
+ <target name="ilasm" depends="validate_ilasm"
if="ilasm.found">
<property name="testILASM.exe"
location="${build.dir}/ExampleIlasm.exe" />
@@ -294,13 +358,13 @@
<fail unless="ilasm.created">No app ${testILASM.exe} created</fail>
</target>
- <target name="testILASM-MS" depends="ilasm"
+ <target name="testILASM-MS" depends="ilasm"
if="ilasm.found" unless="mono.ilasm.found">
<exec executable="${testILASM.exe}"
failonerror="true"/>
</target>
- <target name="testILASM-Mono" depends="ilasm"
+ <target name="testILASM-Mono" depends="ilasm"
if="mono.ilasm.found">
<exec executable="${mono.executable}"
failonerror="true">
@@ -371,7 +435,7 @@
<available property="app.created" file="${testCSCresponseFile.exe}"/>
<fail unless="app.created">No app ${testCSCresponseFile.exe} created</fail>
<delete file="${testCSCresponseFile.exe}"/>
- </target>
+ </target>
</project>
Modified: ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/example.cs
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/example.cs?rev=329234&r1=329233&r2=329234&view=diff
==============================================================================
--- ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/example.cs (original)
+++ ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/example.cs Fri Oct 28 09:06:03 2005
@@ -14,12 +14,13 @@
* limitations under the License.
*
*/
-
+
using System;
public class Example {
public static void Main(String[] args) {
Example2.echo();
+ Example3.echo();
}
}
Added: ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/example3.cs
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/example3.cs?rev=329234&view=auto
==============================================================================
--- ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/example3.cs (added)
+++ ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/example3.cs Fri Oct 28 09:06:03 2005
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2003-2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+using System;
+
+/**
+ * this is just here to create confusion
+ */
+public class Example3 {
+
+ public static void echo() {
+ Console.WriteLine("hello, I look like Java, but I'm really .NET");
+ }
+
+}
Added: ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/res.resources
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/res.resources?rev=329234&view=auto
==============================================================================
Binary file - no diff available.
Propchange: ant/core/trunk/src/etc/testcases/taskdefs/optional/dotnet/res.resources
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java?rev=329234&r1=329233&r2=329234&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java Fri Oct 28 09:06:03 2005
@@ -386,8 +386,8 @@
* @return a string containing the resource param, or a null string
* to conditionally exclude a resource.
*/
- protected String createResourceParameter(DotnetResource resource) {
- return resource.getCSharpStyleParameter();
+ protected void createResourceParameter(NetCommand command, DotnetResource resource) {
+ resource.getParameters(getProject(), command, true);
}
}
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetCompile.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetCompile.java?rev=329234&r1=329233&r2=329234&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetCompile.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetCompile.java Fri Oct 28 09:06:03 2005
@@ -220,7 +220,7 @@
//bail on no references
if (notEmpty(references)) {
if (isWindows) {
- return REFERENCE_OPTION + '\"' + references + '\"';
+ return '\"' + REFERENCE_OPTION + references + '\"';
} else {
return REFERENCE_OPTION + references;
}
@@ -871,7 +871,7 @@
Enumeration e = resources.elements();
while (e.hasMoreElements()) {
DotnetResource resource = (DotnetResource) e.nextElement();
- command.addArgument(createResourceParameter(resource));
+ createResourceParameter(command, resource);
}
}
@@ -881,7 +881,7 @@
* @return a string containing the resource param, or a null string
* to conditionally exclude a resource.
*/
- protected abstract String createResourceParameter(DotnetResource resource);
+ protected abstract void createResourceParameter(NetCommand command, DotnetResource resource);
/**
@@ -904,37 +904,20 @@
if (filesToBuild.size() == 0) {
return 0;
}
- StringBuffer referenceList = new StringBuffer(REFERENCE_OPTION);
//now scan the hashtable and add the files
Enumeration files = filesToBuild.elements();
- boolean firstEntry = true;
while (files.hasMoreElements()) {
File file = (File) files.nextElement();
if (isFileManagedBinary(file)) {
- if (!firstEntry) {
- referenceList.append(getReferenceDelimiter());
- } else if (isWindows) {
- referenceList.append('\"');
- }
- referenceList.append(file.toString());
- firstEntry = false;
+ if (isWindows) command.addArgument('"'+REFERENCE_OPTION+file.toString()+'"');
+ else command.addArgument(REFERENCE_OPTION+file.toString());
} else {
log("ignoring " + file + " as it is not a managed executable",
Project.MSG_VERBOSE);
}
}
- // hack: This means we've added at least one reference that's
- // a managed binary
- if (!firstEntry) {
- //add it all to an argument
- if (isWindows) {
- command.addArgument(referenceList.toString() + '\"');
- } else {
- command.addArgument(referenceList.toString());
- }
- }
-
+
return filesOutOfDate;
}
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetResource.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetResource.java?rev=329234&r1=329233&r2=329234&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetResource.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetResource.java Fri Oct 28 09:06:03 2005
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2004 The Apache Software Foundation
+ * Copyright 2000-2005 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,6 +19,10 @@
import org.apache.tools.ant.BuildException;
import java.io.File;
+import java.util.ArrayList;
+import org.apache.tools.ant.types.FileSet;
+import java.util.Iterator;
+import org.apache.tools.ant.*;
/**
* class used by DotnetCompile to name resources, could be upgraded to a datatype
@@ -48,6 +52,16 @@
*/
private String name = null;
+ /**
+ * A list of filesets with resources.
+ */
+ private ArrayList fileSets=new ArrayList();
+
+ /**
+ * a namespace to be used with <filesets>
+ */
+ private String namespace = null;
+
public boolean isEmbed() {
return embed;
}
@@ -97,47 +111,103 @@
}
/**
+ * Filesets root namespace. The value always ends with '.' .
+ * @return String namespace name
+ */
+ public String getNamespace() {
+ return namespace;
+ }
+
+ /**
+ * Sets filesets root namespace.
+ * @param namespace String root namespace
+ */
+ public void setNamespace(String namespace) {
+ if (namespace==null) this.namespace=null;
+ else this.namespace=(namespace.length()==0 || namespace.endsWith(".") ? namespace : namespace+'.');
+ }
+
+ private void checkParameters() {
+ if (hasFilesets()) {
+ if (getName()!=null) throw new BuildException(
+ "Cannot use <resource name=\"...\"> attribute with filesets");
+ if (getFile()!=null) throw new BuildException(
+ "Cannot use <resource file=\"...\"> attribute with filesets");
+ }
+ else {
+ if (getNamespace()!=null) throw new BuildException(
+ "Cannot use <resource namespace=\"...\"> attribute without filesets");
+ }
+ }
+ /**
* build the C# style parameter (which has no public/private option)
* @return the built C# style parameter
*/
- public String getCSharpStyleParameter() {
- StringBuffer buffer = new StringBuffer();
- buffer.append(isEmbed() ? "/resource" : "/linkresource");
- buffer.append(':');
- buffer.append(getFile().toString());
- if (getName() != null) {
- buffer.append(',');
- buffer.append(getName());
+ public void getParameters(Project p, NetCommand command, boolean csharpStyle) {
+ checkParameters();
+ if (hasFilesets()) {
+ for (Iterator listIter=fileSets.iterator(); listIter.hasNext();) {
+ FileSet fs=(FileSet)listIter.next();;
+ String baseDirectory=fs.getDir(p).toString();
+ String namespace=getNamespace(); // ends with '.' or null
+ DirectoryScanner ds = fs.getDirectoryScanner(p);
+ String[] files = ds.getIncludedFiles();
+ for (int i=0; i<files.length; i++) {
+ String file=files[i];
+ command.addArgument(getParameter(baseDirectory+File.separatorChar+file, (namespace==null ? null : namespace+file.replace(File.separatorChar, '.')), csharpStyle));
+ }
+ }
}
- if (getPublic() != null) {
- throw new BuildException("This compiler does not support the "
- + "public/private option.");
+ else {
+ command.addArgument(getParameter(getFile().toString(), getName(),
+ csharpStyle));
}
- return buffer.toString();
}
- /**
- * This method gets the style of param used by VB and javascript
- * @return The style VB parameter being used.
- */
- public String getVbStyleParameter() {
- StringBuffer buffer = new StringBuffer();
- buffer.append(isEmbed() ? "/resource" : "/linkresource");
+ private String getParameter(String fileName, String name, boolean csharpStyle) {
+ StringBuffer buffer=new StringBuffer();
+ buffer.append(isEmbed()?"/resource":"/linkresource");
buffer.append(':');
- buffer.append(getFile().toString());
- if (getName() != null) {
+ buffer.append(fileName);
+ if (name!=null) {
buffer.append(',');
- buffer.append(getName());
- if (getPublic() != null) {
- buffer.append(',');
- buffer.append(getPublic().booleanValue()
- ? "public" : "private");
+ buffer.append(name);
+ if (csharpStyle) {
+ if (getPublic()!=null) {
+ throw new BuildException(
+ "This compiler does not support the "
+ +"public/private option.");
+ }
+ else {
+ if (getPublic()!=null) {
+ buffer.append(',');
+ buffer.append(getPublic().booleanValue()
+ ?"public":"private");
+ }
+ }
+ }
+ else if (getPublic()!=null) {
+ throw new BuildException("You cannot have a public or private "
+ +"option without naming the resource");
}
- } else if (getPublic() != null) {
- throw new BuildException("You cannot have a public or private "
- + "option without naming the resource");
}
return buffer.toString();
+ }
+
+ /**
+ * Adds a resource file set.
+ * @param fileset FileSet
+ */
+ public void addFileset(FileSet fileset) {
+ fileSets.add(fileset);
+ }
+
+ /**
+ * Checks that <resource> node has embedded <filesets>
+ * @return boolean
+ */
+ public boolean hasFilesets() {
+ return fileSets.size()>0;
}
}
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/JSharp.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/JSharp.java?rev=329234&r1=329233&r2=329234&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/JSharp.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/JSharp.java Fri Oct 28 09:06:03 2005
@@ -119,8 +119,8 @@
* @return a string containing the resource param, or a null string
* to conditionally exclude a resource.
*/
- protected String createResourceParameter(DotnetResource resource) {
- return resource.getCSharpStyleParameter();
+ protected void createResourceParameter(NetCommand command, DotnetResource resource) {
+ resource.getParameters(getProject(), command, true);
}
/**
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/VisualBasicCompile.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/VisualBasicCompile.java?rev=329234&r1=329233&r2=329234&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/VisualBasicCompile.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/VisualBasicCompile.java Fri Oct 28 09:06:03 2005
@@ -352,8 +352,8 @@
* @return a string containing the resource param, or a null string
* to conditionally exclude a resource.
*/
- protected String createResourceParameter(DotnetResource resource) {
- return resource.getVbStyleParameter();
+ protected void createResourceParameter(NetCommand command, DotnetResource resource) {
+ resource.getParameters(getProject(), command, false);
}
/**
Modified: ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/optional/DotnetTest.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/optional/DotnetTest.java?rev=329234&r1=329233&r2=329234&view=diff
==============================================================================
--- ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/optional/DotnetTest.java (original)
+++ ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/optional/DotnetTest.java Fri Oct 28 09:06:03 2005
@@ -91,6 +91,13 @@
}
/**
+ * A unit test for JUnit
+ */
+ public void testCscResources() throws Exception {
+ executeTarget("testCSCResources");
+ }
+
+ /**
* test we can assemble
*/
public void testILASM() throws Exception {
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org