From 864e49bedbdab480c5ada9588ce8f980f23919dd Mon Sep 17 00:00:00 2001
From: Ulf Samuelsson <u...@emagii.com>
Date: Thu, 17 Jan 2019 19:07:17 +0100
Subject: [PATCH] bb.build.addtask: add simple check for circular dependency
Signed-off-by: Ulf Samuelsson <u...@emagii.com>
---
bitbake/lib/bb/build.py | 48
++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py
index 3e2a94e..887ced1 100644
--- a/bitbake/lib/bb/build.py
+++ b/bitbake/lib/bb/build.py
@@ -43,6 +43,25 @@ logger = logging.getLogger('BitBake.Build')
__mtime_cache = {}
+KNOWN_TASKS = {
+ 'do_fetch' : 1 ,
+ 'do_unpack' : 2 ,
+ 'do_patch' : 3 ,
+ 'do_configure' : 4 ,
+ 'do_compile' : 5 ,
+ 'do_install' : 6 ,
+ 'do_package' : 7 ,
+ 'do_package_data' : 8 ,
+ 'do_rootfs' : 9 ,
+ 'do_image_qa' : 10 ,
+ 'do_image' : 11 ,
+ 'do_image_tar' : 12 ,
+ 'do_image_ubifs' : 12 ,
+ 'do_image_jffs2' : 12 ,
+ 'do_image_complete' : 13 ,
+ 'do_build' : 14
+}
+
def cached_mtime_noerror(f):
if f not in __mtime_cache:
try:
@@ -820,7 +839,34 @@ def add_tasks(tasklist, d):
# don't assume holding a reference
d.setVar('_task_deps', task_deps)
+def circular(after, before):
+ if after == None:
+ return False
+ if before == None:
+ return False
+ for a in after.split():
+ if a in KNOWN_TASKS:
+ for b in before.split():
+ if a == b:
+ return True
+ if b in KNOWN_TASKS:
+ if KNOWN_TASKS[b] < KNOWN_TASKS[a]:
+ return True
+ else:
+ # tasks OK
+ pass
+ else:
+ # b is unknown
+ pass
+ else:
+ # a is unknown
+ pass
+
def addtask(task, before, after, d):
+ if circular(after, before):
+ logger.error("addtask: %s cannot be after %s and before %s" %
(task, after, before))
+ raise
+
if task[:3] != "do_":
task = "do_" + task
@@ -909,3 +955,5 @@ def tasksbetween(task_start, task_end, d):
chain.pop()
follow_chain(task_start, task_end)
return outtasks
+
+
--
2.7.4
--
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto