mirror of
https://git.yoctoproject.org/poky
synced 2026-04-04 23:02:22 +02:00
bitbake: user-manual-metadata.xml: Added new section on mapping functions.
Fixes [YOCTO #5472] Fixes [YOCTO #1973] Created a new section called "Automatically Mapping Functions Within the Context of a Class". This section addresses the EXPORT_FUNCTIONS "operator", which was the last of the adjustments to the variables bug against the BB manual (1973). The related bug (5472) is a general bug against enhancing the BB manual, which this change caps off. The section here was reviewed and approved by Richard Purdie. (Bitbake rev: cec33d4fdc05db3a41e978f3a1ab977730c443eb) Signed-off-by: Scott Rifenbark <scott.m.rifenbark@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
3e528d3e4b
commit
a5775abb19
@@ -792,6 +792,82 @@
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id='automatically-mapping-functions-within-the-context-of-a-class'>
|
||||
<title>Automatically Mapping Functions Within the Context of a Class</title>
|
||||
|
||||
<para>
|
||||
Through coding techniques and the use of
|
||||
<filename>EXPORT_FUNCTIONS</filename>, BitBake supports
|
||||
automatic mapping for functions within the context of
|
||||
a class.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
To understand the benefits of this feature, consider the basic scenario
|
||||
where a class defines a function and your recipe inherits the class.
|
||||
In this basic scenario, your recipe has access to the function in the
|
||||
class by way of inheritance and can freely call and use the function
|
||||
as defined in the class.
|
||||
However, if you need to have a modified version of that function
|
||||
in your recipe you are limited to using either your modified version
|
||||
of the function or using "prepend_" or "_append" operators to add
|
||||
code to be executed before or after the original function in the
|
||||
class.
|
||||
Your recipe cannot use both versions of the fucntion.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Function mapping allows you to access both your custom function
|
||||
function that is defined in the recipe and the original function that
|
||||
is defined in the class.
|
||||
You have this access all from within your recipe.
|
||||
To accomplish this, you need some things in place:
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
The class needs to define the function as follows:
|
||||
<literallayout class='monospaced'>
|
||||
<classname>_<functionname>
|
||||
</literallayout>
|
||||
For example, if you have a class file
|
||||
<filename>bar.bbclass</filename> and a function named
|
||||
<filename>do_foo</filename>, the class must define the function
|
||||
as follows:
|
||||
<literallayout class='monospaced'>
|
||||
bar_do_foo
|
||||
</literallayout>
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
The class needs to contain the <filename>EXPORT_FUNCTIONS</filename>
|
||||
statement as follows:
|
||||
<literallayout class='monospaced'>
|
||||
EXPORT_FUNCTIONS <functionname>
|
||||
</literallayout>
|
||||
For example, continuing with the same example, the
|
||||
statement in the <filename>bar.bbclass</filename> would be
|
||||
as follows:
|
||||
<literallayout class='monospaced'>
|
||||
EXPORT_FUNCTIONS do_foo
|
||||
</literallayout>
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
You need to call the function appropriately from within your
|
||||
recipe.
|
||||
Continuing with the same example,
|
||||
your recipe would call the <filename>do_foo</filename> function
|
||||
from the recipe by referring to it as
|
||||
<filename>bar_do_foo</filename>.
|
||||
To call your modified version of the function as defined in your
|
||||
recipe, call it as <filename>do_foo</filename>.
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
With these conditions met, your single recipe
|
||||
can freely choose between the original function
|
||||
as defined in the class file and the modified function in your recipe.
|
||||
If you do not set up these conditions, you are limited to using one function
|
||||
or the other.
|
||||
</para>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<section id='tasks'>
|
||||
|
||||
Reference in New Issue
Block a user