aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/manual/Tasks/macrodef.html
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/manual/Tasks/macrodef.html')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/manual/Tasks/macrodef.html385
1 files changed, 385 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/manual/Tasks/macrodef.html b/framework/src/ant/apache-ant-1.9.6/manual/Tasks/macrodef.html
new file mode 100644
index 00000000..60b30720
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/manual/Tasks/macrodef.html
@@ -0,0 +1,385 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<html>
+
+ <head>
+ <meta http-equiv="Content-Language" content="en-us"></meta>
+ <link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
+ <title>MacroDef Task</title>
+ </head>
+
+ <body>
+
+ <h2><a name="macrodef">MacroDef</a></h2>
+ <h3>Description</h3>
+ <p>
+ This defines a new task using a <code>&lt;sequential&gt;</code>
+ nested task as a template. Nested elements <code>&lt;attribute&gt;</code> and
+ <code>&lt;element&gt;</code> are used to specify attributes and elements of
+ the new task. These get substituted into the <code>&lt;sequential&gt;</code>
+ task when the new task is run.
+ </p>
+ <h3>Note</h3>
+ <p>
+ You can also use <i>prior defined</i> attributes for default-values in
+ other attributes. See the examples.
+ </p>
+ <p>
+ <em>since Apache Ant 1.6</em>
+ </p>
+ <h3>Parameters</h3>
+ <table border="1" cellpadding="2" cellspacing="0">
+ <tr>
+ <td valign="top"><b>Attribute</b></td>
+ <td valign="top"><b>Description</b></td>
+ <td align="center" valign="top"><b>Required</b></td>
+ </tr>
+ <tr>
+ <td valign="top">name</td>
+ <td valign="top">The name of the new definition.</td>
+ <td valign="top" align="center">Yes</td>
+ </tr>
+ <tr>
+ <td valign="top">uri</td>
+ <td valign="top">
+ The uri that this definition should live in.
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">description</td>
+ <td valign="top">A description of the macrodef
+ (for documentation purposes only).
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">backtrace</td>
+ <td valign="top">
+ This controls the error traceback if there is an
+ error detected when running the macro. If this is
+ set to true, there will be an error trackback, if false
+ there will not be one. <em>Since Ant 1.7</em>.
+ </td>
+ <td valign="top" align="center">No; default <em>true</em></td>
+ </tr>
+ </table>
+ <h3>Parameters specified as nested elements</h3>
+ <h4>attribute</h4>
+ <p>
+ This is used to specify attributes of the new task. The values
+ of the attributes get substituted into the templated task.
+ The attributes will be required attributes unless a default
+ value has been set.
+ </p>
+ <p>
+ This attribute is placed in the body of the templated
+ task using a notation similar to the ant property notation
+ - @{attribute name}. (May be remembered as "put the substitution
+ AT this location").
+ </p>
+ <p>
+ The escape sequence @@ is used to escape @. This allows @{x} to be
+ placed in the text without substitution of x by using @@{x}.
+ This corresponds to the $$ escape sequence for properties.
+ </p>
+ <p>
+ The case of the attribute is ignored, so @{myAttribute} is treated the
+ same as @{MyAttribute}.
+ </p>
+ <h3>Parameters</h3>
+ <table border="1" cellpadding="2" cellspacing="0">
+ <tr>
+ <td valign="top"><b>Attribute</b></td>
+ <td valign="top"><b>Description</b></td>
+ <td align="center" valign="top"><b>Required</b></td>
+ </tr>
+ <tr>
+ <td valign="top">name</td>
+ <td valign="top">The name of the new attribute</td>
+ <td valign="top" align="center">Yes</td>
+ </tr>
+ <tr>
+ <td valign="top">default</td>
+ <td valign="top">
+ The default value of the attribute.
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">description</td>
+ <td valign="top">
+ This contains a description of the attribute.
+ <em>since ant 1.6.1</em>
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">doubleexpanding</td>
+ <td valign="top">
+ Controls whether or not property references in the attribute are expanded twice or just once.
+ See the <a href="http://ant.apache.org/faq.html#macrodef-property-expansion">FAQ</a> for details.
+ <em>since Ant 1.8.3</em>
+ </td>
+ <td valign="top" align="center">No; default true</td>
+ </tr>
+ </table>
+ <h4>element</h4>
+ <p>
+ This is used to specify nested elements of the new task.
+ The contents of the nested elements of the task instance
+ are placed in the templated task at the tag name.
+ </p>
+ <p>
+ The case of the element name is ignored.
+ </p>
+ <h3>Parameters</h3>
+ <table border="1" cellpadding="2" cellspacing="0">
+ <tr>
+ <td valign="top"><b>Attribute</b></td>
+ <td valign="top"><b>Description</b></td>
+ <td align="center" valign="top"><b>Required</b></td>
+ </tr>
+ <tr>
+ <td valign="top">name</td>
+ <td valign="top">The name of the element</td>
+ <td valign="top" align="center">Yes</td>
+ </tr>
+ <tr>
+ <td valign="top">optional</td>
+ <td valign="top">
+ If true this nested element is optional. Default is
+ false - i.e the nested element is required in
+ the new task.
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">implicit</td>
+ <td valign="top">
+ If true this nested element is implicit. This means that
+ any nested elements of the macrodef instance will be placed
+ in the element indicated by the name of this element.
+ There can only be one element if an element is implicit.
+ The default value is false. <em>since ant 1.6.2</em>
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">description</td>
+ <td valign="top">
+ This contains a description
+ informing the user what the contents of the element are expected to be.
+ <em>since ant 1.6.1</em>
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ </table>
+ <h4>text</h4>
+ <p>
+ This is used to specify the treatment of text contents of the macro invocation.
+ If this element is not present, then any nested text in the macro invocation
+ will be an error. If the text element is present, then the name
+ becomes an attribute that gets set to the nested text of the macro invocation.
+ <em>Since ant 1.6.1.</em>
+ </p>
+ <p>
+ The case of the text name is ignored.
+ </p>
+ <h3>Parameters</h3>
+ <table border="1" cellpadding="2" cellspacing="0">
+ <tr>
+ <td valign="top"><b>Attribute</b></td>
+ <td valign="top"><b>Description</b></td>
+ <td align="center" valign="top"><b>Required</b></td>
+ </tr>
+ <tr>
+ <td valign="top">name</td>
+ <td valign="top">The name of the text attribute</td>
+ <td valign="top" align="center">Yes</td>
+ </tr>
+ <tr>
+ <td valign="top">optional</td>
+ <td valign="top">
+ If true nested text in the macro is optional, default is "false".
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">trim</td>
+ <td valign="top">
+ If true, the nested text is trimmed of white space,
+ default is "false".
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">description</td>
+ <td valign="top">
+ This contains a description
+ informing the user what the nested text of the macro is expected
+ to be.
+ </td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ </table>
+
+ <h3>Examples</h3>
+ <p>
+ The following example defined a task called testing and
+ runs it.
+ </p>
+ <blockquote>
+<pre class=code>
+&lt;macrodef name="testing"&gt;
+ &lt;attribute name="v" default="NOT SET"/&gt;
+ &lt;element name="some-tasks" optional="yes"/&gt;
+ &lt;sequential&gt;
+ &lt;echo&gt;v is @{v}&lt;/echo&gt;
+ &lt;some-tasks/&gt;
+ &lt;/sequential&gt;
+&lt;/macrodef&gt;
+
+&lt;testing v="This is v"&gt;
+ &lt;some-tasks&gt;
+ &lt;echo&gt;this is a test&lt;/echo&gt;
+ &lt;/some-tasks&gt;
+&lt;/testing&gt;
+</pre>
+ </blockquote>
+ <p>
+ The following fragment defines a task called <code>&lt;call-cc&gt;</code> which
+ take the attributes "target", "link" and "target.dir" and the
+ nested element "cc-elements". The body of the task
+ uses the <code>&lt;cc&gt;</code> task from the
+ <a href="http://ant-contrib.sourceforge.net/">ant-contrib</a> project.
+ </p>
+ <blockquote>
+<pre class="code">
+&lt;macrodef name="call-cc"&gt;
+ &lt;attribute name="target"/&gt;
+ &lt;attribute name="link"/&gt;
+ &lt;attribute name="target.dir"/&gt;
+ &lt;element name="cc-elements"/&gt;
+ &lt;sequential&gt;
+ &lt;mkdir dir="${obj.dir}/@{target}"/&gt;
+ &lt;mkdir dir="@{target.dir}"/&gt;
+ &lt;cc link="@{link}" objdir="${obj.dir}/@{target}"
+ outfile="@{target.dir}/@{target}"&gt;
+ &lt;compiler refid="compiler.options"/&gt;
+ &lt;cc-elements/&gt;
+ &lt;/cc&gt;
+ &lt;/sequential&gt;
+&lt;/macrodef&gt;
+</pre>
+ </blockquote>
+ <p>
+ This then can be used as follows:
+ </p>
+ <blockquote>
+<pre class="code">
+&lt;call-cc target="unittests" link="executable"
+ target.dir="${build.bin.dir}"&gt;
+ &lt;cc-elements&gt;
+ &lt;includepath location="${gen.dir}"/&gt;
+ &lt;includepath location="test"/&gt;
+ &lt;fileset dir="test/unittest" includes = "**/*.cpp"/&gt;
+ &lt;fileset dir="${gen.dir}" includes = "*.cpp"/&gt;
+ &lt;linker refid="linker-libs"/&gt;
+ &lt;/cc-elements&gt;
+&lt;/call-cc&gt;
+</pre>
+ </blockquote>
+ <p>
+ The following fragment shows &lt;call-cc&gt;, but this time
+ using an implicit element and with the link and target.dir arguments
+ having default values.
+ </p>
+ <blockquote>
+<pre class="code">
+&lt;macrodef name="call-cc"&gt;
+ &lt;attribute name="target"/&gt;
+ &lt;attribute name="link" default="executable"/&gt;
+ &lt;attribute name="target.dir" default="${build.bin.dir}"/&gt;
+ &lt;element name="cc-elements" implicit="yes"/&gt;
+ &lt;sequential&gt;
+ &lt;mkdir dir="${obj.dir}/@{target}"/&gt;
+ &lt;mkdir dir="@{target.dir}"/&gt;
+ &lt;cc link="@{link}" objdir="${obj.dir}/@{target}"
+ outfile="@{target.dir}/@{target}"&gt;
+ &lt;compiler refid="compiler.options"/&gt;
+ &lt;cc-elements/&gt;
+ &lt;/cc&gt;
+ &lt;/sequential&gt;
+&lt;/macrodef&gt;
+</pre>
+ </blockquote>
+ <p>
+ This then can be used as follows, note that &lt;cc-elements&gt;
+ is not specified.
+ </p>
+ <blockquote>
+<pre class="code">
+&lt;call-cc target="unittests"&gt;
+ &lt;includepath location="${gen.dir}"/&gt;
+ &lt;includepath location="test"/&gt;
+ &lt;fileset dir="test/unittest" includes = "**/*.cpp"/&gt;
+ &lt;fileset dir="${gen.dir}" includes = "*.cpp"/&gt;
+ &lt;linker refid="linker-libs"/&gt;
+&lt;/call-cc&gt;
+</pre>
+ </blockquote>
+ <p>
+ The following shows the use of the <code>text</code> element.
+ </p>
+ <blockquote>
+<pre class="code">
+&lt;macrodef name="echotest"&gt;
+ &lt;text name="text"/&gt;
+ &lt;sequential&gt;
+ &lt;echo&gt;@{text}&lt;/echo&gt;
+ &lt;/sequential&gt;
+&lt;/macrodef&gt;
+&lt;echotest&gt;
+ Hello world
+&lt;/echotest&gt;
+</pre>
+ </blockquote>
+ <p>
+ The following uses a prior defined attribute for setting the
+ default value of another. The output would be
+ <tt>one=test two=test</tt>. If you change the order of lines
+ *1 and *2 the output would be <tt>one=test two=@{one}</tt>,
+ because while processing the <i>two</i>-line the value for
+ <i>one</i> is not set.
+ </p>
+ <blockquote>
+<pre class="code">
+&lt;macrodef name="test"&gt;
+ &lt;attribute name="one"/&gt; <b>*1</b>
+ &lt;attribute name="two" default="@{one}"/&gt; <b>*2</b>
+ &lt;sequential&gt;
+ &lt;echo&gt;one=@{one} two=@{two}&lt;/echo&gt;
+ &lt;/sequential&gt;
+&lt;/macrodef&gt;
+&lt;test one="test"/&gt;
+</pre>
+ </blockquote>
+
+
+</body>
+</html>