[PATCH 2/2] remote: apply translations to polkit files

Daniel P. Berrangé posted 2 patches 2 days, 8 hours ago
[PATCH 2/2] remote: apply translations to polkit files
Posted by Daniel P. Berrangé 2 days, 8 hours ago
The 'description' and 'message' fields in polkit policy files should be
translated into the user's chosen language. xgettext is told to search
in both and source and build dirs by meson.

Unfortunately a bug in xgettext means that when it searches for built
files in XML format, it'll trigger a warning message due to failure to
load the generated file from the source dir:

  xgettext: cannot read ..snip../libvirt/src/access/org.libvirt.api.policy: failed to load external entity "..snip../libvirt/src/access/org.libvirt.api.policy"

This is harmless since it then goes on to try the build dir and
succeeds, but will pollute the output of 'ninja libvirt-pot'

Related: https://gitlab.com/libvirt/libvirt/-/merge_requests/387
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 meson.build                                    |  5 +++++
 po/POTFILES                                    |  2 ++
 po/meson.build                                 |  2 --
 src/access/meson.build                         | 18 ++++++++++++++----
 .../{libvirtd.policy => libvirtd.policy.in}    |  0
 src/remote/meson.build                         | 13 ++++++++-----
 6 files changed, 29 insertions(+), 11 deletions(-)
 rename src/remote/{libvirtd.policy => libvirtd.policy.in} (100%)

diff --git a/meson.build b/meson.build
index ca1b915737..0d0bd03a2a 100644
--- a/meson.build
+++ b/meson.build
@@ -15,6 +15,10 @@ if meson.version().version_compare('>=0.64.0')
   fs = import('fs')
 endif
 
+i18n = import('i18n')
+
+po_dir = meson.source_root() / 'po'
+
 # figure out if we are building from git
 
 git = run_command('test', '-e', '.git', check: false).returncode() == 0
@@ -114,6 +118,7 @@ localedir = prefix / get_option('localedir')
 mandir = prefix / get_option('mandir')
 sbindir = prefix / get_option('sbindir')
 sharedstatedir = prefix / get_option('sharedstatedir')
+polkitactiondir = datadir / 'polkit-1' / 'actions'
 
 docdir = get_option('docdir')
 if docdir == ''
diff --git a/po/POTFILES b/po/POTFILES
index 3514aa3dca..ff6f3763d5 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -1,6 +1,7 @@
 src/access/viraccessapicheck.c
 src/access/viraccessapichecklxc.c
 src/access/viraccessapicheckqemu.c
+src/access/org.libvirt.api.policy.in
 src/admin/admin_client.h
 src/admin/admin_server_dispatch_stubs.h
 src/remote/remote_client_bodies.h
@@ -201,6 +202,7 @@ src/qemu/qemu_validate.c
 src/qemu/qemu_vhost_user.c
 src/qemu/qemu_vhost_user_gpu.c
 src/qemu/qemu_virtiofs.c
+src/remote/libvirtd.policy.in
 src/remote/remote_daemon.c
 src/remote/remote_daemon_config.c
 src/remote/remote_daemon_dispatch.c
diff --git a/po/meson.build b/po/meson.build
index 126eeabe17..d8ace5373e 100644
--- a/po/meson.build
+++ b/po/meson.build
@@ -1,5 +1,3 @@
-i18n = import('i18n')
-
 i18n.gettext(
   meson.project_name(),
   args: [
diff --git a/src/access/meson.build b/src/access/meson.build
index fc5ba5b342..42aa5c7225 100644
--- a/src/access/meson.build
+++ b/src/access/meson.build
@@ -66,14 +66,24 @@ if conf.has('WITH_POLKIT')
   access_sources += access_polkit_sources
 
   if conf.has('WITH_LIBVIRTD')
-    custom_target(
-      'org.libvirt.api.policy',
+    polgen = custom_target(
+      'org.libvirt.api.policy.in',
       input: access_perm_h,
-      output: 'org.libvirt.api.policy',
+      output: 'org.libvirt.api.policy.in',
       command: [ meson_python_prog, python3_prog, genpolkit_prog, '@INPUT@' ],
       capture: true,
+      build_by_default: true,
+      install: true,
+      install_dir: polkitactiondir,
+    )
+
+    i18n.merge_file(
+      input: polgen,
+      output: 'org.libvirt.api.policy',
+      po_dir: po_dir,
+      data_dirs: [po_dir],
       install: true,
-      install_dir: datadir / 'polkit-1' / 'actions',
+      install_dir: polkitdir / 'actions',
     )
   endif
 endif
diff --git a/src/remote/libvirtd.policy b/src/remote/libvirtd.policy.in
similarity index 100%
rename from src/remote/libvirtd.policy
rename to src/remote/libvirtd.policy.in
diff --git a/src/remote/meson.build b/src/remote/meson.build
index 831acaaa01..9f66ee2e1c 100644
--- a/src/remote/meson.build
+++ b/src/remote/meson.build
@@ -294,12 +294,15 @@ if conf.has('WITH_REMOTE')
     endif
 
     if conf.has('WITH_POLKIT')
-      polkitdir = datadir / 'polkit-1'
-      install_data(
-        'libvirtd.policy',
-        install_dir: polkitdir / 'actions',
-        rename: [ 'org.libvirt.unix.policy' ],
+      i18n.merge_file(
+        input: 'libvirtd.policy.in',
+        output: 'org.libvirt.unix.policy',
+        po_dir: po_dir,
+        data_dirs: [po_dir],
+        install: true,
+        install_dir: polkitactiondir,
       )
+
       install_data(
         'libvirtd.rules',
         install_dir: polkitdir / 'rules.d',
-- 
2.46.0