compiler attribute rather than the current JDK (falling back to assuming the current JDK if compiler has not been specified). git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272509 13f79535-47bb-0310-9956-ffa450edef68master
@@ -62,6 +62,9 @@ Changes that could break older environments: | |||||
* If the 'output' attribute of <ant> is set to a simple filename or a | * If the 'output' attribute of <ant> is set to a simple filename or a | ||||
relative path, the file is created relative to ${basedir}, not ${user.dir}. | relative path, the file is created relative to ${basedir}, not ${user.dir}. | ||||
* The default value for build.compiler is now javac1.x with x | |||||
depending on the JDK that is running Ant instead of classic/modern. | |||||
Fixed bugs: | Fixed bugs: | ||||
----------- | ----------- | ||||
* A bug existed that prevented generated log files from being deleted as | * A bug existed that prevented generated log files from being deleted as | ||||
@@ -315,31 +315,6 @@ | |||||
<font color="#000000" size="-1" face="arial,helvetica,sanserif"> | <font color="#000000" size="-1" face="arial,helvetica,sanserif"> | ||||
Steve + any other help he can get | Steve + any other help he can get | ||||
</font> | </font> | ||||
</td> | |||||
</tr> | |||||
<tr> | |||||
<td bgcolor="#a0ddf0" colspan="" rowspan="" | |||||
valign="top" align="left"> | |||||
<font color="#000000" size="-1" face="arial,helvetica,sanserif"> | |||||
Base compiler command line switches on the selected | |||||
compiler, not the current JDK | |||||
</font> | |||||
</td> | |||||
<td bgcolor="#a0ddf0" colspan="" rowspan="" | |||||
valign="top" align="left"> | |||||
<font color="#000000" size="-1" face="arial,helvetica,sanserif"> | |||||
If you set compiler to javac1.1, massage your | |||||
classpath correctly and set include*runtime to false you | |||||
can invoke jdk 1.1's javac even though you are running on | |||||
a 1.3 VM. Current Ant will use -sourcepath which the | |||||
compiler cannot understand in this sitation. | |||||
</font> | |||||
</td> | |||||
<td bgcolor="#a0ddf0" colspan="" rowspan="" | |||||
valign="top" align="left"> | |||||
<font color="#000000" size="-1" face="arial,helvetica,sanserif"> | |||||
Stefan, others welcome | |||||
</font> | |||||
</td> | </td> | ||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
@@ -496,6 +471,27 @@ | |||||
<font color="#000000" size="-1" face="arial,helvetica,sanserif"> | <font color="#000000" size="-1" face="arial,helvetica,sanserif"> | ||||
Stefan | Stefan | ||||
</font> | </font> | ||||
</td> | |||||
</tr> | |||||
<tr> | |||||
<td bgcolor="#a0ddf0" colspan="" rowspan="" | |||||
valign="top" align="left"> | |||||
<font color="#000000" size="-1" face="arial,helvetica,sanserif"> | |||||
Base compiler command line switches on the selected | |||||
compiler, not the current JDK | |||||
</font> | |||||
</td> | |||||
<td bgcolor="#a0ddf0" colspan="" rowspan="" | |||||
valign="top" align="left"> | |||||
<font color="#000000" size="-1" face="arial,helvetica,sanserif"> | |||||
| |||||
</font> | |||||
</td> | |||||
<td bgcolor="#a0ddf0" colspan="" rowspan="" | |||||
valign="top" align="left"> | |||||
<font color="#000000" size="-1" face="arial,helvetica,sanserif"> | |||||
Stefan | |||||
</font> | |||||
</td> | </td> | ||||
</tr> | </tr> | ||||
</table> | </table> | ||||
@@ -70,8 +70,8 @@ attribute are:</p> | |||||
its own).</li> | its own).</li> | ||||
</ul> | </ul> | ||||
</a> | </a> | ||||
<p>For JDK 1.1/1.2, <code>classic</code> is the default. | |||||
For JDK 1.3/1.4, <code>modern</code> is the default. | |||||
<p>The default is <code>javac1.x</code> with <code>x</code> depending | |||||
on the JDK version you use while you are running Ant. | |||||
If you wish to use a different compiler interface than those | If you wish to use a different compiler interface than those | ||||
supplied, you can write a class that implements the CompilerAdapter interface | supplied, you can write a class that implements the CompilerAdapter interface | ||||
(<code>package org.apache.tools.ant.taskdefs.compilers</code>). Supply the full | (<code>package org.apache.tools.ant.taskdefs.compilers</code>). Supply the full | ||||
@@ -82,6 +82,14 @@ classname in the <code>build.compiler</code> property or the | |||||
or <code>compiler</code> attribute setting and | or <code>compiler</code> attribute setting and | ||||
expects a JDK1.1 or higher to be set in <code>JAVA_HOME</code>. | expects a JDK1.1 or higher to be set in <code>JAVA_HOME</code>. | ||||
</p> | </p> | ||||
<p>You can also use the <code>compiler</code> attribute to tell Ant | |||||
which JDK version it shall assume when it puts together the command | |||||
line switches - even if you set <code>fork="true"</code>. | |||||
This is useful if you want to run the compiler of JDK 1.1 while you | |||||
current JDK is 1.2+. If you use | |||||
<code>compiler="javac1.1"</code> and (for example) | |||||
<code>depend="true"</code> Ant will use the command line | |||||
switch <code>-depend</code> instead of <code>-Xdepend</code>.</p> | |||||
<p>This task will drop all entries that point to non-existent | <p>This task will drop all entries that point to non-existent | ||||
files/directories from the classpath it passes to the compiler.</p> | files/directories from the classpath it passes to the compiler.</p> | ||||
<p><strong>Windows Note:</strong>When the modern compiler is used | <p><strong>Windows Note:</strong>When the modern compiler is used | ||||
@@ -147,9 +147,14 @@ public class Javac extends MatchingTask { | |||||
* Javac task for compilation of Java files. | * Javac task for compilation of Java files. | ||||
*/ | */ | ||||
public Javac() { | public Javac() { | ||||
if (JavaEnvUtils.getJavaVersion() != JavaEnvUtils.JAVA_1_1 && | |||||
JavaEnvUtils.getJavaVersion() != JavaEnvUtils.JAVA_1_2) { | |||||
facade = new FacadeTaskHelper("modern"); | |||||
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) { | |||||
facade = new FacadeTaskHelper("javac1.1"); | |||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2)) { | |||||
facade = new FacadeTaskHelper("javac1.2"); | |||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_3)) { | |||||
facade = new FacadeTaskHelper("javac1.3"); | |||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4)) { | |||||
facade = new FacadeTaskHelper("javac1.4"); | |||||
} else { | } else { | ||||
facade = new FacadeTaskHelper("classic"); | facade = new FacadeTaskHelper("classic"); | ||||
} | } | ||||
@@ -617,11 +622,16 @@ public class Javac extends MatchingTask { | |||||
* @return array of command line arguments, guaranteed to be non-null. | * @return array of command line arguments, guaranteed to be non-null. | ||||
*/ | */ | ||||
public String[] getCurrentCompilerArgs() { | public String[] getCurrentCompilerArgs() { | ||||
String chosen = facade.getExplicitChoice(); | |||||
// make sure facade knows about magic properties and fork setting | // make sure facade knows about magic properties and fork setting | ||||
getCompiler(); | |||||
return facade.getArgs(); | |||||
facade.setImplementation(getCompiler()); | |||||
try { | |||||
return facade.getArgs(); | |||||
} finally { | |||||
facade.setImplementation(chosen); | |||||
} | |||||
} | } | ||||
/** | /** | ||||
* Executes the task. | * Executes the task. | ||||
@@ -712,17 +722,20 @@ public class Javac extends MatchingTask { | |||||
* <p>Defaults to the build.compiler property but can be overriden | * <p>Defaults to the build.compiler property but can be overriden | ||||
* via the compiler and fork attributes.</p> | * via the compiler and fork attributes.</p> | ||||
* | * | ||||
* <p>If fork has been set to true, the result will be extJavac | |||||
* and not classic or java1.2 - no matter what the compiler | |||||
* attribute looks like.</p> | |||||
* | |||||
* @see #getCompilerVersion | |||||
* | |||||
* @since Ant 1.5 | * @since Ant 1.5 | ||||
*/ | */ | ||||
public String getCompiler() { | public String getCompiler() { | ||||
facade.setMagicValue(getProject().getProperty("build.compiler")); | |||||
String compilerImpl = facade.getImplementation(); | |||||
String compilerImpl = getCompilerVersion(); | |||||
if (fork) { | if (fork) { | ||||
if (isJdkCompiler(compilerImpl)) { | if (isJdkCompiler(compilerImpl)) { | ||||
log("Since fork is true, ignoring compiler setting.", | log("Since fork is true, ignoring compiler setting.", | ||||
Project.MSG_WARN); | Project.MSG_WARN); | ||||
facade.setImplementation("extJavac"); | |||||
compilerImpl = "extJavac"; | compilerImpl = "extJavac"; | ||||
} else { | } else { | ||||
log("Since compiler setting isn't classic or modern," | log("Since compiler setting isn't classic or modern," | ||||
@@ -732,6 +745,24 @@ public class Javac extends MatchingTask { | |||||
return compilerImpl; | return compilerImpl; | ||||
} | } | ||||
/** | |||||
* The implementation for this particular task. | |||||
* | |||||
* <p>Defaults to the build.compiler property but can be overriden | |||||
* via the compiler attribute.</p> | |||||
* | |||||
* <p>This method does not take the fork attribute into | |||||
* account.</p> | |||||
* | |||||
* @see #getCompiler | |||||
* | |||||
* @since Ant 1.5 | |||||
*/ | |||||
public String getCompilerVersion() { | |||||
facade.setMagicValue(getProject().getProperty("build.compiler")); | |||||
return facade.getImplementation(); | |||||
} | |||||
/** | /** | ||||
* Check that all required attributes have been set and nothing | * Check that all required attributes have been set and nothing | ||||
* silly has been entered. | * silly has been entered. | ||||
@@ -57,11 +57,13 @@ package org.apache.tools.ant.taskdefs.compilers; | |||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
import org.apache.tools.ant.util.JavaEnvUtils; | |||||
/** | /** | ||||
* Creates the necessary compiler adapter, given basic criteria. | * Creates the necessary compiler adapter, given basic criteria. | ||||
* | * | ||||
* @author <a href="mailto:jayglanville@home.com">J D Glanville</a> | * @author <a href="mailto:jayglanville@home.com">J D Glanville</a> | ||||
* @since Ant 1.3 | |||||
*/ | */ | ||||
public class CompilerAdapterFactory { | public class CompilerAdapterFactory { | ||||
@@ -77,11 +79,12 @@ public class CompilerAdapterFactory { | |||||
* <ul><li>jikes = jikes compiler | * <ul><li>jikes = jikes compiler | ||||
* <li>classic, javac1.1, javac1.2 = the standard compiler from JDK | * <li>classic, javac1.1, javac1.2 = the standard compiler from JDK | ||||
* 1.1/1.2 | * 1.1/1.2 | ||||
* <li>modern, javac1.3 = the new compiler of JDK 1.3 | |||||
* <li>modern, javac1.3, javac1.4 = the compiler of JDK 1.3+ | |||||
* <li>jvc, microsoft = the command line compiler from Microsoft's SDK | * <li>jvc, microsoft = the command line compiler from Microsoft's SDK | ||||
* for Java / Visual J++ | * for Java / Visual J++ | ||||
* <li>kjc = the kopi compiler</li> | * <li>kjc = the kopi compiler</li> | ||||
* <li>gcj = the gcj compiler from gcc</li> | * <li>gcj = the gcj compiler from gcc</li> | ||||
* <li>sj, symantec = the Symantec Java compiler</li> | |||||
* <li><i>a fully quallified classname</i> = the name of a compiler | * <li><i>a fully quallified classname</i> = the name of a compiler | ||||
* adapter | * adapter | ||||
* </ul> | * </ul> | ||||
@@ -96,8 +99,8 @@ public class CompilerAdapterFactory { | |||||
throws BuildException { | throws BuildException { | ||||
boolean isClassicCompilerSupported = true; | boolean isClassicCompilerSupported = true; | ||||
//as new versions of java come out, add them to this test | //as new versions of java come out, add them to this test | ||||
if (Project.getJavaVersion() == Project.JAVA_1_4) { | |||||
isClassicCompilerSupported = false; | |||||
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4)) { | |||||
isClassicCompilerSupported = false; | |||||
} | } | ||||
if (compilerType.equalsIgnoreCase("jikes")) { | if (compilerType.equalsIgnoreCase("jikes")) { | ||||
@@ -107,41 +110,44 @@ public class CompilerAdapterFactory { | |||||
return new JavacExternal(); | return new JavacExternal(); | ||||
} | } | ||||
if (compilerType.equalsIgnoreCase("classic") || | if (compilerType.equalsIgnoreCase("classic") || | ||||
compilerType.equalsIgnoreCase("javac1.1") || | |||||
compilerType.equalsIgnoreCase("javac1.2")) { | |||||
compilerType.equalsIgnoreCase("javac1.1") || | |||||
compilerType.equalsIgnoreCase("javac1.2")) { | |||||
if (isClassicCompilerSupported) { | if (isClassicCompilerSupported) { | ||||
return new Javac12(); | return new Javac12(); | ||||
} else { | } else { | ||||
throw new BuildException("This version of java does " | throw new BuildException("This version of java does " | ||||
+ "not support the classic compiler"); | |||||
+ "not support the classic " | |||||
+ "compiler"); | |||||
} | } | ||||
} | } | ||||
//on java<=1.3 the modern falls back to classic if it is not found | //on java<=1.3 the modern falls back to classic if it is not found | ||||
//but on java>=1.4 we just bail out early | //but on java>=1.4 we just bail out early | ||||
if (compilerType.equalsIgnoreCase("modern") || | if (compilerType.equalsIgnoreCase("modern") || | ||||
compilerType.equalsIgnoreCase("javac1.3") || | |||||
compilerType.equalsIgnoreCase("javac1.4")) { | |||||
compilerType.equalsIgnoreCase("javac1.3") || | |||||
compilerType.equalsIgnoreCase("javac1.4")) { | |||||
// does the modern compiler exist? | // does the modern compiler exist? | ||||
if (doesModernCompilerExist()) { | if (doesModernCompilerExist()) { | ||||
return new Javac13(); | return new Javac13(); | ||||
} else { | } else { | ||||
if (isClassicCompilerSupported) { | if (isClassicCompilerSupported) { | ||||
task.log("Modern compiler not found - looking for " | task.log("Modern compiler not found - looking for " | ||||
+ "classic compiler", Project.MSG_WARN); | |||||
+ "classic compiler", Project.MSG_WARN); | |||||
return new Javac12(); | return new Javac12(); | ||||
} else { | } else { | ||||
throw new BuildException("Unable to find a javac " | throw new BuildException("Unable to find a javac " | ||||
+ "compiler;\n" | |||||
+ "com.sun.tools.javac.Main is not on the " | |||||
+ "classpath.\n" | |||||
+ "Perhaps JAVA_HOME does not point to the JDK"); | |||||
+ "compiler;\n" | |||||
+ "com.sun.tools.javac.Main " | |||||
+ "is not on the " | |||||
+ "classpath.\n" | |||||
+ "Perhaps JAVA_HOME does not" | |||||
+ " point to the JDK"); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
if (compilerType.equalsIgnoreCase("jvc") || | if (compilerType.equalsIgnoreCase("jvc") || | ||||
compilerType.equalsIgnoreCase("microsoft")) { | |||||
compilerType.equalsIgnoreCase("microsoft")) { | |||||
return new Jvc(); | return new Jvc(); | ||||
} | } | ||||
if (compilerType.equalsIgnoreCase("kjc")) { | if (compilerType.equalsIgnoreCase("kjc")) { | ||||
@@ -151,7 +157,7 @@ public class CompilerAdapterFactory { | |||||
return new Gcj(); | return new Gcj(); | ||||
} | } | ||||
if (compilerType.equalsIgnoreCase("sj") || | if (compilerType.equalsIgnoreCase("sj") || | ||||
compilerType.equalsIgnoreCase("symantec")) { | |||||
compilerType.equalsIgnoreCase("symantec")) { | |||||
return new Sj(); | return new Sj(); | ||||
} | } | ||||
return resolveClassName(compilerType); | return resolveClassName(compilerType); | ||||
@@ -62,8 +62,8 @@ import org.apache.tools.ant.taskdefs.Execute; | |||||
import org.apache.tools.ant.taskdefs.LogStreamHandler; | import org.apache.tools.ant.taskdefs.LogStreamHandler; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
import org.apache.tools.ant.util.FileUtils; | import org.apache.tools.ant.util.FileUtils; | ||||
import org.apache.tools.ant.util.JavaEnvUtils; | |||||
import java.io.File; | import java.io.File; | ||||
import java.io.PrintWriter; | import java.io.PrintWriter; | ||||
@@ -211,12 +211,7 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter { | |||||
sourcepath = src; | sourcepath = src; | ||||
} | } | ||||
// we cannot be using Java 1.0 when forking, so we only have to | |||||
// distinguish between Java 1.1, and Java 1.2 and higher, as Java 1.1 | |||||
// has its own parameter format | |||||
boolean usingJava1_1 | |||||
= Project.getJavaVersion().equals(Project.JAVA_1_1); | |||||
String memoryParameterPrefix = usingJava1_1 ? "-J-" : "-J-X"; | |||||
String memoryParameterPrefix = assumeJava11() ? "-J-" : "-J-X"; | |||||
if (memoryInitialSize != null) { | if (memoryInitialSize != null) { | ||||
if (!attributes.isForkedJavac()) { | if (!attributes.isForkedJavac()) { | ||||
attributes.log("Since fork is false, ignoring " | attributes.log("Since fork is false, ignoring " | ||||
@@ -256,7 +251,7 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter { | |||||
// Just add "sourcepath" to classpath ( for JDK1.1 ) | // Just add "sourcepath" to classpath ( for JDK1.1 ) | ||||
// as well as "bootclasspath" and "extdirs" | // as well as "bootclasspath" and "extdirs" | ||||
if (Project.getJavaVersion().startsWith("1.1")) { | |||||
if (assumeJava11()) { | |||||
Path cp = new Path(project); | Path cp = new Path(project); | ||||
/* | /* | ||||
* XXX - This doesn't mix very well with build.systemclasspath, | * XXX - This doesn't mix very well with build.systemclasspath, | ||||
@@ -297,10 +292,7 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter { | |||||
cmd.createArgument().setValue(encoding); | cmd.createArgument().setValue(encoding); | ||||
} | } | ||||
if (debug) { | if (debug) { | ||||
if (useDebugLevel | |||||
&& Project.getJavaVersion() != Project.JAVA_1_0 | |||||
&& Project.getJavaVersion() != Project.JAVA_1_1) { | |||||
if (useDebugLevel && !assumeJava11()) { | |||||
String debugLevel = attributes.getDebugLevel(); | String debugLevel = attributes.getDebugLevel(); | ||||
if (debugLevel != null) { | if (debugLevel != null) { | ||||
cmd.createArgument().setValue("-g:" + debugLevel); | cmd.createArgument().setValue("-g:" + debugLevel); | ||||
@@ -310,8 +302,7 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter { | |||||
} else { | } else { | ||||
cmd.createArgument().setValue("-g"); | cmd.createArgument().setValue("-g"); | ||||
} | } | ||||
} else if (Project.getJavaVersion() != Project.JAVA_1_0 && | |||||
Project.getJavaVersion() != Project.JAVA_1_1) { | |||||
} else if (!assumeJava11()) { | |||||
cmd.createArgument().setValue("-g:none"); | cmd.createArgument().setValue("-g:none"); | ||||
} | } | ||||
if (optimize) { | if (optimize) { | ||||
@@ -319,9 +310,9 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter { | |||||
} | } | ||||
if (depend) { | if (depend) { | ||||
if (Project.getJavaVersion().startsWith("1.1")) { | |||||
if (assumeJava11()) { | |||||
cmd.createArgument().setValue("-depend"); | cmd.createArgument().setValue("-depend"); | ||||
} else if (Project.getJavaVersion().startsWith("1.2")) { | |||||
} else if (assumeJava12()) { | |||||
cmd.createArgument().setValue("-Xdepend"); | cmd.createArgument().setValue("-Xdepend"); | ||||
} else { | } else { | ||||
attributes.log("depend attribute is not supported by the " | attributes.log("depend attribute is not supported by the " | ||||
@@ -474,5 +465,25 @@ public abstract class DefaultCompilerAdapter implements CompilerAdapter { | |||||
cmd.addArguments(getJavac().getCurrentCompilerArgs()); | cmd.addArguments(getJavac().getCurrentCompilerArgs()); | ||||
} | } | ||||
/** | |||||
* Shall we assume JDK 1.1 command line switches? | |||||
* @since Ant 1.5 | |||||
*/ | |||||
protected boolean assumeJava11() { | |||||
return "javac1.1".equals(attributes.getCompilerVersion()) || | |||||
("classic".equals(attributes.getCompilerVersion()) | |||||
&& JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)); | |||||
} | |||||
/** | |||||
* Shall we assume JDK 1.2 command line switches? | |||||
* @since Ant 1.5 | |||||
*/ | |||||
protected boolean assumeJava12() { | |||||
return "javac1.2".equals(attributes.getCompilerVersion()) || | |||||
("classic".equals(attributes.getCompilerVersion()) | |||||
&& JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2)); | |||||
} | |||||
} | } | ||||
@@ -126,6 +126,18 @@ public class JavaEnvUtils { | |||||
return javaVersion; | return javaVersion; | ||||
} | } | ||||
/** | |||||
* Compares the current Java version to the passed in String - | |||||
* assumes the argument is one of the constants defined in this | |||||
* class. | |||||
* @return true if the version of Java is the same as the given | |||||
* version. | |||||
* @since Ant 1.5 | |||||
*/ | |||||
public static boolean isJavaVersion(String version) { | |||||
return javaVersion == version; | |||||
} | |||||
/** | /** | ||||
* Finds an executable that is part of a JRE installation based on | * Finds an executable that is part of a JRE installation based on | ||||
* the java.home system property. | * the java.home system property. | ||||
@@ -132,6 +132,13 @@ public class FacadeTaskHelper { | |||||
: defaultValue); | : defaultValue); | ||||
} | } | ||||
/** | |||||
* Retrieves the explicit user choice | |||||
*/ | |||||
public String getExplicitChoice() { | |||||
return userChoice; | |||||
} | |||||
/** | /** | ||||
* Command line argument. | * Command line argument. | ||||
*/ | */ | ||||
@@ -55,6 +55,11 @@ | |||||
package org.apache.tools.ant.taskdefs; | package org.apache.tools.ant.taskdefs; | ||||
import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter; | |||||
import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory; | |||||
import org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter; | |||||
import org.apache.tools.ant.taskdefs.compilers.Javac12; | |||||
import org.apache.tools.ant.taskdefs.compilers.JavacExternal; | |||||
import junit.framework.TestCase; | import junit.framework.TestCase; | ||||
@@ -176,12 +181,16 @@ public class JavacTest extends TestCase { | |||||
String compiler = javac.getCompiler(); | String compiler = javac.getCompiler(); | ||||
assertNotNull(compiler); | assertNotNull(compiler); | ||||
assertTrue("default value", | assertTrue("default value", | ||||
"modern".equals(compiler) || "classic".equals(compiler)); | |||||
"javac1.1".equals(compiler) | |||||
|| "javac1.2".equals(compiler) | |||||
|| "javac1.3".equals(compiler) | |||||
|| "javac1.4".equals(compiler) | |||||
|| "classic".equals(compiler)); | |||||
javac.setFork(true); | javac.setFork(true); | ||||
compiler = javac.getCompiler(); | |||||
assertNotNull(compiler); | |||||
assertEquals("extJavac", compiler); | |||||
assertNotNull(javac.getCompiler()); | |||||
assertEquals("extJavac", javac.getCompiler()); | |||||
assertEquals(compiler, javac.getCompilerVersion()); | |||||
// check build.compiler provides defaults | // check build.compiler provides defaults | ||||
javac = new Javac(); | javac = new Javac(); | ||||
@@ -209,4 +218,17 @@ public class JavacTest extends TestCase { | |||||
assertEquals("jvc", compiler); | assertEquals("jvc", compiler); | ||||
} | } | ||||
public void testCompilerAdapter() { | |||||
javac.setCompiler("javac1.1"); | |||||
javac.setDepend(true); | |||||
CompilerAdapter adapter = | |||||
CompilerAdapterFactory.getCompiler(javac.getCompiler(), javac); | |||||
assertTrue(adapter instanceof Javac12); | |||||
javac.setFork(true); | |||||
adapter = | |||||
CompilerAdapterFactory.getCompiler(javac.getCompiler(), javac); | |||||
assertTrue(adapter instanceof JavacExternal); | |||||
} | |||||
} | } |
@@ -78,17 +78,6 @@ | |||||
<td>Steve + any other help he can get</td> | <td>Steve + any other help he can get</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td>Base compiler command line switches on the selected | |||||
compiler, not the current JDK</td> | |||||
<td>If you set compiler to javac1.1, massage your | |||||
classpath correctly and set include*runtime to false you | |||||
can invoke jdk 1.1's javac even though you are running on | |||||
a 1.3 VM. Current Ant will use -sourcepath which the | |||||
compiler cannot understand in this sitation.</td> | |||||
<td>Stefan, others welcome</td> | |||||
</tr> | |||||
<tr> | <tr> | ||||
<td>Make javadoc a real directory based task</td> | <td>Make javadoc a real directory based task</td> | ||||
<td></td> | <td></td> | ||||
@@ -142,7 +131,12 @@ | |||||
some cases yet (same reason as bug PR 7980)</td> | some cases yet (same reason as bug PR 7980)</td> | ||||
<td>Stefan</td> | <td>Stefan</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td>Base compiler command line switches on the selected | |||||
compiler, not the current JDK</td> | |||||
<td></td> | |||||
<td>Stefan</td> | |||||
</tr> | |||||
</table> | </table> | ||||
</subsection> | </subsection> | ||||