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

   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
      or
         nmake -f Makefile.msvc NO_NLS=1 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 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 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
      or
         nmake -f Makefile.msvc 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 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 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.
