1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-08 05:09:24 +00:00

bitbake: user-manual-metadata.xml: Rewrite of the "Functions" section.

Re-organized this around the 3 types of functions that we seem
to be show-casing here.  The original organization was not very
good.

(Bitbake rev: 77ef63e5c4a9ea633a1be0f9f90366e0ecf555fa)

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-02-05 16:29:54 -06:00
committed by Richard Purdie
parent d022ec3ff5
commit faaca84d6e
@@ -677,73 +677,81 @@
<section id='functions'>
<title>Functions</title>
<note>
This is only supported in <filename>.bb</filename>
and <filename>.bbclass</filename> files.
</note>
<para>
As with most languages, functions are the building blocks
that define operations.
Bitbake supports shell and Python functions.
An example shell function definition is:
<literallayout class='monospaced'>
BitBake supports three types of functions:
<itemizedlist>
<listitem><para><emphasis>Shell Functions:</emphasis>
Functions written in a shell language and
executed by the shell.
</para></listitem>
<listitem><para><emphasis>BitBake Functions:</emphasis>
Functions written in Python but executed by BitBake using
<filename>bb.build.exec_func()</filename>.
</para></listitem>
<listitem><para><emphasis>Python Functions:</emphasis>
Functions written in Python and executed by Python.
</para></listitem>
</itemizedlist>
Regardless of the type of function, you can only
define them in class (<filename>.bbclass</filename>)
and recipe (<filename>.bb</filename>) files.
</para>
<section id='shell-functions'>
<title>Shell Functions</title>
<para>
These functions are written using a shell language and
executed by the shell.
Here is an example shell function definition:
<literallayout class='monospaced'>
some_function () {
echo "Hello World"
}
</literallayout>
An example Python function definition is:
<literallayout class='monospaced'>
</literallayout>
When you create these types of functions in your recipe
or class files, you need to follow the shell programming
rules.
</para>
</section>
<section id='bitbake-functions'>
<title>BitBake Functions</title>
<para>
These functions are written in Python and are executed using
<filename>bb.build.exec_func()</filename>.
</para>
<para>
An example BitBake function is:
<literallayout class='monospaced'>
python some_python_function () {
d.setVar("TEXT", "Hello World")
print d.getVar("TEXT", True)
}
</literallayout>
In python functions, the "bb" and "os" modules are already
imported, there is no need to import those modules.
The datastore, "d" is also a global variable and always
available to these functions automatically.
</para>
</literallayout>
Because the Python "bb" and "os" modules are already
imported, you do not need to import these modules.
Also in these types of functions, the datastore ("d")
is a global variable and is always automatically
available.
</para>
</section>
<para>
Bitbake will execute functions of this form using
the <filename>bb.build.exec_func()</filename>, which can also be
called from Python functions to execute other functions,
either shell or Python based.
Shell functions can only execute other shell functions.
</para>
<section id='python-functions'>
<title>Python Functions</title>
<para>
There is also a second way to declare python functions with
parameters which takes the form:
<literallayout class='monospaced'>
def some_python_function(arg1, arg2):
print arg1 + " " + arg2
</literallayout>
The difference is that the second form takes parameters,
the datastore is not available automatically
and must be passed as a parameter and these functions are
not called with the <filename>exec_func()</filename> but are
executed with direct Python function calls.
The "bb" and "os" modules are still automatically available
and there is no need to import them.
</para>
</section>
<section id='defining-pure-python-functions'>
<title>Defining Pure Python functions</title>
<note>
This is only supported in <filename>.bb</filename>
and <filename>.bbclass</filename> files.
</note>
<para>
For utility functions that you intend to call from
in-line Python or other Python functions, BitBake allows
you to define these as pure Python functions.
Here is an example:
<literallayout class='monospaced'>
<para>
These functions are written in Python but are executed by
Python.
Examples of Python functions are utility functions
that you intend to call from in-line Python or
from within other Python functions.
Here is an example:
<literallayout class='monospaced'>
def get_depends(d):
if d.getVar('SOMECONDITION', True):
return "dependencywithcond"
@@ -751,10 +759,28 @@
return "dependency"
SOMECONDITION = "1"
DEPENDS = "${@get_depends(d)}"
</literallayout>
This would result in <filename>DEPENDS</filename>
containing <filename>dependencywithcond</filename>.
</para>
</literallayout>
This would result in <filename>DEPENDS</filename>
containing <filename>dependencywithcond</filename>.
</para>
<para>
Here are some things to know about Python functions:
<itemizedlist>
<listitem><para>Python functions take parameters.
</para></listitem>
<listitem><para>The BitBake datastore is not
automatically available.
Consequently, you must pass it in as a
parameter to the function.
</para></listitem>
<listitem><para>The "bb" and "os" Python modules are
automatically available.
You do not need to import them.
</para></listitem>
</itemizedlist>
</para>
</section>
</section>
<section id='tasks'>