[oe-commits] [openembedded-core] 19/41: icu: fix libicudata corruption on big endian system

git at git.openembedded.org git at git.openembedded.org
Mon Dec 18 18:04:56 UTC 2017


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master
in repository openembedded-core.

commit 77d1b9cda69d09cd7d3c8174ef14b4ee10e5efb6
Author: Yi Zhao <yi.zhao at windriver.com>
AuthorDate: Tue Dec 5 09:17:04 2017 +0800

    icu: fix libicudata corruption on big endian system
    
    ICU library libicudata is created with a wrong endianness if the host
    and target have different endianness. (e.g. build ICU for qemuppc on
    x86-64 host)
    See upstream bug report: http://bugs.icu-project.org/trac/ticket/11758
    
    The discussion in oe-core mailing list:
    https://www.mail-archive.com/openembedded-core@lists.openembedded.org/msg65155.html
    
    The root cause is the native pkgdata can not generate correct icu data
    for different endianness. By default, this data is built into the shared
    library libicudata that would cause it corrupt. But ICU also provides
    additional options for loading the data. With option
    --with-data-packaging=archive, ICU outputs a single icudt.dat file which
    can be loaded by the library.
    See document: http://userguide.icu-project.org/icudata
    
    So for big endian system, we can use the separated data file which
    re-generates by icupkg and set the correct ICU_DATA environment variable
    to make sure the library can load the data without problems.
    
    Signed-off-by: Yi Zhao <yi.zhao at windriver.com>
    Signed-off-by: Ross Burton <ross.burton at intel.com>
---
 meta/recipes-support/icu/icu.inc | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/meta/recipes-support/icu/icu.inc b/meta/recipes-support/icu/icu.inc
index a1ef9ec..3fb16b0 100644
--- a/meta/recipes-support/icu/icu.inc
+++ b/meta/recipes-support/icu/icu.inc
@@ -17,6 +17,8 @@ STAGING_ICU_DIR_NATIVE = "${STAGING_DATADIR_NATIVE}/${BPN}/${PV}"
 
 BINCONFIG = "${bindir}/icu-config"
 
+ICU_MAJOR_VER = "${@d.getVar('PV').split('.')[0]}"
+
 inherit autotools pkgconfig binconfig
 
 # ICU needs the native build directory as an argument to its --with-cross-build option when
@@ -26,6 +28,8 @@ EXTRA_OECONF = "--with-cross-build=${STAGING_ICU_DIR_NATIVE}"
 EXTRA_OECONF_class-native = ""
 EXTRA_OECONF_class-nativesdk = "--with-cross-build=${STAGING_ICU_DIR_NATIVE}"
 
+EXTRA_OECONF_append_class-target = "${@base_conditional('SITEINFO_ENDIANNESS', 'be', ' --with-data-packaging=archive', '', d)}"
+TARGET_CXXFLAGS_append = "${@base_conditional('SITEINFO_ENDIANNESS', 'be', ' -DICU_DATA_DIR=\\""${datadir}/${BPN}/${PV}\\""', '', d)}"
 
 # strtod_l() is not supported by musl; also xlocale.h is missing
 # It is not possible to disable its use via configure switches or env vars
@@ -44,6 +48,15 @@ do_install_append_class-native() {
 	cp -r ${B}/tools ${D}/${STAGING_ICU_DIR_NATIVE}
 }
 
+do_install_append_class-target() {
+    # The native pkgdata can not generate the correct data file.
+    # Use icupkg to re-generate it.
+    if [ "${SITEINFO_ENDIANNESS}" = "be" ] ; then
+        rm -f ${D}/${datadir}/${BPN}/${PV}/icudt${ICU_MAJOR_VER}b.dat
+        icupkg -tb ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat ${D}/${datadir}/${BPN}/${PV}/icudt${ICU_MAJOR_VER}b.dat
+    fi
+}
+
 PACKAGES =+ "libicudata libicuuc libicui18n libicutu libicuio"
 
 FILES_${PN}-dev += "${libdir}/${BPN}/"

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list