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 2005/02/04 09:13:48 UTC

cvs commit: ant/src/main/org/apache/tools/ant/util ConcatFileInputStream.java JavaEnvUtils.java LeadPipeInputStream.java

bodewig     2005/02/04 00:13:48

  Modified:    .        Tag: ANT_16_BRANCH WHATSNEW build.xml
               docs/manual/OptionalTasks Tag: ANT_16_BRANCH javah.html
                        native2ascii.html
               src/main/org/apache/tools/ant/taskdefs Tag: ANT_16_BRANCH
                        ExecuteJava.java LogOutputStream.java
                        Redirector.java
               src/main/org/apache/tools/ant/taskdefs/compilers Tag:
                        ANT_16_BRANCH Kjc.java
               src/main/org/apache/tools/ant/taskdefs/optional Tag:
                        ANT_16_BRANCH Javah.java Native2Ascii.java
               src/main/org/apache/tools/ant/taskdefs/optional/junit Tag:
                        ANT_16_BRANCH JUnitTask.java
               src/main/org/apache/tools/ant/taskdefs/rmic Tag:
                        ANT_16_BRANCH KaffeRmic.java
               src/main/org/apache/tools/ant/types Tag: ANT_16_BRANCH
                        CommandlineJava.java
               src/main/org/apache/tools/ant/util Tag: ANT_16_BRANCH
                        ConcatFileInputStream.java JavaEnvUtils.java
                        LeadPipeInputStream.java
  Added:       src/main/org/apache/tools/ant/taskdefs/optional/javah Tag:
                        ANT_16_BRANCH JavahAdapter.java
                        JavahAdapterFactory.java Kaffeh.java SunJavah.java
               src/main/org/apache/tools/ant/taskdefs/optional/native2ascii
                        Tag: ANT_16_BRANCH DefaultNative2Ascii.java
                        KaffeNative2Ascii.java Native2AsciiAdapter.java
                        Native2AsciiAdapterFactory.java
                        SunNative2Ascii.java
  Log:
  Merge Kaffe related changes from HEAD
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.503.2.174 +29 -239   ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/ant/WHATSNEW,v
  retrieving revision 1.503.2.173
  retrieving revision 1.503.2.174
  diff -u -r1.503.2.173 -r1.503.2.174
  --- WHATSNEW	3 Feb 2005 19:29:11 -0000	1.503.2.173
  +++ WHATSNEW	4 Feb 2005 08:13:45 -0000	1.503.2.174
  @@ -23,6 +23,11 @@
   * Javadoc fixes for Location, Project, and RuntimeConfigurable
     Bugzilla 30160.
   
  +* Enable to choose the regexp implementation without system property.
  +  Bugzilla Report 15390.
  +
  +* Expose objects and methods in IntrospectionHelper. Bugzilla Report 30794.
  +
   * Allow file attribute of <move> to rename a directory.
     Bugzilla Report 22863.
   
  @@ -89,6 +94,8 @@
   
   * Added length task to get strings' and files' lengths.
   
  +* <native2ascii> and <javah> now also support Kaffe's versions.
  +
   * Recursive token expansion in a filterset can now be disabled by
     setting its recurse attribute to false.
   
  @@ -101,27 +108,27 @@
   * Target Location was always UNKNOWN_LOCATION due to an omitted merge.
   
   * Impossible to use implicit classpath for <taskdef>
  -  when Ant core loader != Java application loader and Path.systemClassPath taken from ${java.class.path}
  -  Bugzilla 30161.  
  -
  -* Enable to choose the regexp implementation without system property.
  -  Bugzilla Report 15390.
  +  when Ant core loader != Java application loader and
  +  Path.systemClassPath taken from ${java.class.path} Bugzilla 30161.
   
  -* MacroInstance did not clean up nested elements correctly in the execute method, causing
  -  multiple use of the same macro instance with nested elements to fail.
  +* MacroInstance did not clean up nested elements correctly in the execute 
  +  method, causing multiple use of the same macro instance with nested
  +  elements to fail.
   
   * checksum fileext property doc wrong. Bugzilla 30787.
   
   * FTP task, getTimeDiff method was returning wrong value. Bugzilla 30595.
   
  -* Zip task was not zipping when only empty directories were found. Bugzilla 30365.
  +* Zip task was not zipping when only empty directories were found.
  +  Bugzilla 30365.
   
  -* Jar task was not including manifest files when duplicate="preserve" was chosen. Bugzilla 32802.
  +* Jar task was not including manifest files when duplicate="preserve" was
  +  chosen. Bugzilla 32802.
   
   * Classpath was treated in the same way as -lib options. Bugzilla 28046.
   
  -* Manual page for cvsversion contained incorrect attributes and did not say since 1.6.1.
  -  Bugzilla 31408.
  +* Manual page for cvsversion contained incorrect attributes and did not
  +  say since 1.6.1. Bugzilla 31408.
   
   * Typo in definition of <cvsversion> task causing it not to be defined.
     Bugzilla 31403.
  @@ -220,11 +227,6 @@
     attribute to point to.  This is the last version of the XSLT
     stylesheet that is expected to be compatible with Xalan-J 1.
   
  -* Expose objects and  methods in IntrospectionHelper. Bugzilla Report 30794.
  -
  -* Added a comment attribute to the zip task.
  -  Bugzilla report 22793.
  -
   Fixed bugs:
   -----------
   
  @@ -370,6 +372,8 @@
   
   * New attribute "negate" on <propertyset> to invert selection criteria.
   
  +* Target now supports a Location member.  Bugzilla Report 28599.
  +
   * New "pattern" attribute for <date> selector.
   
   * <junit> has a new forkmode attribute that controls the number of
  @@ -406,8 +410,6 @@
   
   * Add deleteonexit attribute to <delete>.
   
  -* Target now supports a Location member.  Bugzilla Report 28599.
  -
   * Added Target.getIf/Unless().  Bugzilla Report 29320.
   
   * <fail> has a status attribute that can be used to pass an exit
  @@ -486,7 +488,6 @@
   
   Other changes:
   --------------
  -
   * Shipped XML parser is now Xerces-J 2.6.1
   
   * <fixcrlf> has a new attribute - fixlast. Bugzilla Report 23262.
  @@ -516,227 +517,10 @@
   * added support for branch logging via the tag attribute in <cvschangelog>
     Bugzilla Report 13510.
   
  -* added support the groovy language in the script and scriptdef tasks.
  -
  -
  -Changes from Ant 1.6.B3 to Ant 1.6.0
  -====================================
  -
  -Changes that could break older environments:
  ---------------------------------------------
  -
  -* Attempts to read input in <java> and <exec> tasks will now receive an EOF
  -  rather than blocking. If you run such a process and rely on it blocking, as
  -  it would do in Ant 1.5, you may have problem.
  -
  -* <checksum> message "calculating checksum" downgraded to MSG_VERBOSE
  -  to limit output in case of large filesets.
  -  Bugzilla Report 25607.
  -
  -* Change logging level of captured standard error output from MSG_ERR to MSG_WARN.
  -  Previous some standard error was output as MSG_ERR and some as MSG_WARN (namely
  -  standard error from exec and forked jvms).
  -
  -Fixed bugs:
  ------------
  -
  -* <xmlcatalog>s only worked when defined inside of tasks.  Bugzilla
  -  Report 20965.
  -
  -* <xmlcatalog> Wrong file location to URL conversion in XMLCatalog.
  -  Bugzilla Report 23913.
  -
  -* <checksum> was throwing a null pointer exception, when used with nested filesets
  -  and totalproperty attribute not set.
  -  Bugzilla Report 25606.
  -
  -Other changes:
  ---------------
  -
  -Changes from Ant 1.6.B2 to Ant 1.6.B3
  -=====================================
  -
  -Changes that could break older environments:
  ---------------------------------------------
  -* Changed namespace processing. The namespace uri
  -  of nested elements of a type or a task are now the
  -  same as the type or task. Previously the namespace uri
  -  of nested elements was ant's namespace uri. This change will affect users
  -  of ant 1.6b1 and ant 1.6b2.
  -
  -* <csc>'s executable attribute defaults to mcs on non-Windows platforms.
  -
  -Fixed bugs:
  ------------
  -* the <java> task checks that the Main method of the class to be executed is static,
  -  and fails with a decent BuildException if it is not the case
  -
  -* a space at the end of the Ant-Version line of the default manifest has been removed
  -
  -* better debugging support for ApacheCatalogResolver
  -  Bugzilla Report 24070.
  -
  -* better report of exceptions in the renaming of the old file in <zip update="true"/>
  -  and the derived classes <jar>, ...
  -
  -* use of <parallel> and xmlns:prefix="antlib:package"
  -
  -* user and new arguments were swapped in PropertyHelper setNew and setUser.
  -  Bugzilla Report 23966.
  -
  -* <style/> be able to resolve entities inside stylesheets.
  -
  -* <csc> and other .NET tasks : fixed Error when compiling many source files.
  -  Bugzilla Report 19630.
  -
  -* <junit> Make properties available in timed-out tests.
  -   Bugzilla Report 23935.
  -
  -* <junit> Pull ant-launcher.jar in the runtime as well.
  -
  -* <telnet> : better support for people debugging timed out reads.
  -
  -* <ssh> : parse properly return codes from server.
  -  Also fix for Bugzilla Report 23986.
  -
  -* <scp> If remotedir has been omitted, make it default to "." .
  -  Bugzilla Report 23987.
  -
  -* starteam tasks : insure proper disconnect from the server.
  -  Bugzilla Report 24110.
  -
  -* <script>, <scriptdef>
  -  fix problem : script task cannot cope with undefined task/type elements in buildfile
  -  Bugzilla Report 23915.
  -
  -* <cvstagdiff> had a problem with aliased modules and with requests for multiple modules.
  -  Bugzilla Reports 21373 and 22877.
  -
  -* <cvstagdiff> could not parse properly the revision number of new files with CVS 1.11.9 or higher.
  -  Bugzilla Report 24406.
  +* added support the groovy language in the script and scriptdef tasks
   
  -* <ftp> null pointer exception when attempting rmdir in an empty directory.
  -  Bugzilla Report 24440.
  -
  -* <scp> could corrupt files when transfering lots of files.
  -  Bugzilla Report 24449.
  -
  -* <jdepend>   Fix NPE
  -  Bugzilla Report 24344.
  -
  -
  -Other changes:
  ---------------
  -* Attributes in the template bodies of <macrodef> are now denoted by @{attribute} instead of ${attribute}
  -
  -* <concat> will expand properties entered in the text of the tag
  -
  -* <exec> resolution behavior (resolveexecutable attribute) has been improved
  -
  -* running.html has been augmented with a list of the magic properties
  -
  -* welcome.html documentation has been updated
  -
  -* Change default uri from ant:core to antlib:org.apache.tools.ant
  -
  -* upgrade to xml-apis.jar from Xerces-J 2.6.0.
  -
  -* Shipped XML parser is now Xerces 2.6.0
  -
  -* set project for created targets.
  -
  -* make sure that the checkstyle stylesheets make their way into the distribution.
  -
  -* improve ant's own build file concerning the sources which depend upon bsf (rhino).
  -
  -* a number of documentation corrections.
  -  Bugzilla reports 24059, 24060, 24069, 24074.
  -
  -* replacement of accentuated characters in the source code (actually in JavaDoc comments)
  -  by UNICODE escapes.
  -  Bugzilla report 23919.
  -
  -* load all xml resources for typedef not just the first
  -  Bugzilla report 24024
  -
  -* <presetdef> fix so that the preset attributes are optional and
  -  may be overridded (previosly the attributes were set twice)
  -
  -* provide stack for errors using import, ant, antcall, subant and macros
  -
  -* import task uses the FileUtils#resolveFile method to resolve the imported file,
  -  in order to avoid trouble on Windows or Netware
  -
  -* ignore attributes from different URIS
  -
  -* <jdepend>
  -  fix timeout attribute of jdepend
  -  add unit tests
  -  add includeruntime to allow unittests to run
  -  checkstyle
  -Changes from Ant 1.6.B1 to Ant 1.6.B2
  -=====================================
  -
  -Changes that could break older environments:
  ---------------------------------------------
  -
  -Fixed bugs:
  ------------
  -
  -* fix usage of mixed case names of add(typedef) introspection.
  -  fix by moving the tolower method from unknownelement to introspectionhelper.
  -
  -* documentation added for -lib option used when starting ant via launcher
  -  Bugzilla Report 23454.
  -
  -* user-friendly messages added for incorrect use of -lib option
  -  Bugzilla Report 23454.
  -
  -* make <input/> be skipped when a property is already set
  -  Bugzilla Report 19967.
  -
  -* improved cleanup of temporary files
  -  this concerns <javadoc/>, <replace/>, <zip/>, <javac/>, <cvstagdiff/>, <cab/>,
  -  <replaceregexp/>, <junit/>, metamata tasks, sitraka tasks, <symlink/>
  -  temporary files are now marked with deleteOnExit
  -  Bugzilla Report 17512.
  -
  -* Reuse the resolution logic of <property> inside <loadproperties>.
  -  So <expandproperties/> is not needed any more together with <loadproperties/>
  -  Bugzilla Report 17782.
  -
  -* Comparison of TemplateElement(s) and Attribute(s) fixed inside macrodef.
  -
  -* Don't silently swallow exceptions when something is wrong with adding or removing
  -  shutdown hooks , Bugzilla Report 23609.
  -
  -* noinform attribute for Websphere element of <ejbjar/>
  -  Bugzilla Report 23535.
  -
  -* <junit/> (JunitTestRunner)
  -  Don't mask arbitrary exceptions when looking for a suite method.
  -  Bugzilla Report 23033.
  -
  -* <ftp/> fix problem with relative remotedir
  -  Bugzilla Report 23833.
  -
  -* ssh tasks : make .ssh/known_hosts optional
  -
  -* <vssget/>  was sending a wrong command line prefix for labels -VL-Lsome.label
  -  this change fixes it to -VLsome.label instead
  -
  -* <zipfileset/> allow it to refer to a fileset, to which zipfileset specific attributes are added
  -  this solves one frequent use case in the <war/> task
  -
  -Other changes:
  ---------------
  -
  -* add an optional attribute to <import/>
  -
  -* upgrade protected access to public for setMacroDef for macroinstance object
  -
  -Changes from Ant 1.5.4 to Ant 1.6
  -=================================
  +Changes from Ant 1.5.4 to Ant 1.6.0
  +===================================
   
   Changes that could break older environments:
   --------------------------------------------
  @@ -811,6 +595,9 @@
     are resolved at a later stage. This causes some
     differences especially for user defined task containers.
   
  +* <checksum> log message "Calculating checksum ..." has been degraded
  +  from INFO to VERBOSE.
  +
   Fixed bugs:
   -----------
   * Filter readers were not handling line endings properly.  Bugzilla
  @@ -1004,6 +791,9 @@
   
   Other changes:
   --------------
  +
  +* Shipped XML parser is now Xerces 2.6.0
  +
   * All tasks can be used outside of <target>s.  Note that some tasks
     will not work at all outside of targets as they would cause infinite
     loops (<antcall> as well as <ant> and <subant> if they invoke the
  
  
  
  1.392.2.37 +4 -13     ant/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/ant/build.xml,v
  retrieving revision 1.392.2.36
  retrieving revision 1.392.2.37
  diff -u -r1.392.2.36 -r1.392.2.37
  --- build.xml	29 Oct 2004 07:43:16 -0000	1.392.2.36
  +++ build.xml	4 Feb 2005 08:13:45 -0000	1.392.2.37
  @@ -4,12 +4,12 @@
     =======================================================================
       Apache Ant own build file
   
  -   Copyright (c) 2000-2004 The Apache Software Foundation.  All rights
  +   Copyright (c) 2000-2005 The Apache Software Foundation.  All rights
      reserved.
   
     =======================================================================
   -->
  -<project default="main" basedir=".">
  +<project name="apache-ant" default="main" basedir=".">
   
     <!-- Give user a chance to override without editing this file
          (and without typing -D each time it compiles it) -->
  @@ -152,15 +152,6 @@
       </or>
     </selector>
   
  -  <!-- classes that should be present in Sun based JVMs, but not in
  -       Kaffe for example -->
  -  <selector id="needs.sun.tools">
  -    <or>
  -      <filename name="${optional.package}/Native2Ascii*"/>
  -      <filename name="${optional.package}/Javah*"/>
  -    </or>
  -  </selector>
  -
     <selector id="needs.sun.uue">
       <filename name="${ant.package}/taskdefs/email/UUMailer*"/>
     </selector>
  @@ -168,6 +159,7 @@
     <selector id="needs.sun.b64">
       <or>
         <filename name="${optional.package}/splash/SplashTask*"/>
  +      <filename name="${optional.package}/splash/SplashScreenTest.java"/>
       </or>
     </selector>
   
  @@ -448,7 +440,7 @@
                  classname="jdepend.framework.JDepend"
                  classpathref="classpath"/>
       <available property="log4j.present"
  -               classname="org.apache.log4j.Category"
  +               classname="org.apache.log4j.Logger"
                  classpathref="classpath"/>
       <available property="commons.logging.present"
                  classname="org.apache.commons.logging.LogFactory"
  @@ -615,7 +607,6 @@
             <or>
               <selector refid="needs.jdk1.3+" unless="jdk1.3+"/>
               <selector refid="needs.jdk1.4+" unless="jdk1.4+"/>
  -            <selector refid="needs.sun.tools" unless="sun.tools.present"/>
               <selector refid="needs.sun.uue" unless="sunuue.present"/>
               <selector refid="needs.sun.b64" unless="base64.present"/>
   
  
  
  
  No                   revision
  No                   revision
  1.6.2.4   +61 -1     ant/docs/manual/OptionalTasks/javah.html
  
  Index: javah.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/OptionalTasks/javah.html,v
  retrieving revision 1.6.2.3
  retrieving revision 1.6.2.4
  diff -u -r1.6.2.3 -r1.6.2.4
  --- javah.html	17 May 2004 10:35:41 -0000	1.6.2.3
  +++ javah.html	4 Feb 2005 08:13:45 -0000	1.6.2.4
  @@ -16,6 +16,16 @@
   whether <a href="http://java.sun.com/j2se/1.3/docs/tooldocs/win32/javah.html">JDK1.2</a>
   (or later) or <a href="http://java.sun.com/products/jdk/1.1/docs/tooldocs/win32/javah.html">pre-JDK1.2</a>
   systems are used.</p>
  +
  +<p>It is possible to use different compilers. This can be selected
  +with the <code>implementation</code> attribute.  <a
  +name="implementationvalues">Here are the choices</a>:</p>
  +<ul>
  +  <li>default - the default compiler (kaffeh or sun) for the platform.</li>
  +  <li>sun (the standard compiler of the JDK)</li>
  +  <li>kaffeh (the native standard compiler of <a href="http://www.kaffe.org" target="_top">Kaffe</a>)</li>
  +</ul>
  +
   <h3>Parameters</h3>
   <table border="1" cellpadding="2" cellspacing="0">
     <tr>
  @@ -75,8 +85,58 @@
       <td valign="top"> location of installed extensions.</td>
       <td valign="top" align="center">No</td>
     </tr>
  +  <tr>
  +    <td valign="top">implementation</td>
  +    <td valign="top">The compiler implementation to use.  If this
  +    attribute is not set, the default compiler for the current VM
  +    will be used.  (See the above <a
  +    href="#implementationvalues">list</a> of valid compilers.)</td>
  +    <td align="center" valign="top">No</td>
  +  </tr>
   </table>
   <p>Either outputFile or destdir must be supplied, but not both.&nbsp;</p>
  +
  +<h3>Parameters specified as nested elements</h3>
  +
  +<h4>arg</h4>
  +
  +<p>You can specify additional command line arguments for the compiler
  +with nested <code>&lt;arg&gt;</code> elements.  These elements are
  +specified like <a href="../using.html#arg">Command-line Arguments</a>
  +but have an additional attribute that can be used to enable arguments
  +only if a given compiler implementation will be used.</p>
  +
  +<table border="1" cellpadding="2" cellspacing="0">
  +<tr>
  +  <td width="12%" valign="top"><b>Attribute</b></td>
  +  <td width="78%" valign="top"><b>Description</b></td>
  +  <td width="10%" valign="top"><b>Required</b></td>
  +</tr>
  +  <tr>
  +    <td valign="top">value</td>
  +    <td align="center" rowspan="4">See
  +    <a href="../using.html#arg">Command-line Arguments</a>.</td>
  +    <td align="center" rowspan="4">Exactly one of these.</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">line</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">file</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">path</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">implementation</td>
  +    <td>Only pass the specified argument if the chosen compiler
  +    implementation matches the value of this attribute.  Legal values
  +    are the same as those in the above <a
  +    href="#implementationvalues">list</a> of valid compilers.)</td>
  +    <td align="center">No</td>
  +  </tr>
  +</table>
  +
   <h3>Examples</h3>
   <pre>  &lt;javah destdir=&quot;c&quot; class=&quot;org.foo.bar.Wibble&quot;/&gt;</pre>
   <p>makes a JNI header of the named class, using the JDK1.2 JNI model. Assuming
  @@ -111,7 +171,7 @@
   describe its progress.</p>
   
   <hr>
  -<p align="center">Copyright &copy; 2001-2002,2004 The Apache Software Foundation. All rights
  +<p align="center">Copyright &copy; 2001-2002,2004-2005 The Apache Software Foundation. All rights
   Reserved.</p>
   </body>
   
  
  
  
  1.8.2.4   +61 -2     ant/docs/manual/OptionalTasks/native2ascii.html
  
  Index: native2ascii.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/OptionalTasks/native2ascii.html,v
  retrieving revision 1.8.2.3
  retrieving revision 1.8.2.4
  diff -u -r1.8.2.3 -r1.8.2.4
  --- native2ascii.html	19 Nov 2004 09:10:04 -0000	1.8.2.3
  +++ native2ascii.html	4 Feb 2005 08:13:45 -0000	1.8.2.4
  @@ -41,6 +41,15 @@
         and <code>&lt;patternset&gt;</code> elements.
       </p>
   
  +    <p>It is possible to use different converters. This can be selected
  +      with the <code>implementation</code> attribute.
  +      <a name="implementationvalues">Here are the choices</a>:</p>
  +    <ul>
  +      <li>default - the default converter (kaffe or sun) for the platform.</li>
  +      <li>sun (the standard converter of the JDK)</li>
  +      <li>kaffe (the standard converter of <a href="http://www.kaffe.org" target="_top">Kaffe</a>)</li>
  +    </ul>
  +
       <table border="1" cellpadding="2" cellspacing="0">
         <tr>
           <td><b>Attribute</b></td>
  @@ -50,7 +59,8 @@
         <tr>
           <td>reverse</td>
           <td>Reverse the sense of the conversion,
  -          i.e. convert from ASCII to native</td>
  +          i.e. convert from ASCII to native <b>only supported by the
  +            sun converter</b></td>
           <td align="center">No</td>
         </tr>
         <tr>
  @@ -106,8 +116,57 @@
             taken to be an exclude pattern</td>
           <td align="center">No</td>
         </tr>
  +      <tr>
  +        <td valign="top">implementation</td>
  +        <td valign="top">The converter implementation to use.
  +          If this attribute is not set, the default converter for the
  +          current VM will be used.  (See the above <a
  +          href="#implementationvalues">list</a> of valid converters.)</td>
  +        <td align="center" valign="top">No</td>
  +      </tr>
       </table>
   
  +<h3>Parameters specified as nested elements</h3>
  +
  +<h4>arg</h4>
  +
  +<p>You can specify additional command line arguments for the converter
  +with nested <code>&lt;arg&gt;</code> elements.  These elements are
  +specified like <a href="../using.html#arg">Command-line Arguments</a>
  +but have an additional attribute that can be used to enable arguments
  +only if a given converter implementation will be used.</p>
  +
  +<table border="1" cellpadding="2" cellspacing="0">
  +<tr>
  +  <td width="12%" valign="top"><b>Attribute</b></td>
  +  <td width="78%" valign="top"><b>Description</b></td>
  +  <td width="10%" valign="top"><b>Required</b></td>
  +</tr>
  +  <tr>
  +    <td valign="top">value</td>
  +    <td align="center" rowspan="4">See
  +    <a href="../using.html#arg">Command-line Arguments</a>.</td>
  +    <td align="center" rowspan="4">Exactly one of these.</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">line</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">file</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">path</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">implementation</td>
  +    <td>Only pass the specified argument if the chosen converter
  +    implementation matches the value of this attribute.  Legal values
  +    are the same as those in the above <a
  +    href="#implementationvalues">list</a> of valid compilers.)</td>
  +    <td align="center">No</td>
  +  </tr>
  +</table>
  +
       <h3>Examples</h3>
   
       <pre>
  @@ -134,6 +193,6 @@
       </p>
     </body>
   <hr>
  -<p align="center">Copyright &copy; 2000-2002,2004 The Apache Software Foundation. All rights
  +<p align="center">Copyright &copy; 2000-2002,2004-2005 The Apache Software Foundation. All rights
   Reserved.</p>
   </html>
  
  
  
  No                   revision
  No                   revision
  1.38.2.6  +48 -2     ant/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java
  
  Index: ExecuteJava.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java,v
  retrieving revision 1.38.2.5
  retrieving revision 1.38.2.6
  diff -u -r1.38.2.5 -r1.38.2.6
  --- ExecuteJava.java	9 Mar 2004 17:01:33 -0000	1.38.2.5
  +++ ExecuteJava.java	4 Feb 2005 08:13:46 -0000	1.38.2.6
  @@ -1,5 +1,5 @@
   /*
  - * Copyright  2000-2004 The Apache Software Foundation
  + * Copyright  2000-2005 The Apache Software Foundation
    *
    *  Licensed under the Apache License, Version 2.0 (the "License");
    *  you may not use this file except in compliance with the License.
  @@ -15,9 +15,10 @@
    *
    */
   
  -
   package org.apache.tools.ant.taskdefs;
   
  +import java.io.File;
  +import java.io.IOException;
   import java.io.PrintStream;
   import java.lang.reflect.InvocationTargetException;
   import java.lang.reflect.Method;
  @@ -25,11 +26,14 @@
   import org.apache.tools.ant.AntClassLoader;
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Project;
  +import org.apache.tools.ant.ProjectComponent;
   import org.apache.tools.ant.Task;
  +import org.apache.tools.ant.taskdefs.condition.Os;
   import org.apache.tools.ant.types.Commandline;
   import org.apache.tools.ant.types.CommandlineJava;
   import org.apache.tools.ant.types.Path;
   import org.apache.tools.ant.types.Permissions;
  +import org.apache.tools.ant.util.JavaEnvUtils;
   import org.apache.tools.ant.util.TimeoutObserver;
   import org.apache.tools.ant.util.Watchdog;
   
  @@ -174,6 +178,7 @@
               if (loader != null) {
                   loader.resetThreadContextLoader();
                   loader.cleanup();
  +                loader = null;
               }
               if (sysProperties != null) {
                   sysProperties.restoreSystem();
  @@ -225,4 +230,45 @@
       public synchronized boolean killedProcess() {
           return timedOut;
       }
  +
  +    /**
  +     * Runs the Java command in a separate VM, this does not give you
  +     * the full flexibility of the Java task, but may be enough for
  +     * simple needs.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public int fork(ProjectComponent pc) throws BuildException {
  +        CommandlineJava cmdl = new CommandlineJava();
  +        cmdl.setClassname(javaCommand.getExecutable());
  +        String[] args = javaCommand.getArguments();
  +        for (int i = 0; i < args.length; i++) {
  +            cmdl.createArgument().setValue(args[i]);
  +        }
  +        if (classpath != null) {
  +            cmdl.createClasspath(pc.getProject()).append(classpath);
  +        }
  +        if (sysProperties != null) {
  +            cmdl.addSysproperties(sysProperties);
  +        }
  +
  +        Redirector redirector = new Redirector(pc);
  +        Execute exe
  +            = new Execute(redirector.createHandler(),
  +                          timeout == null 
  +                          ? null 
  +                          : new ExecuteWatchdog(timeout.longValue()));
  +        exe.setAntRun(pc.getProject());
  +        exe.setCommandline(cmdl.getCommandline());
  +
  +        try {
  +            int rc = exe.execute();
  +            redirector.complete();
  +            timedOut = exe.killedProcess();
  +            return rc;
  +        } catch (IOException e) {
  +            throw new BuildException(e);
  +        }
  +    }
  +
   }
  
  
  
  1.16.2.6  +16 -4     ant/src/main/org/apache/tools/ant/taskdefs/LogOutputStream.java
  
  Index: LogOutputStream.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/LogOutputStream.java,v
  retrieving revision 1.16.2.5
  retrieving revision 1.16.2.6
  diff -u -r1.16.2.5 -r1.16.2.6
  --- LogOutputStream.java	11 Mar 2004 11:22:56 -0000	1.16.2.5
  +++ LogOutputStream.java	4 Feb 2005 08:13:46 -0000	1.16.2.6
  @@ -1,5 +1,5 @@
   /*
  - * Copyright  2000-2004 The Apache Software Foundation
  + * Copyright  2000-2005 The Apache Software Foundation
    *
    *  Licensed under the Apache License, Version 2.0 (the "License");
    *  you may not use this file except in compliance with the License.
  @@ -21,6 +21,7 @@
   import java.io.IOException;
   import java.io.OutputStream;
   import org.apache.tools.ant.Project;
  +import org.apache.tools.ant.ProjectComponent;
   import org.apache.tools.ant.Task;
   
   
  @@ -48,7 +49,7 @@
           = new ByteArrayOutputStream(INTIAL_SIZE);
       private boolean skip = false;
   
  -    private Task task;
  +    private ProjectComponent pc;
       private int level = Project.MSG_INFO;
   
       /**
  @@ -58,7 +59,18 @@
        * @param level loglevel used to log data written to this stream.
        */
       public LogOutputStream(Task task, int level) {
  -        this.task = task;
  +        this((ProjectComponent) task, level);
  +    }
  +
  +    /**
  +     * Creates a new instance of this class.
  +     *
  +     * @param task the task for whom to log
  +     * @param level loglevel used to log data written to this stream.
  +     * @since Ant 1.6.3
  +     */
  +    public LogOutputStream(ProjectComponent pc, int level) {
  +        this.pc = pc;
           this.level = level;
       }
   
  @@ -114,7 +126,7 @@
        * @param line the line to log.
        */
       protected void processLine(String line, int level) {
  -        task.log(line, level);
  +        pc.log(line, level);
       }
   
   
  
  
  
  1.11.2.11 +21 -9     ant/src/main/org/apache/tools/ant/taskdefs/Redirector.java
  
  Index: Redirector.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Redirector.java,v
  retrieving revision 1.11.2.10
  retrieving revision 1.11.2.11
  diff -u -r1.11.2.10 -r1.11.2.11
  --- Redirector.java	6 Jan 2005 17:30:03 -0000	1.11.2.10
  +++ Redirector.java	4 Feb 2005 08:13:46 -0000	1.11.2.11
  @@ -31,8 +31,9 @@
   import java.util.Arrays;
   import java.util.Vector;
   
  -import org.apache.tools.ant.Task;
   import org.apache.tools.ant.Project;
  +import org.apache.tools.ant.ProjectComponent;
  +import org.apache.tools.ant.Task;
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.filters.util.ChainReaderHelper;
   import org.apache.tools.ant.util.StringUtils;
  @@ -46,7 +47,7 @@
   
   /**
    * The Redirector class manages the setup and connection of
  - * input and output redirection for an Ant task.
  + * input and output redirection for an Ant project component.
    *
    * @since Ant 1.6
    */
  @@ -125,7 +126,7 @@
       private boolean createEmptyFiles = true;
   
       /** The task for which this redirector is working */
  -    private Task managingTask;
  +    private ProjectComponent managingTask;
   
       /** The stream for output data */
       private OutputStream outputStream = null;
  @@ -172,6 +173,17 @@
        * @param managingTask the task for which the redirector is to work
        */
       public Redirector(Task managingTask) {
  +        this((ProjectComponent) managingTask);
  +    }
  +
  +    /**
  +     * Create a redirector instance for the given task
  +     *
  +     * @param managingTask the project component for which the
  +     * redirector is to work
  +     * @since Ant 1.6.3
  +     */
  +    public Redirector(ProjectComponent managingTask) {
           this.managingTask = managingTask;
       }
   
  @@ -489,8 +501,8 @@
               || !(outputEncoding.equalsIgnoreCase(inputEncoding))) {
               try {
                   LeadPipeInputStream snk = new LeadPipeInputStream();
  -                snk.setManagingTask(managingTask);
  -    
  +                snk.setManagingComponent(managingTask);
  +
                   InputStream outPumpIn = snk;
   
                   Reader reader = new InputStreamReader(outPumpIn, inputEncoding);
  @@ -518,8 +530,8 @@
               || !(errorEncoding.equalsIgnoreCase(inputEncoding))) {
               try {
                   LeadPipeInputStream snk = new LeadPipeInputStream();
  -                snk.setManagingTask(managingTask);
  -    
  +                snk.setManagingComponent(managingTask);
  +
                   InputStream errPumpIn = snk;
   
                   Reader reader = new InputStreamReader(errPumpIn, inputEncoding);
  @@ -554,7 +566,7 @@
               } catch (IOException eyeOhEx) {
                   throw new BuildException(eyeOhEx);
               }
  -            ((ConcatFileInputStream)inputStream).setManagingTask(managingTask);
  +            ((ConcatFileInputStream) inputStream).setManagingComponent(managingTask);
           } else if (inputString != null) {
               managingTask.log("Using input \"" + inputString + "\"",
                   Project.MSG_VERBOSE);
  @@ -773,7 +785,7 @@
           Arrays.fill(c, ' ');
           String indent = new String(c);
   
  -        for (int i = 1; i < file.length ; i++) {
  +        for (int i = 1; i < file.length; i++) {
               outputStream = new TeeOutputStream(outputStream,
                   new LazyFileOutputStream(file[i], append, createEmptyFiles));
               managingTask.log(indent + file[i], loglevel);
  
  
  
  No                   revision
  No                   revision
  1.14.2.5  +7 -28     ant/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java
  
  Index: Kjc.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java,v
  retrieving revision 1.14.2.4
  retrieving revision 1.14.2.5
  diff -u -r1.14.2.4 -r1.14.2.5
  --- Kjc.java	9 Mar 2004 17:01:38 -0000	1.14.2.4
  +++ Kjc.java	4 Feb 2005 08:13:46 -0000	1.14.2.5
  @@ -1,5 +1,5 @@
   /*
  - * Copyright  2001-2004 The Apache Software Foundation
  + * Copyright  2001-2005 The Apache Software Foundation
    *
    *  Licensed under the Apache License, Version 2.0 (the "License");
    *  you may not use this file except in compliance with the License.
  @@ -17,9 +17,9 @@
   
   package org.apache.tools.ant.taskdefs.compilers;
   
  -import java.lang.reflect.Method;
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Project;
  +import org.apache.tools.ant.taskdefs.ExecuteJava;
   import org.apache.tools.ant.types.Commandline;
   import org.apache.tools.ant.types.Path;
   
  @@ -40,31 +40,10 @@
       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);
  -            }
  -        }
  +        cmd.setExecutable("at.dms.kjc.Main");
  +        ExecuteJava ej = new ExecuteJava();
  +        ej.setJavaCommand(cmd);
  +        return ej.fork(getJavac()) == 0;
       }
   
       /**
  @@ -91,7 +70,7 @@
           Path cp = new Path(project);
   
           // kjc don't have bootclasspath option.
  -        if (bootclasspath != null) {
  +        if (bootclasspath != null && bootclasspath.size() > 0) {
               cp.append(bootclasspath);
           }
   
  
  
  
  No                   revision
  No                   revision
  1.27.2.5  +153 -156  ant/src/main/org/apache/tools/ant/taskdefs/optional/Javah.java
  
  Index: Javah.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/Javah.java,v
  retrieving revision 1.27.2.4
  retrieving revision 1.27.2.5
  diff -u -r1.27.2.4 -r1.27.2.5
  --- Javah.java	9 Mar 2004 17:01:41 -0000	1.27.2.4
  +++ Javah.java	4 Feb 2005 08:13:46 -0000	1.27.2.5
  @@ -1,5 +1,5 @@
   /*
  - * Copyright  2000-2004 The Apache Software Foundation
  + * Copyright  2000-2005 The Apache Software Foundation
    *
    *  Licensed under the Apache License, Version 2.0 (the "License");
    *  you may not use this file except in compliance with the License.
  @@ -18,18 +18,21 @@
   package org.apache.tools.ant.taskdefs.optional;
   
   import java.io.File;
  -import java.lang.reflect.Constructor;
  -import java.lang.reflect.Method;
  +import java.util.ArrayList;
   import java.util.Enumeration;
   import java.util.StringTokenizer;
   import java.util.Vector;
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Project;
   import org.apache.tools.ant.Task;
  +import org.apache.tools.ant.taskdefs.optional.javah.JavahAdapter;
  +import org.apache.tools.ant.taskdefs.optional.javah.JavahAdapterFactory;
   import org.apache.tools.ant.types.Commandline;
   import org.apache.tools.ant.types.Path;
   import org.apache.tools.ant.types.Reference;
   import org.apache.tools.ant.util.JavaEnvUtils;
  +import org.apache.tools.ant.util.facade.FacadeTaskHelper;
  +import org.apache.tools.ant.util.facade.ImplementationSpecificArgument;
   
   /**
    * Generates JNI header files using javah.
  @@ -76,6 +79,11 @@
       private Path bootclasspath;
       //private Path extdirs;
       private static String lSep = System.getProperty("line.separator");
  +    private FacadeTaskHelper facade = null;
  +
  +    public Javah() {
  +        facade = new FacadeTaskHelper(JavahAdapterFactory.getDefault());
  +    }
   
       /**
        * the fully-qualified name of the class (or classes, separated by commas).
  @@ -101,7 +109,6 @@
   
           public void setName(String name) {
               this.name = name;
  -            log("ClassArgument.name=" + name);
           }
   
           public String getName() {
  @@ -110,6 +117,28 @@
       }
   
       /**
  +     * Names of the classes to process.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public String[] getClasses() {
  +        ArrayList al = new ArrayList();
  +        if (cls != null) {
  +            StringTokenizer tok = new StringTokenizer(cls, ",", false);
  +            while (tok.hasMoreTokens()) {
  +                al.add(tok.nextToken().trim());
  +            }
  +        }
  +
  +        Enumeration e = classes.elements();
  +        while (e.hasMoreElements()) {
  +            ClassArgument arg = (ClassArgument) e.nextElement();
  +            al.add(arg.getName());
  +        }
  +        return (String[]) al.toArray(new String[0]);
  +    }
  +
  +    /**
        * Set the destination directory into which the Java source
        * files should be compiled.
        */
  @@ -118,6 +147,15 @@
       }
   
       /**
  +     * The destination directory, if any.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public File getDestdir() {
  +        return destDir;
  +    }
  +
  +    /**
        * the classpath to use.
        */
       public void setClasspath(Path src) {
  @@ -147,6 +185,15 @@
       }
   
       /**
  +     * The classpath to use.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public Path getClasspath() {
  +        return classpath;
  +    }
  +
  +    /**
        * location of bootstrap class files.
        */
       public void setBootclasspath(Path src) {
  @@ -175,27 +222,14 @@
           createBootclasspath().setRefid(r);
       }
   
  -    ///**
  -    // * Sets the extension directories that will be used during the
  -    // * compilation.
  -    // */
  -    //public void setExtdirs(Path extdirs) {
  -    //    if (this.extdirs == null) {
  -    //        this.extdirs = extdirs;
  -    //    } else {
  -    //        this.extdirs.append(extdirs);
  -    //    }
  -    //}
  -
  -    ///**
  -    // * Maybe creates a nested classpath element.
  -    // */
  -    //public Path createExtdirs() {
  -    //    if (extdirs == null) {
  -    //        extdirs = new Path(project);
  -    //    }
  -    //    return extdirs.createPath();
  -    //}
  +    /**
  +     * The bootclasspath to use.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public Path getBootclasspath() {
  +        return bootclasspath;
  +    }
   
       /**
        * Concatenates the resulting header or source files for all
  @@ -206,6 +240,15 @@
       }
   
       /**
  +     * The destination file, if any.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public File getOutputfile() {
  +        return outputFile;
  +    }
  +
  +    /**
        * If true, output files should always be written (JDK1.2 only).
        */
       public void setForce(boolean force) {
  @@ -213,6 +256,15 @@
       }
   
       /**
  +     * Whether output files should always be written.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public boolean getForce() {
  +        return force;
  +    }
  +
  +    /**
        * If true, specifies that old JDK1.0-style header files should be
        * generated.
        * (otherwise output file contain JNI-style native method function prototypes) (JDK1.2 only)
  @@ -222,6 +274,15 @@
       }
   
       /**
  +     * Whether old JDK1.0-style header files should be generated.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public boolean getOld() {
  +        return old;
  +    }
  +
  +    /**
        * If true, generate C declarations from the Java object file (used with old).
        */
       public void setStubs(boolean stubs) {
  @@ -229,6 +290,15 @@
       }
   
       /**
  +     * Whether C declarations from the Java object file should be generated.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public boolean getStubs() {
  +        return stubs;
  +    }
  +
  +    /**
        * If true, causes Javah to print a message concerning
        * the status of the generated files.
        */
  @@ -237,6 +307,51 @@
       }
   
       /**
  +     * Whether verbose output should get generated.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public boolean getVerbose() {
  +        return verbose;
  +    }
  +
  +    /**
  +     * Choose the implementation for this particular task.
  +     * @param impl the name of the implemenation
  +     * @since Ant 1.6.3
  +     */
  +    public void setImplementation(String impl) {
  +        if ("default".equals(impl)) {
  +            facade.setImplementation(JavahAdapterFactory.getDefault());
  +        } else {
  +            facade.setImplementation(impl);
  +        }        
  +    }
  +
  +    /**
  +     * Adds an implementation specific command-line argument.
  +     * @return a ImplementationSpecificArgument to be configured
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public ImplementationSpecificArgument createArg() {
  +        ImplementationSpecificArgument arg =
  +            new ImplementationSpecificArgument();
  +        facade.addImplementationArgument(arg);
  +        return arg;
  +    }
  +
  +    /**
  +     * Returns the (implementation specific) settings given as nested
  +     * arg elements.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public String[] getCurrentArgs() {
  +        return facade.getArgs();
  +    }
  +
  +    /**
        * Execute the task
        *
        * @throws BuildException is there is a problem in the task execution.
  @@ -271,124 +386,20 @@
               classpath = classpath.concatSystemClasspath("ignore");
           }
   
  -        String compiler = getProject().getProperty("build.compiler");
  -        if (compiler == null) {
  -            if (!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)
  -                && !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2)) {
  -                compiler = "modern";
  -            } else {
  -                compiler = "classic";
  -            }
  -        }
  -
  -        doClassicCompile();
  -    }
  -
  -    // XXX
  -    // we need a way to not use the current classpath.
  -
  -    /**
  -     * Performs a compile using the classic compiler that shipped with
  -     * JDK 1.1 and 1.2.
  -     */
  -
  -    private void doClassicCompile() throws BuildException {
  -        Commandline cmd = setupJavahCommand();
  -
  -        // Use reflection to be able to build on all JDKs
  -        /*
  -        // provide the compiler a different message sink - namely our own
  -        sun.tools.javac.Main compiler =
  -                new sun.tools.javac.Main(new LogOutputStream(this, Project.MSG_WARN), "javac");
  -
  -        if (!compiler.compile(cmd.getArguments())) {
  -            throw new BuildException("Compile failed");
  -        }
  -        */
  -
  -
  -        try {
  -            Class javahMainClass = null;
  -            try {
  -                // first search for the "old" javah class in 1.4.2 tools.jar
  -                javahMainClass = Class.forName("com.sun.tools.javah.oldjavah.Main");
  -            } catch (ClassNotFoundException cnfe) {
  -                // assume older than 1.4.2 tools.jar
  -                javahMainClass = Class.forName("com.sun.tools.javah.Main");
  -            }
  -
  -            // now search for the constructor that takes in String[] arguments.
  -            Class[] strings = new Class[] {String[].class};
  -            Constructor constructor = javahMainClass.getConstructor(strings);
  -
  -            // construct the javah Main instance
  -            Object javahMain = constructor.newInstance(new Object[] {cmd.getArguments()});
  -
  -            // find the run method
  -            Method runMethod = javahMainClass.getMethod("run", new Class[0]);
  -
  -            runMethod.invoke(javahMain, new Object[0]);
  -        } catch (Exception ex) {
  -            if (ex instanceof BuildException) {
  -                throw (BuildException) ex;
  -            } else {
  -                throw new BuildException("Error starting javah: " + ex, ex, getLocation());
  -            }
  +        JavahAdapter ad = 
  +            JavahAdapterFactory.getAdapter(facade.getImplementation(),
  +                                           this);
  +        if (!ad.compile(this)) {
  +            throw new BuildException("compilation failed");
           }
       }
   
       /**
  -     * Does the command line argument processing common to classic and
  -     * modern.
  +     * Logs the compilation parameters, adds the files to compile and logs the
  +     * &quot;niceSourceList&quot;
        */
  -    private Commandline setupJavahCommand() {
  -        Commandline cmd = new Commandline();
  -
  -        if (destDir != null) {
  -            cmd.createArgument().setValue("-d");
  -            cmd.createArgument().setFile(destDir);
  -        }
  -
  -        if (outputFile != null) {
  -            cmd.createArgument().setValue("-o");
  -            cmd.createArgument().setFile(outputFile);
  -        }
  -
  -        if (classpath != null) {
  -            cmd.createArgument().setValue("-classpath");
  -            cmd.createArgument().setPath(classpath);
  -        }
  -
  -        // JDK1.1 is rather simpler than JDK1.2
  -        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
  -            if (verbose) {
  -                cmd.createArgument().setValue("-v");
  -            }
  -        } else {
  -            if (verbose) {
  -                cmd.createArgument().setValue("-verbose");
  -            }
  -            if (old) {
  -                cmd.createArgument().setValue("-old");
  -            }
  -            if (force) {
  -                cmd.createArgument().setValue("-force");
  -            }
  -        }
  -
  -        if (stubs) {
  -            if (!old) {
  -                throw new BuildException("stubs only available in old mode.", getLocation());
  -            }
  -            cmd.createArgument().setValue("-stubs");
  -        }
  -        if (bootclasspath != null) {
  -            cmd.createArgument().setValue("-bootclasspath");
  -            cmd.createArgument().setPath(bootclasspath);
  -        }
  -
  +    public void logAndAddFiles(Commandline cmd) {
           logAndAddFilesToCompile(cmd);
  -        return cmd;
       }
   
       /**
  @@ -396,32 +407,18 @@
        * &quot;niceSourceList&quot;
        */
       protected void logAndAddFilesToCompile(Commandline cmd) {
  -        int n = 0;
           log("Compilation " + cmd.describeArguments(),
               Project.MSG_VERBOSE);
   
           StringBuffer niceClassList = new StringBuffer();
  -        if (cls != null) {
  -            StringTokenizer tok = new StringTokenizer(cls, ",", false);
  -            while (tok.hasMoreTokens()) {
  -                String aClass = tok.nextToken().trim();
  -                cmd.createArgument().setValue(aClass);
  -                niceClassList.append("    " + aClass + lSep);
  -                n++;
  -            }
  -        }
  -
  -        Enumeration e = classes.elements();
  -        while (e.hasMoreElements()) {
  -            ClassArgument arg = (ClassArgument) e.nextElement();
  -            String aClass = arg.getName();
  -            cmd.createArgument().setValue(aClass);
  -            niceClassList.append("    " + aClass + lSep);
  -            n++;
  +        String[] c = getClasses();
  +        for (int i = 0; i < c.length; i++) {
  +            cmd.createArgument().setValue(c[i]);
  +            niceClassList.append("    " + c[i] + lSep);
           }
   
           StringBuffer prefix = new StringBuffer("Class");
  -        if (n > 1) {
  +        if (c.length > 1) {
               prefix.append("es");
           }
           prefix.append(" to be compiled:");
  
  
  
  1.17.2.5  +79 -20    ant/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java
  
  Index: Native2Ascii.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java,v
  retrieving revision 1.17.2.4
  retrieving revision 1.17.2.5
  diff -u -r1.17.2.4 -r1.17.2.5
  --- Native2Ascii.java	9 Mar 2004 17:01:41 -0000	1.17.2.4
  +++ Native2Ascii.java	4 Feb 2005 08:13:46 -0000	1.17.2.5
  @@ -1,5 +1,5 @@
   /*
  - * Copyright  2000-2004 The Apache Software Foundation
  + * Copyright  2000-2005 The Apache Software Foundation
    *
    *  Licensed under the Apache License, Version 2.0 (the "License");
    *  you may not use this file except in compliance with the License.
  @@ -22,11 +22,15 @@
   import org.apache.tools.ant.DirectoryScanner;
   import org.apache.tools.ant.Project;
   import org.apache.tools.ant.taskdefs.MatchingTask;
  +import org.apache.tools.ant.taskdefs.optional.native2ascii.Native2AsciiAdapter;
  +import org.apache.tools.ant.taskdefs.optional.native2ascii.Native2AsciiAdapterFactory;
   import org.apache.tools.ant.types.Commandline;
   import org.apache.tools.ant.types.Mapper;
   import org.apache.tools.ant.util.FileNameMapper;
   import org.apache.tools.ant.util.IdentityMapper;
   import org.apache.tools.ant.util.SourceFileScanner;
  +import org.apache.tools.ant.util.facade.FacadeTaskHelper;
  +import org.apache.tools.ant.util.facade.ImplementationSpecificArgument;
   
   /**
    * Converts files from native encodings to ASCII.
  @@ -42,6 +46,11 @@
       private String extension = null;  // Extension of output files if different
   
       private Mapper mapper;
  +    private FacadeTaskHelper facade = null;
  +
  +    public Native2Ascii() {
  +        facade = new FacadeTaskHelper(Native2AsciiAdapterFactory.getDefault());
  +    }
   
       /**
        * Flag the conversion to run in the reverse sense,
  @@ -55,6 +64,15 @@
       }
   
       /**
  +     * The value of the reverse attribute.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public boolean getReverse() {
  +        return reverse;
  +    }
  +
  +    /**
        * Set the encoding to translate to/from.
        * If unset, the default encoding for the JVM is used.
        *
  @@ -66,6 +84,15 @@
       }
   
       /**
  +     * The value of the reverse attribute.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public String getEncoding() {
  +        return encoding;
  +    }
  +
  +    /**
        * Set the source directory in which to find files to convert.
        *
        * @param srcDir directory to find input file in.
  @@ -95,6 +122,19 @@
       }
   
       /**
  +     * Choose the implementation for this particular task.
  +     * @param impl the name of the implemenation
  +     * @since Ant 1.6.3
  +     */
  +    public void setImplementation(String impl) {
  +        if ("default".equals(impl)) {
  +            facade.setImplementation(Native2AsciiAdapterFactory.getDefault());
  +        } else {
  +            facade.setImplementation(impl);
  +        }        
  +    }
  +
  +    /**
        * Defines the FileNameMapper to use (nested mapper element).
        *
        * @return the mapper to use for file name translations.
  @@ -111,6 +151,28 @@
       }
   
       /**
  +     * A nested filenamemapper
  +     * @param fileNameMapper the mapper to add
  +     * @since Ant 1.6.3
  +     */
  +    public void add(FileNameMapper fileNameMapper) {
  +        createMapper().add(fileNameMapper);
  +    }
  +
  +    /**
  +     * Adds an implementation specific command-line argument.
  +     * @return a ImplementationSpecificArgument to be configured
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public ImplementationSpecificArgument createArg() {
  +        ImplementationSpecificArgument arg =
  +            new ImplementationSpecificArgument();
  +        facade.addImplementationArgument(arg);
  +        return arg;
  +    }
  +
  +    /**
        * Execute the task
        *
        * @throws BuildException is there is a problem in the task execution.
  @@ -171,29 +233,15 @@
        * @param srcName name of the input file.
        * @param destName name of the input file.
        */
  -    private void convert(String srcName, String destName) throws BuildException {
  -
  -        Commandline cmd = new Commandline();  // Command line to run
  +    private void convert(String srcName, String destName) 
  +        throws BuildException {
           File srcFile;                         // File to convert
           File destFile;                        // where to put the results
   
  -        // Set up the basic args (this could be done once, but
  -        // it's cleaner here)
  -        if (reverse) {
  -            cmd.createArgument().setValue("-reverse");
  -        }
  -
  -        if (encoding != null) {
  -            cmd.createArgument().setValue("-encoding");
  -            cmd.createArgument().setValue(encoding);
  -        }
  -
           // Build the full file names
           srcFile = new File(srcDir, srcName);
           destFile = new File(destDir, destName);
   
  -        cmd.createArgument().setFile(srcFile);
  -        cmd.createArgument().setFile(destFile);
           // Make sure we're not about to clobber something
           if (srcFile.equals(destFile)) {
               throw new BuildException("file " + srcFile
  @@ -213,13 +261,24 @@
           }
   
           log("converting " + srcName, Project.MSG_VERBOSE);
  -        sun.tools.native2ascii.Main n2a
  -            = new sun.tools.native2ascii.Main();
  -        if (!n2a.convert(cmd.getArguments())) {
  +        Native2AsciiAdapter ad = 
  +            Native2AsciiAdapterFactory.getAdapter(facade.getImplementation(),
  +                                                  this);
  +        if (!ad.convert(this, srcFile, destFile)) {
               throw new BuildException("conversion failed");
           }
       }
   
  +    /**
  +     * Returns the (implementation specific) settings given as nested
  +     * arg elements.
  +     *
  +     * @since Ant 1.6.3
  +     */
  +    public String[] getCurrentArgs() {
  +        return facade.getArgs();
  +    }
  +
       private class ExtMapper implements FileNameMapper {
   
           public void setFrom(String s) {
  
  
  
  No                   revision
  No                   revision
  1.1.2.1   +0 -0      ant/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapter.java
  
  
  
  
  1.1.2.1   +0 -0      ant/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapterFactory.java
  
  
  
  
  1.1.2.1   +0 -1      ant/src/main/org/apache/tools/ant/taskdefs/optional/javah/Kaffeh.java
  
  Index: Kaffeh.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/javah/Kaffeh.java,v
  retrieving revision 1.1
  retrieving revision 1.1.2.1
  diff -u -r1.1 -r1.1.2.1
  --- Kaffeh.java	4 Feb 2005 08:08:07 -0000	1.1
  +++ Kaffeh.java	4 Feb 2005 08:13:47 -0000	1.1.2.1
  @@ -68,7 +68,6 @@
           if (javah.getBootclasspath() != null) {
               cp.append(javah.getBootclasspath());
           }
  -        cp = cp.concatSystemBootClasspath("ignore");
           if (javah.getClasspath() != null) {
               cp.append(javah.getClasspath());
           }
  
  
  
  1.1.2.1   +0 -1      ant/src/main/org/apache/tools/ant/taskdefs/optional/javah/SunJavah.java
  
  Index: SunJavah.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/javah/SunJavah.java,v
  retrieving revision 1.1
  retrieving revision 1.1.2.1
  diff -u -r1.1 -r1.1.2.1
  --- SunJavah.java	4 Feb 2005 08:08:07 -0000	1.1
  +++ SunJavah.java	4 Feb 2005 08:13:47 -0000	1.1.2.1
  @@ -105,7 +105,6 @@
           if (javah.getBootclasspath() != null) {
               bcp.append(javah.getBootclasspath());
           }
  -        bcp = bcp.concatSystemBootClasspath("ignore");
           if (bcp.size() > 0) {
               cmd.createArgument().setValue("-bootclasspath");
               cmd.createArgument().setPath(bcp);
  
  
  
  No                   revision
  No                   revision
  1.83.2.17 +21 -16    ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
  
  Index: JUnitTask.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java,v
  retrieving revision 1.83.2.16
  retrieving revision 1.83.2.17
  diff -u -r1.83.2.16 -r1.83.2.17
  --- JUnitTask.java	7 Dec 2004 10:30:35 -0000	1.83.2.16
  +++ JUnitTask.java	4 Feb 2005 08:13:47 -0000	1.83.2.17
  @@ -1,5 +1,5 @@
   /*
  - * Copyright  2000-2004 The Apache Software Foundation
  + * Copyright  2000-2005 The Apache Software Foundation
    *
    *  Licensed under the Apache License, Version 2.0 (the "License");
    *  you may not use this file except in compliance with the License.
  @@ -771,7 +771,12 @@
                   Project.MSG_WARN);
           }
   
  -        CommandlineJava cmd = (CommandlineJava) getCommandline().clone();
  +        CommandlineJava cmd = null;
  +        try {
  +            cmd = (CommandlineJava) getCommandline().clone();
  +        } catch (CloneNotSupportedException e) {
  +            throw new BuildException(e);
  +        }
   
           cmd.setClassname("org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner");
           if (casesFile == null) {
  @@ -807,7 +812,7 @@
               log("Running " + test.getName(), Project.MSG_INFO);
               cmd.createArgument()
                   .setValue("formatter"
  -                + "=org.apache.tools.ant.taskdefs.optional.junit.SummaryJUnitResultFormatter");
  +                          + "=org.apache.tools.ant.taskdefs.optional.junit.SummaryJUnitResultFormatter");
           }
   
           cmd.createArgument().setValue("showoutput="
  @@ -901,7 +906,7 @@
       private File createTempPropertiesFile(String prefix) {
           File propsFile =
               FileUtils.newFileUtils().createTempFile(prefix, ".properties",
  -                tmpDir != null ? tmpDir : getProject().getBaseDir());
  +                                                    tmpDir != null ? tmpDir : getProject().getBaseDir());
           propsFile.deleteOnExit();
           return propsFile;
       }
  @@ -1023,7 +1028,7 @@
           }
   
           CommandlineJava.SysProperties sysProperties =
  -                getCommandline().getSystemProperties();
  +            getCommandline().getSystemProperties();
           if (sysProperties != null) {
               sysProperties.setSystem();
           }
  @@ -1245,11 +1250,11 @@
           //create a special test class that asserts a timout occurred,
           //and tell the formatter that it raised.  
           Test t = new Test() {
  -            public int countTestCases() { return 1; }
  -            public void run(TestResult r) {
  -                throw new AssertionFailedError("Timeout occurred");
  -            }
  -        };
  +                public int countTestCases() { return 1; }
  +                public void run(TestResult r) {
  +                    throw new AssertionFailedError("Timeout occurred");
  +                }
  +            };
           formatter.startTest(t);
           formatter.addError(t, new AssertionFailedError("Timeout occurred"));
           formatter.endTestSuite(test);
  @@ -1333,10 +1338,10 @@
            */
           ForkedTestConfiguration(JUnitTest test) {
               this(test.getFiltertrace(),
  -                    test.getHaltonerror(),
  -                    test.getHaltonfailure(),
  -                    test.getErrorProperty(),
  -                    test.getFailureProperty());
  +                 test.getHaltonerror(),
  +                 test.getHaltonfailure(),
  +                 test.getErrorProperty(),
  +                 test.getFailureProperty());
           }
   
           /**
  @@ -1458,7 +1463,7 @@
               if ((errorOccurredHere && test.getHaltonerror())
                   || (failureOccurredHere && test.getHaltonfailure())) {
                   throw new BuildException(name + " failed"
  -                    + (wasKilled ? " (timeout)" : ""), getLocation());
  +                                         + (wasKilled ? " (timeout)" : ""), getLocation());
               } else {
                   log(name + " FAILED"
                       + (wasKilled ? " (timeout)" : ""), Project.MSG_ERR);
  
  
  
  No                   revision
  No                   revision
  1.3.2.1   +0 -0      ant/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/DefaultNative2Ascii.java
  
  
  
  
  1.1.2.1   +0 -0      ant/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/KaffeNative2Ascii.java
  
  
  
  
  1.3.2.1   +0 -0      ant/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapter.java
  
  
  
  
  1.1.2.1   +0 -0      ant/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapterFactory.java
  
  
  
  
  1.2.2.1   +0 -0      ant/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/SunNative2Ascii.java
  
  
  
  
  No                   revision
  No                   revision
  1.11.2.6  +6 -18     ant/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java
  
  Index: KaffeRmic.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java,v
  retrieving revision 1.11.2.5
  retrieving revision 1.11.2.6
  diff -u -r1.11.2.5 -r1.11.2.6
  --- KaffeRmic.java	15 Dec 2004 12:31:44 -0000	1.11.2.5
  +++ KaffeRmic.java	4 Feb 2005 08:13:47 -0000	1.11.2.6
  @@ -1,5 +1,5 @@
   /*
  - * Copyright  2001-2002,2004 The Apache Software Foundation
  + * Copyright  2001-2002,2004-2005 The Apache Software Foundation
    *
    *  Licensed under the Apache License, Version 2.0 (the "License");
    *  you may not use this file except in compliance with the License.
  @@ -17,10 +17,9 @@
   
   package org.apache.tools.ant.taskdefs.rmic;
   
  -import java.lang.reflect.Constructor;
  -import java.lang.reflect.Method;
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Project;
  +import org.apache.tools.ant.taskdefs.ExecuteJava;
   import org.apache.tools.ant.types.Commandline;
   
   /**
  @@ -57,21 +56,10 @@
                                        getRmic().getLocation());
           }
   
  -        try {
  -            Constructor cons = c.getConstructor(new Class[] {String[].class});
  -            Object rmic = cons.newInstance(new Object[] {cmd.getArguments()});
  -            Method doRmic = c.getMethod("run", (Class[]) null);
  -            Boolean ok = (Boolean) doRmic.invoke(rmic, (Object[]) null);
  -
  -            return ok.booleanValue();
  -        } catch (BuildException ex) {
  -            //rethrow
  -            throw ex;
  -        } catch (Exception ex) {
  -            //wrap
  -           throw new BuildException("Error starting Kaffe rmic: ",
  -                                    ex, getRmic().getLocation());
  -        }
  +        cmd.setExecutable(c.getName());
  +        ExecuteJava ej = new ExecuteJava();
  +        ej.setJavaCommand(cmd);
  +        return ej.fork(getRmic()) == 0;
       }
   
       /**
  
  
  
  No                   revision
  No                   revision
  1.47.2.9  +62 -29    ant/src/main/org/apache/tools/ant/types/CommandlineJava.java
  
  Index: CommandlineJava.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/types/CommandlineJava.java,v
  retrieving revision 1.47.2.8
  retrieving revision 1.47.2.9
  diff -u -r1.47.2.8 -r1.47.2.9
  --- CommandlineJava.java	28 Oct 2004 09:17:49 -0000	1.47.2.8
  +++ CommandlineJava.java	4 Feb 2005 08:13:47 -0000	1.47.2.9
  @@ -1,5 +1,5 @@
   /*
  - * Copyright  2000-2004 The Apache Software Foundation
  + * Copyright  2000-2005 The Apache Software Foundation
    *
    *  Licensed under the Apache License, Version 2.0 (the "License");
    *  you may not use this file except in compliance with the License.
  @@ -17,17 +17,17 @@
   
   package org.apache.tools.ant.types;
   
  -import java.util.Enumeration;
  -import java.util.Properties;
  -import java.util.Vector;
  -import java.util.List;
  -import java.util.LinkedList;
  -import java.util.ListIterator;
  -
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Project;
   import org.apache.tools.ant.util.JavaEnvUtils;
   
  +import java.util.Enumeration;
  +import java.util.LinkedList;
  +import java.util.List;
  +import java.util.ListIterator;
  +import java.util.Properties;
  +import java.util.Vector;
  +
   /**
    * A representation of a Java command line that is
    * a composite of 2 <tt>Commandline</tt>. One is used for the
  @@ -75,7 +75,7 @@
            * get the properties as an array; this is an override of the
            * superclass, as it evaluates all the properties
            * @return the array of definitions; may be null
  -         * @throws BuildException
  +         * @throws BuildException on error
            */
           public String[] getVariables() throws BuildException {
   
  @@ -100,10 +100,11 @@
                       listIt.add("-D" + props[i]);
                   }
               }
  -            Properties propertySets = mergePropertySets();
  -            for (Enumeration e = propertySets.keys(); e.hasMoreElements();) {
  +            Properties propertySetProperties = mergePropertySets();
  +            for (Enumeration e = propertySetProperties.keys();
  +                 e.hasMoreElements();) {
                   String key = (String) e.nextElement();
  -                String value = propertySets.getProperty(key);
  +                String value = propertySetProperties.getProperty(key);
                   listIt.add("-D" + key + "=" + value);
               }
           }
  @@ -163,8 +164,9 @@
           /**
            *  deep clone
            * @return a cloned instance of SysProperties
  +         * @exception CloneNotSupportedException for signature
            */
  -        public Object clone() {
  +        public Object clone() throws CloneNotSupportedException {
               try {
                   SysProperties c = (SysProperties) super.clone();
                   c.variables = (Vector) variables.clone();
  @@ -184,6 +186,16 @@
           }
   
           /**
  +         * add a propertyset to the total set
  +         * @param ps the new property set
  +         * @since Ant 1.6.3
  +         */
  +        public void addSysproperties(SysProperties ps) {
  +            variables.addAll(ps.variables);
  +            propertySets.addAll(ps.propertySets);
  +        }        
  +
  +        /**
            * merge all property sets into a single Properties object
            * @return the merged object
            */
  @@ -196,6 +208,7 @@
               }
               return p;
           }
  +
       }
   
       /**
  @@ -239,16 +252,25 @@
       }
   
       /**
  -     * set the executable used to start the new JVM
  -     * @param vm
  +     * add a set of system properties
  +     * @param sysp a set of properties
  +     * @since Ant 1.6.3
  +     */
  +    public void addSysproperties(SysProperties sysp) {
  +        sysProperties.addSysproperties(sysp);
  +    }
  +
  +    /**
  +     * Set the executable used to start the new JVM.
  +     * @param vm the executable to use
        */
       public void setVm(String vm) {
           vmCommand.setExecutable(vm);
       }
   
       /**
  -     * set the JVM version required
  -     * @param value
  +     * Set the JVM version required.
  +     * @param value the version required
        */
       public void setVmversion(String value) {
           vmVersion = value;
  @@ -312,6 +334,11 @@
           return null;
       }
   
  +    /**
  +     * Create a classpath.
  +     * @param p the project to use to create the path in
  +     * @return a path to be configured
  +     */
       public Path createClasspath(Project p) {
           if (classpath == null) {
               classpath = new Path(p);
  @@ -320,6 +347,9 @@
       }
   
       /**
  +     * Create a boot classpath.
  +     * @param p the project to use to create the path in
  +     * @return a path to be configured
        * @since Ant 1.6
        */
       public Path createBootclasspath(Project p) {
  @@ -329,6 +359,10 @@
           return bootclasspath;
       }
   
  +    /**
  +     * Get the vm version.
  +     * @return the vm version
  +     */
       public String getVmversion() {
           return vmVersion;
       }
  @@ -389,6 +423,7 @@
       /**
        * Specify max memory of the JVM
        * -mx or -Xmx depending on VM version
  +     * @param max the string to pass to the jvm to specifiy the max memory
        */
       public void setMaxmemory(String max) {
           this.maxMemory = max;
  @@ -407,7 +442,7 @@
        * Returns a String that describes the command and arguments
        * suitable for verbose output before a call to
        * <code>Runtime.exec(String[])<code>
  -     *
  +     * @return the description string
        * @since Ant 1.5
        */
       public String describeCommand() {
  @@ -419,7 +454,7 @@
        * for in VM executions.
        *
        * <p>The class name is the executable in this context.</p>
  -     *
  +     * @return the description string
        * @since Ant 1.5
        */
       public String describeJavaCommand() {
  @@ -450,7 +485,7 @@
        * @deprecated please dont use this -it effectively creates the entire command.
        */
       public int size() {
  -        int size = getActualVMCommand().size() + javaCommand.size() 
  +        int size = getActualVMCommand().size() + javaCommand.size()
               + sysProperties.size();
           // classpath is "-classpath <classpath>" -> 2 args
           if (haveClasspath()) {
  @@ -531,8 +566,10 @@
       /**
        * clone the object; clone of all fields in the class
        * @return a CommandlineJava object
  +     * @throws BuildException if anything went wrong.
  +     * @throws CloneNotSupportedException never
        */
  -    public Object clone() {
  +    public Object clone() throws CloneNotSupportedException {
           try {
               CommandlineJava c = (CommandlineJava) super.clone();
               c.vmCommand = (Commandline) vmCommand.clone();
  @@ -563,7 +600,7 @@
       /**
        * Has the classpath been specified and shall it really be used or
        * will build.sysclasspath null it?
  -     *
  +     * @return true if the classpath is to be used
        * @since Ant 1.6
        */
       protected boolean haveClasspath() {
  @@ -580,27 +617,23 @@
        *
        * @param log whether to log a warning if a bootclasspath has been
        * specified but will be ignored.
  -     *
  +     * @return true if the bootclasspath is to be used
        * @since Ant 1.6
        */
       protected boolean haveBootclasspath(boolean log) {
           if (bootclasspath != null
               && bootclasspath.toString().trim().length() > 0) {
   
  -            /*
  -             * XXX - need to log something, but there is no ProjectComponent
  -             *       around to log to.
  -             */
               if (!bootclasspath.toString()
                   .equals(bootclasspath.concatSystemClasspath("ignore")
                           .toString())) {
                   if (log) {
  -                    System.out.println("Ignoring bootclasspath as "
  +                    bootclasspath.log("Ignoring bootclasspath as "
                                          + "build.sysclasspath has been set.");
                   }
               } else if (vmVersion.startsWith("1.1")) {
                   if (log) {
  -                    System.out.println("Ignoring bootclasspath as "
  +                    bootclasspath.log("Ignoring bootclasspath as "
                                          + "the target VM doesn't support it.");
                   }
               } else {
  
  
  
  No                   revision
  No                   revision
  1.1.2.3   +15 -5     ant/src/main/org/apache/tools/ant/util/ConcatFileInputStream.java
  
  Index: ConcatFileInputStream.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/util/ConcatFileInputStream.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- ConcatFileInputStream.java	26 Jan 2005 22:07:52 -0000	1.1.2.2
  +++ ConcatFileInputStream.java	4 Feb 2005 08:13:47 -0000	1.1.2.3
  @@ -23,8 +23,9 @@
   import java.io.IOException;
   import java.io.FileInputStream;
   
  -import org.apache.tools.ant.Task;
   import org.apache.tools.ant.Project;
  +import org.apache.tools.ant.ProjectComponent;
  +import org.apache.tools.ant.Task;
   
   /**
    * Special <CODE>InputStream</CODE> that will
  @@ -37,7 +38,7 @@
       private boolean eof = false;
       private File[] file;
       private InputStream currentStream;
  -    private Task managingTask;
  +    private ProjectComponent managingPc;
   
     /**
      * Construct a new <CODE>ConcatFileInputStream</CODE>
  @@ -71,7 +72,16 @@
        * @param task   the managing <CODE>Task</CODE>.
        */
       public void setManagingTask(Task task) {
  -        this.managingTask = task;
  +        setManagingComponent(task);
  +    }
  +
  +    /**
  +     * Set a managing <CODE>Task</CODE> for
  +     * this <CODE>ConcatFileInputStream</CODE>.
  +     * @param task   the managing <CODE>Task</CODE>.
  +     */
  +    public void setManagingComponent(ProjectComponent pc) {
  +        this.managingPc = pc;
       }
   
       /**
  @@ -80,8 +90,8 @@
        * @param loglevel   the <CODE>int</CODE> logging level.
        */
       public void log(String message, int loglevel) {
  -        if (managingTask != null) {
  -            managingTask.log(message, loglevel);
  +        if (managingPc != null) {
  +            managingPc.log(message, loglevel);
           } else {
               if (loglevel > Project.MSG_WARN) {
                   System.out.println(message);
  
  
  
  1.15.2.6  +35 -10    ant/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
  
  Index: JavaEnvUtils.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/util/JavaEnvUtils.java,v
  retrieving revision 1.15.2.5
  retrieving revision 1.15.2.6
  diff -u -r1.15.2.5 -r1.15.2.6
  --- JavaEnvUtils.java	9 Mar 2004 17:01:57 -0000	1.15.2.5
  +++ JavaEnvUtils.java	4 Feb 2005 08:13:47 -0000	1.15.2.6
  @@ -1,5 +1,5 @@
   /*
  - * Copyright  2002-2004 The Apache Software Foundation
  + * Copyright  2002-2005 The Apache Software Foundation
    *
    *  Licensed under the Apache License, Version 2.0 (the "License");
    *  you may not use this file except in compliance with the License.
  @@ -24,10 +24,12 @@
    * A set of helper methods related to locating executables or checking
    * conditons of a given Java installation.
    *
  - *
    * @since Ant 1.5
    */
  -public class JavaEnvUtils {
  +public final class JavaEnvUtils {
  +
  +    private JavaEnvUtils() {
  +    }
   
       /** Are we on a DOS-based system */
       private static final boolean isDos = Os.isFamily("dos");
  @@ -61,6 +63,9 @@
       /** Version constant for Java 1.5 */
       public static final String JAVA_1_5 = "1.5";
   
  +    /** Whether this is the Kaffe VM */
  +    private static boolean kaffeDetected;
  +
       /** array of packages in the runtime */
       private static Vector jrePackages;
   
  @@ -97,6 +102,13 @@
               // swallow as we've hit the max class version that
               // we have
           }
  +        kaffeDetected = false;
  +        try {
  +            Class.forName("kaffe.util.NotImplemented");
  +            kaffeDetected = true;
  +        } catch (Throwable t) {
  +            // swallow as this simply doesn't seem to be Kaffe
  +        }
       }
   
       /**
  @@ -111,12 +123,22 @@
        * 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.
  +     * @param version the version to check against the current version.
  +     * @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;
  +        return javaVersion.equals(version);
  +    }
  +
  +    /**
  +     * Checks whether the current Java VM is Kaffe.
  +     * @return true if the current Java VM is Kaffe.
  +     * @since Ant 1.6.3
  +     * @see http://www.kaffe.org/
  +     */
  +    public static boolean isKaffe() {
  +        return kaffeDetected;
       }
   
       /**
  @@ -133,7 +155,8 @@
        * <code>JAVA_HOME</code> points to your JDK installation.  JDK
        * &lt; 1.2 has them in the same directory as the JDK
        * executables.</p>
  -     *
  +     * @param command the java executable to find.
  +     * @return the path to the command.
        * @since Ant 1.5
        */
       public static String getJreExecutable(String command) {
  @@ -173,7 +196,8 @@
        *
        * <p>You typically find them in <code>JAVA_HOME/bin</code> if
        * <code>JAVA_HOME</code> points to your JDK installation.</p>
  -     *
  +     * @param command the java executable to find.
  +     * @return the path to the command.
        * @since Ant 1.5
        */
       public static String getJdkExecutable(String command) {
  @@ -237,7 +261,7 @@
   
       /**
        * demand creation of the package list.
  -     * When you add a new package, add a new test below
  +     * When you add a new package, add a new test below.
        */
   
       private static void buildJrePackages() {
  @@ -281,6 +305,7 @@
   
       /**
        * Testing helper method; kept here for unification of changes.
  +     * @return a list of test classes depending on the java version.
        */
       public static Vector getJrePackageTestCases() {
           Vector tests = new Vector();
  @@ -325,7 +350,7 @@
       /**
        * get a vector of strings of packages built into
        * that platforms runtime jar(s)
  -     * @return list of packages
  +     * @return list of packages.
        */
       public static Vector getJrePackages() {
           if (jrePackages == null) {
  
  
  
  1.1.2.2   +20 -8     ant/src/main/org/apache/tools/ant/util/LeadPipeInputStream.java
  
  Index: LeadPipeInputStream.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/util/LeadPipeInputStream.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- LeadPipeInputStream.java	23 Jun 2004 19:30:14 -0000	1.1.2.1
  +++ LeadPipeInputStream.java	4 Feb 2005 08:13:47 -0000	1.1.2.2
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 2004 The Apache Software Foundation
  + * Copyright 2004-2005 The Apache Software Foundation
    *
    *  Licensed under the Apache License, Version 2.0 (the "License");
    *  you may not use this file except in compliance with the License.
  @@ -21,6 +21,7 @@
   import java.io.PipedInputStream;
   import java.io.PipedOutputStream;
   
  +import org.apache.tools.ant.ProjectComponent;
   import org.apache.tools.ant.Task;
   import org.apache.tools.ant.Project;
   
  @@ -30,7 +31,7 @@
    * @since Ant 1.6.2
    */
   public class LeadPipeInputStream extends PipedInputStream {
  -    private Task managingTask;
  +    private ProjectComponent managingPc;
   
       /**
        * Construct a new <CODE>LeadPipeInputStream</CODE>.
  @@ -52,7 +53,8 @@
       /**
        * Construct a new <CODE>LeadPipeInputStream</CODE> to pull
        * from the specified <CODE>PipedOutputStream</CODE>.
  -     * @param src    the <CODE>PipedOutputStream</CODE> source.
  +     * @param src   the <CODE>PipedOutputStream</CODE> source.
  +     * @throws IOException if unable to construct the stream.
        */
       public LeadPipeInputStream(PipedOutputStream src) throws IOException {
           super(src);
  @@ -77,8 +79,9 @@
               result = super.read();
           } catch (IOException eyeOhEx) {
               if ("write end dead".equalsIgnoreCase(eyeOhEx.getMessage())) {
  -                if (in > 0 && out < buffer.length && out > in) {
  -                    result = buffer[out++] & 0xFF;
  +                if (super.in > 0 && super.out < super.buffer.length
  +                    && super.out > super.in) {
  +                    result = super.buffer[super.out++] & 0xFF;
                   }
               } else {
                   log("error at LeadPipeInputStream.read():  "
  @@ -116,7 +119,16 @@
        * @param task   the managing <CODE>Task</CODE>.
        */
       public void setManagingTask(Task task) {
  -        this.managingTask = task;
  +        setManagingComponent(task);
  +    }
  +
  +    /**
  +     * Set a managing <CODE>ProjectComponent</CODE> for
  +     * this <CODE>LeadPipeInputStream</CODE>.
  +     * @param pc   the managing <CODE>ProjectComponent</CODE>.
  +     */
  +    public void setManagingComponent(ProjectComponent pc) {
  +        this.managingPc = pc;
       }
   
       /**
  @@ -125,8 +137,8 @@
        * @param loglevel   the <CODE>int</CODE> logging level.
        */
       public void log(String message, int loglevel) {
  -        if (managingTask != null) {
  -            managingTask.log(message, loglevel);
  +        if (managingPc != null) {
  +            managingPc.log(message, loglevel);
           } else {
               if (loglevel > Project.MSG_WARN) {
                   System.out.println(message);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org