On Wed, 2021-08-18 at 17:17 +0000, Andres Beltran wrote: > Currently, depends.dot includes per-file dependencies but not the packages > providing those files. This makes it hard to obtain all package > dependencies by just looking at depends.dot. > > Parse the RPROVIDES and FILERPROVIDES fields from pkgdata to map each of > their values to the package providing the component. Include runtime > packages as dependencies in depends.dot, together with the component > provided by the package as a label. > > Signed-off-by: Andres Beltran <[email protected]> > --- > meta/classes/buildhistory.bbclass | 4 +++- > meta/lib/oe/utils.py | 29 +++++++++++++++++++++++++++-- > 2 files changed, 30 insertions(+), 3 deletions(-) > > diff --git a/meta/classes/buildhistory.bbclass > b/meta/classes/buildhistory.bbclass > index 8a1359acbe..9ec48a879a 100644 > --- a/meta/classes/buildhistory.bbclass > +++ b/meta/classes/buildhistory.bbclass > @@ -438,7 +438,7 @@ def buildhistory_list_installed(d, rootfs_type="image"): > output_file_full = os.path.join(d.getVar('WORKDIR'), output_file) > > with open(output_file_full, 'w') as output: > - output.write(format_pkg_list(pkgs, output_type)) > + output.write(format_pkg_list(pkgs, output_type, > d.getVar('PKGDATA_DIR'))) > > python buildhistory_list_installed_image() { > buildhistory_list_installed(d) > @@ -479,6 +479,8 @@ buildhistory_get_installed() { > -e 's:|: -> :' \ > -e 's:"\[REC\]":[style=dotted]:' \ > -e 's:"\([<>=]\+\)" "\([^"]*\)":[label="\1 \2"]:' \ > + -e 's:"\([*]\+\)" "\([^"]*\)":[label="\2"]:' \ > + -e 's:"\[RPROVIDES\]":[style=dashed]:' \ > $1/depends.tmp > # Add header, sorted and de-duped contents and footer and then delete > the temp file > printf "digraph depends {\n node [shape=plaintext]\n" > > $1/depends.dot > diff --git a/meta/lib/oe/utils.py b/meta/lib/oe/utils.py > index 83d298906b..0f3dfd644d 100644 > --- a/meta/lib/oe/utils.py > +++ b/meta/lib/oe/utils.py > @@ -345,7 +345,26 @@ def squashspaces(string): > import re > return re.sub(r"\s+", " ", string).strip() > > -def format_pkg_list(pkg_dict, ret_format=None): > +def rprovides_map(pkgdata_dir, pkg_dict): > + # Map file -> pkg provider > + rprov_map = {} > + > + for pkg in pkg_dict: > + with open(os.path.join(pkgdata_dir, 'runtime-reverse', pkg)) as f: > + for line in f: > + if line.startswith('RPROVIDES') or > line.startswith('FILERPROVIDES'): > + # List all components provided by pkg. > + # Exclude version strings, i.e. those starting with ( > + provides = [x for x in line.split()[1:] if not > x.startswith('(')] > + for prov in provides: > + if prov in rprov_map: > + rprov_map[prov].append(pkg) > + else: > + rprov_map[prov] = [pkg] > + > + return rprov_map > + > +def format_pkg_list(pkg_dict, ret_format=None, pkgdata_dir=None): > output = [] > > if ret_format == "arch": > @@ -358,9 +377,15 @@ def format_pkg_list(pkg_dict, ret_format=None): > for pkg in sorted(pkg_dict): > output.append("%s %s %s" % (pkg, pkg_dict[pkg]["arch"], > pkg_dict[pkg]["ver"])) > elif ret_format == "deps": > + rprov_map = rprovides_map(pkgdata_dir, pkg_dict) > for pkg in sorted(pkg_dict): > for dep in pkg_dict[pkg]["deps"]: > - output.append("%s|%s" % (pkg, dep)) > + if dep in rprov_map: > + # There could be multiple providers within the image > + for pkg_provider in rprov_map[dep]: > + output.append("%s|%s * %s [RPROVIDES]" % (pkg, > pkg_provider, dep)) > + else: > + output.append("%s|%s" % (pkg, dep)) > else: > for pkg in sorted(pkg_dict): > output.append(pkg)
This seemed to cause failures when generating SDKs: https://autobuilder.yoctoproject.org/typhoon/#/builders/53/builds/3914 https://autobuilder.yoctoproject.org/typhoon/#/builders/42/builds/3895 https://autobuilder.yoctoproject.org/typhoon/#/builders/74/builds/3882 https://autobuilder.yoctoproject.org/typhoon/#/builders/63/builds/3875 https://autobuilder.yoctoproject.org/typhoon/#/builders/59/builds/3884 https://autobuilder.yoctoproject.org/typhoon/#/builders/73/builds/3880 Cheers, Richard
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#155390): https://lists.openembedded.org/g/openembedded-core/message/155390 Mute This Topic: https://lists.openembedded.org/mt/84977439/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
