Browse Source

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.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274222 13f79535-47bb-0310-9956-ffa450edef68
master
Steve Loughran 22 years ago
parent
commit
362a940807
9 changed files with 657 additions and 77 deletions
  1. +10
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java
  2. +5
    -2
      src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetBaseMatchingTask.java
  3. +112
    -69
      src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetCompile.java
  4. +135
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetDefine.java
  5. +181
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetResource.java
  6. +30
    -3
      src/main/org/apache/tools/ant/taskdefs/optional/dotnet/Ilasm.java
  7. +171
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/dotnet/JSharp.java
  8. +2
    -3
      src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NetCommand.java
  9. +11
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/dotnet/VisualBasicCompile.java

+ 10
- 0
src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java View File

@@ -449,5 +449,15 @@ public class CSharp extends DotnetCompile {
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();
}

}


+ 5
- 2
src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetBaseMatchingTask.java View File

@@ -76,9 +76,10 @@ public class DotnetBaseMatchingTask extends MatchingTask {
*/
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 @@ public class DotnetBaseMatchingTask extends MatchingTask {
* 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 @@ public class DotnetBaseMatchingTask extends MatchingTask {
//add the files to the command
addFilesToCommand(filesToBuild, command);


//now run the command of exe + settings + files
if (filesOutOfDate > 0) {
command.runCommand();
@@ -210,4 +212,5 @@ public class DotnetBaseMatchingTask extends MatchingTask {
}



}

+ 112
- 69
src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetCompile.java View File

@@ -152,6 +152,10 @@ public abstract class DotnetCompile
*/
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 @@ public abstract class DotnetCompile
* 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 @@ public abstract class DotnetCompile
"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 @@ public abstract class DotnetCompile
* list of extra modules to refer to
*/
protected String additionalModules;
/**
* filesets of references
*/
protected Vector referenceFilesets =new Vector();


/**
@@ -278,7 +288,7 @@ public abstract class DotnetCompile
protected String getReferencesParameter() {
//bail on no references
if (notEmpty(references)) {
return "/reference:" + references;
return REFERENCE_OPTION + references;
} else {
return null;
}
@@ -298,6 +308,15 @@ public abstract class DotnetCompile
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 @@ public abstract class DotnetCompile
return null;
}

StringBuffer s = new StringBuffer("/reference:");
StringBuffer s = new StringBuffer(REFERENCE_OPTION);
s.append(refpath);
return new String(s);
}
@@ -681,7 +700,7 @@ public abstract class DotnetCompile
* 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 @@ public abstract class DotnetCompile
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));
@@ -767,6 +786,14 @@ public abstract class DotnetCompile
return failOnError;
}

/**
* link or embed a resource
* @param resource
*/
public void addResource(DotnetResource resource) {
resources.add(resource);
}

/**
* test for a string containing something useful
*
@@ -810,6 +837,7 @@ public abstract class DotnetCompile
return "**/*." + getFileExtension();
}


/**
* do the work by building the command line and then calling it
*
@@ -821,8 +849,13 @@ public abstract class DotnetCompile
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);

}

@@ -869,6 +902,66 @@ public abstract class DotnetCompile
command.addArgument(getWin32ResParameter());
}

/**
* 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 @@ public abstract class DotnetCompile
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
@@ -907,69 +1013,6 @@ public abstract class DotnetCompile
}
}

/**
* 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;
}
}


}



+ 135
- 0
src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetDefine.java View File

@@ -0,0 +1,135 @@
/*
* 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 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.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;
}
}

+ 181
- 0
src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetResource.java View File

@@ -0,0 +1,181 @@
/*
* 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 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.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();
}
}

+ 30
- 3
src/main/org/apache/tools/ant/taskdefs/optional/dotnet/Ilasm.java View File

@@ -61,10 +61,13 @@ package org.apache.tools.ant.taskdefs.optional.dotnet;


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 @@ import org.apache.tools.ant.taskdefs.MatchingTask;
* </b> and <b>excludes="broken.il"</b> can be used to control the files pulled
* in. You can also use nested &lt;src&gt filesets to refer to source.
*
*@author Steve Loughran steve_l@iseran.com
*@version 0.6
* @author Steve Loughran steve_l@iseran.com
* @version 0.6
* @ant.task name="ilasm" category="dotnet"
*/

public class Ilasm
@@ -158,6 +162,10 @@ public class Ilasm
* any extra command options?
*/
protected String extraOptions;
/**
* filesets of references
*/
protected Vector referenceFilesets =new Vector();


/**
@@ -471,7 +479,7 @@ public class Ilasm

NetCommand command = buildIlasmCommand();

addFilesAndExecute(command);
addFilesAndExecute(command, false);

}
// end execute
@@ -502,6 +510,25 @@ public class Ilasm
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");
}


/**


+ 171
- 0
src/main/org/apache/tools/ant/taskdefs/optional/dotnet/JSharp.java View File

@@ -0,0 +1,171 @@
/*
* 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 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.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");
}
}
}

+ 2
- 3
src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NetCommand.java View File

@@ -281,14 +281,13 @@ public class NetCommand {
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);
}
}


+ 11
- 0
src/main/org/apache/tools/ant/taskdefs/optional/dotnet/VisualBasicCompile.java View File

@@ -68,6 +68,7 @@ import org.apache.tools.ant.BuildException;
*
* @author Brian Felder bfelder@providence.org
* @author Steve Loughran
* @ant.task name="vbc" category="dotnet"
*/

public class VisualBasicCompile extends DotnetCompile {
@@ -338,6 +339,16 @@ public class VisualBasicCompile extends DotnetCompile {
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();
}

/**
* Get the name of the compiler executable.
* @return The name of the compiler executable.


Loading…
Cancel
Save