-------------------------------------------------------------------------------
-- Copyright 2020 Thomas E. Dickey                                           --
-- Copyright 2008-2011,2012 Free Software Foundation, Inc.                   --
--                                                                           --
-- Permission is hereby granted, free of charge, to any person obtaining a   --
-- copy of this software and associated documentation files (the             --
-- "Software"), to deal in the Software without restriction, including       --
-- without limitation the rights to use, copy, modify, merge, publish,       --
-- distribute, distribute with modifications, sublicense, and/or sell copies --
-- of the Software, and to permit persons to whom the Software is furnished  --
-- to do so, subject to the following conditions:                            --
--                                                                           --
-- The above copyright notice and this permission notice shall be included   --
-- in all copies or substantial portions of the Software.                    --
--                                                                           --
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS   --
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF                --
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN --
-- NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,       --
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR     --
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE --
-- USE OR OTHER DEALINGS IN THE SOFTWARE.                                    --
--                                                                           --
-- Except as contained in this notice, the name(s) of the above copyright    --
-- holders shall not be used in advertising or otherwise to promote the      --
-- sale, use or other dealings in this Software without prior written        --
-- authorization.                                                            --
-------------------------------------------------------------------------------
-- $Id: README.MinGW,v 1.10 2020/02/02 23:34:34 tom Exp $
-- Author: Juergen Pfeifer
-------------------------------------------------------------------------------

This is work in progress, but it's in an state where one can see it
works at least on the Windows Console.

You should install the MSYS package, so that you've a shell environment that
allows you to run the scripts, especially configure etc.  You can get that
from http://www.mingw.org

To build ncurses for native Windows, you need the MinGW toolchain.  The
original MinGW toolchain from the above site is only for 32-Bit Windows.  As
Windows Server - and also regular workstations - are moving to 64-Bit, it
seems to be reasonable to have a toolchain that supports both architectures.
I recommend to use the TDM gcc toolchain which you can find at
http://tdm-gcc.tdragon.net/download.  Go to the download section and select
the bundle installer for tdm64 (MinGW-w64).  This installs a multilib version
of the gcc toolchain that can compile for native 32- and 64-Bit Windows
versions.  It also comes with a working pthread implementation.

The latest config and build scripts we use for MinGW have only been tested
for the gcc-4.6.1 compiler toolchain (or better).

Using MinGW is a pragmatic decision, it's the easiest way to port this
heavily UNIX based sourcebase to native Windows. The goal is of course
to provide the includes, libraries and DLLs to be used with the more
common traditional development environments on Windows, mainly with
Microsoft Visual Studio.

The TERM environment variable must be set specially to active the Windows
console-driver.  The driver checks if TERM is set to "#win32con" (explicit
use) or if TERM is unset or empty (implicit).

Please also make sure that MSYS links to the correct directory containing
your MinGW toolchain. For TDM this is usually C:\MinGW64. In your Windows
CMD.EXE command shell go to the MSYS root directory (most probably
C:\MSYS or C:\MSYS\1.0) and verify, that there is a junction point mingw
that points to the MinGW toolchain directory. If not, delete the mingw
directory and use the mklink command (or the linkd.exe utility on older
Windows) to create the junction point.

This code requires WindowsNT 5.1 or better, which means on the client
Windows XP or better, on the server Windows Server 2003 or better.

I recommend using libtool to build ncurses on MinGW, because libtool
knows exactly how to build dll's on Windows for use with MinGW.

To build a modern but still small footprint ncurses that provides
hooks for interop, I recommend using these options:

	  --with-libtool
	  --disable-home-terminfo
	  --enable-database
	  --disable-termcap
	  --enable-sp-funcs
	  --enable-term-driver
	  --enable-interop

This is the configuration commandline as I'm using it at the moment (assuming
environment variable MINGW_ROOT to hold the root directory name of your MinGW
build):

./configure \
	--prefix=$MINGW_ROOT \
	--with-cxx \
	--without-ada \
	--enable-warnings \
	--enable-assertions \
	--disable-home-terminfo \
	--enable-database \
	--enable-sp-funcs \
	--enable-term-driver \
	--enable-interop \
	--disable-termcap \
	--with-progs \
	--with-libtool \
	--enable-pc-files \
	--mandir=$MINGW_ROOT/share/man

Please note that it is also necessary to set this environment variable:

export PATH_SEPARATOR=";"

in order to parse the terminfo paths correctly. Terminfo paths should
always be separated by a seeeemicolon,even when running under MSYS.

To support regular expressions properly, ncurses under MinGW should be
linked against the gnurx regex library, which must be built separately
under MinGW.  See

    ftp.gnome.org/pub/GNOME/binaries/win32/dependencies/libgnurx-src-2.5.zip

All the options above are - like the whole Windows support -
experimental.

A lot is still TODO, e.g.:

  - Wide Character support (display is workable, but input untested)
    The Win32Con driver should actually only use Unicode in the
    future.
  - Thread support (locking). If using TDM toolchain this is done by
    configuring pthreads.
  - A GUI console driver
  - Support for Terminals attached via a serial port (via terminfo)
  - Support for networked Terminal connections (via terminfo)
  - Workarounds for MinGW's filesystem access are necessary to make infocmp
    work (though tic works).

To support terminfo, we would need to have an ioctl() simulation for the
serial and networked terminals.
