All you need to know when hacking (modifying) GNU libiconv or when building
it off the Git repository.


Requirements
============

You will need reasonably recent versions of the build tools:

  * A C compiler. Such as GNU GCC.
    + Homepage:
      http://gcc.gnu.org/

  * GNU automake
    + Homepage:
      http://www.gnu.org/software/automake/

  * GNU autoconf
    + Homepage:
      http://www.gnu.org/software/autoconf/

  * GNU m4
    + Homepage:
      http://www.gnu.org/software/m4/

  * GNU gperf
    + Homepage:
      http://www.gnu.org/software/gperf/

  * GNU groff 1.17 or newer
    + Homepage:
      http://www.gnu.org/software/groff/

  * Perl
    + Homepage:
      http://www.perl.org/

  * Either an internet connection or a recent copy of GNU gnulib.
    + Homepage:
      http://www.gnu.org/software/gnulib/

And, of course, the packages listed in the DEPENDENCIES file.


Building off the Git repository
===============================

Access to the Git repository is described at
https://savannah.gnu.org/git/?group=libiconv .

After fetching the sources from the Git repository, peek at the comments in
autogen.sh, then run "./autogen.sh"; then you can proceed with "./configure"
as usual.


Adding new encodings
====================

For an indication which encodings are acceptable in the official version of
GNU libiconv, take a look at NOTES.

For an indication which files need to be modified when adding a new encoding,
look for example at the 2007-05-25 ChangeLog entry for RK1048.  The lib/*.h
file for an encoding is usually generated by one of the tools in the tools/
directory.  All you need to provide is the conversion table in the format of
the many *.TXT files.
