summaryrefslogtreecommitdiffstats
path: root/meta/classes/staging.bbclass
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2019-11-04 17:27:52 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-11-07 15:12:00 +0000
commit61f5370c9b4a03950c830e360411090bc323ae55 (patch)
treebb2c3040717304592124a004ffb627fe69a8d85a /meta/classes/staging.bbclass
parentd427f58977a46f2bda4b7f30cf83793373e401d3 (diff)
downloadpoky-61f5370c9b4a03950c830e360411090bc323ae55.tar.gz
staging: Handle files moving between dependencies
Currently, if files move between recipes, do_prepare_sysroot can fail with a message like Exception: FileExistsError: [Errno 17] File exists: 'TMPDIR/sysroots-components/core2-64/libx11/usr/include/X11/extensions/XKBgeom.h' -> 'TMPDIR/work/core2-64-poky-linux/gtk+3/3.24.8-r0/recipe-sysroot/usr/include/X11/extensions/XKBgeom.h' This is because files are removed and then added per package. What needs to happen is all removes need to be processed, then all additions. This patch changes the code to process in two phases, removals first, then additions, which avoids the problem. (From OE-Core rev: e3e5ace6e68d5fe68e4add301a44c1a1b8607411) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/staging.bbclass')
-rw-r--r--meta/classes/staging.bbclass16
1 files changed, 15 insertions, 1 deletions
diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass
index 55a9b52ed2..cca0b7e0d6 100644
--- a/meta/classes/staging.bbclass
+++ b/meta/classes/staging.bbclass
@@ -449,6 +449,7 @@ python extend_recipe_sysroot() {
449 msg_exists = [] 449 msg_exists = []
450 msg_adding = [] 450 msg_adding = []
451 451
452 # Handle all removals first since files may move between recipes
452 for dep in configuredeps: 453 for dep in configuredeps:
453 c = setscenedeps[dep][0] 454 c = setscenedeps[dep][0]
454 if c not in installed: 455 if c not in installed:
@@ -459,7 +460,6 @@ python extend_recipe_sysroot() {
459 if os.path.exists(depdir + "/" + c): 460 if os.path.exists(depdir + "/" + c):
460 lnk = os.readlink(depdir + "/" + c) 461 lnk = os.readlink(depdir + "/" + c)
461 if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"): 462 if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"):
462 msg_exists.append(c)
463 continue 463 continue
464 else: 464 else:
465 bb.note("%s exists in sysroot, but is stale (%s vs. %s), removing." % (c, lnk, c + "." + taskhash)) 465 bb.note("%s exists in sysroot, but is stale (%s vs. %s), removing." % (c, lnk, c + "." + taskhash))
@@ -470,6 +470,20 @@ python extend_recipe_sysroot() {
470 elif os.path.lexists(depdir + "/" + c): 470 elif os.path.lexists(depdir + "/" + c):
471 os.unlink(depdir + "/" + c) 471 os.unlink(depdir + "/" + c)
472 472
473 # Now handle installs
474 for dep in configuredeps:
475 c = setscenedeps[dep][0]
476 if c not in installed:
477 continue
478 taskhash = setscenedeps[dep][5]
479 taskmanifest = depdir + "/" + c + "." + taskhash
480
481 if os.path.exists(depdir + "/" + c):
482 lnk = os.readlink(depdir + "/" + c)
483 if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"):
484 msg_exists.append(c)
485 continue
486
473 msg_adding.append(c) 487 msg_adding.append(c)
474 488
475 os.symlink(c + "." + taskhash, depdir + "/" + c) 489 os.symlink(c + "." + taskhash, depdir + "/" + c)