Patchwork [CONSOLIDATED,PULL,10/20] package.bbclass: add support to split Qt translation files

login
register
mail settings
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

Saul Wold - June 6, 2011, 6:44 a.m.
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>
---
 meta/classes/package.bbclass |   41 +++++++++++++++++++++++++++++++++++++----
 1 files changed, 37 insertions(+), 4 deletions(-)
Richard Purdie - June 6, 2011, 5:14 p.m.
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)
Otavio Salvador - June 6, 2011, 5:27 p.m.
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)