[OE-core] [PATCH] package.bbclass: add PRIVATE_LIBS_ALL

Alexander Kanavin alex.kanavin at gmail.com
Tue Sep 3 15:29:42 UTC 2019


PRIVATE_LIBS is used to exclude 'private' libraries from getting added to
automatic runtime dependency resolution. That variable has to list
all libraries by name which becomes a maintenance issue if the list
of such libraries frequently changes, or is very large.

PRIVATE_LIBS_ALL allows declaring all libraries private, either
for a specific target package (e.g. -ptest), or for all packages
produced by a recipe.

Signed-off-by: Alexander Kanavin <alex.kanavin at gmail.com>
---
 meta/classes/package.bbclass | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 114d6559f5e..f6ccd908b4a 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -1646,7 +1646,7 @@ python package_do_shlibs() {
                 prov = (this_soname, ldir, pkgver)
                 if not prov in sonames:
                     # if library is private (only used by package) then do not build shlib for it
-                    if not private_libs or this_soname not in private_libs:
+                    if (not private_libs or this_soname not in private_libs) and not private_libs_all:
                         sonames.add(prov)
                 if libdir_re.match(os.path.dirname(file)):
                     needs_ldconfig = True
@@ -1739,6 +1739,7 @@ python package_do_shlibs() {
     for pkg in shlib_pkgs:
         private_libs = d.getVar('PRIVATE_LIBS_' + pkg) or d.getVar('PRIVATE_LIBS') or ""
         private_libs = private_libs.split()
+        private_libs_all = d.getVar('PRIVATE_LIBS_ALL_' + pkg) or d.getVar('PRIVATE_LIBS_ALL')
         needs_ldconfig = False
         bb.debug(2, "calculating shlib provides for %s" % pkg)
 
@@ -1821,6 +1822,7 @@ python package_do_shlibs() {
 
         private_libs = d.getVar('PRIVATE_LIBS_' + pkg) or d.getVar('PRIVATE_LIBS') or ""
         private_libs = private_libs.split()
+        private_libs_all = d.getVar('PRIVATE_LIBS_ALL_' + pkg) or d.getVar('PRIVATE_LIBS_ALL')
 
         deps = list()
         for n in needed[pkg]:
@@ -1829,8 +1831,8 @@ python package_do_shlibs() {
             # /opt/abc/lib/libfoo.so.1 and contains /usr/bin/abc depending on system library libfoo.so.1
             # but skipping it is still better alternative than providing own
             # version and then adding runtime dependency for the same system library
-            if private_libs and n[0] in private_libs:
-                bb.debug(2, '%s: Dependency %s covered by PRIVATE_LIBS' % (pkg, n[0]))
+            if (private_libs and n[0] in private_libs) or private_libs_all:
+                bb.debug(2, '%s: Dependency %s covered by PRIVATE_LIBS or PRIVATE_LIBS_ALL' % (pkg, n[0]))
                 continue
             if n[0] in shlib_provider.keys():
                 shlib_provider_path = []
@@ -2113,7 +2115,7 @@ python package_depchains() {
 
 # Since bitbake can't determine which variables are accessed during package
 # iteration, we need to list them here:
-PACKAGEVARS = "FILES RDEPENDS RRECOMMENDS SUMMARY DESCRIPTION RSUGGESTS RPROVIDES RCONFLICTS PKG ALLOW_EMPTY pkg_postinst pkg_postrm pkg_postinst_ontarget INITSCRIPT_NAME INITSCRIPT_PARAMS DEBIAN_NOAUTONAME ALTERNATIVE PKGE PKGV PKGR USERADD_PARAM GROUPADD_PARAM CONFFILES SYSTEMD_SERVICE LICENSE SECTION pkg_preinst pkg_prerm RREPLACES GROUPMEMS_PARAM SYSTEMD_AUTO_ENABLE SKIP_FILEDEPS PRIVATE_LIBS"
+PACKAGEVARS = "FILES RDEPENDS RRECOMMENDS SUMMARY DESCRIPTION RSUGGESTS RPROVIDES RCONFLICTS PKG ALLOW_EMPTY pkg_postinst pkg_postrm pkg_postinst_ontarget INITSCRIPT_NAME INITSCRIPT_PARAMS DEBIAN_NOAUTONAME ALTERNATIVE PKGE PKGV PKGR USERADD_PARAM GROUPADD_PARAM CONFFILES SYSTEMD_SERVICE LICENSE SECTION pkg_preinst pkg_prerm RREPLACES GROUPMEMS_PARAM SYSTEMD_AUTO_ENABLE SKIP_FILEDEPS PRIVATE_LIBS PRIVATE_LIBS_ALL"
 
 def gen_packagevar(d):
     ret = []
-- 
2.17.1



More information about the Openembedded-core mailing list