diff options
author | Jonathan Marler <johnnymarler@gmail.com> | 2019-09-19 15:34:34 -0600 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-09-27 13:02:16 +0100 |
commit | f7d46843e93f1acb4872bd5bcc12ed734de5168b (patch) | |
tree | d0109fd2d80100ae1bfd6d9e983bd725cf148132 | |
parent | 81f9e815d36848761a9dfa94b00ad998bb39a4a6 (diff) | |
download | poky-f7d46843e93f1acb4872bd5bcc12ed734de5168b.tar.gz |
package: Multiple shlib_providers for the same file should error
In the case where multiple packages provide the same file, we show an error.
Otherwise, python will generate a different build depending on which provider
appears first in the dictionary. On my system this order changes every time
I run bitbake causing intermittent build differences.
Add a sorted() to fix the determinism issue too.
(From OE-Core rev: 61c41369003444bfbf1c45e7cfd2752a4b7bc22f)
Signed-off-by: Jonathan Marler <johnnymarler@hp.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/classes/package.bbclass | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index aa8451ffe8..d8bef3afb0 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass | |||
@@ -1580,6 +1580,7 @@ SHLIBSDIRS = "${WORKDIR_PKGDATA}/${MLPREFIX}shlibs2" | |||
1580 | SHLIBSWORKDIR = "${PKGDESTWORK}/${MLPREFIX}shlibs2" | 1580 | SHLIBSWORKDIR = "${PKGDESTWORK}/${MLPREFIX}shlibs2" |
1581 | 1581 | ||
1582 | python package_do_shlibs() { | 1582 | python package_do_shlibs() { |
1583 | import itertools | ||
1583 | import re, pipes | 1584 | import re, pipes |
1584 | import subprocess | 1585 | import subprocess |
1585 | 1586 | ||
@@ -1835,16 +1836,16 @@ python package_do_shlibs() { | |||
1835 | bb.debug(2, '%s: Dependency %s covered by PRIVATE_LIBS' % (pkg, n[0])) | 1836 | bb.debug(2, '%s: Dependency %s covered by PRIVATE_LIBS' % (pkg, n[0])) |
1836 | continue | 1837 | continue |
1837 | if n[0] in shlib_provider.keys(): | 1838 | if n[0] in shlib_provider.keys(): |
1838 | shlib_provider_path = [] | 1839 | shlib_provider_map = shlib_provider[n[0]] |
1839 | for k in shlib_provider[n[0]].keys(): | 1840 | matches = set() |
1840 | shlib_provider_path.append(k) | 1841 | for p in itertools.chain(list(n[2]), sorted(shlib_provider_map.keys()), libsearchpath): |
1841 | match = None | 1842 | if p in shlib_provider_map: |
1842 | for p in list(n[2]) + shlib_provider_path + libsearchpath: | 1843 | matches.add(p) |
1843 | if p in shlib_provider[n[0]]: | 1844 | if len(matches) > 1: |
1844 | match = p | 1845 | matchpkgs = ', '.join([shlib_provider_map[match][0] for match in matches]) |
1845 | break | 1846 | bb.error("%s: Multiple shlib providers for %s: %s (used by files: %s)" % (pkg, n[0], matchpkgs, n[1])) |
1846 | if match: | 1847 | elif len(matches) == 1: |
1847 | (dep_pkg, ver_needed) = shlib_provider[n[0]][match] | 1848 | (dep_pkg, ver_needed) = shlib_provider_map[matches.pop()] |
1848 | 1849 | ||
1849 | bb.debug(2, '%s: Dependency %s requires package %s (used by files: %s)' % (pkg, n[0], dep_pkg, n[1])) | 1850 | bb.debug(2, '%s: Dependency %s requires package %s (used by files: %s)' % (pkg, n[0], dep_pkg, n[1])) |
1850 | 1851 | ||