remote: apply translations to polkit files

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
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2024-12-19 09:27:27 +00:00
parent c244d041d9
commit 6d3b877171
7 changed files with 32 additions and 11 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -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',
[

View File

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