This is a port of GNU Libiconv 1.7 to MSDOS/DJGPP.

1.:     DJGPP specific changes.
        =======================
        There are no DJGPP specific changes. This package should
        configure and compile out-of-the-box.
        Please read the documentation to become familiar with this
        product.


2.:     Installing the binary package.
        ==============================

2.1.:   Copy the binary distribution into the top DJGPP installation
        directory and unzip the binary distribution running *ONE* of
        the following commands:
          unzip32 licv16b.zip      or
          djtarx licv16b.zip       or
          pkunzip -d licv16b.zip



3.:     Building the binaries from sources.
        ===================================

3.1.:   To build the binaries you will need the following binary packages:
          djdev203.zip, bsh204b.zip, gcc2952b.zip,
          bnu210b.zip, mak3791b.zip, fil316b.zip,
          shl112b.zip, txt20b.zip, txi40b.zip,
          grep24b.zip and sed302b.zip


        All this packages can be found in the v2gnu directory of any
        Simtel.NET mirror.
        You will need bsh204b.zip and *NOT* a prior version or the build will fail.
        The same applies to djdev203.zip. You *MUST* use the updated versions of
        fil316b.zip (date: 2000-05-30) and shl112b.zip (date: 2000-08-11). This
        updated versions have been recompiled with djdev203.zip and know about
        the "/dev/env" functionality introduced with djdev203.zip. All the other
        packages are the ones I have used to build the binaries from this sources.
        Previuos and/or later versions of this packages may do the job as well but
        I have not tested this.

3.2.:   Create a temporary directory and copy the source package: licv16s.zip
        into the temporary directory. If you download the source distribution
        from one of the DJGPP archives, just unzip it preserving the directory
        structure, runnig ONE of the following commands:
          unzip32 licv16s.zip      or
          djtarx licv16s.zip       or
          pkunzip -d licv16s.zip

        Source distributions downloaded from one of the GNU FTP sites need
        some more work to unpack.  First, you MUST use the `djtar' program to
        unzip the package.  That's because some file names in the official
        distributions need to be changed to avoid problems on the various
        platforms supported by DJGPP.  `djtar' can rename files on the fly
        given a file with name mappings.  The distribution includes a file
        `djgpp/fnchange.lst' with the necessary mappings.  So you need first
        to retrieve that file, and then invoke `djtar' to unpack the
        distribution.  Here's how:

          djtar -x -p -o libiconv-1.7/djgpp/fnchange.lst libiconv-1.7.tar.gz > lst
          djtar -x -n lst libiconv-1.7.tar.gz

        (The name of the distribution archive and the top-level directory will
        be different for versions other than 1.7.)


3.3.:   The package is preconfigured for djdev203. To build the products you
        should run the following command:
          make

        After the compilation has finished, you can check the products
        running the command:
          make check

        To install the products run the command:
          make install

        This will install the products (iconv.exe iconv.h localcharset.h libconv.a
        libcharset.a iconv.1 iconv.3 iconv_open.3 iconv_close.3) into your DJGPP
        installation tree. As usual, prefix is defined as "/dev/env/DJDIR".
        If you prefer to install into same other directory run the command:
          make install prefix=z:/some/other/dir

        Of course, you should replace "z:/some/other/dir" by an appropriate path
        that will meet your requeriments.

3.4.:   If you need/want to reconfigure the package you will have to run the
        following commands:
          make distclean
          djgpp\config

        Please note that you *MUST* use the "distclean" option or the config.cache
        file will *NOT* be deleted. In this case you are *NOT* reconfiguring
        because the configuration informations is read from the cache file instead
        of being newly computed.
        To build the programs in a directory other than where the sources are,
        you must add the parameter that specifies the source directory,
        e.g:
          x:\src\gnu\libiconv.16\djgpp\config x:/src/gnu/libiconv.16

        Lets assume you want to build the binaries in a directory placed on a 
        different drive (z:\build in this case) from where the sources are,
        then you will run the following commands:
          z:
          md \build
          cd \build
          x:\src\gnu\libiconv.16\djgpp\config x:/src/gnu/libiconv.16

        You *MUST* use forward slashes to specify the source directory.
        After having configured the package run the folowing commands to create
        the binaries and docs and install them:
          make
          make check
          make install

        Send suggestions and bug reports concerning the DJGPP port to
        comp.os.msdos.djgpp or djgpp@delorie.com. Libiconv specific bugs
        must be reported to Bruno Haible <haible@clisp.cons.org>.


          Guerrero, Juan Manuel <st001906@hrz1.hrz.tu-darmstadt.de>
