You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bu...@apache.org on 2001/07/06 14:14:44 UTC
[Bug 2476] New: - [PATCH] new compiler kjc and gcj support
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2476
*** shadow/2476 Fri Jul 6 05:14:44 2001
--- shadow/2476.tmp.15128 Fri Jul 6 05:14:44 2001
***************
*** 0 ****
--- 1,411 ----
+ +============================================================================+
+ | [PATCH] new compiler kjc and gcj support |
+ +----------------------------------------------------------------------------+
+ | Bug #: 2476 Product: Ant |
+ | Status: NEW Version: Nightly build |
+ | Resolution: Platform: All |
+ | Severity: Enhancement OS/Version: All |
+ | Priority: Other Component: Core tasks |
+ +----------------------------------------------------------------------------+
+ | Assigned To: ant-dev@jakarta.apache.org |
+ | Reported By: toraneko@kun.ne.jp |
+ | CC list: Cc: |
+ +----------------------------------------------------------------------------+
+ | URL: |
+ +============================================================================+
+ | DESCRIPTION |
+ here is a patch to support kjc Java compiler and GCJ (Java compiler from GNU)
+ ragards.
+
+ diff -uNr jakarta-ant.orig/docs/manual/CoreTasks/javac.html jakarta-
+ ant/docs/manual/CoreTasks/javac.html
+ --- jakarta-ant.orig/docs/manual/CoreTasks/javac.html Fri Jul 6 21:07:09 2001
+ +++ jakarta-ant/docs/manual/CoreTasks/javac.html Fri Jul 6 21:13:09 2001
+ @@ -38,6 +38,10 @@
+ compiler)</li>
+ <li>jvc (the Command-Line Compiler from Microsoft's SDK for Java /
+ Visual J++)</li>
+ + <li>kjc (the <a
+ + href="http://www.dms.at/kopi/" target="_top">kopi</a>
+ + compiler)</li>
+ + <li>gcj (the gcj compiler from gcc)
+ </ul>
+ <p>For JDK 1.1/1.2, classic is the default. For JDK 1.3, modern is the default.
+ If you wish to use a different compiler interface than one of the four
+ @@ -123,7 +127,7 @@
+ </tr>
+ <tr>
+ <td valign="top">encoding</td>
+ - <td valign="top">encoding of source files.</td>
+ + <td valign="top">encoding of source files.(gcj doesn't support this option
+ yet)</td>
+ <td align="center" valign="top">No</td>
+ </tr>
+ <tr>
+ diff -uNr jakarta-
+ ant.orig/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory
+ .java jakarta-
+ ant/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
+ --- jakarta-
+ ant.orig/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory
+ .java Fri Jul 6 21:07:09 2001
+ +++ jakarta-
+ ant/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
+ Fri Jul 6 21:12:41 2001
+ @@ -75,6 +75,7 @@
+ *
+ * The current mapping for compiler names are as follows:
+ * <ul><li>jikes = jikes compiler
+ + * <li>kjc = kjc compiler
+ * <li>classic, javac1.1, javac1.2 = the standard compiler from JDK
+ * 1.1/1.2
+ * <li>modern, javac1.3 = the new compiler of JDK 1.3
+ @@ -97,6 +98,12 @@
+ */
+ if ( compilerType.equalsIgnoreCase("jikes") ) {
+ return new Jikes();
+ + }
+ + if ( compilerType.equalsIgnoreCase("kjc") ) {
+ + return new Kjc();
+ + }
+ + if ( compilerType.equalsIgnoreCase("gcj") ) {
+ + return new GCJ();
+ }
+ if ( compilerType.equalsIgnoreCase("classic") ||
+ compilerType.equalsIgnoreCase("javac1.1") ||
+ diff -uNr jakarta-
+ ant.orig/src/main/org/apache/tools/ant/taskdefs/compilers/GCJ.java jakarta-
+ ant/src/main/org/apache/tools/ant/taskdefs/compilers/GCJ.java
+ --- jakarta-ant.orig/src/main/org/apache/tools/ant/taskdefs/compilers/GCJ.java
+ Thu Jan 1 09:00:00 1970
+ +++ jakarta-ant/src/main/org/apache/tools/ant/taskdefs/compilers/GCJ.java Fri
+ Jul 6 21:12:26 2001
+ @@ -0,0 +1,148 @@
+ +/*
+ + * The Apache Software License, Version 1.1
+ + *
+ + * Copyright (c) 2001 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.compilers;
+ +
+ +import org.apache.tools.ant.BuildException;
+ +import org.apache.tools.ant.Project;
+ +import org.apache.tools.ant.types.*;
+ +import java.io.File;
+ +
+ +/**
+ + * The implementation of the gcj compiler.
+ + * This is primarily a cut-and-paste from the jikes.
+ + *
+ + * @author <a href="mailto:tora@debian.org">Takashi Okamoto</a>
+ + */
+ +public class GCJ extends DefaultCompilerAdapter {
+ +
+ + /**
+ + * Performs a compile using the gcj compiler.
+ + *
+ + * @author tora@debian.org
+ + */
+ + public boolean execute() throws BuildException {
+ + Commandline cmd;
+ + attributes.log("Using gcj compiler", Project.MSG_VERBOSE);
+ + cmd = setupGCJCommand();
+ +
+ + int firstFileName = cmd.size();
+ + logAndAddFilesToCompile(cmd);
+ +
+ + return executeExternalCompile(cmd.getCommandline(), firstFileName) ==
+ 0;
+ + }
+ +
+ + protected Commandline setupGCJCommand() {
+ + Commandline cmd = new Commandline();
+ + Path classpath = new Path(project);
+ +
+ + // gcj doesn't support bootclasspath dir (-bootclasspath)
+ + // so we'll emulate it for compatibility and convenience.
+ + if (bootclasspath != null) {
+ + classpath.append(bootclasspath);
+ + }
+ +
+ + // gcj doesn't support an extension dir (-extdir)
+ + // so we'll emulate it for compatibility and convenience.
+ + addExtdirsToClasspath(classpath);
+ +
+ + if ( (bootclasspath == null) || (bootclasspath.size() == 0) ) {
+ + // no bootclasspath, therefore, get one from the java runtime
+ + includeJavaRuntime = true;
+ + }
+ + classpath.append(getCompileClasspath());
+ +
+ + // Gcj has no option for source-path so we
+ + // will add it to classpath.
+ + classpath.append(src);
+ +
+ + cmd.setExecutable("gcj");
+ +
+ + if (destDir != null) {
+ + cmd.createArgument().setValue("-d");
+ + cmd.createArgument().setFile(destDir);
+ +
+ + if(destDir.mkdirs()){
+ + throw new BuildException("Can't make output directories. Maybe
+ permission is wrong. ");
+ + };
+ + }
+ +
+ + cmd.createArgument().setValue("-classpath");
+ + cmd.createArgument().setPath(classpath);
+ +
+ + if (encoding != null) {
+ + System.err.println("Warning: gcj doesn't support -encoding
+ option.");
+ + }
+ + if (debug) {
+ + cmd.createArgument().setValue("-g1");
+ + }
+ + if (optimize) {
+ + cmd.createArgument().setValue("-O");
+ + }
+ +
+ + /**
+ + * gcj should be set for generate class.
+ + */
+ + cmd.createArgument().setValue("-C");
+ + return cmd;
+ + }
+ +}
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ diff -uNr jakarta-
+ ant.orig/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java jakarta-
+ ant/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java
+ --- jakarta-ant.orig/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java
+ Thu Jan 1 09:00:00 1970
+ +++ jakarta-ant/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java Fri
+ Jul 6 21:12:19 2001
+ @@ -0,0 +1,162 @@
+ +/*
+ + * The Apache Software License, Version 1.1
+ + *
+ + * Copyright (c) 2001 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.compilers;
+ +
+ +import org.apache.tools.ant.BuildException;
+ +import org.apache.tools.ant.Project;
+ +import org.apache.tools.ant.taskdefs.LogOutputStream;
+ +import org.apache.tools.ant.types.Commandline;
+ +import org.apache.tools.ant.types.Path;
+ +
+ +import java.io.*;
+ +import java.lang.reflect.Constructor;
+ +import java.lang.reflect.Method;
+ +
+ +/**
+ + * The implementation of the Java compiler for KJC.
+ + * This is primarily a cut-and-paste from Jikes.java and
+ + * DefaultCompilerAdapter.
+ + *
+ + * @author <a href="mailto:tora@debian.org">Takashi Okamoto</a>
+ + */
+ +public class Kjc extends DefaultCompilerAdapter {
+ +
+ + public boolean execute() throws BuildException {
+ + attributes.log("Using kjc compiler", Project.MSG_VERBOSE);
+ + Commandline cmd = setupKjcCommand();
+ +
+ + try {
+ + OutputStream logstr = new LogOutputStream(attributes,
+ Project.MSG_WARN);
+ + Class c = Class.forName("at.dms.kjc.Main");
+ +
+ + // Call the compile() method
+ + Method compile = c.getMethod("compile", new Class [] { String
+ [].class });
+ + Boolean ok = (Boolean)compile.invoke(null, new Object[]
+ {cmd.getArguments()});
+ + return ok.booleanValue();
+ + }
+ + catch (ClassNotFoundException ex) {
+ + throw new BuildException("Cannot use kjc compiler, as it is not
+ available"+
+ + " A common solution
+ is to set the environment variable"+
+ + " CLASSPATH to your kjc archive
+ (kjc.jar).", location);
+ + }
+ + catch (Exception ex) {
+ + if (ex instanceof BuildException) {
+ + throw (BuildException) ex;
+ + } else {
+ + throw new BuildException("Error starting kjc compiler: ", ex,
+ location);
+ + }
+ + }
+ + }
+ + /**
+ + * setup kjc command arguments.
+ + */
+ + protected Commandline setupKjcCommand() {
+ + Commandline cmd = new Commandline();
+ +
+ + // generate classpath, because kjc does't support sourcepath.
+ + Path classpath = getCompileClasspath();
+ +
+ + if (deprecation == true) {
+ + cmd.createArgument().setValue("-deprecation");
+ + }
+ +
+ + if (destDir != null) {
+ + cmd.createArgument().setValue("-d");
+ + cmd.createArgument().setFile(destDir);
+ + }
+ +
+ + // generate the clsspath
+ + cmd.createArgument().setValue("-classpath");
+ +
+ + Path cp = new Path(project);
+ +
+ + // kjc don't have bootclasspath option.
+ + if (bootclasspath != null) {
+ + cp.append(bootclasspath);
+ + }
+ +
+ + if (extdirs != null) {
+ + addExtdirsToClasspath(cp);
+ + }
+ +
+ + cp.append(classpath);
+ + cp.append(src);
+ +
+ + cmd.createArgument().setPath(cp);
+ +
+ + // kjc-1.5A doesn't support -encoding option now.
+ + // but it will be supported near the feature.
+ + if (encoding != null) {
+ + cmd.createArgument().setValue("-encoding");
+ + cmd.createArgument().setValue(encoding);
+ + }
+ +
+ + if (debug) {
+ + cmd.createArgument().setValue("-g");
+ + }
+ +
+ + if (optimize) {
+ + cmd.createArgument().setValue("-O2");
+ + }
+ +
+ + if (verbose) {
+ + cmd.createArgument().setValue("-verbose");
+ + }
+ +
+ + logAndAddFilesToCompile(cmd);
+ + return cmd;
+ + }
+ +}
+ +