diff options
author | Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com> | 2015-08-17 07:10:13 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-08-19 17:57:53 +0100 |
commit | 4096f3c5d309161999adc996fdfa7526e5504366 (patch) | |
tree | e25e6d0e0c06035624e79e69a77c0888bd217f5c | |
parent | 98c4a3ffb8dca10739be600e8d6df7fb6aa4958f (diff) | |
download | openembedded-core-4096f3c5d309161999adc996fdfa7526e5504366.tar.gz openembedded-core-4096f3c5d309161999adc996fdfa7526e5504366.tar.bz2 openembedded-core-4096f3c5d309161999adc996fdfa7526e5504366.zip |
package_deb.bbclass: Allow UTF-8 characters on control files
Allow UTF-8 characters on control files. Also handle an expection
in case of invalid characters (non UTF-8).
[YOCTO #6693]
Signed-off-by: Leonardo Sandoval <leonardo.sandoval.gonzalez@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
-rw-r--r-- | meta/classes/package_deb.bbclass | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/meta/classes/package_deb.bbclass b/meta/classes/package_deb.bbclass index 9e1ed28c3a..398ceeeb28 100644 --- a/meta/classes/package_deb.bbclass +++ b/meta/classes/package_deb.bbclass @@ -96,9 +96,8 @@ python do_package_deb () { bb.utils.mkdirhier(controldir) os.chmod(controldir, 0755) try: - ctrlfile = open(os.path.join(controldir, 'control'), 'w') - # import codecs - # ctrlfile = codecs.open("someFile", "w", "utf-8") + import codecs + ctrlfile = codecs.open(os.path.join(controldir, 'control'), 'w', 'utf-8') except OSError: bb.utils.unlockfile(lf) raise bb.build.FuncFailed("unable to open control file for writing.") @@ -149,7 +148,7 @@ python do_package_deb () { # Special behavior for description... if 'DESCRIPTION' in fs: summary = localdata.getVar('SUMMARY', True) or localdata.getVar('DESCRIPTION', True) or "." - ctrlfile.write('Description: %s\n' % unicode(summary)) + ctrlfile.write('Description: %s\n' % unicode(summary,'utf-8')) description = localdata.getVar('DESCRIPTION', True) or "." description = textwrap.dedent(description).strip() if '\\n' in description: @@ -158,19 +157,24 @@ python do_package_deb () { # We don't limit the width when manually indent, but we do # need the textwrap.fill() to set the initial_indent and # subsequent_indent, so set a large width - ctrlfile.write('%s\n' % unicode(textwrap.fill(t, width=100000, initial_indent=' ', subsequent_indent=' '))) + ctrlfile.write('%s\n' % unicode(textwrap.fill(t, width=100000, initial_indent=' ', subsequent_indent=' '),'utf-8')) else: # Auto indent - ctrlfile.write('%s\n' % unicode(textwrap.fill(description.strip(), width=74, initial_indent=' ', subsequent_indent=' '))) + ctrlfile.write('%s\n' % unicode(textwrap.fill(description.strip(), width=74, initial_indent=' ', subsequent_indent=' '),'utf-8')) else: - ctrlfile.write(unicode(c % tuple(pullData(fs, localdata)))) + ctrlfile.write(unicode(c % tuple(pullData(fs, localdata)),'utf-8')) except KeyError: import sys (type, value, traceback) = sys.exc_info() bb.utils.unlockfile(lf) ctrlfile.close() raise bb.build.FuncFailed("Missing field for deb generation: %s" % value) + except UnicodeDecodeError: + bb.utils.unlockfile(lf) + ctrlfile.close() + raise bb.build.FuncFailed("Non UTF-8 characters found in one of the fields") + # more fields custom_fields_chunk = get_package_additional_metadata("deb", localdata) |