Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Richard Purdie <richard.purdie@linuxfoundation.org>
To: Patches and discussions about the oe-core layer
	<openembedded-core@lists.openembedded.org>
Subject: Re: [CONSOLIDATED PULL 10/20] package.bbclass: add support to split Qt translation files
Date: Mon, 06 Jun 2011 20:29:20 +0100	[thread overview]
Message-ID: <1307388560.7672.44.camel@rex> (raw)
In-Reply-To: <BANLkTin=ZK9g5LM60TgvtpQqiqE3TYpUJw@mail.gmail.com>

On Mon, 2011-06-06 at 17:27 +0000, Otavio Salvador wrote:
> 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.

Not really. Something like:

python package_do_split_locales_qm() {
   import re

   dvar = bb.data.getVar('PKGD', d, True)
 
   # 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)
 
    locale_re = re.compile("^.*([a-z]{2}(_[A-Z]{2})?)$")
    for l in qm_files:
        ln = legitimize_package_name(locale_re.match(l).group(1))
        pkg = pn + '-locale-' + ln
        bb.data.setVar('FILES_' + pkg, " ".join(qm_files[l]), d)
}

PACKAGE_PREPROCESS_FUNCS += "package_do_split_locales_qm"

which doesn't really duplicate anything with package.bbclass. To make
that work we'd need to set PACKAGELOCALES and change package.bbclass to
something like:

diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index 1e6a872..66796e7 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -358,12 +358,18 @@ python package_do_split_locales() {
 
 	localedir = os.path.join(dvar + datadir, 'locale')
 
-	if not os.path.isdir(localedir):
+	locales = set()
+	if os.path.isdir(localedir):
+		locales |= os.listdir(localedir)
+
+	extralocales = d.getVar("PACKAGELOCALES", True)
+	if extralocales:
+		locales |= extralocales
+
+	if not locales:
 		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...
@@ -378,7 +384,11 @@ python package_do_split_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 = os.path.join(datadir, 'locale', l)
+		extrafiles = d.getVar('FILES_' + pkg, True)
+		if extrafiles:
+			files = extrafiles + " " + files
+		bb.data.setVar('FILES_' + pkg, 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)

and there are probably neater ways to do this.

> > 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?

See above for the kind of thing I'm thinking of.

> ...
> >> +             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?

Well, I was thinking about the loop above this one just over qm_files
instead of all locales. Also note that re.compile can be reused and can
also live outside any looping.

Cheers,

Richard






  reply	other threads:[~2011-06-06 19:32 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-06  6:44 [CONSOLIDATED PULL 00/20] 05-June-2011 Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 01/20] bitbake.conf: Create staticlibs pacakge for static libraries Saul Wold
2011-06-06  6:55   ` Phil Blundell
2011-06-06 10:50     ` Richard Purdie
2011-06-06 16:50       ` Saul Wold
2011-06-06 17:31         ` Otavio Salvador
2011-06-06 19:00           ` Richard Purdie
2011-06-06 19:07             ` Otavio Salvador
2011-06-06 19:31               ` Richard Purdie
2011-06-07 10:08               ` Phil Blundell
2011-06-06 19:34         ` Koen Kooi
2011-06-06 14:59     ` Saul Wold
2011-06-06 17:03   ` Khem Raj
2011-06-06 19:01     ` Richard Purdie
2011-06-06  6:44 ` [CONSOLIDATED PULL 02/20] m4: upgrade from 1.4.15 to 1.4.16 Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 03/20] autoconf: upgrade from 2.65 to 2.68 Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 04/20] bison: upgrade from 2.4.3 to 2.5 Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 05/20] allarch.bbclass: Define BASE_PACKAGE_ARCH = "all" Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 06/20] util-linux_2.19.1.bb: Fix compliation on uclibc Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 07/20] base.bbclass: add cleansstate task between clean and cleanall Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 08/20] gnutls: use INC_PR on 2.12.5 version recipe Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 09/20] gnutls: add p11tool into gnutls-bin Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 10/20] package.bbclass: add support to split Qt translation files Saul Wold
2011-06-06 17:14   ` Richard Purdie
2011-06-06 17:27     ` Otavio Salvador
2011-06-06 19:29       ` Richard Purdie [this message]
2011-06-06  6:44 ` [CONSOLIDATED PULL 11/20] xf86-driver-common.inc: remove .la files to avoid unpackaged warning Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 12/20] gcc-package-cross: also install the symlinks in libexec with target prefix Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 13/20] shadow: recipe and patch cleanup Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 14/20] shadow: add a -native recipe with customized utilities Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 15/20] base-passwd: populate the target sysroot with passwd/group/login.defs Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 16/20] useradd.bbclass: new class for managing user/group permissions Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 17/20] useradd-example: example recipe for using inherit useradd Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 18/20] bitbake.conf: set PSEUDO_PASSWD within FAKEROOTENV Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 19/20] package_rpm.bbclass: make RPM use on-disk permissions Saul Wold
2011-06-06  6:44 ` [CONSOLIDATED PULL 20/20] tzcode: Update to 2011g Saul Wold
2011-06-07 20:40 ` [CONSOLIDATED PULL 00/20] 05-June-2011 Richard Purdie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1307388560.7672.44.camel@rex \
    --to=richard.purdie@linuxfoundation.org \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox