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;
+ +    }
+ +}
+ +