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(a)redhat.com>
---
build-aux/syntax-check.mk | 5 +++--
meson.build | 4 ++++
po/POTFILES | 2 ++
po/meson.build | 4 +---
src/access/meson.build | 18 +++++++++++++++---
.../{libvirtd.policy => libvirtd.policy.in} | 0
src/remote/meson.build | 10 +++++++---
7 files changed, 32 insertions(+), 11 deletions(-)
rename src/remote/{libvirtd.policy => libvirtd.policy.in} (100%)
diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk
index 2c9593c28f..e6afb879be 100644
--- a/build-aux/syntax-check.mk
+++ b/build-aux/syntax-check.mk
@@ -1273,9 +1273,10 @@ po_file ?= $(top_srcdir)/po/POTFILES
# This is all generated files for RPC code.
generated_files = \
$(top_builddir)/src/*.[ch] \
- $(top_builddir)/src/*/*.[ch]
+ $(top_builddir)/src/*/*.[ch] \
+ $(top_builddir)/src/*/*.policy.in
-_gl_translatable_string_re ?= \b(N?_|gettext *)\([^)"]*("|$$)
+_gl_translatable_string_re ?= (^<policyconfig>|\b(N?_|gettext
*)\([^)"]*("|$$))
# sc_po_check can fail if generated files are not built first
sc_po_check:
diff --git a/meson.build b/meson.build
index 409a44b69c..65010dd6a8 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
diff --git a/po/POTFILES b/po/POTFILES
index 6100341330..484b34c3df 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..0f00b4830e 100644
--- a/po/meson.build
+++ b/po/meson.build
@@ -1,5 +1,3 @@
-i18n = import('i18n')
-
i18n.gettext(
meson.project_name(),
args: [
@@ -18,7 +16,7 @@ i18n.gettext(
)
potfiles_dep = [
- access_gen_sources,
+ access_generated,
admin_client_generated,
admin_driver_generated,
remote_protocol_generated,
diff --git a/src/access/meson.build b/src/access/meson.build
index c006ca5934..0cc9cf2b79 100644
--- a/src/access/meson.build
+++ b/src/access/meson.build
@@ -17,6 +17,7 @@ access_gen_headers = []
access_gen_sources = []
access_gen_sym = []
access_gen_xml = []
+access_generated = []
foreach name : [ 'remote', 'qemu', 'lxc' ]
if name == 'remote'
@@ -66,18 +67,29 @@ 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,
+ )
+ access_generated += polgen
+
+ i18n.merge_file(
+ input: polgen,
+ output: 'org.libvirt.api.policy',
+ po_dir: po_dir,
+ data_dirs: [po_dir],
install: true,
install_dir: polkitactionsdir,
)
endif
endif
+access_generated += access_gen_sources
+
virt_access_lib = static_library(
'virt_access',
[
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 9a0288f928..ea063ed6cc 100644
--- a/src/remote/meson.build
+++ b/src/remote/meson.build
@@ -294,11 +294,15 @@ if conf.has('WITH_REMOTE')
endif
if conf.has('WITH_POLKIT')
- install_data(
- 'libvirtd.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: polkitactionsdir,
- rename: [ 'org.libvirt.unix.policy' ],
)
+
install_data(
'libvirtd.rules',
install_dir: polkitrulesdir,
--
2.47.1