This is an alpha testing release of GNU Libtool.  To get the latest
CVS version of this package, do:

  cvs -d :pserver:anoncvs@subversions.gnu.org:/home/cvs login
  [Hit return when prompted for the password]
  cvs -d :pserver:anoncvs@subversions.gnu.org:/home/cvs checkout libtool
  cd libtool
  ./bootstrap

The `bootstrap' script sets up the source directory for you to hack. To
use it, you need a recent (maybe yet to be released) version of both
Autoconf and Automake.

If you have any suggestions or bug reports, or you wish to port
libtool to a new platform, please send electronic mail to the libtool
mailing list <libtool@gnu.org> or bug reports to <bug-libtool@gnu.org>.
Don't forget to mention the version of libtool that you are currently
using (by typing `ltconfig --version').

================================================================
= Administrivia

* If you incorporate a change from somebody on the net:
  If it is a large change, you must make sure they have signed the
  appropriate paperwork, and be sure to add their name and email
  address to THANKS

* If a change fixes a test, mention the test in the ChangeLog entry.

* If somebody reports a new bug, mention his name in the ChangeLog entry
  and in the test case you write.

* The correct response to most actual bugs is to write a new test case
  which demonstrates the bug.  Then fix the bug, re-run the test suite,
  and check everything in.

* Some files in the libtool package are not owned by libtool.  These
  files should never be edited here.  These files are COPYING, INSTALL,
  config.guess, config.sub, install-sh, mdate-sh, mkinstalldirs,
  texinfo.tex.

* Changes other than bug fixes must be mentioned in NEWS

================================================================
= Test suite

* Use "make check" liberally, on as many platforms as you can.  Use as
  many compilers and linkers you can.


================================================================
= Release procedure

* Fetch new versions of the files that are maintained by the FSF.
  config.guess and config.sub are available via ftp from
  ftp://ftp.gnu.org/gnu/config/, and texinfo.tex is available from
  ftp://ftp.gnu.org/gnu/GNUinfo/.

* Update NEWS.

* Update the version number in configure.ac.
  (The idea is that every other alpha number will be a net release.
  The repository will always have its own "odd" number so we can easily
  distinguish net and repo versions.)

* Configure, build, and install.

* Commit

* Run `make cvs-dist' which will tag the tree with release-maj-min<alpha>.

* Run `make cvs-diff' which will create a diff file against the previous
  release tag (set OLDVERSION=min.maj<alpha> in the environment beforehand
  if necessary).

* Download a copy of the previous release tarball and generate an
  xdelta with:

    xdelta delta libtool-<prev>.tar.gz libtool-<version>.tar.gz > \
    libtool-<prev>-<version>.tar.xdp.gz'

* Upload release tarball, diff file and xdelta file 
  ftp://fencepost.gnu.org/~ftp/gnu/libtool and send announcement to
  libtool@gnu.org.

* If not an alpha, announcement must also go to info-gnu@gnu.org, and an
  upload request be sent to ftp-upload@gnu.org requesting files be transferred
  from ftp://alpha.gnu.org/gnu/libtool to ftp://ftp.gnu.org/gnu/libtool.

* Update version number in configure.ac to next alpha number.

* Commit.
