aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Griffis <tingping@tingping.se>2016-10-15 20:06:31 -0400
committerJussi Pakkanen <jpakkane@gmail.com>2016-10-23 08:46:48 -0700
commit423c8dbb403e432b7985469e2c054d16e84143d9 (patch)
treea92df6be0efc95ba3ac9c01cc363075cdca54385
parentb50f3e6976989e13d0d413b4af1547f5862cdfa9 (diff)
downloadmeson-423c8dbb403e432b7985469e2c054d16e84143d9.zip
meson-423c8dbb403e432b7985469e2c054d16e84143d9.tar.gz
meson-423c8dbb403e432b7985469e2c054d16e84143d9.tar.bz2
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
-rw-r--r--mesonbuild/modules/i18n.py8
-rw-r--r--mesonbuild/scripts/gettext.py16
2 files changed, 23 insertions, 1 deletions
diff --git a/mesonbuild/modules/i18n.py b/mesonbuild/modules/i18n.py
index 00787f8..28e04cb 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 95fd45a..44dfd50 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]