+Sun Nov 12 18:34:32 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gconvert.[ch]: Create wrapper functions for iconv()
+ so that we can transparently use the native iconv,
+ libiconv, or (in the future) a mini-iconv included
+ with glib.
+
+ * glib-config-2.0.in glib-2.0.pc.in: Include @ICONV_LIBS@
+
+ * INSTALL: Added note about libiconv.
+
+ * configure.in: Add checks for libiconv from pango. If
+ EILSEQ is not defined in errno.h add define for it into
+ glibconfig.h so g_iconv can use it. (Note, recompiling
+ from a system without EILSEQ to a system with EILSEQ
+ will break binary compatibility)
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* gstrfuncs.c, gstrfuncs.h: Remove g_filename_{to,from}_utf8
+Sun Nov 12 18:34:32 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gconvert.[ch]: Create wrapper functions for iconv()
+ so that we can transparently use the native iconv,
+ libiconv, or (in the future) a mini-iconv included
+ with glib.
+
+ * glib-config-2.0.in glib-2.0.pc.in: Include @ICONV_LIBS@
+
+ * INSTALL: Added note about libiconv.
+
+ * configure.in: Add checks for libiconv from pango. If
+ EILSEQ is not defined in errno.h add define for it into
+ glibconfig.h so g_iconv can use it. (Note, recompiling
+ from a system without EILSEQ to a system with EILSEQ
+ will break binary compatibility)
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* gstrfuncs.c, gstrfuncs.h: Remove g_filename_{to,from}_utf8
+Sun Nov 12 18:34:32 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gconvert.[ch]: Create wrapper functions for iconv()
+ so that we can transparently use the native iconv,
+ libiconv, or (in the future) a mini-iconv included
+ with glib.
+
+ * glib-config-2.0.in glib-2.0.pc.in: Include @ICONV_LIBS@
+
+ * INSTALL: Added note about libiconv.
+
+ * configure.in: Add checks for libiconv from pango. If
+ EILSEQ is not defined in errno.h add define for it into
+ glibconfig.h so g_iconv can use it. (Note, recompiling
+ from a system without EILSEQ to a system with EILSEQ
+ will break binary compatibility)
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* gstrfuncs.c, gstrfuncs.h: Remove g_filename_{to,from}_utf8
+Sun Nov 12 18:34:32 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gconvert.[ch]: Create wrapper functions for iconv()
+ so that we can transparently use the native iconv,
+ libiconv, or (in the future) a mini-iconv included
+ with glib.
+
+ * glib-config-2.0.in glib-2.0.pc.in: Include @ICONV_LIBS@
+
+ * INSTALL: Added note about libiconv.
+
+ * configure.in: Add checks for libiconv from pango. If
+ EILSEQ is not defined in errno.h add define for it into
+ glibconfig.h so g_iconv can use it. (Note, recompiling
+ from a system without EILSEQ to a system with EILSEQ
+ will break binary compatibility)
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* gstrfuncs.c, gstrfuncs.h: Remove g_filename_{to,from}_utf8
+Sun Nov 12 18:34:32 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gconvert.[ch]: Create wrapper functions for iconv()
+ so that we can transparently use the native iconv,
+ libiconv, or (in the future) a mini-iconv included
+ with glib.
+
+ * glib-config-2.0.in glib-2.0.pc.in: Include @ICONV_LIBS@
+
+ * INSTALL: Added note about libiconv.
+
+ * configure.in: Add checks for libiconv from pango. If
+ EILSEQ is not defined in errno.h add define for it into
+ glibconfig.h so g_iconv can use it. (Note, recompiling
+ from a system without EILSEQ to a system with EILSEQ
+ will break binary compatibility)
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* gstrfuncs.c, gstrfuncs.h: Remove g_filename_{to,from}_utf8
+Sun Nov 12 18:34:32 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gconvert.[ch]: Create wrapper functions for iconv()
+ so that we can transparently use the native iconv,
+ libiconv, or (in the future) a mini-iconv included
+ with glib.
+
+ * glib-config-2.0.in glib-2.0.pc.in: Include @ICONV_LIBS@
+
+ * INSTALL: Added note about libiconv.
+
+ * configure.in: Add checks for libiconv from pango. If
+ EILSEQ is not defined in errno.h add define for it into
+ glibconfig.h so g_iconv can use it. (Note, recompiling
+ from a system without EILSEQ to a system with EILSEQ
+ will break binary compatibility)
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* gstrfuncs.c, gstrfuncs.h: Remove g_filename_{to,from}_utf8
+Sun Nov 12 18:34:32 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gconvert.[ch]: Create wrapper functions for iconv()
+ so that we can transparently use the native iconv,
+ libiconv, or (in the future) a mini-iconv included
+ with glib.
+
+ * glib-config-2.0.in glib-2.0.pc.in: Include @ICONV_LIBS@
+
+ * INSTALL: Added note about libiconv.
+
+ * configure.in: Add checks for libiconv from pango. If
+ EILSEQ is not defined in errno.h add define for it into
+ glibconfig.h so g_iconv can use it. (Note, recompiling
+ from a system without EILSEQ to a system with EILSEQ
+ will break binary compatibility)
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* gstrfuncs.c, gstrfuncs.h: Remove g_filename_{to,from}_utf8
+Sun Nov 12 18:34:32 2000 Owen Taylor <otaylor@redhat.com>
+
+ * gconvert.[ch]: Create wrapper functions for iconv()
+ so that we can transparently use the native iconv,
+ libiconv, or (in the future) a mini-iconv included
+ with glib.
+
+ * glib-config-2.0.in glib-2.0.pc.in: Include @ICONV_LIBS@
+
+ * INSTALL: Added note about libiconv.
+
+ * configure.in: Add checks for libiconv from pango. If
+ EILSEQ is not defined in errno.h add define for it into
+ glibconfig.h so g_iconv can use it. (Note, recompiling
+ from a system without EILSEQ to a system with EILSEQ
+ will break binary compatibility)
+
2000-11-12 Robert Brady <robert@suse.co.uk>
* gstrfuncs.c, gstrfuncs.h: Remove g_filename_{to,from}_utf8
[ Become root if necessary ]
% make install # install GLIB
+Requirements
+============
+
+In order to implement conversions between character sets,
+GLib requires an implementation of the standard iconv() routine.
+Most modern systems will have a suitable implementation, however
+many older systems lack an iconv() implementation. On such systems,
+you must install the libiconv library. This can be found at:
+
+ http://clisp.cons.org/~haible/packages-libiconv.html
+
+If your system has an iconv implementation but you want to use
+libiconv instead, you can pass the --with-libiconv option to
+configure. This forces libiconv to be used.
+
+Note that if you have libiconv installed in your default include
+search path (for instance, in /usr/local/), but don't enable
+it, you will get an error while compiling GTK+ because the
+iconv.h that libiconv installs hides the system iconv.
+
The Nitty-Gritty
================
CONFIG_FILES= CONFIG_HEADERS= CONFIG_OTHER=glibconfig.h ./config.status
echo timestamp > stamp-gc-h
+libglib_1_3_la_LIBADD = @ICONV_LIBS@
+
libglib_1_3_la_LDFLAGS = \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
-export-dynamic
If you're adding to this file, keep in mind:
The entries are in sort -df order: alphabetical, case insensitive,
ignoring punctuation (such as underscores). */
+
+#undef USE_LIBICONV
glibconfig-sysdefs.h,
=)
+dnl ***********************
+dnl *** Tests for iconv ***
+dnl ***********************
+
+AC_ARG_WITH(libiconv, [ --with-libiconv Use the libiconv library ],,with_libiconv=maybe)
+
+found_iconv=no
+
+if test "x$with_libiconv" != "xyes" ; then
+ #
+ # Check in the C library
+ #
+ AC_CHECK_FUNC(iconv_open, with_libiconv=no; found_iconv=yes)
+fi
+
+if test "x$with_libiconv" != "xno" ; then
+ #
+ # Check for libiconv
+ #
+ AC_CHECK_LIB(iconv, libiconv_open, with_libiconv=yes; found_iconv=yes)
+fi
+
+if test "x$found_iconv" = "xno" ; then
+ AC_MSG_ERROR([*** No iconv() implementation found in C library or libiconv])
+fi
+
+if test "x$with_libiconv" = "xyes" ; then
+ ICONV_LIBS="-liconv"
+ AC_DEFINE(USE_LIBICONV)
+fi
+AC_SUBST(ICONV_LIBS)
+
+dnl If the system doesn't define EILSEQ, we should define EILSEQ ourselves
+dnl since we need it for g_iconv()
+
+AC_MSG_CHECKING([for EILSEQ])
+AC_TRY_COMPILE([
+#include <errno.h>
+],
+[
+int error = EILSEQ;
+], have_eilseq=yes, have_eilseq=no);
+AC_MSG_RESULT($have_eilseq)
+
dnl **************************
dnl *** Checks for gtk-doc ***
dnl **************************
#endif /* !__cplusplus */
_______EOF
+ echo >>$outfile
+ if test x$g_have_eilseq = xno; then
+ cat >>$outfile <<_______EOF
+#ifndef EILSEQ
+/* On some systems, like SunOS and NetBSD, EILSEQ is not defined.
+ * The correspondence between this and the corresponding definition
+ * in libiconv is essential.
+ */
+# define EILSEQ ENOENT
+#endif
+_______EOF
+
+ fi
+
echo >>$outfile
if test x$g_mutex_has_default = xyes; then
cat >>$outfile <<_______EOF
;;
esac
+g_have_eilseq=$have_eilseq
+
case x$have_threads in
xnone) g_enable_threads_def="#undef";;
*) g_enable_threads_def="#define";;
#endif
#include "glib.h"
+#include "config.h"
#define _(s) (s)
static GQuark quark;
if (!quark)
quark = g_quark_from_static_string ("g_convert_error");
+
return quark;
}
-static iconv_t
+#if defined(USE_LIBICONV) && !defined (_LIBICONV_H)
+#error libiconv in use but included iconv.h not from libiconv
+#endif
+#if !defined(USE_LIBICONV) && defined (_LIBICONV_H)
+#error libiconv not in use but included iconv.h is from libiconv
+#endif
+
+GIConv
+g_iconv_open (const gchar *to_codeset,
+ const gchar *from_codeset)
+{
+ iconv_t cd = iconv_open (to_codeset, from_codeset);
+
+ return (GIConv)cd;
+}
+
+size_t
+g_iconv (GIConv converter,
+ gchar **inbuf,
+ size_t *inbytes_left,
+ gchar **outbuf,
+ size_t *outbytes_left)
+{
+ iconv_t cd = (iconv_t)converter;
+
+ return iconv (cd, inbuf, inbytes_left, outbuf, outbytes_left);
+}
+
+gint
+g_iconv_close (GIConv converter)
+{
+ iconv_t cd = (iconv_t)converter;
+
+ return iconv_close (cd);
+}
+
+GIConv
open_converter (const gchar *to_codeset,
- const gchar *from_codeset,
+ const gchar *from_codeset,
GError **error)
{
- iconv_t cd = iconv_open (to_codeset, from_codeset);
+ GIConv cd = g_iconv_open (to_codeset, from_codeset);
if (cd == (iconv_t) -1)
{
/* Something went wrong. */
if (errno == EINVAL)
- g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION,
- _("Conversion from character set `%s' to `%s' is not supported"),
- from_codeset, to_codeset);
+ g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION,
+ _("Conversion from character set `%s' to `%s' is not suppo\rted"),
+ from_codeset, to_codeset);
else
g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
- _("Could not open converter from `%s' to `%s': %s"),
- from_codeset, to_codeset, strerror (errno));
+ _("Could not open converter from `%s' to `%s': %s"),
+ from_codeset, to_codeset, strerror (errno));
}
return cd;
size_t inbytes_remaining;
size_t outbytes_remaining;
size_t err;
- iconv_t cd;
+ GIConv cd;
size_t outbuf_size;
gboolean have_error = FALSE;
cd = open_converter (to_codeset, from_codeset, error);
- if (cd == (iconv_t) -1)
+ if (cd == (GIConv) -1)
{
if (bytes_read)
*bytes_read = 0;
again:
- err = iconv (cd, &p, &inbytes_remaining, &outp, &outbytes_remaining);
+ err = g_iconv (cd, (char **)&p, &inbytes_remaining, &outp, &outbytes_remaining);
if (err == (size_t) -1)
{
*outp = '\0';
- iconv_close (cd);
+ g_iconv_close (cd);
if (bytes_read)
*bytes_read = p - str;
size_t save_inbytes = 0;
size_t outbytes_remaining;
size_t err;
- iconv_t cd;
+ GIConv cd;
size_t outbuf_size;
gboolean have_error = FALSE;
gboolean done = FALSE;
* to_codeset, and the string as UTF-8.
*/
cd = open_converter (to_codeset, "UTF-8", error);
- if (cd == (iconv_t) -1)
+ if (cd == (GIConv) -1)
{
if (bytes_read)
*bytes_read = 0;
while (!done && !have_error)
{
size_t inbytes_tmp = inbytes_remaining;
- err = iconv (cd, &p, &inbytes_tmp, &outp, &outbytes_remaining);
+ err = g_iconv (cd, (char **)&p, &inbytes_tmp, &outp, &outbytes_remaining);
inbytes_remaining = inbytes_tmp;
if (err == (size_t) -1)
*/
*outp = '\0';
- iconv_close (cd);
+ g_iconv_close (cd);
if (bytes_written)
*bytes_written = outp - str; /* Doesn't include '\0' */
#endif
}
+
#ifndef __G_CONVERT_H__
#define __G_CONVERT_H__
+#include <stddef.h> /* For size_t */
#include <gerror.h>
G_BEGIN_DECLS
#define G_CONVERT_ERROR g_convert_error_quark()
GQuark g_convert_error_quark();
+/* Thin wrappers around iconv
+ */
+typedef struct _GIConv *GIConv;
+
+GIConv g_iconv_open (const gchar *to_codeset,
+ const gchar *from_codeset);
+size_t g_iconv (GIConv converter,
+ gchar **inbuf,
+ size_t *inbytes_left,
+ gchar **outbuf,
+ size_t *outbytes_left);
+gint g_iconv_close (GIConv converter);
+
+
gchar* g_convert (const gchar *str,
gint len,
const gchar *to_codeset,
Name: GLib
Description: C Utility Library
Version: @VERSION@
-Libs: -L${libdir} -lglib-1.3
+Libs: -L${libdir} -lglib-1.3 @ICONV_LIBS@
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include
libsa=""
if test "$lib_glib" = "yes"; then
libsp="$libsp -lglib-1.3"
+ libsa="$libsa @ICONV_LIBS@"
fi
if test "$lib_gobject" = "yes"; then
libsp="-lgobject-1.3 $libsp"
CONFIG_FILES= CONFIG_HEADERS= CONFIG_OTHER=glibconfig.h ./config.status
echo timestamp > stamp-gc-h
+libglib_1_3_la_LIBADD = @ICONV_LIBS@
+
libglib_1_3_la_LDFLAGS = \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
-export-dynamic
#endif
#include "glib.h"
+#include "config.h"
#define _(s) (s)
static GQuark quark;
if (!quark)
quark = g_quark_from_static_string ("g_convert_error");
+
return quark;
}
-static iconv_t
+#if defined(USE_LIBICONV) && !defined (_LIBICONV_H)
+#error libiconv in use but included iconv.h not from libiconv
+#endif
+#if !defined(USE_LIBICONV) && defined (_LIBICONV_H)
+#error libiconv not in use but included iconv.h is from libiconv
+#endif
+
+GIConv
+g_iconv_open (const gchar *to_codeset,
+ const gchar *from_codeset)
+{
+ iconv_t cd = iconv_open (to_codeset, from_codeset);
+
+ return (GIConv)cd;
+}
+
+size_t
+g_iconv (GIConv converter,
+ gchar **inbuf,
+ size_t *inbytes_left,
+ gchar **outbuf,
+ size_t *outbytes_left)
+{
+ iconv_t cd = (iconv_t)converter;
+
+ return iconv (cd, inbuf, inbytes_left, outbuf, outbytes_left);
+}
+
+gint
+g_iconv_close (GIConv converter)
+{
+ iconv_t cd = (iconv_t)converter;
+
+ return iconv_close (cd);
+}
+
+GIConv
open_converter (const gchar *to_codeset,
- const gchar *from_codeset,
+ const gchar *from_codeset,
GError **error)
{
- iconv_t cd = iconv_open (to_codeset, from_codeset);
+ GIConv cd = g_iconv_open (to_codeset, from_codeset);
if (cd == (iconv_t) -1)
{
/* Something went wrong. */
if (errno == EINVAL)
- g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION,
- _("Conversion from character set `%s' to `%s' is not supported"),
- from_codeset, to_codeset);
+ g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_NO_CONVERSION,
+ _("Conversion from character set `%s' to `%s' is not suppo\rted"),
+ from_codeset, to_codeset);
else
g_set_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_FAILED,
- _("Could not open converter from `%s' to `%s': %s"),
- from_codeset, to_codeset, strerror (errno));
+ _("Could not open converter from `%s' to `%s': %s"),
+ from_codeset, to_codeset, strerror (errno));
}
return cd;
size_t inbytes_remaining;
size_t outbytes_remaining;
size_t err;
- iconv_t cd;
+ GIConv cd;
size_t outbuf_size;
gboolean have_error = FALSE;
cd = open_converter (to_codeset, from_codeset, error);
- if (cd == (iconv_t) -1)
+ if (cd == (GIConv) -1)
{
if (bytes_read)
*bytes_read = 0;
again:
- err = iconv (cd, &p, &inbytes_remaining, &outp, &outbytes_remaining);
+ err = g_iconv (cd, (char **)&p, &inbytes_remaining, &outp, &outbytes_remaining);
if (err == (size_t) -1)
{
*outp = '\0';
- iconv_close (cd);
+ g_iconv_close (cd);
if (bytes_read)
*bytes_read = p - str;
size_t save_inbytes = 0;
size_t outbytes_remaining;
size_t err;
- iconv_t cd;
+ GIConv cd;
size_t outbuf_size;
gboolean have_error = FALSE;
gboolean done = FALSE;
* to_codeset, and the string as UTF-8.
*/
cd = open_converter (to_codeset, "UTF-8", error);
- if (cd == (iconv_t) -1)
+ if (cd == (GIConv) -1)
{
if (bytes_read)
*bytes_read = 0;
while (!done && !have_error)
{
size_t inbytes_tmp = inbytes_remaining;
- err = iconv (cd, &p, &inbytes_tmp, &outp, &outbytes_remaining);
+ err = g_iconv (cd, (char **)&p, &inbytes_tmp, &outp, &outbytes_remaining);
inbytes_remaining = inbytes_tmp;
if (err == (size_t) -1)
*/
*outp = '\0';
- iconv_close (cd);
+ g_iconv_close (cd);
if (bytes_written)
*bytes_written = outp - str; /* Doesn't include '\0' */
#endif
}
+
#ifndef __G_CONVERT_H__
#define __G_CONVERT_H__
+#include <stddef.h> /* For size_t */
#include <gerror.h>
G_BEGIN_DECLS
#define G_CONVERT_ERROR g_convert_error_quark()
GQuark g_convert_error_quark();
+/* Thin wrappers around iconv
+ */
+typedef struct _GIConv *GIConv;
+
+GIConv g_iconv_open (const gchar *to_codeset,
+ const gchar *from_codeset);
+size_t g_iconv (GIConv converter,
+ gchar **inbuf,
+ size_t *inbytes_left,
+ gchar **outbuf,
+ size_t *outbytes_left);
+gint g_iconv_close (GIConv converter);
+
+
gchar* g_convert (const gchar *str,
gint len,
const gchar *to_codeset,