Hi!

The first two hunks make sure we actually translate what has been marked
for translation, i.e. the cl_options[...].help strings, rather than those
strings ammended in various ways, like:
_("%s  Same as %s."), help, ...
or
"%s  %s", help, _(use_diagnosed_msg)

The exgettext changes attempt to make sure that the cl_options[...].help
strings are marked as no-c-format, because otherwise if they happen
to contain a % character, such as the 90% substring, they will be marked
as c-format, which they aren't.

Bootstrapped/regtested on x86_64-linux and i686-linux plus tested with make
gcc.pot, ok for trunk?

2020-02-17  Jakub Jelinek  <ja...@redhat.com>

        PR translation/93759
        * opts.c (print_filtered_help): Translate help before appending
        messages to it rather than after that.

        * exgettext: For *.opt help texts, use __opt_help_text("...")
        rather than _("...") in the $emsg file and pass options that
        say that this implies no-c-format.

--- gcc/opts.c.jj       2020-01-27 13:20:40.491649814 +0100
+++ gcc/opts.c  2020-02-17 14:52:56.164212999 +0100
@@ -1309,10 +1309,13 @@ print_filtered_help (unsigned int includ
          help = undocumented_msg;
        }
 
+      /* Get the translation.  */
+      help = _(help);
+
       if (option->alias_target < N_OPTS
          && cl_options [option->alias_target].help)
        {
-         if (help == undocumented_msg)
+         if (option->help == NULL)
            {
              /* For undocumented options that are aliases for other options
                 that are documented, point the reader to the other option in
@@ -1347,9 +1350,6 @@ print_filtered_help (unsigned int includ
          help = new_help;
        }
 
-      /* Get the translation.  */
-      help = _(help);
-
       /* Find the gap between the name of the
         option and its descriptive text.  */
       tab = strchr (help, '\t');
--- gcc/po/exgettext.jj 2020-01-12 11:54:36.784407811 +0100
+++ gcc/po/exgettext    2020-02-17 15:34:40.308915980 +0100
@@ -227,6 +227,7 @@ END {
        }
     }
     print emsg > posr
+    print "--keyword=__opt_help_text\n--flag=__opt_help_text:1:no-c-format" >> 
kopt
 }'
 ) || exit
 
@@ -240,7 +241,7 @@ echo "scanning option files..." >&2
     while (getline < file) {
        if (/^[ \t]*(;|$)/ || !/^[^ \t]/) {
            if (field > 2)
-               printf("_(\"%s\")\n", line)
+               printf("__opt_help_text(\"%s\")\n", line)
            field = 0
        } else {
            if ((field == 1) && /MissingArgError/) {
@@ -287,7 +288,7 @@ echo "scanning option files..." >&2
        lineno++;
     }
     if (field > 2)
-       printf("_(\"%s\")\n", line)
+       printf("__opt_help_text(\"%s\")\n", line)
   }') >> $emsg
 
 # Run the xgettext commands, with temporary added as a file to scan.

        Jakub

Reply via email to