]> code.ossystems Code Review - openembedded-core.git/commitdiff
icu: make filtered data generation optional, serial and off by default
authorAlexander Kanavin <alex.kanavin@gmail.com>
Tue, 23 Jun 2020 21:08:37 +0000 (23:08 +0200)
committerSteve Sakoman <steve@sakoman.com>
Sat, 11 Jul 2020 03:11:12 +0000 (17:11 -1000)
Backported from master with two differences:

1. Move exit in do_make_icudata_class-target after big endian patch
application (not required for master since new upstream icu includes
the patch)

2. In do_install_append_class-target test for existence of .dat input
file before calling icupkg

icu data generation was found to be racy, and causig AB failures;
making it serial and leaving it on is not an option as it regresses
to several minutes.

The specific bug is that rules.mk has:

LD_LIBRARY_PATH=../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH  ../bin/gencnval -s . -d ./out/build/icudt66l mappings/convrtrs.txt

which creates a file and numerous rules like

LD_LIBRARY_PATH=../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH  ../bin/genrb -s ./misc -d ./out/build/icudt67l -i ./out/build/icudt67l -k -q numberingSystems.txt

which quietly read it. There is no prerequisite for the former to complete first.

The race is extra complicated to fix as rules.mk is itself
generated through a custom in-tree python tool.

Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit df89e8d1136fd406ba35ae573e2cb0cfc88c6aad)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
meta/recipes-support/icu/icu.inc
meta/recipes-support/icu/icu_66.1.bb

index 6d9728903dbe3540eea050c7d753aebb2b31d118..670cbedbcbe2f06c20d4fff2920f2eb600b1f60c 100644 (file)
@@ -59,7 +59,9 @@ do_install_append_class-target() {
     # 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
+       if [ -f ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat ]; then
+               icupkg -tb ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat ${D}/${datadir}/${BPN}/${PV}/icudt${ICU_MAJOR_VER}b.dat
+       fi
     fi
        
        # Remove build host references...
index a8096c1840da8d53dacace1616985aafe77ed871..08254648e4b13495e6bb5be9873ef00ed0800d40 100644 (file)
@@ -40,11 +40,15 @@ UPSTREAM_CHECK_URI = "https://github.com/unicode-org/icu/releases"
 
 EXTRA_OECONF_append_libc-musl = " ac_cv_func_strtod_l=no"
 
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[make-icudata] = ",,,"
+
 do_make_icudata_class-target () {
     cd ${S}
     rm -rf data
     cp -a ${WORKDIR}/data .
     patch -p1 < ${WORKDIR}/0001-Fix-big-endian-build.patch
+    ${@bb.utils.contains('PACKAGECONFIG', 'make-icudata', '', 'exit 0', d)}
     AR='${BUILD_AR}' \
     CC='${BUILD_CC}' \
     CPP='${BUILD_CPP}' \
@@ -56,7 +60,7 @@ do_make_icudata_class-target () {
     LDFLAGS='${BUILD_LDFLAGS}' \
     ICU_DATA_FILTER_FILE=${WORKDIR}/filter.json \
     ./runConfigureICU Linux --with-data-packaging=archive
-    oe_runmake ${PARALLEL_MAKE}
+    oe_runmake
     install -Dm644 ${S}/data/out/icudt${ICU_MAJOR_VER}l.dat ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat
 }