| # SPDX-License-Identifier: Apache-2.0 | |
| # Copyright 2016 The Meson development team | |
| from __future__ import annotations | |
| import os | |
| import argparse | |
| import subprocess | |
| import tempfile | |
| import shlex | |
| import shutil | |
| import typing as T | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument('command') | |
| parser.add_argument('--build-dir', default='') | |
| parser.add_argument('-i', '--input', default='') | |
| parser.add_argument('-o', '--output', default='') | |
| parser.add_argument('--itstool', default='itstool') | |
| parser.add_argument('--its', action='append', default=[]) | |
| parser.add_argument('mo_files', nargs='+') | |
| def run_join(build_dir: str, itstool: str, its_files: T.List[str], mo_files: T.List[str], | |
| in_fname: str, out_fname: str) -> int: | |
| if not mo_files: | |
| print('No mo files specified to use for translation.') | |
| return 1 | |
| with tempfile.TemporaryDirectory(prefix=os.path.basename(in_fname), dir=build_dir) as tmp_dir: | |
| # copy mo files to have the right names so itstool can infer their locale | |
| locale_mo_files = [] | |
| for mo_file in mo_files: | |
| if not os.path.exists(mo_file): | |
| print(f'Could not find mo file {mo_file}') | |
| return 1 | |
| if not mo_file.endswith('.mo'): | |
| print(f'File is not a mo file: {mo_file}') | |
| return 1 | |
| # determine locale of this mo file | |
| parts = mo_file.partition('LC_MESSAGES') | |
| if parts[0].endswith((os.sep, '/')): | |
| locale = os.path.basename(parts[0][:-1]) | |
| else: | |
| locale = os.path.basename(parts[0]) | |
| tmp_mo_fname = os.path.join(tmp_dir, locale + '.mo') | |
| shutil.copy(mo_file, tmp_mo_fname) | |
| locale_mo_files.append(tmp_mo_fname) | |
| cmd = shlex.split(itstool) | |
| if its_files: | |
| for fname in its_files: | |
| cmd.extend(['-i', fname]) | |
| cmd.extend(['-j', in_fname, | |
| '-o', out_fname]) | |
| cmd.extend(locale_mo_files) | |
| return subprocess.call(cmd) | |
| def run(args: T.List[str]) -> int: | |
| options = parser.parse_args(args) | |
| command = options.command | |
| build_dir = os.environ.get('MESON_BUILD_ROOT', os.getcwd()) | |
| if options.build_dir: | |
| build_dir = options.build_dir | |
| if command == 'join': | |
| return run_join(build_dir, | |
| options.itstool, | |
| options.its, | |
| options.mo_files, | |
| options.input, | |
| options.output) | |
| else: | |
| print('Unknown subcommand.') | |
| return 1 |