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