mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
Implement #491549: On Windows, always use the native API for character set
2007-11-26 Tor Lillqvist <tml@novell.com> Implement #491549: On Windows, always use the native API for character set conversions instead of GNU libiconv. Almost all codesets supported by GNU libiconv exist as Windows codepages. One missing feature is the "C99" and "JAVA" pseudo codesets, but I doubt that is worth worrying about. * glib/win_iconv.c: New file. iconv() implementation for Windows. Placed in the public domain by Yukihiro Nakadaira <yukihiro.nakadaira@gmail.com>. From http://yukihiro.nakadaira.googlepages.com/win_iconv.zip, his 2007-11-17 version. * glib/gconvert.c: Include win_iconv.c on Windows. * configure.in: Bypass iconv checks on Windows. svn path=/trunk/; revision=5937
This commit is contained in:
parent
6fdcc7ddb2
commit
04aec5b28d
18
ChangeLog
18
ChangeLog
@ -1,3 +1,21 @@
|
||||
2007-11-26 Tor Lillqvist <tml@novell.com>
|
||||
|
||||
Implement #491549: On Windows, always use the native API for
|
||||
character set conversions instead of GNU libiconv. Almost all
|
||||
codesets supported by GNU libiconv exist as Windows codepages.
|
||||
One missing feature is the "C99" and "JAVA" pseudo codesets, but I
|
||||
doubt that is worth worrying about.
|
||||
|
||||
* glib/win_iconv.c: New file. iconv() implementation for
|
||||
Windows. Placed in the public domain by Yukihiro Nakadaira
|
||||
<yukihiro.nakadaira@gmail.com>. From
|
||||
http://yukihiro.nakadaira.googlepages.com/win_iconv.zip, his
|
||||
2007-11-17 version.
|
||||
|
||||
* glib/gconvert.c: Include win_iconv.c on Windows.
|
||||
|
||||
* configure.in: Bypass iconv checks on Windows.
|
||||
|
||||
2007-11-25 Tor Lillqvist <tml@novell.com>
|
||||
|
||||
* glib/gtestutils.c: Add conditionals for non-Unix. Just g_error()
|
||||
|
74
configure.in
74
configure.in
@ -376,38 +376,44 @@ dnl ***********************
|
||||
dnl
|
||||
dnl We do this before the gettext checks, to avoid distortion
|
||||
|
||||
AC_ARG_WITH(libiconv,
|
||||
[AC_HELP_STRING([--with-libiconv=@<:@no/gnu/native@:>@],
|
||||
[use the libiconv library])],,
|
||||
[with_libiconv=maybe])
|
||||
dnl On Windows we use a native implementation
|
||||
|
||||
found_iconv=no
|
||||
case $with_libiconv in
|
||||
maybe)
|
||||
# Check in the C library first
|
||||
AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
|
||||
# Check if we have GNU libiconv
|
||||
if test $found_iconv = "no"; then
|
||||
if test x"$glib_native_win32" = xyes; then
|
||||
with_libiconv=native
|
||||
else
|
||||
AC_ARG_WITH(libiconv,
|
||||
[AC_HELP_STRING([--with-libiconv=@<:@no/gnu/native@:>@],
|
||||
[use the libiconv library])],,
|
||||
[with_libiconv=maybe])
|
||||
|
||||
found_iconv=no
|
||||
case $with_libiconv in
|
||||
maybe)
|
||||
# Check in the C library first
|
||||
AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
|
||||
# Check if we have GNU libiconv
|
||||
if test $found_iconv = "no"; then
|
||||
AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
|
||||
fi
|
||||
# Check if we have a iconv in -liconv, possibly from vendor
|
||||
if test $found_iconv = "no"; then
|
||||
AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
|
||||
fi
|
||||
;;
|
||||
no)
|
||||
AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
|
||||
;;
|
||||
gnu|yes)
|
||||
AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
|
||||
fi
|
||||
# Check if we have a iconv in -liconv, possibly from vendor
|
||||
if test $found_iconv = "no"; then
|
||||
;;
|
||||
native)
|
||||
AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
|
||||
fi
|
||||
;;
|
||||
no)
|
||||
AC_CHECK_FUNC(iconv_open, [with_libiconv=no; found_iconv=yes])
|
||||
;;
|
||||
gnu|yes)
|
||||
AC_CHECK_LIB(iconv, libiconv_open, [with_libiconv=gnu; found_iconv=yes])
|
||||
;;
|
||||
native)
|
||||
AC_CHECK_LIB(iconv, iconv_open, [with_libiconv=native; found_iconv=yes])
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "x$found_iconv" = "xno" ; then
|
||||
AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
|
||||
if test "x$found_iconv" = "xno" ; then
|
||||
AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
|
||||
fi
|
||||
fi
|
||||
|
||||
jm_GLIBC21
|
||||
@ -465,11 +471,13 @@ dnl
|
||||
dnl Now we are done with gettext checks, figure out ICONV_LIBS
|
||||
dnl
|
||||
|
||||
if test x$with_libiconv != xno ; then
|
||||
case " $INTLLIBS " in
|
||||
*[[\ \ ]]-liconv[[\ \ ]]*) ;;
|
||||
*) ICONV_LIBS="-liconv" ;;
|
||||
esac
|
||||
if test x"$glib_native_win32" != xyes; then
|
||||
if test x$with_libiconv != xno ; then
|
||||
case " $INTLLIBS " in
|
||||
*[[\ \ ]]-liconv[[\ \ ]]*) ;;
|
||||
*) ICONV_LIBS="-liconv" ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(ICONV_LIBS)
|
||||
|
||||
|
@ -22,13 +22,16 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "glib.h"
|
||||
|
||||
#ifndef G_OS_WIN32
|
||||
#include <iconv.h>
|
||||
#endif
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "glib.h"
|
||||
#include "gprintfint.h"
|
||||
#include "gthreadprivate.h"
|
||||
#include "gunicode.h"
|
||||
@ -50,6 +53,10 @@
|
||||
|
||||
#include "galias.h"
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
#include "win_iconv.c"
|
||||
#endif
|
||||
|
||||
GQuark
|
||||
g_convert_error_quark (void)
|
||||
{
|
||||
|
1833
glib/win_iconv.c
Normal file
1833
glib/win_iconv.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user