diff --git a/mesonbuild/modules/i18n.py b/mesonbuild/modules/i18n.py index bb1b2f8f5..838749b63 100644 --- a/mesonbuild/modules/i18n.py +++ b/mesonbuild/modules/i18n.py @@ -14,10 +14,26 @@ from os import path from .. import coredata, mesonlib, build +from ..mesonlib import MesonException import sys class I18nModule: + def merge_file(self, state, args, kwargs): + podir = kwargs.pop('po_dir', None) + if not podir: + raise MesonException('i18n: po_dir is a required kwarg') + podir = path.join(state.build_to_src, state.subdir, podir) + + file_type = kwargs.pop('type', 'xml') + VALID_TYPES = ('xml', 'desktop') + if not file_type in VALID_TYPES: + raise MesonException('i18n: "{}" is not a valid type {}'.format(file_type, VALID_TYPES)) + + kwargs['command'] = ['msgfmt', '--' + file_type, + '--template', '@INPUT@', '-d', podir, '-o', '@OUTPUT@'] + return build.CustomTarget(kwargs['output'] + '_merge', state.subdir, kwargs) + @staticmethod def _read_linguas(state): linguas = path.join(state.environment.get_source_dir(), state.subdir, 'LINGUAS') diff --git a/test cases/frameworks/6 gettext/data/meson.build b/test cases/frameworks/6 gettext/data/meson.build new file mode 100644 index 000000000..d927ba3af --- /dev/null +++ b/test cases/frameworks/6 gettext/data/meson.build @@ -0,0 +1,8 @@ +i18n.merge_file( + input: 'test.desktop.in', + output: 'test.desktop', + type: 'desktop', + po_dir: '../po', + install: true, + install_dir: join_paths(get_option('datadir'), 'applications') +) diff --git a/test cases/frameworks/6 gettext/data/test.desktop.in b/test cases/frameworks/6 gettext/data/test.desktop.in new file mode 100644 index 000000000..33b9a9fd8 --- /dev/null +++ b/test cases/frameworks/6 gettext/data/test.desktop.in @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=Test +GenericName=Application +Comment=Test Application +Type=Application + diff --git a/test cases/frameworks/6 gettext/installed_files.txt b/test cases/frameworks/6 gettext/installed_files.txt index c95b9fde4..ffe543ffe 100644 --- a/test cases/frameworks/6 gettext/installed_files.txt +++ b/test cases/frameworks/6 gettext/installed_files.txt @@ -1,3 +1,4 @@ usr/bin/intlprog usr/share/locale/de/LC_MESSAGES/intltest.mo usr/share/locale/fi/LC_MESSAGES/intltest.mo +usr/share/applications/test.desktop diff --git a/test cases/frameworks/6 gettext/meson.build b/test cases/frameworks/6 gettext/meson.build index 6bba7e006..6b517a490 100644 --- a/test cases/frameworks/6 gettext/meson.build +++ b/test cases/frameworks/6 gettext/meson.build @@ -4,3 +4,4 @@ i18n = import('i18n') subdir('po') subdir('src') +subdir('data') diff --git a/test cases/frameworks/6 gettext/po/LINGUAS b/test cases/frameworks/6 gettext/po/LINGUAS new file mode 100644 index 000000000..d319e4891 --- /dev/null +++ b/test cases/frameworks/6 gettext/po/LINGUAS @@ -0,0 +1,2 @@ +de +fi diff --git a/test cases/frameworks/6 gettext/po/POTFILES b/test cases/frameworks/6 gettext/po/POTFILES index 5fd4b84d0..f49cecdb7 100644 --- a/test cases/frameworks/6 gettext/po/POTFILES +++ b/test cases/frameworks/6 gettext/po/POTFILES @@ -1 +1,2 @@ src/intlmain.c +data/test.desktop