* Before this patch every inheritance of this class rebuilt the full icon cache 
at the first boot.
* With this patch the icon cache will only be build once at the first boot and 
on pkg installations that require it.
* This patch reduces the time needed for the first boot from 96 minutes to 5 
minutes on the test machine.
* Build-tested incremental (BB_SIGNATURE_HANDLER = "OEBasicHash") & from scratch
* Run-tested with systemd and opkg

Signed-off-by: Samuel Stirtzel <[email protected]>
Signed-off-by: Andreas Müller <[email protected]>
---
 meta/classes/gtk-icon-cache.bbclass                |   19 +++++++++-------
 .../gtk+/gtk-update-icon-cache-runonce.bb          |   23 ++++++++++++++++++++
 .../gtk-update-icon-cache-runonce.in               |   16 +++++++++++++
 3 files changed, 50 insertions(+), 8 deletions(-)
 create mode 100644 meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce.bb
 create mode 100644 
meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce/gtk-update-icon-cache-runonce.in

diff --git a/meta/classes/gtk-icon-cache.bbclass 
b/meta/classes/gtk-icon-cache.bbclass
index 60e3401..b48aabe 100644
--- a/meta/classes/gtk-icon-cache.bbclass
+++ b/meta/classes/gtk-icon-cache.bbclass
@@ -9,14 +9,16 @@ if [ "x$D" != "x" ]; then
         exit 1
 fi
 
-# Update the pixbuf loaders in case they haven't been registered yet
-GDK_PIXBUF_MODULEDIR=${libdir}/gdk-pixbuf-2.0/2.10.0/loaders 
gdk-pixbuf-query-loaders --update-cache
-
-for icondir in /usr/share/icons/* ; do
-    if [ -d $icondir ] ; then
-        gtk-update-icon-cache -fqt  $icondir
-    fi
-done
+# do not execute in case a final run-once is waiting
+if [ ! -e ${sysconfdir}/init.d/gtk-update-icon-cache-runonce ]; then
+    # Update the pixbuf loaders in case they haven't been registered yet
+    GDK_PIXBUF_MODULEDIR=${libdir}/gdk-pixbuf-2.0/2.10.0/loaders 
gdk-pixbuf-query-loaders --update-cache
+    for icondir in /usr/share/icons/* ; do
+        if [ -d $icondir ] ; then
+            gtk-update-icon-cache -fqt  $icondir
+        fi
+    done
+fi
 }
 
 gtk_icon_cache_postrm() {
@@ -56,3 +58,4 @@ python populate_packages_append () {
                d.setVar('pkg_postrm_%s' % pkg, postrm)
 }
 
+RDEPENDS += "gtk-update-icon-cache-runonce"
diff --git a/meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce.bb 
b/meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce.bb
new file mode 100644
index 0000000..55bec67
--- /dev/null
+++ b/meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Init script calling gtk-update-icon-cache once"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = 
"file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
+
+SRC_URI = "file://gtk-update-icon-cache-runonce.in"
+
+INIT_SEQ_NUM = "99"
+
+inherit update-rc.d
+
+do_install() {
+       install -d ${D}${sysconfdir}/init.d
+       sed -e 's,@libdir@,${libdir},g' \
+            -e 's,@datadir@,${datadir},g' \
+            -e 's,@sysconfdir@,${sysconfdir},g' \
+            -e 's,@INIT_SEQ_NUM@,${INIT_SEQ_NUM},g' \
+             < ${WORKDIR}/gtk-update-icon-cache-runonce.in \
+             > ${D}${sysconfdir}/init.d/gtk-update-icon-cache-runonce
+       chmod 755 ${D}${sysconfdir}/init.d/gtk-update-icon-cache-runonce
+}
+
+INITSCRIPT_NAME = "gtk-update-icon-cache-runonce"
+INITSCRIPT_PARAMS = "start ${INIT_SEQ_NUM} S ."
diff --git 
a/meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce/gtk-update-icon-cache-runonce.in
 
b/meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce/gtk-update-icon-cache-runonce.in
new file mode 100644
index 0000000..8952e1a
--- /dev/null
+++ 
b/meta/recipes-gnome/gtk+/gtk-update-icon-cache-runonce/gtk-update-icon-cache-runonce.in
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+echo 'Updating the GTK icon cache...'
+
+# Update the pixbuf loaders in case they haven't been registered yet
+GDK_PIXBUF_MODULEDIR=@libdir@/gdk-pixbuf-2.0/2.10.0/loaders 
gdk-pixbuf-query-loaders --update-cache
+
+for icondir in @datadir@/icons/* ; do
+    if [ -d $icondir ] ; then
+        gtk-update-icon-cache -fqt $icondir
+    fi
+done
+
+# This script should only run once at the first boot of the machine
+rm -f @sysconfdir@/rcS.d/S@INIT_SEQ_NUM@gtk-update-icon-cache-runonce
+rm -f @sysconfdir@/init.d/gtk-update-icon-cache-runonce
-- 
1.7.6.5


_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to