summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/staging.bbclass28
1 files changed, 28 insertions, 0 deletions
diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass
index 6dd21e8ec4..27fcd1efa9 100644
--- a/meta/classes/staging.bbclass
+++ b/meta/classes/staging.bbclass
@@ -469,6 +469,8 @@ python extend_recipe_sysroot() {
multilibs = {}
manifests = {}
+ installed = []
+
for f in os.listdir(depdir):
if not f.endswith(".complete"):
continue
@@ -487,6 +489,9 @@ python extend_recipe_sysroot() {
if mytaskname in ["do_sdk_depends", "do_populate_sdk_ext"] and c.endswith("-initial"):
bb.note("Skipping initial setscene dependency %s for installation into the sysroot" % c)
continue
+
+ installed.append(c)
+
if os.path.exists(depdir + "/" + c):
lnk = os.readlink(depdir + "/" + c)
if lnk == c + "." + taskhash and os.path.exists(depdir + "/" + c + ".complete"):
@@ -601,6 +606,29 @@ python extend_recipe_sysroot() {
c = setscenedeps[dep][0]
os.symlink(manifests[dep], depdir + "/" + c + ".complete")
+ # We want to remove anything which this task previously installed but is no longer a dependency
+ # This could potentially race against another task which also installed it but still requires it
+ # but the alternative is not doing anything at all and that race window should be small enough
+ # to be insignificant
+ taskindex = depdir + "/" + "index." + mytaskname
+ if os.path.exists(taskindex):
+ with open(taskindex, "r") as f:
+ for l in f:
+ l = l.strip()
+ if l not in installed:
+ l = depdir + "/" + l
+ if not os.path.exists(l):
+ # Was likely already uninstalled
+ continue
+ bb.note("Task %s no longer depends on %s, removing from sysroot" % (mytaskname, l))
+ lnk = os.readlink(l)
+ sstate_clean_manifest(depdir + "/" + lnk, d, workdir)
+ os.unlink(l)
+ os.unlink(l + ".complete")
+ with open(taskindex, "w") as f:
+ for l in sorted(installed):
+ f.write(l + "\n")
+
bb.utils.unlockfile(lock)
}
extend_recipe_sysroot[vardepsexclude] += "MACHINE_ARCH PACKAGE_EXTRA_ARCHS SDK_ARCH BUILD_ARCH SDK_OS BB_TASKDEPDATA"