On Sun, 2011-06-05 at 23:44 -0700, Saul Wold wrote: > From: Otavio Salvador <ota...@ossystems.com.br> > > There're many Qt applications that provide translation files in '.qm' > format however those weren't being splitted as GetText based > ones. > > Signed-off-by: Otavio Salvador <ota...@ossystems.com.br>
Am I right in assuming all these qt applications use one of the qt classes? I do wonder if this shouldn't be part of one of the qt classes as part of a package_do_split_locales_append() or prepend() style function from a code separation point of view. I do appreciate the need to influence the list of locales although you could do that through directory creation or an extra variable but we could enhance package.bbclass to support that. > --- > meta/classes/package.bbclass | 41 +++++++++++++++++++++++++++++++++++++---- > 1 files changed, 37 insertions(+), 4 deletions(-) > > diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass > index 1e6a872..e4be20f 100644 > --- a/meta/classes/package.bbclass > +++ b/meta/classes/package.bbclass > @@ -343,6 +343,8 @@ python package_do_split_locales() { > bb.debug(1, "package requested not splitting locales") > return > > + import re > + > packages = (bb.data.getVar('PACKAGES', d, True) or "").split() > > datadir = bb.data.getVar('datadir', d, True) > @@ -358,12 +360,29 @@ python package_do_split_locales() { > > localedir = os.path.join(dvar + datadir, 'locale') > > - if not os.path.isdir(localedir): > + locales = [] > + if os.path.isdir(localedir): > + locales = os.listdir(localedir) > + > + # Check of Qt translation files > + qm_re = re.compile("(.*)\.qm$") > + qm_files = {} > + for root, dirs, files in os.walk(dvar): > + for file in files: > + qm_file = qm_re.match(file) > + if qm_file: > + locale = qm_file.group(1) > + relpath = os.path.join(root, > file).replace(dvar, '', 1) > + if relpath: > + if not qm_files.has_key(locale): > + qm_files[locale] = [] > + > + qm_files[locale].append(relpath) > + > + if len(locales) == 0 and len(qm_files) == 0: > bb.debug(1, "No locale files in this package") > return > > - locales = os.listdir(localedir) > - > # This is *really* broken > mainpkg = packages[0] > # At least try and patch it up I guess... > @@ -372,13 +391,27 @@ python package_do_split_locales() { > if mainpkg.find('-dev'): > mainpkg = mainpkg.replace('-dev', '') > > + # Queue Qt locales for spliting > + for l in qm_files.keys(): > + if l not in locales: > + locales.append(l) > + > + # Split the locales into different packages > summary = bb.data.getVar('SUMMARY', d, True) or pn > description = bb.data.getVar('DESCRIPTION', d, True) or "" > for l in locales: > ln = legitimize_package_name(l) > pkg = pn + '-locale-' + ln > packages.append(pkg) > - bb.data.setVar('FILES_' + pkg, os.path.join(datadir, 'locale', > l), d) > + files = [] > + files.append(os.path.join(datadir, 'locale', l)) > + > + if qm_files.has_key(l): > + locale_re = re.compile("^.*([a-z]{2}(_[A-Z]{2})?)$") > + ln = > legitimize_package_name(locale_re.match(l).group(1)) > + files += qm_files[l] Regardless, this is changing ln under some weird circumstances. Shouldn't the code adding this to the locales list be handling this translation? I can see potential duplication between the arrays and a host of other nasty bugs with this code as it stands :/. Please take that regexp out of this loop at the very least. Cheers, Richard > + > + bb.data.setVar('FILES_' + pkg, " ".join(files), d) > bb.data.setVar('RDEPENDS_' + pkg, '%s virtual-locale-%s' % > (mainpkg, ln), d) > bb.data.setVar('RPROVIDES_' + pkg, '%s-locale %s-translation' % > (pn, ln), d) > bb.data.setVar('SUMMARY_' + pkg, '%s - %s translations' % > (summary, l), d) _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core