All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Create GIO module cache on postinst/rm
@ 2016-03-21 18:29 Jussi Kukkonen
  2016-03-21 18:29 ` [PATCH 1/2] glib-2.0: Install gio-querymodules in main package Jussi Kukkonen
  2016-03-21 18:29 ` [PATCH 2/2] gio-module-cache: Add class for Gio modules Jussi Kukkonen
  0 siblings, 2 replies; 5+ messages in thread
From: Jussi Kukkonen @ 2016-03-21 18:29 UTC (permalink / raw)
  To: openembedded-core

GIO module cache is used by GIO at runtime to avoid opening all modules
just to find out which extension points they implement. The patch
uses gio-querymodules tool to regenerate the cache at postinst/postrm.

So nothing is really broken currently, this is a runtime optimization.

Cheers,
  Jussi

The following changes since commit 068afc5d436c716591a54f7d6e1944d8b6f9a198:

  tzdata: update to 2016b (2016-03-20 23:12:32 +0000)

are available in the git repository at:

  git://git.yoctoproject.org/poky-contrib jku/gio-module-cache
  http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=jku/gio-module-cache

Jussi Kukkonen (2):
  glib-2.0: Install gio-querymodules in main package
  gio-module-cache: Add class for Gio modules

 meta/classes/gio-module-cache.bbclass              | 36 ++++++++++++++++++++++
 meta/recipes-core/glib-2.0/glib.inc                | 12 +++++---
 .../glib-networking/glib-networking_2.46.1.bb      |  2 +-
 meta/recipes-gnome/gnome/gconf_3.2.6.bb            |  2 +-
 .../postinst-intercepts/update_gio_module_cache    |  7 +++++
 5 files changed, 53 insertions(+), 6 deletions(-)
 create mode 100644 meta/classes/gio-module-cache.bbclass
 create mode 100644 scripts/postinst-intercepts/update_gio_module_cache

-- 
2.1.4



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] glib-2.0: Install gio-querymodules in main package
  2016-03-21 18:29 [PATCH 0/2] Create GIO module cache on postinst/rm Jussi Kukkonen
@ 2016-03-21 18:29 ` Jussi Kukkonen
  2016-03-21 23:30   ` Burton, Ross
  2016-03-21 18:29 ` [PATCH 2/2] gio-module-cache: Add class for Gio modules Jussi Kukkonen
  1 sibling, 1 reply; 5+ messages in thread
From: Jussi Kukkonen @ 2016-03-21 18:29 UTC (permalink / raw)
  To: openembedded-core

gio-querymodules should be used whenever new Gio modules are
installed (to regenerate the module cache) so it should be
available by default.

Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
---
 meta/recipes-core/glib-2.0/glib.inc | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/meta/recipes-core/glib-2.0/glib.inc b/meta/recipes-core/glib-2.0/glib.inc
index 35153fa..c0f9e0d 100644
--- a/meta/recipes-core/glib-2.0/glib.inc
+++ b/meta/recipes-core/glib-2.0/glib.inc
@@ -22,7 +22,7 @@ DEPENDS_append = " ${@bb.utils.contains('PTEST_ENABLED', '1', ' dbus', '', d)}"
 DEPENDS_class-native = "pkgconfig-native gettext-native libffi-native zlib-native"
 DEPENDS_class-nativesdk = "nativesdk-libtool nativesdk-gettext nativesdk-libffi nativesdk-zlib glib-2.0-native"
 
-PACKAGES =+ "${PN}-utils ${PN}-codegen"
+PACKAGES += "${PN}-utils ${PN}-codegen"
 
 LEAD_SONAME = "libglib-2.0.*"
 FILES_${PN}-utils = "${bindir}/* ${datadir}/glib-2.0/gettext"
@@ -48,8 +48,12 @@ do_configure_prepend() {
 	sed -i -e '1s,#!.*,#!${USRBINPATH}/env python,' ${S}/gio/gdbus-2.0/codegen/gdbus-codegen.in
 }
 
-FILES_${PN} = "${libdir}/lib*${SOLIBS} ${libdir}/gio ${datadir}/glib-2.0/schemas \
-               ${datadir}/glib-2.0/gettext/mkinstalldirs ${datadir}/glib-2.0/gettext/po/Makefile.in.in"
+FILES_${PN} = "${libdir}/lib*${SOLIBS} \
+               ${libdir}/gio \
+               ${bindir}/gio-querymodules \
+               ${datadir}/glib-2.0/schemas \
+               ${datadir}/glib-2.0/gettext/mkinstalldirs \
+               ${datadir}/glib-2.0/gettext/po/Makefile.in.in"
 FILES_${PN}-dev += "${libdir}/glib-2.0/include \
                     ${libdir}/gio/modules/lib*${SOLIBSDEV} \
                     ${libdir}/gio/modules/*.la"
-- 
2.1.4



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] gio-module-cache: Add class for Gio modules
  2016-03-21 18:29 [PATCH 0/2] Create GIO module cache on postinst/rm Jussi Kukkonen
  2016-03-21 18:29 ` [PATCH 1/2] glib-2.0: Install gio-querymodules in main package Jussi Kukkonen
@ 2016-03-21 18:29 ` Jussi Kukkonen
  2016-03-21 20:16   ` Martin Jansa
  1 sibling, 1 reply; 5+ messages in thread
From: Jussi Kukkonen @ 2016-03-21 18:29 UTC (permalink / raw)
  To: openembedded-core

The new class uses gio-querymodules tool on postinst and postrm:
this regenerates the module cache which is useful to avoid loading
modules that are not neededi at runtime. If a Gio module is not
listed in the cache file it will always get loaded.

* Add a postinst-intercept 'gio-module-cache': it runs
  gio-querymodules using qemuwrapper. This is required because the tool
  actually loads the modules to generate the cache.
* Add a gio-module-cache class that adds postinstall and postrm
  scripts. In the sysroot population case use the new intercept.
* Inherit the new class in glib-2.0, glib-networking and gconf.

Fixes [YOCTO #9241].

Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
---
 meta/classes/gio-module-cache.bbclass              | 36 ++++++++++++++++++++++
 meta/recipes-core/glib-2.0/glib.inc                |  2 +-
 .../glib-networking/glib-networking_2.46.1.bb      |  2 +-
 meta/recipes-gnome/gnome/gconf_3.2.6.bb            |  2 +-
 .../postinst-intercepts/update_gio_module_cache    |  7 +++++
 5 files changed, 46 insertions(+), 3 deletions(-)
 create mode 100644 meta/classes/gio-module-cache.bbclass
 create mode 100644 scripts/postinst-intercepts/update_gio_module_cache

diff --git a/meta/classes/gio-module-cache.bbclass b/meta/classes/gio-module-cache.bbclass
new file mode 100644
index 0000000..4d59f5c
--- /dev/null
+++ b/meta/classes/gio-module-cache.bbclass
@@ -0,0 +1,36 @@
+DEPENDS += "qemu-native"
+inherit qemu
+
+GIO_MODULE_PACKAGES ??= "${PN}"
+
+gio_module_cache_common() {
+if [ "x$D" != "x" ]; then
+	$INTERCEPT_DIR/postinst_intercept update_gio_module_cache ${PKG} \
+		mlprefix=${MLPREFIX} \
+		libdir=${libdir} \
+                base_libdir=${base_libdir} \
+                bindir=${bindir}
+else
+        gio-querymodules ${libdir}/gio/modules/
+fi
+}
+
+python populate_packages_append () {
+    packages = d.getVar('GIO_MODULE_PACKAGES', True).split()
+
+    for pkg in packages:
+        bb.note("adding gio-module-cache postinst and postrm scripts to %s" % pkg)
+
+        postinst = d.getVar('pkg_postinst_%s' % pkg, True)
+        if not postinst:
+            postinst = '#!/bin/sh\n'
+        postinst += d.getVar('gio_module_cache_common', True)
+        d.setVar('pkg_postinst_%s' % pkg, postinst)
+
+        postrm = d.getVar('pkg_postrm_%s' % pkg, True)
+        if not postrm:
+            postrm = '#!/bin/sh\n'
+        postrm += d.getVar('gio_module_cache_common', True)
+        d.setVar('pkg_postrm_%s' % pkg, postrm)
+}
+
diff --git a/meta/recipes-core/glib-2.0/glib.inc b/meta/recipes-core/glib-2.0/glib.inc
index c0f9e0d..baba7e5 100644
--- a/meta/recipes-core/glib-2.0/glib.inc
+++ b/meta/recipes-core/glib-2.0/glib.inc
@@ -27,7 +27,7 @@ PACKAGES += "${PN}-utils ${PN}-codegen"
 LEAD_SONAME = "libglib-2.0.*"
 FILES_${PN}-utils = "${bindir}/* ${datadir}/glib-2.0/gettext"
 
-inherit autotools gettext gtk-doc pkgconfig ptest-gnome upstream-version-is-even bash-completion
+inherit autotools gettext gtk-doc pkgconfig ptest-gnome upstream-version-is-even bash-completion gio-module-cache
 
 S = "${WORKDIR}/glib-${PV}"
 
diff --git a/meta/recipes-core/glib-networking/glib-networking_2.46.1.bb b/meta/recipes-core/glib-networking/glib-networking_2.46.1.bb
index 70be87c..749ac98 100644
--- a/meta/recipes-core/glib-networking/glib-networking_2.46.1.bb
+++ b/meta/recipes-core/glib-networking/glib-networking_2.46.1.bb
@@ -22,7 +22,7 @@ PACKAGECONFIG[pkcs11] = "--with-pkcs11,--without-pkcs11,p11-kit"
 
 EXTRA_OECONF = "--without-gnome-proxy"
 
-inherit gnomebase gettext upstream-version-is-even
+inherit gnomebase gettext upstream-version-is-even gio-module-cache
 
 FILES_${PN} += "${libdir}/gio/modules/libgio*.so ${datadir}/dbus-1/services/"
 FILES_${PN}-dev += "${libdir}/gio/modules/libgio*.la"
diff --git a/meta/recipes-gnome/gnome/gconf_3.2.6.bb b/meta/recipes-gnome/gnome/gconf_3.2.6.bb
index feaf080..e3af3d0 100644
--- a/meta/recipes-gnome/gnome/gconf_3.2.6.bb
+++ b/meta/recipes-gnome/gnome/gconf_3.2.6.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
 
 DEPENDS = "glib-2.0 dbus dbus-glib libxml2 intltool-native"
 
-inherit gnomebase gtk-doc gettext gobject-introspection
+inherit gnomebase gtk-doc gettext gobject-introspection gio-module-cache
 
 SRC_URI = "${GNOME_MIRROR}/GConf/${@gnome_verdir("${PV}")}/GConf-${PV}.tar.xz;name=archive \
            file://remove_plus_from_invalid_characters_list.patch \
diff --git a/scripts/postinst-intercepts/update_gio_module_cache b/scripts/postinst-intercepts/update_gio_module_cache
new file mode 100644
index 0000000..c1b6d66
--- /dev/null
+++ b/scripts/postinst-intercepts/update_gio_module_cache
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+set -e
+
+PSEUDO_UNLOAD=1 qemuwrapper -L $D -E LD_LIBRARY_PATH=$D/${libdir}:$D/${base_libdir} \
+        $D${bindir}/gio-querymodules $D${libdir}/gio/modules/
+
-- 
2.1.4



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/2] gio-module-cache: Add class for Gio modules
  2016-03-21 18:29 ` [PATCH 2/2] gio-module-cache: Add class for Gio modules Jussi Kukkonen
@ 2016-03-21 20:16   ` Martin Jansa
  0 siblings, 0 replies; 5+ messages in thread
From: Martin Jansa @ 2016-03-21 20:16 UTC (permalink / raw)
  To: Jussi Kukkonen; +Cc: openembedded-core

[-- Attachment #1: Type: text/plain, Size: 5616 bytes --]

On Mon, Mar 21, 2016 at 08:29:33PM +0200, Jussi Kukkonen wrote:
> The new class uses gio-querymodules tool on postinst and postrm:
> this regenerates the module cache which is useful to avoid loading
> modules that are not neededi at runtime. If a Gio module is not
> listed in the cache file it will always get loaded.
> 
> * Add a postinst-intercept 'gio-module-cache': it runs
>   gio-querymodules using qemuwrapper. This is required because the tool
>   actually loads the modules to generate the cache.
> * Add a gio-module-cache class that adds postinstall and postrm
>   scripts. In the sysroot population case use the new intercept.
> * Inherit the new class in glib-2.0, glib-networking and gconf.
> 
> Fixes [YOCTO #9241].
> 
> Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
> ---
>  meta/classes/gio-module-cache.bbclass              | 36 ++++++++++++++++++++++
>  meta/recipes-core/glib-2.0/glib.inc                |  2 +-
>  .../glib-networking/glib-networking_2.46.1.bb      |  2 +-
>  meta/recipes-gnome/gnome/gconf_3.2.6.bb            |  2 +-
>  .../postinst-intercepts/update_gio_module_cache    |  7 +++++
>  5 files changed, 46 insertions(+), 3 deletions(-)
>  create mode 100644 meta/classes/gio-module-cache.bbclass
>  create mode 100644 scripts/postinst-intercepts/update_gio_module_cache
> 
> diff --git a/meta/classes/gio-module-cache.bbclass b/meta/classes/gio-module-cache.bbclass
> new file mode 100644
> index 0000000..4d59f5c
> --- /dev/null
> +++ b/meta/classes/gio-module-cache.bbclass
> @@ -0,0 +1,36 @@
> +DEPENDS += "qemu-native"
> +inherit qemu
> +
> +GIO_MODULE_PACKAGES ??= "${PN}"
> +
> +gio_module_cache_common() {
> +if [ "x$D" != "x" ]; then
> +	$INTERCEPT_DIR/postinst_intercept update_gio_module_cache ${PKG} \
> +		mlprefix=${MLPREFIX} \
> +		libdir=${libdir} \
> +                base_libdir=${base_libdir} \
> +                bindir=${bindir}
> +else
> +        gio-querymodules ${libdir}/gio/modules/
> +fi

Don't mix tabs and spaces.

> +}
> +
> +python populate_packages_append () {
> +    packages = d.getVar('GIO_MODULE_PACKAGES', True).split()
> +
> +    for pkg in packages:
> +        bb.note("adding gio-module-cache postinst and postrm scripts to %s" % pkg)
> +
> +        postinst = d.getVar('pkg_postinst_%s' % pkg, True)
> +        if not postinst:
> +            postinst = '#!/bin/sh\n'
> +        postinst += d.getVar('gio_module_cache_common', True)
> +        d.setVar('pkg_postinst_%s' % pkg, postinst)
> +
> +        postrm = d.getVar('pkg_postrm_%s' % pkg, True)
> +        if not postrm:
> +            postrm = '#!/bin/sh\n'
> +        postrm += d.getVar('gio_module_cache_common', True)
> +        d.setVar('pkg_postrm_%s' % pkg, postrm)
> +}
> +
> diff --git a/meta/recipes-core/glib-2.0/glib.inc b/meta/recipes-core/glib-2.0/glib.inc
> index c0f9e0d..baba7e5 100644
> --- a/meta/recipes-core/glib-2.0/glib.inc
> +++ b/meta/recipes-core/glib-2.0/glib.inc
> @@ -27,7 +27,7 @@ PACKAGES += "${PN}-utils ${PN}-codegen"
>  LEAD_SONAME = "libglib-2.0.*"
>  FILES_${PN}-utils = "${bindir}/* ${datadir}/glib-2.0/gettext"
>  
> -inherit autotools gettext gtk-doc pkgconfig ptest-gnome upstream-version-is-even bash-completion
> +inherit autotools gettext gtk-doc pkgconfig ptest-gnome upstream-version-is-even bash-completion gio-module-cache
>  
>  S = "${WORKDIR}/glib-${PV}"
>  
> diff --git a/meta/recipes-core/glib-networking/glib-networking_2.46.1.bb b/meta/recipes-core/glib-networking/glib-networking_2.46.1.bb
> index 70be87c..749ac98 100644
> --- a/meta/recipes-core/glib-networking/glib-networking_2.46.1.bb
> +++ b/meta/recipes-core/glib-networking/glib-networking_2.46.1.bb
> @@ -22,7 +22,7 @@ PACKAGECONFIG[pkcs11] = "--with-pkcs11,--without-pkcs11,p11-kit"
>  
>  EXTRA_OECONF = "--without-gnome-proxy"
>  
> -inherit gnomebase gettext upstream-version-is-even
> +inherit gnomebase gettext upstream-version-is-even gio-module-cache
>  
>  FILES_${PN} += "${libdir}/gio/modules/libgio*.so ${datadir}/dbus-1/services/"
>  FILES_${PN}-dev += "${libdir}/gio/modules/libgio*.la"
> diff --git a/meta/recipes-gnome/gnome/gconf_3.2.6.bb b/meta/recipes-gnome/gnome/gconf_3.2.6.bb
> index feaf080..e3af3d0 100644
> --- a/meta/recipes-gnome/gnome/gconf_3.2.6.bb
> +++ b/meta/recipes-gnome/gnome/gconf_3.2.6.bb
> @@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
>  
>  DEPENDS = "glib-2.0 dbus dbus-glib libxml2 intltool-native"
>  
> -inherit gnomebase gtk-doc gettext gobject-introspection
> +inherit gnomebase gtk-doc gettext gobject-introspection gio-module-cache
>  
>  SRC_URI = "${GNOME_MIRROR}/GConf/${@gnome_verdir("${PV}")}/GConf-${PV}.tar.xz;name=archive \
>             file://remove_plus_from_invalid_characters_list.patch \
> diff --git a/scripts/postinst-intercepts/update_gio_module_cache b/scripts/postinst-intercepts/update_gio_module_cache
> new file mode 100644
> index 0000000..c1b6d66
> --- /dev/null
> +++ b/scripts/postinst-intercepts/update_gio_module_cache
> @@ -0,0 +1,7 @@
> +#!/bin/sh
> +
> +set -e
> +
> +PSEUDO_UNLOAD=1 qemuwrapper -L $D -E LD_LIBRARY_PATH=$D/${libdir}:$D/${base_libdir} \
> +        $D${bindir}/gio-querymodules $D${libdir}/gio/modules/
> +
> -- 
> 2.1.4
> 
> -- 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core

-- 
Martin 'JaMa' Jansa     jabber: Martin.Jansa@gmail.com

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 188 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] glib-2.0: Install gio-querymodules in main package
  2016-03-21 18:29 ` [PATCH 1/2] glib-2.0: Install gio-querymodules in main package Jussi Kukkonen
@ 2016-03-21 23:30   ` Burton, Ross
  0 siblings, 0 replies; 5+ messages in thread
From: Burton, Ross @ 2016-03-21 23:30 UTC (permalink / raw)
  To: Jussi Kukkonen; +Cc: OE-core

[-- Attachment #1: Type: text/plain, Size: 1259 bytes --]

On 21 March 2016 at 18:29, Jussi Kukkonen <jussi.kukkonen@intel.com> wrote:

> gio-querymodules should be used whenever new Gio modules are
> installed (to regenerate the module cache) so it should be
> available by default.
>

packages/corei7-64-poky-linux/glib-2.0/glib-2.0: FILELIST: added
"/usr/bin/gio-querymodules /usr/share/glib-2.0/gettext/po/Makefile.in.in"
  * FILES: added "/usr/bin/gio-querymodules"
packages/corei7-64-poky-linux/glib-2.0/glib-2.0: PKG changed from
libglib-2.0-0 to glib-2.0 [default] - may indicate debian renaming failure

(and another few pages of rename warnings as everything renamed from
libglib-2.0-0-locale-foo-bar to glib-2.0-locale-foo-bar)

Basically the debian renamer doesn't take effect if there are binaries in
the package.  Maybe we need to inherit lib_package (if possible) and put
key binaries (such as this) into libglib-2.0-bin and the rest into -utils.
A fair number of the utils could be moved to -dev anyway, such as
genmarshal and mkenums.

Looking at this did show some other odd file placement in the glib recipe
though:
* gschema.dtd in PN instead of somewhere else (PN-dev?)
* gdbus-codegen should be in PN-codegen?
* glib-gettext/Makefile.in.in should be in PN-dev?

Ross

[-- Attachment #2: Type: text/html, Size: 2182 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-03-21 23:30 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-21 18:29 [PATCH 0/2] Create GIO module cache on postinst/rm Jussi Kukkonen
2016-03-21 18:29 ` [PATCH 1/2] glib-2.0: Install gio-querymodules in main package Jussi Kukkonen
2016-03-21 23:30   ` Burton, Ross
2016-03-21 18:29 ` [PATCH 2/2] gio-module-cache: Add class for Gio modules Jussi Kukkonen
2016-03-21 20:16   ` Martin Jansa

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.