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
|
do_install() {
oe_runmake install_root=${D} install
for r in ${rpcsvc}; do
h=`echo $r|sed -e's,\.x$,.h,'`
install -m 0644 ${S}/sunrpc/rpcsvc/$h ${D}/${includedir}/rpcsvc/
done
install -m 0644 ${WORKDIR}/etc/ld.so.conf ${D}/${sysconfdir}/
install -d ${D}${libdir}/locale
make -f ${WORKDIR}/generate-supported.mk IN="${S}/localedata/SUPPORTED" OUT="${WORKDIR}/SUPPORTED"
}
TMP_LOCALE="/tmp/locale/${libdir}/locale"
locale_base_postinst() {
#!/bin/sh
if [ "x$D" != "x" ]; then
exit 1
fi
rm -rf ${TMP_LOCALE}
mkdir -p ${TMP_LOCALE}
if [ -f ${libdir}/locale/locale-archive ]; then
cp ${libdir}/locale/locale-archive ${TMP_LOCALE}/
fi
localedef --inputfile=${datadir}/i18n/locales/%s --charmap=%s --prefix=/tmp/locale %s
mv ${TMP_LOCALE}/locale-archive ${libdir}/locale/
rm -rf ${TMP_LOCALE}
}
locale_base_postrm() {
#!/bin/sh
rm -rf ${TMP_LOCALE}
mkdir -p ${TMP_LOCALE}
if [ -f ${libdir}/locale/locale-archive ]; then
cp ${libdir}/locale/locale-archive ${TMP_LOCALE}/
fi
localedef --delete-from-archive --inputfile=${datadir}/locales/%s --charmap=%s --prefix=/tmp/locale %s
mv ${TMP_LOCALE}/locale-archive ${libdir}/locale/
rm -rf ${TMP_LOCALE}
}
python package_do_split_gconvs () {
import os, re
if (oe.data.getVar('PACKAGE_NO_GCONV', d, 1) == '1'):
oe.note("package requested not splitting gconvs")
return
if not oe.data.getVar('PACKAGES', d, 1):
return
libdir = oe.data.getVar('libdir', d, 1)
if not libdir:
oe.error("libdir not defined")
return
datadir = oe.data.getVar('datadir', d, 1)
if not datadir:
oe.error("datadir not defined")
return
gconv_libdir = os.path.join(libdir, "gconv")
charmap_dir = os.path.join(datadir, "i18n", "charmaps")
locales_dir = os.path.join(datadir, "i18n", "locales")
do_split_packages(d, gconv_libdir, file_regex='^(.*)\.so$', output_pattern='glibc-gconv-%s', description='gconv module for character set %s')
do_split_packages(d, charmap_dir, file_regex='^(.*)\.gz$', output_pattern='glibc-charmap-%s', description='character map for %s encoding')
def calc_locale_deps(fn, pkg, file_regex, output_pattern, group):
deps = []
f = open(fn, "r")
c_re = re.compile('^copy "(.*)"')
i_re = re.compile('^include "(\w+)".*')
for l in f.readlines():
m = c_re.match(l) or i_re.match(l)
if m:
dp = legitimize_package_name('glibc-localedata-%s' % m.group(1))
if not dp in deps:
deps.append(dp)
f.close()
if deps != []:
oe.data.setVar('RDEPENDS_%s' % pkg, " ".join(deps), d)
do_split_packages(d, locales_dir, file_regex='(.*)', output_pattern='glibc-localedata-%s', description='locale definition for %s', hook=calc_locale_deps)
oe.data.setVar('PACKAGES', oe.data.getVar('PACKAGES', d) + ' glibc-gconv', d)
f = open(os.path.join(oe.data.getVar('WORKDIR', d, 1), "SUPPORTED"), "r")
supported = f.readlines()
f.close()
dot_re = re.compile("(.*)\.(.*)")
# Collate the locales by base and encoding
encodings = {}
for l in supported:
l = l[:-1]
(locale, charset) = l.split(" ")
m = dot_re.match(locale)
if m:
locale = m.group(1)
if not encodings.has_key(locale):
encodings[locale] = []
encodings[locale].append(charset)
def output_locale(name, locale, encoding):
pkgname = 'locale-base-' + legitimize_package_name(name)
oe.data.setVar('RDEPENDS_%s' % pkgname, 'localedef glibc-localedata-%s glibc-charmap-%s' % (legitimize_package_name(locale), legitimize_package_name(encoding)), d)
rprovides = 'virtual-locale-%s' % legitimize_package_name(name)
m = re.match("(.*)_(.*)", name)
if m:
rprovides += ' virtual-locale-%s' % m.group(1)
oe.data.setVar('RPROVIDES_%s' % pkgname, rprovides, d)
oe.data.setVar('PACKAGES', '%s %s' % (pkgname, oe.data.getVar('PACKAGES', d, 1)), d)
oe.data.setVar('ALLOW_EMPTY_%s' % pkgname, '1', d)
oe.data.setVar('pkg_postinst_%s' % pkgname, oe.data.getVar('locale_base_postinst', d, 1) % (locale, encoding, locale), d)
oe.data.setVar('pkg_postrm_%s' % pkgname, oe.data.getVar('locale_base_postrm', d, 1) % (locale, encoding, locale), d)
# Reshuffle names so that UTF-8 is preferred over other encodings
for l in encodings.keys():
if len(encodings[l]) == 1:
output_locale(l, l, encodings[l][0])
else:
if "UTF-8" in encodings[l]:
output_locale(l, l, "UTF-8")
encodings[l].remove("UTF-8")
for e in encodings[l]:
output_locale('%s-%s' % (l, e), l, e)
}
# We want to do this indirection so that we can safely 'return'
# from the called function even though we're prepending
python populate_packages_prepend () {
if oe.data.getVar('DEBIAN_NAMES', d, 1):
oe.data.setVar('PKG_glibc', 'libc6', d)
oe.data.setVar('PKG_glibc-dev', 'libc6-dev', d)
oe.build.exec_func('package_do_split_gconvs', d)
}
|