diff --git a/Makefile b/Makefile index 9aeaf5e643..16d24ae522 100644 --- a/Makefile +++ b/Makefile @@ -492,6 +492,7 @@ lib = lib # DESTDIR = pathsep = : +localedir_relative = $(patsubst $(prefix)/%,%,$(localedir)) mandir_relative = $(patsubst $(prefix)/%,%,$(mandir)) infodir_relative = $(patsubst $(prefix)/%,%,$(infodir)) htmldir_relative = $(patsubst $(prefix)/%,%,$(htmldir)) @@ -1740,6 +1741,7 @@ mandir_relative_SQ = $(subst ','\'',$(mandir_relative)) infodir_relative_SQ = $(subst ','\'',$(infodir_relative)) perllibdir_SQ = $(subst ','\'',$(perllibdir)) localedir_SQ = $(subst ','\'',$(localedir)) +localedir_relative_SQ = $(subst ','\'',$(localedir_relative)) gitexecdir_SQ = $(subst ','\'',$(gitexecdir)) template_dir_SQ = $(subst ','\'',$(template_dir)) htmldir_relative_SQ = $(subst ','\'',$(htmldir_relative)) @@ -2163,7 +2165,7 @@ attr.sp attr.s attr.o: EXTRA_CPPFLAGS = \ gettext.sp gettext.s gettext.o: GIT-PREFIX gettext.sp gettext.s gettext.o: EXTRA_CPPFLAGS = \ - -DGIT_LOCALE_PATH='"$(localedir_SQ)"' + -DGIT_LOCALE_PATH='"$(localedir_relative_SQ)"' http-push.sp http.sp http-walker.sp remote-curl.sp imap-send.sp: SPARSE_FLAGS += \ -DCURL_DISABLE_TYPECHECK diff --git a/common-main.c b/common-main.c index 6a689007e7..51a946f2d9 100644 --- a/common-main.c +++ b/common-main.c @@ -32,12 +32,12 @@ int main(int argc, const char **argv) */ sanitize_stdfds(); + git_extract_argv0_path(argv[0]); + git_setup_gettext(); attr_start(); - git_extract_argv0_path(argv[0]); - restore_sigpipe_to_default(); return cmd_main(argc, argv); diff --git a/gettext.c b/gettext.c index 7d9e2c27ef..0a974f9cd1 100644 --- a/gettext.c +++ b/gettext.c @@ -6,6 +6,8 @@ #include "gettext.h" #include "strbuf.h" #include "utf8.h" +#include "cache.h" +#include "exec_cmd.h" #ifndef NO_GETTEXT # include @@ -160,14 +162,22 @@ static void init_gettext_charset(const char *domain) void git_setup_gettext(void) { const char *podir = getenv("GIT_TEXTDOMAINDIR"); + char *p = NULL; if (!podir) podir = GIT_LOCALE_PATH; - bindtextdomain("git", podir); - setlocale(LC_MESSAGES, ""); - setlocale(LC_TIME, ""); - init_gettext_charset("git"); - textdomain("git"); + if (!is_absolute_path(podir)) + podir = p = system_path(podir); + + if (is_directory(podir)) { + bindtextdomain("git", podir); + setlocale(LC_MESSAGES, ""); + setlocale(LC_TIME, ""); + init_gettext_charset("git"); + textdomain("git"); + } + + free(p); } /* return the number of columns of string 's' in current locale */