Fix pango modules load failure in multilib environment, Edwin, May2, 2012
cover Fix pango modules load failure in multilib environment, Edwin, May2, 2012
From: Zhai Edwin <[email protected]>
This patch fix the modules load failure when multi-libs of pango co-exist in system.
[YOCTO #2356] got fixed.
Thanks,
Edwin
The following changes since commit 2c3d4f5beee8f57a74244495511b9294df1085ea:
documentation/bsp-guide/bsp.xml: spelling corrected. (2012-04-18 16:42:15 +0100)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib gzhai/fix2
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=gzhai/fix2
Zhai Edwin (1):
pango: Fix modules load failure in multilib environment
.../pango/pango-1.28.4/multilib-fix.patch | 90 ++++++++++++++++++++ meta/recipes-graphics/pango/pango.inc | 12 ++- meta/recipes-graphics/pango/pango_1.28.4.bb | 7 +- 3 files changed, 101 insertions(+), 8 deletions(-) create mode 100644 meta/recipes-graphics/pango/pango-1.28.4/multilib-fix.patch
PATCH 1/1 pango: Fix modules load failure in multilib environment
From: Zhai Edwin <[email protected]>
Multi-libs of Pango need different modules, thus different config files and utils. This patch separate config file and utils into different directory to avoid conflict.
[YOCTO #2356] got fixed.
--- .../pango/pango-1.28.4/multilib-fix.patch | 90 ++++++++++++++++++++ meta/recipes-graphics/pango/pango.inc | 12 ++- meta/recipes-graphics/pango/pango_1.28.4.bb | 7 +- 3 files changed, 101 insertions(+), 8 deletions(-) create mode 100644 meta/recipes-graphics/pango/pango-1.28.4/multilib-fix.patch
meta/recipes-graphics/pango/pango-1.28.4/multilib-fix.patch new file +90 -0
@@ -0,0 +1,90 @@ +Fix modules load failure in multilib environment. + +Multi-lib need different configs produced by different utils, so need keep both +of them by putting them in different directory. + +Signed-off-by: Zhai Edwin <[email protected]> + +Upstream-Status: Inappropriate [other] - Upstream may have nice fix in future + +Index: pango-1.28.4/pango/pango-utils.c +=================================================================== +--- pango-1.28.4.orig/pango/pango-utils.c 2012-04-28 16:23:48.000000000 +0800 ++++ pango-1.28.4/pango/pango-utils.c 2012-05-02 10:19:14.000000000 +0800 +@@ -678,6 +678,19 @@ + + #endif + ++#ifndef G_OS_WIN32 ++/* return the relative baselib dir */ ++const char * ++pango_get_baselib_directory (void) ++{ ++ char *libdir = g_strdup(LIBDIR); ++ char *baselib = g_strdup( g_strrstr(libdir, "lib")); ++ g_free(libdir); ++ ++ return baselib; ++} ++#endif ++ + /** + * pango_get_sysconf_subdirectory: + * +Index: pango-1.28.4/pango/modules.c +=================================================================== +--- pango-1.28.4.orig/pango/modules.c 2010-09-22 03:37:01.000000000 +0800 ++++ pango-1.28.4/pango/modules.c 2012-05-02 10:42:57.000000000 +0800 +@@ -523,12 +523,17 @@ + + char *file_str = pango_config_key_get ("Pango/ModuleFiles"); + char **files; ++ char *baselib = pango_get_baselib_directory(); + int n; + + dlloaded_modules = g_hash_table_new (g_str_hash, g_str_equal); + + if (!file_str) + file_str = g_build_filename (pango_get_sysconf_subdirectory (), ++#ifndef G_OS_WIN32 ++/* For multilib case, keep multiple config file for different libs */ ++ baselib, ++#endif + "pango.modules", + NULL); + +@@ -550,6 +555,7 @@ + + g_strfreev (files); + g_free (file_str); ++ g_free (baselib); + + dlloaded_engines = g_slist_reverse (dlloaded_engines); + } +@@ -631,6 +637,7 @@ + { + const char *engine_type = g_quark_to_string (info->engine_type_id); + const char *render_type = g_quark_to_string (info->render_type_id); ++ char *baselib = pango_get_baselib_directory(); + + init_modules(); + +@@ -640,6 +647,10 @@ + if (!no_module_warning) + { + gchar *filename = g_build_filename (pango_get_sysconf_subdirectory (), ++#ifndef G_OS_WIN32 ++/* For multilib case, keep multiple config file for different libs */ ++ baselib, ++#endif + "pango.modules", + NULL); + g_critical ("No modules found:\n" +@@ -652,6 +663,7 @@ + filename, + filename); + g_free (filename); ++ g_free (baselib); + + no_module_warning = TRUE; + }
meta/recipes-graphics/pango/pango.inc +7 -5
@@ -32,9 +32,11 @@ EXTRA_AUTORECONF = "" # seems to go wrong with default cflags FULL_OPTIMIZATION_arm = "-O2" +# keep multiple version of utils under ${bindir} in multilib environment EXTRA_OECONF = "--disable-glibtest \ --enable-explicit-deps=no \ - --disable-debug" + --disable-debug \ + --bindir=${bindir}/${baselib}" LEAD_SONAME = "libpango-1.0*" LIBV = "1.6.0"
@@ -44,8 +46,8 @@ if [ "x$D" != "x" ]; then exit 1 fi -if ! [ -e $D${sysconfdir}/pango ] ; then - mkdir -p $D${sysconfdir}/pango +if ! [ -e $D${sysconfdir}/pango/${baselib} ] ; then + mkdir -p $D${sysconfdir}/pango/${baselib} fi }
@@ -54,9 +56,9 @@ python populate_packages_prepend () { modules_root = d.expand('${libdir}/pango/${LIBV}/modules') - do_split_packages(d, modules_root, '^pango-(.*)\.so$', 'pango-module-%s', 'Pango module %s', prologue + 'pango-querymodules > /etc/pango/pango.modules') + do_split_packages(d, modules_root, '^pango-(.*)\.so$', 'pango-module-%s', 'Pango module %s', prologue + '${bindir}/${baselib}/pango-querymodules > /etc/pango/${baselib}/pango.modules') } -FILES_${PN} = "${sysconfdir}/pango/* ${bindir}/* ${libdir}/libpango*${SOLIBS}" +FILES_${PN} = "${sysconfdir}/pango/* ${bindir}/${baselib}/* ${libdir}/libpango*${SOLIBS}" FILES_${PN}-dbg += "${libdir}/pango/${LIBV}/modules/.debug" FILES_${PN}-dev += "${libdir}/pango/${LIBV}/modules/*.la"
meta/recipes-graphics/pango/pango_1.28.4.bb +4 -3
@@ -2,10 +2,11 @@ require pango.inc LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7" -PR = "r7" +PR = "r8" -SRC_URI += "file://no-tests.patch" -SRC_URI += "file://noconst.patch" +SRC_URI += "file://no-tests.patch \ + file://noconst.patch \ + file://multilib-fix.patch" SRC_URI[archive.md5sum] = "3f3989700f04e9117d30544a9078b3a0" SRC_URI[archive.sha256sum] = "7eb035bcc10dd01569a214d5e2bc3437de95d9ac1cfa9f50035a687c45f05a9f"
Signature · 1 line
1.7.1
Scott Garman
AppliedRe: [poky] [PATCH 1/1] pango: Fix modules load failure in multilib environment
Quoted 9 lines · On 05/02/2012 12:43 AM, [email protected] wrote:
From: Zhai Edwin<[email protected]>
Multi-libs of Pango need different modules, thus different config files and utils. This patch separate config file and utils into different directory to avoid conflict.
[YOCTO #2356] got fixed.
Signed-off-by Zhai Edwin<[email protected]>
This wasn't poky-specific, so I am replying to the oe-core ML.
Merged to denzil-next, thanks!
http://git.openembedded.org/openembedded-core-contrib/log/?h=sgarman/denzil-next
Scott
Signature · 3 lines
Scott Garman Embedded Linux Engineer - Yocto Project Intel Open Source Technology Center
Re: [PATCH 1/1] pango: Fix modules load failure in multilib environment
In reply to [email protected]Quoted 141 lines · On 05/02/2012 12:43 AM, [email protected] wrote:
From: Zhai Edwin<[email protected]>
Multi-libs of Pango need different modules, thus different config files and utils. This patch separate config file and utils into different directory to avoid conflict.
[YOCTO #2356] got fixed.
Signed-off-by Zhai Edwin<[email protected]>--- .../pango/pango-1.28.4/multilib-fix.patch | 90 ++++++++++++++++++++ meta/recipes-graphics/pango/pango.inc | 12 ++- meta/recipes-graphics/pango/pango_1.28.4.bb | 7 +- 3 files changed, 101 insertions(+), 8 deletions(-)create mode 100644
meta/recipes-graphics/pango/pango-1.28.4/multilib-fix.patchmeta/recipes-graphics/pango/pango-1.28.4/multilib-fix.patch new file +90
-0@@ -0,0 +1,90 @@ +Fix modules load failure in multilib environment. + +Multi-lib need different configs produced by different utils, so need keep both +of them by putting them in different directory. + +Signed-off-by: Zhai Edwin<[email protected]> + +Upstream-Status: Inappropriate [other] - Upstream may have nice fix in future + +Index: pango-1.28.4/pango/pango-utils.c +=================================================================== +--- pango-1.28.4.orig/pango/pango-utils.c 2012-04-28 16:23:48.000000000 +0800 ++++ pango-1.28.4/pango/pango-utils.c 2012-05-02 10:19:14.000000000 +0800 +@@ -678,6 +678,19 @@ + + #endif + ++#ifndef G_OS_WIN32 ++/* return the relative baselib dir */ ++const char * ++pango_get_baselib_directory (void) ++{ ++ char *libdir = g_strdup(LIBDIR); ++ char *baselib = g_strdup( g_strrstr(libdir, "lib")); ++ g_free(libdir); ++ ++ return baselib; ++} ++#endif ++ + /** + * pango_get_sysconf_subdirectory: + * +Index: pango-1.28.4/pango/modules.c +=================================================================== +--- pango-1.28.4.orig/pango/modules.c 2010-09-22 03:37:01.000000000 +0800 ++++ pango-1.28.4/pango/modules.c 2012-05-02 10:42:57.000000000 +0800 +@@ -523,12 +523,17 @@ + + char *file_str = pango_config_key_get ("Pango/ModuleFiles"); + char **files; ++ char *baselib = pango_get_baselib_directory(); + int n; + + dlloaded_modules = g_hash_table_new (g_str_hash, g_str_equal); + + if (!file_str) + file_str = g_build_filename (pango_get_sysconf_subdirectory (), ++#ifndef G_OS_WIN32 ++/* For multilib case, keep multiple config file for different libs */ ++ baselib, ++#endif + "pango.modules", + NULL); + +@@ -550,6 +555,7 @@ + + g_strfreev (files); + g_free (file_str); ++ g_free (baselib); + + dlloaded_engines = g_slist_reverse (dlloaded_engines); + } +@@ -631,6 +637,7 @@ + { + const char *engine_type = g_quark_to_string (info->engine_type_id); + const char *render_type = g_quark_to_string (info->render_type_id); ++ char *baselib = pango_get_baselib_directory(); + + init_modules(); + +@@ -640,6 +647,10 @@ + if (!no_module_warning) + { + gchar *filename = g_build_filename (pango_get_sysconf_subdirectory (), ++#ifndef G_OS_WIN32 ++/* For multilib case, keep multiple config file for different libs */ ++ baselib, ++#endif + "pango.modules", + NULL); + g_critical ("No modules found:\n" +@@ -652,6 +663,7 @@ + filename, + filename); + g_free (filename); ++ g_free (baselib); + + no_module_warning = TRUE; + }meta/recipes-graphics/pango/pango.inc +5
-3@@ -32,9 +32,11 @@ EXTRA_AUTORECONF = "" # seems to go wrong with default cflags FULL_OPTIMIZATION_arm = "-O2" +# keep multiple version of utils under ${bindir} in multilib environment EXTRA_OECONF = "--disable-glibtest \ --enable-explicit-deps=no \ - --disable-debug" + --disable-debug \ + --bindir=${bindir}/${baselib}" LEAD_SONAME = "libpango-1.0*" LIBV = "1.6.0"@@ -44,8 +46,8 @@ if [ "x$D" != "x" ]; then exit 1 fi -if ! [ -e $D${sysconfdir}/pango ] ; then - mkdir -p $D${sysconfdir}/pango +if ! [ -e $D${sysconfdir}/pango/${baselib} ] ; then + mkdir -p $D${sysconfdir}/pango/${baselib} fi }
meta/recipes-graphics/pango/pango.inc python populate_packages_prepend () { · line 62
Quoted 9 lines
meta/recipes-graphics/pango/pango.inc +2
-2@@ -54,9 +56,9 @@ python populate_packages_prepend () { modules_root = d.expand('${libdir}/pango/${LIBV}/modules') - do_split_packages(d, modules_root, '^pango-(.*)\.so$', 'pango-module-%s', 'Pango module %s', prologue + 'pango-querymodules> /etc/pango/pango.modules') + do_split_packages(d, modules_root, '^pango-(.*)\.so$', 'pango-module-%s', 'Pango module %s', prologue + '${bindir}/${baselib}/pango-querymodules> /etc/pango/${baselib}/pango.modules') } -FILES_${PN} = "${sysconfdir}/pango/* ${bindir}/* ${libdir}/libpango*${SOLIBS}" +FILES_${PN} = "${sysconfdir}/pango/* ${bindir}/${baselib}/* ${libdir}/libpango*${SOLIBS}"
This change to ${bindir}/${baselib} does not seem right to me, that would be /usr/bin/usr/lib.
It also results in a packaging issue:
ERROR: For recipe pango, the following files/directories were installed but not shipped in any package: ERROR: /usr/bin/lib/.debug ERROR: /usr/bin/lib/.debug/pango-querymodules ERROR: /usr/bin/lib/.debug/pango-view
Please review this patch
Thanks
Sau!
Quoted 21 lines
meta/recipes-graphics/pango/pango.inc +0
-0FILES_${PN}-dbg += "${libdir}/pango/${LIBV}/modules/.debug" FILES_${PN}-dev += "${libdir}/pango/${LIBV}/modules/*.la"meta/recipes-graphics/pango/pango_1.28.4.bb +4
-3@@ -2,10 +2,11 @@ require pango.inc LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7" -PR = "r7" +PR = "r8" -SRC_URI += "file://no-tests.patch" -SRC_URI += "file://noconst.patch" +SRC_URI += "file://no-tests.patch \ + file://noconst.patch \ + file://multilib-fix.patch" SRC_URI[archive.md5sum] = "3f3989700f04e9117d30544a9078b3a0" SRC_URI[archive.sha256sum] = "7eb035bcc10dd01569a214d5e2bc3437de95d9ac1cfa9f50035a687c45f05a9f"
Re: [PATCH 1/1] pango: Fix modules load failure in multilib environment
Quoted 149 lines · Saul Wold
Quoted 148 lines · On 05/02/2012 12:43 AM, [email protected] wrote:
From: Zhai Edwin<[email protected]>
Multi-libs of Pango need different modules, thus different config files and utils. This patch separate config file and utils into different directory to avoid conflict.
[YOCTO #2356] got fixed.
Signed-off-by Zhai Edwin<[email protected]>--- .../pango/pango-1.28.4/multilib-fix.patch | 90 ++++++++++++++++++++ meta/recipes-graphics/pango/pango.inc | 12 ++- meta/recipes-graphics/pango/pango_1.28.4.bb | 7 +- 3 files changed, 101 insertions(+), 8 deletions(-)create mode 100644
meta/recipes-graphics/pango/pango-1.28.4/multilib-fix.patchmeta/recipes-graphics/pango/pango-1.28.4/multilib-fix.patch new file +90
-0@@ -0,0 +1,90 @@ +Fix modules load failure in multilib environment. + +Multi-lib need different configs produced by different utils, so need keep both +of them by putting them in different directory. + +Signed-off-by: Zhai Edwin<[email protected]> + +Upstream-Status: Inappropriate [other] - Upstream may have nice fix in future + +Index: pango-1.28.4/pango/pango-utils.c +=================================================================== +--- pango-1.28.4.orig/pango/pango-utils.c 2012-04-28 16:23:48.000000000 +0800 ++++ pango-1.28.4/pango/pango-utils.c 2012-05-02 10:19:14.000000000 +0800 +@@ -678,6 +678,19 @@ + + #endif + ++#ifndef G_OS_WIN32 ++/* return the relative baselib dir */ ++const char * ++pango_get_baselib_directory (void) ++{ ++ char *libdir = g_strdup(LIBDIR); ++ char *baselib = g_strdup( g_strrstr(libdir, "lib")); ++ g_free(libdir); ++ ++ return baselib; ++} ++#endif ++ + /** + * pango_get_sysconf_subdirectory: + * +Index: pango-1.28.4/pango/modules.c +=================================================================== +--- pango-1.28.4.orig/pango/modules.c 2010-09-22 03:37:01.000000000 +0800 ++++ pango-1.28.4/pango/modules.c 2012-05-02 10:42:57.000000000 +0800 +@@ -523,12 +523,17 @@ + + char *file_str = pango_config_key_get ("Pango/ModuleFiles"); + char **files; ++ char *baselib = pango_get_baselib_directory(); + int n; + + dlloaded_modules = g_hash_table_new (g_str_hash, g_str_equal); + + if (!file_str) + file_str = g_build_filename (pango_get_sysconf_subdirectory (), ++#ifndef G_OS_WIN32 ++/* For multilib case, keep multiple config file for different libs */ ++ baselib, ++#endif + "pango.modules", + NULL); + +@@ -550,6 +555,7 @@ + + g_strfreev (files); + g_free (file_str); ++ g_free (baselib); + + dlloaded_engines = g_slist_reverse (dlloaded_engines); + } +@@ -631,6 +637,7 @@ + { + const char *engine_type = g_quark_to_string (info->engine_type_id); + const char *render_type = g_quark_to_string (info->render_type_id); ++ char *baselib = pango_get_baselib_directory(); + + init_modules(); + +@@ -640,6 +647,10 @@ + if (!no_module_warning) + { + gchar *filename = g_build_filename (pango_get_sysconf_subdirectory (), ++#ifndef G_OS_WIN32 ++/* For multilib case, keep multiple config file for different libs */ ++ baselib, ++#endif + "pango.modules", + NULL); + g_critical ("No modules found:\n" +@@ -652,6 +663,7 @@ + filename, + filename); + g_free (filename); ++ g_free (baselib); + + no_module_warning = TRUE; + }meta/recipes-graphics/pango/pango.inc +6
-4@@ -32,9 +32,11 @@ EXTRA_AUTORECONF = "" # seems to go wrong with default cflags FULL_OPTIMIZATION_arm = "-O2" +# keep multiple version of utils under ${bindir} in multilib environment EXTRA_OECONF = "--disable-glibtest \ --enable-explicit-deps=no \ - --disable-debug" + --disable-debug \ + --bindir=${bindir}/${baselib}" LEAD_SONAME = "libpango-1.0*" LIBV = "1.6.0"@@ -44,8 +46,8 @@ if [ "x$D" != "x" ]; then exit 1 fi -if ! [ -e $D${sysconfdir}/pango ] ; then - mkdir -p $D${sysconfdir}/pango +if ! [ -e $D${sysconfdir}/pango/${baselib} ] ; then + mkdir -p $D${sysconfdir}/pango/${baselib} fi }@@ -54,9 +56,9 @@ python populate_packages_prepend () { modules_root = d.expand('${libdir}/pango/${LIBV}/modules') - do_split_packages(d, modules_root, '^pango-(.*)\.so$', 'pango-module-%s', 'Pango module %s', prologue + 'pango-querymodules> /etc/pango/pango.modules') + do_split_packages(d, modules_root, '^pango-(.*)\.so$', 'pango-module-%s', 'Pango module %s', prologue + '${bindir}/${baselib}/pango-querymodules> /etc/pango/${baselib}/pango.modules') }
Quoted 5 lines
meta/recipes-graphics/pango/pango.inc python populate_packages_prepend () { · line 62
Quoted 2 lines
meta/recipes-graphics/pango/pango.inc +1
-1-FILES_${PN} = "${sysconfdir}/pango/* ${bindir}/* ${libdir}/libpango*${SOLIBS}" +FILES_${PN} = "${sysconfdir}/pango/* ${bindir}/${baselib}/* ${libdir}/libpango*${SOLIBS}"This change to ${bindir}/${baselib} does not seem right to me, that would be
/usr/bin/usr/lib.
No, it woud be /usr/bin/lib.
Quoted 9 lines
It also results in a packaging issue:
ERROR: For recipe pango, the following files/directories were installed but not shipped in any package:ERROR: /usr/bin/lib/.debug ERROR: /usr/bin/lib/.debug/pango-querymodules ERROR: /usr/bin/lib/.debug/pango-viewPlease review this patch
There is a missing FILES_${PN}-dbg += "${bindir}/${baselib}/.debug".
I am left wondering if we would be better doing something like:
do_install_append () {
if [ "${MLPREFIX}" != "" ]; then
mv ${bindir}/pango-querymodules ${bindir}/${MLPREFIX}pango-querymodules
fi
}It would also be worth cosidering if the patch would be any neater if we pass ${MLPREFIX} in as an extra variable?
Cheers,
Richard
Re: [PATCH 1/1] pango: Fix modules load failure in multilib environment
Quoted 9 lines · Richard Purdie
There is a missing FILES_${PN}-dbg += "${bindir}/${baselib}/.debug".
I am left wondering if we would be better doing something like:
do_install_append () { if [ "${MLPREFIX}" != "" ]; then mv ${bindir}/pango-querymodules ${bindir}/${MLPREFIX}pango-querymodules fi }
Does it makes others hard to find the util if changing the name?
Quoted 3 lines
It would also be worth cosidering if the patch would be any neater if we pass ${MLPREFIX} in as an extra variable?
Change the pango-querymodules command line to accept an extra parameter to indicate where to query? I can have a check to see if it works.
Regarding the lib, the path is hard coded, so we can't pass ${MLPREFIX} in.
Quoted 4 lines
Cheers,
Richard
Re: [PATCH 1/1] pango: Fix modules load failure in multilib environment
Quoted 14 lines · Edwin
Quoted 9 lines · Richard Purdie
There is a missing FILES_${PN}-dbg += "${bindir}/${baselib}/.debug".
I am left wondering if we would be better doing something like:
do_install_append () { if [ "${MLPREFIX}" != "" ]; then mv ${bindir}/pango-querymodules ${bindir}/${MLPREFIX}pango-querymodules fi }Does it makes others hard to find the util if changing the name?
Quoted 1 line
Quoted 7 lines
Quoted 2 lines
It would also be worth cosidering if the patch would be any neater if we pass ${MLPREFIX} in as an extra variable?
Change the pango-querymodules command line to accept an extra parameter to indicate where to query? I can have a check to see if it works.
Regarding the lib, the path is hard coded, so we can't pass ${MLPREFIX} in.
Sorry, I meant pass in ${MLPREFIX} as an option to configure so it would be compiled in.
Cheers,
Richard