Re: [PATCH] gettext: use libcharset when available

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Sep 28, 2010 at 16:05, Erik Faye-Lund <kusmabite@xxxxxxxxx> wrote:
> libcharset provides an even more portable way of quering the charset
> of the current locale.
>
> Use that instead of nl_langinfo unless NO_LIBCHARSET is set.
>
> Signed-off-by: Erik Faye-Lund <kusmabite@xxxxxxxxx>
> ---
>
> Windows doesn't have langinfo.h and nl_langinfo(), but libcharset was
> invented for this very purpose. With this patch on top, ab/i18n
> compiles without errors in msysGit.
>
> There's still a bunch of lower-level issues on Windows, like gettext
> ending up overloading our winansi-wrappings for printf and friends,
> but let's take thinks one step at the time :)
>
> Âconfigure.ac | Â Â6 ++++++
> Âgettext.c  Â|  10 +++++++++-
> Â2 files changed, 15 insertions(+), 1 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 1821d89..d3139cd 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -810,6 +810,12 @@ AC_CHECK_HEADER([libintl.h],
> Â[NO_GETTEXT=YesPlease])
> ÂAC_SUBST(NO_GETTEXT)
> Â#
> +# Define NO_LIBCHARSET if you don't have libcharset.h
> +AC_CHECK_HEADER([libcharset.h],
> +[NO_LIBCHARSET=],
> +[NO_LIBCHARSET=YesPlease])
> +AC_SUBST(NO_LIBCHARSET)
> +#
> Â# Define NO_STRCASESTR if you don't have strcasestr.
> ÂGIT_CHECK_FUNC(strcasestr,
> Â[NO_STRCASESTR=],
> diff --git a/gettext.c b/gettext.c
> index 8644098..902268c 100644
> --- a/gettext.c
> +++ b/gettext.c
> @@ -1,13 +1,17 @@
> Â#include "exec_cmd.h"
> Â#include <locale.h>
> Â#include <libintl.h>
> +#ifndef NO_LIBCHARSET
> +#include <libcharset.h>
> +#else
> Â#include <langinfo.h>
> +#endif
> Â#include <stdlib.h>
>
> Âextern void git_setup_gettext(void) {
> Â Â Â Âchar *podir;
> Â Â Â Âchar *envdir = getenv("GIT_TEXTDOMAINDIR");
> - Â Â Â char *charset;
> + Â Â Â const char *charset;
>
> Â Â Â Âif (envdir) {
> Â Â Â Â Â Â Â Â(void)bindtextdomain("git", envdir);
> @@ -20,7 +24,11 @@ extern void git_setup_gettext(void) {
>
> Â Â Â Â(void)setlocale(LC_MESSAGES, "");
> Â Â Â Â(void)setlocale(LC_CTYPE, "");
> +#ifndef NO_LIBCHARSET
> + Â Â Â charset = locale_charset();
> +#else
> Â Â Â Âcharset = nl_langinfo(CODESET);
> +#endif
> Â Â Â Â(void)bind_textdomain_codeset("git", charset);
> Â Â Â Â(void)setlocale(LC_CTYPE, "C");
> Â Â Â Â(void)textdomain("git");

Thanks for porting it to Windows. Some points:

 * Nit: Should be NEEDS_LIBCHARSET instead of NO_LIBCHARSET, all the
   variables that set library inclusions in the Makefile use the
   NEED_* names.

 * GHC had a patch like this, it seems it affects NetBSD and OpenBSD
   too, can anyone with these systems confirm:
   http://hackage.haskell.org/trac/ghc/ticket/4080

 * Their patch compiles a program that includes libcharset.h and
   compiles "const char* charset = locale_charset();". I don't know if
   this is needed, or whether just checking the header name like
   you've done will do.

 * They also have a HAVE_LANGINFO_H define and fall back on just
   returning "", which works on GNU iconv. Maybe we should do this
   too?

I'm not sure about any of this, since I've just been testing on
Solaris, Linux and FreeBSD.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]