diff options
| -rw-r--r-- | bitbake/doc/user-manual/user-manual-metadata.xml | 144 |
1 files changed, 85 insertions, 59 deletions
diff --git a/bitbake/doc/user-manual/user-manual-metadata.xml b/bitbake/doc/user-manual/user-manual-metadata.xml index 7c294008c0..c2342a2236 100644 --- a/bitbake/doc/user-manual/user-manual-metadata.xml +++ b/bitbake/doc/user-manual/user-manual-metadata.xml | |||
| @@ -677,73 +677,81 @@ | |||
| 677 | <section id='functions'> | 677 | <section id='functions'> |
| 678 | <title>Functions</title> | 678 | <title>Functions</title> |
| 679 | 679 | ||
| 680 | <note> | ||
| 681 | This is only supported in <filename>.bb</filename> | ||
| 682 | and <filename>.bbclass</filename> files. | ||
| 683 | </note> | ||
| 684 | |||
| 685 | <para> | 680 | <para> |
| 686 | As with most languages, functions are the building blocks | 681 | As with most languages, functions are the building blocks |
| 687 | that define operations. | 682 | that define operations. |
| 688 | Bitbake supports shell and Python functions. | 683 | BitBake supports three types of functions: |
| 689 | An example shell function definition is: | 684 | <itemizedlist> |
| 690 | <literallayout class='monospaced'> | 685 | <listitem><para><emphasis>Shell Functions:</emphasis> |
| 686 | Functions written in a shell language and | ||
| 687 | executed by the shell. | ||
| 688 | </para></listitem> | ||
| 689 | <listitem><para><emphasis>BitBake Functions:</emphasis> | ||
| 690 | Functions written in Python but executed by BitBake using | ||
| 691 | <filename>bb.build.exec_func()</filename>. | ||
| 692 | </para></listitem> | ||
| 693 | <listitem><para><emphasis>Python Functions:</emphasis> | ||
| 694 | Functions written in Python and executed by Python. | ||
| 695 | </para></listitem> | ||
| 696 | </itemizedlist> | ||
| 697 | Regardless of the type of function, you can only | ||
| 698 | define them in class (<filename>.bbclass</filename>) | ||
| 699 | and recipe (<filename>.bb</filename>) files. | ||
| 700 | </para> | ||
| 701 | |||
| 702 | <section id='shell-functions'> | ||
| 703 | <title>Shell Functions</title> | ||
| 704 | |||
| 705 | <para> | ||
| 706 | These functions are written using a shell language and | ||
| 707 | executed by the shell. | ||
| 708 | Here is an example shell function definition: | ||
| 709 | <literallayout class='monospaced'> | ||
| 691 | some_function () { | 710 | some_function () { |
| 692 | echo "Hello World" | 711 | echo "Hello World" |
| 693 | } | 712 | } |
| 694 | </literallayout> | 713 | </literallayout> |
| 695 | An example Python function definition is: | 714 | When you create these types of functions in your recipe |
| 696 | <literallayout class='monospaced'> | 715 | or class files, you need to follow the shell programming |
| 716 | rules. | ||
| 717 | </para> | ||
| 718 | </section> | ||
| 719 | |||
| 720 | <section id='bitbake-functions'> | ||
| 721 | <title>BitBake Functions</title> | ||
| 722 | |||
| 723 | <para> | ||
| 724 | These functions are written in Python and are executed using | ||
| 725 | <filename>bb.build.exec_func()</filename>. | ||
| 726 | </para> | ||
| 727 | |||
| 728 | <para> | ||
| 729 | An example BitBake function is: | ||
| 730 | <literallayout class='monospaced'> | ||
| 697 | python some_python_function () { | 731 | python some_python_function () { |
| 698 | d.setVar("TEXT", "Hello World") | 732 | d.setVar("TEXT", "Hello World") |
| 699 | print d.getVar("TEXT", True) | 733 | print d.getVar("TEXT", True) |
| 700 | } | 734 | } |
| 701 | </literallayout> | 735 | </literallayout> |
| 702 | In python functions, the "bb" and "os" modules are already | 736 | Because the Python "bb" and "os" modules are already |
| 703 | imported, there is no need to import those modules. | 737 | imported, you do not need to import these modules. |
| 704 | The datastore, "d" is also a global variable and always | 738 | Also in these types of functions, the datastore ("d") |
| 705 | available to these functions automatically. | 739 | is a global variable and is always automatically |
| 706 | </para> | 740 | available. |
| 707 | 741 | </para> | |
| 708 | <para> | 742 | </section> |
| 709 | Bitbake will execute functions of this form using | ||
| 710 | the <filename>bb.build.exec_func()</filename>, which can also be | ||
| 711 | called from Python functions to execute other functions, | ||
| 712 | either shell or Python based. | ||
| 713 | Shell functions can only execute other shell functions. | ||
| 714 | </para> | ||
| 715 | |||
| 716 | <para> | ||
| 717 | There is also a second way to declare python functions with | ||
| 718 | parameters which takes the form: | ||
| 719 | <literallayout class='monospaced'> | ||
| 720 | def some_python_function(arg1, arg2): | ||
| 721 | print arg1 + " " + arg2 | ||
| 722 | </literallayout> | ||
| 723 | The difference is that the second form takes parameters, | ||
| 724 | the datastore is not available automatically | ||
| 725 | and must be passed as a parameter and these functions are | ||
| 726 | not called with the <filename>exec_func()</filename> but are | ||
| 727 | executed with direct Python function calls. | ||
| 728 | The "bb" and "os" modules are still automatically available | ||
| 729 | and there is no need to import them. | ||
| 730 | </para> | ||
| 731 | </section> | ||
| 732 | |||
| 733 | <section id='defining-pure-python-functions'> | ||
| 734 | <title>Defining Pure Python functions</title> | ||
| 735 | 743 | ||
| 736 | <note> | 744 | <section id='python-functions'> |
| 737 | This is only supported in <filename>.bb</filename> | 745 | <title>Python Functions</title> |
| 738 | and <filename>.bbclass</filename> files. | ||
| 739 | </note> | ||
| 740 | 746 | ||
| 741 | <para> | 747 | <para> |
| 742 | For utility functions that you intend to call from | 748 | These functions are written in Python but are executed by |
| 743 | in-line Python or other Python functions, BitBake allows | 749 | Python. |
| 744 | you to define these as pure Python functions. | 750 | Examples of Python functions are utility functions |
| 745 | Here is an example: | 751 | that you intend to call from in-line Python or |
| 746 | <literallayout class='monospaced'> | 752 | from within other Python functions. |
| 753 | Here is an example: | ||
| 754 | <literallayout class='monospaced'> | ||
| 747 | def get_depends(d): | 755 | def get_depends(d): |
| 748 | if d.getVar('SOMECONDITION', True): | 756 | if d.getVar('SOMECONDITION', True): |
| 749 | return "dependencywithcond" | 757 | return "dependencywithcond" |
| @@ -751,10 +759,28 @@ | |||
| 751 | return "dependency" | 759 | return "dependency" |
| 752 | SOMECONDITION = "1" | 760 | SOMECONDITION = "1" |
| 753 | DEPENDS = "${@get_depends(d)}" | 761 | DEPENDS = "${@get_depends(d)}" |
| 754 | </literallayout> | 762 | </literallayout> |
| 755 | This would result in <filename>DEPENDS</filename> | 763 | This would result in <filename>DEPENDS</filename> |
| 756 | containing <filename>dependencywithcond</filename>. | 764 | containing <filename>dependencywithcond</filename>. |
| 757 | </para> | 765 | </para> |
| 766 | |||
| 767 | <para> | ||
| 768 | Here are some things to know about Python functions: | ||
| 769 | <itemizedlist> | ||
| 770 | <listitem><para>Python functions take parameters. | ||
| 771 | </para></listitem> | ||
| 772 | <listitem><para>The BitBake datastore is not | ||
| 773 | automatically available. | ||
| 774 | Consequently, you must pass it in as a | ||
| 775 | parameter to the function. | ||
| 776 | </para></listitem> | ||
| 777 | <listitem><para>The "bb" and "os" Python modules are | ||
| 778 | automatically available. | ||
| 779 | You do not need to import them. | ||
| 780 | </para></listitem> | ||
| 781 | </itemizedlist> | ||
| 782 | </para> | ||
| 783 | </section> | ||
| 758 | </section> | 784 | </section> |
| 759 | 785 | ||
| 760 | <section id='tasks'> | 786 | <section id='tasks'> |
