# GNU Libtool

1. Introduction
===============

[GNU Libtool][libtool] is a generic library support script.
[Libtool][] hides the complexity of using shared libraries behind a
consistent, portable interface.

Libtool's home page is:

    https://www.gnu.org/software/libtool/libtool.html

See the file [NEWS][] for a description of recent changes to Libtool.

Please note that you can build GNU Libtool from this directory using a
vendor Make program as long as this is an official release tarball;
otherwise you will need GNU Make for sane VPATH support.  See the file
[INSTALL][] for complete generic instructions on how to build and install
Libtool.  Also, see the file [doc/notes.txt][notes] for some platform-
specific information.

See the info node (libtool)Tested Platforms. (or the file
[doc/PLATFORMS][platforms]) for a list of platforms that Libtool already
supports.

Please try it on all the platforms you have access to:

 * If it builds and passes the test suite (`gmake check`), please send
   a short note to the [libtool mailing list][libtool list] with a
   subject line including the string `[PLATFORM]`, and containing the
   details from the end of `./libtool --help` in the body.
 * Otherwise, see _Reporting Bugs_ below for how to help us fix any
   problems you discover.

To use Libtool, add the new generic library building commands to your
`Makefile`, `Makefile.in`, or `Makefile.am`.  See the documentation for
details.

[install]: https://git.savannah.gnu.org/cgit/automake.git/tree/INSTALL
[libtool]: https://www.gnu.org/s/libtool
[libtool list]: mailto:libtool@gnu.org
[news]: https://git.savannah.gnu.org/cgit/libtool.git/tree/NEWS
[notes]: https://git.savannah.gnu.org/cgit/libtool.git/tree/doc/notes.texi
[platforms]: https://git.savannah.gnu.org/cgit/libtool.git/tree/doc/PLATFORMS


2. Reporting Bugs
=================

If this distribution doesn't work for you, before you report the
problem, at least try upgrading to the latest released version first,
and see whether the issue persists.  If you feel able, you can also
check whether the issue has been fixed in the development sources for
the next release (see _Obtaining the Latest Sources_ below).

Once you've determined that your bug is still not fixed in the latest
version, please send a full report to the libtool [bug mailing list][],
including:

  1. the information from the end of the help message given by
     `./libtool --help`, and the verbose output of any failed tests
     (see _The Test Suites_ immediately below);
  2. complete instructions for how to reproduce your bug, along with
     the results you were expecting, and how they differ from what you
     actually see;
  3. a workaround or full fix for the bug, if you have it;
  4. a copy of `tests/testsuite.log` if you are experiencing failures
     in the Autotest testsuite.
  5. new test cases for the testsuite that demonstrate the bug are
     especially welcome, and will help to ensure that future releases
     don't reintroduce the problem - if you're not able to write a
     complete testsuite case, a simple standalone shell script is
     usually good enough to help us write a test for you.

If you have any other suggestions, or if you wish to port Libtool to a
new platform, please send email to the [mailing list][libtool list].

Please note that if you send us an non-trivial code for inclusion in a
future release, we may ask you for a copyright assignment (for brief
details see the 'Copyright Assignment' section on our
[Contributing][contribute] webpage.

[bug mailing list]: mailto:bug-libtool@gnu.org
[contribute]: https://www.gnu.org/software/libtool/contribute.html


3. The Test Suite
=================

Libtool comes an integrated sets of tests to check that your build
is sane.  You can run like this, assuming that `gmake` refers to GNU
make:

    gmake check

The new, Autotest-driven testsuite is documented in:

    info Autoconf 'testsuite Invocation'

but simple help may also be obtained through:

    gmake check TESTSUITEFLAGS='--help'

For verbose output, add the flag '-v', for running only a subset of the
independent tests, merely specify them by number or by keyword, both of
which are displayed with the '--list' flag.  For example, the 'libtool'
keyword is used for the tests that exercise only this script.  So it is
possible to test an installed script, possibly from a different Libtool
release, with:

    gmake check \
        TESTSUITEFLAGS="-k libtool LIBTOOL=/path/to/libtool"

Some tests, like the one exercising `max_cmd_len` limits, make use of
this to invoke the testsuite recursively on a subset of tests.  For these
tests, the variable `INNER_TESTSUITEFLAGS` may be used.  It will be
expanded right after the `-k libtool`, without separating whitespace, so
that further limiting of the recursive set of tests is possible.  For
example, to run only the template tests within the `max_cmd_len`, use:

    gmake check TESTSUITEFLAGS="-v -x -k max_cmd_len \
                INNER_TESTSUITEFLAGS=',template -v -x'"

If you wish to report test failures to the libtool list, you need to
send the file `tests/testsuite.log` to the [bug mailing list][].


4. Obtaining the Latest Sources
===============================

* With the exception of ancient releases, all official GNU Libtool
  releases have a detached GPG signature file.  With this you can verify
  that the corresponding file (i.e. without the `.sig` suffix) is the
  same file that was released by the owner of it's GPG key ID.  First,
  be sure to download both the .sig file and the corresponding release,
  then run a command like this:

      gpg --verify libtool-x.y.z.tar.gz.sig

  If that command fails because you don't have the required public key,
  then run this command to import it:

      gpg --keyserver keys.gnupg.net --recv-keys 2983D606

  and then rerun the `gpg --verify` command.

* Official stable releases of GNU Libtool, along with these detached
  signature files are available from:

      ftp://ftp.gnu.org/gnu/libtool

  To reduce load on the main server, please use one of the mirrors
  listed at:

      https://www.gnu.org/order/ftp.html

* Alpha quality pre-releases of GNU Libtool, also with detached
  signature files are available from:

      ftp://alpha.gnu.org/gnu/libtool

  and some of the mirrors listed at:

      https://www.gnu.org/order/ftp.html

* The master libtool repository is stored in git.

  Development and testing is primarily done on the 'development' git
  branch. 'master' is used for release ready code. Periodically,
  commits are cherry-picked from 'development' to 'master'.

  If you are a member of the savannah group for GNU Libtool, a writable
  copy of the libtool repository can be obtained by:

      git clone <savannah-user>@git.sv.gnu.org:/srv/git/libtool.git

  If you are behind a firewall that blocks the git protocol, you may
  find it useful to use

      git config --global url.https://git.sv.gnu.org/r/.insteadof \
        git://git.sv.gnu.org/

  to force git to transparently rewrite all savannah git references to
  use http.

  If you are not a member of the savannah group for GNU Libtool, you can
  still fetch a read-only copy with either:

      git clone git://git.sv.gnu.org/libtool.git

  or using the CVS pserver protocol:

      cvs -d:pserver:anonymous@pserver.git.sv.gnu.org:/srv/git/libtool.git \
          co -d libtool HEAD

* Before you can build from git, you need to bootstrap.  This requires:
  - Autoconf 2.64 or later
  - Automake 1.11.1 or later
  - Help2man 1.29 or later
  - Xz 4.999.8beta or later (from [tukaani.org](https://tukaani.org/xz))
  - Texinfo 4.8 or later
  - Any prerequisites of the above (such as m4, perl, tex)

  Note that these bootstrapping dependencies are much stricter than
  those required to use a distributed release for your own packages.
  After installation, GNU Libtool is designed to work either standalone,
  or optionally with:
  - Autoconf 2.59 or later
  - Automake 1.9.6 or later

* The `bootstrap` script sets up the source directory for you to hack.


5. Version Numbering
====================

People have complained that they find the version numbering scheme under
which libtool is released confusing... so we've changed it!

It works like this:

    <major-number>.<minor-number>

Releases with a **major-number** less than 1 were not yet feature
complete.  Releases with a **major-number** of 1 used the old numbering
scheme that everyone disliked so much.  Releases with a **major-number**
of 2 us the new scheme described here.  If libtool ever undergoes a
major rewrite or substantial restructuring, the **major-number** will be
incremented again.

If we make a patch release to fix bugs in a stable release, we use a
third number, so:

    2.4.2

If we make an alpha quality prerelease, we use a fourth number for the
number of changsets applied since the version it's based on:

    2.4.2.418

And finally, if you build an unreleased version it will have a short git
revision hash string in hexadecimal appended to all of that:

    2.4.2.418.3-30eaa

--
  Copyright (C) 2004-2010, 2015-2019, 2021-2026 Free Software
  Foundation, Inc.

  Written by Gary V. Vaughan, 2004

  This file is part of GNU Libtool.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.  This file is offered as-is,
without warranty of any kind.


Local Variables:
mode: text
fill-column: 72
End:
vim:tw=72
