--- /dev/null
+#! /bin/sh
+. "${srcdir=.}/init.sh"; path_prepend_ . ../src
+
+# Test .mo file with many system dependent string pairs.
+# Cf. <inttypes.h> format string directives support as in msgfmt-12, format-c-3,
+# and the 'I' format directive flag as in format-c-5.
+
+# This test used to trigger an endless loop in loadmsgcat.c, because
+# hash_tab_size was too small and the "open addressing" collision resolution
+# leads to an endless loop when the hash table is full.
+
+cat <<\EOF > mf-20.po
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "The trees are green."
+msgstr "Les arbres sont verts."
+
+#, c-format
+msgid "A meter has %d millimeters."
+msgstr "Un mètre a %Id millimètres."
+
+#, c-format
+msgid "A pig has %d legs."
+msgstr "Un cochon a %Id pattes."
+
+#, c-format
+msgid "The French revolution took place in %d."
+msgstr "La révolution française eut lieu en %Id."
+
+#, c-format
+msgid "Abraham died at the age of %d."
+msgstr "Abraham mourut à l’âge de %Id ans."
+
+#, c-format
+msgid "Everyone has %d fingers at each hand."
+msgstr "Chacun a %Id doigts à chaque main."
+
+msgid "Sunshine heats."
+msgstr "Le soleil tape."
+
+#, c-format
+msgid "Most cars have %d wheels."
+msgstr "La plupart des voitures a %Id roues."
+
+#, c-format
+msgid "The oldest person is %d years old."
+msgstr "La personne la plus vieille a %Id ans."
+
+#, c-format
+msgid "Cesar tool %d years to conquer Gaul."
+msgstr "César mit %Id ans à conquérir la Gaule."
+
+#, c-format
+msgid "There are %d pyramids in Egypt."
+msgstr "Il y a %Id pyramides en Égypte."
+
+#, c-format
+msgid "The number %d causes bad luck."
+msgstr "Le nombre %Id porte malheur."
+EOF
+
+test -d fr || mkdir fr
+test -d fr/LC_MESSAGES || mkdir fr/LC_MESSAGES
+
+: ${MSGFMT=msgfmt}
+${MSGFMT} -o fr/LC_MESSAGES/mf-20.mo mf-20.po || Exit 1
+
+cat <<EOF > mf-20.ok
+Le soleil tape.
+EOF
+
+: ${LOCALE_FR=fr_FR}
+: ${LOCALE_FR_UTF8=fr_FR.UTF-8}
+: ${GETTEXT=gettext}
+: ${DIFF=diff}
+if test $LOCALE_FR != none; then
+ prepare_locale_ fr $LOCALE_FR
+ LC_ALL=$LOCALE_FR LANGUAGE= TEXTDOMAINDIR=. TEXTDOMAIN=mf-20 \
+ ${GETTEXT} -s 'Sunshine heats.' > mf-20.tmp
+ LC_ALL=C tr -d '\r' < mf-20.tmp > mf-20.out
+ ${DIFF} mf-20.ok mf-20.out || Exit 1
+fi
+if test $LOCALE_FR_UTF8 != none; then
+ prepare_locale_ fr $LOCALE_FR_UTF8
+ LC_ALL=$LOCALE_FR_UTF8 LANGUAGE= TEXTDOMAINDIR=. TEXTDOMAIN=mf-20 \
+ ${GETTEXT} -s 'Sunshine heats.' > mf-20.tmp
+ LC_ALL=C tr -d '\r' < mf-20.tmp > mf-20.out
+ ${DIFF} mf-20.ok mf-20.out || Exit 1
+fi
+if test $LOCALE_FR = none && test $LOCALE_FR_UTF8 = none; then
+ if test -f /usr/bin/localedef; then
+ echo "Skipping test: no french locale is installed"
+ else
+ echo "Skipping test: no french locale is supported"
+ fi
+ Exit 77
+fi
+
+Exit 0