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

====

/* 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, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
   USA.  */

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