diff options
| -rw-r--r-- | bitbake/doc/user-manual/user-manual-metadata.xml | 61 |
1 files changed, 49 insertions, 12 deletions
diff --git a/bitbake/doc/user-manual/user-manual-metadata.xml b/bitbake/doc/user-manual/user-manual-metadata.xml index 23b3fa67d3..55b59ebcc1 100644 --- a/bitbake/doc/user-manual/user-manual-metadata.xml +++ b/bitbake/doc/user-manual/user-manual-metadata.xml | |||
| @@ -409,22 +409,59 @@ | |||
| 409 | </note> | 409 | </note> |
| 410 | </section> | 410 | </section> |
| 411 | 411 | ||
| 412 | <section> | 412 | <section id='functions'> |
| 413 | <title>Defining executable metadata</title> | 413 | <title>Functions</title> |
| 414 | <para><emphasis>NOTE:</emphasis> This is only supported in .bb and .bbclass files. | 414 | |
| 415 | <note> | ||
| 416 | This is only supported in <filename>.bb</filename> | ||
| 417 | and <filename>.bbclass</filename> files. | ||
| 418 | </note> | ||
| 419 | |||
| 420 | <para> | ||
| 421 | As with most languages, functions are the building blocks | ||
| 422 | that define operations. | ||
| 423 | Bitbake supports shell and Python functions. | ||
| 424 | An example shell function definition is: | ||
| 425 | <literallayout class='monospaced'> | ||
| 426 | some_function () { | ||
| 427 | echo "Hello World" | ||
| 428 | } | ||
| 429 | </literallayout> | ||
| 430 | An example Python function definition is: | ||
| 415 | <literallayout class='monospaced'> | 431 | <literallayout class='monospaced'> |
| 416 | do_mytask () { | 432 | python some_python_function () { |
| 417 | echo "Hello, world!" | 433 | d.setVar("TEXT", "Hello World") |
| 418 | } | 434 | print d.getVar("TEXT", True) |
| 435 | } | ||
| 419 | </literallayout> | 436 | </literallayout> |
| 420 | This is essentially identical to setting a variable, except that this variable happens to be executable shell code. | 437 | In python functions, the "bb" and "os" modules are already |
| 438 | imported, there is no need to import those modules. | ||
| 439 | The datastore, "d" is also a global variable and always | ||
| 440 | available to these functions automatically. | ||
| 441 | </para> | ||
| 442 | |||
| 443 | <para> | ||
| 444 | Bitbake will execute functions of this form using | ||
| 445 | the <filename>bb.build.exec_func()</filename>, which can also be | ||
| 446 | called from Python functions to execute other functions, | ||
| 447 | either shell or Python based. | ||
| 448 | Shell functions can only execute other shell functions. | ||
| 449 | </para> | ||
| 450 | |||
| 451 | <para> | ||
| 452 | There is also a second way to declare python functions with | ||
| 453 | parameters which takes the form: | ||
| 421 | <literallayout class='monospaced'> | 454 | <literallayout class='monospaced'> |
| 422 | python do_printdate () { | 455 | def some_python_function(arg1, arg2): |
| 423 | import time | 456 | print arg1 + " " + arg2 |
| 424 | print time.strftime('%Y%m%d', time.gmtime()) | ||
| 425 | } | ||
| 426 | </literallayout> | 457 | </literallayout> |
| 427 | This is the similar to the previous, but flags it as Python so that BitBake knows it is Python code. | 458 | The difference is that the second form takes parameters, |
| 459 | the datastore is not available automatically | ||
| 460 | and must be passed as a parameter and these functions are | ||
| 461 | not called with the <filename>exec_func()</filename> but are | ||
| 462 | executed with direct Python function calls. | ||
| 463 | The "bb" and "os" modules are still automatically available | ||
| 464 | and there is no need to import them. | ||
| 428 | </para> | 465 | </para> |
| 429 | </section> | 466 | </section> |
| 430 | 467 | ||
