summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml63
1 files changed, 37 insertions, 26 deletions
diff --git a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml
index 41ae3b8c0a..365c4b8f97 100644
--- a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml
+++ b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml
@@ -793,36 +793,35 @@
793 </para> 793 </para>
794 </section> 794 </section>
795 795
796 <section id='automatically-mapping-functions-within-the-context-of-a-class'> 796 <section id='flexible-inheritance-for-class-functions'>
797 <title>Automatically Mapping Functions Within the Context of a Class</title> 797 <title>Flexible Inheritance for Class Functions</title>
798 798
799 <para> 799 <para>
800 Through coding techniques and the use of 800 Through coding techniques and the use of
801 <filename>EXPORT_FUNCTIONS</filename>, BitBake supports 801 <filename>EXPORT_FUNCTIONS</filename>, BitBake supports
802 automatic mapping for functions within the context of 802 exporting a function from a class such that the
803 a class. 803 class function appears as the default implementation
804 of the function, but can still be called if a recipe
805 inheriting the class needs to define its own version of
806 the function.
804 </para> 807 </para>
805 808
806 <para> 809 <para>
807 To understand the benefits of this feature, consider the basic scenario 810 To understand the benefits of this feature, consider
808 where a class defines a function and your recipe inherits the class. 811 the basic scenario where a class defines a task function
809 In this basic scenario, your recipe has access to the function in the 812 and your recipe inherits the class.
810 class by way of inheritance and can freely call and use the function 813 In this basic scenario, your recipe inherits the task
811 as defined in the class. 814 function as defined in the class.
812 However, if you need to have a modified version of that function 815 If desired, your recipe can add to the start and end of the
813 in your recipe you are limited to using either your modified version 816 function by using the "_prepend" or "_append" operations
814 of the function or using "prepend_" or "_append" operators to add 817 respectively, or it can redefine the function completely.
815 code to be executed before or after the original function in the 818 However, if it redefines the function, there is
816 class. 819 no means for it to call the class version of the function.
817 Your recipe cannot use both versions of the fucntion.
818 </para> 820 </para>
819 821
820 <para> 822 <para>
821 Function mapping allows you to access both your custom function 823 To make use of this technique, you need the following
822 function that is defined in the recipe and the original function that 824 things in place:
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> 825 <itemizedlist>
827 <listitem><para> 826 <listitem><para>
828 The class needs to define the function as follows: 827 The class needs to define the function as follows:
@@ -853,12 +852,24 @@
853 <listitem><para> 852 <listitem><para>
854 You need to call the function appropriately from within your 853 You need to call the function appropriately from within your
855 recipe. 854 recipe.
856 Continuing with the same example, 855 Continuing with the same example, if your recipe
857 your recipe would call the <filename>do_foo</filename> function 856 needs to call the class version of the function,
858 from the recipe by referring to it as 857 it should call <filename>bar_do_foo</filename>.
859 <filename>bar_do_foo</filename>. 858 Assuming <filename>do_foo</filename> was a shell function
860 To call your modified version of the function as defined in your 859 and <filename>EXPORT_FUNCTIONS</filename> was used as above,
861 recipe, call it as <filename>do_foo</filename>. 860 the recipe's function could conditionally call the
861 class version of the function as follows:
862 <literallayout class='monospaced'>
863 do_foo() {
864 if [ somecondition ] ; then
865 bar_do_foo
866 else
867 # Do something else
868 fi
869 }
870 </literallayout>
871 To call your modified version of the function as defined
872 in your recipe, call it as <filename>do_foo</filename>.
862 </para></listitem> 873 </para></listitem>
863 </itemizedlist> 874 </itemizedlist>
864 With these conditions met, your single recipe 875 With these conditions met, your single recipe