[gcc(refs/vendors/ibm/heads/perf)] i18n: Fix translation of --help [PR93759]

Jiu Fu Guo guojiufu@gcc.gnu.org
Thu Mar 19 05:47:28 GMT 2020


https://gcc.gnu.org/g:8d1780b56d0cb1d50115d4e925e81cd8b9cb2923

commit 8d1780b56d0cb1d50115d4e925e81cd8b9cb2923
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Fri Feb 21 22:01:03 2020 +0100

    i18n: Fix translation of --help [PR93759]
    
    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.
    
    2020-02-21  Jakub Jelinek  <jakub@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.

Diff:
---
 gcc/ChangeLog    | 6 ++++++
 gcc/opts.c       | 8 ++++----
 gcc/po/ChangeLog | 7 +++++++
 gcc/po/exgettext | 5 +++--
 4 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 17c6587ff37..20e0b12927b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2020-02-21  Jakub Jelinek  <jakub@redhat.com>
+
+	PR translation/93759
+	* opts.c (print_filtered_help): Translate help before appending
+	messages to it rather than after that.
+
 2020-02-19  Richard Sandiford  <richard.sandiford@arm.com>
 
 	PR rtl-optimization/PR92989
diff --git a/gcc/opts.c b/gcc/opts.c
index 7affeb41a96..ac160ed8404 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -1309,10 +1309,13 @@ print_filtered_help (unsigned int include_flags,
 	  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 include_flags,
 	  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');
diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog
index 9e763ea91b2..4fda0a4475b 100644
--- a/gcc/po/ChangeLog
+++ b/gcc/po/ChangeLog
@@ -1,3 +1,10 @@
+2020-02-21  Jakub Jelinek  <jakub@redhat.com>
+
+	PR translation/93759
+	* 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.
+
 2020-02-20  Joseph Myers  <joseph@codesourcery.com>
 
 	* de.po: Update.
diff --git a/gcc/po/exgettext b/gcc/po/exgettext
index 7a86ed9a7f7..d648bdb36ee 100644
--- a/gcc/po/exgettext
+++ b/gcc/po/exgettext
@@ -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.


More information about the Gcc-cvs mailing list