From: Bruno Haible Date: Sat, 16 Sep 2023 22:18:47 +0000 (+0200) Subject: xgettext: Avoid error 'present charset "CHARSET" is not a portable encoding name... X-Git-Tag: v0.22.1~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=510f464b4cf33492edfd6c1e4bd55824d9e2741e;p=thirdparty%2Fgettext.git xgettext: Avoid error 'present charset "CHARSET" is not a portable encoding name' when possible. Reported by Arsen Arsenović at . This changes the behaviour back to the one from gettext 0.21.1, where this xgettext invocation produced just a warning. * gettext-tools/src/msgl-iconv.c (iconv_message_list_internal): Don't give an error when a PO file has a header entry with charset=CHARSET and is entirely ASCII. * gettext-tools/src/msgl-cat.c (catenate_msgdomain_list): Likewise. * gettext-tools/tests/xgettext-combine-1: New file. * gettext-tools/tests/xgettext-combine-2: New file. * gettext-tools/tests/xgettext-combine-3: New file. * gettext-tools/tests/Makefile.am (TESTS): Add them. --- diff --git a/gettext-tools/src/msgl-cat.c b/gettext-tools/src/msgl-cat.c index 965cc8cf8..54bb92f33 100644 --- a/gettext-tools/src/msgl-cat.c +++ b/gettext-tools/src/msgl-cat.c @@ -1,6 +1,5 @@ /* Message list concatenation and duplicate handling. - Copyright (C) 2001-2003, 2005-2008, 2012, 2015, 2019-2021 Free Software - Foundation, Inc. + Copyright (C) 2001-2003, 2005-2008, 2012, 2015, 2019-2021, 2023 Free Software Foundation, Inc. Written by Bruno Haible , 2001. This program is free software: you can redistribute it and/or modify @@ -164,15 +163,18 @@ catenate_msgdomain_list (string_list_ty *file_list, if (canon_charset == NULL) { /* Don't give an error for POT files, because - POT files usually contain only ASCII + POT files usually contain only ASCII msgids. + Also don't give an error for disguised POT + files that actually contain only ASCII msgids. */ const char *filename = files[n]; 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_ascii_message_list (mlp))) canon_charset = po_charset_ascii; else error (EXIT_FAILURE, 0, diff --git a/gettext-tools/src/msgl-iconv.c b/gettext-tools/src/msgl-iconv.c index 77de5c9e2..33b1aa88a 100644 --- a/gettext-tools/src/msgl-iconv.c +++ b/gettext-tools/src/msgl-iconv.c @@ -245,16 +245,19 @@ iconv_message_list_internal (message_list_ty *mlp, { if (!canon_from_code_overridden) { - /* Don't give an error for POT files, because POT - files usually contain only ASCII msgids. */ + /* Don't give an error for POT files, because + POT files usually contain only ASCII msgids. + Also don't give an error for disguised POT + files that actually contain only ASCII msgids. */ const char *filename = from_filename; size_t filenamelen; - if (filename != NULL - && (filenamelen = strlen (filename)) >= 4 - && memcmp (filename + filenamelen - 4, ".pot", 4) - == 0 - && strcmp (charset, "CHARSET") == 0) + if (strcmp (charset, "CHARSET") == 0 + && ((filename != NULL + && (filenamelen = strlen (filename)) >= 4 + && memcmp (filename + filenamelen - 4, ".pot", 4) + == 0) + || is_ascii_message_list (mlp))) canon_charset = po_charset_ascii; else po_xerror (PO_SEVERITY_FATAL_ERROR, NULL, NULL, 0, 0, diff --git a/gettext-tools/tests/Makefile.am b/gettext-tools/tests/Makefile.am index f4e3d227d..e2114f8c9 100644 --- a/gettext-tools/tests/Makefile.am +++ b/gettext-tools/tests/Makefile.am @@ -81,6 +81,7 @@ TESTS = gettext-1 gettext-2 \ xgettext-7 xgettext-8 xgettext-9 xgettext-10 xgettext-11 xgettext-12 \ xgettext-13 xgettext-14 xgettext-15 xgettext-16 xgettext-17 \ xgettext-18 \ + xgettext-combine-1 xgettext-combine-2 xgettext-combine-3 \ xgettext-appdata-1 \ xgettext-awk-1 xgettext-awk-2 xgettext-awk-3 \ xgettext-awk-stackovfl-1 xgettext-awk-stackovfl-2 \ diff --git a/gettext-tools/tests/xgettext-combine-1 b/gettext-tools/tests/xgettext-combine-1 new file mode 100755 index 000000000..70e02a7aa --- /dev/null +++ b/gettext-tools/tests/xgettext-combine-1 @@ -0,0 +1,55 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test combining of POT files by merging them. + +cat < xg-co-test1-a.c +void f () { gettext ("foobar"); } +EOF + +cat < xg-co-test1-b.py +print gettext.gettext("sumsum"); +EOF + +: ${XGETTEXT=xgettext} + +${XGETTEXT} -o xg-co-test1-part-c.pot xg-co-test1-a.c || Exit 1 +${XGETTEXT} -o xg-co-test1-part-py.pot xg-co-test1-b.py || Exit 1 +${XGETTEXT} -o xg-co-test1-all.tmp1 xg-co-test1-part-c.pot xg-co-test1-part-py.pot || Exit 1 +LC_ALL=C tr -d '\r' < xg-co-test1-all.tmp1 > xg-co-test1-all.tmp2 || Exit 1 + +sed -e '/POT-Creation-Date/d' < xg-co-test1-all.tmp2 > xg-co-test1-all.pot + +cat < xg-co-test1.ok +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: xg-co-test1-a.c:1 +msgid "foobar" +msgstr "" + +#: xg-co-test1-b.py:1 +msgid "sumsum" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-co-test1.ok xg-co-test1-all.pot +result=$? + +exit $result diff --git a/gettext-tools/tests/xgettext-combine-2 b/gettext-tools/tests/xgettext-combine-2 new file mode 100755 index 000000000..4c5fb7b53 --- /dev/null +++ b/gettext-tools/tests/xgettext-combine-2 @@ -0,0 +1,55 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test combining of POT files by using the -j option on a file with +# suffix ".pot". + +cat < xg-co-test2-a.c +void f () { gettext ("foobar"); } +EOF + +cat < xg-co-test2-b.py +print gettext.gettext("sumsum"); +EOF + +: ${XGETTEXT=xgettext} + +${XGETTEXT} -o xg-co-test2-all-tmp.pot xg-co-test2-a.c || Exit 1 +${XGETTEXT} -j -o xg-co-test2-all-tmp.pot xg-co-test2-b.py || Exit 1 +LC_ALL=C tr -d '\r' < xg-co-test2-all-tmp.pot > xg-co-test2-all.tmp2 || Exit 1 + +sed -e '/POT-Creation-Date/d' < xg-co-test2-all.tmp2 > xg-co-test2-all.pot + +cat < xg-co-test2.ok +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: xg-co-test2-a.c:1 +msgid "foobar" +msgstr "" + +#: xg-co-test2-b.py:1 +msgid "sumsum" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-co-test2.ok xg-co-test2-all.pot +result=$? + +exit $result diff --git a/gettext-tools/tests/xgettext-combine-3 b/gettext-tools/tests/xgettext-combine-3 new file mode 100755 index 000000000..1fd33f1f3 --- /dev/null +++ b/gettext-tools/tests/xgettext-combine-3 @@ -0,0 +1,56 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test combining of POT files by using the -j option on a file with another +# suffix, e.g. with suffix ".po" (as generated by the --default-domain option). +# + +cat < xg-co-test3-a.c +void f () { gettext ("foobar"); } +EOF + +cat < xg-co-test3-b.py +print gettext.gettext("sumsum"); +EOF + +: ${XGETTEXT=xgettext} + +${XGETTEXT} --default-domain=xg-co-test3-all-tmp xg-co-test3-a.c || Exit 1 +${XGETTEXT} -j --default-domain=xg-co-test3-all-tmp xg-co-test3-b.py || Exit 1 +LC_ALL=C tr -d '\r' < xg-co-test3-all-tmp.po > xg-co-test3-all.tmp2 || Exit 1 + +sed -e '/POT-Creation-Date/d' < xg-co-test3-all.tmp2 > xg-co-test3-all.pot + +cat < xg-co-test3.ok +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: xg-co-test3-a.c:1 +msgid "foobar" +msgstr "" + +#: xg-co-test3-b.py:1 +msgid "sumsum" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-co-test3.ok xg-co-test3-all.pot +result=$? + +exit $result