summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 8b833d313c..eb06f398ac 100644
--- a/meta/classes/staging.bbclass
+++ b/meta/classes/staging.bbclass
@@ -389,8 +389,6 @@ python extend_recipe_sysroot() {
389 multilibs = {} 389 multilibs = {}
390 manifests = {} 390 manifests = {}
391 391
392 installed = []
393
394 for f in os.listdir(depdir): 392 for f in os.listdir(depdir):
395 if not f.endswith(".complete"): 393 if not f.endswith(".complete"):
396 continue 394 continue
@@ -402,16 +400,52 @@ python extend_recipe_sysroot() {
402 os.unlink(f) 400 os.unlink(f)
403 os.unlink(f.replace(".complete", "")) 401 os.unlink(f.replace(".complete", ""))
404 402
403 installed = []
405 for dep in configuredeps: 404 for dep in configuredeps:
406 c = setscenedeps[dep][0] 405 c = setscenedeps[dep][0]
407 taskhash = setscenedeps[dep][5]
408 taskmanifest = depdir + "/" + c + "." + taskhash
409 if mytaskname in ["do_sdk_depends", "do_populate_sdk_ext"] and c.endswith("-initial"): 406 if mytaskname in ["do_sdk_depends", "do_populate_sdk_ext"] and c.endswith("-initial"):
410 bb.note("Skipping initial setscene dependency %s for installation into the sysroot" % c) 407 bb.note("Skipping initial setscene dependency %s for installation into the sysroot" % c)
411 continue 408 continue
412
413 installed.append(c) 409 installed.append(c)
414 410
411 # We want to remove anything which this task previously installed but is no longer a dependency
412 taskindex = depdir + "/" + "index." + mytaskname
413 if os.path.exists(taskindex):
414 potential = []
415 with open(taskindex, "r") as f:
416 for l in f:
417 l = l.strip()
418 if l not in installed:
419 l = depdir + "/" + l
420 if not os.path.exists(l):
421 # Was likely already uninstalled
422 continue
423 potential.append(l)
424 # We need to ensure not other task needs this dependency. We hold the sysroot
425 # lock so we ca search the indexes to check
426 if potential:
427 for i in glob.glob(depdir + "/index.*"):
428 if i.endswith("." + mytaskname):
429 continue
430 with open(i, "r") as f:
431 for l in f:
432 l = l.strip()
433 if l in potential:
434 potential.remove(l)
435 for l in potential:
436 bb.note("Task %s no longer depends on %s, removing from sysroot" % (mytaskname, l))
437 lnk = os.readlink(l)
438 sstate_clean_manifest(depdir + "/" + lnk, d, workdir)
439 os.unlink(l)
440 os.unlink(l + ".complete")
441
442 for dep in configuredeps:
443 c = setscenedeps[dep][0]
444 if c not in installed:
445 continue
446 taskhash = setscenedeps[dep][5]
447 taskmanifest = depdir + "/" + c + "." + taskhash
448
415 if os.path.exists(depdir + "/" + c): 449 if os.path.exists(depdir + "/" + c):
416 lnk = os.readlink(depdir + "/" + c) 450 lnk = os.readlink(depdir + "/" + c)
417 if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"): 451 if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"):
@@ -526,39 +560,6 @@ python extend_recipe_sysroot() {
526 c = setscenedeps[dep][0] 560 c = setscenedeps[dep][0]
527 os.symlink(manifests[dep], depdir + "/" + c + ".complete") 561 os.symlink(manifests[dep], depdir + "/" + c + ".complete")
528 562
529 # We want to remove anything which this task previously installed but is no longer a dependency
530 # This could potentially race against another task which also installed it but still requires it
531 # but the alternative is not doing anything at all and that race window should be small enough
532 # to be insignificant
533 taskindex = depdir + "/" + "index." + mytaskname
534 if os.path.exists(taskindex):
535 potential = []
536 with open(taskindex, "r") as f:
537 for l in f:
538 l = l.strip()
539 if l not in installed:
540 l = depdir + "/" + l
541 if not os.path.exists(l):
542 # Was likely already uninstalled
543 continue
544 potential.append(l)
545 # We need to ensure not other task needs this dependency. We hold the sysroot
546 # lock so we ca search the indexes to check
547 if potential:
548 for i in glob.glob(depdir + "/index.*"):
549 if i.endswith("." + mytaskname):
550 continue
551 with open(i, "r") as f:
552 for l in f:
553 l = l.strip()
554 if l in potential:
555 potential.remove(l)
556 for l in potential:
557 bb.note("Task %s no longer depends on %s, removing from sysroot" % (mytaskname, l))
558 lnk = os.readlink(l)
559 sstate_clean_manifest(depdir + "/" + lnk, d, workdir)
560 os.unlink(l)
561 os.unlink(l + ".complete")
562 with open(taskindex, "w") as f: 563 with open(taskindex, "w") as f:
563 for l in sorted(installed): 564 for l in sorted(installed):
564 f.write(l + "\n") 565 f.write(l + "\n")