Installation on Woe32 (WinNT/2000/XP, Win95/98/ME):

- Requires MS Visual C/C++ 4.0 or 5.0 or 6.0 or 7.0.

- Cannot build in a separate directory.

- Build instructions:

   Make sure that the MSVC4.0 or MSVC5.0 or MSVC6.0 or MSVC7.0 utilities
   ("cl" etc.) are found in PATH. In a typical MSVC6.0 installation, this
   can be achieved by running
        C:\Program Files\Microsoft Visual Studio\VC98\bin\vcvars32.bat
   In a typical MSVC7.0 installation, it can be achieved by running
        C:\Program Files\Microsoft Visual Studio .NET\VC7\bin\vcvars32.bat

   Decide which compilation model you will use:
     MFLAGS=-ML (the default)  Single-threaded, statically linked - libc.lib
     MFLAGS=-MT                Multi-threaded, statically linked  - libcmt.lib
     MFLAGS=-MD                Multi-threaded, dynamically linked - msvcrt.lib

   For shared library (DLL):

        nmake -f Makefile.msvc DLL=1 MFLAGS=-MD

   For static library:

        nmake -f Makefile.msvc

   If you want to build both the shared and static library, you have to
   unpack the libiconv sources twice in different directories. Don't mix
   the two formats; you cannot use the libcharset.h and localcharset.h
   generated for the static library together with the shared library or
   vice versa.

- Installation:

   Manual minimal installation:

      Copy include/libcharset.h and include/localcharset.h to your header
      file repository.
      Copy lib/charset.lib to your library repository.
      If you built for shared library, also copy lib/charset.dll into one of
      the directories listed in your PATH, or into the directory containing
      the executable which shall make use of libcharset.

   Complete and automatic installation:

         nmake -f Makefile.msvc DLL=1 MFLAGS=-MD install prefix=InstallBaseDirectory
      or
         nmake -f Makefile.msvc install prefix=InstallBaseDirectory
