Code

gettext tests: add GETTEXT_POISON=YesPlease Makefile parameter
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Fri, 3 Sep 2010 17:50:56 +0000 (17:50 +0000)
committerÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Sat, 30 Oct 2010 07:10:06 +0000 (07:10 +0000)
Add a new GETTEXT_POISON=YesPlease Makefile debug target. With this
target every invocation of _(s) will return "# GETTEXT POISON #"
instead of `s' or the msgstr that `s` would look up.

This target is intended to sanity check the gettextization series
against the test suite.

If the test suite is relying on the US English output of Git the test
should either have a NO_GETTEXT_POISON prerequisite, or the message in
question shouldn't be translated because it's a plumbing message.

We won't catch everything with this since we don't have 100% test
coverage, but the chances of us doing so are much larger.

The reason I'm using "# GETTEXT POISON #" is that a lot of tests that
rely on the fake editor would break if it wasn't a comment, since the
comment message that's inserted on e.g. `git commit --amend' is
translatable.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Makefile
gettext.h
t/test-lib.sh

index 2d6d8242d77dc9129151a7c470cf8fd0c73385b7..3774d4a8fdc784500ab4dbe79292c3073279161c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -49,6 +49,10 @@ all::
 # FreeBSD can use either, but MinGW and some others need to use
 # libcharset.h's locale_charset() instead.
 #
+# Define GETTEXT_POISON to turn all strings that use gettext into
+# gibberish. This option should only be used by the Git developers to
+# check that the Git gettext implementation itself is sane.
+#
 # Define EXPATDIR=/foo/bar if your expat header and library files are in
 # /foo/bar/include and /foo/bar/lib directories.
 #
@@ -1528,6 +1532,10 @@ ifdef NEEDS_LIBINTL
        EXTLIBS += -lintl
 endif
 
+ifdef GETTEXT_POISON
+       COMPAT_CFLAGS += -DGETTEXT_POISON
+endif
+
 ifeq ($(TCLTK_PATH),)
 NO_TCLTK=NoThanks
 endif
@@ -2098,6 +2106,7 @@ ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
        @echo GIT_TEST_CMP_USE_COPIED_CONTEXT=YesPlease >>$@
 endif
        @echo NO_GETTEXT=\''$(subst ','\'',$(subst ','\'',$(NO_GETTEXT)))'\' >>$@
+       @echo GETTEXT_POISON=\''$(subst ','\'',$(subst ','\'',$(GETTEXT_POISON)))'\' >>$@
 
 ### Detect Tck/Tk interpreter path changes
 ifndef NO_TCLTK
index e02939ae362a92106798a5e668bf85d533e6b290..94ab0f3b2823776a2b121f60582dacc2529410d2 100644 (file)
--- a/gettext.h
+++ b/gettext.h
@@ -11,8 +11,12 @@ extern void git_setup_gettext(void);
 #ifdef NO_GETTEXT
 #define _(s) (s)
 #else
+#ifndef GETTEXT_POISON
 #include <libintl.h>
 #define _(s) gettext(s)
+#else
+#define _(s) "# GETTEXT POISON #"
+#endif
 #endif
 
 #endif
index 0379f2a40e7547c6b387f467e6cbe3f38daf57d1..29bdf882a309b6696ffecab6b3e68ecc9a7f070e 100644 (file)
@@ -984,6 +984,7 @@ esac
 test -z "$NO_PERL" && test_set_prereq PERL
 test -z "$NO_PYTHON" && test_set_prereq PYTHON
 test -z "$NO_GETTEXT" && test_set_prereq GETTEXT
+test -z "$GETTEXT_POISON" && test_set_prereq NO_GETTEXT_POISON
 
 # test whether the filesystem supports symbolic links
 ln -s x y 2>/dev/null && test -h y 2>/dev/null && test_set_prereq SYMLINKS