summaryrefslogtreecommitdiffstats
path: root/meta/classes/staging.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/staging.bbclass')
-rw-r--r--meta/classes/staging.bbclass77
1 files changed, 39 insertions, 38 deletions
diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass
index 590be61a62..286d7b7e9e 100644
--- a/meta/classes/staging.bbclass
+++ b/meta/classes/staging.bbclass
@@ -470,8 +470,6 @@ python extend_recipe_sysroot() {
470 multilibs = {} 470 multilibs = {}
471 manifests = {} 471 manifests = {}
472 472
473 installed = []
474
475 for f in os.listdir(depdir): 473 for f in os.listdir(depdir):
476 if not f.endswith(".complete"): 474 if not f.endswith(".complete"):
477 continue 475 continue
@@ -483,16 +481,52 @@ python extend_recipe_sysroot() {
483 os.unlink(f) 481 os.unlink(f)
484 os.unlink(f.replace(".complete", "")) 482 os.unlink(f.replace(".complete", ""))
485 483
484 installed = []
486 for dep in configuredeps: 485 for dep in configuredeps:
487 c = setscenedeps[dep][0] 486 c = setscenedeps[dep][0]
488 taskhash = setscenedeps[dep][5]
489 taskmanifest = depdir + "/" + c + "." + taskhash
490 if mytaskname in ["do_sdk_depends", "do_populate_sdk_ext"] and c.endswith("-initial"): 487 if mytaskname in ["do_sdk_depends", "do_populate_sdk_ext"] and c.endswith("-initial"):
491 bb.note("Skipping initial setscene dependency %s for installation into the sysroot" % c) 488 bb.note("Skipping initial setscene dependency %s for installation into the sysroot" % c)
492 continue 489 continue
493
494 installed.append(c) 490 installed.append(c)
495 491
492 # We want to remove anything which this task previously installed but is no longer a dependency
493 taskindex = depdir + "/" + "index." + mytaskname
494 if os.path.exists(taskindex):
495 potential = []
496 with open(taskindex, "r") as f:
497 for l in f:
498 l = l.strip()
499 if l not in installed:
500 l = depdir + "/" + l
501 if not os.path.exists(l):
502 # Was likely already uninstalled
503 continue
504 potential.append(l)
505 # We need to ensure not other task needs this dependency. We hold the sysroot
506 # lock so we ca search the indexes to check
507 if potential:
508 for i in glob.glob(depdir + "/index.*"):
509 if i.endswith("." + mytaskname):
510 continue
511 with open(i, "r") as f:
512 for l in f:
513 l = l.strip()
514 if l in potential:
515 potential.remove(l)
516 for l in potential:
517 bb.note("Task %s no longer depends on %s, removing from sysroot" % (mytaskname, l))
518 lnk = os.readlink(l)
519 sstate_clean_manifest(depdir + "/" + lnk, d, workdir)
520 os.unlink(l)
521 os.unlink(l + ".complete")
522
523 for dep in configuredeps:
524 c = setscenedeps[dep][0]
525 if c not in installed:
526 continue
527 taskhash = setscenedeps[dep][5]
528 taskmanifest = depdir + "/" + c + "." + taskhash
529
496 if os.path.exists(depdir + "/" + c): 530 if os.path.exists(depdir + "/" + c):
497 lnk = os.readlink(depdir + "/" + c) 531 lnk = os.readlink(depdir + "/" + c)
498 if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"): 532 if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"):
@@ -607,39 +641,6 @@ python extend_recipe_sysroot() {
607 c = setscenedeps[dep][0] 641 c = setscenedeps[dep][0]
608 os.symlink(manifests[dep], depdir + "/" + c + ".complete") 642 os.symlink(manifests[dep], depdir + "/" + c + ".complete")
609 643
610 # We want to remove anything which this task previously installed but is no longer a dependency
611 # This could potentially race against another task which also installed it but still requires it
612 # but the alternative is not doing anything at all and that race window should be small enough
613 # to be insignificant
614 taskindex = depdir + "/" + "index." + mytaskname
615 if os.path.exists(taskindex):
616 potential = []
617 with open(taskindex, "r") as f:
618 for l in f:
619 l = l.strip()
620 if l not in installed:
621 l = depdir + "/" + l
622 if not os.path.exists(l):
623 # Was likely already uninstalled
624 continue
625 potential.append(l)
626 # We need to ensure not other task needs this dependency. We hold the sysroot
627 # lock so we ca search the indexes to check
628 if potential:
629 for i in glob.glob(depdir + "/index.*"):
630 if i.endswith("." + mytaskname):
631 continue
632 with open(i, "r") as f:
633 for l in f:
634 l = l.strip()
635 if l in potential:
636 potential.remove(l)
637 for l in potential:
638 bb.note("Task %s no longer depends on %s, removing from sysroot" % (mytaskname, l))
639 lnk = os.readlink(l)
640 sstate_clean_manifest(depdir + "/" + lnk, d, workdir)
641 os.unlink(l)
642 os.unlink(l + ".complete")
643 with open(taskindex, "w") as f: 644 with open(taskindex, "w") as f:
644 for l in sorted(installed): 645 for l in sorted(installed):
645 f.write(l + "\n") 646 f.write(l + "\n")