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.

  Note that binaries created with MSVC 7.0 should not be distributed: They
  depend on a closed-source library 'msvcr70.dll' which is not normally part
  of a Woe32 installation. You cannot distribute 'msvcr70.dll' with the
  binaries - this would be a violation of the GPL and of the Microsoft EULA.
  You can distribute the binaries without including 'msvcr70.dll', but this
  will cause problems for users that don't have this library on their system.
  Therefore it is not recommended. This problem does not occur with MSVC 6.0
  and earlier.

- 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\Common7\Tools\vsvars32.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
