diff options
| author | Scott Rifenbark <scott.m.rifenbark@intel.com> | 2014-04-02 12:26:02 +0000 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-04-02 14:15:35 +0100 |
| commit | a5775abb1951ec6cdc7afacd1ae87189e398cff8 (patch) | |
| tree | 1af23405da8d61e3ecb23105708460f87ad3c076 | |
| parent | 3e528d3e4bc542ca2f654c54363c56af0fb9f61b (diff) | |
| download | poky-a5775abb1951ec6cdc7afacd1ae87189e398cff8.tar.gz | |
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>
| -rw-r--r-- | bitbake/doc/user-manual/user-manual-metadata.xml | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/bitbake/doc/user-manual/user-manual-metadata.xml b/bitbake/doc/user-manual/user-manual-metadata.xml index 3864c008d2..a57fe0c814 100644 --- a/bitbake/doc/user-manual/user-manual-metadata.xml +++ b/bitbake/doc/user-manual/user-manual-metadata.xml | |||
| @@ -792,6 +792,82 @@ | |||
| 792 | </itemizedlist> | 792 | </itemizedlist> |
| 793 | </para> | 793 | </para> |
| 794 | </section> | 794 | </section> |
| 795 | |||
| 796 | <section id='automatically-mapping-functions-within-the-context-of-a-class'> | ||
| 797 | <title>Automatically Mapping Functions Within the Context of a Class</title> | ||
| 798 | |||
| 799 | <para> | ||
| 800 | Through coding techniques and the use of | ||
| 801 | <filename>EXPORT_FUNCTIONS</filename>, BitBake supports | ||
| 802 | automatic mapping for functions within the context of | ||
| 803 | a class. | ||
| 804 | </para> | ||
| 805 | |||
| 806 | <para> | ||
| 807 | To understand the benefits of this feature, consider the basic scenario | ||
| 808 | where a class defines a function and your recipe inherits the class. | ||
| 809 | In this basic scenario, your recipe has access to the function in the | ||
| 810 | class by way of inheritance and can freely call and use the function | ||
| 811 | as defined in the class. | ||
| 812 | However, if you need to have a modified version of that function | ||
| 813 | in your recipe you are limited to using either your modified version | ||
| 814 | of the function or using "prepend_" or "_append" operators to add | ||
| 815 | code to be executed before or after the original function in the | ||
| 816 | class. | ||
| 817 | Your recipe cannot use both versions of the fucntion. | ||
| 818 | </para> | ||
| 819 | |||
| 820 | <para> | ||
| 821 | Function mapping allows you to access both your custom function | ||
| 822 | function that is defined in the recipe and the original function that | ||
| 823 | is defined in the class. | ||
| 824 | You have this access all from within your recipe. | ||
| 825 | To accomplish this, you need some things in place: | ||
| 826 | <itemizedlist> | ||
| 827 | <listitem><para> | ||
| 828 | The class needs to define the function as follows: | ||
| 829 | <literallayout class='monospaced'> | ||
| 830 | <classname>_<functionname> | ||
| 831 | </literallayout> | ||
| 832 | For example, if you have a class file | ||
| 833 | <filename>bar.bbclass</filename> and a function named | ||
| 834 | <filename>do_foo</filename>, the class must define the function | ||
| 835 | as follows: | ||
| 836 | <literallayout class='monospaced'> | ||
| 837 | bar_do_foo | ||
| 838 | </literallayout> | ||
| 839 | </para></listitem> | ||
| 840 | <listitem><para> | ||
| 841 | The class needs to contain the <filename>EXPORT_FUNCTIONS</filename> | ||
| 842 | statement as follows: | ||
| 843 | <literallayout class='monospaced'> | ||
| 844 | EXPORT_FUNCTIONS <functionname> | ||
| 845 | </literallayout> | ||
| 846 | For example, continuing with the same example, the | ||
| 847 | statement in the <filename>bar.bbclass</filename> would be | ||
| 848 | as follows: | ||
| 849 | <literallayout class='monospaced'> | ||
| 850 | EXPORT_FUNCTIONS do_foo | ||
| 851 | </literallayout> | ||
| 852 | </para></listitem> | ||
| 853 | <listitem><para> | ||
| 854 | You need to call the function appropriately from within your | ||
| 855 | recipe. | ||
| 856 | Continuing with the same example, | ||
| 857 | your recipe would call the <filename>do_foo</filename> function | ||
| 858 | from the recipe by referring to it as | ||
| 859 | <filename>bar_do_foo</filename>. | ||
| 860 | To call your modified version of the function as defined in your | ||
| 861 | recipe, call it as <filename>do_foo</filename>. | ||
| 862 | </para></listitem> | ||
| 863 | </itemizedlist> | ||
| 864 | With these conditions met, your single recipe | ||
| 865 | can freely choose between the original function | ||
| 866 | as defined in the class file and the modified function in your recipe. | ||
| 867 | If you do not set up these conditions, you are limited to using one function | ||
| 868 | or the other. | ||
| 869 | </para> | ||
| 870 | </section> | ||
| 795 | </section> | 871 | </section> |
| 796 | 872 | ||
| 797 | <section id='tasks'> | 873 | <section id='tasks'> |
