[libvirt PATCH 0/7] po: Various fixes and cleanups

msgid "" "*** BLURB HERE ***" msgstr "" Andrea Bolognani (7): po: Drop unwanted comments from potfile syntax-check: Introduce sc_pot_comments po: Drop prefixes from POTFILES.in po: Don't generate POTFILES syntax-check: Don't exclude src/false.c from sc_po_check po: Sort LINGUAS syntax-check: Introduce sc_linguas_sorting build-aux/syntax-check.mk | 32 +++- po/LINGUAS | 8 +- po/POTFILES | 384 ++++++++++++++++++++++++++++++++++++++ po/POTFILES.in | 384 -------------------------------------- po/libvirt.pot | 216 --------------------- po/meson.build | 13 +- 6 files changed, 414 insertions(+), 623 deletions(-) create mode 100644 po/POTFILES delete mode 100644 po/POTFILES.in -- 2.35.3

These managed to sneak in as part of ec02f5719a87, when the potfile was last refreshed, but are not supposed to be there. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- po/libvirt.pot | 216 ------------------------------------------------- 1 file changed, 216 deletions(-) diff --git a/po/libvirt.pot b/po/libvirt.pot index 6be56a23f6..127f623a30 100644 --- a/po/libvirt.pot +++ b/po/libvirt.pot @@ -30,7 +30,6 @@ msgid "" " (specify help <group> for details about the commands in the group)\n" msgstr "" -#. Print the description only if it's not empty. #: tools/vsh.c:709 msgid "" "\n" @@ -292,7 +291,6 @@ msgstr "" msgid " Bandwidth limit: %llu bytes/s (%-.3lf %s/s)" msgstr "" -#. true if 'arg' works instead of '--opt arg' #: tools/vsh.c:653 msgid " NAME\n" msgstr "" @@ -590,16 +588,6 @@ msgstr "" msgid "%s object has invalid dynamic type" msgstr "" -#. -#. * A required property must be != 0 (NULL for pointers, "undefined" == 0 for -#. * enumeration values). -#. * -#. * To be used as part of ESX_VI__TEMPLATE__VALIDATE. -#. -#. -#. * Macros to implement managed objects -#. -#. FIXME: This results in O(n^2) runtime in case of missing required, but * unselected properties. #: src/esx/esx_vi_types.c:487 src/esx/esx_vi_types.c:744 #, c-format msgid "%s object is missing the required '%s' property" @@ -1773,7 +1761,6 @@ msgstr "" msgid "(libxl_migration_cookie)" msgstr "" -#. parse and modify the xml from the user #: src/conf/domain_conf.c:29964 msgid "(metadata_xml)" msgstr "" @@ -1850,7 +1837,6 @@ msgstr "" msgid "(volume_definition)" msgstr "" -#. Capacity related information isn't available #: tools/virsh-pool.c:1283 tools/virsh-pool.c:1284 tools/virsh-pool.c:1285 msgid "-" msgstr "" @@ -2975,15 +2961,11 @@ msgid "" "dirtyrate'." msgstr "" -#. -#. * Macros to implement dynamic dispatched functions -#. #: src/esx/esx_vi_types.c:544 src/esx/esx_vi_types.c:690 #, c-format msgid "Call to %s for unexpected type '%s'" msgstr "" -#. nothing #: src/esx/esx_vi_types.c:210 src/esx/esx_vi_types.c:225 #, c-format msgid "Call to %s for unexpected type '%s', expected '%s'" @@ -4418,7 +4400,6 @@ msgstr "" msgid "Checkpoints have inconsistent relations for domain %s" msgstr "" -#. All bytes up to and including the checksum byte should add up to 0. #: src/util/virpcivpd.c:556 msgid "Checksum validation has failed" msgstr "" @@ -5963,7 +5944,6 @@ msgstr "" msgid "Could not retrieve default Msvm_DiskDrive object" msgstr "" -#. Something went wrong retrieving pool info, cope with it #: tools/virsh-pool.c:1250 msgid "Could not retrieve pool information" msgstr "" @@ -7024,7 +7004,6 @@ msgid "" "Domain has %d interfaces. Please specify which one to detach using --mac" msgstr "" -#. this is the 2nd match, so it's ambiguous #: tools/virsh-domain.c:12353 #, c-format msgid "" @@ -8495,28 +8474,18 @@ msgstr "" msgid "Failed to create thread for receiving migration data" msgstr "" -#. -#. * Not much we can do on error here except log it. -#. #: src/remote/remote_daemon.c:476 msgid "Failed to create thread to handle daemon restart" msgstr "" -#. -#. * Not much we can do on error here except log it. -#. #: src/libxl/libxl_domain.c:723 msgid "Failed to create thread to handle domain death" msgstr "" -#. -#. * Not much we can do on error here except log it. -#. #: src/libxl/libxl_domain.c:701 msgid "Failed to create thread to handle domain shutdown" msgstr "" -#. Not much else can be done #: src/storage/storage_driver.c:2352 msgid "Failed to create thread to handle pool refresh" msgstr "" @@ -9218,7 +9187,6 @@ msgstr "" msgid "Failed to list active pools" msgstr "" -#. there was an error during the first or second call #: tools/virsh-domain-monitor.c:1590 msgid "Failed to list domains" msgstr "" @@ -9239,32 +9207,26 @@ msgstr "" msgid "Failed to list inactive pools" msgstr "" -#. there was an error during the first or second call #: tools/virsh-interface.c:208 msgid "Failed to list interfaces" msgstr "" -#. there was an error during the call #: tools/virsh-nwfilter.c:679 msgid "Failed to list network filter bindings" msgstr "" -#. there was an error during the call #: tools/virsh-nwfilter.c:276 tools/virsh-nwfilter.c:297 msgid "Failed to list network filters" msgstr "" -#. there was an error during the first or second call #: tools/virsh-network.c:514 msgid "Failed to list networks" msgstr "" -#. there was an error during the call #: tools/virsh-nodedev.c:242 tools/virsh-nodedev.c:263 msgid "Failed to list node devices" msgstr "" -#. there was an error during the call #: tools/virsh-secret.c:452 msgid "Failed to list node secrets" msgstr "" @@ -9274,7 +9236,6 @@ msgstr "" msgid "Failed to list persistent guests on $uri" msgstr "" -#. there was an error during the first or second call #: tools/virsh-pool.c:879 msgid "Failed to list pools" msgstr "" @@ -9300,7 +9261,6 @@ msgstr "" msgid "Failed to list vcpus for domain '%d' with libxenlight" msgstr "" -#. there was an error during the call #: tools/virsh-volume.c:1248 msgid "Failed to list volumes" msgstr "" @@ -10046,9 +10006,6 @@ msgstr "" msgid "Failed to resume domain '%s'" msgstr "" -#. Hm, we already know we are in error here. We don't want to -#. * overwrite the previous error, though, so we just throw something -#. * to the logs and hope for the best #: src/qemu/qemu_migration.c:156 #, c-format msgid "Failed to resume guest %s after failure" @@ -10844,64 +10801,11 @@ msgid "" "for VMX file" msgstr "" -#. Macros to help dealing with flag requirements. -#. * -#. * VIR_REQUIRE_FLAG_RET: -#. * -#. * @FLAG1: First flag to be checked. -#. * @FLAG2: Second flag that is required by first flag. -#. * @RET: Return value. -#. * -#. * Check whether required flag is set. The checked flags are compared -#. * with flags variable. -#. * -#. * This helper does an early return and therefore it has to be called -#. * before anything that would require cleanup. -#. -#. * -#. * VIR_REQUIRE_FLAG_GOTO: -#. * -#. * @FLAG1: First flag to be checked. -#. * @FLAG2: Second flag that is required by first flag. -#. * @LABEL: Label to jump to. -#. * -#. * Check whether required flag is set. The checked flags are compared -#. * with flags variable. -#. * -#. * Returns nothing. Jumps to a label if required flag is not set. -#. #: src/internal.h:382 src/internal.h:404 #, c-format msgid "Flag '%s' is required by flag '%s'" msgstr "" -#. Macros to help dealing with mutually exclusive flags. -#. * -#. * VIR_EXCLUSIVE_FLAGS_RET: -#. * -#. * @FLAG1: First flag to be checked. -#. * @FLAG2: Second flag to be checked. -#. * @RET: Return value. -#. * -#. * Reject mutually exclusive API flags. The checked flags are compared -#. * with flags variable. -#. * -#. * This helper does an early return and therefore it has to be called -#. * before anything that would require cleanup. -#. -#. * -#. * VIR_EXCLUSIVE_FLAGS_GOTO: -#. * -#. * @FLAG1: First flag to be checked. -#. * @FLAG2: Second flag to be checked. -#. * @LABEL: Label to jump to. -#. * -#. * Reject mutually exclusive API flags. The checked flags are compared -#. * with flags variable. -#. * -#. * Returns nothing. Jumps to a label if unsupported flags were -#. * passed to it. -#. #: src/internal.h:332 src/internal.h:356 #, c-format msgid "Flags '%s' and '%s' are mutually exclusive" @@ -12065,15 +11969,6 @@ msgstr "" msgid "Invalid address." msgstr "" -#. -#. * Don't check for *selectSet != NULL here because selectSet is a list -#. * and might contain items already. This function appends to selectSet. -#. -#. optional -#. optional -#. nothing -#. nothing -#. nothing #: src/esx/esx_driver.c:4170 src/esx/esx_driver.c:4260 #: src/esx/esx_storage_backend_vmfs.c:606 src/esx/esx_util.c:219 #: src/esx/esx_util.h:30 src/esx/esx_vi.c:419 src/esx/esx_vi.c:817 @@ -14838,12 +14733,6 @@ msgstr "" msgid "NVMe namespace can't be zero" msgstr "" -#. Output old style header -#. We only get here if the --details option was selected. -#. Insert the header into table -#. The old output format -#. We only get here if the --details option was selected. -#. Insert the header into table #: tools/virsh-checkpoint.c:750 tools/virsh-checkpoint.c:753 #: tools/virsh-domain-monitor.c:1929 tools/virsh-domain-monitor.c:1931 #: tools/virsh-domain-monitor.c:2330 tools/virsh-domain.c:13216 @@ -16114,20 +16003,6 @@ msgid "" "modelName '%s'" msgstr "" -#. Macros to help dealing with required options. -#. VSH_REQUIRE_OPTION_EXPR: -#. * -#. * @NAME1: String containing the name of the option. -#. * @EXPR1: Expression to validate the variable (boolean variable). -#. * @NAME2: String containing the name of required option. -#. * @EXPR2: Expression to validate the variable (boolean variable). -#. * -#. * Check if required command options in virsh was set. Use the -#. * provided expression to check the variables. -#. * -#. * This helper does an early return and therefore it has to be called -#. * before anything that would require cleanup. -#. #: tools/vsh.h:542 #, c-format msgid "Option --%s is required by option --%s" @@ -16153,20 +16028,6 @@ msgstr "" msgid "Optional flags or --rawstats are not supported by the daemon" msgstr "" -#. Macros to help dealing with mutually exclusive options. -#. VSH_EXCLUSIVE_OPTIONS_EXPR: -#. * -#. * @NAME1: String containing the name of the option. -#. * @EXPR1: Expression to validate the variable (boolean variable) -#. * @NAME2: String containing the name of the option. -#. * @EXPR2: Expression to validate the variable (boolean variable) -#. * -#. * Reject mutually exclusive command options in virsh. Use the -#. * provided expression to check the variables. -#. * -#. * This helper does an early return and therefore it has to be called -#. * before anything that would require cleanup. -#. #: tools/vsh.h:490 #, c-format msgid "Options --%s and --%s are mutually exclusive" @@ -16460,7 +16321,6 @@ msgstr "" msgid "Partition path '%s' must start with '/'" msgstr "" -#. warn users that the --base64 option passed from command line is wrong #: tools/virsh-secret.c:237 msgid "Passing secret value as command-line argument is insecure!" msgstr "" @@ -17501,7 +17361,6 @@ msgstr "" msgid "S4 state is disabled for this domain" msgstr "" -#. Denied #: src/rpc/virnetsaslcontext.c:168 #, c-format msgid "SASL client identity '%s' not allowed by ACL" @@ -18137,9 +17996,6 @@ msgstr "" msgid "Shared memory mapping is not supported with this QEMU" msgstr "" -#. XXX: Need to sort the returned params once new parameter -#. * fields not of shared memory are added. -#. #: tools/virsh-host.c:1543 msgid "Shared memory:\n" msgstr "" @@ -18239,7 +18095,6 @@ msgstr "" msgid "Snapshot" msgstr "" -#. Depending on flags, we re-edit even if XML is unchanged. #: tools/virsh-snapshot.c:553 #, c-format msgid "Snapshot %s XML configuration not changed.\n" @@ -18837,7 +18692,6 @@ msgstr "" msgid "Table row cannot be empty" msgstr "" -#. title #: tools/virsh-domain-monitor.c:482 tools/virsh-domain-monitor.c:597 #: tools/virsh-domain-monitor.c:599 tools/virsh-domain.c:13216 msgid "Target" @@ -20421,12 +20275,10 @@ msgstr "" msgid "Try again?" msgstr "" -#. Better leak than crash #: src/esx/esx_vi.c:628 msgid "Trying to free MultiCURL object that is still in use" msgstr "" -#. Better leak than crash #: src/esx/esx_vi.c:517 msgid "Trying to free SharedCURL object that is still in use" msgstr "" @@ -23748,7 +23600,6 @@ msgstr "" msgid "Unknown error" msgstr "" -#. should never happen (tm) #: src/rpc/virnetsshsession.c:480 msgid "Unknown error value" msgstr "" @@ -24737,13 +24588,11 @@ msgstr "" msgid "Video adapters are not supported int containers." msgstr "" -#. FIXME - list a copyright blurb, as in GNU programs? #: tools/virsh.c:498 #, c-format msgid "Virsh command line tool of libvirt %s\n" msgstr "" -#. FIXME - list a copyright blurb, as in GNU programs? #: tools/virt-admin.c:1262 #, c-format msgid "Virt-admin command line tool of libvirt %s\n" @@ -25320,11 +25169,6 @@ msgstr "" msgid "allocate the new capacity, rather than leaving it sparse" msgstr "" -#. -#. * we need to use an intermediary pointer to @data as compilers may sometimes -#. * complain about @data not being a pointer type: -#. * error: the address of 'foo' will always evaluate as 'true' [-Werror=address] -#. #: src/util/virnetdev.c:1584 src/util/virnetdev.c:3166 #: src/util/virnetdev.c:3249 src/util/virnetdevbridge.c:1073 #: src/util/virnetdevip.c:140 src/util/virnetdevip.c:363 @@ -27529,7 +27373,6 @@ msgstr "" msgid "cannot open path '%s' in '%s'" msgstr "" -#. A dangling symlink now implies a TOCTTOU race; report it. #: src/storage/storage_backend_gluster.c:267 src/storage/storage_util.c:1672 #, c-format msgid "cannot open volume '%s'" @@ -28539,7 +28382,6 @@ msgstr "" msgid "child didn't write error (status=%d)" msgstr "" -#. in case of EACCES, the parent will retry #: src/util/virfile.c:2807 #, c-format msgid "child failed to create directory '%s'" @@ -33443,9 +33285,6 @@ msgstr "" msgid "fetch or set the currently defined set of logging outputs on daemon" msgstr "" -#. parse inbound and outbound which are in the format of -#. * 'average,peak,burst,floor', in which peak and burst are optional, -#. * thus 'average,,burst' and 'average,peak' are also legal. #: tools/virsh-domain.c:908 #, c-format msgid "field '%s' is malformed" @@ -34183,7 +34022,6 @@ msgstr "" msgid "handler failed to wait on condition" msgstr "" -#. caller's error #: src/conf/nwfilter_params.c:408 msgid "hash lookup resulted in NULL pointer" msgstr "" @@ -34873,25 +34711,6 @@ msgstr "" msgid "interface name %s does not fit into buffer" msgstr "" -#. -#. * virsh-interface.c: Commands to manage host interface -#. * -#. * Copyright (C) 2005, 2007-2016 Red Hat, Inc. -#. * -#. * This library is free software; you can redistribute it and/or -#. * modify it under the terms of the GNU Lesser General Public -#. * License as published by the Free Software Foundation; either -#. * version 2.1 of the License, or (at your option) any later version. -#. * -#. * This library is distributed in the hope that it will be useful, -#. * but WITHOUT ANY WARRANTY; without even the implied warranty of -#. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -#. * Lesser General Public License for more details. -#. * -#. * You should have received a copy of the GNU Lesser General Public -#. * License along with this library. If not, see -#. * <http://www.gnu.org/licenses/>. -#. #: tools/virsh-interface.c:25 msgid "interface name or MAC address" msgstr "" @@ -38802,15 +38621,6 @@ msgstr "" msgid "monitor failure" msgstr "" -#. * -#. * QEMU_CHECK_MONITOR_FULL: -#. * @mon: monitor pointer variable to check, evaluated multiple times, no parentheses -#. * @exit: statement that is used to exit the function -#. * -#. * This macro checks that the monitor is valid for given operation and exits -#. * the function if not. The macro also adds a debug statement regarding the -#. * monitor. -#. #: src/qemu/qemu_monitor.c:82 msgid "monitor must not be NULL" msgstr "" @@ -39050,7 +38860,6 @@ msgstr "" msgid "negative size requires --shrink" msgstr "" -#. 56 is good for Kerberos #: src/remote/remote_daemon_dispatch.c:3733 #, c-format msgid "negotiated SSF %d was not strong enough" @@ -45298,7 +45107,6 @@ msgstr "" msgid "unable to find valid requested VMware backend '%s'" msgstr "" -#. fdatasync() may fail on some special FDs, e.g. pipes #: src/util/iohelper.c:173 #, c-format msgid "unable to fsync %s" @@ -46325,8 +46133,6 @@ msgstr "" msgid "unix" msgstr "" -#. Something went wrong retrieving a volume path, cope with it -#. Something went wrong retrieving volume info, cope with it #: src/conf/network_conf.c:2920 src/conf/network_conf.c:2921 #: src/conf/network_conf.c:2953 src/conf/network_conf.c:2954 #: tools/virsh-domain-event.c:51 tools/virsh-domain-event.c:163 @@ -47319,28 +47125,6 @@ msgstr "" msgid "unsupported filesystem type '%s'" msgstr "" -#. * -#. * virCheckFlags: -#. * @supported: an OR'ed set of supported flags -#. * @retval: return value in case unsupported flags were passed -#. * -#. * To avoid memory leaks this macro has to be used before any non-trivial -#. * code which could possibly allocate some memory. -#. * -#. * Returns nothing. Exits the caller function if unsupported flags were -#. * passed to it. -#. -#. * -#. * virCheckFlagsGoto: -#. * @supported: an OR'ed set of supported flags -#. * @label: label to jump to on error -#. * -#. * To avoid memory leaks this macro has to be used before any non-trivial -#. * code which could possibly allocate some memory. -#. * -#. * Returns nothing. Jumps to a label if unsupported flags were -#. * passed to it. -#. #: src/internal.h:285 src/internal.h:307 #, c-format msgid "unsupported flags (0x%lx) in function %s" -- 2.35.3

On Tue, May 17, 2022 at 10:32:11 +0200, Andrea Bolognani wrote:
These managed to sneak in as part of ec02f5719a87, when the potfile was last refreshed, but are not supposed to be there.
Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- po/libvirt.pot | 216 ------------------------------------------------- 1 file changed, 216 deletions(-)
Hmm, so is this something based perhaps on a different way how Jirka generates these? I'm asking because I'm fairly certain that Jirka has a script for this so that needs to be fixed too.

On Tue, May 17, 2022 at 11:11:00AM +0200, Peter Krempa wrote:
On Tue, May 17, 2022 at 10:32:11 +0200, Andrea Bolognani wrote:
These managed to sneak in as part of ec02f5719a87, when the potfile was last refreshed, but are not supposed to be there.
Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- po/libvirt.pot | 216 ------------------------------------------------- 1 file changed, 216 deletions(-)
Hmm, so is this something based perhaps on a different way how Jirka generates these? I'm asking because I'm fairly certain that Jirka has a script for this so that needs to be fixed too.
No, you can just call the standard 'ninja libvirt-pot' target generated by meson and reproduce this - only sometimes, of course ;) I assume Jirka's script uses the existing functionality rather than reimplementing it. -- Andrea Bolognani / Red Hat / Virtualization

On Tue, May 17, 2022 at 02:34:00AM -0700, Andrea Bolognani wrote:
On Tue, May 17, 2022 at 11:11:00AM +0200, Peter Krempa wrote:
On Tue, May 17, 2022 at 10:32:11 +0200, Andrea Bolognani wrote:
These managed to sneak in as part of ec02f5719a87, when the potfile was last refreshed, but are not supposed to be there.
Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- po/libvirt.pot | 216 ------------------------------------------------- 1 file changed, 216 deletions(-)
Hmm, so is this something based perhaps on a different way how Jirka generates these? I'm asking because I'm fairly certain that Jirka has a script for this so that needs to be fixed too.
No, you can just call the standard 'ninja libvirt-pot' target generated by meson and reproduce this - only sometimes, of course ;)
I assume Jirka's script uses the existing functionality rather than reimplementing it.
The pot files should just be imported from the pristine potfile published by our CI job 'potfile' which is AlmaLinux8 based. If that's generating something bad, we need to address that. With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|

On Tue, May 17, 2022 at 10:46:21 +0100, Daniel P. Berrangé wrote:
On Tue, May 17, 2022 at 02:34:00AM -0700, Andrea Bolognani wrote:
On Tue, May 17, 2022 at 11:11:00AM +0200, Peter Krempa wrote:
On Tue, May 17, 2022 at 10:32:11 +0200, Andrea Bolognani wrote:
These managed to sneak in as part of ec02f5719a87, when the potfile was last refreshed, but are not supposed to be there.
Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- po/libvirt.pot | 216 ------------------------------------------------- 1 file changed, 216 deletions(-)
Hmm, so is this something based perhaps on a different way how Jirka generates these? I'm asking because I'm fairly certain that Jirka has a script for this so that needs to be fixed too.
No, you can just call the standard 'ninja libvirt-pot' target generated by meson and reproduce this - only sometimes, of course ;)
I assume Jirka's script uses the existing functionality rather than reimplementing it.
The pot files should just be imported from the pristine potfile published by our CI job 'potfile' which is AlmaLinux8 based.
If that's generating something bad, we need to address that.
Right, I just download the generated file from https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=potf... and push it to git. So updating the file manually without fixing the generator makes little sense as the file will be overwritten in preparation for the following release. Jirka

On Tue, May 17, 2022 at 12:19:07PM +0200, Jiri Denemark wrote:
On Tue, May 17, 2022 at 10:46:21 +0100, Daniel P. Berrangé wrote:
On Tue, May 17, 2022 at 02:34:00AM -0700, Andrea Bolognani wrote:
On Tue, May 17, 2022 at 11:11:00AM +0200, Peter Krempa wrote:
Hmm, so is this something based perhaps on a different way how Jirka generates these? I'm asking because I'm fairly certain that Jirka has a script for this so that needs to be fixed too.
No, you can just call the standard 'ninja libvirt-pot' target generated by meson and reproduce this - only sometimes, of course ;)
I assume Jirka's script uses the existing functionality rather than reimplementing it.
The pot files should just be imported from the pristine potfile published by our CI job 'potfile' which is AlmaLinux8 based.
If that's generating something bad, we need to address that.
Right, I just download the generated file from https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=potf... and push it to git. So updating the file manually without fixing the generator makes little sense as the file will be overwritten in preparation for the following release.
You could run 'ninja libvirt-pot' locally and avoid the round-trip to GitLab, but whatever works for you :) Alternative approach: we could take the options coming from the glib preset, minus --add-comments, and pass them ourselves. Bit ugly, but would guarantee that we get the correct file generated every single time. And we can go back to using the preset once we are in a position where we can rely on meson >= 0.60 being used. Sounds good? -- Andrea Bolognani / Red Hat / Virtualization

We don't want comments to be present in the potfile, unless they're specifically aimed at translators. To achieve this, we pass the --add-comments=TRANSLATORS: option to xgettext. However, we also use the 'glib' preset, which contains the --add-comments option. This should work fine, as later options override earlier ones, but there's a problem: until 0.60, meson would not correctly preserve the order of options, and so whether or not the potfile would contain comments we don't care about was entirely down to chance. Add a check that will make the test suite fail if unwanted comments have been added to the potfile. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- build-aux/syntax-check.mk | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk index 6664763faf..b14e2e57cc 100644 --- a/build-aux/syntax-check.mk +++ b/build-aux/syntax-check.mk @@ -1503,6 +1503,17 @@ sc_po_check: rm -f $@-1 $@-2; \ fi +pot_file = $(top_srcdir)/po/libvirt.pot + +# Before 0.60, meson would sometimes pass options to xgettext in the +# wrong order, resulting in unwanted comments showing up in the +# potfile after it was refreshed +sc_pot_comments: + @if $(GREP) -E '^#\. ' $(pot_file) | $(GREP) -Ev 'TRANSLATORS:'; then \ + echo "Spurious comments in $(pot_file)" 1>&1; \ + exit 1; \ + fi + # #if WITH_... will evaluate to false for any non numeric string. # That would be flagged by using -Wundef, however gnulib currently # tests many undefined macros, and so we can't enable that option. -- 2.35.3

On Tue, May 17, 2022 at 10:32:12 +0200, Andrea Bolognani wrote:
We don't want comments to be present in the potfile, unless they're specifically aimed at translators.
To achieve this, we pass the --add-comments=TRANSLATORS: option to xgettext. However, we also use the 'glib' preset, which contains the --add-comments option.
This should work fine, as later options override earlier ones, but there's a problem: until 0.60, meson would not correctly preserve the order of options, and so whether or not the potfile would contain comments we don't care about was entirely down to chance.
Add a check that will make the test suite fail if unwanted comments have been added to the potfile.
Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- build-aux/syntax-check.mk | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk index 6664763faf..b14e2e57cc 100644 --- a/build-aux/syntax-check.mk +++ b/build-aux/syntax-check.mk @@ -1503,6 +1503,17 @@ sc_po_check: rm -f $@-1 $@-2; \ fi
+pot_file = $(top_srcdir)/po/libvirt.pot + +# Before 0.60, meson would sometimes pass options to xgettext in the +# wrong order, resulting in unwanted comments showing up in the +# potfile after it was refreshed +sc_pot_comments: + @if $(GREP) -E '^#\. ' $(pot_file) | $(GREP) -Ev 'TRANSLATORS:'; then \ + echo "Spurious comments in $(pot_file)" 1>&1; \ + exit 1; \ + fi
Ewww. This doesn't feel like a systemic fix. If meson can't generate them properly, we should make sure to call the tool properly rahter than just check whether it's broken.

On Tue, May 17, 2022 at 11:12:47AM +0200, Peter Krempa wrote:
On Tue, May 17, 2022 at 10:32:12 +0200, Andrea Bolognani wrote:
+# Before 0.60, meson would sometimes pass options to xgettext in the +# wrong order, resulting in unwanted comments showing up in the +# potfile after it was refreshed +sc_pot_comments: + @if $(GREP) -E '^#\. ' $(pot_file) | $(GREP) -Ev 'TRANSLATORS:'; then \ + echo "Spurious comments in $(pot_file)" 1>&1; \ + exit 1; \ + fi
Ewww. This doesn't feel like a systemic fix. If meson can't generate them properly, we should make sure to call the tool properly rahter than just check whether it's broken.
Whether meson generates them properly or not is based on a coin flip, which is why it took me so damn long to get to the bottom of it :) meson 0.60 and newer always generate the file correctly. Once all platforms we target have a new enough version we can decide to drop the check; in the meantime, having it will prevent further cruft from sneaking in undetected. Reimplementing the logic ourselves just because of this bug doesn't sound like a good idea. It would add significant long-term maintenance burden. -- Andrea Bolognani / Red Hat / Virtualization

On Tue, May 17, 2022 at 02:23:45AM -0700, Andrea Bolognani wrote:
On Tue, May 17, 2022 at 11:12:47AM +0200, Peter Krempa wrote:
On Tue, May 17, 2022 at 10:32:12 +0200, Andrea Bolognani wrote:
+# Before 0.60, meson would sometimes pass options to xgettext in the +# wrong order, resulting in unwanted comments showing up in the +# potfile after it was refreshed +sc_pot_comments: + @if $(GREP) -E '^#\. ' $(pot_file) | $(GREP) -Ev 'TRANSLATORS:'; then \ + echo "Spurious comments in $(pot_file)" 1>&1; \ + exit 1; \ + fi
Ewww. This doesn't feel like a systemic fix. If meson can't generate them properly, we should make sure to call the tool properly rahter than just check whether it's broken.
Whether meson generates them properly or not is based on a coin flip, which is why it took me so damn long to get to the bottom of it :)
meson 0.60 and newer always generate the file correctly. Once all platforms we target have a new enough version we can decide to drop the check; in the meantime, having it will prevent further cruft from sneaking in undetected.
Can you say what has changed in the xgettext command line that meson is running between the fixed & broken release. I'm not seing any obvious difference in git logs for 0.60 that could cause this. With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|

On Tue, May 17, 2022 at 10:49:47AM +0100, Daniel P. Berrangé wrote:
On Tue, May 17, 2022 at 02:23:45AM -0700, Andrea Bolognani wrote:
On Tue, May 17, 2022 at 11:12:47AM +0200, Peter Krempa wrote:
On Tue, May 17, 2022 at 10:32:12 +0200, Andrea Bolognani wrote:
+# Before 0.60, meson would sometimes pass options to xgettext in the +# wrong order, resulting in unwanted comments showing up in the +# potfile after it was refreshed +sc_pot_comments: + @if $(GREP) -E '^#\. ' $(pot_file) | $(GREP) -Ev 'TRANSLATORS:'; then \ + echo "Spurious comments in $(pot_file)" 1>&1; \ + exit 1; \ + fi
Ewww. This doesn't feel like a systemic fix. If meson can't generate them properly, we should make sure to call the tool properly rahter than just check whether it's broken.
Whether meson generates them properly or not is based on a coin flip, which is why it took me so damn long to get to the bottom of it :)
meson 0.60 and newer always generate the file correctly. Once all platforms we target have a new enough version we can decide to drop the check; in the meantime, having it will prevent further cruft from sneaking in undetected.
Can you say what has changed in the xgettext command line that meson is running between the fixed & broken release. I'm not seing any obvious difference in git logs for 0.60 that could cause this.
This is the relevant change: https://github.com/mesonbuild/meson/commit/bd2fcb268b9ff48797bebb6a2ef94d274... Before 0.60, the xgettext arguments coming from the glib preset were added to a set along with the ones that we provide ourselves, and so there was no guaranteed ordering when they were later passed to the command. The commit above switched from a standard Python set to a mesonlib.OrderedSet, so the ordering is now guaranteed to be always the expected one. -- Andrea Bolognani / Red Hat / Virtualization

Commit 8beb7fdd0e23 changed the handling of POTFILES so that it could cope with files being located in either the source or build directory: it did so by adding @SRCDIR@ and @BUILDDIR@ respectively at the beginning of each line, and then converting them back to the actual values when generating POTFILES from POTFILES.in. Later, commit c6a0d3ff8b4e started passing --directory to xgettext, which resulted in the tool being able to locate files regardless of whether they are in the source or build directory. However, @SRCDIR@ and @BUILDDIR@ were still added to POTFILES.in only to be stripped when generating POTFILES. Simplify things by not storing information that we know we're going to discard later. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- build-aux/syntax-check.mk | 4 +- po/POTFILES.in | 768 +++++++++++++++++++------------------- 2 files changed, 386 insertions(+), 386 deletions(-) diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk index b14e2e57cc..64181790d0 100644 --- a/build-aux/syntax-check.mk +++ b/build-aux/syntax-check.mk @@ -1495,8 +1495,8 @@ sc_po_check: { $(VC_LIST_EXCEPT); echo $(generated_files); } \ | xargs perl $(perl_translatable_files_list_) \ | xargs $(GREP) -E -l '$(_gl_translatable_string_re)' \ - | $(SED) 's|^$(_dot_escaped_builddir)/|@BUILDDIR@|' \ - | $(SED) 's|^$(_dot_escaped_srcdir)/|@SRCDIR@|' \ + | $(SED) 's|^$(_dot_escaped_builddir)/||' \ + | $(SED) 's|^$(_dot_escaped_srcdir)/||' \ | sort -u > $@-2; \ diff -u -L $(po_file) -L $(po_file) $@-1 $@-2 \ || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; }; \ diff --git a/po/POTFILES.in b/po/POTFILES.in index 0d9adb0758..a0f4077977 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,384 +1,384 @@ -@BUILDDIR@src/access/viraccessapicheck.c -@BUILDDIR@src/access/viraccessapichecklxc.c -@BUILDDIR@src/access/viraccessapicheckqemu.c -@BUILDDIR@src/admin/admin_client.h -@BUILDDIR@src/admin/admin_server_dispatch_stubs.h -@BUILDDIR@src/remote/remote_client_bodies.h -@BUILDDIR@src/remote/remote_daemon_dispatch_stubs.h -@SRCDIR@src/access/viraccessdriverpolkit.c -@SRCDIR@src/access/viraccessmanager.c -@SRCDIR@src/admin/admin_server.c -@SRCDIR@src/admin/admin_server_dispatch.c -@SRCDIR@src/admin/libvirt-admin.c -@SRCDIR@src/bhyve/bhyve_capabilities.c -@SRCDIR@src/bhyve/bhyve_command.c -@SRCDIR@src/bhyve/bhyve_domain.c -@SRCDIR@src/bhyve/bhyve_driver.c -@SRCDIR@src/bhyve/bhyve_firmware.c -@SRCDIR@src/bhyve/bhyve_monitor.c -@SRCDIR@src/bhyve/bhyve_parse_command.c -@SRCDIR@src/bhyve/bhyve_process.c -@SRCDIR@src/ch/ch_conf.c -@SRCDIR@src/ch/ch_domain.c -@SRCDIR@src/ch/ch_driver.c -@SRCDIR@src/ch/ch_monitor.c -@SRCDIR@src/ch/ch_process.c -@SRCDIR@src/conf/backup_conf.c -@SRCDIR@src/conf/capabilities.c -@SRCDIR@src/conf/checkpoint_conf.c -@SRCDIR@src/conf/cpu_conf.c -@SRCDIR@src/conf/device_conf.c -@SRCDIR@src/conf/domain_addr.c -@SRCDIR@src/conf/domain_capabilities.c -@SRCDIR@src/conf/domain_conf.c -@SRCDIR@src/conf/domain_event.c -@SRCDIR@src/conf/domain_validate.c -@SRCDIR@src/conf/interface_conf.c -@SRCDIR@src/conf/netdev_bandwidth_conf.c -@SRCDIR@src/conf/netdev_vlan_conf.c -@SRCDIR@src/conf/netdev_vport_profile_conf.c -@SRCDIR@src/conf/network_conf.c -@SRCDIR@src/conf/networkcommon_conf.c -@SRCDIR@src/conf/node_device_conf.c -@SRCDIR@src/conf/node_device_util.c -@SRCDIR@src/conf/numa_conf.c -@SRCDIR@src/conf/nwfilter_conf.c -@SRCDIR@src/conf/nwfilter_params.c -@SRCDIR@src/conf/object_event.c -@SRCDIR@src/conf/secret_conf.c -@SRCDIR@src/conf/snapshot_conf.c -@SRCDIR@src/conf/storage_adapter_conf.c -@SRCDIR@src/conf/storage_conf.c -@SRCDIR@src/conf/storage_encryption_conf.c -@SRCDIR@src/conf/storage_source_conf.c -@SRCDIR@src/conf/virchrdev.c -@SRCDIR@src/conf/virdomainmomentobjlist.c -@SRCDIR@src/conf/virdomainobjlist.c -@SRCDIR@src/conf/virnetworkobj.c -@SRCDIR@src/conf/virnetworkportdef.c -@SRCDIR@src/conf/virnodedeviceobj.c -@SRCDIR@src/conf/virnwfilterbindingdef.c -@SRCDIR@src/conf/virnwfilterbindingobj.c -@SRCDIR@src/conf/virnwfilterbindingobjlist.c -@SRCDIR@src/conf/virnwfilterobj.c -@SRCDIR@src/conf/virsavecookie.c -@SRCDIR@src/conf/virsecretobj.c -@SRCDIR@src/conf/virstorageobj.c -@SRCDIR@src/cpu/cpu.c -@SRCDIR@src/cpu/cpu_arm.c -@SRCDIR@src/cpu/cpu_map.c -@SRCDIR@src/cpu/cpu_ppc64.c -@SRCDIR@src/cpu/cpu_s390.c -@SRCDIR@src/cpu/cpu_x86.c -@SRCDIR@src/datatypes.c -@SRCDIR@src/driver.c -@SRCDIR@src/esx/esx_driver.c -@SRCDIR@src/esx/esx_network_driver.c -@SRCDIR@src/esx/esx_storage_backend_iscsi.c -@SRCDIR@src/esx/esx_storage_backend_vmfs.c -@SRCDIR@src/esx/esx_storage_driver.c -@SRCDIR@src/esx/esx_stream.c -@SRCDIR@src/esx/esx_util.c -@SRCDIR@src/esx/esx_util.h -@SRCDIR@src/esx/esx_vi.c -@SRCDIR@src/esx/esx_vi_methods.c -@SRCDIR@src/esx/esx_vi_types.c -@SRCDIR@src/hyperv/hyperv_driver.c -@SRCDIR@src/hyperv/hyperv_network_driver.c -@SRCDIR@src/hyperv/hyperv_util.c -@SRCDIR@src/hyperv/hyperv_wmi.c -@SRCDIR@src/hypervisor/domain_cgroup.c -@SRCDIR@src/hypervisor/domain_driver.c -@SRCDIR@src/hypervisor/virclosecallbacks.c -@SRCDIR@src/hypervisor/virhostdev.c -@SRCDIR@src/interface/interface_backend_netcf.c -@SRCDIR@src/interface/interface_backend_udev.c -@SRCDIR@src/internal.h -@SRCDIR@src/libvirt-domain-checkpoint.c -@SRCDIR@src/libvirt-domain-snapshot.c -@SRCDIR@src/libvirt-domain.c -@SRCDIR@src/libvirt-host.c -@SRCDIR@src/libvirt-lxc.c -@SRCDIR@src/libvirt-network.c -@SRCDIR@src/libvirt-nodedev.c -@SRCDIR@src/libvirt-nwfilter.c -@SRCDIR@src/libvirt-qemu.c -@SRCDIR@src/libvirt-secret.c -@SRCDIR@src/libvirt-storage.c -@SRCDIR@src/libvirt-stream.c -@SRCDIR@src/libvirt.c -@SRCDIR@src/libxl/libxl_capabilities.c -@SRCDIR@src/libxl/libxl_conf.c -@SRCDIR@src/libxl/libxl_domain.c -@SRCDIR@src/libxl/libxl_driver.c -@SRCDIR@src/libxl/libxl_migration.c -@SRCDIR@src/libxl/xen_common.c -@SRCDIR@src/libxl/xen_xl.c -@SRCDIR@src/libxl/xen_xm.c -@SRCDIR@src/locking/lock_daemon.c -@SRCDIR@src/locking/lock_daemon_dispatch.c -@SRCDIR@src/locking/lock_driver_lockd.c -@SRCDIR@src/locking/lock_driver_sanlock.c -@SRCDIR@src/locking/lock_manager.c -@SRCDIR@src/locking/sanlock_helper.c -@SRCDIR@src/logging/log_daemon.c -@SRCDIR@src/logging/log_daemon_dispatch.c -@SRCDIR@src/logging/log_handler.c -@SRCDIR@src/logging/log_manager.c -@SRCDIR@src/lxc/lxc_cgroup.c -@SRCDIR@src/lxc/lxc_conf.c -@SRCDIR@src/lxc/lxc_container.c -@SRCDIR@src/lxc/lxc_controller.c -@SRCDIR@src/lxc/lxc_domain.c -@SRCDIR@src/lxc/lxc_driver.c -@SRCDIR@src/lxc/lxc_fuse.c -@SRCDIR@src/lxc/lxc_hostdev.c -@SRCDIR@src/lxc/lxc_native.c -@SRCDIR@src/lxc/lxc_process.c -@SRCDIR@src/network/bridge_driver.c -@SRCDIR@src/network/bridge_driver_linux.c -@SRCDIR@src/network/leaseshelper.c -@SRCDIR@src/node_device/node_device_driver.c -@SRCDIR@src/node_device/node_device_udev.c -@SRCDIR@src/nwfilter/nwfilter_dhcpsnoop.c -@SRCDIR@src/nwfilter/nwfilter_driver.c -@SRCDIR@src/nwfilter/nwfilter_ebiptables_driver.c -@SRCDIR@src/nwfilter/nwfilter_gentech_driver.c -@SRCDIR@src/nwfilter/nwfilter_learnipaddr.c -@SRCDIR@src/openvz/openvz_conf.c -@SRCDIR@src/openvz/openvz_driver.c -@SRCDIR@src/openvz/openvz_util.c -@SRCDIR@src/qemu/qemu_agent.c -@SRCDIR@src/qemu/qemu_alias.c -@SRCDIR@src/qemu/qemu_backup.c -@SRCDIR@src/qemu/qemu_block.c -@SRCDIR@src/qemu/qemu_blockjob.c -@SRCDIR@src/qemu/qemu_capabilities.c -@SRCDIR@src/qemu/qemu_cgroup.c -@SRCDIR@src/qemu/qemu_checkpoint.c -@SRCDIR@src/qemu/qemu_command.c -@SRCDIR@src/qemu/qemu_conf.c -@SRCDIR@src/qemu/qemu_dbus.c -@SRCDIR@src/qemu/qemu_domain.c -@SRCDIR@src/qemu/qemu_domain_address.c -@SRCDIR@src/qemu/qemu_domainjob.c -@SRCDIR@src/qemu/qemu_driver.c -@SRCDIR@src/qemu/qemu_extdevice.c -@SRCDIR@src/qemu/qemu_fd.c -@SRCDIR@src/qemu/qemu_firmware.c -@SRCDIR@src/qemu/qemu_hostdev.c -@SRCDIR@src/qemu/qemu_hotplug.c -@SRCDIR@src/qemu/qemu_interface.c -@SRCDIR@src/qemu/qemu_interop_config.c -@SRCDIR@src/qemu/qemu_migration.c -@SRCDIR@src/qemu/qemu_migration_cookie.c -@SRCDIR@src/qemu/qemu_migration_params.c -@SRCDIR@src/qemu/qemu_monitor.c -@SRCDIR@src/qemu/qemu_monitor_json.c -@SRCDIR@src/qemu/qemu_monitor_text.c -@SRCDIR@src/qemu/qemu_namespace.c -@SRCDIR@src/qemu/qemu_process.c -@SRCDIR@src/qemu/qemu_qapi.c -@SRCDIR@src/qemu/qemu_saveimage.c -@SRCDIR@src/qemu/qemu_slirp.c -@SRCDIR@src/qemu/qemu_snapshot.c -@SRCDIR@src/qemu/qemu_tpm.c -@SRCDIR@src/qemu/qemu_validate.c -@SRCDIR@src/qemu/qemu_vhost_user.c -@SRCDIR@src/qemu/qemu_vhost_user_gpu.c -@SRCDIR@src/qemu/qemu_virtiofs.c -@SRCDIR@src/remote/remote_daemon.c -@SRCDIR@src/remote/remote_daemon_config.c -@SRCDIR@src/remote/remote_daemon_dispatch.c -@SRCDIR@src/remote/remote_daemon_stream.c -@SRCDIR@src/remote/remote_driver.c -@SRCDIR@src/remote/remote_sockets.c -@SRCDIR@src/remote/remote_ssh_helper.c -@SRCDIR@src/rpc/virkeepalive.c -@SRCDIR@src/rpc/virnetclient.c -@SRCDIR@src/rpc/virnetclientprogram.c -@SRCDIR@src/rpc/virnetclientstream.c -@SRCDIR@src/rpc/virnetdaemon.c -@SRCDIR@src/rpc/virnetlibsshsession.c -@SRCDIR@src/rpc/virnetmessage.c -@SRCDIR@src/rpc/virnetsaslcontext.c -@SRCDIR@src/rpc/virnetserver.c -@SRCDIR@src/rpc/virnetserverclient.c -@SRCDIR@src/rpc/virnetserverprogram.c -@SRCDIR@src/rpc/virnetserverservice.c -@SRCDIR@src/rpc/virnetsocket.c -@SRCDIR@src/rpc/virnetsshsession.c -@SRCDIR@src/rpc/virnettlscontext.c -@SRCDIR@src/secret/secret_driver.c -@SRCDIR@src/security/security_apparmor.c -@SRCDIR@src/security/security_dac.c -@SRCDIR@src/security/security_driver.c -@SRCDIR@src/security/security_manager.c -@SRCDIR@src/security/security_selinux.c -@SRCDIR@src/security/security_util.c -@SRCDIR@src/security/virt-aa-helper.c -@SRCDIR@src/storage/parthelper.c -@SRCDIR@src/storage/storage_backend.c -@SRCDIR@src/storage/storage_backend_disk.c -@SRCDIR@src/storage/storage_backend_fs.c -@SRCDIR@src/storage/storage_backend_gluster.c -@SRCDIR@src/storage/storage_backend_iscsi.c -@SRCDIR@src/storage/storage_backend_iscsi_direct.c -@SRCDIR@src/storage/storage_backend_logical.c -@SRCDIR@src/storage/storage_backend_mpath.c -@SRCDIR@src/storage/storage_backend_rbd.c -@SRCDIR@src/storage/storage_backend_scsi.c -@SRCDIR@src/storage/storage_backend_sheepdog.c -@SRCDIR@src/storage/storage_backend_vstorage.c -@SRCDIR@src/storage/storage_backend_zfs.c -@SRCDIR@src/storage/storage_driver.c -@SRCDIR@src/storage/storage_util.c -@SRCDIR@src/storage_file/storage_file_backend.c -@SRCDIR@src/storage_file/storage_file_backend_fs.c -@SRCDIR@src/storage_file/storage_file_backend_gluster.c -@SRCDIR@src/storage_file/storage_file_probe.c -@SRCDIR@src/storage_file/storage_source.c -@SRCDIR@src/storage_file/storage_source_backingstore.c -@SRCDIR@src/test/test_driver.c -@SRCDIR@src/util/iohelper.c -@SRCDIR@src/util/viralloc.c -@SRCDIR@src/util/virarptable.c -@SRCDIR@src/util/viraudit.c -@SRCDIR@src/util/virauth.c -@SRCDIR@src/util/virauthconfig.c -@SRCDIR@src/util/virbitmap.c -@SRCDIR@src/util/vircgroup.c -@SRCDIR@src/util/vircgroupbackend.c -@SRCDIR@src/util/vircgroupbackend.h -@SRCDIR@src/util/vircgroupv1.c -@SRCDIR@src/util/vircgroupv2.c -@SRCDIR@src/util/vircgroupv2devices.c -@SRCDIR@src/util/vircommand.c -@SRCDIR@src/util/virconf.c -@SRCDIR@src/util/vircrypto.c -@SRCDIR@src/util/virdaemon.c -@SRCDIR@src/util/virdevmapper.c -@SRCDIR@src/util/virdnsmasq.c -@SRCDIR@src/util/virerror.c -@SRCDIR@src/util/virerror.h -@SRCDIR@src/util/virevent.c -@SRCDIR@src/util/vireventthread.c -@SRCDIR@src/util/virfcp.c -@SRCDIR@src/util/virfdstream.c -@SRCDIR@src/util/virfile.c -@SRCDIR@src/util/virfilecache.c -@SRCDIR@src/util/virfirewall.c -@SRCDIR@src/util/virfirewalld.c -@SRCDIR@src/util/virfirmware.c -@SRCDIR@src/util/virgdbus.c -@SRCDIR@src/util/virhash.c -@SRCDIR@src/util/virhook.c -@SRCDIR@src/util/virhostcpu.c -@SRCDIR@src/util/virhostmem.c -@SRCDIR@src/util/virhostuptime.c -@SRCDIR@src/util/viridentity.c -@SRCDIR@src/util/virinitctl.c -@SRCDIR@src/util/viriptables.c -@SRCDIR@src/util/viriscsi.c -@SRCDIR@src/util/virjson.c -@SRCDIR@src/util/virlease.c -@SRCDIR@src/util/virlockspace.c -@SRCDIR@src/util/virlog.c -@SRCDIR@src/util/virmacmap.c -@SRCDIR@src/util/virmdev.c -@SRCDIR@src/util/virmodule.c -@SRCDIR@src/util/virnetdev.c -@SRCDIR@src/util/virnetdevbandwidth.c -@SRCDIR@src/util/virnetdevbridge.c -@SRCDIR@src/util/virnetdevip.c -@SRCDIR@src/util/virnetdevmacvlan.c -@SRCDIR@src/util/virnetdevmidonet.c -@SRCDIR@src/util/virnetdevopenvswitch.c -@SRCDIR@src/util/virnetdevtap.c -@SRCDIR@src/util/virnetdevveth.c -@SRCDIR@src/util/virnetdevvportprofile.c -@SRCDIR@src/util/virnetlink.c -@SRCDIR@src/util/virnodesuspend.c -@SRCDIR@src/util/virnuma.c -@SRCDIR@src/util/virnvme.c -@SRCDIR@src/util/virobject.c -@SRCDIR@src/util/virpci.c -@SRCDIR@src/util/virpcivpd.c -@SRCDIR@src/util/virperf.c -@SRCDIR@src/util/virpidfile.c -@SRCDIR@src/util/virpolkit.c -@SRCDIR@src/util/virportallocator.c -@SRCDIR@src/util/virprocess.c -@SRCDIR@src/util/virqemu.c -@SRCDIR@src/util/virrandom.c -@SRCDIR@src/util/virresctrl.c -@SRCDIR@src/util/virrotatingfile.c -@SRCDIR@src/util/virscsi.c -@SRCDIR@src/util/virscsihost.c -@SRCDIR@src/util/virscsivhost.c -@SRCDIR@src/util/virsecret.c -@SRCDIR@src/util/virsocketaddr.c -@SRCDIR@src/util/virstoragefile.c -@SRCDIR@src/util/virstring.c -@SRCDIR@src/util/virsysinfo.c -@SRCDIR@src/util/virsystemd.c -@SRCDIR@src/util/virthreadjob.c -@SRCDIR@src/util/virthreadpool.c -@SRCDIR@src/util/virtime.c -@SRCDIR@src/util/virtpm.c -@SRCDIR@src/util/virtypedparam-public.c -@SRCDIR@src/util/virtypedparam.c -@SRCDIR@src/util/viruri.c -@SRCDIR@src/util/virusb.c -@SRCDIR@src/util/virutil.c -@SRCDIR@src/util/virvhba.c -@SRCDIR@src/util/virvsock.c -@SRCDIR@src/util/virxml.c -@SRCDIR@src/vbox/vbox_XPCOMCGlue.c -@SRCDIR@src/vbox/vbox_common.c -@SRCDIR@src/vbox/vbox_driver.c -@SRCDIR@src/vbox/vbox_network.c -@SRCDIR@src/vbox/vbox_snapshot_conf.c -@SRCDIR@src/vbox/vbox_storage.c -@SRCDIR@src/vbox/vbox_tmpl.c -@SRCDIR@src/vmware/vmware_conf.c -@SRCDIR@src/vmware/vmware_driver.c -@SRCDIR@src/vmx/vmx.c -@SRCDIR@src/vz/vz_driver.c -@SRCDIR@src/vz/vz_sdk.c -@SRCDIR@src/vz/vz_utils.c -@SRCDIR@src/vz/vz_utils.h -@SRCDIR@tests/virpolkittest.c -@SRCDIR@tools/libvirt-guests.sh.in -@SRCDIR@tools/virsh-backup.c -@SRCDIR@tools/virsh-checkpoint.c -@SRCDIR@tools/virsh-completer-host.c -@SRCDIR@tools/virsh-console.c -@SRCDIR@tools/virsh-domain-event.c -@SRCDIR@tools/virsh-domain-monitor.c -@SRCDIR@tools/virsh-domain.c -@SRCDIR@tools/virsh-edit.c -@SRCDIR@tools/virsh-host.c -@SRCDIR@tools/virsh-interface.c -@SRCDIR@tools/virsh-network.c -@SRCDIR@tools/virsh-nodedev.c -@SRCDIR@tools/virsh-nwfilter.c -@SRCDIR@tools/virsh-pool.c -@SRCDIR@tools/virsh-secret.c -@SRCDIR@tools/virsh-snapshot.c -@SRCDIR@tools/virsh-util.c -@SRCDIR@tools/virsh-volume.c -@SRCDIR@tools/virsh.c -@SRCDIR@tools/virsh.h -@SRCDIR@tools/virt-admin.c -@SRCDIR@tools/virt-host-validate-bhyve.c -@SRCDIR@tools/virt-host-validate-ch.c -@SRCDIR@tools/virt-host-validate-common.c -@SRCDIR@tools/virt-host-validate-lxc.c -@SRCDIR@tools/virt-host-validate-qemu.c -@SRCDIR@tools/virt-host-validate.c -@SRCDIR@tools/virt-login-shell-helper.c -@SRCDIR@tools/virt-pki-query-dn.c -@SRCDIR@tools/vsh-table.c -@SRCDIR@tools/vsh.c -@SRCDIR@tools/vsh.h +src/access/viraccessapicheck.c +src/access/viraccessapichecklxc.c +src/access/viraccessapicheckqemu.c +src/admin/admin_client.h +src/admin/admin_server_dispatch_stubs.h +src/remote/remote_client_bodies.h +src/remote/remote_daemon_dispatch_stubs.h +src/access/viraccessdriverpolkit.c +src/access/viraccessmanager.c +src/admin/admin_server.c +src/admin/admin_server_dispatch.c +src/admin/libvirt-admin.c +src/bhyve/bhyve_capabilities.c +src/bhyve/bhyve_command.c +src/bhyve/bhyve_domain.c +src/bhyve/bhyve_driver.c +src/bhyve/bhyve_firmware.c +src/bhyve/bhyve_monitor.c +src/bhyve/bhyve_parse_command.c +src/bhyve/bhyve_process.c +src/ch/ch_conf.c +src/ch/ch_domain.c +src/ch/ch_driver.c +src/ch/ch_monitor.c +src/ch/ch_process.c +src/conf/backup_conf.c +src/conf/capabilities.c +src/conf/checkpoint_conf.c +src/conf/cpu_conf.c +src/conf/device_conf.c +src/conf/domain_addr.c +src/conf/domain_capabilities.c +src/conf/domain_conf.c +src/conf/domain_event.c +src/conf/domain_validate.c +src/conf/interface_conf.c +src/conf/netdev_bandwidth_conf.c +src/conf/netdev_vlan_conf.c +src/conf/netdev_vport_profile_conf.c +src/conf/network_conf.c +src/conf/networkcommon_conf.c +src/conf/node_device_conf.c +src/conf/node_device_util.c +src/conf/numa_conf.c +src/conf/nwfilter_conf.c +src/conf/nwfilter_params.c +src/conf/object_event.c +src/conf/secret_conf.c +src/conf/snapshot_conf.c +src/conf/storage_adapter_conf.c +src/conf/storage_conf.c +src/conf/storage_encryption_conf.c +src/conf/storage_source_conf.c +src/conf/virchrdev.c +src/conf/virdomainmomentobjlist.c +src/conf/virdomainobjlist.c +src/conf/virnetworkobj.c +src/conf/virnetworkportdef.c +src/conf/virnodedeviceobj.c +src/conf/virnwfilterbindingdef.c +src/conf/virnwfilterbindingobj.c +src/conf/virnwfilterbindingobjlist.c +src/conf/virnwfilterobj.c +src/conf/virsavecookie.c +src/conf/virsecretobj.c +src/conf/virstorageobj.c +src/cpu/cpu.c +src/cpu/cpu_arm.c +src/cpu/cpu_map.c +src/cpu/cpu_ppc64.c +src/cpu/cpu_s390.c +src/cpu/cpu_x86.c +src/datatypes.c +src/driver.c +src/esx/esx_driver.c +src/esx/esx_network_driver.c +src/esx/esx_storage_backend_iscsi.c +src/esx/esx_storage_backend_vmfs.c +src/esx/esx_storage_driver.c +src/esx/esx_stream.c +src/esx/esx_util.c +src/esx/esx_util.h +src/esx/esx_vi.c +src/esx/esx_vi_methods.c +src/esx/esx_vi_types.c +src/hyperv/hyperv_driver.c +src/hyperv/hyperv_network_driver.c +src/hyperv/hyperv_util.c +src/hyperv/hyperv_wmi.c +src/hypervisor/domain_cgroup.c +src/hypervisor/domain_driver.c +src/hypervisor/virclosecallbacks.c +src/hypervisor/virhostdev.c +src/interface/interface_backend_netcf.c +src/interface/interface_backend_udev.c +src/internal.h +src/libvirt-domain-checkpoint.c +src/libvirt-domain-snapshot.c +src/libvirt-domain.c +src/libvirt-host.c +src/libvirt-lxc.c +src/libvirt-network.c +src/libvirt-nodedev.c +src/libvirt-nwfilter.c +src/libvirt-qemu.c +src/libvirt-secret.c +src/libvirt-storage.c +src/libvirt-stream.c +src/libvirt.c +src/libxl/libxl_capabilities.c +src/libxl/libxl_conf.c +src/libxl/libxl_domain.c +src/libxl/libxl_driver.c +src/libxl/libxl_migration.c +src/libxl/xen_common.c +src/libxl/xen_xl.c +src/libxl/xen_xm.c +src/locking/lock_daemon.c +src/locking/lock_daemon_dispatch.c +src/locking/lock_driver_lockd.c +src/locking/lock_driver_sanlock.c +src/locking/lock_manager.c +src/locking/sanlock_helper.c +src/logging/log_daemon.c +src/logging/log_daemon_dispatch.c +src/logging/log_handler.c +src/logging/log_manager.c +src/lxc/lxc_cgroup.c +src/lxc/lxc_conf.c +src/lxc/lxc_container.c +src/lxc/lxc_controller.c +src/lxc/lxc_domain.c +src/lxc/lxc_driver.c +src/lxc/lxc_fuse.c +src/lxc/lxc_hostdev.c +src/lxc/lxc_native.c +src/lxc/lxc_process.c +src/network/bridge_driver.c +src/network/bridge_driver_linux.c +src/network/leaseshelper.c +src/node_device/node_device_driver.c +src/node_device/node_device_udev.c +src/nwfilter/nwfilter_dhcpsnoop.c +src/nwfilter/nwfilter_driver.c +src/nwfilter/nwfilter_ebiptables_driver.c +src/nwfilter/nwfilter_gentech_driver.c +src/nwfilter/nwfilter_learnipaddr.c +src/openvz/openvz_conf.c +src/openvz/openvz_driver.c +src/openvz/openvz_util.c +src/qemu/qemu_agent.c +src/qemu/qemu_alias.c +src/qemu/qemu_backup.c +src/qemu/qemu_block.c +src/qemu/qemu_blockjob.c +src/qemu/qemu_capabilities.c +src/qemu/qemu_cgroup.c +src/qemu/qemu_checkpoint.c +src/qemu/qemu_command.c +src/qemu/qemu_conf.c +src/qemu/qemu_dbus.c +src/qemu/qemu_domain.c +src/qemu/qemu_domain_address.c +src/qemu/qemu_domainjob.c +src/qemu/qemu_driver.c +src/qemu/qemu_extdevice.c +src/qemu/qemu_fd.c +src/qemu/qemu_firmware.c +src/qemu/qemu_hostdev.c +src/qemu/qemu_hotplug.c +src/qemu/qemu_interface.c +src/qemu/qemu_interop_config.c +src/qemu/qemu_migration.c +src/qemu/qemu_migration_cookie.c +src/qemu/qemu_migration_params.c +src/qemu/qemu_monitor.c +src/qemu/qemu_monitor_json.c +src/qemu/qemu_monitor_text.c +src/qemu/qemu_namespace.c +src/qemu/qemu_process.c +src/qemu/qemu_qapi.c +src/qemu/qemu_saveimage.c +src/qemu/qemu_slirp.c +src/qemu/qemu_snapshot.c +src/qemu/qemu_tpm.c +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/remote_daemon.c +src/remote/remote_daemon_config.c +src/remote/remote_daemon_dispatch.c +src/remote/remote_daemon_stream.c +src/remote/remote_driver.c +src/remote/remote_sockets.c +src/remote/remote_ssh_helper.c +src/rpc/virkeepalive.c +src/rpc/virnetclient.c +src/rpc/virnetclientprogram.c +src/rpc/virnetclientstream.c +src/rpc/virnetdaemon.c +src/rpc/virnetlibsshsession.c +src/rpc/virnetmessage.c +src/rpc/virnetsaslcontext.c +src/rpc/virnetserver.c +src/rpc/virnetserverclient.c +src/rpc/virnetserverprogram.c +src/rpc/virnetserverservice.c +src/rpc/virnetsocket.c +src/rpc/virnetsshsession.c +src/rpc/virnettlscontext.c +src/secret/secret_driver.c +src/security/security_apparmor.c +src/security/security_dac.c +src/security/security_driver.c +src/security/security_manager.c +src/security/security_selinux.c +src/security/security_util.c +src/security/virt-aa-helper.c +src/storage/parthelper.c +src/storage/storage_backend.c +src/storage/storage_backend_disk.c +src/storage/storage_backend_fs.c +src/storage/storage_backend_gluster.c +src/storage/storage_backend_iscsi.c +src/storage/storage_backend_iscsi_direct.c +src/storage/storage_backend_logical.c +src/storage/storage_backend_mpath.c +src/storage/storage_backend_rbd.c +src/storage/storage_backend_scsi.c +src/storage/storage_backend_sheepdog.c +src/storage/storage_backend_vstorage.c +src/storage/storage_backend_zfs.c +src/storage/storage_driver.c +src/storage/storage_util.c +src/storage_file/storage_file_backend.c +src/storage_file/storage_file_backend_fs.c +src/storage_file/storage_file_backend_gluster.c +src/storage_file/storage_file_probe.c +src/storage_file/storage_source.c +src/storage_file/storage_source_backingstore.c +src/test/test_driver.c +src/util/iohelper.c +src/util/viralloc.c +src/util/virarptable.c +src/util/viraudit.c +src/util/virauth.c +src/util/virauthconfig.c +src/util/virbitmap.c +src/util/vircgroup.c +src/util/vircgroupbackend.c +src/util/vircgroupbackend.h +src/util/vircgroupv1.c +src/util/vircgroupv2.c +src/util/vircgroupv2devices.c +src/util/vircommand.c +src/util/virconf.c +src/util/vircrypto.c +src/util/virdaemon.c +src/util/virdevmapper.c +src/util/virdnsmasq.c +src/util/virerror.c +src/util/virerror.h +src/util/virevent.c +src/util/vireventthread.c +src/util/virfcp.c +src/util/virfdstream.c +src/util/virfile.c +src/util/virfilecache.c +src/util/virfirewall.c +src/util/virfirewalld.c +src/util/virfirmware.c +src/util/virgdbus.c +src/util/virhash.c +src/util/virhook.c +src/util/virhostcpu.c +src/util/virhostmem.c +src/util/virhostuptime.c +src/util/viridentity.c +src/util/virinitctl.c +src/util/viriptables.c +src/util/viriscsi.c +src/util/virjson.c +src/util/virlease.c +src/util/virlockspace.c +src/util/virlog.c +src/util/virmacmap.c +src/util/virmdev.c +src/util/virmodule.c +src/util/virnetdev.c +src/util/virnetdevbandwidth.c +src/util/virnetdevbridge.c +src/util/virnetdevip.c +src/util/virnetdevmacvlan.c +src/util/virnetdevmidonet.c +src/util/virnetdevopenvswitch.c +src/util/virnetdevtap.c +src/util/virnetdevveth.c +src/util/virnetdevvportprofile.c +src/util/virnetlink.c +src/util/virnodesuspend.c +src/util/virnuma.c +src/util/virnvme.c +src/util/virobject.c +src/util/virpci.c +src/util/virpcivpd.c +src/util/virperf.c +src/util/virpidfile.c +src/util/virpolkit.c +src/util/virportallocator.c +src/util/virprocess.c +src/util/virqemu.c +src/util/virrandom.c +src/util/virresctrl.c +src/util/virrotatingfile.c +src/util/virscsi.c +src/util/virscsihost.c +src/util/virscsivhost.c +src/util/virsecret.c +src/util/virsocketaddr.c +src/util/virstoragefile.c +src/util/virstring.c +src/util/virsysinfo.c +src/util/virsystemd.c +src/util/virthreadjob.c +src/util/virthreadpool.c +src/util/virtime.c +src/util/virtpm.c +src/util/virtypedparam-public.c +src/util/virtypedparam.c +src/util/viruri.c +src/util/virusb.c +src/util/virutil.c +src/util/virvhba.c +src/util/virvsock.c +src/util/virxml.c +src/vbox/vbox_XPCOMCGlue.c +src/vbox/vbox_common.c +src/vbox/vbox_driver.c +src/vbox/vbox_network.c +src/vbox/vbox_snapshot_conf.c +src/vbox/vbox_storage.c +src/vbox/vbox_tmpl.c +src/vmware/vmware_conf.c +src/vmware/vmware_driver.c +src/vmx/vmx.c +src/vz/vz_driver.c +src/vz/vz_sdk.c +src/vz/vz_utils.c +src/vz/vz_utils.h +tests/virpolkittest.c +tools/libvirt-guests.sh.in +tools/virsh-backup.c +tools/virsh-checkpoint.c +tools/virsh-completer-host.c +tools/virsh-console.c +tools/virsh-domain-event.c +tools/virsh-domain-monitor.c +tools/virsh-domain.c +tools/virsh-edit.c +tools/virsh-host.c +tools/virsh-interface.c +tools/virsh-network.c +tools/virsh-nodedev.c +tools/virsh-nwfilter.c +tools/virsh-pool.c +tools/virsh-secret.c +tools/virsh-snapshot.c +tools/virsh-util.c +tools/virsh-volume.c +tools/virsh.c +tools/virsh.h +tools/virt-admin.c +tools/virt-host-validate-bhyve.c +tools/virt-host-validate-ch.c +tools/virt-host-validate-common.c +tools/virt-host-validate-lxc.c +tools/virt-host-validate-qemu.c +tools/virt-host-validate.c +tools/virt-login-shell-helper.c +tools/virt-pki-query-dn.c +tools/vsh-table.c +tools/vsh.c +tools/vsh.h -- 2.35.3

Now that we have dropped prefixes from the file, it no longer needs to go through configure_file() and we can use it directly. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- build-aux/syntax-check.mk | 6 +++--- po/{POTFILES.in => POTFILES} | 0 po/meson.build | 13 +------------ 3 files changed, 4 insertions(+), 15 deletions(-) rename po/{POTFILES.in => POTFILES} (100%) diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk index 64181790d0..05655bcb97 100644 --- a/build-aux/syntax-check.mk +++ b/build-aux/syntax-check.mk @@ -1476,10 +1476,10 @@ perl_translatable_files_list_ = \ -e '}' # Verify that all source files using _() (more specifically, files that -# match $(_gl_translatable_string_re)) are listed in po/POTFILES.in. -po_file ?= $(top_srcdir)/po/POTFILES.in +# match $(_gl_translatable_string_re)) are listed in po/POTFILES. +po_file ?= $(top_srcdir)/po/POTFILES -# List of additional files that we want to pick up in our POTFILES.in +# List of additional files that we want to pick up in our POTFILES # This is all generated files for RPC code. generated_files = \ $(top_builddir)/src/*.[ch] \ diff --git a/po/POTFILES.in b/po/POTFILES similarity index 100% rename from po/POTFILES.in rename to po/POTFILES diff --git a/po/meson.build b/po/meson.build index f4d95f97fe..d71c0f41e2 100644 --- a/po/meson.build +++ b/po/meson.build @@ -1,23 +1,12 @@ i18n = import('i18n') -potfiles_conf = configuration_data({ - 'SRCDIR': '', - 'BUILDDIR': '', -}) - -potfiles = configure_file( - input: 'POTFILES.in', - output: '@BASENAME@', - configuration: potfiles_conf, -) - i18n.gettext( meson.project_name(), args: [ '--add-comments=TRANSLATORS:', '--directory=@0@'.format(meson.source_root()), '--directory=@0@'.format(meson.build_root()), - '--files-from=@0@'.format(meson.current_build_dir() / 'POTFILES'), + '--files-from=@0@'.format(meson.current_source_dir() / 'POTFILES'), '--msgid-bugs-address=https://libvirt.org/bugs.html', '--package-version=@0@'.format(meson.project_version()), '--sort-output', -- 2.35.3

This is something that certainly made sense in the context of gnulib, but we don't have a use for it. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- build-aux/syntax-check.mk | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk index 05655bcb97..e7aa2444bf 100644 --- a/build-aux/syntax-check.mk +++ b/build-aux/syntax-check.mk @@ -1490,8 +1490,7 @@ _gl_translatable_string_re ?= \b(N?_|gettext *)\([^)"]*("|$$) # sc_po_check can fail if generated files are not built first sc_po_check: @if test -f $(po_file); then \ - $(GREP) -E -v '^(#|$$)' $(po_file) \ - | $(GREP) -v '^src/false\.c$$' | sort > $@-1; \ + $(GREP) -E -v '^(#|$$)' $(po_file) | sort > $@-1; \ { $(VC_LIST_EXCEPT); echo $(generated_files); } \ | xargs perl $(perl_translatable_files_list_) \ | xargs $(GREP) -E -l '$(_gl_translatable_string_re)' \ -- 2.35.3

Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- po/LINGUAS | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/LINGUAS b/po/LINGUAS index 889ef80aba..35acd33a87 100644 --- a/po/LINGUAS +++ b/po/LINGUAS @@ -28,17 +28,17 @@ nl or pa pl -pt_BR pt +pt_BR ru -sr@latin +si sr +sr@latin sv ta te +tr uk vi zh_CN zh_TW -tr -si -- 2.35.3

Make sure LINGUAS remains sorted correctly. Signed-off-by: Andrea Bolognani <abologna@redhat.com> --- build-aux/syntax-check.mk | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk index e7aa2444bf..e8aea29d64 100644 --- a/build-aux/syntax-check.mk +++ b/build-aux/syntax-check.mk @@ -1513,6 +1513,14 @@ sc_pot_comments: exit 1; \ fi +linguas_file = $(top_srcdir)/po/LINGUAS + +sc_linguas_sorting: + @sort -u $(linguas_file) > $@-1; \ + diff -u -L $(linguas_file) -L $(linguas_file) $(linguas_file) $@-1 \ + || { echo "$(linguas_file) is not sorted correctly" 1>&2; exit 1; }; \ + rm -f $@-1 + # #if WITH_... will evaluate to false for any non numeric string. # That would be flagged by using -Wundef, however gnulib currently # tests many undefined macros, and so we can't enable that option. -- 2.35.3
participants (4)
-
Andrea Bolognani
-
Daniel P. Berrangé
-
Jiri Denemark
-
Peter Krempa