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

   Step 1: Build and install the libiconv library and the iconv.exe program
   without internationalization. (This step is only needed the first time
   you install GNU libiconv.)

      For shared library (DLL):

         nmake -f Makefile.msvc NO_NLS=1 DLL=1 MFLAGS=-MD
      or
         nmake -f Makefile.msvc NO_NLS=1 DLL=1 MFLAGS=-MD check
                                                   [This runs the testsuite.]

      For static library:

         nmake -f Makefile.msvc NO_NLS=1 MFLAGS=-MD
      or
         nmake -f Makefile.msvc NO_NLS=1 MFLAGS=-MD check
                                                   [This runs the testsuite.]

      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 iconv.h generated for the static
      library together with the shared library or vice versa.

      Install it:

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

      Remove traces of this preliminary build:

         nmake -f Makefile.msvc NO_NLS=1 DLL=1 MFLAGS=-MD distclean
      or
         nmake -f Makefile.msvc NO_NLS=1 MFLAGS=-MD distclean

   Step 2: Build and install the GNU gettext package (version 0.12 or newer,
   libintl library and various programs) using the same MFLAGS. Then come
   back to here, to build GNU libiconv. (This step is only needed if you
   haven't GNU gettext already installed.)

   Step 3: Build and install the libiconv library and the iconv.exe program
   with internationalization.

      For shared library (DLL):

         nmake -f Makefile.msvc DLL=1 MFLAGS=-MD
      or
         nmake -f Makefile.msvc DLL=1 MFLAGS=-MD check
                                                    [This runs the testsuite.]

      For static library:

         nmake -f Makefile.msvc MFLAGS=-MD
      or
         nmake -f Makefile.msvc MFLAGS=-MD check    [This runs the testsuite.]

      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 iconv.h generated for the static
      library together with the shared library or vice versa.

      Install it:

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

- Installation:

   Manual minimal installation:

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

   Complete and automatic installation:

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

      By default, the compiled package is installed under c:\usr. You can
      specify a different directory by giving the installation base directory
      in a PREFIX=... option in the install step. (DON'T give the PREFIX
      already in the build step! This won't work.) You can also omit the
      PREFIX=... option, thus installing everything under c:\usr, and then
      move the installed package as a whole from c:\usr to a different
      location.
