stevel 2003/03/10 22:07:38
Modified: src/main/org/apache/tools/ant/taskdefs/optional/dotnet
CSharp.java DotnetBaseMatchingTask.java
DotnetCompile.java Ilasm.java NetCommand.java
VisualBasicCompile.java
Added: src/main/org/apache/tools/ant/taskdefs/optional/dotnet
DotnetDefine.java DotnetResource.java JSharp.java
Log:
Rounding off the toolchain with <defines> that has the same syntax as that of
<cc>, a resource type for resource inclusion, and , uh, a J# compiler. Notice
how I reverse the pureJava setting from that of vjc, so you need to explicitly
ask for impure java. I havent enabled this in the types yet, in case anyone
wants to veto the concept altogether.
Then I add <reference> fileset support into vbc, jsharp and csc, including
inside the dependency checking.
resources still need dependency checking, and testing.
Revision Changes Path
1.30 +10 -0
ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java
Index: CSharp.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- CSharp.java 10 Feb 2003 14:13:48 -0000 1.29
+++ CSharp.java 11 Mar 2003 06:07:37 -0000 1.30
@@ -449,5 +449,15 @@
return "cs";
}
+ /**
+ * from a resource, get the resource param string
+ * @param resource
+ * @return a string containing the resource param, or a null string
+ * to conditionally exclude a resource.
+ */
+ protected String createResourceParameter(DotnetResource resource) {
+ return resource.getCSharpStyleParameter();
+ }
+
}
1.2 +5 -2
ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetBaseMatchingTask.java
Index: DotnetBaseMatchingTask.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetBaseMatchingTask.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DotnetBaseMatchingTask.java 10 Mar 2003 08:02:24 -0000 1.1
+++ DotnetBaseMatchingTask.java 11 Mar 2003 06:07:37 -0000 1.2
@@ -76,9 +76,10 @@
*/
protected File outputFile;
/**
- * sets of file to compile
+ * filesets of file to compile
*/
protected Vector filesets = new Vector();
+
/**
* source directory upon which the search pattern is applied
*/
@@ -193,7 +194,7 @@
* finish off the command by adding all dependent files, execute
* @param command
*/
- protected void addFilesAndExecute(NetCommand command) {
+ protected void addFilesAndExecute(NetCommand command, boolean
ignoreTimestamps) {
long outputTimestamp = getOutputFileTimestamp();
Hashtable filesToBuild =new Hashtable();
int filesOutOfDate = buildFileList(command,filesToBuild,
outputTimestamp);
@@ -201,6 +202,7 @@
//add the files to the command
addFilesToCommand(filesToBuild, command);
+
//now run the command of exe + settings + files
if (filesOutOfDate > 0) {
command.runCommand();
@@ -208,6 +210,7 @@
log("output file is up to date",Project.MSG_VERBOSE);
}
}
+
}
1.7 +112 -69
ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetCompile.java
Index: DotnetCompile.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetCompile.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- DotnetCompile.java 10 Mar 2003 08:02:24 -0000 1.6
+++ DotnetCompile.java 11 Mar 2003 06:07:37 -0000 1.7
@@ -152,6 +152,10 @@
*/
protected Vector definitionList = new Vector();
+ /**
+ * our resources
+ */
+ protected Vector resources = new Vector();
/**
* Fix .NET reference inclusion. .NET is really dumb in how it handles
@@ -167,7 +171,7 @@
* need to reference mscorlib.dll, cos it is always there
*/
- protected static final String [] DEFAULT_REFERENCE_LIST_DOTNET_10 =
+ protected static final String[] DEFAULT_REFERENCE_LIST_DOTNET_10 =
{"Accessibility.dll",
"cscompmgd.dll",
"CustomMarshalers.dll",
@@ -192,6 +196,8 @@
"System.Windows.Forms.dll",
"System.XML.dll"};
+ protected static final String REFERENCE_OPTION= "/reference:";
+
/**
* debug flag. Controls generation of debug information.
*/
@@ -230,6 +236,10 @@
* list of extra modules to refer to
*/
protected String additionalModules;
+ /**
+ * filesets of references
+ */
+ protected Vector referenceFilesets =new Vector();
/**
@@ -278,7 +288,7 @@
protected String getReferencesParameter() {
//bail on no references
if (notEmpty(references)) {
- return "/reference:" + references;
+ return REFERENCE_OPTION + references;
} else {
return null;
}
@@ -298,6 +308,15 @@
referenceFiles.append(path);
}
+ /**
+ * add a new reference fileset to the compilation
+ * @param reference
+ */
+ public void addReference(FileSet reference) {
+ referenceFilesets.add(reference);
+ }
+
+
/**
* turn the path list into a list of files and a /references argument
@@ -319,7 +338,7 @@
return null;
}
- StringBuffer s = new StringBuffer("/reference:");
+ StringBuffer s = new StringBuffer(REFERENCE_OPTION);
s.append(refpath);
return new String(s);
}
@@ -681,7 +700,7 @@
* add a define to the list of definitions
* @param define
*/
- public void addDefine(Define define) {
+ public void addDefine(DotnetDefine define) {
definitionList.addElement(define);
}
@@ -695,7 +714,7 @@
Enumeration defEnum=definitionList.elements();
while (defEnum.hasMoreElements()) {
//loop through all definitions
- Define define = (Define) defEnum.nextElement();
+ DotnetDefine define = (DotnetDefine) defEnum.nextElement();
if(define.isSet(this)) {
//add those that are set, and a delimiter
defines.append(define.getValue(this));
@@ -768,6 +787,14 @@
}
/**
+ * link or embed a resource
+ * @param resource
+ */
+ public void addResource(DotnetResource resource) {
+ resources.add(resource);
+ }
+
+ /**
* test for a string containing something useful
*
[EMAIL PROTECTED] s string in
@@ -810,6 +837,7 @@
return "**/*." + getFileExtension();
}
+
/**
* do the work by building the command line and then calling it
*
@@ -821,8 +849,13 @@
NetCommand command = createNetCommand();
//fill in args
fillInSharedParameters(command);
+ addResources(command);
addCompilerSpecificOptions(command);
- addFilesAndExecute(command);
+ int referencesOutOfDate=addReferenceFilesets(command,
+ getOutputFileTimestamp());
+ //if the refs are out of date, force a build.
+ boolean forceBuild= referencesOutOfDate > 0;
+ addFilesAndExecute(command, forceBuild);
}
@@ -870,6 +903,66 @@
}
/**
+ * for every resource declared, we get the (language specific)
+ * resource setting
+ */
+ protected void addResources(NetCommand command) {
+ Enumeration e=resources.elements();
+ while (e.hasMoreElements()) {
+ DotnetResource resource = (DotnetResource) e.nextElement();
+ command.addArgument(createResourceParameter(resource));
+ }
+ }
+
+ /**
+ * from a resource, get the
+ * @param resource
+ * @return a string containing the resource param, or a null string
+ * to conditionally exclude a resource.
+ */
+ protected abstract String createResourceParameter(DotnetResource
resource);
+
+
+ /**
+ * run through the list of reference files and add them to the command
+ * @param outputTimestamp timestamp to compare against
+ * @return number of files out of date
+ */
+
+ protected int addReferenceFilesets(NetCommand command, long
outputTimestamp) {
+ int filesOutOfDate = 0;
+ Hashtable filesToBuild=new Hashtable();
+ for (int i = 0; i < referenceFilesets.size(); i++) {
+ FileSet fs = (FileSet) referenceFilesets.elementAt(i);
+ filesOutOfDate += command.scanOneFileset(
+ fs.getDirectoryScanner(getProject()),
+ filesToBuild,
+ outputTimestamp);
+ }
+ //bail out early if there were no files
+ if(filesToBuild.size()==0) {
+ return 0;
+ }
+ StringBuffer referenceList= new StringBuffer(REFERENCE_OPTION);
+ //now scan the hashtable and add the files
+ Enumeration files = filesToBuild.elements();
+ while (files.hasMoreElements()) {
+ File file = (File) files.nextElement();
+ if(isFileManagedBinary(file)) {
+ referenceList.append(file.toString());
+ referenceList.append(getReferenceDelimiter());
+ } else {
+ log("ignoring "+file+" as it is not a managed executable",
+ Project.MSG_VERBOSE);
+ }
+
+ }
+ //add it all to an argument
+ command.addArgument(referenceList.toString());
+ return filesOutOfDate;
+ }
+
+ /**
* create our helper command
* @return a command prefilled with the exe name and task name
*/
@@ -892,6 +985,19 @@
return ";";
}
+
+ /**
+ * test for a file being managed or not
+ * @return true if we think this is a managed executable, and thus OK
+ * for linking
+ * @todo look at the PE header of the exe and see if it is managed or
not.
+ */
+ protected static boolean isFileManagedBinary(File file) {
+ String filename= file.toString().toLowerCase();
+ return filename.endsWith(".exe") || filename.endsWith(".dll")
+ || filename.endsWith(".netmodule");
+ }
+
/**
* Target types to build.
* valid build types are exe|library|module|winexe
@@ -904,69 +1010,6 @@
"module",
"winexe"
};
- }
- }
-
- /**
- * definitions can be conditional. What .NET conditions can not be
- * is in any state other than defined and undefined; you cannot give
- * a definition a value.
- */
- public static class Define {
- private String name;
- private String condition;
-
- public String getCondition() {
- return condition;
- }
-
- /**
- * the name of a property which must be defined for
- * the definition to be set. Optional.
- * @param condition
- */
- public void setCondition(String condition) {
- this.condition = condition;
- }
-
- public String getName() {
- return name;
- }
-
- /**
- * the name of the definition. Required.
- * @param name
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * get the value of this definition. Will be null if a condition
- * was declared and not met
- * @param owner owning task
- * @return
- * @throws BuildException
- */
- public String getValue(Task owner) throws BuildException {
- if(name==null) {
- throw new BuildException("No name provided for the define
element",
- owner.getLocation());
- }
- if(!isSet(owner)) {
- return null;
- }
- return name;
- }
-
- /**
- * test for a define being set
- * @param owner
- * @return true if there was no condition, or it is met
- */
- public boolean isSet(Task owner) {
- return condition==null
- || owner.getProject().getProperty(condition) != null;
}
}
1.27 +30 -3
ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/Ilasm.java
Index: Ilasm.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/Ilasm.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- Ilasm.java 10 Mar 2003 08:02:24 -0000 1.26
+++ Ilasm.java 11 Mar 2003 06:07:37 -0000 1.27
@@ -61,10 +61,13 @@
import java.io.File;
+import java.util.Vector;
+
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.EnumeratedAttribute;
+import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.taskdefs.MatchingTask;
/**
@@ -86,8 +89,9 @@
* </b> and <b>excludes="broken.il"</b> can be used to control the files
pulled
* in. You can also use nested <src> filesets to refer to source.
*
- [EMAIL PROTECTED] Steve Loughran [EMAIL PROTECTED]
- [EMAIL PROTECTED] 0.6
+ * @author Steve Loughran [EMAIL PROTECTED]
+ * @version 0.6
+ * @ant.task name="ilasm" category="dotnet"
*/
public class Ilasm
@@ -158,6 +162,10 @@
* any extra command options?
*/
protected String extraOptions;
+ /**
+ * filesets of references
+ */
+ protected Vector referenceFilesets =new Vector();
/**
@@ -471,7 +479,7 @@
NetCommand command = buildIlasmCommand();
- addFilesAndExecute(command);
+ addFilesAndExecute(command, false);
}
// end execute
@@ -502,6 +510,25 @@
return command;
}
+ /**
+ * add a new reference fileset to the compilation
+ * @param reference
+ */
+ public void addReference(FileSet reference) {
+ referenceFilesets.add(reference);
+ }
+
+ /**
+ * test for a file being managed or not
+ * @return true if we think this is a managed executable, and thus OK
+ * for linking
+ * @todo look at the PE header of the exe and see if it is managed or
not.
+ */
+ protected static boolean isFileManagedBinary(File file) {
+ String filename= file.toString().toLowerCase();
+ return filename.endsWith(".exe") || filename.endsWith(".dll")
+ || filename.endsWith(".netmodule");
+ }
/**
1.20 +2 -3
ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NetCommand.java
Index: NetCommand.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NetCommand.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- NetCommand.java 10 Mar 2003 10:11:19 -0000 1.19
+++ NetCommand.java 11 Mar 2003 06:07:37 -0000 1.20
@@ -281,14 +281,13 @@
for (int i = 0; i < dependencies.length; i++) {
File targetFile = new File(base, dependencies[i]);
if (filesToBuild.get(targetFile) == null) {
- owner.log(targetFile.toString(), Project.MSG_VERBOSE);
filesToBuild.put(targetFile, targetFile);
if (targetFile.lastModified() > outputTimestamp) {
filesOutOfDate++;
- owner.log("Source file " + targetFile.toString() + " is
out of date",
+ owner.log(targetFile.toString() + " is out of date",
Project.MSG_VERBOSE);
} else {
- owner.log("Source file " + targetFile.toString() + " is
up to date",
+ owner.log(targetFile.toString(),
Project.MSG_VERBOSE);
}
}
1.3 +11 -0
ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/VisualBasicCompile.java
Index: VisualBasicCompile.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/VisualBasicCompile.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- VisualBasicCompile.java 10 Feb 2003 14:13:48 -0000 1.2
+++ VisualBasicCompile.java 11 Mar 2003 06:07:37 -0000 1.3
@@ -68,6 +68,7 @@
*
* @author Brian Felder [EMAIL PROTECTED]
* @author Steve Loughran
+ * @ant.task name="vbc" category="dotnet"
*/
public class VisualBasicCompile extends DotnetCompile {
@@ -336,6 +337,16 @@
*/
public String getFileExtension() {
return "vb";
+ }
+
+ /**
+ * from a resource, get the resource param
+ * @param resource
+ * @return a string containing the resource param, or a null string
+ * to conditionally exclude a resource.
+ */
+ protected String createResourceParameter(DotnetResource resource) {
+ return resource.getVbStyleParameter();
}
/**
1.1
ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetDefine.java
Index: DotnetDefine.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 "The Jakarta Project", "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.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.Project;
/**
* definitions can be conditional. What .NET conditions can not be
* is in any state other than defined and undefined; you cannot give
* a definition a value.
*/
public class DotnetDefine {
private String name;
private String ifCond;
private String unlessCond;
/**
* the name of a property which must be defined for
* the definition to be set. Optional.
* @param condition
*/
public void setIf(String condition) {
this.ifCond = condition;
}
/**
* the name of a property which must be undefined for
* the definition to be set. Optional.
* @param condition
*/
public void setUnless(String condition) {
this.unlessCond = condition;
}
public String getName() {
return name;
}
/**
* the name of the definition. Required.
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* get the value of this definition. Will be null if a condition
* was declared and not met
* @param owner owning task
* @return
* @throws BuildException
*/
public String getValue(Task owner) throws BuildException {
if(name==null) {
throw new BuildException("No name provided for the define
element",
owner.getLocation());
}
if(!isSet(owner)) {
return null;
}
return name;
}
/**
* logic taken from patternset
* @param owner
* @return true if the condition is valid
*/
public boolean isSet(Task owner) {
Project p=owner.getProject();
if (ifCond != null && p.getProperty(ifCond) == null) {
return false;
} else if (unlessCond != null && p.getProperty(unlessCond) != null) {
return false;
}
return true;
}
}
1.1
ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetResource.java
Index: DotnetResource.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 "The Jakarta Project", "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.BuildException;
import java.io.File;
/**
* class used by DotnetCompile to name resources, could be upgraded to a
datatype
* in the distant future.
* a resource maps to /res:file,name
*/
public class DotnetResource {
/**
* name of resource
*/
private File file;
/**
* embed (default) or link the resource
*/
private boolean embed = true;
/**
* this is used in VBC and JSC
*/
private Boolean isPublic = null;
/**
* name of the object
*/
private String name = null;
public boolean isEmbed() {
return embed;
}
/**
* embed the resource in the assembly (default, true) or just link to it.
* @param embed
*/
public void setEmbed(boolean embed) {
this.embed = embed;
}
public File getFile() {
return file;
}
/**
* name the resource
* @param file
*/
public void setFile(File file) {
this.file = file;
}
public Boolean getPublic() {
return isPublic;
}
/**
* VB and J# only: is a resource public or not?
* @param aPublic
*/
public void setPublic(Boolean aPublic) {
isPublic = aPublic;
}
public String getName() {
return name;
}
/**
* should the resource have a name?
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* build the C# style parameter (which has no public/private option)
* @return
*/
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());
}
if (getPublic() != null) {
throw new BuildException("This compiler does not support the "
+ "public/private option.");
}
return buffer.toString();
}
/**
* get the style of param used by VB and javascript
* @return
*/
public String getVbStyleParameter() {
StringBuffer buffer = new StringBuffer();
buffer.append(isEmbed() ? "/resource" : "/linkresource");
buffer.append(':');
buffer.append(getFile().toString());
if (getName() != null) {
buffer.append(',');
buffer.append(getName());
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");
}
return buffer.toString();
}
}
1.1
ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/JSharp.java
Index: JSharp.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 "The Jakarta Project", "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.BuildException;
/**
* Compile J# source down to a managed .NET application.
* J# is not Java. But it is the language closest to Java in the .NET
framework.
* This task compiles jsharp source (assumes a .jsl extension, incidentally),
and
* generates a .NET managed exe or dll.
* See
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vjsharp/html/vjoriMicrosoftVisualJ.asp
* for vjc command options in glory detail.
* @author Steve Loughran
* @since ant1.6
* @ant.task name="jsharp" category="dotnet"
*/
public class JSharp extends DotnetCompile {
/**
* hex base address
*/
String baseAddress;
/** /x option to disable J++ and J# lang extensions
*
*/
boolean pureJava = true;
/**
* whether to make package scoped stuff public or assembly scoped
*/
boolean secureScoping = false;
public void setBaseAddress(String baseAddress) {
this.baseAddress = baseAddress;
}
/**
* do we want pure java (default, true) or corrupted J#?
* @param pureJava
*/
public void setPureJava(boolean pureJava) {
this.pureJava = pureJava;
}
/**
* Make package scoped code visible to the current assembly only
(default: false)
* .NET does not have package scoping. Instead it has assembly, private
and public.
* By default, package content is public to all.
* @param secureScoping
*/
public void setSecureScoping(boolean secureScoping) {
this.secureScoping = secureScoping;
}
/**
* Get the delimiter that the compiler uses between references.
* For example, c# will return ";"; VB.NET will return ","
* @return The string delimiter for the reference string.
*/
public String getReferenceDelimiter() {
return ";";
}
/**
* Get the name of the compiler executable.
* @return The name of the compiler executable.
*/
public String getCompilerExeName() {
return "vjc";
}
/**
* Get the extension of filenames to compile.
* @return The string extension of files to compile.
*/
public String getFileExtension() {
return ".jsl";
}
/**
* add jvc specific commands
* @param command
*/
protected void addCompilerSpecificOptions(NetCommand command) {
if (pureJava) {
command.addArgument("/x");
}
if (secureScoping) {
command.addArgument("/securescoping");
}
}
/**
* from a resource, get the resource param
* @param resource
* @return a string containing the resource param, or a null string
* to conditionally exclude a resource.
*/
protected String createResourceParameter(DotnetResource resource) {
return resource.getCSharpStyleParameter();
}
/**
* validation code
* @throws org.apache.tools.ant.BuildException if validation failed
*/
protected void validate()
throws BuildException {
super.validate();
if (getDestFile() == null) {
throw new BuildException("DestFile was not specified");
}
}
}