summaryrefslogtreecommitdiffstats
path: root/bitbake/doc/user-manual/user-manual-metadata.xml
diff options
context:
space:
mode:
authorScott Rifenbark <scott.m.rifenbark@intel.com>2014-02-05 16:29:54 -0600
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-03-09 18:59:01 -0700
commitfaaca84d6e6d17d4a00ceec915672f3bd2f518b1 (patch)
tree48aff6e31e8c39e44ccab26a8508e2e8028adc2f /bitbake/doc/user-manual/user-manual-metadata.xml
parentd022ec3ff5aff4cbee6b8aec677a1c03ca79705c (diff)
downloadpoky-faaca84d6e6d17d4a00ceec915672f3bd2f518b1.tar.gz
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>
Diffstat (limited to 'bitbake/doc/user-manual/user-manual-metadata.xml')
-rw-r--r--bitbake/doc/user-manual/user-manual-metadata.xml144
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'>