diff options
author | Scott Rifenbark <srifenbark@gmail.com> | 2016-09-13 11:15:02 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-09-23 15:27:34 +0100 |
commit | 8bc6c1c2c817fdc4ee12e165489aab6885fa9e9c (patch) | |
tree | 0a37ea47140367bd7c69ed8edab5823c6897fd0c /documentation/ref-manual/technical-details.xml | |
parent | 899ea9cb4839580c7f562e1601e58ac71a6dca4e (diff) | |
download | poky-8bc6c1c2c817fdc4ee12e165489aab6885fa9e9c.tar.gz |
ref-manual: New section and updates for runtime dep work
fixes [YOCTO #10248]
The bulk of this change is a new section called "Automatically
Added Runtime Dependencies". Additionally, changes were made
to the RDEPENDS and DEPENDS variables. Some cross-referencing
to the new material was also added in the do_package task entry,
the do_packagedata task entry, the PKGDATA_DIR glossary entry,
and the PRIVATE_LIBS glossary entry.
(From yocto-docs rev: 16504cd0eb23e102322c6c6096c5b52500a04640)
Signed-off-by: Scott Rifenbark <srifenbark@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation/ref-manual/technical-details.xml')
-rw-r--r-- | documentation/ref-manual/technical-details.xml | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/documentation/ref-manual/technical-details.xml b/documentation/ref-manual/technical-details.xml index 6bad547e50..e5c8eb83b6 100644 --- a/documentation/ref-manual/technical-details.xml +++ b/documentation/ref-manual/technical-details.xml | |||
@@ -979,6 +979,113 @@ | |||
979 | </section> | 979 | </section> |
980 | </section> | 980 | </section> |
981 | 981 | ||
982 | <section id='automatically-added-runtime-dependencies'> | ||
983 | <title>Automatically Added Runtime Dependencies</title> | ||
984 | |||
985 | <para> | ||
986 | The OpenEmbedded build system automatically adds common types of | ||
987 | runtime dependencies between packages, which means you do not need to | ||
988 | explicitly declare the packages using | ||
989 | <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>. | ||
990 | Two automatic mechanisms exist (<filename>shlibdeps</filename> and | ||
991 | <filename>pcdeps</filename>) that handle shared libraries and | ||
992 | package configuration (pkg-config) modules, respectively. | ||
993 | For other types of runtime dependencies, you must manually declare | ||
994 | the dependencies. | ||
995 | <itemizedlist> | ||
996 | <listitem><para> | ||
997 | <filename>shlibdeps</filename>: | ||
998 | During the | ||
999 | <link linkend='ref-tasks-package'><filename>do_package</filename></link> | ||
1000 | task of each recipe, all shared libraries installed by the | ||
1001 | recipe are located. | ||
1002 | For each shared library, the package that contains the shared | ||
1003 | library is registered as providing the shared library. | ||
1004 | More specifically, the package is registered as providing the | ||
1005 | <ulink url='https://en.wikipedia.org/wiki/Soname'>soname</ulink> | ||
1006 | of the library. | ||
1007 | The resulting shared-library-to-package mapping | ||
1008 | is saved globally in | ||
1009 | <link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link> | ||
1010 | by the | ||
1011 | <link linkend='ref-tasks-packagedata'><filename>do_packagedata</filename></link> | ||
1012 | task.</para> | ||
1013 | |||
1014 | <para>Simultaneously, all executables and shared libraries | ||
1015 | installed by the recipe are inspected to see what shared | ||
1016 | libraries they link against. | ||
1017 | For each shared library dependency that is found, | ||
1018 | <filename>PKGDATA_DIR</filename> is queried to | ||
1019 | see if some package (likely from a different recipe) contains | ||
1020 | the shared library. | ||
1021 | If such a package is found, a runtime dependency is added from | ||
1022 | the package that depends on the shared library to the package | ||
1023 | that contains the library.</para> | ||
1024 | |||
1025 | <para>If the library being linked against is versioned | ||
1026 | (i.e. includes a version number), then the automatically added | ||
1027 | runtime dependency will specify at least that version, as if | ||
1028 | "<replaceable>package</replaceable> (>= <replaceable>version</replaceable>)" | ||
1029 | had been added to | ||
1030 | <link linkend='var-RDEPENDS'><filename>RDEPENDS</filename></link>. | ||
1031 | This dependency forces an upgrade of the package that provides | ||
1032 | the shared library when installing the package that depends on | ||
1033 | the library, if needed.</para> | ||
1034 | |||
1035 | <para>If you want to avoid a package being registered as | ||
1036 | providing a particular shared library (e.g. because the library | ||
1037 | is for internal use only), then add the library to | ||
1038 | <link linkend='var-PRIVATE_LIBS'><filename>PRIVATE_LIBS</filename></link> | ||
1039 | inside the package's recipe. | ||
1040 | </para></listitem> | ||
1041 | <listitem><para> | ||
1042 | <filename>pcdeps</filename>: | ||
1043 | During the | ||
1044 | <link linkend='ref-tasks-package'><filename>do_package</filename></link> | ||
1045 | task of each recipe, all pkg-config modules | ||
1046 | (<filename>*.pc</filename> files) installed by the recipe are | ||
1047 | located. | ||
1048 | For each module, the package that contains the module is | ||
1049 | registered as providing the module. | ||
1050 | The resulting module-to-package mapping is saved globally in | ||
1051 | <link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link> | ||
1052 | by the | ||
1053 | <link linkend='ref-tasks-packagedata'><filename>do_packagedata</filename></link> | ||
1054 | task.</para> | ||
1055 | |||
1056 | <para>Simultaneously, all pkg-config modules installed by the | ||
1057 | recipe are inspected to see what other modules on which the | ||
1058 | pkg-config modules depend. | ||
1059 | A module is seen as depending on another module if it contains | ||
1060 | a "Requires:" line that specifies the other module. | ||
1061 | For each module dependency, | ||
1062 | <filename>PKGDATA_DIR</filename> is queried to see if some | ||
1063 | package contains the module. | ||
1064 | If such a package is found, a runtime dependency is added from | ||
1065 | the package that depends on the module to the package that | ||
1066 | contains the module. | ||
1067 | <note> | ||
1068 | The <filename>pcdeps</filename> mechanism most often infers | ||
1069 | dependencies between <filename>-dev</filename> packages. | ||
1070 | </note> | ||
1071 | </para></listitem> | ||
1072 | </itemizedlist> | ||
1073 | </para> | ||
1074 | |||
1075 | <para> | ||
1076 | The <filename>do_package</filename> task depends on the | ||
1077 | <link linkend='ref-tasks-packagedata'><filename>do_packagedata</filename></link> | ||
1078 | task of each recipe in | ||
1079 | <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link> | ||
1080 | through use of a | ||
1081 | <ulink url='&YOCTO_DOCS_BB_URL;#variable-flags'><filename>[vardeps]</filename></ulink> | ||
1082 | declaration, which guarantees that the required | ||
1083 | shared-library/module-to-package mapping information will be available | ||
1084 | when needed as long as <filename>DEPENDS</filename> has been | ||
1085 | correctly set. | ||
1086 | </para> | ||
1087 | </section> | ||
1088 | |||
982 | <section id='fakeroot-and-pseudo'> | 1089 | <section id='fakeroot-and-pseudo'> |
983 | <title>Fakeroot and Pseudo</title> | 1090 | <title>Fakeroot and Pseudo</title> |
984 | 1091 | ||