diff options
Diffstat (limited to 'meta')
-rw-r--r-- | meta/classes/package.bbclass | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index d7de72bda3..988e148893 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass | |||
@@ -1375,7 +1375,9 @@ python package_do_shlibs() { | |||
1375 | fd.close() | 1375 | fd.close() |
1376 | for l in lines: | 1376 | for l in lines: |
1377 | s = l.strip().split(":") | 1377 | s = l.strip().split(":") |
1378 | shlib_provider[s[0]] = (dep_pkg, s[2]) | 1378 | if s[0] not in shlib_provider: |
1379 | shlib_provider[s[0]] = {} | ||
1380 | shlib_provider[s[0]][s[1]] = (dep_pkg, s[2]) | ||
1379 | 1381 | ||
1380 | def linux_so(file, needed, sonames, renames, pkgver): | 1382 | def linux_so(file, needed, sonames, renames, pkgver): |
1381 | needs_ldconfig = False | 1383 | needs_ldconfig = False |
@@ -1518,13 +1520,15 @@ python package_do_shlibs() { | |||
1518 | if len(sonames): | 1520 | if len(sonames): |
1519 | fd = open(shlibs_file, 'w') | 1521 | fd = open(shlibs_file, 'w') |
1520 | for s in sonames: | 1522 | for s in sonames: |
1521 | if s[0] in shlib_provider: | 1523 | if s[0] in shlib_provider and s[1] in shlib_provider[s[0]]: |
1522 | (old_pkg, old_pkgver) = shlib_provider[s[0]] | 1524 | (old_pkg, old_pkgver) = shlib_provider[s[0]][s[1]] |
1523 | if old_pkg != pkg: | 1525 | if old_pkg != pkg: |
1524 | bb.warn('%s-%s was registered as shlib provider for %s, changing it to %s-%s because it was built later' % (old_pkg, old_pkgver, s[0], pkg, pkgver)) | 1526 | bb.warn('%s-%s was registered as shlib provider for %s, changing it to %s-%s because it was built later' % (old_pkg, old_pkgver, s[0], pkg, pkgver)) |
1525 | bb.debug(1, 'registering %s-%s as shlib provider for %s' % (pkg, pkgver, s[0])) | 1527 | bb.debug(1, 'registering %s-%s as shlib provider for %s' % (pkg, pkgver, s[0])) |
1526 | fd.write(s[0] + ':' + s[1] + ':' + s[2] + '\n') | 1528 | fd.write(s[0] + ':' + s[1] + ':' + s[2] + '\n') |
1527 | shlib_provider[s[0]] = (pkg, pkgver) | 1529 | if s[0] not in shlib_provider: |
1530 | shlib_provider[s[0]] = {} | ||
1531 | shlib_provider[s[0]][s[1]] = (pkg, pkgver) | ||
1528 | fd.close() | 1532 | fd.close() |
1529 | if needs_ldconfig and use_ldconfig: | 1533 | if needs_ldconfig and use_ldconfig: |
1530 | bb.debug(1, 'adding ldconfig call to postinst for %s' % pkg) | 1534 | bb.debug(1, 'adding ldconfig call to postinst for %s' % pkg) |
@@ -1539,6 +1543,7 @@ python package_do_shlibs() { | |||
1539 | 1543 | ||
1540 | assumed_libs = d.getVar('ASSUME_SHLIBS', True) | 1544 | assumed_libs = d.getVar('ASSUME_SHLIBS', True) |
1541 | if assumed_libs: | 1545 | if assumed_libs: |
1546 | libdir = d.getVar("libdir", True) | ||
1542 | for e in assumed_libs.split(): | 1547 | for e in assumed_libs.split(): |
1543 | l, dep_pkg = e.split(":") | 1548 | l, dep_pkg = e.split(":") |
1544 | lib_ver = None | 1549 | lib_ver = None |
@@ -1546,7 +1551,9 @@ python package_do_shlibs() { | |||
1546 | if len(dep_pkg) == 2: | 1551 | if len(dep_pkg) == 2: |
1547 | lib_ver = dep_pkg[1] | 1552 | lib_ver = dep_pkg[1] |
1548 | dep_pkg = dep_pkg[0] | 1553 | dep_pkg = dep_pkg[0] |
1549 | shlib_provider[l] = (dep_pkg, lib_ver) | 1554 | shlib_provider[l][libdir] = (dep_pkg, lib_ver) |
1555 | |||
1556 | libsearchpath = [d.getVar('libdir', True), d.getVar('base_libdir', True)] | ||
1550 | 1557 | ||
1551 | for pkg in packages.split(): | 1558 | for pkg in packages.split(): |
1552 | bb.debug(2, "calculating shlib requirements for %s" % pkg) | 1559 | bb.debug(2, "calculating shlib requirements for %s" % pkg) |
@@ -1562,21 +1569,27 @@ python package_do_shlibs() { | |||
1562 | bb.debug(2, '%s: Dependency %s covered by PRIVATE_LIBS' % (pkg, n[0])) | 1569 | bb.debug(2, '%s: Dependency %s covered by PRIVATE_LIBS' % (pkg, n[0])) |
1563 | continue | 1570 | continue |
1564 | if n[0] in shlib_provider.keys(): | 1571 | if n[0] in shlib_provider.keys(): |
1565 | (dep_pkg, ver_needed) = shlib_provider[n[0]] | 1572 | match = None |
1573 | for p in n[2] + libsearchpath: | ||
1574 | if p in shlib_provider[n[0]]: | ||
1575 | match = p | ||
1576 | break | ||
1577 | if match: | ||
1578 | (dep_pkg, ver_needed) = shlib_provider[n[0]][match] | ||
1566 | 1579 | ||
1567 | bb.debug(2, '%s: Dependency %s requires package %s (used by files: %s)' % (pkg, n[0], dep_pkg, n[1])) | 1580 | bb.debug(2, '%s: Dependency %s requires package %s (used by files: %s)' % (pkg, n[0], dep_pkg, n[1])) |
1568 | 1581 | ||
1569 | if dep_pkg == pkg: | 1582 | if dep_pkg == pkg: |
1570 | continue | 1583 | continue |
1571 | 1584 | ||
1572 | if ver_needed: | 1585 | if ver_needed: |
1573 | dep = "%s (>= %s)" % (dep_pkg, ver_needed) | 1586 | dep = "%s (>= %s)" % (dep_pkg, ver_needed) |
1574 | else: | 1587 | else: |
1575 | dep = dep_pkg | 1588 | dep = dep_pkg |
1576 | if not dep in deps: | 1589 | if not dep in deps: |
1577 | deps.append(dep) | 1590 | deps.append(dep) |
1578 | else: | 1591 | continue |
1579 | bb.note("Couldn't find shared library provider for %s, used by files: %s" % (n[0], n[1])) | 1592 | bb.note("Couldn't find shared library provider for %s, used by files: %s" % (n[0], n[1])) |
1580 | 1593 | ||
1581 | deps_file = os.path.join(pkgdest, pkg + ".shlibdeps") | 1594 | deps_file = os.path.join(pkgdest, pkg + ".shlibdeps") |
1582 | if os.path.exists(deps_file): | 1595 | if os.path.exists(deps_file): |