\[Readline-specific changelog.  Descriptions of changes to the source are
 found in the bash changelog.]

				    6/9
				    ---
Makefile.in
	- quote value of ${INSTALL_DATA} when passing it to makes in
	  subdirectories

				    7/1
				    ---
Makefile.in
	- don't pass INSTALL_DATA to a make in the `doc' subdirectory; let
	  autoconf set the value itself in the Makefile
	- removed a stray `-' before $(RANLIB) in the `install' recipe

doc/Makefile.in
	- add a VPATH assignment so the documentation is not remade if it's
	  already up-to-date in the distribution

configure.in
	- call AC_SUBST(LOCAL_LDFLAGS), since Makefile.in contains
	  @LOCAL_LDFLAGS@

				    7/9
				    ---

config.h.in
	- add define lines for STRUCT_WINSIZE_IN_SYS_IOCTL and
	  STRUCT_WINSIZE_IN_TERMIOS

configure.in
	- call BASH_STRUCT_WINSIZE to look for the definition of
	  `struct winsize'

				   7/17
				   ----
configure.in
	- call AC_MINIX

config.h.in
	- add define line for AC_MINIX

				   7/18
				   ----
Makefile.in
	- add `install-shared' and `uninstall-shared' targets

				    8/4
				    ---
Makefile.in
	- install and uninstall libhistory.a in the `install' and
	  `uninstall' targets

				    9/4
				    ---
configure.in
	- bumped LIBVERSION up to 2.1.1, indicating that this is patch
	  level 1 to release 2.1


				   9/16
				   ----
Makefile.in
	- `make distclean' now descends into the `examples' subdir

doc/Makefile.in
	- the `distclean' and `maintainer-clean' targets should remove
	  Makefile

examples/Makefile.in
	- added the various clean targets

				    4/2
				    ---
configure.in
	- bumped LIBVERSION up to 2.2

				   4/18
				   ----
[readline-2.2 released]

				   4/20
				   ----
Makefile.in
	- make `libhistory.a' a dependency of `install'
	- fixed a typo in the recipe for `install' that copied libreadline.a
	  to libhistory.old right after installing it

				   4/27
				   ----
doc/Makefile.in
	- install {readline,history}.info out of the source directory if
	  they are not found in the current (build) directory -- only an
	  issue if the libraries are built in a different directory than
	  the source directory

				    5/1
				    ---
support/shobj-conf
	- script from the bash distribution to do shared object and library
	  configuration

shlib/Makefile.in
	- new directory and makefile to handle building shared versions of
	  libreadline and libhistory, controlled by support/shobj-conf

				    5/7
				    ---
doc/Makefile.in
	- set SHELL to /bin/sh, rather than relying on make to be correct

				   5/14
				   ----
savestring.c
	- new file, moved from shell.c, for backwards compatibility

Makefile.in, shlib/Makefile.in
	- make sure savestring.c is compiled and added to libreadline and
	  libhistory

[THERE ARE NO MORE #ifdef SHELL LINES IN THE C SOURCE FILES.]

				   5/15
				   ----
README
	- updated description of shared library creation for the new scheme

[THERE ARE NO MORE #ifdef SHELL LINES IN ANY OF THE SOURCE FILES.]

Makefile.in
	- bumped SHLIB_MAJOR up to 4 since we've augmented the library
	  API
	- rlconf.h is now one of the installed headers, so applications can
	  find out whether things like vi-mode are available in the installed
	  libreadline

				   5/20
				   ----
configure.in
	- changed RL_LIBRARY_VERSION to 4.0 to match the version of the
	  installed shared libraries

				    6/5
				    ---
rlstdc.h
	- new file

Makefile.in
	- rlstdc.h is now one of the installed headers

				    8/3
				    ---
shlib/Makefile.in
	- made the suffix rule that creates xx.so from xx.c write the
	  compiler output to `a.o', which is then mv'd to xx.so, because
	  some compilers (Sun WSpro 4.2, for example) don't allow any
	  suffixes other than `.o' for `cc -c' (not even `a.out')

				   9/15
				   ----

Makefile.in
	- AR and ARFLAGS are now substituted by configure, used in recipes
	  that build the libraries

configure.in
	- use AC_CHECK_PROG to check for ar
	- set ARFLAGS if it has not already been set in the environment

				   10/5
				   ----
Makefile.in
	- removed savestring.o from object file list

				   10/28
				   -----
shlib/Makefile.in
	- don't use a fixed filename in the .c.so suffix rule to avoid
	  problems with parallel makes

				   12/21
				   -----
support/shlib-install
	- new script to install shared readline and history libraries

shlib/Makefile.in
	- changed to call shlib-install for install and uninstall targets

[readline-4.0-beta1 frozen]

				   12/22
				   -----
configure.in
	- call AC_SUBST for SHOBJ_XLDFLAGS and SHLIB_LIBS

shlib/Makefile.in
	- SHOBJ_XLDFLAGS and SHLIB_LIBS are now substituted by configure
	- add $(SHLIB_LIBS) at end of command line that builds the shared
	  libraries (currently needed only by AIX 4.2)

				   12/31
				   -----
MANIFEST, MANIFEST.doc
	- the TOC html files are no longer generated and no longer part of
	  the distribution

				 2/18/1999
				 ---------
configure.in
	- set MAKE_SHELL to /bin/sh and substitute into the Makefiles

Makefile.in,{doc,examples,shlib}/Makefile.in
	- set SHELL from @MAKE_SHELL@

[readline-4.0 released]

				   3/11
				   ----
doc/Makefile.in
	- removed references to HTMLTOC, since separate HTML table-of-contents
	  files are no longer created

examples/Makefile.in
	- remove `*.exe' in clean target for MS-DOS

Makefile.in
	- make `readline' target depend on ./libreadline.a
	- configure now substitutes TERMCAP_LIB into Makefile.in
	- use ${TERMCAP_LIB} instead of -ltermcap in recipe for `readline'
	- clean target now removes readline and readline.exe in case they
	  get built

configure.in
	- use `pwd.exe' to set BUILD_DIR on MS-DOS DJGPP

				   3/15
				   ----
support/shlib-install
	- Irix 5.x and Irix 6.x should install shared libraries like Solaris 2
	- changes for installing on hp-ux 1[01].x

				   3/23
				   ----
configure.in
	- make sure that the $CC argument to shobj-conf is quoted

				    4/8
				    ---

xmalloc.h, rlprivate.h, rlshell.h
	- new files

Makefile.in,shlib/Makefile.in
	- add dependencies on xmalloc.h, rlshell.h
	- add xmalloc.h, rlprivate.h, rlshell.h to list of header files

MANIFEST
	- add xmalloc.h, rlprivate.h, rlshell.h

				    4/9
				    ---
Makefile.in,shlib/Makefile.in
	- add dependencies on rlprivate.h

				   4/13
				   ----
doc/Makefile.in
	- add variable, PSDVI, which is the desired resolution of the
	  generated postscript files.  Set to 300 because I don't have
	  any 600-dpi printers
	- set LANGUAGE= before calling makeinfo, so messages are in English
	- add rluserman.{info,dvi,ps,html} to appropriate variables
	- add rules to create rluserman.{info,dvi,ps,html}
	- install and uninstall rluserman.info, but don't update the directory
	  file in $(infodir) yet

MANIFEST
	- add doc/rluserman.{texinfo,info,dvi,ps,html}

				   4/30
				   ----
configure.in
	- updated library version to 4.1

				    5/3
				    ---
configure.in
	- SHLIB_MAJOR and SHLIB_MINOR shared library version numbers are
	  constructed from $LIBRARY_VERSION and substituted into Makefiles

				    5/5
				    ---
support/shlib-install
	- OSF/1 installs shared libraries like Solaris

Makefile.in
	- broke the header file install and uninstall into two new targets:
	  install-headers and uninstall-headers
	- install and uninstall depend on install-headers and uninstall-headers
	  respectively
	- changed install-shared and uninstall-shared targets to depend on
	  install-headers and uninstall-headers, respectively, so users may
	  choose to install only the shared libraries.  I'm not sure about
	  the uninstall one yet -- maybe it should check whether or not
	  the static libraries are installed and not remove the header files
	  if they are

				    9/3
				    ---
configure.in, config.h.in
	- added test for memmove (for later use)
	- changed version to 4.1-beta1

				   9/13
				   ----
examples/rlfe.c
	- Per Bothner's `rlfe' readline front-end program

examples/Makefile.in
	- added rules to build rlfe

				   9/21
				   ----
support/shlib-install
	- changes to handle FreeBSD-3.x elf or a.out shared libraries, which
	  have different semantics and need different naming conventions

				 1/24/2000
				 ---------
doc/Makefile.in
	- remove *.bt and *.bts on `make clean'

				    2/4
				    ---


configure.in
	- changed LIBVERSION to 4.1-beta5

				 3/17/2000
				 ---------
[readline-4.1 released]

				   3/23
				   ----
Makefile.in
	- remove the `-t' argument to ranlib in the install recipe; some
	  ranlibs don't have it and attempt to create a file named `-t'

				   3/27
				   ----
support/shlib-install
	- install shared libraries unwritable by anyone on HP-UX
	- changed symlinks to relative pathnames on all platforms

shlib/Makefile.in
	- added missing `includedir' assignment, substituted by configure

Makefile.in
	- added missing @SET_MAKE@ so configure can set $MAKE appropriately

configure.in
	- add call to AC_PROG_MAKE_SET

				   8/30
				   ----
shlib/Makefile.in
	- change the soname bound into the shared libraries, so it includes
	  only the major version number.  If it includes the minor version,
	  programs depending on it must be rebuilt (which may or may not be
	  a bad thing)

				    9/6
				    ---
examples/rlfe.c
	- add -l option to log input and output (-a option appends to logfile)
	- add -n option to set readline application name
	- add -v, -h options for version and help information
	- change a few things because getopt() is now used to parse arguments

				   9/12
				   ----
support/shlib-install
	- fix up the libname on HPUX 11

				   10/18
				   -----
configure.in
	- changed library version to 4.2-alpha

				   10/30
				   -----
configure.in
	- add -fsigned-char to LOCAL_CFLAGS for Linux running on the IBM
	  S/390

Makefile.in
	- added new file, rltypedefs.h, installed by default with `make install'

				   11/2
				   ----
compat.c
	- new file, with backwards-compatibility function definitions

Makefile.in,shlib/Makefile.in
	- make sure that compat.o/compat.so are built and linked apppropriately

support/shobj-conf
	- picked up bash version, which means that shared libs built on
	  linux and BSD/OS 4.x will have an soname that does not include
	  the minor version number

				   11/13
				   -----
examples/rlfe.c
	- rlfe can perform filename completion for relative pathnames in the
	  inferior process's context if the OS supports /proc/PID/cwd (linux
	  does it OK, Solaris is slightly warped, none of the BSDs have it)

				11/17/2000
				----------
[readline-4.2-alpha released]

				   11/27
				   -----
Makefile.in,shlib/Makefile.in
	- added dependencies for rltypedefs.h

shlib/Makefile.in
	- changed dependencies on histlib.h to $(topdir)/histlib.h

				   1/22
				   ----
configure.in
	- changed release version to 4.2-beta

				    2/2
				    ---
examples/Makefile.in
	- build histexamp as part of the examples

				    2/5
				    ---
doc/Makefile.in
	- don't remove the dvi, postscript, html, info, and text `objects'
	  on a `make distclean', only on a `make maintainer-clean'

				    3/6
				    ---
doc/history.{0,3}, doc/history_3.ps
	- new manual page for history library

doc/Makefile.in
	- rules to install and uninstall history.3 in ${man3dir}
	- rules to build history.0 and history_3.ps

				    4/2
				    ---
configure.in
	- changed LIBVERSION to `4.2'

				    4/5
				    ---
[readline-4.2 frozen]

				    4/9
				    ---
[readline-4.2 released]

				    5/2
				    ---
Makefile.in,{doc,examples,shlib}/Makefile.in
	- added support for DESTDIR installation root prefix, to support
	  building packages

doc/Makefile.in
	- add an info `dir' file entry for rluserman.info on `make install'
	- change man1ext to `.1' and man3ext to `.3'
	- install man pages with a $(man3ext) extension in the target directory
	- add support for installing html documentation if `htmldir' has a
	  value

Makefile.in
	- on `make install', install from the `shlib' directory, too
	- on `make uninstall', uninstall in the `doc' and `shlib'
	  subdirectories, too

support/shlib-install
	- add `freebsdelf*', `freebsdaout*', Hurd, `sysv4*', `sysv5*', `dgux*'
	  targets for symlink creation

				    5/7
				    ---
configure.in, config.h.in
	- check for <limits.h>, define HAVE_LIMITS_H if found

				    5/8
				    ---
aclocal.m4
	- pick up change to BASH_CHECK_LIB_TERMCAP that adds check for
	  libtinfo (termcap-specific portion of ncurses-5.2)

				    5/9
				    ---
configure.in
	- call AC_C_CONST to find out whether or not the compiler supports
	  `const'

config.h.in
	- placeholder for `const' define, if any

				   5/10
				   ----
configure.in
	- fix AC_CHECK_PROG(ar, ...) test to specify right value for the
	  case where ar is not found; should produce a better error message

				   5/14
				   ----
configure.in,config.h.in
	- check for vsnprintf, define HAVE_VSNPRINTF if found

				   5/21
				   ----
configure.in, config.h.in
	- add checks for size_t, ssize_t

				   5/30
				   ----
configure.in
	- update autoconf to version 2.50, use in AC_PREREQ
	- changed AC_INIT to new flavor
	- added AC_CONFIG_SRCDIR
	- AC_CONFIG_HEADER -> AC_CONFIG_HEADERS
	- call AC_C_PROTOTYPES
	- AC_RETSIGTYPE -> AC_TYPE_SIGNAL

				   8/22
				   ----
configure.in
	- updated the version number to 4.2a

Makefile.in,shlib/Makefile.in
	- make sure tilde.o is built -DREADLINE_LIBRARY when being built as
	  part of the standalone library, so it picks up the right include
	  files

				   8/23
				   ----
support/shlib-install
	- support for Darwin/MacOS X shared library installation

				   9/24
				   ----
examples/readlinebuf.h
	- a new file, a C++ streambuf interface that uses readline for I/O.
	  Donated by Dimitris Vyzovitis <vyzo@media.mit.edu>

				   10/9
				   ----
configure.in
        - replaced call to BASH_HAVE_TIOCGWINSZ with AC_HEADER_TIOCGWINSZ

[readline-4.2a-beta1 frozen]

				   10/15
				   -----
configure.in, config.h.in
	- check for <memory.h>, define HAVE_MEMORY_H if found
	- check for <strings.h>, define HAVE_STRINGS_H if found

				   10/18
				   -----
configure.in, config.h.in
	- check for isascii, define HAVE_ISASCII if found

configure.in
	- changed the macro names from bash as appropriate:
		BASH_SIGNAL_CHECK -> BASH_SYS_SIGNAL_VINTAGE
		BASH_REINSTALL_SIGHANDLERS -> BASH_SYS_REINSTALL_SIGHANDLERS
		BASH_MISC_SPEED_T -> BASH_CHECK_SPEED_T

				   10/22
				   -----
configure.in
	- check for isxdigit with AC_CHECK_FUNCS

config.h.in
	- new define for HAVE_ISXDIGIT

				   10/29
				   -----
configure.in, config.h.in
	- check for strpbrk with AC_CHECK_FUNCS, define HAVE_STRPBRK if found

				    11/1
				    ----
Makefile.in
	- make sure DESTDIR is passed to install and uninstall makes in
	  subdirectories
	- when saving old copies of installed libraries, make sure we use
	  DESTDIR for the old installation tree

[readline-4.2a-rc1 frozen]

				   11/2
				   ----
Makefile.in, shlib/Makefile.in
	- don't put -I$(includedir) into CFLAGS

				   11/15
				   -----
[readline-4.2a released]

				   11/20
				   -----
examples/rlcat.c
	- new file

examples/Makefile.in
	- changes for rlcat

				   11/28
				   -----
configure.in
	- default TERMCAP_LIB to -lcurses if $prefer_curses == yes (as when
	  --with-curses is supplied)

examples/Makefile.in
	- substitute @LDFLAGS@ in LDFLAGS assignment

				   11/29
				   -----
config.h.in
	- add necessary defines for multibyte include files and functions
	- add code to define HANDLE_MULTIBYTE if prerequisites are met

configure.in
	- call BASH_CHECK_MULTIBYTE

				   12/14
				   -----
config.h.in
	- add #undef PROTOTYPES, filled in by AC_C_PROTOTYPES

				   12/17
				   -----
config.h.in
	- moved HANDLE_MULTIBYTE code to rlmbutil.h

rlmbutil.h, mbutil.c
	- new files

Makefile.in, shlib/Makefile.in
	- added rules for mbutil.c

				   12/20
				   -----
configure.in
	- added --enable-shared, --enable-static options to configure to
	  say which libraries are built by default (both default to yes)
	- if SHLIB_STATUS == 'unsupported', turn off default shared library
	  building
	- substitute new STATIC_TARGET, SHARED_TARGET, STATIC_INSTALL_TARGET,
	  and SHARED_INSTALL_TARGET

Makefile.in
	- `all' target now depends on (substituted) @STATIC_TARGET@ and
	  @SHARED_TARGET@
	- `install' target now depends on (substituted) @STATIC_INSTALL_TARGET@
	  and @SHARED_INSTALL_TARGET@

INSTALL, README
	- updated with new info about --enable-shared and --enable-static

				 1/10/2002
				 ---------
configure.in
	- bumped the library version number to 4.3

				   1/24
				   ----
Makefile.in,shlib/Makefile.in
	- changes for new file, text.c, with character and text handling
	  functions from readline.c

				   2/20
				   ----
{configure.config.h}.in
	- call AC_C_CHAR_UNSIGNED, define __CHAR_UNSIGNED__ if chars are
	  unsigned by default

				   5/20
				   ----
doc/Makefile.in
	- new maybe-clean target that removes the generated documentation if
	  the build directory differs from the source directory
	- distclean target now depends on maybe-clean

				   7/17
				   ----
[readline-4.3 released]

				   7/18
				   ----
shlib/Makefile.in
	- fix bad dependency: text.so: terminal.c, make it depend on text.c

				    8/7
				    ---
support/shlib-install
	- break `linux' out into its own stanza:  it seems that linux
	  distributions are all moving to the following scheme:

		libreadline.so.4.3	installed version
		libreadline.so.4 -> libreadline.so.4.3	symlink
		libreadline.so -> libreadline.so.4	symlink

				   10/29
				   -----
support/shlib-install
	- change INSTALL_LINK[12] to use `&&' instead of `;' so it only
	  tries the link if the cd succeeds; put ${echo} in there, too
	- use $LN instead of `ln -s' so it works on machines without symlinks
	- change special linux stanza to use cd before ln also
	- change to use $INSTALL_LINK1 and $INSTALL_LINK2 appropriately
	  instead of explicit commands in various stanzas

				    2/1
				    ---
config.h.in
	- add HAVE_MBRTOWC and HAVE_MBRLEN
	- add NO_MULTIBYTE_SUPPORT for new configure argument
	- add STDC_HEADERS

configure.in
	- new argument --enable-multibyte (enabled by default), allows
	  multibyte support to be turned off even on systems that support it
	- add check for ansi stdc headers with call to AC_HEADER_STDC

				    2/3
				    ---
configure.in
	- add call to BASH_FUNC_CTYPE_NONASCII

config.h.in
	- add CTYPE_NON_ASCII

				   2/20
				   ----

doc/manvers.texinfo
        - renamed to version.texi to match other GNU software
        - UPDATE-MONTH variable is now `UPDATED-MONTH'
        
doc/{hist,rlman,rluserman}.texinfo
        - include version.texi
        
doc/{rltech,rluser,hstech,hsuser}.texi
	- changed the suffix from `texinfo' to `texi'

doc/Makefile.in
	- made appropriate changes for {{rl,hs}tech,{rl,hs}user}.texi

doc/{rlman,rluserman}.texinfo
	- changed the suffix from `texinfo' to `texi'

doc/hist.texinfo
	- renamed to history.texi to be more consistent

				   6/11
				   ----
shlib/Makefile.in
	- have configure substitute value of `@LDFLAGS@' into the assignment
	  to SHLIB_XLDFLAGS

				   6/16
				   ----
configure.in
	- readline and history libraries are now at version 5.0

				   8/18
				   ----
support/shlib-install
	- support for FreeBSD-gnu (from Robert Millan)

				   12/4
				   ----
Makefile.in
	- add variables for localedir and the PACKAGE_* variables, auto-set
	  by configure

				   12/9
				   ----
Makefile.in
	- use mkinstalldirs instead of mkdirs

				   4/22
				   ----
Makefile.in
	- separate doc install/uninstall out into two new targets:
	  install-doc and uninstall-doc
	- make install-doc and uninstall-doc prerequisites of appropriate
	  install and uninstall targets

examples/rl-fgets.c
	- new example from Harold Levy that wraps fgets replacement functions
	  that call readline in a shared library that can be interposed with
	  LD_PRELOAD

				   7/27
				   ----
[readline-5.0 released]

				   11/15
				   -----
examples/rlfe/{ChangeLog,Makefile.in,README,config.h.in,configure,configure.in,extern.h,os.h,pty.c,rlfe.c,screen.h}
	- new version of rlfe, rlfe-0.4, from Per Bothner; now a standalone
	  application

				   11/16
				   -----
shlib/Makefile.in
	- substitute TERMCAP_LIB in from configure

configure.in
	- if SHLIB_LIBS doesn't include a termcap library (curses, ncurses,
	  termcap, termlib), append the value of $TERMCAP_LIB to it

				   11/30
				   -----
configure.in
	- take out change from 11/16; it doesn't work for some systems (e.g.,
	  SunOS 4.x and Solaris 2.6)
	- add support for --enable-purify configure argument
	- pass TERMCAP_LIB in environment when calling shobj-conf

examples/Makefile.in 
	- add support for building examples with purify

				 1/23/2005
				 ---------
configure.in
        - set BUILD_DIR to contain backslashes to escape any spaces in the
          directory name -- this is what make will accept in targets and
          prerequisites, so it's better than trying to use double quotes

				   2/25
				   ----
configure.in
	- change check for sys/ptem.h to include sys/stream.h if present, to
	  avoid the `present but cannot be compiled' messages on Solaris and
	  SVR4.2 (does anyone still use SVR4.2?)

				    5/7
				    ---
configure.in
	- add cross-compiling support from the bash configure.in, which cygwin
	  and mingw have apparently adopted
	- add check for pwd.h, fcntl.h
	- add checks for fcntl, kill system calls
	- add checks for getpw{ent,nam,uid} C library functions
	- pass a compile-time option through to Makefiles if cross-compiling

config.h.in
	- add HAVE_PWD_H for <pwd.h>, HAVE_FCNTL_H for <fcntl.h>
	- add HAVE_FCNTL, HAVE_KILL for respective system calls
	- add HAVE_GETPW{ENT,NAM,UID} for passwd functions

Makefile.in,shlib/Makefile.in
        - @CROSS_COMPILE@ is substituted into DEFS (equal to -DCROSS_COMPILING
	  if bash is being cross-compiled)

				    8/2
				    ---
examples/Makefile.in
	- use $(READLINE_LIB) instead of -lreadline to get around MacOS X 10.4's
	  preference for (incompatible) shared libraries over static libraries
	  in the load path

				   8/11
				   ----
support/shobj-conf
	- new variable: SHLIB_LIBPREF, prefix for shared library name (defaults
	  to `lib'
	- new variable: SHLIB_DLLVERSION, used on Cygwin to set the library
	  version number
	- new variable: SHLIB_DOT, separator character between library name and
	  suffix and version information (defaults to `.')
	- new stanza for cygwin to generate windows-compatible dll

support/shlib-install
	- add new option `-b bindir' for systems like cygwin/windows that
	  require it
	- new stanza for cygwin that installs a dll into $bindir and an implied
	  link library into $libdir

configure.in
	- substitute new variables from shobj-conf

shlib/Makefile.in
	- substitute bindir, SHLIB_DOT, SHLIB_LIBPREF, SHLIB_DLLVERSION from
	  configure
	- pass `-b $(bindir)' to shlib-install for install and uninstall targets
	- library names now use $SHLIB_LIBPREF and $SHLIB_DOT

INSTALL,README
	- document new SHLIB_DOT, SHLIB_LIBPREF, and SHLIB_DLLVERSION variables

				   10/4
				   ----
[readline-5.1-beta1 frozen]

				   12/1
				   ----
configure.in
	- changed release status to `release'

[readline-5.1 frozen]

				   12/9
				   ----
[readline-5.1 released]

				   12/14
				   -----
examples/rlfe/Makefile.in
	- add @LIBS@ to LIBS assignment to pick up extra libraries from
	  configure

				 1/3/2006
				 --------
support/shlib-install
	- Install shared libraries with execute bit set on Linux

				    6/9
				    ---
[readline-5.2-alpha frozen]

				   6/26
				   ----
configure.in
	- set CROSS_COMPILE to the empty string by default, so we don't inherit
	  a random value from the environment

				    7/8
				    ---
[readline-5.2-alpha released]


[readline-5.2-beta released]

				   9/12
				   ----
config.h.in
        - add defines for wcscoll, iswctype, iswupper, iswlower, towupper,
          towlower functions
        - replace define for wctomb with one for wcrtomb
        - add defines for wchar_t, wint_t, wctype_t types

				   10/11
				   -----
[readline-5.2 released]

				   11/9
				   ----
examples/rlfe/{configure.in,Makefile.in,config.h.in,rlfe.c,pty.c}
	- portability fixes from Mike Frysinger <vapier@gentoo.org>

				   11/21
				   -----
Makefile.in
	- add `install-examples' and `uninstall-examples' targets

examples/Makefile.in
	- add correct variables to build examples on Windows
	- add appropriate rules to install and uninstall example sources in
	  $(datadir)/readline 

				   11/27
				   -----
config.h.in
	- move #undef of HAVE_STRCOLL out of config.h.in, since autoconf tries
	  to substitute it based on configure tests

				 4/27/2007
				 ---------
examples/autoconf
	- new directory with example autoconf macros to detect readline and
	  return information about the installed version

				   6/13
				   ----
support/shlib-install
	- changes to support AIX 5.x shared library installation

				 3/20/2008
				 ---------
support/shlib-install
	- add support for NetBSD and Interix shared library installation

				   4/22
				   ----
support/wcwidth.c
	- updated implementation from 2007-05

				   7/18
				   ----
support/shlib-install
	- support for mingw32, contributed by Carlo Bramix <carlo.bramix@libero.it>

				    8/4
				    ---
configure.in
	- changed to readline-6.0

				   8/18
				   ----
support/config.{guess,sub}
	- updated to newer versions from autoconf-2.62 distribution

				 3/5/2009
				 --------
support/shlib-install
	- take a new -V host_vendor argument
	- add ${host_vendor} to string tested in case statement for symlink
	  creation section
	- add support for FreeBSD/gentoo, which uses Linux library naming
	  scheme
	- change FreeBSD symlink rules, since FreeBSD 7+ has only ELF shared
	  libraries.  DragonflyBSD rules are the same.  Fix from Timothy
	  Redaelli <drizzt@gentoo.org>

shlib/Makefile.in
	- add definition of host_vendor, substituted by configure
	- add -V host_vendor argument to all invocations of shlib-install.
	  Fix from Timothy Redaelli <drizzt@gentoo.org>

				   3/10
				   ----
configure.in
	- add call to AC_SYS_LARGEFILE for readdir and largefile support on
	  Linux

config.h.in
	- add _FILE_OFFSET_BITS define

				   4/19
				   ----
Makefile.in
	- add targets for making and installing documentation required by GNU
	  coding standards.  Fix from Joseph Myers <joseph@codesourcery.com>

posixselect.h
	- pick up from bash.  Inspired by Mike Frysinger <vapier@gentoo.org>

				   10/28
				   -----
support/shlib-install
	- decrease the default version of FreeBSD that installs shared libraries
	  to 4.x.  Advice from Peter Jeremy <peterjeremy@acm.org>

				   12/18
				   -----
[readline-6.1-rc1 released]

				   12/23
				   -----
doc/Makefile.in
	- make sure $(topdir) is not ".." before removing all of the formatted
	  documentation in `make distclean'.  $(topdir) is set to `..' if
	  readline is being built in the source directory.  Fixes problem
	  noticed by THOUMIN Damien <thoumin@ipanematech.com>

				   12/29
				   -----
[readline-6.1 frozen]

				 2/5/2010
				 --------
examples/Makefile.in
        - make sure to install example C files using $(srcdir)/$$f in case
          we're building outside the source directory.  Bug report and fix
          from Peter Breitenlohner <peb@mppmu.mpg.de>

				   7/25
				   ----
xfree.c
	- new file with xfree() implementation, moved from xmalloc.c

				   12/28
				   -----
{examples,shlib}/Makefile.in
	- Cygwin-based changes from Eric Blake <eblake@redhat.com>

				 3/26/2011
				 ---------
Makefile.in
	- don't ignore failures when building, installing, or cleaning in
	  the shlib subdirectory.  Sample patch from Mike Frysinger
	  <vapier@gentoo.org>

shlib/Makefile.in
	- split the install and uninstall targets into install-supported and
	  install-unsupported targets that depend on the value of
	  SHLIB_STATUS

				    4/2
				    ---
{,shlib}/Makefile.in
	- add dependency for callback.o/callback.so on xmalloc.h.  From
	  Jan Kratochvil  <jan.kratochvil@redhat.com>

{,doc,examples,shlib}/Makefile.in
	- fix typo: htm target should be html.  From Jan Kratochvil
	  <jan.kratochvil@redhat.com>
	- remove `.' from VPATH.  From Jan Kratochvil
	   <jan.kratochvil@redhat.com>

examples/rlfe/configure.in
	- quote AC_PROGRAM_SOURCE.  From Jan Kratochvil
	   <jan.kratochvil@redhat.com>

				   5/17
				   ----
config.h.in
	- WCWIDTH_BROKEN: new define, picked up from bash, defined on systems
	  where wcwidth returns 1 for Unicode combining characters

				   11/28
				   -----
support/shlib-install
	- make sure solaris2 systems make the installed shared library
	  executable.  ldd warns about it otherwise.  Bug and fix from
	  Tim Mooney <tim.mooney@ndsu.edu>

examples/hist_erasedups.c
	- new example program, shows how to erase duplicates from the history
	  list

examples/hist_purgecmd.c
	- new example program, shows how to remove all entries matching a
	  string or pattern from the history list

				 1/12/2012
				 ---------
colors.[ch],parse-colors.[ch]}
	- new files, part of color infrastructure support

Makefile.in,shlib/Makefile.in
	- arrange to have colors.o and parse-colors.o added to library
	  (static and shared versions)

{configure,config.h}.in
	- check for stdbool.h, define HAVE_STDBOOL_H if found

rldefs.h
	- COLOR_SUPPORT: if defined, compile in colors.c and parse-colors.c
	  for color support

				   1/18
				   ----

{configure,config.h}.in
        - new check: check for AUDIT_USER_TTY defined in <linux/audit.h>,
          define HAVE_DECL_AUDIT_USER_TTY if both are found

				    8/7
				    ---
configure.in
	- AC_CANONICAL_BUILD: call to set the build_xxx variables
	- use $build_os instead of $host_os to decide when DJGPP should run
	  `pwd.exe' to figure out the build directory.  Report and fix from
	  Yao Qi <yao@codesourcery.com>

				   8/29
				   ----
configure.ac
	- new name for configure.in

MANIFEST,Makefile.in
	- configure.in -> configure.ac

				 1/5/2013
				 --------
configure.ac
	- move version number up to 6.3

				   1/31
				   ----
configure.ac
	- use AC_CHECK_TOOL instead of AC_CHECK_PROG to check for ar, since it
	  will find $host-prefixed versions of utilities.  Report and fix from
	  Mike Frysinger <vapier@gentoo.org>

				    3/4
				    ---
Makefile.in
        - PACKAGE_TARNAME, docdir: new variables substituted by autoconf
        - OTHER_DOCS,OTHER_INSTALLED_DOCS: new variables with auxiliary
	  documentation files to be installed into $(docdir)
        - install: add new rule to install $(OTHER_DOCS)
        - uninstall: add new rule to uninstall $(docdir)/$(OTHER_INSTALLED_DOCS)

				   4/29
				   ----
Makefile.in
	- installdirs: make sure to create $(DESTDIR)$(docdir).  Report from
	  <hiroo.hayashi@computer.org>

				 1/27/2014
				 ---------
Makefile.in
	- install-examples: should not depend on `shared', since the examples
	  themselves are not built using shared libraries.  Report from
	  <hiroo.hayashi@computer.org>

support/shobj-conf
	- [from bash] darwin: changed the install_name embedded into the
	  shared library to contain only the major version number, not the
	  minor one. The idea is that the minor versions should all be API/ABI
	  compatible, and it is better to link automatically with the latest
	  one.  Idea from Max Horn <max@quendi.de>

				 2/26/2014
				 ---------
[readline-6.3 released]

				   3/14
				   ----
shlib/Makefile.in
	- fix typo in dependency list for vi_mode.so: it should not depend on
	  just $(topdir). Report and fix from Natanael Copa
	  <ncopa@alpinelinux.org>

				   4/15
				   ----
{.,shlib,examples}/Makefile.in
	- make sure $(INCLUDES) appears before $(CPPFLAGS) in the various
	  CFLAGS assignments so readline looks in its own source and build
	  directories (INCLUDES) before some directories specified by the
	  user or builder (CPPFLAGS).  Report and fix from Max Horn
	  <max@quendi.de>

				    6/2
				    ---
config.h.in
	- use correct symbols: HAVE_STRUCT_DIRENT_D_INO, HAVE_STRUCT_DIRENT_D_FILENO
	  HAVE_STRUCT_DIRENT_D_NAMLEN.  They don't really matter, but they are
	  what posixdir.h looks for.  Report from Ross Burton <ross.burton@intel.com>

				   6/11
				   ----
readline.pc.in
	- new file, config file for pkgconfig. Patch to add from Jirka Klimes
	  <jklimes@redhat.com>

{MANIFEST,configure.ac,Makefile.in}
	- readline.pc: changes to create file for pkgconfig

				   10/13
				   -----
doc/Makefile.in
	- readline.pdf, history.pdf, rluserman.pdf: use texi2dvi --pdf to generate
	  these.  Suggestion from Siep Kroonenberg <siepo@cybercomm.nl>

				   11/29
				   -----
config.h.in
        - HAVE_PSELECT: define if pselect(2) available

configure.ac
        - check for pselect(2), define HAVE_PSELECT if found

				   12/29
				   -----
configure.ac
	- bump version number up to 6.4

				 1/6/2015
				 --------
configure.ac,config.h.in
	- look for ncurses/termcap.h, define HAVE_NCURSES_TERMCAP_H

				   4/20
				   ----
configure.ac
	- add template definitions set by AC_USE_SYSTEM_EXTENSIONS from a report
	  from Andreas Schwab <schwab@linux-m68k.org>

				   4/24
				   ----
configure.ac,config.h.in
	- add check for sys/ioctl.h to AC_CHECK_HEADERS, define HAVE_SYS_IOCTL_H
	  if found

				   5/29
				   ----
configure.ac
	- bump library version to 7.0 because of addition of rl_callback_sigcleanup

				   8/26
				   ----
configure.ac,Makefile.in,examples/Makefile.in
	- remove references to purify

				   11/21
				   -----
configure.ac,config.h.in
	- fnmatch: check for libc function, define HAVE_FNMATCH if found. Now
	  used by vi-mode history search functions

				   7/12
				   ----
Makefile.in,examples/Makefile.in
	- add support for building with address sanitizer, using new target
	  `asan'

				 4/23/2018
				 ---------
configure.ac
	- TERMCAP_PKG_CONFIG_LIB: new variable, defined from TERMCAP_LIB,
	  defaults to termcap

readline.pc.in
	- change Requires.private to use TERMCAP_PKG_CONFIG_LIB instead of
	  hardcoded `tinfo'. Report and fix from Thomas Petazzoni
	  <thomas.petazzoni@bootlin.com>

				    5/4
				    ---
Makefile.in
	- new targets to install and uninstall the `readline.pc' pkgconfig
	  file
	- install-{static,shared}: add install-pc to the list of prereqs
	- uninstall{,-shared}: add uninstall-pc to list of prereqs. Change
	  from Thomas Petazzoni <thomas.petazzoni@bootlin.com>

configure.ac,Makefile.in
	- add new configure option to optionally disable installing the
	  source code examples. From Thomas Petazzoni <thomas.petazzoni@bootlin.com>

				   5/23
				   ----
Makefile.in
	- install-pc: make sure we install readline.pc into an existing
	  pkgconfig directory. Report from ilove zfs <ilovezfs@icloud.com>

				   5/24
				   ----
Makefile.in
	- installdirs: create $(pkgconfigdir) if it doesn't exist


				 4/8/2019
				 --------
readline.pc.in
	- change CFLAGS to include ${includedir} instead of ${includedir}/readline,
	  to support the recommended `#include <readline/readline.h>'. Report
	  and fix from Andrea Bolognani <abologna@redhat.com>

				   5/13
				   ----
configure.ac
	- hpux: add -DTGETENT_BROKEN to LOCAL_CFLAGS

				   8/28
				   ----
configure.ac
	- hpux: add -DTGETFLAG_BROKEN to LOCAL_CFLAGS

				    9/6
				    ---
examples/autoconf/RL_LIB_READLINE_VERSION
	- include <stdlib.h> in the AC_TRY_RUN block to accommodate compilers
	  that treat functions without an existing prototype as fatal errors.
	  Report and fix from Florian Weimer <fweimer@redhat.com>

				   12/13
				   -----
support/shlib-install
	- remove old code for FreeBSD and Dragonfly; they are ELF-only now and
	  can use the same code as Linux. Fix from
	  Baptiste Daroussin <bapt@FreeBSD.org>

				 5/20/2020
				 ---------
configure.ac
	- bumped version number up to 8.1

				   6/15
				   ----
configure.ac
	- add -Wno-parentheses -Wno-format-security to CFLAGS if gcc (or clang)
	  is the compiler

				   10/29
				   -----
configure.ac
	- --enable-bracketed-paste-default: new invocation option, toggles the
	  default value of enable-bracketed-paste (on by default)

INSTALL
	- document new --enable-bracketed-paste-default configure option
