diff options
| -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): |
