diff options
author | Scott Rifenbark <scott.m.rifenbark@intel.com> | 2013-12-21 08:49:03 -0600 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-01-02 13:16:12 +0000 |
commit | 71460e5fc274467d5d59f4f45ccb298590f699e8 (patch) | |
tree | ed105cefba3c8791b506cdf062d6662e4cc2a02f /documentation/dev-manual | |
parent | 3ad993da1038c327c60da781315b748380228a7c (diff) | |
download | poky-71460e5fc274467d5d59f4f45ccb298590f699e8.tar.gz |
dev-manual: Integrated Hello World section into new writing recipe section
This change merged in the Hello World section as a summarizing
example section to the new "Writing a New Recipe" section.
(From yocto-docs rev: 79c858e1590e5ab4c56b19dc51b03e0e570b6209)
Signed-off-by: Scott Rifenbark <scott.m.rifenbark@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation/dev-manual')
-rw-r--r-- | documentation/dev-manual/dev-manual-common-tasks.xml | 465 |
1 files changed, 240 insertions, 225 deletions
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index 717a453061..053df0f838 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml | |||
@@ -1146,6 +1146,12 @@ | |||
1146 | requires a recipe to define the component. | 1146 | requires a recipe to define the component. |
1147 | This section describes how to create, write, and test a new | 1147 | This section describes how to create, write, and test a new |
1148 | recipe. | 1148 | recipe. |
1149 | <note> | ||
1150 | For information on variables that are useful for recipes and | ||
1151 | for information about recipe naming issues, see the | ||
1152 | "<ulink url='&YOCTO_DOCS_REF_URL;#ref-varlocality-recipe-required'>Required</ulink>" | ||
1153 | section of the Yocto Project Reference Manual. | ||
1154 | </note> | ||
1149 | </para> | 1155 | </para> |
1150 | 1156 | ||
1151 | <section id='new-recipe-overview'> | 1157 | <section id='new-recipe-overview'> |
@@ -1163,6 +1169,16 @@ | |||
1163 | <title>Locate a Base Recipe</title> | 1169 | <title>Locate a Base Recipe</title> |
1164 | 1170 | ||
1165 | <para> | 1171 | <para> |
1172 | Before writing a recipe from scratch, it is often useful to | ||
1173 | check whether someone else has written one already. | ||
1174 | OpenEmbedded is a good place to look as it has a wider scope | ||
1175 | and range of packages. | ||
1176 | Because the Yocto Project aims to be compatible with | ||
1177 | OpenEmbedded, most recipes you find there should work for | ||
1178 | you. | ||
1179 | </para> | ||
1180 | |||
1181 | <para> | ||
1166 | Working from an existing recipe or a skeleton recipe is the | 1182 | Working from an existing recipe or a skeleton recipe is the |
1167 | best way to get started. | 1183 | best way to get started. |
1168 | Here are some points on both methods: | 1184 | Here are some points on both methods: |
@@ -1204,6 +1220,42 @@ | |||
1204 | </para></listitem> | 1220 | </para></listitem> |
1205 | </itemizedlist> | 1221 | </itemizedlist> |
1206 | </para> | 1222 | </para> |
1223 | |||
1224 | <note> | ||
1225 | <para>When writing shell functions, you need to be aware of BitBake's | ||
1226 | curly brace parsing. | ||
1227 | If a recipe uses a closing curly brace within the function and | ||
1228 | the character has no leading spaces, BitBake produces a parsing | ||
1229 | error. | ||
1230 | If you use a pair of curly brace in a shell function, the | ||
1231 | closing curly brace must not be located at the start of the line | ||
1232 | without leading spaces.</para> | ||
1233 | <para>Here is an example that causes BitBake to produce a parsing | ||
1234 | error: | ||
1235 | <literallayout class='monospaced'> | ||
1236 | fakeroot create_shar() { | ||
1237 | cat << "EOF" > ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
1238 | usage() | ||
1239 | { | ||
1240 | echo "test" | ||
1241 | ###### The following "}" at the start of the line causes a parsing error ###### | ||
1242 | } | ||
1243 | EOF | ||
1244 | } | ||
1245 | </literallayout> | ||
1246 | Writing the recipe this way avoids the error: | ||
1247 | <literallayout class='monospaced'> | ||
1248 | fakeroot create_shar() { | ||
1249 | cat << "EOF" > ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
1250 | usage() | ||
1251 | { | ||
1252 | echo "test" | ||
1253 | ######The following "}" with a leading space at the start of the line avoids the error ###### | ||
1254 | } | ||
1255 | EOF | ||
1256 | } | ||
1257 | </literallayout></para> | ||
1258 | </note> | ||
1207 | </section> | 1259 | </section> |
1208 | 1260 | ||
1209 | <section id='new-recipe-naming-the-recipe'> | 1261 | <section id='new-recipe-naming-the-recipe'> |
@@ -2036,89 +2088,32 @@ do_unpack unpacks the source, and S must be set | |||
2036 | section. | 2088 | section. |
2037 | </para> | 2089 | </para> |
2038 | </section> | 2090 | </section> |
2039 | </section> | ||
2040 | 2091 | ||
2041 | <section id='usingpoky-extend-addpkg'> | 2092 | <section id='new-recipe-testing-hello-world-example'> |
2042 | <title>Writing a Recipe to Add a Package to Your Image</title> | 2093 | <title>Hello World Example</title> |
2043 | |||
2044 | <para> | ||
2045 | Recipes let you define packages you can add to your image. | ||
2046 | Writing a recipe means creating a <filename>.bb</filename> file that sets some | ||
2047 | variables. | ||
2048 | For information on variables that are useful for recipes and for information about recipe naming | ||
2049 | issues, see the | ||
2050 | "<ulink url='&YOCTO_DOCS_REF_URL;#ref-varlocality-recipe-required'>Required</ulink>" | ||
2051 | section of the Yocto Project Reference Manual. | ||
2052 | </para> | ||
2053 | |||
2054 | <para> | ||
2055 | Before writing a recipe from scratch, it is often useful to check | ||
2056 | whether someone else has written one already. | ||
2057 | OpenEmbedded is a good place to look as it has a wider scope and range of packages. | ||
2058 | Because the Yocto Project aims to be compatible with OpenEmbedded, most recipes | ||
2059 | you find there should work for you. | ||
2060 | </para> | ||
2061 | 2094 | ||
2062 | <para> | 2095 | <para> |
2063 | For new packages, the simplest way to add a recipe is to base it on a similar | 2096 | To help summarize how to write a recipe, this section provides |
2064 | pre-existing recipe. | 2097 | an example recipe that builds a single "Hello World!" package. |
2065 | The sections that follow provide some examples that show how to add standard | 2098 | </para> |
2066 | types of packages. | ||
2067 | </para> | ||
2068 | |||
2069 | <note> | ||
2070 | <para>When writing shell functions, you need to be aware of BitBake's | ||
2071 | curly brace parsing. | ||
2072 | If a recipe uses a closing curly brace within the function and | ||
2073 | the character has no leading spaces, BitBake produces a parsing | ||
2074 | error. | ||
2075 | If you use a pair of curly brace in a shell function, the | ||
2076 | closing curly brace must not be located at the start of the line | ||
2077 | without leading spaces.</para> | ||
2078 | <para>Here is an example that causes BitBake to produce a parsing | ||
2079 | error: | ||
2080 | <literallayout class='monospaced'> | ||
2081 | fakeroot create_shar() { | ||
2082 | cat << "EOF" > ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
2083 | usage() | ||
2084 | { | ||
2085 | echo "test" | ||
2086 | ###### The following "}" at the start of the line causes a parsing error ###### | ||
2087 | } | ||
2088 | EOF | ||
2089 | } | ||
2090 | </literallayout> | ||
2091 | Writing the recipe this way avoids the error: | ||
2092 | <literallayout class='monospaced'> | ||
2093 | fakeroot create_shar() { | ||
2094 | cat << "EOF" > ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh | ||
2095 | usage() | ||
2096 | { | ||
2097 | echo "test" | ||
2098 | ######The following "}" with a leading space at the start of the line avoids the error ###### | ||
2099 | } | ||
2100 | EOF | ||
2101 | } | ||
2102 | </literallayout></para> | ||
2103 | </note> | ||
2104 | 2099 | ||
2105 | <section id='usingpoky-extend-addpkg-singlec'> | 2100 | <section id='usingpoky-extend-addpkg-singlec'> |
2106 | <title>Single .c File Package (Hello World!)</title> | 2101 | <title>Single .c File Package (Hello World!)</title> |
2107 | 2102 | ||
2108 | <para> | 2103 | <para> |
2109 | Building an application from a single file that is stored locally (e.g. under | 2104 | Building an application from a single file that is stored locally (e.g. under |
2110 | <filename>files/</filename>) requires a recipe that has the file listed in | 2105 | <filename>files/</filename>) requires a recipe that has the file listed in |
2111 | the | 2106 | the |
2112 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename> | 2107 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename> |
2113 | variable. | 2108 | variable. |
2114 | Additionally, you need to manually write the <filename>do_compile</filename> and | 2109 | Additionally, you need to manually write the <filename>do_compile</filename> and |
2115 | <filename>do_install</filename> tasks. | 2110 | <filename>do_install</filename> tasks. |
2116 | The <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'>S</ulink></filename> | 2111 | The <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-S'>S</ulink></filename> |
2117 | variable defines the | 2112 | variable defines the |
2118 | directory containing the source code, which is set to | 2113 | directory containing the source code, which is set to |
2119 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'> | 2114 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'> |
2120 | WORKDIR</ulink></filename> in this case - the directory BitBake uses for the build. | 2115 | WORKDIR</ulink></filename> in this case - the directory BitBake uses for the build. |
2121 | <literallayout class='monospaced'> | 2116 | <literallayout class='monospaced'> |
2122 | DESCRIPTION = "Simple helloworld application" | 2117 | DESCRIPTION = "Simple helloworld application" |
2123 | SECTION = "examples" | 2118 | SECTION = "examples" |
2124 | LICENSE = "MIT" | 2119 | LICENSE = "MIT" |
@@ -2137,32 +2132,32 @@ do_unpack unpacks the source, and S must be set | |||
2137 | install -d ${D}${bindir} | 2132 | install -d ${D}${bindir} |
2138 | install -m 0755 helloworld ${D}${bindir} | 2133 | install -m 0755 helloworld ${D}${bindir} |
2139 | } | 2134 | } |
2140 | </literallayout> | 2135 | </literallayout> |
2141 | </para> | 2136 | </para> |
2142 | 2137 | ||
2143 | <para> | 2138 | <para> |
2144 | By default, the <filename>helloworld</filename>, <filename>helloworld-dbg</filename>, | 2139 | By default, the <filename>helloworld</filename>, <filename>helloworld-dbg</filename>, |
2145 | and <filename>helloworld-dev</filename> packages are built. | 2140 | and <filename>helloworld-dev</filename> packages are built. |
2146 | For information on how to customize the packaging process, see the | 2141 | For information on how to customize the packaging process, see the |
2147 | "<link linkend='splitting-an-application-into-multiple-packages'>Splitting an Application | 2142 | "<link linkend='splitting-an-application-into-multiple-packages'>Splitting an Application |
2148 | into Multiple Packages</link>" section. | 2143 | into Multiple Packages</link>" section. |
2149 | </para> | 2144 | </para> |
2150 | </section> | 2145 | </section> |
2151 | 2146 | ||
2152 | <section id='usingpoky-extend-addpkg-autotools'> | 2147 | <section id='usingpoky-extend-addpkg-autotools'> |
2153 | <title>Autotooled Package</title> | 2148 | <title>Autotooled Package</title> |
2154 | <para> | 2149 | <para> |
2155 | Applications that use Autotools such as <filename>autoconf</filename> and | 2150 | Applications that use Autotools such as <filename>autoconf</filename> and |
2156 | <filename>automake</filename> require a recipe that has a source archive listed in | 2151 | <filename>automake</filename> require a recipe that has a source archive listed in |
2157 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename> and | 2152 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename> and |
2158 | also inherits Autotools, which instructs BitBake to use the | 2153 | also inherits Autotools, which instructs BitBake to use the |
2159 | <filename>autotools.bbclass</filename> file, which contains the definitions of all the steps | 2154 | <filename>autotools.bbclass</filename> file, which contains the definitions of all the steps |
2160 | needed to build an Autotool-based application. | 2155 | needed to build an Autotool-based application. |
2161 | The result of the build is automatically packaged. | 2156 | The result of the build is automatically packaged. |
2162 | And, if the application uses NLS for localization, packages with local information are | 2157 | And, if the application uses NLS for localization, packages with local information are |
2163 | generated (one package per language). | 2158 | generated (one package per language). |
2164 | Following is one example: (<filename>hello_2.3.bb</filename>) | 2159 | Following is one example: (<filename>hello_2.3.bb</filename>) |
2165 | <literallayout class='monospaced'> | 2160 | <literallayout class='monospaced'> |
2166 | DESCRIPTION = "GNU Helloworld application" | 2161 | DESCRIPTION = "GNU Helloworld application" |
2167 | SECTION = "examples" | 2162 | SECTION = "examples" |
2168 | LICENSE = "GPLv2+" | 2163 | LICENSE = "GPLv2+" |
@@ -2172,49 +2167,49 @@ do_unpack unpacks the source, and S must be set | |||
2172 | SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz" | 2167 | SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz" |
2173 | 2168 | ||
2174 | inherit autotools gettext | 2169 | inherit autotools gettext |
2175 | </literallayout> | 2170 | </literallayout> |
2176 | </para> | 2171 | </para> |
2177 | 2172 | ||
2178 | <para> | 2173 | <para> |
2179 | The variable | 2174 | The variable |
2180 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LIC_FILES_CHKSUM'>LIC_FILES_CHKSUM</ulink></filename> | 2175 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-LIC_FILES_CHKSUM'>LIC_FILES_CHKSUM</ulink></filename> |
2181 | is used to track source license changes as described in the | 2176 | is used to track source license changes as described in the |
2182 | "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-configuring-LIC_FILES_CHKSUM'>Tracking License Changes</ulink>" section. | 2177 | "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-configuring-LIC_FILES_CHKSUM'>Tracking License Changes</ulink>" section. |
2183 | You can quickly create Autotool-based recipes in a manner similar to the previous example. | 2178 | You can quickly create Autotool-based recipes in a manner similar to the previous example. |
2184 | </para> | 2179 | </para> |
2185 | </section> | 2180 | </section> |
2186 | 2181 | ||
2187 | <section id='usingpoky-extend-addpkg-makefile'> | 2182 | <section id='usingpoky-extend-addpkg-makefile'> |
2188 | <title>Makefile-Based Package</title> | 2183 | <title>Makefile-Based Package</title> |
2189 | 2184 | ||
2190 | <para> | 2185 | <para> |
2191 | Applications that use GNU <filename>make</filename> also require a recipe that has | 2186 | Applications that use GNU <filename>make</filename> also require a recipe that has |
2192 | the source archive listed in | 2187 | the source archive listed in |
2193 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>. | 2188 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'>SRC_URI</ulink></filename>. |
2194 | You do not need to add a <filename>do_compile</filename> step since by default BitBake | 2189 | You do not need to add a <filename>do_compile</filename> step since by default BitBake |
2195 | starts the <filename>make</filename> command to compile the application. | 2190 | starts the <filename>make</filename> command to compile the application. |
2196 | If you need additional <filename>make</filename> options, you should store them in the | 2191 | If you need additional <filename>make</filename> options, you should store them in the |
2197 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OEMAKE'>EXTRA_OEMAKE</ulink></filename> | 2192 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_OEMAKE'>EXTRA_OEMAKE</ulink></filename> |
2198 | variable. | 2193 | variable. |
2199 | BitBake passes these options into the <filename>make</filename> GNU invocation. | 2194 | BitBake passes these options into the <filename>make</filename> GNU invocation. |
2200 | Note that a <filename>do_install</filename> task is still required. | 2195 | Note that a <filename>do_install</filename> task is still required. |
2201 | Otherwise, BitBake runs an empty <filename>do_install</filename> task by default. | 2196 | Otherwise, BitBake runs an empty <filename>do_install</filename> task by default. |
2202 | </para> | 2197 | </para> |
2203 | 2198 | ||
2204 | <para> | 2199 | <para> |
2205 | Some applications might require extra parameters to be passed to the compiler. | 2200 | Some applications might require extra parameters to be passed to the compiler. |
2206 | For example, the application might need an additional header path. | 2201 | For example, the application might need an additional header path. |
2207 | You can accomplish this by adding to the | 2202 | You can accomplish this by adding to the |
2208 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-CFLAGS'>CFLAGS</ulink></filename> variable. | 2203 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-CFLAGS'>CFLAGS</ulink></filename> variable. |
2209 | The following example shows this: | 2204 | The following example shows this: |
2210 | <literallayout class='monospaced'> | 2205 | <literallayout class='monospaced'> |
2211 | CFLAGS_prepend = "-I ${S}/include " | 2206 | CFLAGS_prepend = "-I ${S}/include " |
2212 | </literallayout> | 2207 | </literallayout> |
2213 | </para> | 2208 | </para> |
2214 | 2209 | ||
2215 | <para> | 2210 | <para> |
2216 | In the following example, <filename>mtd-utils</filename> is a makefile-based package: | 2211 | In the following example, <filename>mtd-utils</filename> is a makefile-based package: |
2217 | <literallayout class='monospaced'> | 2212 | <literallayout class='monospaced'> |
2218 | DESCRIPTION = "Tools for managing memory technology devices." | 2213 | DESCRIPTION = "Tools for managing memory technology devices." |
2219 | SECTION = "base" | 2214 | SECTION = "base" |
2220 | DEPENDS = "zlib lzo e2fsprogs util-linux" | 2215 | DEPENDS = "zlib lzo e2fsprogs util-linux" |
@@ -2245,46 +2240,46 @@ do_unpack unpacks the source, and S must be set | |||
2245 | PARALLEL_MAKE = "" | 2240 | PARALLEL_MAKE = "" |
2246 | 2241 | ||
2247 | BBCLASSEXTEND = "native" | 2242 | BBCLASSEXTEND = "native" |
2248 | </literallayout> | 2243 | </literallayout> |
2249 | </para> | 2244 | </para> |
2250 | 2245 | ||
2251 | <para> | 2246 | <para> |
2252 | If your sources are available as a tarball instead of a Git repository, you | 2247 | If your sources are available as a tarball instead of a Git repository, you |
2253 | will need to provide the URL to the tarball as well as an | 2248 | will need to provide the URL to the tarball as well as an |
2254 | <filename>md5</filename> or <filename>sha256</filename> sum of | 2249 | <filename>md5</filename> or <filename>sha256</filename> sum of |
2255 | the download. | 2250 | the download. |
2256 | Here is an example: | 2251 | Here is an example: |
2257 | <literallayout class='monospaced'> | 2252 | <literallayout class='monospaced'> |
2258 | SRC_URI="ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-1.4.9.tar.bz2" | 2253 | SRC_URI="ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-1.4.9.tar.bz2" |
2259 | SRC_URI[md5sum]="82b8e714b90674896570968f70ca778b" | 2254 | SRC_URI[md5sum]="82b8e714b90674896570968f70ca778b" |
2260 | </literallayout> | 2255 | </literallayout> |
2261 | You can generate the <filename>md5</filename> or <filename>sha256</filename> sums | 2256 | You can generate the <filename>md5</filename> or <filename>sha256</filename> sums |
2262 | by using the <filename>md5sum</filename> or <filename>sha256sum</filename> commands | 2257 | by using the <filename>md5sum</filename> or <filename>sha256sum</filename> commands |
2263 | with the target file as the only argument. | 2258 | with the target file as the only argument. |
2264 | Here is an example: | 2259 | Here is an example: |
2265 | <literallayout class='monospaced'> | 2260 | <literallayout class='monospaced'> |
2266 | $ md5sum mtd-utils-1.4.9.tar.bz2 | 2261 | $ md5sum mtd-utils-1.4.9.tar.bz2 |
2267 | 82b8e714b90674896570968f70ca778b mtd-utils-1.4.9.tar.bz2 | 2262 | 82b8e714b90674896570968f70ca778b mtd-utils-1.4.9.tar.bz2 |
2268 | </literallayout> | 2263 | </literallayout> |
2269 | </para> | 2264 | </para> |
2270 | </section> | 2265 | </section> |
2271 | 2266 | ||
2272 | <section id='splitting-an-application-into-multiple-packages'> | 2267 | <section id='splitting-an-application-into-multiple-packages'> |
2273 | <title>Splitting an Application into Multiple Packages</title> | 2268 | <title>Splitting an Application into Multiple Packages</title> |
2274 | 2269 | ||
2275 | <para> | 2270 | <para> |
2276 | You can use the variables | 2271 | You can use the variables |
2277 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'>PACKAGES</ulink></filename> and | 2272 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGES'>PACKAGES</ulink></filename> and |
2278 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'>FILES</ulink></filename> | 2273 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-FILES'>FILES</ulink></filename> |
2279 | to split an application into multiple packages. | 2274 | to split an application into multiple packages. |
2280 | </para> | 2275 | </para> |
2281 | 2276 | ||
2282 | <para> | 2277 | <para> |
2283 | Following is an example that uses the <filename>libXpm</filename> recipe. | 2278 | Following is an example that uses the <filename>libXpm</filename> recipe. |
2284 | By default, this recipe generates a single package that contains the library along | 2279 | By default, this recipe generates a single package that contains the library along |
2285 | with a few binaries. | 2280 | with a few binaries. |
2286 | You can modify the recipe to split the binaries into separate packages: | 2281 | You can modify the recipe to split the binaries into separate packages: |
2287 | <literallayout class='monospaced'> | 2282 | <literallayout class='monospaced'> |
2288 | require xorg-lib-common.inc | 2283 | require xorg-lib-common.inc |
2289 | 2284 | ||
2290 | DESCRIPTION = "X11 Pixmap library" | 2285 | DESCRIPTION = "X11 Pixmap library" |
@@ -2299,61 +2294,61 @@ do_unpack unpacks the source, and S must be set | |||
2299 | PACKAGES =+ "sxpm cxpm" | 2294 | PACKAGES =+ "sxpm cxpm" |
2300 | FILES_cxpm = "${bindir}/cxpm" | 2295 | FILES_cxpm = "${bindir}/cxpm" |
2301 | FILES_sxpm = "${bindir}/sxpm" | 2296 | FILES_sxpm = "${bindir}/sxpm" |
2302 | </literallayout> | 2297 | </literallayout> |
2303 | </para> | 2298 | </para> |
2304 | 2299 | ||
2305 | <para> | 2300 | <para> |
2306 | In the previous example, we want to ship the <filename>sxpm</filename> | 2301 | In the previous example, we want to ship the <filename>sxpm</filename> |
2307 | and <filename>cxpm</filename> binaries in separate packages. | 2302 | and <filename>cxpm</filename> binaries in separate packages. |
2308 | Since <filename>bindir</filename> would be packaged into the main | 2303 | Since <filename>bindir</filename> would be packaged into the main |
2309 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'>PN</ulink></filename> | 2304 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'>PN</ulink></filename> |
2310 | package by default, we prepend the <filename>PACKAGES</filename> | 2305 | package by default, we prepend the <filename>PACKAGES</filename> |
2311 | variable so additional package names are added to the start of list. | 2306 | variable so additional package names are added to the start of list. |
2312 | This results in the extra <filename>FILES_*</filename> | 2307 | This results in the extra <filename>FILES_*</filename> |
2313 | variables then containing information that define which files and | 2308 | variables then containing information that define which files and |
2314 | directories go into which packages. | 2309 | directories go into which packages. |
2315 | Files included by earlier packages are skipped by latter packages. | 2310 | Files included by earlier packages are skipped by latter packages. |
2316 | Thus, the main <filename>PN</filename> package | 2311 | Thus, the main <filename>PN</filename> package |
2317 | does not include the above listed files. | 2312 | does not include the above listed files. |
2318 | </para> | 2313 | </para> |
2319 | </section> | 2314 | </section> |
2320 | 2315 | ||
2321 | <section id='usingpoky-extend-addpkg-postinstalls'> | 2316 | <section id='usingpoky-extend-addpkg-postinstalls'> |
2322 | <title>Post-Installation Scripts</title> | 2317 | <title>Post-Installation Scripts</title> |
2323 | 2318 | ||
2324 | <para> | 2319 | <para> |
2325 | To add a post-installation script to a package, add a | 2320 | To add a post-installation script to a package, add a |
2326 | <filename>pkg_postinst_PACKAGENAME()</filename> function to the | 2321 | <filename>pkg_postinst_PACKAGENAME()</filename> function to the |
2327 | <filename>.bb</filename> file and use | 2322 | <filename>.bb</filename> file and use |
2328 | <filename>PACKAGENAME</filename> as the name of the package you want to attach to the | 2323 | <filename>PACKAGENAME</filename> as the name of the package you want to attach to the |
2329 | <filename>postinst</filename> script. | 2324 | <filename>postinst</filename> script. |
2330 | Normally, | 2325 | Normally, |
2331 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'>PN</ulink></filename> | 2326 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'>PN</ulink></filename> |
2332 | can be used, which automatically expands to <filename>PACKAGENAME</filename>. | 2327 | can be used, which automatically expands to <filename>PACKAGENAME</filename>. |
2333 | A post-installation function has the following structure: | 2328 | A post-installation function has the following structure: |
2334 | <literallayout class='monospaced'> | 2329 | <literallayout class='monospaced'> |
2335 | pkg_postinst_PACKAGENAME () { | 2330 | pkg_postinst_PACKAGENAME () { |
2336 | #!/bin/sh -e | 2331 | #!/bin/sh -e |
2337 | # Commands to carry out | 2332 | # Commands to carry out |
2338 | } | 2333 | } |
2339 | </literallayout> | 2334 | </literallayout> |
2340 | </para> | 2335 | </para> |
2341 | 2336 | ||
2342 | <para> | 2337 | <para> |
2343 | The script defined in the post-installation function is called when the | 2338 | The script defined in the post-installation function is called when the |
2344 | root filesystem is created. | 2339 | root filesystem is created. |
2345 | If the script succeeds, the package is marked as installed. | 2340 | If the script succeeds, the package is marked as installed. |
2346 | If the script fails, the package is marked as unpacked and the script is | 2341 | If the script fails, the package is marked as unpacked and the script is |
2347 | executed when the image boots again. | 2342 | executed when the image boots again. |
2348 | </para> | 2343 | </para> |
2349 | 2344 | ||
2350 | <para> | 2345 | <para> |
2351 | Sometimes it is necessary for the execution of a post-installation | 2346 | Sometimes it is necessary for the execution of a post-installation |
2352 | script to be delayed until the first boot. | 2347 | script to be delayed until the first boot. |
2353 | For example, the script might need to be executed on the device itself. | 2348 | For example, the script might need to be executed on the device itself. |
2354 | To delay script execution until boot time, use the following structure in the | 2349 | To delay script execution until boot time, use the following structure in the |
2355 | post-installation script: | 2350 | post-installation script: |
2356 | <literallayout class='monospaced'> | 2351 | <literallayout class='monospaced'> |
2357 | pkg_postinst_PACKAGENAME () { | 2352 | pkg_postinst_PACKAGENAME () { |
2358 | #!/bin/sh -e | 2353 | #!/bin/sh -e |
2359 | if [ x"$D" = "x" ]; then | 2354 | if [ x"$D" = "x" ]; then |
@@ -2362,15 +2357,35 @@ do_unpack unpacks the source, and S must be set | |||
2362 | exit 1 | 2357 | exit 1 |
2363 | fi | 2358 | fi |
2364 | } | 2359 | } |
2365 | </literallayout> | 2360 | </literallayout> |
2366 | </para> | 2361 | </para> |
2362 | |||
2363 | <para> | ||
2364 | The previous example delays execution until the image boots again because the | ||
2365 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'>D</ulink></filename> | ||
2366 | variable points | ||
2367 | to the directory containing the image when the root filesystem is created at build time but | ||
2368 | is unset when executed on the first boot. | ||
2369 | </para> | ||
2370 | </section> | ||
2371 | |||
2372 | |||
2373 | |||
2374 | |||
2375 | |||
2376 | </section> | ||
2377 | |||
2378 | <section id='writer-notes'> | ||
2379 | <title>Writer Notes</title> | ||
2367 | 2380 | ||
2368 | <para> | 2381 | <para> |
2369 | The previous example delays execution until the image boots again because the | 2382 | <itemizedlist> |
2370 | <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-D'>D</ulink></filename> | 2383 | <listitem><para> |
2371 | variable points | 2384 | Need to edit the faq.xml chapter and find the single reference to |
2372 | to the directory containing the image when the root filesystem is created at build time but | 2385 | <filename>usingpoky-extend-addpkg</filename> and replace it |
2373 | is unset when executed on the first boot. | 2386 | with <filename>new-recipe-testing-hello-world-example</filename>. |
2387 | </para></listitem> | ||
2388 | </itemizedlist> | ||
2374 | </para> | 2389 | </para> |
2375 | </section> | 2390 | </section> |
2376 | </section> | 2391 | </section> |