-------------------------------------------------------------------------------
-- Copyright 2018-2021,2022 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.238 2022/12/29 20:30:06 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 prefers the first directory
	which currently exists.  If none of the directories listed by
	pkg-config exist, the check prefers a pkgconfig directory under the
	"libdir" set by the configure script (which may not be the system
	default), or if pkg-config lists nothing suitable, the first one which
	is listed by pkg-config is used.

	Automatic selection is overridden by providing an option-value
	beginning with "/".

	If this option is omitted, the default directory for installing
	".pc" files is ${libdir}/pkgconfig

    --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.4 (Dec 31, 2022)
	Interface changes:

	+ none

	Added extensions:

	+ none

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

	+ add _nc_free_termtype1 and _nc_free_tparm, for memory-leaks

	Removed internal functions:

	+ none

	Modified internal functions:

	+ none

    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
