tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mmand...@apache.org
Subject cvs commit: jakarta-tomcat-connectors/jk/jkant/java/org/apache/jk/ant/compilers MwccCompiler.java MwldLinker.java
Date Wed, 07 Nov 2001 15:23:29 GMT
mmanders    01/11/07 07:23:28

  Added:       jk/jkant/java/org/apache/jk/ant/compilers MwccCompiler.java
                        MwldLinker.java
  Log:
  Added support for building NetWare binaries.
  
  Revision  Changes    Path
  1.1                  jakarta-tomcat-connectors/jk/jkant/java/org/apache/jk/ant/compilers/MwccCompiler.java
  
  Index: MwccCompiler.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 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.jk.ant.compilers;
  
  import org.apache.tools.ant.types.*;
  import org.apache.tools.ant.util.*;
  import org.apache.tools.ant.taskdefs.*;
  import org.apache.tools.ant.*;
  import org.apache.jk.ant.*;
  
  import java.io.*;
  import java.util.*;
  
  /**
   *  Compile using libtool.
   * 
   *  It extends SoTask so we can debug it or use it independently of <so>.
   *  For normal use you should use the generic task, and system-specific
   *  properties to choose the right compiler plugin ( like we select
   *  jikes ).
   *
   * @author Mike Anderson
   */
  public class MwccCompiler extends SoTask implements CompilerAdapter {
      SoTask so;
      
      public MwccCompiler() {
          so=this;
      };
  
      public void setSoTask(SoTask so ) {
          this.so=so;
          so.duplicateTo( this );
      }
  
      public void execute() throws BuildException {
          super.findCompileList();
          compile( compileList );
      }
  
      public void compile(Vector compileList ) throws BuildException {
          Enumeration en=compileList.elements();
          while( en.hasMoreElements() ) {
              File f=(File)en.nextElement();
              executeMwccCompile(f.toString() );
          }
      }
      
      /** Compile  using mwccnlm.
       */
      public void executeMwccCompile(String source) throws BuildException {
          String [] includeList = ( includes==null ) ?
              new String[] {} : includes.list();
  
          Commandline cmd = new Commandline();
  
          String cc=project.getProperty("build.compiler.cc");
          if(cc==null) cc="mwccnlm";
          
          cmd.setExecutable( cc );
          addCCArgs( cmd, source, includeList );
  
          int result=execute( cmd );
          if( result!=0 ) {
              log("Compile failed " + result + " " +  source );
              log("Output:" );
              if( outputstream!=null ) 
                  log( outputstream.toString());
              log("StdErr:" );
              if( errorstream!=null ) 
                  log( errorstream.toString());
              
              throw new BuildException("Compile failed " + source);
          }
          File ccOpt = new File(buildDir, "cc.opt");
          ccOpt.delete();
          closeStreamHandler();
  
      }
  
      /** common compiler args
       */
      private void addCCArgs(Commandline cmd, String source, String includeList[]) {
          String extra_cflags=project.getProperty("build.native.extra_cflags");
          String localCflags=cflags;
          File ccOpt = new File(buildDir, "cc.opt");
          if( localCflags==null ) {
              localCflags=new String("-nosyspath -c -align 1 -w nocmdline -bool on");
              if( extra_cflags!=null ) {
                  localCflags+=" " + extra_cflags;
              }
          }
  
          // create a cc.opt file 
          PrintWriter ccpw = null;
          try
          {
              ccpw = new PrintWriter(new FileWriter(ccOpt));
              // write the compilation flags out
              ccpw.println(localCflags);
              for( int i=0; i<includeList.length; i++ ) {
                  ccpw.print("-I");
                  ccpw.println(includeList[i] );
              }
  
              if( defines.size() > 0 ) {
                  Enumeration defs=defines.elements();
                  while( defs.hasMoreElements() ) {
                      Def d=(Def)defs.nextElement();
                      String name=d.getName();
                      String val=d.getValue();
                      if( name==null ) continue;
                      String arg="-D" + name;
                      if( val!=null )
                          arg+= "=" + val;
                      ccpw.println(arg);
                  }
              }
          }
          catch (IOException ioe)
          {
              System.out.println("Caught IOException");
          }
          finally
          {
              if (ccpw != null)
              {
                  ccpw.close();
              }
          }
  
          project.log( "Compiling " + source);
          cmd.createArgument().setValue( source );
          cmd.createArgument().setValue( "@cc.opt" );
      }
  }
  
  
  
  
  1.1                  jakarta-tomcat-connectors/jk/jkant/java/org/apache/jk/ant/compilers/MwldLinker.java
  
  Index: MwldLinker.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 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.jk.ant.compilers;
  
  import org.apache.tools.ant.types.*;
  import org.apache.tools.ant.util.*;
  import org.apache.tools.ant.taskdefs.*;
  import org.apache.tools.ant.*;
  
  import org.apache.jk.ant.*;
  
  import java.io.*;
  import java.util.*;
  
  /**
   * Link using libtool.
   * 
   * @author Costin Manolache
   */
  public class MwldLinker extends SoTask implements LinkerAdapter {
      SoTask so;
      
      public MwldLinker() {
          so=this;
      };
  
      public void setSoTask(SoTask so ) {
          this.so=so;
          so.duplicateTo( this );
      }
  
      public void execute() throws BuildException {
          findSourceFiles();
          link(this.srcList);
      }
  
      protected static GlobPatternMapper cobj_mapper=new GlobPatternMapper();
      static {
  	cobj_mapper.setFrom("*.c");
  	cobj_mapper.setTo("*.obj");
      }
  
      /** Link using libtool.
       */
      public boolean link(String srcList[]) throws BuildException {
          Commandline cmd = new Commandline();
          File linkOpt = new File(buildDir, "link.opt");
          File linkDef = new File(buildDir, "link.def");
  
          String libtool=project.getProperty("build.compiler.ld");
          if(libtool==null) libtool="mwldnlm";
  
          cmd.setExecutable( libtool );
          
          // All .obj files must be included
          project.log( "Linking " + buildDir + "/" + soFile + ".nlm");
  
          // create a .opt file and a .def file
          PrintWriter linkOptPw = null;
          PrintWriter linkDefPw = null;
          try
          {
              String libBase = project.getProperty("build.compiler.base");
              if (libBase == null) libBase = "\\tools\\mw\\5.3";
              linkOptPw = new PrintWriter(new FileWriter(linkOpt));
              linkDefPw = new PrintWriter(new FileWriter(linkDef));
  
              // write the link flags out
              linkOptPw.println("-warnings off");
              linkOptPw.println("-zerobss");
              linkOptPw.println("-desc \"Tomcat Connector\"");
              linkOptPw.println("-o " + soFile + ".nlm");
              linkOptPw.println("-screenname \"System Console\"");
              linkOptPw.println("-nlmversion 1,20,2");
              linkOptPw.println("-nodefaults");
              linkOptPw.println("-map " + soFile + ".map");
              linkOptPw.println("-threadname \"Tomcat JKThread\"");
              linkOptPw.println("-stacksize 64000");
              // add the default startup code to the list of objects
              linkOptPw.println(libBase + "\\lib\\nwpre.obj");
  
              // write the objects to link with to the .opt file
              for( int i=0; i<srcList.length; i++ ) {
                  File srcF = (File)project.resolveFile(srcList[i]);
                  String name=srcF.getName();
                  String targetNA[]=co_mapper.mapFileName( name );
                  if( targetNA!=null )
                      linkOptPw.println( targetNA[0] );
              }
              linkOptPw.println("-commandfile link.def");
  
              // write the dependant modules to the .def file
              Enumeration mods = modules.elements();
              while( mods.hasMoreElements() ) {
                  NLMData mod = (NLMData) mods.nextElement();
                  String name = mod.getValue();
                  linkDefPw.println("module " + name);
              }
  
              // write the imports to link with to the .def file
              Enumeration imps = imports.elements();
              while( imps.hasMoreElements() ) {
                  NLMData imp = (NLMData) imps.nextElement();
                  String name = imp.getValue();
                  if (imp.isFile())
                      linkDefPw.println("Import @" + name);
                  else
                      linkDefPw.println("Import " + name);
              }
  
              // write the exports to link with to the .def file
              Enumeration exps = exports.elements();
              while( exps.hasMoreElements() ) {
                  NLMData exp = (NLMData) exps.nextElement();
                  String name = exp.getValue();
                  if (exp.isFile())
                      linkDefPw.println("Export @" + name);
                  else
                      linkDefPw.println("Export " + name);
              }
          }
          catch (IOException ioe)
          {
              System.out.println("Caught IOException");
          }
          finally
          {
              if (linkOptPw != null)
              {
                  linkOptPw.close();
              }
  
              if (linkDefPw != null)
              {
                  linkDefPw.close();
              }
          }
  
  
          cmd.createArgument().setValue( "@link.opt" );
          int result=execute( cmd );
          if( result!=0 ) {
              log("Link failed " + result );
              log("Command:" + cmd.toString());
              log("Output:" );
              if( outputstream!=null ) 
                  log( outputstream.toString());
              log("StdErr:" );
              if( errorstream!=null ) 
                  log( errorstream.toString());
              
              throw new BuildException("Link failed " + soFile);
          }
          linkOpt.delete();
          linkDef.delete();
          closeStreamHandler();
          return true;
      }
  }
  
  
  
  

--
To unsubscribe, e-mail:   <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@jakarta.apache.org>


Mime
View raw message