The sources are derived from Bruno Haible's libcharset library included
with libiconv:

 http//www.gnu.org/software/libiconv

The 'update.sh' script in this directory, when pointed at
the original sources updates the files in this directory
(and elsewhere in the GLib distribution) to the new version

The 'make-patch.sh' script in this directory regenerates
the patch files included in this directory from a copy
of the pristine sources and the files in this directory.

The license on the portions from libiconv portions is reproduced
below.

Owen Taylor
26 September 2001

Updated to libiconv-1.12.

Behdad Esfahbod
20 May 2008

====

/* Determine a canonical name for the current locale's character encoding.

   Copyright (C) 2000-2001 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify it
   under the terms of the GNU Library General Public License as published
   by the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with this program; if not, see <http://www.gnu.org/licenses/>.  */

/* Written by Bruno Haible <haible@clisp.cons.org>.  */
