| ------------------------------------------------------------------------------- |
| -- 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 |