Packages with a different architecture will be installed in a different multilib workdir. When those packages are updated, it will remove the files from the default workdir, but not from the multilib workdir. This will throw a file exists error later on. Remove the files from the multilib workdir for packages that are installed into the multilib workdir.
Signed-off-by: Raphael Freudiger <raphael.freudi...@siemens.com> --- meta/classes/staging.bbclass | 47 ++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass index 984051d6aa..2e836adce4 100644 --- a/meta/classes/staging.bbclass +++ b/meta/classes/staging.bbclass @@ -470,6 +470,10 @@ python extend_recipe_sysroot() { multilibs = {} manifests = {} + multilib_variants = (d.getVar("MULTILIBS") or "").split() + if multilib_variants: + multilib_variants = [variant.split(":")[1] for variant in multilib_variants] + for f in os.listdir(depdir): if not f.endswith(".complete"): continue @@ -477,7 +481,15 @@ python extend_recipe_sysroot() { if os.path.islink(f) and not os.path.exists(f): bb.note("%s no longer exists, removing from sysroot" % f) lnk = os.readlink(f.replace(".complete", "")) - sstate_clean_manifest(depdir + "/" + lnk, d, workdir) + dep = os.path.basename(f).replace(".complete", "") + d2 = d + for variant in multilib_variants: + if dep.startswith(variant+"-"): + if variant not in multilibs: + multilibs[variant] = get_multilib_datastore(variant, d) + d2 = multilibs[variant] + break + sstate_clean_manifest(depdir + "/" + lnk, d2, d2.getVar("WORKDIR")) os.unlink(f) os.unlink(f.replace(".complete", "")) @@ -517,7 +529,14 @@ python extend_recipe_sysroot() { fl = depdir + "/" + l bb.note("Task %s no longer depends on %s, removing from sysroot" % (mytaskname, l)) lnk = os.readlink(fl) - sstate_clean_manifest(depdir + "/" + lnk, d, workdir) + d2 = d + for variant in multilib_variants: + if l.startswith(variant+"-"): + if variant not in multilibs: + multilibs[variant] = get_multilib_datastore(variant, d) + d2 = multilibs[variant] + break + sstate_clean_manifest(depdir + "/" + lnk, d2, d2.getVar("WORKDIR")) os.unlink(fl) os.unlink(fl + ".complete") @@ -528,6 +547,18 @@ python extend_recipe_sysroot() { taskhash = setscenedeps[dep][5] taskmanifest = depdir + "/" + c + "." + taskhash + d2 = d + destsysroot = recipesysroot + variant = '' + # get multilib datastore if needed + if setscenedeps[dep][2].startswith("virtual:multilib"): + variant = setscenedeps[dep][2].split(":")[2] + if variant != current_variant: + if variant not in multilibs: + multilibs[variant] = get_multilib_datastore(variant, d) + d2 = multilibs[variant] + destsysroot = d2.getVar("RECIPE_SYSROOT") + if os.path.exists(depdir + "/" + c): lnk = os.readlink(depdir + "/" + c) if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"): @@ -535,7 +566,7 @@ python extend_recipe_sysroot() { continue else: bb.note("%s exists in sysroot, but is stale (%s vs. %s), removing." % (c, lnk, c + "." + taskhash)) - sstate_clean_manifest(depdir + "/" + lnk, d, workdir) + sstate_clean_manifest(depdir + "/" + lnk, d2, d2.getVar("WORKDIR")) os.unlink(depdir + "/" + c) if os.path.lexists(depdir + "/" + c + ".complete"): os.unlink(depdir + "/" + c + ".complete") @@ -544,16 +575,6 @@ python extend_recipe_sysroot() { os.symlink(c + "." + taskhash, depdir + "/" + c) - d2 = d - destsysroot = recipesysroot - variant = '' - if setscenedeps[dep][2].startswith("virtual:multilib"): - variant = setscenedeps[dep][2].split(":")[2] - if variant != current_variant: - if variant not in multilibs: - multilibs[variant] = get_multilib_datastore(variant, d) - d2 = multilibs[variant] - destsysroot = d2.getVar("RECIPE_SYSROOT") native = False if c.endswith("-native"): -- 2.11.0 -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core