mirror of
https://git.yoctoproject.org/poky
synced 2026-04-22 15:32:14 +02:00
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>
This commit is contained in:
committed by
Richard Purdie
parent
81f9e815d3
commit
f7d46843e9
@@ -1580,6 +1580,7 @@ SHLIBSDIRS = "${WORKDIR_PKGDATA}/${MLPREFIX}shlibs2"
|
||||
SHLIBSWORKDIR = "${PKGDESTWORK}/${MLPREFIX}shlibs2"
|
||||
|
||||
python package_do_shlibs() {
|
||||
import itertools
|
||||
import re, pipes
|
||||
import subprocess
|
||||
|
||||
@@ -1835,16 +1836,16 @@ python package_do_shlibs() {
|
||||
bb.debug(2, '%s: Dependency %s covered by PRIVATE_LIBS' % (pkg, n[0]))
|
||||
continue
|
||||
if n[0] in shlib_provider.keys():
|
||||
shlib_provider_path = []
|
||||
for k in shlib_provider[n[0]].keys():
|
||||
shlib_provider_path.append(k)
|
||||
match = None
|
||||
for p in list(n[2]) + shlib_provider_path + libsearchpath:
|
||||
if p in shlib_provider[n[0]]:
|
||||
match = p
|
||||
break
|
||||
if match:
|
||||
(dep_pkg, ver_needed) = shlib_provider[n[0]][match]
|
||||
shlib_provider_map = shlib_provider[n[0]]
|
||||
matches = set()
|
||||
for p in itertools.chain(list(n[2]), sorted(shlib_provider_map.keys()), libsearchpath):
|
||||
if p in shlib_provider_map:
|
||||
matches.add(p)
|
||||
if len(matches) > 1:
|
||||
matchpkgs = ', '.join([shlib_provider_map[match][0] for match in matches])
|
||||
bb.error("%s: Multiple shlib providers for %s: %s (used by files: %s)" % (pkg, n[0], matchpkgs, n[1]))
|
||||
elif len(matches) == 1:
|
||||
(dep_pkg, ver_needed) = shlib_provider_map[matches.pop()]
|
||||
|
||||
bb.debug(2, '%s: Dependency %s requires package %s (used by files: %s)' % (pkg, n[0], dep_pkg, n[1]))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user