1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
SUMMARY = "International Component for Unicode libraries"
DESCRIPTION = "The International Component for Unicode (ICU) is a mature, \
portable set of C/C++ and Java libraries for Unicode support, software \
internationalization (I18N) and globalization (G11N), giving applications the \
same results on all platforms."
HOMEPAGE = "http://site.icu-project.org/"
LICENSE = "ICU"
DEPENDS = "icu-native autoconf-archive-native"
CVE_PRODUCT = "international_components_for_unicode"
S = "${WORKDIR}/icu/source"
SPDX_S = "${WORKDIR}/icu"
STAGING_ICU_DIR_NATIVE = "${STAGING_DATADIR_NATIVE}/${BPN}/${PV}"
ICU_MAJOR_VER = "${@d.getVar('PV').split('-')[0]}"
inherit autotools pkgconfig github-releases
# ICU needs the native build directory as an argument to its --with-cross-build option when
# cross-compiling. Taken the situation that different builds may share a common sstate-cache
# into consideration, the native build directory needs to be staged.
EXTRA_OECONF = "--with-cross-build=${STAGING_ICU_DIR_NATIVE} --disable-icu-config"
EXTRA_OECONF:class-native = "--disable-icu-config"
EXTRA_OECONF:class-nativesdk = "--with-cross-build=${STAGING_ICU_DIR_NATIVE} --disable-icu-config"
EXTRA_OECONF:append:class-target = "${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'be', ' --with-data-packaging=archive', '', d)}"
TARGET_CXXFLAGS:append = "${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'be', ' -DICU_DATA_DIR=\\""${datadir}/${BPN}/${PV}\\""', '', d)}"
ASNEEDED = ""
do_compile:prepend:class-target () {
# Make sure certain build host references do not end up being compiled
# in the image. This only affects libicutu and icu-dbg
sed \
-e 's,DU_BUILD=,DU_BUILD_unused=,g' \
-e '/^CPPFLAGS.*/ s,--sysroot=${STAGING_DIR_TARGET},,g' \
-i ${B}/tools/toolutil/Makefile
}
PREPROCESS_RELOCATE_DIRS = "${datadir}/${BPN}/${PV}"
do_install:append:class-native() {
mkdir -p ${D}/${STAGING_ICU_DIR_NATIVE}/config
cp -r ${B}/config/icucross.mk ${D}/${STAGING_ICU_DIR_NATIVE}/config
cp -r ${B}/config/icucross.inc ${D}/${STAGING_ICU_DIR_NATIVE}/config
cp -r ${B}/lib ${D}/${STAGING_ICU_DIR_NATIVE}
cp -r ${B}/bin ${D}/${STAGING_ICU_DIR_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}/${@icu_install_folder(d)}/icudt${ICU_MAJOR_VER}b.dat
icupkg -tb ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat ${D}/${datadir}/${BPN}/${@icu_install_folder(d)}/icudt${ICU_MAJOR_VER}b.dat
fi
# Remove build host references...
sed -i \
-e 's,--sysroot=${STAGING_DIR_TARGET},,g' \
-e 's|${DEBUG_PREFIX_MAP}||g' \
-e 's:${HOSTTOOLS_DIR}/::g' \
${D}/${libdir}/${BPN}/${@icu_install_folder(d)}/Makefile.inc \
${D}/${libdir}/${BPN}/${@icu_install_folder(d)}/pkgdata.inc
}
PACKAGES =+ "libicudata libicuuc libicui18n libicutu libicuio"
FILES:${PN}-dev += "${libdir}/${BPN}/"
FILES:libicudata = "${libdir}/libicudata.so.*"
FILES:libicuuc = "${libdir}/libicuuc.so.*"
FILES:libicui18n = "${libdir}/libicui18n.so.*"
FILES:libicutu = "${libdir}/libicutu.so.*"
FILES:libicuio = "${libdir}/libicuio.so.*"
BBCLASSEXTEND = "native nativesdk"
LIC_FILES_CHKSUM = "file://../LICENSE;md5=a89d03060ff9c46552434dbd1fe3ed1f"
def icu_download_version(d):
pvsplit = d.getVar('PV').split('-')
return pvsplit[0] + "_" + pvsplit[1]
def icu_download_folder(d):
pvsplit = d.getVar('PV').split('-')
return pvsplit[0] + "-" + pvsplit[1]
def icu_install_folder(d):
pvsplit = d.getVar('PV').split('-')
return pvsplit[0] + "." + pvsplit[1]
ICU_PV = "${@icu_download_version(d)}"
ICU_FOLDER = "${@icu_download_folder(d)}"
# http://errors.yoctoproject.org/Errors/Details/20486/
ARM_INSTRUCTION_SET:armv4 = "arm"
ARM_INSTRUCTION_SET:armv5 = "arm"
BASE_SRC_URI = "${GITHUB_BASE_URI}/download/release-${ICU_FOLDER}/icu4c-${ICU_PV}-src.tgz"
DATA_SRC_URI = "${GITHUB_BASE_URI}/download/release-${ICU_FOLDER}/icu4c-${ICU_PV}-data.zip"
SRC_URI = "${BASE_SRC_URI};name=code \
${DATA_SRC_URI};name=data \
file://filter.json \
file://fix-install-manx.patch \
file://0001-icu-Added-armeb-support.patch \
"
SRC_URI:append:class-target = "\
file://0001-Disable-LDFLAGSICUDT-for-Linux.patch \
"
SRC_URI[code.sha256sum] = "a2d2d38217092a7ed56635e34467f92f976b370e20182ad325edea6681a71d68"
SRC_URI[data.sha256sum] = "ee19f876507d6c23d9e0a2b631096f6b0eaa6fa61728c33a89efdb55e3385dea"
UPSTREAM_CHECK_REGEX = "releases/tag/release-(?P<pver>(?!.+rc).+)"
GITHUB_BASE_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 () {
${@bb.utils.contains('PACKAGECONFIG', 'make-icudata', '', 'exit 0', d)}
cd ${S}
rm -rf data
cp -a ${WORKDIR}/data .
AR='${BUILD_AR}' \
CC='${BUILD_CC}' \
CPP='${BUILD_CPP}' \
CXX='${BUILD_CXX}' \
RANLIB='${BUILD_RANLIB}' \
CFLAGS='${BUILD_CFLAGS}' \
CPPFLAGS='${BUILD_CPPFLAGS}' \
CXXFLAGS='${BUILD_CXXFLAGS}' \
LDFLAGS='${BUILD_LDFLAGS}' \
ICU_DATA_FILTER_FILE=${WORKDIR}/filter.json \
./runConfigureICU Linux --with-data-packaging=archive
oe_runmake
install -Dm644 ${S}/data/out/icudt${ICU_MAJOR_VER}l.dat ${S}/data/in/icudt${ICU_MAJOR_VER}l.dat
}
do_make_icudata() {
:
}
addtask make_icudata before do_configure after do_patch do_prepare_recipe_sysroot
|