bitbake: bitbake-user-manual-metadata.xml: New section on anonymous Python functions

Per Paul Eggleton's suggestion, I added a new section on
anonymous Python functions into the "Functions" section.
I also updated the intro text to account for the added
type of functions.

(Bitbake rev: 983d03c1a082e2b83187f0788e61a7941670b242)

Signed-off-by: Scott Rifenbark <scott.m.rifenbark@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Scott Rifenbark 2014-04-14 09:34:39 -07:00 committed by Richard Purdie
parent 9889a91a5b
commit ea4e822b8d
1 changed files with 41 additions and 1 deletions

View File

@ -683,7 +683,7 @@
<para>
As with most languages, functions are the building blocks that
are used to build up operations into tasks.
BitBake supports three types of functions:
BitBake supports these types of functions:
<itemizedlist>
<listitem><para><emphasis>Shell Functions:</emphasis>
Functions written in shell script and executed either
@ -697,6 +697,10 @@
<listitem><para><emphasis>Python Functions:</emphasis>
Functions written in Python and executed by Python.
</para></listitem>
<listitem><para><emphasis>Anonymous Python Functions:</emphasis>
Python functions executed automatically during
parsing.
</para></listitem>
</itemizedlist>
Regardless of the type of function, you can only
define them in class (<filename>.bbclass</filename>)
@ -793,6 +797,39 @@
</para>
</section>
<section id='anonymous-python-functions'>
<title>Anonymous Python Functions</title>
<para>
Sometimes it is useful to run some code during
parsing to set variables or to perform other operations
programmatically.
To do this, you can define an anonymous Python function.
Here is an example that conditionally sets a
variable based on the value of another variable:
<literallayout class='monospaced'>
python __anonymous () {
if d.getVar('SOMEVAR', True) == 'value':
d.setVar('ANOTHERVAR', 'value2')
}
</literallayout>
The "__anonymous" function name is optional, so the
following example is functionally equivalent to the above:
<literallayout class='monospaced'>
python () {
if d.getVar('SOMEVAR', True) == 'value':
d.setVar('ANOTHERVAR', 'value2')
}
</literallayout>
Because unlike other Python functions anonymous
Python functions are executed during parsing, the
"d" variable within an anonymous Python function represents
the datastore for the entire recipe.
Consequently, you can set variable values here and
those values can be picked up by other functions.
</para>
</section>
<section id='flexible-inheritance-for-class-functions'>
<title>Flexible Inheritance for Class Functions</title>
@ -817,6 +854,9 @@
respectively, or it can redefine the function completely.
However, if it redefines the function, there is
no means for it to call the class version of the function.
<filename>EXPORT_FUNCTIONS</filename> provides a mechanism
that enables the recipe's version of the function to call
the original version of the function.
</para>
<para>