[oe-commits] Richard Purdie : pixbufcache: Use sceneQueueComplete event to simplify usage
git at git.openembedded.org
git at git.openembedded.org
Wed Jul 29 23:29:34 UTC 2015
Module: openembedded-core.git
Branch: master-next
Commit: 3a52ba6e6431a778b11499d44b0cafa551f731f3
URL: http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=3a52ba6e6431a778b11499d44b0cafa551f731f3
Author: Richard Purdie <richard.purdie at linuxfoundation.org>
Date: Tue Jul 28 17:51:42 2015 +0100
pixbufcache: Use sceneQueueComplete event to simplify usage
Ensuring the native pixbuf cache is correct after new loaders have
been installed is tricky. This needs to be done without races
and work regardless of whether the build is from sstate or freshly
built for one or more modules.
This adds a hook into base.bbclass which is then triggered by the
code from pixbufcache. This patch is an improved version which
means base.bbclass has no pixbuf knowledge and the mechanism can
be reused in other cases.
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
meta/classes/base.bbclass | 15 ++++++++++++++-
meta/classes/pixbufcache.bbclass | 28 +++++++++-------------------
2 files changed, 23 insertions(+), 20 deletions(-)
diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index e0f1053..bfc78db 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -204,8 +204,10 @@ def buildcfg_neededvars(d):
bb.fatal('The following variable(s) were not set: %s\nPlease set them directly, or choose a MACHINE or DISTRO that sets them.' % ', '.join(pesteruser))
addhandler base_eventhandler
-base_eventhandler[eventmask] = "bb.event.ConfigParsed bb.event.BuildStarted bb.event.RecipePreFinalise"
+base_eventhandler[eventmask] = "bb.event.ConfigParsed bb.event.BuildStarted bb.event.RecipePreFinalise bb.runqueue.sceneQueueComplete"
python base_eventhandler() {
+ import bb.runqueue
+
if isinstance(e, bb.event.ConfigParsed):
if not e.data.getVar("NATIVELSBSTRING", False):
e.data.setVar("NATIVELSBSTRING", lsb_distro_identifier(e.data))
@@ -241,6 +243,17 @@ python base_eventhandler() {
e.data.delVar("PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++")
e.data.delVar("PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}compilerlibs")
+ if isinstance(e, bb.runqueue.sceneQueueComplete):
+ completions = e.data.expand("${STAGING_DIR}/sstatecompletions")
+ if os.path.exists(completions):
+ cmds = set()
+ with open(completions, "r") as f:
+ cmds = set(f)
+ e.data.setVar("completion_function", "\n".join(cmds))
+ e.data.setVarFlag("completion_function", "func", "1")
+ bb.debug(1, "Executing SceneQueue Completion commands: %s" % "\n".join(cmds))
+ bb.build.exec_func("completion_function", e.data)
+ os.remove(completions)
}
CONFIGURESTAMPFILE = "${WORKDIR}/configure.sstate"
diff --git a/meta/classes/pixbufcache.bbclass b/meta/classes/pixbufcache.bbclass
index 9e6ecc8..349967d 100644
--- a/meta/classes/pixbufcache.bbclass
+++ b/meta/classes/pixbufcache.bbclass
@@ -45,6 +45,10 @@ python populate_packages_append() {
d.setVar('pkg_postrm_%s' % pkg, postrm)
}
+gdkpixbuf_complete() {
+ GDK_PIXBUF_FATAL_LOADER=1 ${STAGING_BINDIR_NATIVE}/gdk-pixbuf-query-loaders --update-cache || exit 1
+}
+
#
# Add an sstate postinst hook to update the cache for native packages.
# An error exit during populate_sysroot_setscene allows bitbake to
@@ -52,26 +56,12 @@ python populate_packages_append() {
#
SSTATEPOSTINSTFUNCS_append_class-native = " pixbufcache_sstate_postinst"
+# See base.bbclass for the other half of this
pixbufcache_sstate_postinst() {
- if [ "${BB_CURRENTTASK}" = "populate_sysroot" -o "${BB_CURRENTTASK}" = "populate_sysroot_setscene" ]
- then
- GDK_PIXBUF_FATAL_LOADER=1 gdk-pixbuf-query-loaders --update-cache || exit 1
+ if [ "${BB_CURRENTTASK}" = "populate_sysroot" ]; then
+ ${gdkpixbuf_complete}
+ elif [ "${BB_CURRENTTASK}" = "populate_sysroot_setscene" ]; then
+ echo "${gdkpixbuf_complete}" >> ${STAGING_DIR}/sstatecompletions
fi
}
-# Add all of the dependencies of gdk-pixbuf as dependencies of
-# do_populate_sysroot_setscene so that pixbufcache_sstate_postinst can work
-# (otherwise gdk-pixbuf-query-loaders may not exist or link). Only add
-# gdk-pixbuf-native if we're not building gdk-pixbuf itself.
-#
-# Packages that use this class should extend this variable with their runtime
-# dependencies.
-PIXBUFCACHE_SYSROOT_DEPS = ""
-PIXBUFCACHE_SYSROOT_DEPS_class-native = "\
- ${@['gdk-pixbuf-native:do_populate_sysroot_setscene', '']['${BPN}' == 'gdk-pixbuf']} \
- glib-2.0-native:do_populate_sysroot_setscene libffi-native:do_populate_sysroot_setscene \
- libpng-native:do_populate_sysroot_setscene zlib-native:do_populate_sysroot_setscene \
- harfbuzz-native:do_populate_sysroot_setscene \
- "
-do_populate_sysroot_setscene[depends] += "${PIXBUFCACHE_SYSROOT_DEPS}"
-do_populate_sysroot[depends] += "${@d.getVar('PIXBUFCACHE_SYSROOT_DEPS', True).replace('_setscene','')}"
More information about the Openembedded-commits
mailing list