ping
Quoting Dylan Baker (2018-01-09 11:36:36) > Currently meson implements the same logic as SCons for translations, > namely it doesn't do them. This patch changes meson to use logic more > like autotools, and generate translations. To do this we have to go > behind meson's back a bit, and wrap the whole thing up in a single > python script. > > Meson has a module for gettext translations, but it assumes that one > will have a pot file, and then .mo translations will be generated and > checked into the source repo (or generated by hand using custom ninja > targets before building), mesa assumes that the targets will be > regenerated on each invocation of make or ninja. I think this can be > fixed upstream, but in the mean time this adds support for using > translations. > > Signed-off-by: Dylan Baker <[email protected]> > --- > src/util/xmlpool/gen_translations.py | 91 +++++++++++++++++++++++++++++- > src/util/xmlpool/meson.build | 31 +++++++--- > 2 files changed, 114 insertions(+), 8 deletions(-) > create mode 100644 src/util/xmlpool/gen_translations.py > > diff --git a/src/util/xmlpool/gen_translations.py > b/src/util/xmlpool/gen_translations.py > new file mode 100644 > index 0000000..5d08590 > --- /dev/null > +++ b/src/util/xmlpool/gen_translations.py > @@ -0,0 +1,91 @@ > +# encoding=utf-8 > +# Copyright © 2018 Intel Corporation > + > +# Permission is hereby granted, free of charge, to any person obtaining a > copy > +# of this software and associated documentation files (the "Software"), to > deal > +# in the Software without restriction, including without limitation the > rights > +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell > +# copies of the Software, and to permit persons to whom the Software is > +# furnished to do so, subject to the following conditions: > + > +# The above copyright notice and this permission notice shall be included in > +# all copies or substantial portions of the Software. > + > +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE > +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > FROM, > +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN > THE > +# SOFTWARE. > + > +"""Wraps gen_xmlpool.py and generates .mo files for use in meson. > + > +Currently meson and mesa have a mismatch in the way that they assume that > +translations should be generated. Meson assumes that translations are > generated > +and checked into the tree, mesa assumes that they are generated at compile > +time. This script bridges that difference. > +""" > + > +from __future__ import print_function > +import argparse > +import os > +import subprocess > +import sys > + > + > +def arg_parser(): > + parser = argparse.ArgumentParser() > + parser.add_argument('inputfile', help='The template file (t_options.h)') > + parser.add_argument('outputfile', help='The file to write.') > + parser.add_argument('gen_xmlpool', help='The gen_xmlpool.py script') > + parser.add_argument('sourcedir', help='The source directory') > + parser.add_argument('builddir', help='The build directory') > + parser.add_argument('python', help='The python binary to call > gen_xmlpool.py with') > + parser.add_argument('langs', nargs='+', help='langs to generate.') > + return parser.parse_args() > + > + > +def gen_mo(lang, sourcedir, builddir): > + """Generate an mo file from each po file using msgfmt.""" > + # TODO: Python actually provides a tool that serves the same purpose as > + # msgfmt. It might make sense to fall back to that tool if msgfmt isn't > + # available (or just use it since our po files aren't that complicated) > for > + # other oses (like macOS and Windows). > + > + outdir = os.path.join(builddir, lang, 'LC_MESSAGES') > + if not os.path.exists(outdir): > + os.makedirs(outdir) > + > + po_file = os.path.join(sourcedir, '{}.po'.format(lang)) > + mo_file = os.path.join(outdir, 'options.mo') > + > + try: > + subprocess.check_call(['msgfmt', '-o', mo_file, po_file]) > + except subprocess.CalledProcessError as e: > + print(e.output, file=sys.stderr) > + sys.exit(e.returncode) > + > + > +def main(): > + args = arg_parser() > + > + for lang in args.langs: > + gen_mo(lang, args.sourcedir, args.builddir) > + > + try: > + # We need to use subprocess since gen_xmlpool.py prints, and isn't > safe > + # to import since it doens't use the if __name__ == '__main__' idiom > + out = subprocess.check_output( > + [args.python, args.gen_xmlpool, args.inputfile, args.builddir] + > + args.langs) > + except subprocess.CalledProcessError as e: > + print(e.output, file=sys.stderr) > + sys.exit(e.returncode) > + > + with open(args.outputfile, 'wb') as f: > + f.write(out) > + > + > +if __name__ == '__main__': > + main() > diff --git a/src/util/xmlpool/meson.build b/src/util/xmlpool/meson.build > index 97693fa..93f9c44 100644 > --- a/src/util/xmlpool/meson.build > +++ b/src/util/xmlpool/meson.build > @@ -18,11 +18,26 @@ > # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN > THE > # SOFTWARE. > > -xmlpool_options_h = custom_target( > - 'xmlpool_options.h', > - input : ['gen_xmlpool.py', 't_options.h'], > - output : 'options.h', > - command : [prog_python2, '@INPUT@', meson.current_source_dir()], > - capture : true, > - depend_files : files('ca.po', 'es.po', 'de.po', 'nl.po', 'sv.po', 'fr.po'), > -) > +prog_msgfmt = find_program('msgfmt', required : false) > +if prog_msgfmt.found() > + xmlpool_options_h = custom_target( > + 'xmlpool_options.h', > + input : ['gen_translations.py', 't_options.h', 'gen_xmlpool.py'], > + output : ['options.h'], > + command : [ > + prog_python2, '@INPUT0@', '@INPUT1@', '@OUTPUT@', '@INPUT2@', > + meson.current_source_dir(), meson.current_build_dir(), prog_python2, > + 'ca', 'de', 'sv', 'es', 'nl', 'fr', > + ], > + ) > +else > + xmlpool_options_h = custom_target( > + 'xmlpool_options.h', > + input : ['gen_xmlpool.py', 't_options.h'], > + output : 'options.h', > + command : [ > + prog_python2, '@INPUT0@', '@INPUT1@', meson.current_source_dir(), > + ], > + capture : true, > + ) > +endif > > base-commit: 28c2d0d80b2ba15cc56651c0d3e6bc6eb31f9594 > -- > git-series 0.9.1
signature.asc
Description: signature
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
