fix up locale-base package generation
authorPhil Blundell <philb@gnu.org>
Mon, 16 Aug 2004 11:39:04 +0000 (11:39 +0000)
committerPhil Blundell <philb@gnu.org>
Mon, 16 Aug 2004 11:39:04 +0000 (11:39 +0000)
BKrev: 41209cd8kRFmFwZrnxJNT6z2tvoBjQ

glibc/glibc-package.oeclass
glibc/glibc_2.3.2+cvs20040726.oe

index e69de29..ff484f9 100644 (file)
@@ -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)
+}
index 69a7aca..a04e20e 100644 (file)
@@ -1,5 +1,5 @@
 FILESDIR = "${@os.path.dirname(oe.data.getVar('FILE',d,1))}/glibc-cvs"
-PR = "r2"
+PR = "r6"
 DESCRIPTION = "GNU C Library"
 LICENSE = "LGPL"
 SECTION = "libs"