[oe-commits] Martin Jansa : package.bbclass: add SHLIBSSEARCHDIRS to define where to search for shlib providers
git at git.openembedded.org
git at git.openembedded.org
Mon Sep 2 11:12:33 UTC 2013
Module: openembedded-core.git
Branch: master-next
Commit: 0f65a357132412b81681c0b057904dd441c08ddf
URL: http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=0f65a357132412b81681c0b057904dd441c08ddf
Author: Martin Jansa <martin.jansa at gmail.com>
Date: Sun Jul 7 01:13:06 2013 +0200
package.bbclass: add SHLIBSSEARCHDIRS to define where to search for shlib providers
* when package contains some files matching "^.*\.so", but in directory
not default linker search paths (e.g. /opt/package/bundled-lib/libfoo.so)
don't register it as libfoo provider, because it's possible that there
is different package providing libfoo.so in ${libdir} and that would
be better shlib provider for other packages to depend on
* recipes providing libs intentionally in some other directory can
define own SHLIBSSEARCHDIRS value
[YOCTO #4628]
Signed-off-by: Martin Jansa <Martin.Jansa at gmail.com>
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
meta/classes/package.bbclass | 26 +++++++++++++++++++++++---
1 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 9db34c1..1f91517 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -1313,6 +1313,9 @@ SHLIBSDIRS = "${@getshlibsdirs(d)}"
SHLIBSDIR = "${TMPDIR}/pkgdata/${PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}/shlibs"
SHLIBSWORKDIR = "${PKGDESTWORK}/shlibs"
+# default search path when searching for shlibs provided by package
+SHLIBSSEARCHDIRS ?= "${baselib} ${libdir}"
+
python package_do_shlibs() {
import re, pipes
@@ -1323,6 +1326,20 @@ python package_do_shlibs() {
lib_re = re.compile("^.*\.so")
libdir_re = re.compile(".*/%s$" % d.getVar('baselib', True))
+
+ shlibs_search_dirs = d.getVar('SHLIBSSEARCHDIRS', True)
+ shlibs_search_dirs_re_txt = ""
+ for dir in shlibs_search_dirs.split(' '):
+ # strip leading and trailing slash, it's added in regexp
+ if dir.endswith("/"):
+ dir = dir[:-1]
+ if dir.startswith("/"):
+ dir = dir[1:]
+ if shlibs_search_dirs_re_txt:
+ shlibs_search_dirs_re_txt += "|"
+ shlibs_search_dirs_re_txt += "(^.*/%s/.*$)" % dir
+ shlibs_search_dirs_re = re.compile(shlibs_search_dirs_re_txt)
+ bb.debug(2, "will use following RE to search for provides sonames %s" % shlibs_search_dirs_re_txt)
packages = d.getVar('PACKAGES', True)
targetos = d.getVar('TARGET_OS', True)
@@ -1381,9 +1398,12 @@ python package_do_shlibs() {
if m:
this_soname = m.group(1)
if not this_soname in sonames:
- # if library is private (only used by package) then do not build shlib for it
- if not private_libs or -1 == private_libs.find(this_soname):
- sonames.append(this_soname)
+ if shlibs_search_dirs_re.match(file):
+ # if library is private (only used by package) then do not build shlib for it
+ if not private_libs or -1 == private_libs.find(this_soname):
+ sonames.append(this_soname)
+ else:
+ bb.debug(2, "ignoring soname %s from %s, because path doesn't match %s" % (this_soname, file, shlibs_search_dirs_re_txt))
if libdir_re.match(os.path.dirname(file)):
needs_ldconfig = True
if snap_symlinks and (os.path.basename(file) != this_soname):
More information about the Openembedded-commits
mailing list