Code

Merge branch 'ar/i18n-no-gettext'
authorJunio C Hamano <gitster@pobox.com>
Wed, 1 Feb 2012 06:24:23 +0000 (22:24 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 1 Feb 2012 06:24:23 +0000 (22:24 -0800)
* ar/i18n-no-gettext:
  i18n: Do not force USE_GETTEXT_SCHEME=fallthrough on NO_GETTEXT
  i18n: Make NO_GETTEXT imply fallthrough scheme in shell l10n
  add a Makefile switch to avoid gettext translation in shell scripts
  git-sh-i18n: restructure the logic to compute gettext.sh scheme

Makefile
git-sh-i18n.sh

index a782409306df85985e1f465eab4bd3cd7fa2cc83..c457c34fe95b537a3db07c95787659c6258b908d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -47,6 +47,9 @@ all::
 # A translated Git requires GNU libintl or another gettext implementation,
 # plus libintl-perl at runtime.
 #
+# Define USE_GETTEXT_SCHEME and set it to 'fallthrough', if you don't trust
+# the installed gettext translation of the shell scripts output.
+#
 # Define HAVE_LIBCHARSET_H if you haven't set NO_GETTEXT and you can't
 # trust the langinfo.h's nl_langinfo(CODESET) function to return the
 # current character set. GNU and Solaris have a nl_langinfo(CODESET),
@@ -1521,6 +1524,7 @@ ifdef GETTEXT_POISON
 endif
 ifdef NO_GETTEXT
        BASIC_CFLAGS += -DNO_GETTEXT
+       USE_GETTEXT_SCHEME ?= fallthrough
 endif
 ifdef NO_STRCASESTR
        COMPAT_CFLAGS += -DNO_STRCASESTR
@@ -1887,6 +1891,7 @@ sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
     -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
     -e 's|@@LOCALEDIR@@|$(localedir_SQ)|g' \
     -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
+    -e 's/@@USE_GETTEXT_SCHEME@@/$(USE_GETTEXT_SCHEME)/g' \
     -e $(BROKEN_PATH_FIX) \
     $@.sh >$@+
 endef
@@ -2264,7 +2269,7 @@ cscope:
 ### Detect prefix changes
 TRACK_CFLAGS = $(CC):$(subst ','\'',$(ALL_CFLAGS)):\
              $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):\
-             $(localedir_SQ)
+             $(localedir_SQ):$(USE_GETTEXT_SCHEME)
 
 GIT-CFLAGS: FORCE
        @FLAGS='$(TRACK_CFLAGS)'; \
index b4575fb3a109a2973d519c9f03187ca8fe516679..d5fae993b0c093bdd07079101df303c2c74deae3 100644 (file)
@@ -16,61 +16,48 @@ else
 fi
 export TEXTDOMAINDIR
 
-if test -z "$GIT_GETTEXT_POISON"
+# First decide what scheme to use...
+GIT_INTERNAL_GETTEXT_SH_SCHEME=fallthrough
+if test -n "@@USE_GETTEXT_SCHEME@@"
+then
+       GIT_INTERNAL_GETTEXT_SH_SCHEME="@@USE_GETTEXT_SCHEME@@"
+elif test -n "@@USE_FALLTHROUGH_GETTEXT_SCHEME@@$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS"
+then
+       : no probing necessary
+elif test -n "$GIT_GETTEXT_POISON"
 then
-       if test -z "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS" && type gettext.sh >/dev/null 2>&1
-       then
-               # This is GNU libintl's gettext.sh, we don't need to do anything
-               # else than setting up the environment and loading gettext.sh
-               GIT_INTERNAL_GETTEXT_SH_SCHEME=gnu
-               export GIT_INTERNAL_GETTEXT_SH_SCHEME
-
-               # Try to use libintl's gettext.sh, or fall back to English if we
-               # can't.
-               . gettext.sh
-
-       elif test -z "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS" && test "$(gettext -h 2>&1)" = "-h"
-       then
-               # We don't have gettext.sh, but there's a gettext binary in our
-               # path. This is probably Solaris or something like it which has a
-               # gettext implementation that isn't GNU libintl.
-               GIT_INTERNAL_GETTEXT_SH_SCHEME=solaris
-               export GIT_INTERNAL_GETTEXT_SH_SCHEME
-
-               # Solaris has a gettext(1) but no eval_gettext(1)
-               eval_gettext () {
-                       gettext "$1" | (
-                               export PATH $(git sh-i18n--envsubst --variables "$1");
-                               git sh-i18n--envsubst "$1"
-                       )
-               }
-
-       else
-               # Since gettext.sh isn't available we'll have to define our own
-               # dummy pass-through functions.
-
-               # Tell our tests that we don't have the real gettext.sh
-               GIT_INTERNAL_GETTEXT_SH_SCHEME=fallthrough
-               export GIT_INTERNAL_GETTEXT_SH_SCHEME
-
-               gettext () {
-                       printf "%s" "$1"
-               }
-
-               eval_gettext () {
-                       printf "%s" "$1" | (
-                               export PATH $(git sh-i18n--envsubst --variables "$1");
-                               git sh-i18n--envsubst "$1"
-                       )
-               }
-       fi
-else
-       # Emit garbage under GETTEXT_POISON=YesPlease. Unlike the C tests
-       # this relies on an environment variable
-
        GIT_INTERNAL_GETTEXT_SH_SCHEME=poison
-       export GIT_INTERNAL_GETTEXT_SH_SCHEME
+elif type gettext.sh >/dev/null 2>&1
+then
+       # GNU libintl's gettext.sh
+       GIT_INTERNAL_GETTEXT_SH_SCHEME=gnu
+elif test "$(gettext -h 2>&1)" = "-h"
+then
+       # gettext binary exists but no gettext.sh. likely to be a gettext
+       # binary on a Solaris or something that is not GNU libintl and
+       # lack eval_gettext.
+       GIT_INTERNAL_GETTEXT_SH_SCHEME=gettext_without_eval_gettext
+fi
+export GIT_INTERNAL_GETTEXT_SH_SCHEME
 
+# ... and then follow that decision.
+case "$GIT_INTERNAL_GETTEXT_SH_SCHEME" in
+gnu)
+       # Use libintl's gettext.sh, or fall back to English if we can't.
+       . gettext.sh
+       ;;
+gettext_without_eval_gettext)
+       # Solaris has a gettext(1) but no eval_gettext(1)
+       eval_gettext () {
+               gettext "$1" | (
+                       export PATH $(git sh-i18n--envsubst --variables "$1");
+                       git sh-i18n--envsubst "$1"
+               )
+       }
+       ;;
+poison)
+       # Emit garbage so that tests that incorrectly rely on translatable
+       # strings will fail.
        gettext () {
                printf "%s" "# GETTEXT POISON #"
        }
@@ -78,7 +65,20 @@ else
        eval_gettext () {
                printf "%s" "# GETTEXT POISON #"
        }
-fi
+       ;;
+*)
+       gettext () {
+               printf "%s" "$1"
+       }
+
+       eval_gettext () {
+               printf "%s" "$1" | (
+                       export PATH $(git sh-i18n--envsubst --variables "$1");
+                       git sh-i18n--envsubst "$1"
+               )
+       }
+       ;;
+esac
 
 # Git-specific wrapper functions
 gettextln () {