]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
xgettext: Avoid a warning 'Charset "CHARSET" is not a portable encoding name'.
authorBruno Haible <bruno@clisp.org>
Sun, 17 Sep 2023 09:54:45 +0000 (11:54 +0200)
committerBruno Haible <bruno@clisp.org>
Sun, 17 Sep 2023 09:54:45 +0000 (11:54 +0200)
* gettext-tools/src/po-charset.h (po_lex_charset_set): Add is_pot_role
parameter.
* gettext-tools/src/po-charset.c (po_lex_charset_set): Likewise.
* gettext-tools/src/po-lex.h (gram_pot_role): New declaration.
(lex_start): Add is_pot_role parameter.
* gettext-tools/src/po-lex.c (gram_pot_role): New variable.
(lex_start): Add is_pot_role parameter.
(lex_end): Update.
* gettext-tools/src/po-gram-gen.y (do_callback_message): Pass gram_pot_role to
po_lex_charset_set.
* gettext-tools/src/read-catalog-abstract.h (struct catalog_input_format): Add
is_pot_role parameter to the 'parse' member.
(catalog_reader_parse): Add is_pot_role parameter.
* gettext-tools/src/read-po.c (po_parse): Add is_pot_role parameter.
* gettext-tools/src/read-properties.c (properties_parse): Likewise.
* gettext-tools/src/read-stringtable.c (stringtable_parse): Likewise.
* gettext-tools/src/read-catalog-abstract.c (catalog_reader_parse): Add
is_pot_role parameter.
* gettext-tools/src/x-po.c (extract): Pass is_pot_role as true.
* gettext-tools/src/xgettext.c (read_exclusion_file): Likewise.
* gettext-tools/src/read-catalog.c (read_catalog_stream): Pass is_pot_role as
false.
* gettext-tools/src/msgfmt.c (read_catalog_file_msgfmt): Likewise.

14 files changed:
gettext-tools/src/msgfmt.c
gettext-tools/src/po-charset.c
gettext-tools/src/po-charset.h
gettext-tools/src/po-gram-gen.y
gettext-tools/src/po-lex.c
gettext-tools/src/po-lex.h
gettext-tools/src/read-catalog-abstract.c
gettext-tools/src/read-catalog-abstract.h
gettext-tools/src/read-catalog.c
gettext-tools/src/read-po.c
gettext-tools/src/read-properties.c
gettext-tools/src/read-stringtable.c
gettext-tools/src/x-po.c
gettext-tools/src/xgettext.c

index 2ea831cc3f8a5a4dfc416b8c8f7da2a5c1e50c37..e14c9620940d715c6aaa047082b0a9e39e8c39af 100644 (file)
@@ -1401,7 +1401,7 @@ read_catalog_file_msgfmt (char *filename, catalog_input_format_ty input_syntax)
     }
   po_lex_pass_obsolete_entries (true);
   catalog_reader_parse ((abstract_catalog_reader_ty *) pop, fp, real_filename,
-                        filename, input_syntax);
+                        filename, false, input_syntax);
   catalog_reader_free ((abstract_catalog_reader_ty *) pop);
 
   if (fp != stdin)
index db95cf040971d3f611937e4e09d2d09c021bdd23..c4faeffd2b8bfdf845ea0e784157a1cf29112155 100644 (file)
@@ -1,5 +1,5 @@
 /* Charset handling while reading PO files.
-   Copyright (C) 2001-2007, 2010, 2019-2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2007, 2010, 2019-2021, 2023 Free Software Foundation, Inc.
    Written by Bruno Haible <haible@clisp.cons.org>, 2001.
 
    This program is free software: you can redistribute it and/or modify
@@ -464,7 +464,8 @@ po_lex_charset_init ()
 }
 
 void
-po_lex_charset_set (const char *header_entry, const char *filename)
+po_lex_charset_set (const char *header_entry,
+                    const char *filename, bool is_pot_role)
 {
   /* Verify the validity of CHARSET.  It is necessary
      1. for the correct treatment of multibyte characters containing
@@ -492,9 +493,10 @@ po_lex_charset_set (const char *header_entry, const char *filename)
              only ASCII msgids.  */
           size_t filenamelen = strlen (filename);
 
-          if (!(filenamelen >= 4
-                && memcmp (filename + filenamelen - 4, ".pot", 4) == 0
-                && strcmp (charset, "CHARSET") == 0))
+          if (!(strcmp (charset, "CHARSET") == 0
+                && ((filenamelen >= 4
+                     && memcmp (filename + filenamelen - 4, ".pot", 4) == 0)
+                    || is_pot_role)))
             {
               char *warning_message =
                 xasprintf (_("\
index 0ab49bd6d5ddd2e456b261800bca85641fa85fc6..ed0db85a817a29040680f6e97e98c8d9b710b705 100644 (file)
@@ -1,5 +1,5 @@
 /* Charset handling while reading PO files.
-   Copyright (C) 2001-2003, 2006, 2021 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2006, 2021, 2023 Free Software Foundation, Inc.
    Written by Bruno Haible <haible@clisp.cons.org>, 2001.
 
    This program is free software: you can redistribute it and/or modify
@@ -85,9 +85,11 @@ extern DLL_VARIABLE bool po_lex_weird_cjk;
 /* Initialize the PO file's encoding.  */
 extern void po_lex_charset_init (void);
 
-/* Set the PO file's encoding from the header entry.  */
+/* Set the PO file's encoding from the header entry.
+   If is_pot_role is true, "charset=CHARSET" is expected and does not deserve
+   a warning.  */
 extern void po_lex_charset_set (const char *header_entry,
-                                const char *filename);
+                                const char *filename, bool is_pot_role);
 
 /* Finish up with the PO file's encoding.  */
 extern void po_lex_charset_close (void);
index 5f6b2e4091a7a1f5c3c6523d2c2caf0999070494..43c842d1195be7da5ec848f3a204d4b4ed46f9a6 100644 (file)
@@ -1,6 +1,5 @@
 /* GNU gettext - internationalization aids
-   Copyright (C) 1995-1996, 1998, 2000-2001, 2003, 2005-2006, 2012-2013, 2016, 2020
-   Free Software Foundation, Inc.
+   Copyright (C) 1995-1996, 1998, 2000-2001, 2003, 2005-2006, 2012-2013, 2016, 2020, 2023 Free Software Foundation, Inc.
 
    This file was written by Peter Miller <pmiller@agso.gov.au>
 
@@ -56,7 +55,7 @@ do_callback_message (char *msgctxt,
 {
   /* Test for header entry.  Ignore fuzziness of the header entry.  */
   if (msgctxt == NULL && msgid[0] == '\0' && !obsolete)
-    po_lex_charset_set (msgstr, gram_pos.file_name);
+    po_lex_charset_set (msgstr, gram_pos.file_name, gram_pot_role);
 
   po_callback_message (msgctxt,
                        msgid, msgid_pos, msgid_plural,
index 934829eaed5fcb21343205b264d7544d5d24cd59..22d08849206b812b18ace9de7629bb95a9d71c3c 100644 (file)
@@ -1,5 +1,5 @@
 /* GNU gettext - internationalization aids
-   Copyright (C) 1995-2009, 2011, 2019 Free Software Foundation, Inc.
+   Copyright (C) 1995-2009, 2011, 2019, 2023 Free Software Foundation, Inc.
 
    This file was written by Peter Miller <millerp@canb.auug.org.au>.
    Multibyte character handling by Bruno Haible <haible@clisp.cons.org>.
@@ -67,6 +67,9 @@
 lex_pos_ty gram_pos;
 int gram_pos_column;
 
+/* Whether the PO file is in the role of a POT file.  */
+bool gram_pot_role;
+
 
 /* Error handling during the parsing of a PO file.
    These functions can access gram_pos and gram_pos_column.  */
@@ -604,7 +607,8 @@ bool pass_obsolete_entries = false;
 
 /* Prepare lexical analysis.  */
 void
-lex_start (FILE *fp, const char *real_filename, const char *logical_filename)
+lex_start (FILE *fp, const char *real_filename, const char *logical_filename,
+           bool is_pot_role)
 {
   /* Ignore the logical_filename, because PO file entries already have
      their file names attached.  But use real_filename for error messages.  */
@@ -614,6 +618,7 @@ lex_start (FILE *fp, const char *real_filename, const char *logical_filename)
 
   gram_pos.line_number = 1;
   gram_pos_column = 0;
+  gram_pot_role = is_pot_role;
   signal_eilseq = true;
   po_lex_obsolete = false;
   po_lex_previous = false;
@@ -628,6 +633,7 @@ lex_end ()
   gram_pos.file_name = NULL;
   gram_pos.line_number = 0;
   gram_pos_column = 0;
+  gram_pot_role = false;
   signal_eilseq = false;
   po_lex_obsolete = false;
   po_lex_previous = false;
index 99af2566e0893f20f8c8dc6653ec9445bd82cb8f..2f6df0d6a776fa63b399edc6d5975c7652ef2507 100644 (file)
@@ -55,6 +55,9 @@ extern "C" {
 extern DLL_VARIABLE lex_pos_ty gram_pos;
 extern DLL_VARIABLE int gram_pos_column;
 
+/* Whether the PO file is in the role of a POT file.  */
+extern DLL_VARIABLE bool gram_pot_role;
+
 /* Number of parse errors within a PO file that cause the program to
    terminate.  Cf. error_message_count, declared in <error.h>.  */
 extern DLL_VARIABLE unsigned int gram_max_allowed_errors;
@@ -65,7 +68,7 @@ extern DLL_VARIABLE bool pass_obsolete_entries;
 
 /* Prepare lexical analysis.  */
 extern void lex_start (FILE *fp, const char *real_filename,
-                       const char *logical_filename);
+                       const char *logical_filename, bool is_pot_role);
 
 /* Terminate lexical analysis.  */
 extern void lex_end (void);
index 17ed4602e93a691ff8e6285533f8938320b7c723..c1956b29fab8ac2d55eef0e428513a70fab4c145 100644 (file)
@@ -171,13 +171,14 @@ parse_end (abstract_catalog_reader_ty *pop)
 void
 catalog_reader_parse (abstract_catalog_reader_ty *pop, FILE *fp,
                       const char *real_filename, const char *logical_filename,
+                      bool is_pot_role,
                       catalog_input_format_ty input_syntax)
 {
   error_message_count = 0;
 
   /* Parse the stream's content.  */
   parse_start (pop);
-  input_syntax->parse (pop, fp, real_filename, logical_filename);
+  input_syntax->parse (pop, fp, real_filename, logical_filename, is_pot_role);
   parse_end (pop);
 
   if (error_message_count > 0)
index 01df62709678a86f65131f02257c149ff236bce6..91d487c7c30eaa02ab164f45358b0280b1b77fb3 100644 (file)
@@ -1,6 +1,5 @@
 /* Reading PO files, abstract class.
-   Copyright (C) 1995-1996, 1998, 2000-2003, 2005-2006, 2008-2009, 2012,
-   2015 Free Software Foundation, Inc.
+   Copyright (C) 1995-1996, 1998, 2000-2003, 2005-2006, 2008-2009, 2012, 2015, 2023 Free Software Foundation, Inc.
 
    This file was written by Peter Miller <millerp@canb.auug.org.au>
 
@@ -134,7 +133,8 @@ struct catalog_input_format
 {
   /* Parses the contents of FP, invoking the appropriate callbacks.  */
   void (*parse) (abstract_catalog_reader_ty *pop, FILE *fp,
-                 const char *real_filename, const char *logical_filename);
+                 const char *real_filename, const char *logical_filename,
+                 bool is_pot_role);
 
   /* Whether the parse function always produces messages encoded in UTF-8
      encoding.  */
@@ -155,6 +155,7 @@ extern void
        catalog_reader_parse (abstract_catalog_reader_ty *pop, FILE *fp,
                              const char *real_filename,
                              const char *logical_filename,
+                             bool is_pot_role,
                              catalog_input_format_ty input_syntax);
 
 /* Call the destructor and deallocate a abstract_catalog_reader_ty (or derived
index c593ca98e0ad84df6114ff146d9a10143000fdde..2dd3bd66ac1fb1705f394d0ecd272b6c998456e6 100644 (file)
@@ -479,7 +479,7 @@ read_catalog_stream (FILE *fp, const char *real_filename,
     pop->mdlp->encoding = po_charset_utf8;
   po_lex_pass_obsolete_entries (true);
   catalog_reader_parse ((abstract_catalog_reader_ty *) pop, fp, real_filename,
-                        logical_filename, input_syntax);
+                        logical_filename, false, input_syntax);
   mdlp = pop->mdlp;
   catalog_reader_free ((abstract_catalog_reader_ty *) pop);
   return mdlp;
index 1bc42ca4a1389acb23b9ee92c7e21fefd4bca7fe..3c54f283fce3f7fb8a7b5ffce12565bfd2c35dd8 100644 (file)
@@ -1,5 +1,5 @@
 /* Reading PO files.
-   Copyright (C) 1995-1996, 1998, 2000-2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-1996, 1998, 2000-2006, 2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    abstract_catalog_reader_class_ty methods.  */
 static void
 po_parse (abstract_catalog_reader_ty *this, FILE *fp,
-          const char *real_filename, const char *logical_filename)
+          const char *real_filename, const char *logical_filename,
+          bool is_pot_role)
 {
-  lex_start (fp, real_filename, logical_filename);
+  lex_start (fp, real_filename, logical_filename, is_pot_role);
   po_gram_parse ();
   lex_end ();
 }
index c5ef74cadf5339ff131262e6d2c7694e945f4779..20518939a70b478974b749890e2941b19f48f790 100644 (file)
@@ -597,7 +597,8 @@ read_escaped_string (bool in_key)
    abstract_catalog_reader_class_ty methods.  */
 static void
 properties_parse (abstract_catalog_reader_ty *this, FILE *file,
-                  const char *real_filename, const char *logical_filename)
+                  const char *real_filename, const char *logical_filename,
+                  bool is_pot_role)
 {
   /* Read the file into memory.  */
   contents = fread_file (file, 0, &contents_length);
index 5a87c0de6cad4a9ec5f45f93577ca224c257a3fc..0b8b3f752c5d55ad5a34754bafc23b13b0f7d217 100644 (file)
@@ -828,7 +828,8 @@ read_string (lex_pos_ty *pos)
    abstract_catalog_reader_class_ty methods.  */
 static void
 stringtable_parse (abstract_catalog_reader_ty *pop, FILE *file,
-                   const char *real_filename, const char *logical_filename)
+                   const char *real_filename, const char *logical_filename,
+                   bool is_pot_role)
 {
   fp = file;
   real_file_name = real_filename;
index fd6b517a06d087186a7898dfff13e8f50d76f270..740aa3d892b2689f031ccb3810e054d97eb429b9 100644 (file)
@@ -165,7 +165,7 @@ extract (FILE *fp,
   pop->mdlp = NULL;
   pop->mlp = mdlp->item[0]->messages;
   catalog_reader_parse ((abstract_catalog_reader_ty *) pop, fp, real_filename,
-                        logical_filename, input_syntax);
+                        logical_filename, true, input_syntax);
   catalog_reader_free ((abstract_catalog_reader_ty *) pop);
 
   if (header_charset != NULL)
index 9fc61ab3eb2f03143646659312ba0805644d89ef..d44721e50b7fa57601972da96b4a40f799bd2621 100644 (file)
@@ -1341,7 +1341,7 @@ read_exclusion_file (char *filename)
   abstract_catalog_reader_ty *pop;
 
   pop = catalog_reader_alloc (&exclude_methods);
-  catalog_reader_parse (pop, fp, real_filename, filename, &input_format_po);
+  catalog_reader_parse (pop, fp, real_filename, filename, true, &input_format_po);
   catalog_reader_free (pop);
 
   if (fp != stdin)