|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- <!--
- 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">
- <link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
- <title>MacroDef Task</title>
- </head>
-
- <body>
-
- <h2 id="macrodef">MacroDef</h2>
- <p><em>Since Apache Ant 1.6</em></p>
- <h3>Description</h3>
- <p>This defines a new task using a <code><sequential></code> nested task as a
- template. Nested elements <code><attribute></code> and <code><element></code> are
- used to specify attributes and elements of the new task. These get substituted into
- the <code><sequential></code> task when the new task is run.</p>
- <h3>Note</h3>
- <p>You can also use <em>prior defined</em> attributes for <var>default</var> values in other
- attributes. See the examples.</p>
- <h3>Parameters</h3>
- <table class="attr">
- <tr>
- <th>Attribute</th>
- <th>Description</th>
- <th>Required</th>
- </tr>
- <tr>
- <td>name</td>
- <td>The name of the new definition.</td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>uri</td>
- <td>
- The uri that this definition should live in.
- </td>
- <td>No</td>
- </tr>
- <tr>
- <td>description</td>
- <td>A description of the macrodef
- (for documentation purposes only).
- </td>
- <td>No</td>
- </tr>
- <tr>
- <td>backtrace</td>
- <td>This controls the error traceback if there is an error detected when running the
- macro. If this is set to <q>true</q>, there will be an error trackback, if <q>false</q>
- there will be none. <em>Since Ant 1.7</em>.</td>
- <td>No; default <q>true</q></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—<code>@{attribute name}</code>. (May be remembered as "put the
- substitution AT this location").</p>
- <p>The escape sequence <code>@@</code> is used to escape <code>@</code>. This
- allows <code>@{x}</code> to be placed in the text without substitution of <code>x</code> by
- using <code>@@{x}</code>. This corresponds to the <code>$$</code> escape sequence for
- properties.</p>
- <p>The case of the attribute is ignored, so <code>@{myAttribute}</code> is treated the same
- as <code>@{MyAttribute}</code>.</p>
- <h5>Parameters</h5>
- <table class="attr">
- <tr>
- <th>Attribute</th>
- <th>Description</th>
- <th>Required</th>
- </tr>
- <tr>
- <td>name</td>
- <td>The name of the new attribute</td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>default</td>
- <td>The default value of the attribute.</td>
- <td>No</td>
- </tr>
- <tr>
- <td>description</td>
- <td>This contains a description of the attribute. <em>Since Ant 1.6.1</em></td>
- <td>No</td>
- </tr>
- <tr>
- <td>doubleexpanding</td>
- <td>Controls whether or not property references in the attribute are expanded twice or just
- once. See the <a href="https://ant.apache.org/faq.html#macrodef-property-expansion"
- target="_top">FAQ</a> for details. <em>Since Ant 1.8.3</em></td>
- <td>No; default is <q>true</q></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 <code>element</code> name is ignored.</p>
- <h5>Parameters</h5>
- <table class="attr">
- <tr>
- <th>Attribute</th>
- <th>Description</th>
- <th>Required</th>
- </tr>
- <tr>
- <td>name</td>
- <td>The name of the element.</td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>optional</td>
- <td>If <q>true</q> this nested element is optional.</td>
- <td>No; default is <q>false</q>—the nested element is required in the new task</td>
- </tr>
- <tr>
- <td>implicit</td>
- <td>If <q>true</q> this nested element is implicit. This means that any nested elements of
- the <code>macrodef</code> 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. <em>Since Ant
- 1.6.2</em></td>
- <td>No; default is <q>false</q></td>
- </tr>
- <tr>
- <td>description</td>
- <td>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>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 <code>text</code> 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 <code>text</code> name is ignored.</p>
- <h5>Parameters</h5>
- <table class="attr">
- <tr>
- <th>Attribute</th>
- <th>Description</th>
- <th>Required</th>
- </tr>
- <tr>
- <td>name</td>
- <td>The name of the text attribute.</td>
- <td>Yes</td>
- </tr>
- <tr>
- <td>optional</td>
- <td>If <q>true</q> nested text in the macro is optional.</td>
- <td>No; default is <q>false</q></td>
- </tr>
- <tr>
- <td>trim</td>
- <td>If <q>true</q>, the nested text is trimmed of white space.</td>
- <td>No; default is <q>false</q></td>
- </tr>
- <tr>
- <td>description</td>
- <td>This contains a description informing the user what the nested text of the macro is
- expected to be.</td>
- <td>No</td>
- </tr>
- </table>
-
- <h3>Examples</h3>
- <p>The following example defined a task called testing and runs it.</p>
- <pre>
- <macrodef name="testing">
- <attribute name="v" default="NOT SET"/>
- <element name="some-tasks" optional="yes"/>
- <sequential>
- <echo>v is @{v}</echo>
- <some-tasks/>
- </sequential>
- </macrodef>
-
- <testing v="This is v">
- <some-tasks>
- <echo>this is a test</echo>
- </some-tasks>
- </testing></pre>
- <p>The following fragment defines a task called <code><call-cc></code> which take the
- attributes <var>target</var>, <var>link</var> and <var>target.dir</var> and the nested
- element <code>cc-elements</code>. The body of the task uses the <code><cc></code> task
- from the <a href="http://ant-contrib.sourceforge.net/" target="_top">ant-contrib</a>
- project.</p>
- <pre>
- <macrodef name="call-cc">
- <attribute name="target"/>
- <attribute name="link"/>
- <attribute name="target.dir"/>
- <element name="cc-elements"/>
- <sequential>
- <mkdir dir="${obj.dir}/@{target}"/>
- <mkdir dir="@{target.dir}"/>
- <cc link="@{link}" objdir="${obj.dir}/@{target}"
- outfile="@{target.dir}/@{target}">
- <compiler refid="compiler.options"/>
- <cc-elements/>
- </cc>
- </sequential>
- </macrodef></pre>
- <p>This then can be used as follows:</p>
- <pre>
- <call-cc target="unittests" link="executable"
- target.dir="${build.bin.dir}">
- <cc-elements>
- <includepath location="${gen.dir}"/>
- <includepath location="test"/>
- <fileset dir="test/unittest" includes = "**/*.cpp"/>
- <fileset dir="${gen.dir}" includes = "*.cpp"/>
- <linker refid="linker-libs"/>
- </cc-elements>
- </call-cc></pre>
- <p>The following fragment shows <code><call-cc></code>, but this time using an implicit
- element and with the <var>link</var> and <var>target.dir</var> arguments having default
- values.</p>
- <pre>
- <macrodef name="call-cc">
- <attribute name="target"/>
- <attribute name="link" default="executable"/>
- <attribute name="target.dir" default="${build.bin.dir}"/>
- <element name="cc-elements" implicit="yes"/>
- <sequential>
- <mkdir dir="${obj.dir}/@{target}"/>
- <mkdir dir="@{target.dir}"/>
- <cc link="@{link}" objdir="${obj.dir}/@{target}"
- outfile="@{target.dir}/@{target}">
- <compiler refid="compiler.options"/>
- <cc-elements/>
- </cc>
- </sequential>
- </macrodef></pre>
- <p>This then can be used as follows, note that <code><cc-elements></code> is not
- specified.</p>
- <pre>
- <call-cc target="unittests">
- <includepath location="${gen.dir}"/>
- <includepath location="test"/>
- <fileset dir="test/unittest" includes = "**/*.cpp"/>
- <fileset dir="${gen.dir}" includes = "*.cpp"/>
- <linker refid="linker-libs"/>
- </call-cc>
- </pre>
- <p>The following shows the use of the <code>text</code> element.</p>
- <pre>
- <macrodef name="echotest">
- <text name="text"/>
- <sequential>
- <echo>@{text}</echo>
- </sequential>
- </macrodef>
- <echotest>
- Hello world
- </echotest>
- </pre>
- <p>The following uses a prior defined attribute for setting the default value of another. The
- output would be <code class="output">one=test two=test</code>. If you change the order of
- lines *1 and *2 the output would be <code class="output">one=test two=@{one}</code>, because
- while processing the <var>two</var>-line the value for <var>one</var> is not set.</p>
- <pre>
- <macrodef name="test">
- <attribute name="one"/> <strong>*1</strong>
- <attribute name="two" default="@{one}"/> <strong>*2</strong>
- <sequential>
- <echo>one=@{one} two=@{two}</echo>
- </sequential>
- </macrodef>
- <test one="test"/></pre>
-
- </body>
- </html>
|