You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2001/08/01 17:54:24 UTC

cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs/compilers Gcj.java Kjc.java CompilerAdapterFactory.java

bodewig     01/08/01 08:54:24

  Modified:    .        WHATSNEW
               docs/manual/CoreTasks javac.html
               src/main/org/apache/tools/ant/taskdefs/compilers
                        CompilerAdapterFactory.java
  Added:       src/main/org/apache/tools/ant/taskdefs/compilers Gcj.java
                        Kjc.java
  Log:
  Support for kopi and gcc implementations of <javac>.
  
  PR: 2476
  Submitted by:	Takashi Okamoto <to...@debian.org>
  
  Revision  Changes    Path
  1.136     +3 -0      jakarta-ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/WHATSNEW,v
  retrieving revision 1.135
  retrieving revision 1.136
  diff -u -r1.135 -r1.136
  --- WHATSNEW	2001/08/01 09:08:55	1.135
  +++ WHATSNEW	2001/08/01 15:54:24	1.136
  @@ -135,6 +135,9 @@
     elements - using these you can have more than one in/excludes file
     per <patternset>. 
   
  +* Two new supported compilers for javac: kjc for kopi and gcj for the
  +  gcc frontend.
  +
   Fixed bugs:
   -----------
   
  
  
  
  1.7       +5 -1      jakarta-ant/docs/manual/CoreTasks/javac.html
  
  Index: javac.html
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/docs/manual/CoreTasks/javac.html,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- javac.html	2001/06/13 15:29:42	1.6
  +++ javac.html	2001/08/01 15:54:24	1.7
  @@ -38,6 +38,9 @@
       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)</li>
   </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 +126,8 @@
     </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>
  
  
  
  1.2       +8 -0      jakarta-ant/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
  
  Index: CompilerAdapterFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CompilerAdapterFactory.java	2001/01/12 14:08:51	1.1
  +++ CompilerAdapterFactory.java	2001/08/01 15:54:24	1.2
  @@ -80,6 +80,8 @@
        * <li>modern, javac1.3 = the new compiler of JDK 1.3
        * <li>jvc, microsoft = the command line compiler from Microsoft's SDK
        * for Java / Visual J++
  +     * <li>kjc = the kopi compiler</li>
  +     * <li>gcj = the gcj compiler from gcc</li>
        * <li><i>a fully quallified classname</i> = the name of a compiler
        * adapter
        * </ul>
  @@ -118,6 +120,12 @@
               if ( compilerType.equalsIgnoreCase("jvc") ||
                       compilerType.equalsIgnoreCase("microsoft")) {
                   return new Jvc();
  +            }
  +            if ( compilerType.equalsIgnoreCase("kjc") ) {
  +                return new Kjc();
  +            }
  +            if ( compilerType.equalsIgnoreCase("gcj") ) {
  +                return new Gcj();
               }
               return resolveClassName( compilerType );
           }
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.java
  
  Index: Gcj.java
  ===================================================================
  /*
   * 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) {
              attributes.log("gcj doesn't support -encoding option.",
                             Project.MSG_WARN);
          }
          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;
      }
  }
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java
  
  Index: Kjc.java
  ===================================================================
  /*
   * 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 {
              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;
      }
  }