summaryrefslogtreecommitdiff
path: root/glibc/glibc-package.oeclass
diff options
context:
space:
mode:
authorPhil Blundell <philb@gnu.org>2004-08-16 11:39:04 +0000
committerPhil Blundell <philb@gnu.org>2004-08-16 11:39:04 +0000
commit02808cf43da13b267f91fc1817a3e5d577ed6579 (patch)
tree37759d4fad3fab536cfe9826ace4f78a57c388ab /glibc/glibc-package.oeclass
parent1daf8ca9a8267680f1c20dbe47003efc62f3c675 (diff)
fix up locale-base package generation
BKrev: 41209cd8kRFmFwZrnxJNT6z2tvoBjQ
Diffstat (limited to 'glibc/glibc-package.oeclass')
-rw-r--r--glibc/glibc-package.oeclass141
1 files changed, 141 insertions, 0 deletions
diff --git a/glibc/glibc-package.oeclass b/glibc/glibc-package.oeclass
index e69de29bb2..ff484f9189 100644
--- a/glibc/glibc-package.oeclass
+++ b/glibc/glibc-package.oeclass
@@ -0,0 +1,141 @@
+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 "(.*)"')
+ for l in f.readlines():
+ m = c_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)
+ # clobber unwanted self-dependency
+ oe.data.setVar('RDEPENDS_glibc-localedata-i18n', '', d)
+
+ 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)
+}