gettext: Add update-po target

For each project this creates a <project>-update-po target.
When ran this updates the pot file and then merges it back
into the po files in the source directory with `msgmerge`
for project maintainers and translators.

Fixes #819
pull/944/head
Patrick Griffis 8 years ago committed by Jussi Pakkanen
parent b50f3e6976
commit 423c8dbb40
  1. 8
      mesonbuild/modules/i18n.py
  2. 16
      mesonbuild/scripts/gettext.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()

@ -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]

Loading…
Cancel
Save