[oe-commits] Chris Larson : srctree: don't merge tasks if using B

git version control git at git.openembedded.org
Thu Nov 4 18:12:01 UTC 2010


Module: openembedded.git
Branch: master
Commit: 3620e5ee5e3e32b592c949b18d2fc06f58024590
URL:    http://gitweb.openembedded.net/?p=openembedded.git&a=commit;h=3620e5ee5e3e32b592c949b18d2fc06f58024590

Author: Chris Larson <chris_larson at mentor.com>
Date:   Wed Oct 27 20:22:34 2010 -0700

srctree: don't merge tasks if using B

Signed-off-by: Chris Larson <chris_larson at mentor.com>

---

 classes/srctree.bbclass |  170 +++++++++++++++++++++++------------------------
 1 files changed, 84 insertions(+), 86 deletions(-)

diff --git a/classes/srctree.bbclass b/classes/srctree.bbclass
index 1a88613..ca19b82 100644
--- a/classes/srctree.bbclass
+++ b/classes/srctree.bbclass
@@ -21,100 +21,98 @@ inherit clean
 S = "${FILE_DIRNAME}"
 SRC_URI = ""
 
+def remove_tasks(deltasks, d):
+    for task in filter(lambda k: d.getVarFlag(k, "task"), d.keys()):
+        deps = d.getVarFlag(task, "deps")
+        for preptask in deltasks:
+            if preptask in deps:
+                deps.remove(preptask)
+        d.setVarFlag(task, "deps", deps)
 
 def merge_tasks(d):
-	"""
-	merge_tasks performs two operations:
-	1) removes do_patch and its deps from the build entirely.
-	2) merges all of the operations that occur prior to do_populate_sysroot
-	into do_populate_sysroot.
-
-	This is necessary, because of recipe variants (normal, native, cross,
-	sdk).  If a bitbake run happens to want to build more than one of
-	these variants in a single run, it's possible for them to step on one
-	another's toes, due to the shared ${S}.  Interleaved
-	configure/compile/install amongst variants will break things badly.
-	"""
-	from itertools import chain
-	from bb import note
-
-	def __gather_taskdeps(task, seen):
-		for dep in d.getVarFlag(task, "deps"):
-			if not dep in seen:
-				__gather_taskdeps(dep, seen)
-		if not task in seen:
-			seen.append(task)
-
-	def gather_taskdeps(task):
-		items = []
-		__gather_taskdeps(task, items)
-		return items
-
-	newtask = "do_populate_sysroot_post"
-	mergedtasks = gather_taskdeps(newtask)
-	mergedtasks.pop()
-	deltasks = gather_taskdeps("do_patch")
-
-	for task in (key for key in d.keys()
-	             if d.getVarFlag(key, "task") and
-	             not key in mergedtasks):
-		deps = d.getVarFlag(task, "deps")
-		for mergetask in mergedtasks:
-			if mergetask in (d.getVarFlag(task, "recrdeptask"),
-			                 d.getVarFlag(task, "recdeptask"),
-			                 d.getVarFlag(task, "deptask")):
-				continue
-
-			if mergetask in deps:
-				deps.remove(mergetask)
-				#note("removing dep on %s from %s" % (mergetask, task))
-
-				if not mergetask in deltasks and \
-				   not newtask in deps:
-					#note("adding dep on %s to %s" % (newtask, task))
-					deps.append(newtask)
-		d.setVarFlag(task, "deps", deps)
-
-	for task in mergedtasks[:-1]:
-		deps = d.getVarFlag(task, "deps")
-		for deltask in deltasks:
-			if deltask in deps:
-				deps.remove(deltask)
-		d.setVarFlag(task, "deps", deps)
-
-	# Pull cross recipe task deps over
-	depends = []
-	deptask = []
-	for task in mergedtasks[:-1]:
-	    if not task in deltasks:
-		depends.append(d.getVarFlag(task, "depends") or "")
-		deptask.append(d.getVarFlag(task, "deptask") or "")
-
-	d.setVarFlag("do_populate_sysroot_post", "depends", " ".join(depends))
-	d.setVarFlag("do_populate_sysroot_post", "deptask", " ".join(deptask))
+    """
+    Merges all of the operations that occur prior to do_populate_sysroot
+    into do_populate_sysroot.
+
+    This is necessary because of recipe variants (normal, native, cross,
+    sdk).  If a bitbake run happens to want to build more than one of
+    these variants in a single run, it's possible for them to step on one
+    another's toes, due to the shared ${S}.  Interleaved
+    configure/compile/install amongst variants will break things badly.
+    """
+    from itertools import chain
+    from bb import note
+
+    def __gather_taskdeps(task, seen):
+        for dep in d.getVarFlag(task, "deps"):
+            if not dep in seen:
+                __gather_taskdeps(dep, seen)
+        if not task in seen:
+            seen.append(task)
+
+    def gather_taskdeps(task):
+        items = []
+        __gather_taskdeps(task, items)
+        return items
+
+    newtask = "do_populate_sysroot_post"
+    mergedtasks = gather_taskdeps(newtask)
+    mergedtasks.pop()
+
+    for task in (key for key in d.keys()
+                 if d.getVarFlag(key, "task") and
+                 not key in mergedtasks):
+        deps = d.getVarFlag(task, "deps")
+        for mergetask in mergedtasks:
+            if mergetask in (d.getVarFlag(task, "recrdeptask"),
+                             d.getVarFlag(task, "recdeptask"),
+                             d.getVarFlag(task, "deptask")):
+                continue
+
+            if mergetask in deps:
+                deps.remove(mergetask)
+                #note("removing dep on %s from %s" % (mergetask, task))
+
+                if not newtask in deps:
+                    #note("adding dep on %s to %s" % (newtask, task))
+                    deps.append(newtask)
+        d.setVarFlag(task, "deps", deps)
+
+    # Pull cross recipe task deps over
+    depends = []
+    deptask = []
+    for task in mergedtasks[:-1]:
+        depends.append(d.getVarFlag(task, "depends") or "")
+        deptask.append(d.getVarFlag(task, "deptask") or "")
+
+    d.setVarFlag("do_populate_sysroot_post", "depends", " ".join(depends))
+    d.setVarFlag("do_populate_sysroot_post", "deptask", " ".join(deptask))
 
 python () {
-    merge_tasks(d)
+    remove_tasks(["do_patch", "do_unpack", "do_fetch"], d)
+    b = d.getVar("B", True)
+    if not b or b == d.getVar("S", True):
+        merge_tasks(d)
 }
 
 # Manually run do_install & all of its deps
 python do_populate_sysroot_post () {
-	from os.path import exists
-	from bb.build import exec_task, exec_func
-	from bb import note
-
-	stamp = d.getVar("STAMP", True)
-
-	def rec_exec_task(task, seen):
-		for dep in d.getVarFlag(task, "deps"):
-			if not dep in seen:
-				rec_exec_task(dep, seen)
-		seen.add(task)
-		if not exists("%s.%s" % (stamp, task)):
-		    note("%s: executing task %s" % (d.getVar("PF", True), task))
-		    exec_func(task, d)
-
-	rec_exec_task("do_populate_sysroot", set())
+    from os.path import exists
+    from bb.build import exec_task, exec_func
+    from bb import note
+
+    stamp = d.getVar("STAMP", True)
+
+    def rec_exec_task(task, seen):
+        for dep in d.getVarFlag(task, "deps"):
+            if not dep in seen:
+                rec_exec_task(dep, seen)
+        seen.add(task)
+        if not exists("%s.%s" % (stamp, task)):
+            note("%s: executing task %s" % (d.getVar("PF", True), task))
+            exec_func(task, d)
+
+    rec_exec_task("do_populate_sysroot", set())
 }
 addtask populate_sysroot_post after do_populate_sysroot
 do_populate_sysroot_post[lockfiles] += "${S}/.lock"





More information about the Openembedded-commits mailing list