140 lines
6.5 KiB
Plaintext
140 lines
6.5 KiB
Plaintext
-------------------------------------------------------------------------------
|
|
-- 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.
|