/* 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 <haible@clisp.cons.org>, 2001.
This program is free software: you can redistribute it and/or modify
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,
{
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,
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 \
--- /dev/null
+#! /bin/sh
+. "${srcdir=.}/init.sh"; path_prepend_ . ../src
+
+# Test combining of POT files by merging them.
+
+cat <<EOF > xg-co-test1-a.c
+void f () { gettext ("foobar"); }
+EOF
+
+cat <<EOF > 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 <<EOF > 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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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
--- /dev/null
+#! /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 <<EOF > xg-co-test2-a.c
+void f () { gettext ("foobar"); }
+EOF
+
+cat <<EOF > 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 <<EOF > 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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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
--- /dev/null
+#! /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).
+# <https://savannah.gnu.org/bugs/?64490>
+
+cat <<EOF > xg-co-test3-a.c
+void f () { gettext ("foobar"); }
+EOF
+
+cat <<EOF > 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 <<EOF > 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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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