| Submitter | Saul Wold |
|---|---|
| Date | June 6, 2011, 6:44 a.m. |
| Message ID | <e66fee724ac6efa49cb941a59b2fc7c61bf14405.1307342214.git.sgw@linux.intel.com> |
| Download | mbox | patch |
| Permalink | /patch/5429/ |
| State | New, archived |
| Headers | show |
Comments
On Sun, 2011-06-05 at 23:44 -0700, Saul Wold wrote: > From: Otavio Salvador <otavio@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 <otavio@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)
On Mon, Jun 6, 2011 at 17:14, Richard Purdie <richard.purdie@linuxfoundation.org> wrote: > On Sun, 2011-06-05 at 23:44 -0700, Saul Wold wrote: >> From: Otavio Salvador <otavio@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 <otavio@ossystems.com.br> > > Am I right in assuming all these qt applications use one of the qt > classes? I'd expect it. > 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 believe there's going to have a lot of code duplication between the two to do that. > 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. I don't understand what you meant by this. Mind to elaborate it a bit more? ... >> + 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. Where do you suggest me to move the regexp to?
Patch
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] + + 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)