Installation on Microsoft Windows:

There are three ways to create binaries of this package for Microsoft Windows:
1) Native binaries, built using the mingw tool chain.
2) Native binaries, built using the MS Visual C/C++ tool chain.
3) Binaries for the Cygwin environment.

===============================================================================
1) Native binaries, built using the mingw tool chain.

   I recommend to use the Cygwin environment as the development environment (*)
   and mingw only as the target (runtime, deployment) environment.
   For this, you need to install
     * Cygwin (from https://cygwin.com/),
     * some packages available from the Cygwin package installer:
         make
     * the mingw cross-compilation tools and runtime package, available from
       the Cygwin package installer (setup-x86_64.exe):
       - for creating 32-bit binaries: packages
           mingw64-i686-gcc-core,
           mingw64-i686-headers,
           mingw64-i686-runtime
       - for creating 64-bit binaries: packages
           mingw64-x86_64-gcc-core,
           mingw64-x86_64-headers,
           mingw64-x86_64-runtime

   Building 32-bit binaries for mingw is achieved through the following
   preparation, configure, and build commands:

      PATH=/usr/local/mingw32/bin:$PATH
      export PATH
      ./configure --host=i686-w64-mingw32 --prefix=/usr/local/mingw32 \
            CC=i686-w64-mingw32-gcc \
            CPPFLAGS="-I/usr/local/mingw32/include -Wall" \
            LDFLAGS="-L/usr/local/mingw32/lib"
      make
      make check

   Building 64-bit binaries for mingw is achieved through the following
   preparation, configure, and build commands:

      PATH=/usr/local/mingw64/bin:$PATH
      export PATH
      ./configure --host=x86_64-w64-mingw32 --prefix=/usr/local/mingw64 \
            CC=x86_64-w64-mingw32-gcc \
            CPPFLAGS="-I/usr/local/mingw64/include -Wall" \
            LDFLAGS="-L/usr/local/mingw64/lib"
      make
      make check

   Installation:

      make install

   (*) Note: The MSYS2 environment as a development environment is *not*
       supported.  This environment contains an ignoble and ignominious hack:
       In a program invocation, the program *by default* receives different
       arguments than the ones that the caller has passed.  See
       <https://www.msys2.org/wiki/Porting/#filesystem-namespaces>.
       All program invocations in this environment are therefore unreliable.

===============================================================================
2) Native binaries, built using the MS Visual C/C++ tool chain.

   Note that binaries created with MSVC have a distribution constraint: They
   depend on a closed-source library ('msvcr90.dll' for MSVC 9.0,
   'vcruntime140.dll' for MSVC 14.0, and so on) which is not normally part of
   a Windows installation.
   You cannot distribute 'vcruntime*.dll' with the binaries - this would be a
   violation of the GPL and of the Microsoft EULA.
   You can distribute the binaries without including 'vcruntime*.dll'. Users
   who don't have this library on their system will require to pull some files
   (api-ms-win*.dll) through the Windows Update mechanism, see
   https://support.microsoft.com/en-us/kb/2999226 .

   This recipe requires MS Visual C/C++ 9.0 or newer.
   You don't need the Visual Studio IDE, just the C/C++ tool chain.
   As of 2016, you can install the MS Visual C/C++ 14.0 tool chain from
   http://landinghub.visualstudio.com/visual-cpp-build-tools (it's the file
   visualcppbuildtools_full.exe).

   This recipe requires also a Cygwin environment (with 'bash', the common POSIX
   commands, and 'make') as a build environment. Building with 'nmake' is not
   supported.
   For this, you need to install
     * Cygwin (from https://cygwin.com/),
     * some packages available from the Cygwin package installer:
         make
     * the mingw cross-compilation tool named 'windres', available from the
       Cygwin package installer (setup-x86_64.exe):
       - for creating 32-bit binaries: packages
           mingw64-i686-binutils,
           mingw64-i686-gcc-core
       - for creating 64-bit binaries: packages
           mingw64-x86_64-binutils,
           mingw64-x86_64-gcc-core

   You also need the scripts 'ar-lib' and 'compile' from
     https://git.savannah.gnu.org/gitweb/?p=automake.git;a=blob_plain;f=lib/ar-lib;hb=HEAD
     https://git.savannah.gnu.org/gitweb/?p=automake.git;a=blob_plain;f=lib/compile;hb=HEAD
   respectively.
   They may also be included in this package, in directory 'build-aux/'.
   Save them; the instructions below assume that you stored them in $HOME/msvc/.
   Make them executable:
      chmod a+x ar-lib compile

   Start a bash (from Cygwin).

   Make sure that the MSVC tools ("cl" etc.) are found in PATH and the
   environment variables INCLUDE and LIB are set appropriately.
   In a typical MSVC 9.0 installation, it can be achieved by running
     C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat
   In a typical MSVC 14.0 installation on Windows 10, it can be achieved
   - for creating 32-bit binaries: through the following bash commands:

      # Set environment variables for using MSVC 14,
      # for creating native 32-bit Windows executables.

      # Windows C library headers and libraries.
      WindowsCrtIncludeDir='C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt'
      WindowsCrtLibDir='C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\'
      INCLUDE="${WindowsCrtIncludeDir};$INCLUDE"
      LIB="${WindowsCrtLibDir}x86;$LIB"

      # Windows API headers and libraries.
      WindowsSdkIncludeDir='C:\Program Files (x86)\Windows Kits\8.1\Include\'
      WindowsSdkLibDir='C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\'
      INCLUDE="${WindowsSdkIncludeDir}um;${WindowsSdkIncludeDir}shared;$INCLUDE"
      LIB="${WindowsSdkLibDir}x86;$LIB"

      # Visual C++ tools, headers and libraries.
      VSINSTALLDIR='C:\Program Files (x86)\Microsoft Visual Studio 14.0'
      VCINSTALLDIR="${VSINSTALLDIR}"'\VC'
      PATH=`cygpath -u "${VCINSTALLDIR}"`/bin:"$PATH"
      INCLUDE="${VCINSTALLDIR}"'\include;'"${INCLUDE}"
      LIB="${VCINSTALLDIR}"'\lib;'"${LIB}"

      export INCLUDE LIB

   - for creating 64-bit binaries: through the following bash commands:

     # Set environment variables for using MSVC 14,
     # for creating native 64-bit Windows executables.

     # Windows C library headers and libraries.
     WindowsCrtIncludeDir='C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt'
     WindowsCrtLibDir='C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\'
     INCLUDE="${WindowsCrtIncludeDir};$INCLUDE"
     LIB="${WindowsCrtLibDir}x64;$LIB"

     # Windows API headers and libraries.
     WindowsSdkIncludeDir='C:\Program Files (x86)\Windows Kits\8.1\Include\'
     WindowsSdkLibDir='C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\'
     INCLUDE="${WindowsSdkIncludeDir}um;${WindowsSdkIncludeDir}shared;$INCLUDE"
     LIB="${WindowsSdkLibDir}x64;$LIB"

     # Visual C++ tools, headers and libraries.
     VSINSTALLDIR='C:\Program Files (x86)\Microsoft Visual Studio 14.0'
     VCINSTALLDIR="${VSINSTALLDIR}"'\VC'
     PATH=`cygpath -u "${VCINSTALLDIR}"`/bin/amd64:"$PATH"
     INCLUDE="${VCINSTALLDIR}"'\include;'"${INCLUDE}"
     LIB="${VCINSTALLDIR}"'\lib\amd64;'"${LIB}"

     export INCLUDE LIB

   Building 32-bit binaries with MSVC is achieved through the following
   preparation, configure, and build commands:

      PATH=/usr/local/msvc32/bin:$PATH
      export PATH

      win32_target=_WIN32_WINNT_WINXP   # for MSVC 9.0
      win32_target=_WIN32_WINNT_VISTA   # possibly for MSVC >= 10.0
      win32_target=_WIN32_WINNT_WIN7    # possibly for MSVC >= 10.0
      win32_target=_WIN32_WINNT_WIN8    # possibly for MSVC >= 10.0

      ./configure --host=i686-w64-mingw32 --prefix=/usr/local/msvc32 \
            CC="$HOME/msvc/compile cl -nologo" \
            CFLAGS="-MD" \
            CXX="$HOME/msvc/compile cl -nologo" \
            CXXFLAGS="-MD" \
            CPPFLAGS="-D_WIN32_WINNT=$win32_target -I/usr/local/msvc32/include" \
            LDFLAGS="-L/usr/local/msvc32/lib" \
            LD="link" \
            NM="dumpbin -symbols" \
            STRIP=":" \
            AR="$HOME/msvc/ar-lib lib" \
            RANLIB=":"
      make
      make check

   Building 64-bit binaries with MSVC is achieved through the following
   preparation, configure, and build commands:

      PATH=/usr/local/msvc64/bin:$PATH
      export PATH

      win32_target=_WIN32_WINNT_WINXP   # for MSVC 9.0
      win32_target=_WIN32_WINNT_VISTA   # possibly for MSVC >= 10.0
      win32_target=_WIN32_WINNT_WIN7    # possibly for MSVC >= 10.0
      win32_target=_WIN32_WINNT_WIN8    # possibly for MSVC >= 10.0

      ./configure --host=x86_64-w64-mingw32 --prefix=/usr/local/msvc64 \
            CC="$HOME/msvc/compile cl -nologo" \
            CFLAGS="-MD" \
            CXX="$HOME/msvc/compile cl -nologo" \
            CXXFLAGS="-MD" \
            CPPFLAGS="-D_WIN32_WINNT=$win32_target -I/usr/local/msvc64/include" \
            LDFLAGS="-L/usr/local/msvc64/lib" \
            LD="link" \
            NM="dumpbin -symbols" \
            STRIP=":" \
            AR="$HOME/msvc/ar-lib lib" \
            RANLIB=":"
      make
      make check

   Installation:

      make install

===============================================================================
3) Binaries for the Cygwin environment.

   The generic instructions in the INSTALL file apply. But here are more
   specific ones.

   You need to install
     * Cygwin (from https://cygwin.com/),
     * some packages available from the Cygwin package installer:
         make
     * the Cygwin [cross-]compilation tools package, available from
       the Cygwin package installer (setup-x86_64.exe):
       - for creating 32-bit binaries: packages
           cygwin32-gcc-core,
           cygwin32
       - for creating 64-bit binaries: packages
           gcc-core

   Building 32-bit binaries for Cygwin must be done in a directory *outside*
   the Cygwin /home and /usr hierarchies. It is achieved through the following
   preparation, configure, and build commands:

      PATH=/usr/local/cygwin32/bin:/usr/i686-pc-cygwin/sys-root/usr/bin:$PATH
      export PATH
      ./configure --host=i686-pc-cygwin --prefix=/usr/local/cygwin32 \
            CC=i686-pc-cygwin-gcc \
            CPPFLAGS="-I/usr/local/cygwin32/include -Wall" \
            LDFLAGS="-L/usr/local/cygwin32/lib"
      make
      make check

   Building 64-bit binaries for Cygwin is achieved through the following
   preparation, configure, and build commands:

      PATH=/usr/local/cygwin64/bin:$PATH
      export PATH
      ./configure --host=x86_64-pc-cygwin --prefix=/usr/local/cygwin64 \
            CC=x86_64-pc-cygwin-gcc \
            CPPFLAGS="-I/usr/local/cygwin64/include -Wall" \
            LDFLAGS="-L/usr/local/cygwin64/lib"
      make
      make check

   Installation:

      make install

===============================================================================
