-------------------------------------------------------------------------------
-- Copyright 2018-2020,2021 Thomas E. Dickey                                 --
-- Copyright 1998-2017,2018 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: INSTALL,v 1.235 2021/10/19 23:34:17 tom Exp $
---------------------------------------------------------------------
             How to install Ncurses/Terminfo on your system
---------------------------------------------------------------------

    ************************************************************
    * READ ALL OF THIS FILE BEFORE YOU TRY TO INSTALL NCURSES. *
    ************************************************************

You should be reading the file INSTALL in a directory called ncurses-d.d, where
d.d is the current version number.  There should be several subdirectories,
including `c++', `form', `man', `menu', 'misc', `ncurses', `panel', `progs',
and `test'.  See the README file for a roadmap to the package.

If you are a distribution integrator or packager, please read and act on the
section titled FOR SYSTEM INTEGRATORS below.

If you are converting from BSD curses and do not have root access, be sure
to read the BSD CONVERSION NOTES section below.

If you are trying to build applications using gpm with ncurses,
read the USING NCURSES WITH GPM section below.

If you are cross-compiling, see the note below on BUILDING WITH A CROSS-COMPILER.

If you want to build the Ada95 binding, go to the Ada95 directory and
follow the instructions there.  The Ada95 binding is not covered below.


REQUIREMENTS:
------------

You will need the following to build and install ncurses under UNIX:

	* ANSI C compiler  (gcc, for instance)
	* sh               (bash will do)
	* awk              (mawk or gawk will do)
	* sed
	* BSD or System V style install (a script is enclosed)

Ncurses has been also built in the OS/2 EMX environment.


INSTALLATION PROCEDURE:
----------------------

1.  First, decide whether you want ncurses to replace your existing library (in
    which case you'll need super-user privileges) or be installed in parallel
    with it.

    The --prefix option to configure changes the root directory for installing
    ncurses.  The default is normally in subdirectories of /usr/local, except
    for systems where ncurses is normally installed as a system library (see
    "IF YOU ARE A SYSTEM INTEGRATOR").  Use --prefix=/usr to replace your
    default curses distribution.

    The package gets installed beneath the --prefix directory as follows:

    In $(prefix)/bin:          tic, infocmp, captoinfo, tset,
				reset, clear, tput, toe, tabs
    In $(prefix)/lib:          libncurses*.* libcurses.a
    In $(prefix)/share/terminfo: compiled terminal descriptions
    In $(prefix)/include:      C header files
    Under $(prefix)/man:       the manual pages

    Note that the configure script attempts to locate previous installation of
    ncurses, and will set the default prefix according to where it finds the
    ncurses headers.

    Do not use commands such as

	make install prefix=XXX

    to change the prefix after configuration, since the prefix value is used
    for some absolute pathnames such as TERMINFO.  Instead do this

	make install DESTDIR=XXX

    See also the discussion of --with-install-prefix.

2.  Type `./configure' in the top-level directory of the distribution to
    configure ncurses for your operating system and create the Makefiles.
    Besides --prefix, various configuration options are available to customize
    the installation; use `./configure --help' to list the available options.

    If your operating system is not supported, read the PORTABILITY section in
    the file ncurses/README for information on how to create a configuration
    file for your system.

    The `configure' script generates makefile rules for one or more object
    models and their associated libraries:

	libncurses.a (normal)

	libcurses.a (normal, a link to libncurses.a)
		This gets left out if you configure with --disable-overwrite.

	libncurses.so (shared)

	libncurses_g.a (debug)

	libncurses_p.a (profile)

	libncurses.la (libtool)

    If you configure using the --enable-widec option, a "w" is appended to the
    library names (e.g., libncursesw.a), and the resulting libraries support
    wide-characters, e.g., via a UTF-8 locale.  The corresponding header files
    are compatible with the non-wide-character configuration; wide-character
    features are provided by ifdef's in the header files.  The wide-character
    library interfaces are not binary-compatible with the non-wide-character
    version.  Building and running the wide-character code relies on a fairly
    recent implementation of libiconv.  We have built this configuration on
    various systems using libiconv, sometimes requiring libutf8.

    If you configure using the --with-pthread option, a "t" is appended to
    the library names (e.g., libncursest.a, libncursestw.a).

    If you do not specify any models, the normal and debug libraries will be
    configured.  Typing `configure' with no arguments is equivalent to:

	./configure --with-normal --with-debug --enable-overwrite

    Typing

	./configure --with-shared

    makes the shared libraries the default, resulting in

	./configure --with-shared --with-normal --with-debug --enable-overwrite

    If you want only shared libraries, type

	./configure --with-shared --without-normal --without-debug

    Rules for generating shared libraries are highly dependent upon the choice
    of host system and compiler.  We've been testing shared libraries on
    several systems, but more work needs to be done to make shared libraries
    work on other systems.

    If you have libtool installed, you can type

	./configure --with-libtool

    to generate the appropriate static and/or shared libraries for your
    platform using libtool.

    You can make curses and terminfo fall back to an existing file of termcap
    definitions by configuring with --enable-termcap.  If you do this, the
    library will search /etc/termcap before the terminfo database, and will
    also interpret the contents of the TERM environment variable.  See the
    section BSD CONVERSION NOTES below.

3.  Type `make'.  Ignore any warnings, no error messages should be produced.
    This should compile the ncurses library, the terminfo compiler tic(1),
    captoinfo(1), infocmp(1), toe(1), clear(1) tset(1), reset(1), and tput(1)
    programs (see the manual pages for explanation of what they do), some test
    programs, and the panels, menus, and forms libraries.

4.  Run ncurses and several other test programs in the test directory to
    verify that ncurses functions correctly before doing an install that
    may overwrite system files.  Read the file test/README for details on
    the test programs.

    NOTE: You must have installed the terminfo database, or set the
    environment variable $TERMINFO to point to a SVr4-compatible terminfo
    database before running the test programs.  Not all vendors' terminfo
    databases are SVr4-compatible, but most seem to be.

    It is possible to configure ncurses to use other terminfo database formats.
    A few are provided as examples in the include-directory (see --with-caps).

    If you run the test programs WITHOUT installing terminfo, ncurses may
    read the termcap file and cache that in $HOME/.terminfo, which will
    thereafter be used instead of the terminfo database.  See the comments
    on "--enable-getcap-cache", to see why this is a Bad Thing.

    The ncurses program is designed specifically to test the ncurses library.
    You can use it to verify that the screen highlights work correctly, that
    cursor addressing and window scrolling works OK, etc.

5.  Once you've tested, you can type `make install' to install libraries,
    the programs, the terminfo database and the manual pages.  Alternately, you
    can type `make install' in each directory you want to install.  In the
    top-level directory, you can do a partial install using these commands:

	'make install.progs'    installs tic, infocmp, etc...
	'make install.includes' installs the headers.
	'make install.libs'     installs the libraries (and the headers).
	'make install.data'     installs the terminfo data. (Note: `tic' must
				be installed before the terminfo data can be
				compiled).
	'make install.man'      installs the manual pages.

  ############################################################################
  #     CAVEAT EMPTOR: `install.data' run as root will NUKE any existing     #
  #  terminfo database. If you have any custom or unusual entries SAVE them  #
  #  before you install ncurses.                                             #
  ############################################################################

    The terminfo(5) manual page must be preprocessed with tbl(1) before
    being formatted by nroff(1).  Modern man(1) implementations tend to do
    this by default, but you may want to look at your version's manual page
    to be sure.  You may also install the manual pages after preprocessing
    with tbl(1) by specifying the configure option --with-manpage-tbl.

    If the system already has a curses library that you need to keep using
    you'll need to distinguish between it and ncurses.  See the discussion of
    --disable-overwrite.  If ncurses is installed outside the standard
    directories (/usr/include and /usr/lib) then all your users will need to
    use the -I option to compile programs and -L to link them.

    If you have another curses installed in your system and you accidentally
    compile using its curses.h you'll end up with a large number of
    undefined symbols at link time.

    IF YOU DO NOT HAVE ROOT: Change directory to the `progs' subdirectory
    and run the `capconvert' script.  This script will deduce various things
    about your environment and use them to build you a private terminfo tree,
    so you can use ncurses applications.

    If more than one user at your site does this, the space for the duplicate
    trees is wasted.  Try to get your site administrators to install a system-
    wide terminfo tree instead.

    See the BSD CONVERSION NOTES section below for a few more details.

6.  The c++ directory has C++ classes that are built on top of ncurses and
    panels.  You must have c++ (and its libraries) installed before you can
    compile and run the demo.

    Use --without-cxx-binding to tell configure to not build the C++ bindings
    and demo.

    If you do not have C++, you must use the --without-cxx option to tell
    the configure script to not attempt to determine the type of 'bool'
    which may be supported by C++.  IF YOU USE THIS OPTION, BE ADVISED THAT
    YOU MAY NOT BE ABLE TO COMPILE (OR RUN) NCURSES APPLICATIONS WITH C++.


CONFIGURE OPTIONS:
-----------------

    The configure script provides a short list of its options when you type

	./configure --help

    The --help and several options are common to all configure scripts that are
    generated with autoconf.  Those are all listed before the line

	--enable and --with options recognized:

    The other options are specific to this package.  We list them in alphabetic
    order.

    --disable-assumed-color
	With ncurses 5.1, we introduced a new function, assume_default_colors()
	which allows applications to specify what the default foreground and
	background color are assumed to be.  Most color applications use
	full-screen color; but a few do not color the background.  While the
	assumed values can be overridden by invoking assume_default_colors(),
	you may find it useful to set the assumed values to the pre-5.1
	convention, using this configure option.

    --disable-big-core
	Assume machine has little memory.  The configure script attempts to
	determine if your machine has enough memory (about 6Mb) to compile the
	terminfo database without writing portions to disk.  Some allocators
	return deceptive results, so you may have to override the configure
	script.  Or you may be building tic for a smaller machine.

    --disable-big-strings
	Disable compile-time optimization of predefined tables which puts
	all of their strings into a very long string, to reduce relocation
	overhead.

    --disable-database
	Use only built-in data.  The ncurses libraries normally read terminfo
	and termcap data from disk.  You can configure ncurses to have a
	built-in database, aka "fallback" entries.  Embedded applications may
	have no need for an external database.  Some, but not all of the
	programs are useful in this configuration, e.g., tset and tput versus
	infocmp and tic.

    --disable-db-install
	Do not install the terminal database.  This is used to omit features
	for packages, as done with --without-progs.

    --disable-echo
	Use the option --disable-echo to make the build-log less verbose by
	suppressing the display of the compile and link commands.  This makes
	it easier to see the compiler warnings.  (You can always use "make -n"
	to see the options that are used).

    --disable-ext-funcs
	Disable function-extensions.  Configure ncurses without the functions
	that are not specified by XSI.  See ncurses/modules for the exact
	list of library modules that would be suppressed.

    --disable-gnat-projects
	Disable GNAT projects even if usable, for testing old makefile rules.

    --disable-hashmap
	Compile without hashmap scrolling-optimization code.  This algorithm is
	the default.

    --disable-home-terminfo
	The $HOME/.terminfo directory is normally added to ncurses' search
	list for reading/writing terminfo entries, since that directory is
	more likely writable than the system terminfo database.  Use this
	option to disable the feature altogether.

    --disable-largefile
	Disable compiler flags needed to use large-file interfaces.

    --disable-leaks
	For testing, compile-in code that frees memory that normally would not
	be freed, to simplify analysis of memory-leaks.

	Any implementation of curses must not free the memory associated with
	a screen, since (even after calling endwin()), it must be available
	for use in the next call to refresh().  There are also chunks of
	memory held for performance reasons.  That makes it hard to analyze
	curses applications for memory leaks.  To work around this, build a
	debugging version of the ncurses library which frees those chunks
	which it can, and provides the _nc_free_and_exit() function to free
	the remainder and then exit.  The ncurses utility and test programs
	use this feature, e.g., via the ExitProgram() macro.

	Because this lies outside of the library's intended usage, it is not
	normally considered part of the ABI.  If there were some (as yet
	unplanned) extension which frees memory in a manner that would let the
	library resume and reallocate memory, then that would not use a "_nc_"
	prefix.

    --disable-lib-suffixes
	Suppress the "w", "t" or "tw" suffixes which normally would be added
	to the library names for the --enable-widec and --with-pthread options.

    --disable-libtool-version
	when using --with-libtool, control how the major/minor version numbers
	are used for constructing the library name.

	The default uses the -version-number feature of libtool, which makes
	the library names compatible (though not identical) with the standard
	build using --with-shared.

	Use --disable-libtool-version to use the libtool -version-info feature.
	This corresponds to the setting used before patch 20100515.

	Starting with patch 20141115, using this option causes the configure
	script to apply the top-level VERSION file to the ABI version used
	for libtool.

    --disable-lp64
	The header files will ignore use of the _LP64 symbol to make chtype
	and mmask_t types 32 bits (they may be long on 64-bit hosts, for
	compatibility with older releases).

	NOTE: this is potentially an ABI change, depending on existing
	packages.  The default for this option is "disabled" for ncurses
	ABI 5, and "enabled" for ABI 6.

    --disable-macros
	For testing, use functions rather than macros.  The program will run
	more slowly, but it is simpler to debug.  This defines NCURSES_NOMACROS
	at build time.  See also the --enable-expanded option.

    --disable-overwrite
	If you are installing ncurses on a system which contains another
	development version of curses, or which could be confused by the loader
	for another version, we recommend that you leave out the link to
	-lcurses.  The ncurses library is always available as -lncurses.
	Disabling overwrite also causes the ncurses header files to be
	installed into a subdirectory, e.g., /usr/local/include/ncurses,
	rather than the include directory.  This makes it simpler to avoid
	compile-time conflicts with other versions of curses.h

	Putting the header files into a subdirectory assumes that applications
	will follow the (standard) practice of including the headers with
	reference to the subdirectory name.  For instance, the normal ncurses
	header would be included using

		#include <ncurses/curses.h>
		#include <ncurses/term.h>

	while the ncursesw headers would be found this way:

		#include <ncursesw/curses.h>
		#include <ncursesw/term.h>

	In either case (with or without the --disable-overwrite option),
	almost all applications are designed to include a related set of
	curses header files from the same directory.

	Manipulating the --includedir configure option to put header files
	directly in a subdirectory of the normal include-directory defeats
	this, and breaks builds of portable applications.  Likewise, putting
	some headers in /usr/include, and others in a subdirectory is a good
	way to break builds.

	When configured with --disable-overwrite, the installed header files'
	embedded #include's are adjusted to use the same style of includes
	noted above.  In particular, the unctrl.h header is included from
	curses.h, which means that a makefile which tells the compiler to
	include directly from the subdirectory will fail to compile correctly.
	Without some special effort, it will either fail to compile at all,
	or the compiler may find a different unctrl.h file.

	In addition to the curses library, a system may provide its own
	versions of the add-on libraries (form, menu, panel), which would
	not be compatible with ncurses.  These options allow you to rename
	ncurses' add-on libraries to avoid conflicts when linking:

		--with-form-libname=XXX
		--with-menu-libname=XXX
		--with-panel-libname=XXX

	Rather than renaming them abitrarily, a prefix or suffix is
	recommended.  An "n" prefix provides consistency with ncurses versus
	curses, i.e.,

		--with-form-libname=nform
		--with-menu-libname=nmenu
		--with-panel-libname=npanel

    --disable-pkg-ldflags
	Omit options in $LDFLAGS and $EXTRA_LDFLAGS from the pkg-config ".pc"
	and corresponding ncurses*-config script which normally are listed via
	the "--libs" option.  These options are normally used to facilitate
	linking to ncurses when it was configured to use the rpath feature.

	See also --enable-rpath and --disable-rpath-hack.

    --disable-relink
	If --enable-rpath is given, the generated makefiles normally will
	rebuild shared libraries during install.  Use this option to simply
	copy whatever the linker produced.

	Static libraries cannot simply be copied because tools use timestamps
	to determine if the library's symbol table is up to date.  If your
	install program supports the "-p" (preserve timestamp) option, that
	is used when --disable-relink is given, to avoid rebuilding the symbol
	table.

	Finally, some tools ignore the subsecond timestamps supported by some
	filesystems.  This option adds a 1-second sleep to help those tools
	avoid unnecessary relinking during the install process.

    --disable-root-access
	Compile with environment restriction, so most file-access is limited
	when running via a setuid/setgid application.

    --disable-root-environ
	Compile with environment restriction, so certain environment variables
	are not available when running as root, or via a setuid/setgid
	application.  These are (for example $TERMINFO) those that allow the
	search path for the terminfo or termcap entry to be customized.

    --disable-rpath-hack
	Normally the configure script helps link libraries found in unusual
	places by adding an rpath option to the link command.  If you are
	building packages, this feature may be redundant.  Use this option
	to suppress the feature.

    --disable-scroll-hints
	Compile without scroll-hints code.  This option is ignored when
	hashmap scrolling is configured, which is the default.

    --disable-stripping
	Do not strip installed executables.

    --disable-tic-depends
	When building shared libraries, normally the tic library is linked to
	depend upon the ncurses library (or equivalently, on the tinfo-library
	if the --with-termlib option was given).  The tic- and tinfo-library
	ABIs do not depend on the --enable-widec option.  Some packagers have
	used this to reduce the number of library files which are packaged by
	using only one copy of those libraries.  To make this work properly,
	the tic library must be built without an explicit dependency on the
	underlying library (ncurses vs ncursesw, tinfo vs tinfow).  Use this
	configure option to do that.
	For example
		configure --with-ticlib --with-shared --disable-tic-depends

    --disable-tparm-varargs
	Portable programs should call tparm() using the fixed-length parameter
	list documented in X/Open.  ncurses provides varargs support for this
	function.  Use --disable-tparm-varargs to disable this support.

    --enable-assertions
	For testing, compile-in assertion code.  This is used only for a few
	places where ncurses cannot easily recover by returning an error code.

    --enable-broken_linker
	A few platforms have what we consider a broken linker:  it cannot link
	objects from an archive solely by referring to data objects in those
	files, but requires a function reference.  This configure option
	changes several data references to functions to work around this
	problem.

	NOTE: With ncurses 5.1, this may not be necessary, since we are
	told that some linkers interpret uninitialized global data as a
	different type of reference which behaves as described above.  We have
	explicitly initialized all of the global data to work around the
	problem.

    --enable-bsdpad
	Recognize BSD-style prefix padding.  Some ancient BSD programs (such as
	nethack) call tputs("50") to implement delays.

    --enable-colorfgbg
	Compile with experimental $COLORFGBG code.  That environment variable
	is set by some terminal emulators as a hint to applications, by
	advertising the default foreground and background colors.  During
	initialization, ncurses sets color pair 0 to match this.

    --enable-const
	The curses interface as documented in XSI is rather old, in fact
	including features that precede ANSI C.  The prototypes generally do
	not make effective use of "const".  When using stricter compilers (or
	gcc with appropriate warnings), you may see warnings about the mismatch
	between const and non-const data.  We provide a configure option which
	changes the interfaces to use const - quieting these warnings and
	reflecting the actual use of the parameters more closely.  The ncurses
	library uses the symbol NCURSES_CONST for these instances of const,
	and if you have asked for compiler warnings, will add gcc's const-qual
	warning.  There will still be warnings due to subtle inconsistencies
	in the interface, but at a lower level.

	NOTE: configuring ncurses with this option may detract from the
	portability of your applications by encouraging you to use const in
	places where the XSI curses interface would not allow them.  Similar
	issues arise when porting to SVr4 curses, which uses const in even
	fewer places.

    --enable-expanded
	For testing, generate functions for certain macros to make them visible
	as such to the debugger.  See also the --disable-macros option.

    --enable-exp-win32
	When configuring for MinGW, use the experimental Windows 10 driver.

    --enable-ext-colors
	Extend the cchar_t structure to allow more than 16 colors to be
	encoded.  This applies only to the wide-character (--enable-widec)
	configuration.

	NOTE: using this option will make libraries which are not binary-
	compatible with libncursesw 5.4.  None of the interfaces change, but
	applications which have an array of cchar_t's must be recompiled.

    --enable-ext-mouse
	Modify the encoding of mouse state to make room for a 5th mouse button.
	That allows one to use ncurses with a wheel mouse with xterm or
	similar X terminal emulators.

	NOTE: using this option will make libraries which are not binary-
	compatible with libncursesw 5.4.  None of the interfaces change, but
	applications which have mouse mask mmask_t's must be recompiled.

    --enable-ext-putwin
	Modify the file-format written by putwin() to use printable text rather
	than binary files, allowing getwin() to read screen dumps written by
	differently-configured ncurses libraries.  The extended getwin() can
	still read binary screen dumps from the "same" configuration of
	ncurses.  This does not change the ABI (the binary interface seen by
	calling applications).

    --enable-fvisibility
    	Use the gcc "-fvisibility=hidden" option to make symbols which are not
	explicitly exported, "hidden".  Doing this may reduce the number of
	symbols exported in the C++ binding; it should have less effect on the
	C libraries when symbol-versioning is used.

    --enable-getcap
	Use the 4.4BSD getcap code if available, or a bundled version of it to
	fetch termcap entries.  Entries read in this way cannot use (make
	cross-references to) the terminfo tree, but it is faster than reading
	/etc/termcap.

	If configured for one of the *BSD systems, this automatically uses
	the hashed database system produced using cap_mkdb or similar tools.
	In that case, there is no advantage in using the --enable-getcap-cache
	option.

	See also the --with-hashed-db option.

    --enable-getcap-cache
	Cache translated termcaps under the directory $HOME/.terminfo

	NOTE: this sounds good - it makes ncurses run faster the second time.
	But look where the data comes from - an /etc/termcap containing lots of
	entries that are not up to date.  If you configure with this option and
	forget to install the terminfo database before running an ncurses
	application, you will end up with a hidden terminfo database that
	generally does not support color and will miss some function keys.

    --enable-hard-tabs
	Compile-in cursor-optimization code that uses hard-tabs.  We would make
	this a standard feature except for the concern that the terminfo entry
	may not be accurate, or that your stty settings have disabled the use
	of tabs.

    --enable-interop
	Compile-in experimental interop bindings.  These provide generic types
	for the form-library.

    --enable-mixed-case
	Controls whether the filesystem on which the terminfo database resides
	supports mixed-case filenames (normal for UNIX, but not on other
	systems).  If you do not specify this option, the configure script
	checks the current filesystem.

    --enable-no-padding
	Compile-in support for the $NCURSES_NO_PADDING environment variable,
	which allows you to suppress the effect of non-mandatory padding in
	terminfo entries.  This is the default, unless you have disabled the
	extended functions.

    --enable-opaque-curses
    --enable-opaque-form
    --enable-opaque-menu
    --enable-opaque-panel
	Define symbol in curses.h which controls whether some library
	structures are treated as "opaque".  The --enable-opaque-curses option
	is overridden by the --enable-reentrant option.

    --enable-pc-files
	If pkg-config is found (see --with-pkg-config), generate ".pc" files
	for each of the libraries, and install them in pkg-config's library
	directory.

    --enable-pthreads-eintr
	add logic in threaded configuration to ensure that a read(2) system
	call can be interrupted for SIGWINCH.

    --enable-reentrant
	Compile configuration which improves reentrant use of the library by
	reducing global and static variables.  This option is also set if
	--with-pthread is used.

	Enabling this option adds a "t" to the library names, except for the
	special case when --enable-weak-symbols is also used.

    --enable-rpath
	Use rpath option when generating shared libraries, and (with some
	restrictions) when linking the corresponding programs.  This originally
	(in 1997) applied mainly to systems using the GNU linker (read the
	manpage).

	More recently it is useful for systems that require special treatment
	shared libraries in "unusual" locations.  The "system" libraries reside
	in directories which are on the loader's default search-path.  While
	you may be able to use workarounds such as the $LD_LIBRARY_PATH
	environment variable, they do not work with setuid applications since
	the LD_LIBRARY_PATH variable would be unset in that situation.

	This option does not apply to --with-libtool, since libtool makes
	extra assumptions about rpath.

    --enable-safe-sprintf
	Compile with experimental safe-sprintf code.  You may consider using
	this if you are building ncurses for a system that has neither
	vsnprintf() or vsprintf().  It is slow, however, and is used only on
	very old systems which lack vsnprintf().

    --enable-signed-char
	The term.h header declares a Booleans[] array typed "char".  But it
	stores signed values there and "char" is not necessarily signed.
	Some packagers choose to alter the type of Booleans[] though this
	is not strictly compatible.  This option allows one to implement this
	alteration without patching the source code.

    --enable-sigwinch
	Compile support for ncurses' SIGWINCH handler.  If your application has
	its own SIGWINCH handler, ncurses will not use its own.  The ncurses
	handler causes wgetch() to return KEY_RESIZE when the screen-size
	changes.  This option is the default, unless you have disabled the
	extended functions.

    --enable-sp-funcs
	Compile-in support for extended functions which accept a SCREEN pointer,
	reducing the need for juggling the global SP value with set_term() and
	delscreen().

    --enable-stdnoreturn
	When enabled, check if the <stdnoreturn.h> header exists, and if found
	define GCC_NORETURN to _Noreturn rather than either the gcc-specific
	__attribute__((noreturn)) or an empty token.  Doing this may require
	calling programs which use GCC_NORETURN in their own function
	definitions to be modified, because _Noreturn is only accepted as
	the first token in a declaration.

    --enable-string-hacks
	Controls whether strlcat and strlcpy may be used.  The same issue
	applies to OpenBSD's warnings about snprintf, noting that this function
	is weakly standardized.

	Aside from stifling these warnings, there is no functional improvement
	in ncurses.

    --enable-symlinks
	If your system supports symbolic links, make tic use symbolic links
	rather than hard links to save diskspace when writing aliases in the
	terminfo database.

    --enable-tcap-names
	Compile-in support for user-definable terminal capabilities.  Use the
	-x option of tic and infocmp to treat unrecognized terminal
	capabilities as user-defined strings.  This option is the default,
	unless you have disabled the extended functions.

    --enable-term-driver
	Enable experimental terminal-driver.  This is currently used for the
	MinGW port, by providing a way to substitute the low-level terminfo
	library with different terminal drivers.

    --enable-termcap
	Compile in support for reading terminal descriptions from termcap if no
	match is found in the terminfo database.  See also the --enable-getcap
	and --enable-getcap-cache options.

	Termcap support requires run-time parsing rather than loading
	predigested data.  If you have specified --with-ticlib, then you
	cannot have termcap support since run-time parsing is done in the
	tic library, which is intentionally not part of normal linkage
	dependencies.

    --enable-warnings
	Turn on GCC compiler warnings.  There should be only a few.

    --enable-wattr-macros
	The 6.0 ABI adds support for extended colors and for extended mouse.
	The former is a noticeable problem when developers inadvertently
	compile using the ncurses6 header files and link with an ncurses5
	library, because the wattr* macros use a new field in the WINDOW
	structure.  These macros are used in several applications.

	Since ncurses provides an actual function for each of these macros,
	suppressing them from the curses.h header allows the ncurses5 libraries
	to be used in most applications.

	NOTE: The extended colors also are used in the cchar_t structure, but
	fewer applications use that.

	NOTE: This workaround does not help with mismatches in the ncurses
	mouse version.  The extended mouse feature uses one less fewer bit for
	each button, so that only the first button will work as expected with
	a mismatch between header and library.  Again, most applications will
	work, since most use only the first button.

    --enable-weak-symbols
	If the --with-pthread option is set, check if the compiler supports
	weak-symbols.  If it does, then name the thread-capable library without
	the "t" (libncurses rather than libncursest), and provide for
	dynamically loading the pthreads entrypoints at runtime.  This allows
	one to reduce the number of library files for ncurses.

    --enable-wgetch-events
	Compile with experimental wgetch-events code.  See ncurses/README.IZ

    --enable-widec
	Compile with wide-character code.  This makes a different version of
	the libraries (e.g., libncursesw.so), which stores characters as
	wide-characters,

	NOTE: applications compiled with this configuration are not compatible
	with those built for 8-bit characters.  You cannot simply make a
	symbolic link to equate libncurses.so with libncursesw.so

	NOTE: the Ada95 binding may be built against either version of the the
	ncurses library, but you must decide which:  the binding installs the
	same set of files for either version.  Currently (2002/6/22) it does
	not use the extended features from the wide-character code, so it is
	probably better to not install the binding for that configuration.

    --enable-xmc-glitch
	Compile-in support experimental xmc (magic cookie) code.

    --with-abi-version=NUM
	Override the ABI version, which is used in shared library filenames.
	Normally this is the same as the release version; some ports have
	special requirements for compatibility.

	This option does not affect linking with libtool, which uses the
	release major/minor numbers.

    --with-ada-compiler=CMD
	Specify the Ada95 compiler command (default "gnatmake")

    --with-ada-include=DIR
	Tell where to install the Ada includes (default:
	PREFIX/lib/ada/adainclude)

    --with-ada-libname=NAME
	Override the name of the Ada binding (default: "AdaCurses")

    --with-ada-objects=DIR
	Tell where to install the Ada objects (default:  PREFIX/lib/ada/adalib)

    --with-ada-sharedlib
	Build a shared library for Ada95 binding, if the compiler permits.

	NOTE: You must also set the --with-shared option on some platforms
	for a successful build.  You need not use this option when you set
	--with-shared, unless you want to use the Ada shared library.

    --with-bool=TYPE
	If --without-cxx is specified, override the type used for the "bool"
	declared in curses.h (normally the type is automatically chosen to
	correspond with that in <stdbool.h>, or defaults to platform-specific
	sizes).

    --with-build-cc=XXX
	If cross-compiling, specify a host C compiler, which is needed to
	compile a few utilities which generate source modules for ncurses.
	If you do not give this option, the configure script checks if the
	$BUILD_CC variable is set, and otherwise defaults to gcc or cc.

    --with-build-cflags=XXX
	If cross-compiling, specify the host C compiler-flags.  You might need
	to do this if the target compiler has unusual flags which confuse the
	host compiler.

	You can also set the environment variable $BUILD_CFLAGS rather than
	use this option.

    --with-build-cpp=XXX
	This option is provided by the same macro used for $BUILD_CC, etc.,
	but is not directly used by ncurses.

    --with-build-cppflags=XXX
	If cross-compiling, specify the host C preprocessor-flags.  You might
	need to do this if the target compiler has unusual flags which confuse
	the host compiler.

	You can also set the environment variable $BUILD_CPPFLAGS rather than
	use this option.

    --with-build-ldflags=XXX
	If cross-compiling, specify the host linker-flags.  You might need to
	do this if the target linker has unusual flags which confuse the host
	compiler.

	You can also set the environment variable $BUILD_LDFLAGS rather than
	use this option.

    --with-build-libs=XXX
	If cross-compiling, the host libraries.  You might need to do this if
	the target environment requires unusual libraries.

	You can also set the environment variable $BUILD_LIBS rather than
	use this option.

    --with-caps=XXX
	Specify an alternate terminfo capabilities file, which makes the
	configure script look for "include/Caps.XXX".  A few systems, e.g.,
	AIX 4.x use the same overall file-format as ncurses for terminfo
	data, but use different alignments within the tables to support
	legacy applications.  For those systems, you can configure ncurses
	to use a terminfo database which is compatible with the native
	applications.

    --with-ccharw-max=XXX
	Override the size of the wide-character array in cchar_t structures.
	Changing this will alter the binary interface.  This defaults to 5.

    --with-chtype=TYPE
	Override type of chtype, which stores the video attributes and (if
	--enable-widec is not given) a character.  Prior to ncurses 5.5, this
	was always unsigned long, but with ncurses 5.5, it may be unsigned.
	Use this option if you need to preserve compatibility with 64-bit
	executables, e.g., by setting "--with-chtype=long" (the configure
	script supplies "unsigned").

    --with-config-suffix=XXX
	Specify a suffix for the ncursesw6-config file, etc., used to work
	around conflicts with packages.

    --with-cxx-libname=NAME
	Override the basename of the ncurses++ library (default: "ncurses++")

    --with-cxx-shared
	When --with-shared is set, build libncurses++ as a shared library.
	This implicitly relies upon building with gcc/g++, since other
	compiler suites may have differences in the way shared libraries are
	built.  libtool by the way has similar limitations.

    --with-database=XXX
	Specify the terminfo source file to install.  Usually you will wish
	to install ncurses' default (misc/terminfo.src).  Certain systems
	have special requirements, e.g, OS/2 EMX has a customized terminfo
	source file.

    --with-dbmalloc
	For testing, compile and link with Conor Cahill's dbmalloc library.
	This also sets the --disable-leaks option.

    --with-debug
	Generate debug-libraries (default).  These are named by adding "_g"
	to the root, e.g., libncurses_g.a

    --with-default-terminfo-dir=XXX
	Specify the default terminfo database directory.  This is normally
	DATADIR/terminfo, e.g., /usr/share/terminfo.

    --with-dmalloc
	For testing, compile and link with Gray Watson's dmalloc library.
	This also sets the --disable-leaks option.

    --with-export-syms[=XXX]
	Limit exported symbols using libtool.  The configure script
	automatically chooses an appropriate ".sym" file, which lists the
	symbols which are part of the ABI.

    --with-extra-suffix[=XXX]
	Add the given suffix to header- and library-names to simplify
	installing incompatible ncurses libraries, e.g., those using a
	different ABI.  The renaming affects the name of the
	include-subdirectory if --disable-overwrite is given.

    --with-fallbacks=XXX
	Specify a list of fallback terminal descriptions which will be
	compiled into the ncurses library.  See CONFIGURING FALLBACK ENTRIES.

	See also "--with-tic-path" and "--with-infocmp-path".

    --with-form-libname=NAME
	Override the basename of the form library (default: "form")

    --with-gpm
	use Alessandro Rubini's GPM library to provide mouse support on the
	Linux console.  Prior to ncurses 5.5, this introduced a dependency on
	the GPM library.

	Currently ncurses uses the dlsym() function to bind to the library at
	runtime, so it is only necessary that the library be present when
	ncurses is built, to obtain the filename (or soname) used in the
	corresponding dlopen() call.  If you give a value for this option,
	e.g.,

		--with-gpm=$HOME/tmp/test-gpm.so

	that overrides the configure check for the soname.

	See also --without-dlsym

    --with-hashed-db[=XXX]
	Use a hashed database for storing terminfo data rather than storing
	each compiled entry in a separate binary file within a directory
	tree.

	In particular, this uses the Berkeley database 1.8.5 interface, as
	provided by that and its successors db 2, 3, and 4.  The actual
	interface is slightly different in the successor versions of the
	Berkeley database.  The database should have been configured using
	"--enable-compat185".

	If you use this option for configuring ncurses, tic will only be able
	to write entries in the hashed database.  infocmp can still read
	entries from a directory tree as well as reading entries from the
	hashed database.  To do this, infocmp determines whether the $TERMINFO
	variable points to a directory or a file, and reads the directory-tree
	or hashed database respectively.

	You cannot have a directory containing both hashed-database and
	filesystem-based terminfo entries.

	Use the parameter value to give the install-prefix used for the
	database, e.g.,
		--with-hashed-db=/usr/local/BigBase
	to find the corresponding include- and lib-directories under the
	given directory.  Alternatively, you can specify a directory leaf
	name, e.g.,
		--with-hashed-db=db4
	to make the configure script look for files in a subdirectory such as
		/usr/include/db4/db.h
		/usr/lib/db4/libdb.so

	See also the --enable-getcap option.

    --with-infocmp-path[=XXX]
	Use this option to override the automatic detection of tic in your
	$PATH when building fallbacks (see "--with-fallbacks").

    --with-install-prefix=XXX
	Allows you to specify an alternate location for installing ncurses
	after building it.  The value you specify is prepended to the "real"
	install location.  This simplifies making binary packages.  The
	makefile variable DESTDIR is set by this option.  It is also possible
	to use
		make install DESTDIR=XXX
	since the makefiles pass that variable to subordinate makes.

	NOTE: a few systems build shared libraries with fixed pathnames; this
	option probably will not work for those configurations.

    --with-lib-prefix=XXX
	OS/2 EMX used a different naming convention from most Unix-like
	platforms.  It required that the "lib" part of a library name was
	omitted.  Newer EMX as part of eComStation does not follow that
	convention.  Use this option to override the configure script's
	assumptions about the library-prefix.  If this option is omitted, it
	uses the original OS/2 EMX convention for that platform.  Use
	"--with-lib-prefix=lib" for the newer EMX in eComStation.  Use
	"--without-lib-prefix" to suppress it for other odd platforms.

    --with-libtool[=XXX]
	Generate libraries with libtool.  If this option is selected, then it
	overrides all other library model specifications.  Note that libtool
	must already be installed, uses makefile rules dependent on GNU make,
	and does not promise to follow the version numbering convention of
	other shared libraries on your system.  However, if the --with-shared
	option does not succeed, you may get better results with this option.

	If a parameter value is given, it must be the full pathname of the
	particular version of libtool, e.g.,
		/usr/bin/libtool-1.2.3

	It is possible to rebuild the configure script to use the automake
	macros for libtool, e.g., AC_PROG_LIBTOOL.  See the comments in
	aclocal.m4 for CF_PROG_LIBTOOL, and ensure that you build configure
	using the appropriate patch for autoconf from
		https://invisible-island.net/autoconf/

    --with-libtool-opts=XXX
	Allow user to pass additional libtool options into the library creation
	and link steps.  The main use for this is to do something like
		./configure --with-libtool-opts=-static
	to get the same behavior as automake-flavored
		./configure --enable-static

    --with-manpage-aliases
	Tell the configure script you wish to create entries in the
	man-directory for aliases to manpages which list them, e.g., the
	functions in the panel manpage.  This is the default.  You can disable
	it if your man program does this.  You can also disable
	--with-manpage-symlinks to install files containing a ".so" command
	rather than symbolic links.

    --with-manpage-format=XXX
	Tell the configure script how you would like to install man-pages.  The
	option value must be one of these:  gzip, compress, BSDI, normal,
	formatted.  If you do not give this option, the configure script
	attempts to determine which is the case.

    --with-manpage-renames=XXX
	Tell the configure script that you wish to rename the manpages while
	installing.  Currently the only distribution which does this is Debian.
	The option value specifies the name of a file that lists the renamed
	files, e.g., $srcdir/man/man_db.renames

    --with-manpage-symlinks
	Tell the configure script that you wish to make symbolic links in the
	man-directory for aliases to the man-pages.  This is the default, but
	can be disabled for systems that provide this automatically.  Doing
	this on systems that do not support symbolic links will result in
	copying the man-page for each alias.

    --with-manpage-tbl
	Tell the configure script that you wish to preprocess the manpages
	by running them through tbl to generate tables understandable by
	nroff.

    --with-menu-libname=NAME
	Override the basename of the menu library (default: "menu")

    --with-mmask-t=TYPE
	Override type of mmask_t, which stores the mouse mask.  Prior to
	ncurses 5.5, this was always unsigned long, but with ncurses 5.5, it
	may be unsigned.  Use this option if you need to preserve compatibility
	with 64-bit executables.

    --with-normal
	Generate normal (i.e., static) libraries (default).

	Note:  on Linux, the configure script will attempt to use the GPM
	library via the dlsym() function call.  Use --without-dlsym to disable
	this feature, or --without-gpm, depending on whether you wish to use
	GPM.

    --with-ospeed=TYPE
	Override type of ospeed variable, which is part of the termcap
	compatibility interface.  In termcap, this is a 'short', which works
	for a wide range of baudrates because ospeed is not the actual speed
	but the encoded value, e.g., B9600 would be a small number such as 13.
	However the encoding scheme originally allowed for values "only" up to
	38400bd.  A newer set of definitions past 38400bd is not encoded as
	compactly, and is not guaranteed to fit into a short (see the function
	cfgetospeed(), which returns a speed_t for this reason).  In practice,
	applications that required knowledge of the ospeed variable, i.e.,
	those using termcap, do not use the higher speeds.  Your application
	(or system, in general) may or may not.

    --with-panel-libname=NAME
	Override the basename of the panel library (default: "panel")

    --with-pc-suffix=SUFFIX
	If ".pc" files are installed, optionally add a suffix to the files
	and corresponding package names to separate unusual configurations.
	If no option value is given (or if it is "none"), no suffix is added.

    --with-pcre2
	Add PCRE2 (Perl-compatible regular expressions v2) to the build if it
	is available and the user requests it.  Assume the application will
	otherwise use the POSIX interface.

	This is useful for MinGW builds because the usual POSIX interface is
	not supplied by the development environment, while ncurses' form
	library uses a regular expression feature for one of the field types.

    --with-pkg-config=[DIR]
	Check for pkg-config, optionally specifying its path.

    --with-pkg-config-libdir=[DIR]
	If pkg-config was found, override the automatic check for its library
	path.  The configure script allows only a single directory, because
	that is used as the directory in which to install ".pc" files.

	The automatic check for the library path selects the first directory
	which currently exists.

    --with-profile
	Generate profile-libraries These are named by adding "_p" to the root,
	e.g., libncurses_p.a

    --with-pthread
	Link with POSIX threads, set --enable-reentrant.  The use_window() and
	use_screen() functions will use mutex's, allowing rudimentary support
	for multithreaded applications.

    --with-rcs-ids
	Compile-in RCS identifiers.  Most of the C files have an identifier.

    --with-rel-version=NUM
	Override the release version, which may be used in shared library
	filenames.  This consists of a major and minor version number separated
	by ".".  Normally the major version number is the same as the ABI
	version; some ports have special requirements for compatibility.

    --with-shared
	Generate shared-libraries.  The names given depend on the system for
	which you are building, typically using a ".so" suffix, along with
	symbolic links that refer to the release version.

	NOTE: Unless you override the configure script by setting the $CFLAGS
	environment variable, these will not be built with the -g debugging
	option.

	NOTE: For some configurations, e.g., installing a new version of
	ncurses shared libraries on a machine which already has ncurses
	shared libraries, you may encounter problems with the linker.
	For example, it may prevent you from running  the build tree's
	copy of tic (for installing the terminfo database) because it
	loads the system's copy of the ncurses shared libraries.

	In that case, using the misc/shlib script may be helpful, since it
	sets $LD_LIBRARY_PATH to point to the build tree, e.g.,

		./misc/shlib make install

	Alternatively, for most platforms, the linker accepts a list of
	directories which will be searched for libraries at run-time.  The
	configure script allows you to modify this list using the
	RPATH_LIST environment variable.  It is a colon-separated list of
	directories (default:  the "libdir" set via the configure script).
	If you set that to put "../lib" first in the list, the linker will
	look first at the build-directory, and avoid conflict with libraries
	already installed.  One drawback to this approach is that libraries
	can be accidentally searched in any "../lib" directory.

	NOTE: If you use the --with-ada-sharedlib option, you should also
	set this option, to ensure that C-language modules needed for the
	Ada binding use appropriate compiler options.

    --with-shlib-version=XXX
	Specify whether to use the release or ABI version for shared libraries.
	This is normally chosen automatically based on the type of system
	which you are building on.  We use it for testing the configure script.

    --with-sysmouse
	use FreeBSD sysmouse interface provide mouse support on the console.

    --with-system-type=XXX
	For testing, override the derived host system-type which is used to
	decide things such as the linker commands used to build shared
	libraries.  This is normally chosen automatically based on the type of
	system which you are building on.  We use it for testing the configure
	script.

    --with-terminfo-dirs=XXX
	Specify a search-list of terminfo directories which will be compiled
	into the ncurses library (default: DATADIR/terminfo)

	This is a colon-separated list, like the TERMINFO_DIRS environment
	variable.

    --with-termlib[=XXX]
	When building the ncurses library, organize this as two parts:  the
	curses library (libncurses) and the low-level terminfo library
	(libtinfo).  This is done to accommodate applications that use only
	the latter.  The terminfo library is about half the size of the total.

	If an option value is given, that overrides the name of the terminfo
	library.  For instance, if the wide-character version is built, the
	terminfo library would be named libtinfow.  But the libtinfow interface
	is upward compatible from libtinfo, so it would be possible to overlay
	libtinfo.so with a "wide" version of libtinfow.so by renaming it with
	this option.

    --with-termpath=XXX
	Specify a search-list of termcap files which will be compiled into the
	ncurses library (default:  /etc/termcap:/usr/share/misc/termcap)

    --with-tic-path[=XXX]
	Use this option to override the automatic detection of tic in your
	$PATH when building fallbacks (see "--with-fallbacks").

    --with-ticlib[=XXX]
	When building the ncurses library, build a separate library for
	the modules that are used only by the utility programs.  Normally
	those would be bundled with the termlib or ncurses libraries.

	If an option value is given, that overrides the name of the tic
	library.  As in termlib, there is no ABI difference between the
	"wide" libticw.so and libtic.so

	NOTE: Overriding the name of the tic library may be useful if you are
	also using the --with-termlib option to rename libtinfo.  If you are
	not doing that, renaming the tic library can result in conflicting
	library dependencies for tic and other programs built with the tic
	library.

    --with-tparm-arg[=XXX]
	Override the type used for tparm() arguments, which normally is a
	"long".  However the function must assume that its arguments can hold a
	pointer to char's which is not always workable for 64-bit platforms.  A
	better choice would be intptr_t, which was not available at the time
	tparm's interface was defined.

	If the option is not given, this defaults to "long".

    --with-trace
	Configure the trace() function as part of the all models of the ncurses
	library.  Normally it is part of the debug (libncurses_g) library only.

    --with-valgrind
	For testing, compile with debug option.
	This also sets the --disable-leaks option.

    --with-versioned-syms[=XXX]
	The Solaris, GNU and reportedly some other linkers (ld) accept a
	"--version-script" option which tells the linker to annotate the
	resulting objects with version identifiers.

	Use "objdump -T" on a library to see the annotations.

	The configure script attempts to automatically apply a suitable ".map"
	file to provide this information for Linux.  Solaris mapfiles differ:

	a) comments are not accepted
	b) wildcards are not accepted, except for a special case of "_*".
	c) each symbol listed in the map file must exist in the library

	The Solaris limitations conflict with the development goal of providing
	a small set of ".map" files as examples, which cover the most common
	configurations.  Because that coverage is done by merging together
	several builds, some symbols will be listed in the the ".map" files
	that do not happen to be present in one configuration or another.

	The sample ".map" (and ".sym") files are generated using a set of
	scripts which build several configurations for each release version,
	checking to see which of the "_nc_" symbols can be made local.  In
	addition to the ncurses libraries and programs, the symbols used
	by the "tack" program before version 1.08 are made global.

	These sample ".map" files will not cover all possible combinations.
	In some cases, e.g., when using the --with-weak-symbols option, you
	may prefer to use a different ".map" file by setting this option's
	value.

    --with-wrap-prefix=XXX
	When using the --enable-reentrant option, ncurses redefines variables
	that would be global in curses, e.g., LINES, as a macro that calls a
	"wrapping" function which fetches the data from the current SCREEN
	structure.  Normally that function is named by prepending "_nc_" to the
	variable's name.  The function is technically private (since portable
	applications would not refer directly to it).  But according to one
	line of reasoning, it is not the same type of "private" as functions
	which applications should not call even via a macro.  This configure
	option lets you choose the prefix for these wrapped variables.

    --with-x11-rgb=FILE
	Provide a pathname for the X11 rgb file, used by the picsmap program.
	This overrides a configure check which usually works, but is needed
	due to the lack of standardization for X11's files.

    --with-xterm-kbs=XXX
	Configure xterm's terminfo entries to use either BS (^H, i.e., ASCII
	backspace) or DEL (^?, or 127).  XXX can be BS (or bs, 8) or DEL
	(or del, 127).

	During installation, the makefile and scripts modifies the "xterm+kbs"
	terminfo entry to use this setting.

    --without-ada
	Suppress the configure script's check for Ada95, do not build the
	Ada95 binding and related demo.

    --without-curses-h
	Don't install the ncurses header with the name "curses.h".  Rather,
	install as "ncurses.h" and modify the installed headers and manpages
	accordingly.

	Likewise, do not install an alias "curses" for the ncurses manpage.

    --without-cxx
	XSI curses declares "bool" as part of the interface.  C++ also declares
	"bool".  Neither specifies the size and type of booleans, but both
	insist on the same name.  We chose to accommodate this by making the
	configure script check for the size and type (e.g., unsigned or signed)
	that your C++ compiler uses for booleans.  If you do not wish to use
	ncurses with C++, use this option to tell the configure script to not
	adjust ncurses bool to match C++.

    --without-cxx-binding
	Suppress the configure script's check for C++, do not build the
	C++ binding and related demo.

    --without-develop
	Disable development options.  This does not include those that change
	the interface, such as --enable-widec.

    --without-dlsym
	Do not use dlsym() to load GPM dynamically.

    --without-manpages
	Tell the configure script to suppress the install of ncurses' manpages.

    --without-progs
	Tell the configure script to suppress the build of ncurses' application
	programs (e.g., tic).  The test applications will still be built if you
	type "make", though not if you simply do "make install".

    --without-tack
	Suppress build/install with tack program, if it happens to be
	in the same build-tree (tack was moved out of the ncurses source-tree
	in 20070203).

    --without-tests
	Tell the configure script to suppress the build of ncurses' test
	programs.

    --without-xterm-new
	Tell the configure script to use "xterm-old" for the entry used in
	the terminfo database.  This will work with variations such as
	X11R5 and X11R6 xterm.


COMPATIBILITY WITH OLDER RELEASES:
---------------------------------

    Because ncurses implements X/Open Curses, its interface is fairly stable.
    That does not mean the interface does not change.  Changes are made to the
    documented interfaces when we find differences between ncurses and X/Open
    or implementations which largely correspond to X/Open (such as Solaris).
    We add extensions to those interfaces to solve problems not addressed by
    the original curses design, but those must not conflict with the X/Open
    documentation.

    Here are some of the major interface changes, and related problems which
    you may encounter when building a system with different versions of
    ncurses:

    6.3 (Oct 21, 2021)
	Interface changes:

	+ the definition of TERMTYPE2 is now internal, not visible in the ABI,
	  like the enclosing TERMINAL which was previously made opaque.  This
	  was done to provide SCREEN-specific "static" variables in terminfo.

	Added extensions:

	+ add sp-funcs for erasewchar, killwchar.

	Added internal functions (other than "_sp" variants):

	+ _nc_safe_fopen and _nc_safe_open3 limit privileges if possible when
	  opening a file; otherwise disallow access for updating files.

	+ _nc_tiparm is a variant of tiparm which is used when all of the
	  parameters are known to be numbers rather than possibly strings.

	+ _nc_reset_tparm improves tic's checks by resetting the terminfo
	  "static variables" before calling functions which may update them.

	Removed internal functions:

	+ none

	Modified internal functions:

	+ _nc_trace_ttymode passes pointer to const data

	+ _nc_tparm_analyze passes pointer to int*, not int[]

    6.2 (Feb 12, 2020)
	Interface changes:

	+ the terminal database must be compiled with ncurses 6.2 tic;
	  older versions of tic/infocmp will not work.  Aside from that,
	  the compiled database will work with older applications.

	+ "*.pc" and "ncurses*-config" files give the same information.

	+ vwprintw and vwscanw are deprecated.

	Added extensions:

	+ These make it simpler to substitute a debug-configuration of the
	  library for non-debug:
		curses_trace
		exit_curses
		exit_terminfo

	Added internal functions (other than "_sp" variants):

	+ These provide fast-lookup of common user-defined capabilities:
		_nc_find_user_entry
		_nc_get_userdefs_table
		_nc_get_hash_user

	+ This is added to work around compiler-warnings:
		_nc_fmt_funcptr

	Removed internal functions:

	+ _nc_import_termtype

	Modified internal functions:

	+ _nc_reserve_pairs no longer returns a value

    6.1 (Jan 27, 2018)
	Interface changes:

	+ X/Open Curses specifies a "reserved" void* parameter in several
	  functions, saying that it must be NULL.  In this release, if the
	  parameter is non-NULL, it is interpreted as a point to an integer
	  containing a color pair.  In previous releases, a non-NULL parameter
	  caused an error return.  Portable applications are unaffected.  Here
	  are the functions which have been extended:
		attr_get
		attr_off
		attr_on
		attr_set
		chgat
		color_set
		mvchgat
		mvwchgat
		slk_attr_off
		slk_attr_on
		slk_attr_set
		wattr_get
		wattr_on
		wattr_off
		wattr_set
		wchgat
		wcolor_set

	+ the TERMINAL structure declared in <term.h> has been made opaque,
	  and its size increased to handle the increased size of color pair
	  and color value, as well as other numeric capabilities.

	  A few applications required change, e.g., to use def_prog_mode;
	  only one application (tack) is known to have a valid reason for
	  accessing these internal details, and that was addressed by the
	  release of tack 1.08 in 2017.  Internal functions marked as used
	  by tack will be deprecated in future releases.

	Added extensions:

	+ Several new functions were added to manipulate extended color pairs
	  and color values.  These include:
		alloc_pair
		extended_color_content
		extended_pair_content
		extended_slk_color
		find_pair
		free_pair
		init_extended_color
		init_extended_pair
		reset_color_pairs

	  as well as corresponding sp-functions.

	+ A new terminfo capability "RGB" tells the ncurses library that the
	  color values are red/green/blue, to eliminate the need for palettes
	  in that special case for the color_content function.

	Added internal functions (other than "_sp" variants):
		_nc_copy_termtype2
		_nc_export_termtype2
		_nc_fallback2
		_nc_find_prescr
		_nc_forget_prescr
		_nc_free_termtype2
		_nc_read_entry2
		_nc_write_object

	Removed internal functions:
		_nc_check_termtype
		_nc_resolve_uses

	Modified internal functions:

	+ symbols are used by tic/infocmp/toe:
		_nc_align_termtype - change parameters to TERMTYPE2*
		_nc_check_termtype2 - change parameter to TERMTYPE2*
		_nc_read_file_entry - change parameter to TERMTYPE2*
		_nc_read_termtype - change parameter to TERMTYPE2*
		_nc_trim_sgr0 - change parameter to TERMTYPE2*
		_nc_write_entry - change parameter to TERMTYPE2*

	+ symbols used only within the library:
		_nc_fallback - change return type to TERMTYPE2*
		_nc_init_termtype - change parameter to TERMTYPE2*

    6.0 (Aug 08, 2015)
	Interface changes:

	+ The 6.0 ABI modifies the defaults for these configure options:
	   --enable-const
	   --enable-ext-colors
	   --enable-ext-mouse
	   --enable-ext-putwin
	   --enable-interop
	   --enable-lp64
	   --enable-sp-funcs
	   --with-chtype=uint32_t
	   --with-mmask_t=uint32_t
	   --with-tparm-arg=intptr_t

	+ ncurses supports symbol versioning.  If you use this feature, about
	  half of the "_nc_" private symbols are changed to local symbols.

	+ a few applications may need to explicitly flush the standard output
	  when switching between printf's and (curses) printw.

	Added extensions:

	+ use_tioctl is an improvement over use_env

	+ added wgetdelay to support the NCURSES_OPAQUE feature.

	Added internal functions (other than "_sp" variants):
		_nc_init_termtype
		_nc_mvcur
		_nc_putchar
		_nc_setenv_num
		_nc_trace_mmask_t

	Removed internal functions:
		none

	Modified internal functions:
		_nc_do_color - change parameters from short/bool to int
		_nc_keypad - change parameter from bool to int
		_nc_setupscreen - change parameter from bool to int
		_nc_signal_handler - change parameter from bool to int

    5.9 (Apr 04, 2011)
    5.8 (Feb 26, 2011)
	Interface changes:

	+ add an alternate library configuration, i.e., "terminal driver" to
	  support port to Windows, built with MinGW.  There are two drivers
	  (terminfo and Windows console).  The terminfo driver works on other
	  platforms.

	+ add a new set of functions which accept a SCREEN* parameter, in
	  contrast with the original set which use the global value "sp".
	  By default, these names end with "_sp", and are otherwise
	  functionally identical with the originals.

	  In addition to the "_sp" functions, there are a few new functions
	  associated with this feature:  ceiling_panel, ground_panel,
	  new_prescr.

	  If the library is not built with the sp-funcs extension, there
	  are no related interface changes.

	+ add tiparm function based on review of X/Open Curses Issue 7.

	+ change internal _nc_has_mouse function to public has_mouse function

	Added extensions:

	+ add a few more functions to support the NCURSES_OPAQUE feature:
	  get_escdelay, is_pad, is_subwin

	Added internal functions (other than "_sp" variants):
		_nc_curscr_of
		_nc_format_slks
		_nc_get_alias_table
		_nc_get_hash_info
		_nc_insert_wch
		_nc_newscr_of
		_nc_outc_wrapper
		_nc_retrace_char
		_nc_retrace_int_attr_t
		_nc_retrace_mmask_t
		_nc_setup_tinfo
		_nc_stdscr_of
		_nc_tinfo_cmdch

	Removed internal functions:
		_nc_makenew (some configurations replace by _nc_makenew_sp)

	Modified internal functions:
		_nc_UpdateAttrs
		_nc_get_hash_table
		_nc_has_mouse
		_nc_insert_ch
		_nc_wgetch

    5.7 (November 2, 2008)
	Interface changes:

	+ generate linkable stubs for some macros:
		getattrs

	+ Add new library configuration for tic-library (the non-curses portion
	  of the ncurses library used for the tic program as well as some
	  others such as tack.  There is no API change, but makefiles would be
	  changed to use the tic-library built separately.

	  tack, distributed separately from ncurses, uses some of the internal
	  _nc_XXX functions, which are declared in the tic.h header file.

	  The reason for providing this separate library is that none of the
	  functions in it are suitable for threaded applications.

	+ Add new library configuration (ncursest, ncurseswt) which provides
	  rudimentary support for POSIX threads.  This introduces opaque
	  access functions to the WINDOW structure and adds a parameter to
	  several internal functions.

	+ move most internal variables (except tic-library) into data blocks
	  _nc_globals and _nc_prescreen to simplify analysis.  Those were
	  globally accessible, but since they were not part of the documented
	  API, there is no ABI change.

	+ changed static tables of strings to be indices into long strings, to
	  improve startup performance.  This changes parameter lists for some
	  of the internal functions.

	Added extensions:

	+ add NCURSES_OPAQUE definition in curses.h to control whether internal
	  details of the WINDOW structure are visible to an application.  This
	  is always defined when the threaded library is built, and is optional
	  otherwise.  New functions for this:  is_cleared, is_idcok, is_idlok,
	  is_immedok, is_keypad, is_leaveok, is_nodelay, is_notimeout,
	  is_scrollok, is_syncok, wgetparent and wgetscrreg.

	+ the threaded library (ncursest) also disallows direct updating of
	  global curses-level variables, providing functions (via macros) for
	  obtaining their value.  A few of those variables can be modified by
	  the application, using new functions:  set_escdelay, set_tabsize

	+ added functions use_window() and use_screen() which wrap a mutex
	  (if threading is configured) around a call to a user-supplied
	  function.

	Added internal functions:
		_nc_get_alias_table
		_nc_get_screensize
		_nc_keyname
		_nc_screen_of
		_nc_set_no_padding
		_nc_tracechar
		_nc_tracemouse
		_nc_unctrl
		_nc_ungetch

		These are used for leak-testing, and are stubs for
		ABI compatibility when ncurses is not configured for that
		using the --disable-leaks configure script option:

		_nc_free_and_exit
		_nc_leaks_tinfo

	Removed internal functions:
		none

	Modified internal functions:
		_nc_fifo_dump
		_nc_find_entry
		_nc_handle_sigwinch
		_nc_init_keytry
		_nc_keypad
		_nc_locale_breaks_acs
		_nc_timed_wait
		_nc_update_screensize

		Use new typedef TRIES to replace "struct tries":

		_nc_add_to_try
		_nc_expand_try
		_nc_remove_key
		_nc_remove_string
		_nc_trace_tries

    5.6 (December 17, 2006)
	Interface changes:

	+ generate linkable stubs for some macros:

	  getbegx, getbegy, getcurx, getcury, getmaxx, getmaxy, getparx,
	  getpary, getpary,

	  and (for libncursesw)

	  wgetbkgrnd

	Added extensions:
		nofilter()
		use_legacy_coding()

	Added internal functions:
		_nc_first_db
		_nc_get_source
		_nc_handle_sigwinch
		_nc_is_abs_path
		_nc_is_dir_path
		_nc_is_file_path
		_nc_keep_tic_dir
		_nc_keep_tic_dir
		_nc_last_db
		_nc_next_db
		_nc_read_termtype
		_nc_tic_dir

		Also (if using the hashed database configuration):

		_nc_db_close
		_nc_db_first
		_nc_db_get
		_nc_db_have_data
		_nc_db_have_index
		_nc_db_next
		_nc_db_open
		_nc_db_put

		otherwise

		_nc_hashed_db

	Removed internal functions:
		none

	Modified internal functions:
		_nc_add_to_try
		_nc_do_color
		_nc_expand_try
		_nc_remove_key
		_nc_setupscreen

    5.5 (October 10, 2005)
	Interface changes:

	+ terminfo installs "xterm-new" as "xterm" entry rather than
	  "xterm-old" (aka xterm-r6).

	+ terminfo data is installed using the tic -x option (few systems
	  still use ncurses 4.2).

	+ modify C++ binding to work with newer C++ compilers by providing
	  initializers and using modern casts.  Old-style header names are
	  still used in this release to allow compiling with not-so-old
	  compilers.

	+ form and menu libraries now work with wide-character data.
	  Applications which bypassed the form library and manipulated the
	  FIELD.buf data directly will not work properly with libformw, since
	  that no longer points to an array of char.  The set_field_buffer()
	  and field_buffer() functions translate to/from the actual field
	  data.

	+ change SP->_current_attr to a pointer, adjust ifdef's to ensure that
	  libtinfo.so and libtinfow.so have the same ABI.  The reason for this
	  is that the corresponding data which belongs to the upper-level
	  ncurses library has a different size in each model.

	+ winnstr() now returns multibyte character strings for the
	  wide-character configuration.

	+ assume_default_colors() no longer requires that use_default_colors()
	  be called first.

	+ data_ahead() now works with wide-characters.

	+ slk_set() and slk_wset() now accept and store multibyte or
	  multicolumn characters.

	+ start_color() now returns OK if colors have already been started.
	  start_color() also returns ERR if it cannot allocate memory.

	+ pair_content() now returns -1 for consistency with init_pair() if it
	  corresponds to the default-color.

	+ unctrl() now returns null if its parameter does not correspond
	  to an unsigned char.

	Added extensions:
		Experimental mouse version 2 supports wheel mice with buttons
		4 and 5.  This requires ABI 6 because it modifies the encoding
		of mouse events.

		Experimental extended colors allows encoding of 256 foreground
		and background colors, e.g., with the xterm-256color or
		xterm-88color terminfo entries.  This requires ABI 6 because
		it changes the size of cchar_t.

	Added internal functions:
		_nc_check_termtype2
		_nc_resolve_uses2
		_nc_retrace_cptr
		_nc_retrace_cvoid_ptr
		_nc_retrace_void_ptr
		_nc_setup_term

	Removed internal functions:
		none

	Modified internal functions:
		_nc_insert_ch
		_nc_save_str
		_nc_trans_string

    5.4 (February 8, 2004)
	Interface changes:

	+ add the remaining functions for X/Open curses wide-character support.
	  These are only available if the library is configured using the
	  --enable-widec option.
		pecho_wchar()
		slk_wset()

	+ write getyx() and related 2-return macros in terms of getcury(),
	  getcurx(), etc.

	+ simplify ifdef for bool declaration in curses.h

	+ modify ifdef's in curses.h that disabled use of __attribute__() for
	  g++, since recent versions implement the cases which ncurses uses.

	+ change some interfaces to use const:
		define_key()
		mvprintw()
		mvwprintw()
		printw()
		vw_printw()
		winsnstr()
		wprintw()

	Added extensions:
		key_defined()

	Added internal functions:
		_nc_get_locale()
		_nc_insert_ch()
		_nc_is_charable()	wide
		_nc_locale_breaks_acs()
		_nc_pathlast()
		_nc_to_char()		wide
		_nc_to_widechar()	wide
		_nc_tparm_analyze()
		_nc_trace_bufcat()	debug
		_nc_unicode_locale()

	Removed internal functions:
		_nc_outstr()
		_nc_sigaction()

	Modified internal functions:
		_nc_remove_string()
		_nc_retrace_chtype()

    5.3 (October 12, 2002)
	Interface changes:

	+ change type for bool used in headers to NCURSES_BOOL, which usually
	  is the same as the compiler's definition for 'bool'.

	+ add all but two functions for X/Open curses wide-character support.
	  These are only available if the library is configured using the
	  --enable-widec option.  Missing functions are
		pecho_wchar()
		slk_wset()

	+ add environment variable $NCURSES_ASSUMED_COLORS to modify the
	  assume_default_colors() extension.

	Added extensions:
		is_term_resized()
		resize_term()

	Added internal functions:
		_nc_altcharset_name()	debug
		_nc_reset_colors()
		_nc_retrace_bool()	debug
		_nc_retrace_unsigned()	debug
		_nc_rootname()
		_nc_trace_ttymode()	debug
		_nc_varargs()		debug
		_nc_visbufn()		debug
		_nc_wgetch()

	Removed internal functions:
		_nc_background()

	Modified internal functions:
		_nc_freeall()		debug

    5.2 (October 21, 2000)
	Interface changes:

	+ revert termcap ospeed variable to 'short' (see discussion of the
	  --with-ospeed configure option).

    5.1 (July 8, 2000)
	Interface changes:

	+ made the extended terminal capabilities
	  (configure --enable-tcap-names) a standard feature.  This should
	  be transparent to applications that do not require it.

	+ removed the trace() function and related trace support from the
	  production library.

	+ modified curses.h.in, undef'ing some symbols to avoid conflict
	  with C++ STL.

	Added extensions:  assume_default_colors().

    5.0 (October 23, 1999)
	Interface changes:

	+ implemented the wcolor_set() and slk_color() functions.

	+ move macro winch to a function, to hide details of struct ldat

	+ corrected prototypes for slk_* functions, using chtype rather than
	  attr_t.

	+ the slk_attr_{set,off,on} functions need an additional void*
	  parameter according to XSI.

	+ modified several prototypes to correspond with 1997 version of X/Open
	  Curses:  [w]attr_get(), [w]attr_set(), border_set() have different
	  parameters.  Some functions were renamed or misspelled:
	  erase_wchar(), in_wchntr(), mvin_wchntr().  Some developers have used
	  attr_get().

	Added extensions:  keybound(), curses_version().

	Terminfo database changes:

	+ change translation for termcap 'rs' to terminfo 'rs2', which is
	  the documented equivalent, rather than 'rs1'.

	The problems are subtler in recent releases.

	a) This release provides users with the ability to define their own
	   terminal capability extensions, like termcap.  To accomplish this,
	   we redesigned the TERMTYPE struct (in term.h).  Very few
	   applications use this struct.  They must be recompiled to work with
	   the 5.0 library.

	a) If you use the extended terminfo names (i.e., you used configure
	   --enable-tcap-names), the resulting terminfo database can have some
	   entries which are not readable by older versions of ncurses.  This
	   is a bug in the older versions:

	   + the terminfo database stores booleans, numbers and strings in
	     arrays.  The capabilities that are listed in the arrays are
	     specified by X/Open.  ncurses recognizes a number of obsolete and
	     extended names which are stored past the end of the specified
	     entries.

	   + a change to read_entry.c in 951001 made the library do an lseek()
	     call incorrectly skipping data which is already read from the
	     string array.  This happens when the number of strings in the
	     terminfo data file is greater than STRCOUNT, the number of
	     specified and obsolete or extended strings.

	   + as part of alignment with the X/Open final specification, in the
	     990109 patch we added two new terminfo capabilities:
	     set_a_attributes and set_pglen_inch).  This makes the indices for
	     the obsolete and extended capabilities shift up by 2.

	   + the last two capabilities in the obsolete/extended list are memu
	     and meml, which are found in most terminfo descriptions for xterm.

	     When trying to read this terminfo entry, the spurious lseek()
	     causes the library to attempt to read the final portion of the
	     terminfo data (the text of the string capabilities) 4 characters
	     past its starting point, and reads 4 characters too few.  The
	     library rejects the data, and applications are unable to
	     initialize that terminal type.

	   FIX: remove memu and meml from the xterm description.  They are
	   obsolete, not used by ncurses.  (It appears that the feature was
	   added to xterm to make it more like hpterm).

	   This is not a problem if you do not use the -x option of tic to
	   create a terminfo database with extended names.  Note that the
	   user-defined terminal capabilities are not affected by this bug,
	   since they are stored in a table after the older terminfo data ends,
	   and are invisible to the older libraries.

	c) Some developers did not wish to use the C++ binding, and used the
	   configure --without-cxx option.  This causes problems if someone
	   uses the ncurses library from C++ because that configure test
	   determines the type for C++'s bool and makes ncurses match it, since
	   both C++ and curses are specified to declare bool.  Calling ncurses
	   functions with the incorrect type for bool will cause execution
	   errors.  In 5.0 we added a configure option "--without-cxx-binding"
	   which controls whether the binding itself is built and installed.

    4.2 (March 2, 1998)
	Interface changes:

	+ correct prototype for termattrs() as per XPG4 version 2.

	+ add placeholder prototypes for color_set(), erasewchar(),
	  term_attrs(), wcolor_set() as per XPG4 version 2.

	+ add macros getcur[xy] getbeg[xy] getpar[xy], which are defined in
	  SVr4 headers.

	New extensions: keyok() and define_key().

	Terminfo database changes:

	+ corrected definition in curses.h for ACS_LANTERN, which was 'I'
	  rather than 'i'.

    4.1 (May 15, 1997)

	We added these extensions:  use_default_colors().  Also added
	configure option --enable-const, to support the use of const where
	X/Open should have, but did not, specify.

	The terminfo database content changed the representation of color for
	most entries that use ANSI colors.  SVr4 curses treats the setaf/setab
	and setf/setb capabilities differently, interchanging the red/blue
	colors in the latter.

    4.0 (December 24, 1996)

	We bumped to version 4.0 because the newly released Linux dynamic
	loader (ld.so.1.8.5) did not load shared libraries whose ABI and REL
	versions were inconsistent.  At that point, ncurses ABI was 3.4 and the
	REL was 1.9.9g, so we made them consistent.

    1.9.9g (December 1, 1996)

	This fixed most of the problems with 1.9.9e, and made these interface
	changes:

	+ remove tparam(), which had been provided for compatibility with
	  some termcap.  tparm() is standard, and does not conflict with
	  application's fallback for missing tparam().

	+ turn off hardware echo in initscr().  This changes the sense of the
	  echo() function, which was initialized to echoing rather than
	  nonechoing (the latter is specified).  There were several other
	  corrections to the terminal I/O settings which cause applications to
	  behave differently.

	+ implemented several functions (such as attr_on()) which were
	  available only as macros.

	+ corrected several typos in curses.h.in (i.e., the mvXXXX macros).

	+ corrected prototypes for delay_output(),
	  has_color, immedok() and idcok().

	+ corrected misspelled getbkgd().  Some applications used the
	  misspelled name.

	+ added _yoffset to WINDOW.  The size of WINDOW does not impact
	  applications, since they use only pointers to WINDOW structs.

	These changes were made to the terminfo database:

	+ removed boolean 'getm' which was available as an extended name.

	We added these extensions: wresize(), resizeterm(), has_key() and
	mcprint().

    1.9.9e (March 24, 1996)

	not recommended (a last-minute/untested change left the forms and
	menus libraries unusable since they do not repaint the screen).
	Foreground/background colors are combined incorrectly, working properly
	only on a black background.  When this was released, the X/Open
	specification was available only in draft form.

	Some applications (such as lxdialog) were "fixed" to work with the
	incorrect color scheme.


FOR SYSTEM INTEGRATORS:
----------------------

    Configuration and Installation:

	On platforms where ncurses is assumed to be installed in /usr/lib,
	the configure script uses "/usr" as a default.  These include any
	that use the Linux kernel, as well as these special cases:

		FreeBSD, NetBSD, OpenBSD, Cygwin, MinGW

	For other platforms, the default is "/usr/local".  See the discussion
	of the "--disable-overwrite" option.

	The location of the terminfo is set indirectly by the "--datadir"
	configure option, e.g., /usr/share/terminfo, given a datadir of
	/usr/share.  You may want to override this if you are installing
	ncurses libraries in nonstandard locations, but wish to share the
	terminfo database.

	Normally the ncurses library is configured in a pure-terminfo mode;
	that is, with the --disable-termcap option.  This makes the ncurses
	library smaller and faster.  The ncurses library includes a termcap
	emulation that queries the terminfo database, so even applications that
	use raw termcap to query terminal characteristics will win (providing
	you recompile and relink them!).

	If you must configure with termcap fallback enabled, you may also wish
	to use the --enable-getcap option.  This speeds up termcap-based
	startups, at the expense of not allowing personal termcap entries to
	reference the terminfo tree.  See comments in
	ncurses/tinfo/read_termcap.c for further details.

	Note that if you have $TERMCAP set, ncurses will use that value
	to locate termcap data.  In particular, running from xterm will
	set $TERMCAP to the contents of the xterm's termcap entry.
	If ncurses sees that, it will not examine /etc/termcap.

    Keyboard Mapping:

	The terminfo file assumes that Shift-Tab generates \E[Z (the ECMA-48
	reverse-tabulation sequence) rather than ^I.  Here are the loadkeys -d
	mappings that will set this up:

		keycode	 15 = Tab	      Tab
			alt     keycode  15 = Meta_Tab
			shift	keycode  15 = F26
		string F26 ="\033[Z"

    Naming the Console Terminal

	In various systems there has been a practice of designating the system
	console driver type as `console'.  Please do not do this!  It
	complicates peoples' lives, because it can mean that several different
	terminfo entries from different operating systems all logically want to
	be called `console'.

	Please pick a name unique to your console driver and set that up
	in the /etc/inittab table or local equivalent.  Send the entry to the
	terminfo maintainer (listed in the misc/terminfo file) to be included
	in the terminfo file, if it is not already there.  See the
	term(7) manual page included with this distribution for more on
	conventions for choosing type names.

	Here are some recommended primary console names:

		linux	-- Linux console driver
		freebsd	-- FreeBSD
		netbsd	-- NetBSD
		bsdos	-- BSD/OS

	If you are responsible for integrating ncurses for one of these
	distributions, please either use the recommended name or get back
	to us explaining why you don't want to, so we can work out nomenclature
	that will make users' lives easier rather than harder.


MODERN XTERM VERSIONS:
---------------------

	The terminfo database file included with this distribution assumes you
	are running a modern xterm based on XFree86 (i.e., xterm-new).  The
	earlier X11R6 entry (xterm-r6) and X11R5 entry (xterm-r5) is provided
	as well.  See the --without-xterm-new configure script option if you
	are unable to update your system.


CONFIGURING FALLBACK ENTRIES:
----------------------------

	In order to support operation of ncurses programs before the terminfo
	tree is accessible (that is, in single-user mode or at OS installation
	time) the ncurses library can be compiled to include an array of
	pre-fetched fallback entries.

	NOTE: This must be done on a machine which has ncurses' infocmp and
	terminfo database installed (as well as ncurses' tic and infocmp
	programs).  That is because the fallback sources are generated and
	compiled into the library before the build-tree's copy of infocmp is
	available.

	These entries are checked by setupterm() only when the conventional
	fetches from the terminfo tree and the termcap fallback (if configured)
	have been tried and failed.  Thus, the presence of a fallback will not
	shadow modifications to the on-disk entry for the same type, when that
	entry is accessible.

	By default, there are no entries on the fallback list.  After you have
	built the ncurses suite for the first time, you can change the list
	(the process needs infocmp(1)).  To do so, use the script
	ncurses/tinfo/MKfallback.sh.  The configure script option
	--with-fallbacks does this (it accepts a comma-separated list of the
	names you wish, and does not require a rebuild).

	If you wanted (say) to have linux, vt100, and xterm fallbacks, you
	might use the commands

		cd ncurses;
		tinfo/MKfallback.sh \
			$TERMINFO \
			../misc/terminfo.src \
			`which tic` \
			`which infocmp` \
			linux vt100 xterm >fallback.c

	The first four parameters of the script are normally supplied by
	the configured makefiles via the "--with-fallbacks" option.  They
	are

		1) the location of the terminfo database
		2) the source for the terminfo entries
		3) the location of the tic program, used to create a terminfo
		   database.
		4) the location of the infocmp program, used to print a terminfo
		   description.

	Then just rebuild and reinstall the library as you would normally.
	You can restore the default empty fallback list with

		tinfo/MKfallback.sh \
			$TERMINFO \
			../misc/terminfo.src \
			`which tic` \
			`which infocmp` \
			>fallback.c

	The overhead for an empty fallback list is one trivial stub function.
	Any non-empty fallback list is const'd and therefore lives in shareable
	text space.  You can look at the comment trailing each initializer in
	the generated ncurses/fallback.c file to see the core cost of the
	fallbacks.  A good rule of thumb for modern vt100-like entries is that
	each one will cost about 2.5K of text space.


BSD CONVERSION NOTES:
--------------------

	If you need to support really ancient BSD programs, you probably
	want to configure with the --enable-bsdpad option.  What this does
	is enable code in tputs() that recognizes a numeric prefix on a
	capability as a request for that much trailing padding in milliseconds.
	There are old BSD programs that do things like tputs("50").

	(If you are distributing ncurses as a support-library component of
	an application you probably want to put the remainder of this section
	in the package README file.)

	The following note applies only if you have configured ncurses with
	--enable-termcap.

------------------------------- CUT HERE --------------------------------

If you are installing this application privately (either because you
have no root access or want to experiment with it before doing a root
installation), there are a couple of details you need to be aware of.
They have to do with the ncurses library, which uses terminfo rather
than termcap for describing terminal characteristics.

Though the ncurses library is terminfo-based, it can interpret your
TERMCAP variable (if present), any local termcap files you reference
through it, and the system termcap file.  However, to avoid slowing
down your application startup, it does this only once per terminal type!

The first time you load a given terminal type from your termcap
database, the library initialization code will automatically write it
in terminfo format to a subdirectory under $HOME/.terminfo.  After
that, the initialization code will find it there and do a (much
faster) terminfo fetch.

Usually, all this means is that your home directory will silently grow
an invisible .terminfo subdirectory which will get filled in with
terminfo descriptions of terminal types as you invoke them.  If anyone
ever installs a global terminfo tree on your system, this will quietly
stop happening and your $HOME/.terminfo will become redundant.

The objective of all this logic is to make converting from BSD termcap
as painless as possible without slowing down your application (termcap
compilation is expensive).

If you don't have a TERMCAP variable or custom personal termcap file,
you can skip the rest of this dissertation.

If you *do* have a TERMCAP variable and/or a custom personal termcap file
that defines a terminal type, that definition will stop being visible
to this application after the first time you run it, because it will
instead see the terminfo entry that it wrote to $HOME/terminfo the
first time around.

Subsequently, editing the TERMCAP variable or personal TERMCAP file
will have no effect unless you explicitly remove the terminfo entry
under $HOME/terminfo.  If you do that, the entry will be recompiled
from your termcap resources the next time it is invoked.

To avoid these complications, use infocmp(1) and tic(1) to edit the
terminfo directory directly.

------------------------------- CUT HERE --------------------------------

USING GPM:
---------
	Ncurses 4.1 and up can be configured to use GPM (General Purpose Mouse)
	which is used with Linux console.  Be aware that GPM is commonly
	installed as a shared library which contains a wrapper for the curses
	wgetch() function (libcurses.o).  Some integrators have simplified
	linking applications by combining all or part of libcurses.so into the
	libgpm.so file, producing symbol conflicts with ncurses (specifically
	the wgetch function).  This was originally the BSD curses, but
	generally whatever curses library exists on the system.

	You may be able to work around this problem by linking as follows:

		cc -o foo foo.o -lncurses -lgpm -lncurses

	but the linker may not cooperate, producing mysterious errors.
	See the FAQ, as well as the discussion under the --with-gpm option:

	https://invisible-island.net/ncurses/ncurses.faq.html#using_gpm_lib


BUILDING WITH A CROSS-COMPILER:
------------------------------
	Ncurses can be built with a cross-compiler.  Some parts must be built
	with the host's compiler since they are used for building programs
	(e.g., ncurses/make_hash and ncurses/make_keys) that generate tables
	that are compiled into the ncurses library.  The essential thing to do
	is set the BUILD_CC environment variable to your host's compiler, and
	run the configure script configuring for the cross-compiler.

	The configure options --with-build-cc, etc., are provided to make this
	simpler.  Since make_hash and make_keys use only ANSI C features, it
	is normally not necessary to provide the other options such as
	--with-build-libs, but they are provided for completeness.

	Note that all of the generated source-files which are part of ncurses
	will be made if you use

		make sources

	This would be useful in porting to an environment which has little
	support for the tools used to generate the sources, e.g., sed, awk and
	Bourne-shell.

	When ncurses has been successfully cross-compiled, you may want to use
	"make install" (with a suitable target directory) to construct an
	install tree.  Note that in this case (as with the --with-fallbacks
	option), ncurses uses the development platform's tic to do the "make
	install.data" portion.

	The system's tic program is used to install the terminal database,
	even for cross-compiles.  For best results, the tic program should be
	from the most current version of ncurses.

	NOTE:  the system's tic program may use a different terminfo database
	format than the target system.  For instance, as described in term(5),
	the conventional terminfo layout uses a directory hierarchy with one
	letter names, while some platforms use two-letter names to work with
	case-insensitive filesystems.  The configure script searches for a tic
	program using the AC_CHECK_TOOL macro, which will prefer programs
	using the canonical host prefix in their name.  You can use this fact
	to provide a cross-compiler support utility tic, otherwise you can
	override the configure script's choice using --with-tic-path


BUG REPORTS:
-----------
	Send any feedback to the ncurses mailing list at
	bug-ncurses@gnu.org. To subscribe send mail to
	bug-ncurses-request@gnu.org with body that reads:
	subscribe ncurses <your-email-address-here>

	The Hacker's Guide in the doc directory includes some guidelines
	on how to report bugs in ways that will get them fixed most quickly.

-- vile:txtmode
