-------------------------------------------------------------------------------
-- 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.14 2020/09/06 22:22:44 tom Exp $
-- Author: Juergen Pfeifer
-------------------------------------------------------------------------------

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

You should install the MSYS2 package, so that you have a shell environment that
allows you to run scripts, especially configure, etc.  You can get that
from
	https://www.msys2.org/

or the individual packages from

	https://sourceforge.net/projects/msys2/files/

You may also use a hosted MinGW cross-compile toolchain, e.g., on Ubuntu or
ArchLinux to build the libraries and tools.

To build ncurses for native Windows with support for the new Windows 10 Virtual
Terminal and PseudoConsole support, you should install at least version 8.0 of
the mingw-w64-x86_64-headers package as it appears to have support for the
required Windows SDK level.  Please note that some of the Linux distributions
are a bit behind with respect to the required MinGW header versions and you may
not be able to properly build the libraries for current Windows 10 using these
toolchains.  Although it is a bit slow, MSYS2 on Windows 10 64-Bit is the
authoritative build environment for the MinGW version of ncurses.

Using MinGW is a pragmatic decision, it is 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 especially to activate the Windows
console-driver.  The driver checks if TERM is set to "#win32con" (explicit
use) or if TERM is unset or empty (implicit).

Beginning with build 17763 (Fall 2018 update), Windows 10 supports ANSI escape
sequences (Virtual Terminal support). If ncurses detects this or a later
Windows 10 version, the interpretation of the implicit TERM setting (which
means: TERM is not set or empty) changes. In this case, TERM is to be assumed
to be "ms-terminal" and ncurses acts using the regular terminfo based driver,
thus acting like a regular Terminal we all know from UNIX like environments.

This code requires WindowsNT 6.0 or better, which means on the client
Windows Vista or better, on the server Windows Server 2008 or better.

If running on Windows 10 Build 17763 or later is detected, any program
spawning a subprocess running a ncurses program should use the new
PseudoConsole support, which provides what we know as pty from the UNIX
world also for Windows. Using the CreatePseudoConsole API
(see https://docs.microsoft.com/en-us/windows/console/createpseudoconsole)
in the calling process, it is guaranteed that the called ncurses program has
a console that is required by its implementation, even if the calling program
is NOT a console program, e.g., MSYS2's own mintty Terminal emulator.

In the current MSYS2/minGW setup, building MinGW shared libraries with
libtool for ncurses seems to be broken, so I recommend NOT to use libtool.

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

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

This is the configuration command line which I am using at the moment
(assuming environment variable MINGW_ROOT holds the root directory name of
your MinGW build):

./configure \
	--prefix=/mingw64 \
	--without-cxx \
	--without-ada \
	--enable-warnings \
	--enable-assertions \
	--enable-exp-win32 \
	--enable-ext-funcs \
	--disable-home-terminfo \
	--disable-echo \
	--disable-getcap \
	--disable-hard-tabs \
	--disable-leaks \
	--disable-macros \
	--disable-overwrite \
	--enable-opaque-curses \
	--enable-opaque-panel \
	--enable-opaque-menu \
	--enable-opaque-form \
	--enable-database \
	--enable-sp-funcs \
	--enable-term-driver \
	--enable-interop \
	--disable-termcap \
	--enable-database \
	--with-progs \
	--without-libtool \
	--enable-pc-files \
	--with-shared \
	--with-normal \
	--without-debug \
	--with-fallbacks=ms-terminal \
	--without-manpages

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 semicolon, even when running under MSYS2.

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

-- vile:txtmode
