- Changed build.xml to create *.tsk-files (which is currently the extension
I choose for ant-extension-files) for some of the currently-core tasks and
all of the optional tasks
- Changed Project.java  to load Task-Information from the ext-subdirectory
of ant.home (using AntExtensionHelper)
- All calls to project.addTaskDefinition have been changed to create a new
TaskDefinition in-place and use this to add the TaskDefinition
(Project.java, Taskdef.java, Ant.java, CallTarget.java)
- Changed Main and added an option to print the currently know tasks
(-tasks)
- Uncommented several tasks in taskdefs/default.properties (all optional and
deprecated and some of the currently-core tasks (which I personally don't
think are "really" core). Deprecated tasks will no longer be included in the
task-list, optional-tasks will get some separate files (vss.tsk, script.tsk,
...) and all tasks formerly included in ant.jar and now removed from
default.properties are in core.tsk.
- Added a task TaskLib which creates the tsk-files (although one could use
jar directly, but would not have the simple error-checking)

I don't think this is complete (or how one would call it), but it worked for
me (and my buildfile) and it's a starting-point.

What do you think of it?

Nico

Index: build.xml
===================================================================
RCS file: /home/cvspublic/jakarta-ant/build.xml,v
retrieving revision 1.83
diff -u -r1.83 build.xml
--- build.xml   2000/10/13 13:15:39     1.83
+++ build.xml   2000/10/14 18:21:13
@@ -21,6 +21,7 @@
   <property name="docs.dir" value="docs"/>
   <property name="build.dir" value="../build/ant"/>
   <property name="lib.dir" value="${build.dir}/lib"/>
+  <property name="ext.dir" value="${build.dir}/ext"/>
   <property name="bin.dir" value="${build.dir}/bin"/>
   <property name="build.classes" value="${build.dir}/classes"/>
   <property name="build.javadocs" value="${build.dir}/javadocs"/>
@@ -127,6 +128,7 @@
     <jar jarfile="${lib.dir}/${name}.jar"
          basedir="${build.classes}"
          includes="org/**"
+         excludes="org/apache/tools/ant/taskdefs/optional/**"
          manifest="${manifest}"
     />
   </target>
@@ -225,7 +227,7 @@
   <!-- =================================================================== -->
   <!-- Installs the ant.jar library and binary files into ant.home         -->
   <!-- =================================================================== -->
-  <target name="bootstrap" depends="main" description="Installs the ant.jar 
library and binary files into ant.home">
+  <target name="bootstrap" 
depends="main,build.core.tasks,build.optional.tasks" description="Installs the 
ant.jar library and binary files into ant.home">
     <echo message="copying bootstrapped files into bin and lib"/>
     <copy todir="lib">
       <fileset dir="${lib.dir}"/>
@@ -233,6 +235,9 @@
     <copy todir="bin">
       <fileset dir="${bin.dir}"/>
     </copy>
+    <copy todir="ext">
+      <fileset dir="${ext.dir}"/>
+    </copy>
   </target>     
 
   <target name="install" depends="dist" if="ant.install">
@@ -259,6 +264,9 @@
     <copy todir="${ant.install}/bin">
       <fileset dir="${bin.dir}"/>
     </copy>
+    <copy todir="${ant.install}/ext">
+      <fileset dir="${ext.dir}"/>
+    </copy>
     <chmod perm="+x">
       <fileset dir="${ant.install}/bin">
         <patternset refid="chmod.patterns"/>
@@ -366,5 +374,231 @@
     </junit>
   </target>
 
+  <!-- =================================================================== -->
+  <!-- Creates the extension packages (core)                               -->
+  <!-- =================================================================== -->
+  <target name="build.core.tasks" depends="main">
+
+    <mkdir dir="${ext.dir}"/>
+
+    <tasklib name="core" version="${version}" 
+             home="http://jakarta.apache.org/ant/";
+             jarfile="${ext.dir}/core.tsk">
+      <task name="rmic" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.Rmic"
+            description="Generates RMI-Stubs and Skeletons"/>
+      <task name="war" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.War"
+            description="Creates a war-archive"/>
+      <task name="unwar" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.Expand"
+            description="Expands a war-archive"/>
+      <task name="patch" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.Patch"
+            description="Applies a patch"/>
+      <task name="style" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.XSLTProcess"
+            description="??"/>
+      <task name="signjar" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.SignJar"
+            description="Signs a jar-file"/>
+      <task name="genkey" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.GenerateKey"
+            description="Generates a new Key"/>
+      <task name="antstrucure" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.AntStructure"
+            description="Generates a DTD for currently known tasks and types"/>
+      <task name="sql" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.SQLExec"
+            description="Executes SQL-Statements"/>
+      <task name="mail" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.SendEmail"
+            description="Sends an eMail"/>
+      <task name="tasklib" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.TaskLib"
+            description="Creates a new Ant-Extension-Library"/>
+      <fileset dir="${build.classes}">
+        <include name="org/apache/tools/ant/taskdefs/*.class"/>
+      </fileset>
+    </tasklib>
+  </target>
+
+
+  <!-- =================================================================== -->
+  <!-- Creates the extension packages (optional)                           -->
+  <!-- =================================================================== -->
+  <target name="build.optional.tasks" depends="main">
+
+    <mkdir dir="${ext.dir}"/>
+
+    <tasklib name="vss" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/vss.tsk">
+      <task name="vssget" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSGET"/>
+      <task name="vssco" version="1.0"
+            
classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSCheckOut"/>
+      <task name="vssdiff" version="1.0"
+            
classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSDiffProject"/>
+      <task name="vsshistory" version="1.0"
+            
classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSHistory"/>
+      <task name="vsslabel" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSLabel"/>
+      <fileset dir="${build.classes}">
+        <include name="org/apache/tools/ant/taskdefs/optional/vss/*.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="script" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/script.tsk">
+      <task name="script" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.Script"/>
+      <fileset dir="${build.classes}">
+        <include name="org/apache/tools/ant/taskdefs/optional/Script.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="junit" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/junit.tsk">
+      <task name="junit" version="1.0"
+            
classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"/>
+      <fileset dir="${build.classes}">
+        <include name="org/apache/tools/ant/taskdefs/optional/junit/*.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="netrexxc" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/netrexxc.tsk">
+      <task name="netrexxc" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.NetRexxC"/>
+      <fileset dir="${build.classes}">
+        <include name="org/apache/tools/ant/taskdefs/optional/NetRexxC.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="renameext" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/renameext.tsk">
+      <task name="netrexxc" version="1.0"
+            
classname="org.apache.tools.ant.taskdefs.optional.RenameExtensions"/>
+      <fileset dir="${build.classes}">
+        <include 
name="org/apache/tools/ant/taskdefs/optional/RenameExtensions.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="ejb" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/ejb.tsk">
+      <task name="ejbc" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.ejb.Ejbc"/>
+      <task name="ddcreator" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.ejb.DDCreator"/>
+      <task name="wlrun" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.ejb.WLRun"/>
+      <task name="wlstop" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.ejb.WLStop"/>
+      <task name="ejbjar" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.ejb.EjbJar"/>
+      <fileset dir="${build.classes}">
+        <include name="org/apache/tools/ant/taskdefs/optional/ejb/**/*.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="mparse" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/mparse.tsk">
+      <task name="mparse" version="1.0"
+            
classname="org.apache.tools.ant.taskdefs.optional.metamata.MParse"/>
+      <fileset dir="${build.classes}">
+        <include 
name="org/apache/tools/ant/taskdefs/optional/metamata/*.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="cab" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/cab.tsk">
+      <task name="cab" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.Cab"/>
+      <fileset dir="${build.classes}">
+        <include name="org/apache/tools/ant/taskdefs/optional/Cab.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="ftp" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/ftp.tsk">
+      <task name="ftp" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.FTP"/>
+      <fileset dir="${build.classes}">
+        <include name="org/apache/tools/ant/taskdefs/optional/FTP.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="javacc" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/javacc.tsk">
+      <task name="javacc" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.javacc.JavaCC"/>
+      <task name="jjtree" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.javacc.JJTree"/>
+      <fileset dir="${build.classes}">
+        <include name="org/apache/tools/ant/taskdefs/optional/javacc/*.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="starteam" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/starteam.tsk">
+      <task name="starteam" version="1.0"
+            
classname="org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut"/>
+      <fileset dir="${build.classes}">
+        <include name="org/apache/tools/ant/taskdefs/optional/scm/*.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="wljspc" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/wljspc.tsk">
+      <task name="wljspc" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.jsp.WLJspc"/>
+      <fileset dir="${build.classes}">
+        <include name="org/apache/tools/ant/taskdefs/optional/jsp/*.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="jlink" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/jlink.tsk">
+      <task name="jlink" version="1.0"
+            
classname="org.apache.tools.ant.taskdefs.optional.jlink.JlinkTask"/>
+      <fileset dir="${build.classes}">
+        <include name="org/apache/tools/ant/taskdefs/optional/jlink/*.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="native2ascii" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/native2ascii.tsk">
+      <task name="native2ascii" version="1.0"
+            classname="org.apache.tools.ant.taskdefs.optional.Native2Ascii"/>
+      <fileset dir="${build.classes}">
+        <include 
name="org/apache/tools/ant/taskdefs/optional/Native2Ascii.class"/>
+      </fileset>
+    </tasklib>
+
+    <tasklib name="perforce" version="${version}" 
+             home="http://jakarta.apache.org/ant/optional.html";
+             jarfile="${ext.dir}/perforce.tsk">
+      <task name="perforce" version="1.0"
+            
classname="org.apache.tools.ant.taskdefs.optional.perforce.P4sync"/>
+      <fileset dir="${build.classes}">
+        <include 
name="org/apache/tools/ant/taskdefs/optional/perforce/*.class"/>
+      </fileset>
+    </tasklib>
+  </target>
+ 
 </project>
 
Index: src/main/org/apache/tools/ant/Main.java
===================================================================
RCS file: /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/Main.java,v
retrieving revision 1.21
diff -u -r1.21 Main.java
--- src/main/org/apache/tools/ant/Main.java     2000/09/24 09:00:07     1.21
+++ src/main/org/apache/tools/ant/Main.java     2000/10/14 18:21:17
@@ -119,6 +119,11 @@
     private boolean projectHelp = false;
 
     /**
+     * Indicates we should only load the available Tasks and list them
+     */
+    private boolean listTasks = false;
+
+    /**
      * Command line entry point. This method kicks off the building
      * of a project object and executes a build using either a given
      * target or the default target.
@@ -233,6 +243,9 @@
             } else if (arg.equals("-projecthelp")) {
                 // set the flag to display the targets and quit
                 projectHelp = true;
+            } else if (arg.equals("-tasks")) {
+                // set the flag to display the targets and quit
+                listTasks = true;
             } else if (arg.startsWith("-")) {
                 // we don't have any more args to recognize!
                 String msg = "Unknown arg: " + arg;
@@ -395,6 +408,8 @@
 
             if (projectHelp) {
                 printTargets(project);
+            } else if (listTasks) { 
+                printTasks(project);
             } else {
                 // actually do some work
                 project.executeTargets(targets);
@@ -473,6 +488,7 @@
         msg.append("Options: " + lSep);
         msg.append("  -help                  print this message" + lSep);
         msg.append("  -projecthelp           print project help information" + 
lSep);
+        msg.append("  -tasks                 print information about available 
tasks" + lSep);
         msg.append("  -version               print the version information and 
exit" + lSep);
         msg.append("  -quiet                 be extra quiet" + lSep);
         msg.append("  -verbose               be extra verbose" + lSep);
@@ -547,6 +563,62 @@
         printTargets(subNames, null, "Subtargets:", 0);
     }
 
+    /**
+     * Print out a list of all defined tasks
+     */
+    private static void printTasks(Project project) {
+        String lSep = System.getProperty("line.separator");
+        StringBuffer msg = new StringBuffer();
+        int maxLength = 0;
+        
+        Vector builtIn = new Vector();
+        Vector extension = new Vector();
+        Vector thruTaskdef = new Vector();
+        
+        Enumeration taskDefinitions = project.getTaskDefinitions().elements();
+        while (taskDefinitions.hasMoreElements()) { 
+            TaskDefinition taskDef = 
(TaskDefinition)taskDefinitions.nextElement();
+            if (taskDef.isBuiltIn()) { 
+                builtIn.addElement(taskDef);
+            } else if (taskDef.isExtension()) { 
+                extension.addElement(taskDef);
+            }
+            else {
+                thruTaskdef.addElement(taskDef);
+            }
+            
+            if (taskDef.getName().length() > maxLength) { 
+                maxLength = taskDef.getName().length();
+            }
+        }
+
+        printTasks(builtIn, "Built-In Tasks", maxLength);
+        printTasks(extension, "Extension Tasks", maxLength);
+        printTasks(thruTaskdef, "Tasks defined in the build-file", maxLength);
+    }
+    
+    private static void printTasks(Vector taskDefs, String heading, int 
maxLength) { 
+        String lSep = System.getProperty("line.separator");
+        String spaces = "    ";
+        while (spaces.length()<maxLength) {
+            spaces += spaces;
+        }
+        StringBuffer msg = new StringBuffer();
+        
+        msg.append(heading + lSep + lSep);
+        for (int i=0; i<taskDefs.size(); i++) {
+            msg.append(" ");
+            TaskDefinition taskDef = (TaskDefinition)taskDefs.elementAt(i);
+            msg.append(taskDef.getName());
+            if (taskDef.getDescription() != null) {
+                msg.append(spaces.substring(0, maxLength - 
((String)taskDef.getName()).length() + 2));
+                msg.append(taskDef.getDescription());
+            }
+            msg.append(lSep);
+        }
+        System.out.println(msg.toString());
+    }
+    
     /**
      * Search for the insert position to keep names a sorted list of Strings
      */
Index: src/main/org/apache/tools/ant/Project.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/Project.java,v
retrieving revision 1.44
diff -u -r1.44 Project.java
--- src/main/org/apache/tools/ant/Project.java  2000/10/10 16:27:22     1.44
+++ src/main/org/apache/tools/ant/Project.java  2000/10/14 18:21:21
@@ -156,9 +156,12 @@
             while (enum.hasMoreElements()) {
                 String key = (String) enum.nextElement();
                 String value = props.getProperty(key);
+                String desc = props.getProperty(key + ".desc");
                 try {
                     Class taskClass = Class.forName(value);
-                    addTaskDefinition(key, taskClass);
+                    TaskDefinition taskDef = new TaskDefinition(key, taskClass,
+                                             desc, 
TaskDefinition.TASK_BUILT_IN); 
+                    addTaskDefinition(key, taskDef);
                 } catch (NoClassDefFoundError ncdfe) {
                     // ignore...
                 } catch (ClassNotFoundException cnfe) {
@@ -197,6 +200,8 @@
             throw new BuildException("Can't load default datatype list");
         }
 
+        initExtTasks();
+
         Properties systemP = System.getProperties();
         Enumeration e = systemP.keys();
         while (e.hasMoreElements()) {
@@ -206,6 +211,23 @@
         }
     }
 
+    private void initExtTasks() throws BuildException 
+    {
+        String extDir = System.getProperty("ant.home");
+        if (extDir == null) 
+        {
+            System.out.println("ant.home is not defined, skipping 
extension-loading"); 
+            return;
+        }
+        extDir = extDir + File.separator + "ext";
+
+        File tskDir = new File(extDir);
+        if (!tskDir.exists()) return;
+        
+        AntExtensionHelper.initExtensionTasks(this, tskDir);
+        
+    }
+
     public void addBuildListener(BuildListener listener) {
         listeners.addElement(listener);
     }
@@ -349,12 +371,21 @@
         log("Detected OS: " + System.getProperty("os.name"), MSG_VERBOSE);
     }
 
-    public void addTaskDefinition(String taskName, Class taskClass) {
+/*
+    public void addTaskDefinition(String taskName, Class taskClass, String 
taskDesc) {
         String msg = " +User task: " + taskName + "     " + 
taskClass.getName();
         log(msg, MSG_DEBUG);
-        taskClassDefinitions.put(taskName, taskClass);
+        TaskDefinition taskDef = new TaskDefinition(taskName, taskClass, 
taskDesc);
+        taskClassDefinitions.put(taskName, taskDef);
     }
+*/
 
+    public void addTaskDefinition(String taskName, TaskDefinition taskDef) {
+        String msg = " +User task: " + taskName + "     " + 
taskDef.getTaskClass().getName();
+        log(msg, MSG_DEBUG);
+        taskClassDefinitions.put(taskName, taskDef);
+    }
+
     public Hashtable getTaskDefinitions() {
         return taskClassDefinitions;
     }
@@ -427,10 +458,12 @@
     }
 
     public Task createTask(String taskType) throws BuildException {
-        Class c = (Class) taskClassDefinitions.get(taskType);
-
-       if (c == null)
+        TaskDefinition taskDef = 
(TaskDefinition)taskClassDefinitions.get(taskType);
+        if (taskDef == null)
             return null;
+            
+        Class c = taskDef.getTaskClass();
+
         try {
             Object o = c.newInstance();
             Task task = null;
Index: src/main/org/apache/tools/ant/taskdefs/Ant.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Ant.java,v
retrieving revision 1.18
diff -u -r1.18 Ant.java
--- src/main/org/apache/tools/ant/taskdefs/Ant.java     2000/09/20 11:31:13     
1.18
+++ src/main/org/apache/tools/ant/taskdefs/Ant.java     2000/10/14 18:21:22
@@ -90,8 +90,8 @@
     public void init() {
         p1 = new Project();
         p1.setJavaVersionProperty();
-        p1.addTaskDefinition("property", 
-                             
(Class)project.getTaskDefinitions().get("property"));
+        TaskDefinition propertyTask = 
(TaskDefinition)project.getTaskDefinitions().get("property");
+        p1.addTaskDefinition("property", propertyTask);
     }
 
     private void reinit() {
@@ -137,8 +137,8 @@
         Enumeration et = taskdefs.keys();
         while (et.hasMoreElements()) {
             String taskName = (String) et.nextElement();
-            Class taskClass = (Class) taskdefs.get(taskName);
-            p1.addTaskDefinition(taskName, taskClass);
+            TaskDefinition taskDef = (TaskDefinition) taskdefs.get(taskName);
+            p1.addTaskDefinition(taskName, taskDef);
         }
 
         Hashtable typedefs = project.getDataTypeDefinitions();
Index: src/main/org/apache/tools/ant/taskdefs/AntStructure.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/AntStructure.java,v
retrieving revision 1.8
diff -u -r1.8 AntStructure.java
--- src/main/org/apache/tools/ant/taskdefs/AntStructure.java    2000/09/18 
14:04:56     1.8
+++ src/main/org/apache/tools/ant/taskdefs/AntStructure.java    2000/10/14 
18:21:24
@@ -58,6 +58,7 @@
 import org.apache.tools.ant.IntrospectionHelper;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
+import org.apache.tools.ant.TaskDefinition;
 import org.apache.tools.ant.types.EnumeratedAttribute;
 
 import java.util.Enumeration;
@@ -126,8 +127,8 @@
             
             for (int i=0; i<tasks.size(); i++) {
                 String taskName = (String) tasks.elementAt(i);
-                printElementDecl(out, taskName, 
-                                 (Class) 
project.getTaskDefinitions().get(taskName));
+                TaskDefinition taskDef =  
(TaskDefinition)project.getTaskDefinitions().get(taskName);
+                printElementDecl(out, taskName, taskDef.getTaskClass());
             }
 
             printTail(out);
Index: src/main/org/apache/tools/ant/taskdefs/CallTarget.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/CallTarget.java,v
retrieving revision 1.4
diff -u -r1.4 CallTarget.java
--- src/main/org/apache/tools/ant/taskdefs/CallTarget.java      2000/09/15 
07:37:11     1.4
+++ src/main/org/apache/tools/ant/taskdefs/CallTarget.java      2000/10/14 
18:21:25
@@ -81,6 +81,7 @@
 public class CallTarget extends Task {
 
     private Ant callee;
+    private String output = null;
     private String subTarget;
 
     public void init() {
@@ -100,6 +101,9 @@
         callee.setDir(project.getBaseDir());
         callee.setAntfile(project.getProperty("ant.file"));
         callee.setTarget(subTarget);
+        if (output != null) { 
+            callee.setOutput(output);
+        }
         callee.execute();
     }
 
@@ -110,4 +114,9 @@
     public void setTarget(String target) {
         subTarget = target;
     }
+    
+    public void setOutput(String s) {
+        this.output = s;
+    }
+    
 }
Index: src/main/org/apache/tools/ant/taskdefs/Taskdef.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Taskdef.java,v
retrieving revision 1.11
diff -u -r1.11 Taskdef.java
--- src/main/org/apache/tools/ant/taskdefs/Taskdef.java 2000/09/27 07:42:23     
1.11
+++ src/main/org/apache/tools/ant/taskdefs/Taskdef.java 2000/10/14 18:21:29
@@ -65,6 +65,7 @@
 public class Taskdef extends Task {
     private String name;
     private String value;
+    private String description;
     private Path classpath;
 
     public void setClasspath(Path classpath) {
@@ -112,7 +113,10 @@
                 } else {
                     taskClass = Class.forName(value);
                 }
-                project.addTaskDefinition(name, taskClass);
+                TaskDefinition taskDef = new TaskDefinition(name, taskClass,
+                                                            description,
+                                                            
TaskDefinition.TASK_TASKDEF);
+                project.addTaskDefinition(name, taskDef);
            } catch (ClassNotFoundException cnfe) {
                String msg = "taskdef class " + value +
                    " cannot be found";
@@ -134,5 +138,9 @@
 
     public void setClassname(String v) {
        value = v;
+    }
+
+    public void setDescription( String description) {
+       this.description = description;
     }
 }
Index: src/main/org/apache/tools/ant/taskdefs/defaults.properties
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties,v
retrieving revision 1.46
diff -u -r1.46 defaults.properties
--- src/main/org/apache/tools/ant/taskdefs/defaults.properties  2000/10/06 
10:54:09     1.46
+++ src/main/org/apache/tools/ant/taskdefs/defaults.properties  2000/10/14 
18:21:30
@@ -1,74 +1,108 @@
 # standard ant tasks
 mkdir=org.apache.tools.ant.taskdefs.Mkdir
+mkdir.desc=Creates directories
 javac=org.apache.tools.ant.taskdefs.Javac
+javac.desc=Compile Java-sources
 chmod=org.apache.tools.ant.taskdefs.Chmod
+chmod.desc=Changes file-attributes
 delete=org.apache.tools.ant.taskdefs.Delete
+delete.desc=Deletes Files or Directories
 copy=org.apache.tools.ant.taskdefs.Copy
+copy.desc=Copies Files or Directories
 move=org.apache.tools.ant.taskdefs.Move
+move.desc=Moves Files
 jar=org.apache.tools.ant.taskdefs.Jar
-rmic=org.apache.tools.ant.taskdefs.Rmic
+jar.desc=Create Jar-Files
+#rmic=org.apache.tools.ant.taskdefs.Rmic
 cvs=org.apache.tools.ant.taskdefs.Cvs
+cvs.desc=Executes CVS-commands
 get=org.apache.tools.ant.taskdefs.Get
+get.desc=Get Files from a URL
 unzip=org.apache.tools.ant.taskdefs.Expand
+unzip.desc=Unzips a Zip-Archive
 unjar=org.apache.tools.ant.taskdefs.Expand
-unwar=org.apache.tools.ant.taskdefs.Expand
+unjar.desc=Unjars a Jar-Archive
+#unwar=org.apache.tools.ant.taskdefs.Expand
 echo=org.apache.tools.ant.taskdefs.Echo
+echo.desc=Display a Message
 javadoc=org.apache.tools.ant.taskdefs.Javadoc
+javadoc.desc=Creates Javadoc
 zip=org.apache.tools.ant.taskdefs.Zip
+zip.desc=Creates a Zip-Archive
 gzip=org.apache.tools.ant.taskdefs.GZip
+gzip.desc=Creates a gzip-Archive
 gunzip=org.apache.tools.ant.taskdefs.GUnzip
+gunzip.desc=Expands a gzip-archive
 replace=org.apache.tools.ant.taskdefs.Replace
+replace.desc=Replaces Strings in Files
 java=org.apache.tools.ant.taskdefs.Java
+java.desc=Executes a Java-Class
 tstamp=org.apache.tools.ant.taskdefs.Tstamp
+tstamp.desc=Provides properties containing current timestamp
 property=org.apache.tools.ant.taskdefs.Property
+property.desc=Defines a property
 taskdef=org.apache.tools.ant.taskdefs.Taskdef
+taskdef.desc=Defines a new Task 
 ant=org.apache.tools.ant.taskdefs.Ant
+ant.desc=Executes ant on another build-file
 exec=org.apache.tools.ant.taskdefs.ExecTask
+exec.desc=Executes an OS-Command
 tar=org.apache.tools.ant.taskdefs.Tar
+tar.desc=Creates a tar-archive
 untar=org.apache.tools.ant.taskdefs.Untar
+untar.desc=Expands a tar-archive
 available=org.apache.tools.ant.taskdefs.Available
+available.desc=Tests if a Class, File or Resource is available
 filter=org.apache.tools.ant.taskdefs.Filter
+filter.desc=Defines a new Filter for token-replacement
 fixcrlf=org.apache.tools.ant.taskdefs.FixCRLF
-patch=org.apache.tools.ant.taskdefs.Patch
-style=org.apache.tools.ant.taskdefs.XSLTProcess
+fixcrlf.desc=Fixes CR/LF-differences between different platforms
+#patch=org.apache.tools.ant.taskdefs.Patch
+#style=org.apache.tools.ant.taskdefs.XSLTProcess
 touch=org.apache.tools.ant.taskdefs.Touch
-signjar=org.apache.tools.ant.taskdefs.SignJar
-genkey=org.apache.tools.ant.taskdefs.GenerateKey
-antstructure=org.apache.tools.ant.taskdefs.AntStructure
+touch.desc=Changes the date of a file (if running on JDK 1.3)
+#signjar=org.apache.tools.ant.taskdefs.SignJar
+#genkey=org.apache.tools.ant.taskdefs.GenerateKey
+#antstructure=org.apache.tools.ant.taskdefs.AntStructure
 execon=org.apache.tools.ant.taskdefs.ExecuteOn
+execon.desc=Executes a System-Command if running on a specified platform
 antcall=org.apache.tools.ant.taskdefs.CallTarget
-sql=org.apache.tools.ant.taskdefs.SQLExec
-mail=org.apache.tools.ant.taskdefs.SendEmail
+antcall.desc=Calls another target in the current build-file
+#sql=org.apache.tools.ant.taskdefs.SQLExec
+#mail=org.apache.tools.ant.taskdefs.SendEmail
 fail=org.apache.tools.ant.taskdefs.Exit
-war=org.apache.tools.ant.taskdefs.War
+fail.desc=Fails the build and optionally prints a message
+#war=org.apache.tools.ant.taskdefs.War
 uptodate=org.apache.tools.ant.taskdefs.UpToDate
+uptodate.desc=Tests if a file is up-to-date
+tasklib=org.apache.tools.ant.taskdefs.TaskLib
+tasklib.desc=Creates an Ant-Extension
 
 # optional tasks
-script=org.apache.tools.ant.taskdefs.optional.Script
-netrexxc=org.apache.tools.ant.taskdefs.optional.NetRexxC
-renameext=org.apache.tools.ant.taskdefs.optional.RenameExtensions
-ejbc=org.apache.tools.ant.taskdefs.optional.ejb.Ejbc
-ddcreator=org.apache.tools.ant.taskdefs.optional.ejb.DDCreator
-wlrun=org.apache.tools.ant.taskdefs.optional.ejb.WLRun
-wlstop=org.apache.tools.ant.taskdefs.optional.ejb.WLStop
-vssget=org.apache.tools.ant.taskdefs.optional.vss.MSVSSGET
-ejbjar=org.apache.tools.ant.taskdefs.optional.ejb.EjbJar
-mparse=org.apache.tools.ant.taskdefs.optional.metamata.MParse
-junit=org.apache.tools.ant.taskdefs.optional.junit.JUnitTask
-cab=org.apache.tools.ant.taskdefs.optional.Cab
-ftp=org.apache.tools.ant.taskdefs.optional.FTP
-javacc=org.apache.tools.ant.taskdefs.optional.javacc.JavaCC
-jjtree=org.apache.tools.ant.taskdefs.optional.javacc.JJTree
-starteam=org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut
-wljspc=org.apache.tools.ant.taskdefs.optional.jsp.WLJspc
-jlink=org.apache.tools.ant.taskdefs.optional.jlink.JlinkTask
-native2ascii=org.apache.tools.ant.taskdefs.optional.Native2Ascii
-perforce=org.apache.tools.ant.taskdefs.optional.perforce.P4sync
+#script=org.apache.tools.ant.taskdefs.optional.Script
+#netrexxc=org.apache.tools.ant.taskdefs.optional.NetRexxC
+#renameext=org.apache.tools.ant.taskdefs.optional.RenameExtensions
+#ejbc=org.apache.tools.ant.taskdefs.optional.ejb.Ejbc
+#ddcreator=org.apache.tools.ant.taskdefs.optional.ejb.DDCreator
+#wlrun=org.apache.tools.ant.taskdefs.optional.ejb.WLRun
+#wlstop=org.apache.tools.ant.taskdefs.optional.ejb.WLStop
+#ejbjar=org.apache.tools.ant.taskdefs.optional.ejb.EjbJar
+#mparse=org.apache.tools.ant.taskdefs.optional.metamata.MParse
+#junit=org.apache.tools.ant.taskdefs.optional.junit.JUnitTask
+#cab=org.apache.tools.ant.taskdefs.optional.Cab
+#ftp=org.apache.tools.ant.taskdefs.optional.FTP
+#javacc=org.apache.tools.ant.taskdefs.optional.javacc.JavaCC
+#jjtree=org.apache.tools.ant.taskdefs.optional.javacc.JJTree
+#starteam=org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut
+#wljspc=org.apache.tools.ant.taskdefs.optional.jsp.WLJspc
+#jlink=org.apache.tools.ant.taskdefs.optional.jlink.JlinkTask
+#native2ascii=org.apache.tools.ant.taskdefs.optional.Native2Ascii
+#perforce=org.apache.tools.ant.taskdefs.optional.perforce.P4sync
 
 # deprecated ant tasks (kept for back compatibility)
-javadoc2=org.apache.tools.ant.taskdefs.Javadoc
-compileTask=org.apache.tools.ant.taskdefs.CompileTask
-copydir=org.apache.tools.ant.taskdefs.Copydir
-copyfile=org.apache.tools.ant.taskdefs.Copyfile
-deltree=org.apache.tools.ant.taskdefs.Deltree
-rename=org.apache.tools.ant.taskdefs.Rename
+#javadoc2=org.apache.tools.ant.taskdefs.Javadoc
+#compileTask=org.apache.tools.ant.taskdefs.CompileTask
+#copydir=org.apache.tools.ant.taskdefs.Copydir
+#copyfile=org.apache.tools.ant.taskdefs.Copyfile
+#deltree=org.apache.tools.ant.taskdefs.Deltree
+#rename=org.apache.tools.ant.taskdefs.Rename

Attachment: AntExtensionHelper.java
Description: Binary data

Attachment: TaskDefinition.java
Description: Binary data

Attachment: TaskLib.java
Description: Binary data

Reply via email to