[gnome-continuous-yocto/gnomeostree-3.28-rocko: 5387/8267] rm_work.bbclass: introduce do_build_without_rm_work



commit d83e16a99ccc53d1e30ec934be431dcb932563f9
Author: Patrick Ohly <patrick ohly intel com>
Date:   Wed Mar 29 13:29:49 2017 +0200

    rm_work.bbclass: introduce do_build_without_rm_work
    
    Some classes, for example populate_sdk_ext.bbclass, must be able to
    trigger a full build of a recipe without also triggering
    do_rm_work. They cannot depend on do_build anymore, because that would
    trigger do_rm_work.
    
    Instead, do_build_without_rm_work can be used. It has the exact same
    dependencies as do_build, minus do_rm_work and do_rm_work_all.
    
    This may also be useful in a test build of a recipe where one wants
    to preserve the work directory without having to modify configuration
    settings:
       bitbake foobar:do_build_without_rm_work
    
    (From OE-Core rev: 04a7b8d6d2e86cc4dd1362c775f5e3ac1eb1d19d)
    
    Signed-off-by: Patrick Ohly <patrick ohly intel com>
    Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>

 meta/classes/rm_work.bbclass |   27 ++++++++++++++++++++++++---
 1 files changed, 24 insertions(+), 3 deletions(-)
---
diff --git a/meta/classes/rm_work.bbclass b/meta/classes/rm_work.bbclass
index 2490a69..badeaeb 100644
--- a/meta/classes/rm_work.bbclass
+++ b/meta/classes/rm_work.bbclass
@@ -121,10 +121,24 @@ rm_work_rootfs () {
 }
 rm_work_rootfs[cleandirs] = "${WORKDIR}/rootfs"
 
-# We have to add the do_rmwork task already now, because all tasks are
+# This task can be used instead of do_build to trigger building
+# without also invoking do_rm_work. It only exists when rm_work.bbclass
+# is active, otherwise do_build needs to be used.
+#
+# The intended usage is
+# ${@ d.getVar('RM_WORK_BUILD_WITHOUT') or 'do_build'}
+# in places that previously used just 'do_build'.
+RM_WORK_BUILD_WITHOUT = "do_build_without_rm_work"
+do_build_without_rm_work () {
+    :
+}
+do_build_without_rm_work[noexec] = "1"
+
+# We have to add these tasks already now, because all tasks are
 # meant to be defined before the RecipeTaskPreProcess event triggers.
 # The inject_rm_work event handler then merely changes task dependencies.
 addtask do_rm_work
+addtask do_build_without_rm_work
 addhandler inject_rm_work
 inject_rm_work[eventmask] = "bb.event.RecipeTaskPreProcess"
 python inject_rm_work() {
@@ -133,6 +147,12 @@ python inject_rm_work() {
     # If the recipe name is in the RM_WORK_EXCLUDE, skip the recipe.
     excludes = (d.getVar("RM_WORK_EXCLUDE") or "").split()
     pn = d.getVar("PN")
+
+    # Determine what do_build depends upon, without including do_build
+    # itself or our own special do_rm_work_all.
+    deps = set(bb.build.preceedtask('do_build', True, d))
+    deps.difference_update(('do_build', 'do_rm_work_all'))
+
     if pn in excludes:
         d.delVarFlag('rm_work_rootfs', 'cleandirs')
         d.delVarFlag('rm_work_populatesdk', 'cleandirs')
@@ -144,8 +164,9 @@ python inject_rm_work() {
         # do_build inherits additional runtime dependencies on
         # other recipes and thus will typically run much later than completion of
         # work in the recipe itself.
-        deps = set(bb.build.preceedtask('do_build', True, d))
-        deps.difference_update(('do_build', 'do_rm_work_all'))
         # In practice, addtask() here merely updates the dependencies.
         bb.build.addtask('do_rm_work', 'do_build', ' '.join(deps), d)
+
+    # Always update do_build_without_rm_work dependencies.
+    bb.build.addtask('do_build_without_rm_work', '', ' '.join(deps), d)
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]