diff --git a/mesonbuild/modules/i18n.py b/mesonbuild/modules/i18n.py index 00787f884..28e04cb3e 100644 --- a/mesonbuild/modules/i18n.py +++ b/mesonbuild/modules/i18n.py @@ -33,6 +33,12 @@ class I18nModule: pottarget = build.RunTarget(packagename + '-pot', sys.executable, potargs, [], state.subdir) gmoargs = [state.environment.get_build_command(), '--internal', 'gettext', 'gen_gmo'] + languages gmotarget = build.RunTarget(packagename + '-gmo', sys.executable, gmoargs, [], state.subdir) + updatepoargs = [state.environment.get_build_command(), '--internal', 'gettext', 'update_po', packagename] + updatepoargs.append('@@'.join(languages)) + if datadirs: + updatepoargs.append('--datadirs=' + ':'.join(datadirs)) + updatepoargs += extra_args + updatepotarget = build.RunTarget(packagename + '-update-po', sys.executable, updatepoargs, [], state.subdir) installcmd = [sys.executable, state.environment.get_build_command(), '--internal', @@ -43,7 +49,7 @@ class I18nModule: state.environment.coredata.get_builtin_option('localedir'), ] + languages iscript = build.InstallScript(installcmd) - return [pottarget, gmotarget, iscript] + return [pottarget, gmotarget, iscript, updatepotarget] def initialize(): return I18nModule() diff --git a/mesonbuild/scripts/gettext.py b/mesonbuild/scripts/gettext.py index 95fd45a5f..44dfd5031 100644 --- a/mesonbuild/scripts/gettext.py +++ b/mesonbuild/scripts/gettext.py @@ -38,6 +38,13 @@ def gen_gmo(src_sub, bld_sub, langs): '-o', os.path.join(bld_sub, l + '.gmo')]) return 0 +def update_po(src_sub, pkgname, langs): + potfile = os.path.join(src_sub, pkgname + '.pot') + for l in langs: + pofile = os.path.join(src_sub, l + '.po') + subprocess.check_call(['msgmerge', '-q', '-o', pofile, pofile, potfile]) + return 0 + def do_install(src_sub, bld_sub, dest, pkgname, langs): for l in langs: srcfile = os.path.join(bld_sub, l + '.gmo') @@ -62,6 +69,15 @@ def run(args): src_sub = os.path.join(os.environ['MESON_SOURCE_ROOT'], os.environ['MESON_SUBDIR']) bld_sub = os.path.join(os.environ['MESON_BUILD_ROOT'], os.environ['MESON_SUBDIR']) return gen_gmo(src_sub, bld_sub, args[1:]) + elif subcmd == 'update_po': + pkgname = args[1] + langs = args[2].split('@@') + datadirs = args[3][11:] if args[3].startswith('--datadirs=') else None + extra_args = args[4:] if datadirs is not None else args[3:] + src_sub = os.path.join(os.environ['MESON_SOURCE_ROOT'], os.environ['MESON_SUBDIR']) + if run_potgen(src_sub, pkgname, datadirs, extra_args) != 0: + return 1 + return update_po(src_sub, pkgname, langs) elif subcmd == 'install': subdir = args[1] pkgname = args[2]