This is doc/libtool.info, produced by makeinfo version 4.13 from
./doc/libtool.texi.

INFO-DIR-SECTION GNU programming tools
START-INFO-DIR-ENTRY
* Libtool: (libtool).           Generic shared library support script.
END-INFO-DIR-ENTRY

INFO-DIR-SECTION Individual utilities
START-INFO-DIR-ENTRY
* libtool-invocation: (libtool)Invoking libtool.
                                                Running the `libtool' script.
* libtoolize: (libtool)Invoking libtoolize.     Adding libtool support.
END-INFO-DIR-ENTRY

   This file documents GNU Libtool 2.4.2

   Copyright (C) 1996-2011 Free Software Foundation, Inc.

   Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
Texts.  A copy of the license is included in the section entitled "GNU
Free Documentation License".


File: libtool.info,  Node: GNU Free Documentation License,  Next: Combined Index,  Prev: Maintaining,  Up: Top

Appendix A GNU Free Documentation License
*****************************************

                     Version 1.3, 3 November 2008

     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
     `http://fsf.org/'

     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

  0. PREAMBLE

     The purpose of this License is to make a manual, textbook, or other
     functional and useful document "free" in the sense of freedom: to
     assure everyone the effective freedom to copy and redistribute it,
     with or without modifying it, either commercially or
     noncommercially.  Secondarily, this License preserves for the
     author and publisher a way to get credit for their work, while not
     being considered responsible for modifications made by others.

     This License is a kind of "copyleft", which means that derivative
     works of the document must themselves be free in the same sense.
     It complements the GNU General Public License, which is a copyleft
     license designed for free software.

     We have designed this License in order to use it for manuals for
     free software, because free software needs free documentation: a
     free program should come with manuals providing the same freedoms
     that the software does.  But this License is not limited to
     software manuals; it can be used for any textual work, regardless
     of subject matter or whether it is published as a printed book.
     We recommend this License principally for works whose purpose is
     instruction or reference.

  1. APPLICABILITY AND DEFINITIONS

     This License applies to any manual or other work, in any medium,
     that contains a notice placed by the copyright holder saying it
     can be distributed under the terms of this License.  Such a notice
     grants a world-wide, royalty-free license, unlimited in duration,
     to use that work under the conditions stated herein.  The
     "Document", below, refers to any such manual or work.  Any member
     of the public is a licensee, and is addressed as "you".  You
     accept the license if you copy, modify or distribute the work in a
     way requiring permission under copyright law.

     A "Modified Version" of the Document means any work containing the
     Document or a portion of it, either copied verbatim, or with
     modifications and/or translated into another language.

     A "Secondary Section" is a named appendix or a front-matter section
     of the Document that deals exclusively with the relationship of the
     publishers or authors of the Document to the Document's overall
     subject (or to related matters) and contains nothing that could
     fall directly within that overall subject.  (Thus, if the Document
     is in part a textbook of mathematics, a Secondary Section may not
     explain any mathematics.)  The relationship could be a matter of
     historical connection with the subject or with related matters, or
     of legal, commercial, philosophical, ethical or political position
     regarding them.

     The "Invariant Sections" are certain Secondary Sections whose
     titles are designated, as being those of Invariant Sections, in
     the notice that says that the Document is released under this
     License.  If a section does not fit the above definition of
     Secondary then it is not allowed to be designated as Invariant.
     The Document may contain zero Invariant Sections.  If the Document
     does not identify any Invariant Sections then there are none.

     The "Cover Texts" are certain short passages of text that are
     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
     that says that the Document is released under this License.  A
     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
     be at most 25 words.

     A "Transparent" copy of the Document means a machine-readable copy,
     represented in a format whose specification is available to the
     general public, that is suitable for revising the document
     straightforwardly with generic text editors or (for images
     composed of pixels) generic paint programs or (for drawings) some
     widely available drawing editor, and that is suitable for input to
     text formatters or for automatic translation to a variety of
     formats suitable for input to text formatters.  A copy made in an
     otherwise Transparent file format whose markup, or absence of
     markup, has been arranged to thwart or discourage subsequent
     modification by readers is not Transparent.  An image format is
     not Transparent if used for any substantial amount of text.  A
     copy that is not "Transparent" is called "Opaque".

     Examples of suitable formats for Transparent copies include plain
     ASCII without markup, Texinfo input format, LaTeX input format,
     SGML or XML using a publicly available DTD, and
     standard-conforming simple HTML, PostScript or PDF designed for
     human modification.  Examples of transparent image formats include
     PNG, XCF and JPG.  Opaque formats include proprietary formats that
     can be read and edited only by proprietary word processors, SGML or
     XML for which the DTD and/or processing tools are not generally
     available, and the machine-generated HTML, PostScript or PDF
     produced by some word processors for output purposes only.

     The "Title Page" means, for a printed book, the title page itself,
     plus such following pages as are needed to hold, legibly, the
     material this License requires to appear in the title page.  For
     works in formats which do not have any title page as such, "Title
     Page" means the text near the most prominent appearance of the
     work's title, preceding the beginning of the body of the text.

     The "publisher" means any person or entity that distributes copies
     of the Document to the public.

     A section "Entitled XYZ" means a named subunit of the Document
     whose title either is precisely XYZ or contains XYZ in parentheses
     following text that translates XYZ in another language.  (Here XYZ
     stands for a specific section name mentioned below, such as
     "Acknowledgements", "Dedications", "Endorsements", or "History".)
     To "Preserve the Title" of such a section when you modify the
     Document means that it remains a section "Entitled XYZ" according
     to this definition.

     The Document may include Warranty Disclaimers next to the notice
     which states that this License applies to the Document.  These
     Warranty Disclaimers are considered to be included by reference in
     this License, but only as regards disclaiming warranties: any other
     implication that these Warranty Disclaimers may have is void and
     has no effect on the meaning of this License.

  2. VERBATIM COPYING

     You may copy and distribute the Document in any medium, either
     commercially or noncommercially, provided that this License, the
     copyright notices, and the license notice saying this License
     applies to the Document are reproduced in all copies, and that you
     add no other conditions whatsoever to those of this License.  You
     may not use technical measures to obstruct or control the reading
     or further copying of the copies you make or distribute.  However,
     you may accept compensation in exchange for copies.  If you
     distribute a large enough number of copies you must also follow
     the conditions in section 3.

     You may also lend copies, under the same conditions stated above,
     and you may publicly display copies.

  3. COPYING IN QUANTITY

     If you publish printed copies (or copies in media that commonly
     have printed covers) of the Document, numbering more than 100, and
     the Document's license notice requires Cover Texts, you must
     enclose the copies in covers that carry, clearly and legibly, all
     these Cover Texts: Front-Cover Texts on the front cover, and
     Back-Cover Texts on the back cover.  Both covers must also clearly
     and legibly identify you as the publisher of these copies.  The
     front cover must present the full title with all words of the
     title equally prominent and visible.  You may add other material
     on the covers in addition.  Copying with changes limited to the
     covers, as long as they preserve the title of the Document and
     satisfy these conditions, can be treated as verbatim copying in
     other respects.

     If the required texts for either cover are too voluminous to fit
     legibly, you should put the first ones listed (as many as fit
     reasonably) on the actual cover, and continue the rest onto
     adjacent pages.

     If you publish or distribute Opaque copies of the Document
     numbering more than 100, you must either include a
     machine-readable Transparent copy along with each Opaque copy, or
     state in or with each Opaque copy a computer-network location from
     which the general network-using public has access to download
     using public-standard network protocols a complete Transparent
     copy of the Document, free of added material.  If you use the
     latter option, you must take reasonably prudent steps, when you
     begin distribution of Opaque copies in quantity, to ensure that
     this Transparent copy will remain thus accessible at the stated
     location until at least one year after the last time you
     distribute an Opaque copy (directly or through your agents or
     retailers) of that edition to the public.

     It is requested, but not required, that you contact the authors of
     the Document well before redistributing any large number of
     copies, to give them a chance to provide you with an updated
     version of the Document.

  4. MODIFICATIONS

     You may copy and distribute a Modified Version of the Document
     under the conditions of sections 2 and 3 above, provided that you
     release the Modified Version under precisely this License, with
     the Modified Version filling the role of the Document, thus
     licensing distribution and modification of the Modified Version to
     whoever possesses a copy of it.  In addition, you must do these
     things in the Modified Version:

       A. Use in the Title Page (and on the covers, if any) a title
          distinct from that of the Document, and from those of
          previous versions (which should, if there were any, be listed
          in the History section of the Document).  You may use the
          same title as a previous version if the original publisher of
          that version gives permission.

       B. List on the Title Page, as authors, one or more persons or
          entities responsible for authorship of the modifications in
          the Modified Version, together with at least five of the
          principal authors of the Document (all of its principal
          authors, if it has fewer than five), unless they release you
          from this requirement.

       C. State on the Title page the name of the publisher of the
          Modified Version, as the publisher.

       D. Preserve all the copyright notices of the Document.

       E. Add an appropriate copyright notice for your modifications
          adjacent to the other copyright notices.

       F. Include, immediately after the copyright notices, a license
          notice giving the public permission to use the Modified
          Version under the terms of this License, in the form shown in
          the Addendum below.

       G. Preserve in that license notice the full lists of Invariant
          Sections and required Cover Texts given in the Document's
          license notice.

       H. Include an unaltered copy of this License.

       I. Preserve the section Entitled "History", Preserve its Title,
          and add to it an item stating at least the title, year, new
          authors, and publisher of the Modified Version as given on
          the Title Page.  If there is no section Entitled "History" in
          the Document, create one stating the title, year, authors,
          and publisher of the Document as given on its Title Page,
          then add an item describing the Modified Version as stated in
          the previous sentence.

       J. Preserve the network location, if any, given in the Document
          for public access to a Transparent copy of the Document, and
          likewise the network locations given in the Document for
          previous versions it was based on.  These may be placed in
          the "History" section.  You may omit a network location for a
          work that was published at least four years before the
          Document itself, or if the original publisher of the version
          it refers to gives permission.

       K. For any section Entitled "Acknowledgements" or "Dedications",
          Preserve the Title of the section, and preserve in the
          section all the substance and tone of each of the contributor
          acknowledgements and/or dedications given therein.

       L. Preserve all the Invariant Sections of the Document,
          unaltered in their text and in their titles.  Section numbers
          or the equivalent are not considered part of the section
          titles.

       M. Delete any section Entitled "Endorsements".  Such a section
          may not be included in the Modified Version.

       N. Do not retitle any existing section to be Entitled
          "Endorsements" or to conflict in title with any Invariant
          Section.

       O. Preserve any Warranty Disclaimers.

     If the Modified Version includes new front-matter sections or
     appendices that qualify as Secondary Sections and contain no
     material copied from the Document, you may at your option
     designate some or all of these sections as invariant.  To do this,
     add their titles to the list of Invariant Sections in the Modified
     Version's license notice.  These titles must be distinct from any
     other section titles.

     You may add a section Entitled "Endorsements", provided it contains
     nothing but endorsements of your Modified Version by various
     parties--for example, statements of peer review or that the text
     has been approved by an organization as the authoritative
     definition of a standard.

     You may add a passage of up to five words as a Front-Cover Text,
     and a passage of up to 25 words as a Back-Cover Text, to the end
     of the list of Cover Texts in the Modified Version.  Only one
     passage of Front-Cover Text and one of Back-Cover Text may be
     added by (or through arrangements made by) any one entity.  If the
     Document already includes a cover text for the same cover,
     previously added by you or by arrangement made by the same entity
     you are acting on behalf of, you may not add another; but you may
     replace the old one, on explicit permission from the previous
     publisher that added the old one.

     The author(s) and publisher(s) of the Document do not by this
     License give permission to use their names for publicity for or to
     assert or imply endorsement of any Modified Version.

  5. COMBINING DOCUMENTS

     You may combine the Document with other documents released under
     this License, under the terms defined in section 4 above for
     modified versions, provided that you include in the combination
     all of the Invariant Sections of all of the original documents,
     unmodified, and list them all as Invariant Sections of your
     combined work in its license notice, and that you preserve all
     their Warranty Disclaimers.

     The combined work need only contain one copy of this License, and
     multiple identical Invariant Sections may be replaced with a single
     copy.  If there are multiple Invariant Sections with the same name
     but different contents, make the title of each such section unique
     by adding at the end of it, in parentheses, the name of the
     original author or publisher of that section if known, or else a
     unique number.  Make the same adjustment to the section titles in
     the list of Invariant Sections in the license notice of the
     combined work.

     In the combination, you must combine any sections Entitled
     "History" in the various original documents, forming one section
     Entitled "History"; likewise combine any sections Entitled
     "Acknowledgements", and any sections Entitled "Dedications".  You
     must delete all sections Entitled "Endorsements."

  6. COLLECTIONS OF DOCUMENTS

     You may make a collection consisting of the Document and other
     documents released under this License, and replace the individual
     copies of this License in the various documents with a single copy
     that is included in the collection, provided that you follow the
     rules of this License for verbatim copying of each of the
     documents in all other respects.

     You may extract a single document from such a collection, and
     distribute it individually under this License, provided you insert
     a copy of this License into the extracted document, and follow
     this License in all other respects regarding verbatim copying of
     that document.

  7. AGGREGATION WITH INDEPENDENT WORKS

     A compilation of the Document or its derivatives with other
     separate and independent documents or works, in or on a volume of
     a storage or distribution medium, is called an "aggregate" if the
     copyright resulting from the compilation is not used to limit the
     legal rights of the compilation's users beyond what the individual
     works permit.  When the Document is included in an aggregate, this
     License does not apply to the other works in the aggregate which
     are not themselves derivative works of the Document.

     If the Cover Text requirement of section 3 is applicable to these
     copies of the Document, then if the Document is less than one half
     of the entire aggregate, the Document's Cover Texts may be placed
     on covers that bracket the Document within the aggregate, or the
     electronic equivalent of covers if the Document is in electronic
     form.  Otherwise they must appear on printed covers that bracket
     the whole aggregate.

  8. TRANSLATION

     Translation is considered a kind of modification, so you may
     distribute translations of the Document under the terms of section
     4.  Replacing Invariant Sections with translations requires special
     permission from their copyright holders, but you may include
     translations of some or all Invariant Sections in addition to the
     original versions of these Invariant Sections.  You may include a
     translation of this License, and all the license notices in the
     Document, and any Warranty Disclaimers, provided that you also
     include the original English version of this License and the
     original versions of those notices and disclaimers.  In case of a
     disagreement between the translation and the original version of
     this License or a notice or disclaimer, the original version will
     prevail.

     If a section in the Document is Entitled "Acknowledgements",
     "Dedications", or "History", the requirement (section 4) to
     Preserve its Title (section 1) will typically require changing the
     actual title.

  9. TERMINATION

     You may not copy, modify, sublicense, or distribute the Document
     except as expressly provided under this License.  Any attempt
     otherwise to copy, modify, sublicense, or distribute it is void,
     and will automatically terminate your rights under this License.

     However, if you cease all violation of this License, then your
     license from a particular copyright holder is reinstated (a)
     provisionally, unless and until the copyright holder explicitly
     and finally terminates your license, and (b) permanently, if the
     copyright holder fails to notify you of the violation by some
     reasonable means prior to 60 days after the cessation.

     Moreover, your license from a particular copyright holder is
     reinstated permanently if the copyright holder notifies you of the
     violation by some reasonable means, this is the first time you have
     received notice of violation of this License (for any work) from
     that copyright holder, and you cure the violation prior to 30 days
     after your receipt of the notice.

     Termination of your rights under this section does not terminate
     the licenses of parties who have received copies or rights from
     you under this License.  If your rights have been terminated and
     not permanently reinstated, receipt of a copy of some or all of
     the same material does not give you any rights to use it.

 10. FUTURE REVISIONS OF THIS LICENSE

     The Free Software Foundation may publish new, revised versions of
     the GNU Free Documentation License from time to time.  Such new
     versions will be similar in spirit to the present version, but may
     differ in detail to address new problems or concerns.  See
     `http://www.gnu.org/copyleft/'.

     Each version of the License is given a distinguishing version
     number.  If the Document specifies that a particular numbered
     version of this License "or any later version" applies to it, you
     have the option of following the terms and conditions either of
     that specified version or of any later version that has been
     published (not as a draft) by the Free Software Foundation.  If
     the Document does not specify a version number of this License,
     you may choose any version ever published (not as a draft) by the
     Free Software Foundation.  If the Document specifies that a proxy
     can decide which future versions of this License can be used, that
     proxy's public statement of acceptance of a version permanently
     authorizes you to choose that version for the Document.

 11. RELICENSING

     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
     World Wide Web server that publishes copyrightable works and also
     provides prominent facilities for anybody to edit those works.  A
     public wiki that anybody can edit is an example of such a server.
     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
     site means any set of copyrightable works thus published on the MMC
     site.

     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
     license published by Creative Commons Corporation, a not-for-profit
     corporation with a principal place of business in San Francisco,
     California, as well as future copyleft versions of that license
     published by that same organization.

     "Incorporate" means to publish or republish a Document, in whole or
     in part, as part of another Document.

     An MMC is "eligible for relicensing" if it is licensed under this
     License, and if all works that were first published under this
     License somewhere other than this MMC, and subsequently
     incorporated in whole or in part into the MMC, (1) had no cover
     texts or invariant sections, and (2) were thus incorporated prior
     to November 1, 2008.

     The operator of an MMC Site may republish an MMC contained in the
     site under CC-BY-SA on the same site at any time before August 1,
     2009, provided the MMC is eligible for relicensing.


ADDENDUM: How to use this License for your documents
====================================================

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:

       Copyright (C)  YEAR  YOUR NAME.
       Permission is granted to copy, distribute and/or modify this document
       under the terms of the GNU Free Documentation License, Version 1.3
       or any later version published by the Free Software Foundation;
       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
       Texts.  A copy of the license is included in the section entitled ``GNU
       Free Documentation License''.

   If you have Invariant Sections, Front-Cover Texts and Back-Cover
Texts, replace the "with...Texts." line with this:

         with the Invariant Sections being LIST THEIR TITLES, with
         the Front-Cover Texts being LIST, and with the Back-Cover Texts
         being LIST.

   If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.

   If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License, to
permit their use in free software.


File: libtool.info,  Node: Combined Index,  Prev: GNU Free Documentation License,  Up: Top

Combined Index
**************

 [index ]
* Menu:

* -no-suppress, libtool compile mode option: Creating object files.
                                                              (line  92)
* -weak option:                          Linking with dlopened modules.
                                                              (line  94)
* .la files:                             Linking libraries.   (line  24)
* .libs subdirectory:                    Linking libraries.   (line  77)
* .lo files:                             Creating object files.
                                                              (line  28)
* AC_CONFIG_AUX_DIR:                     Invoking libtoolize. (line 157)
* AC_CONFIG_MACRO_DIR:                   Invoking libtoolize. (line 136)
* AC_DISABLE_FAST_INSTALL:               LT_INIT.             (line 185)
* AC_DISABLE_SHARED:                     LT_INIT.             (line 189)
* AC_DISABLE_STATIC:                     LT_INIT.             (line 206)
* AC_ENABLE_SHARED:                      LT_INIT.             (line 197)
* AC_ENABLE_STATIC:                      LT_INIT.             (line 214)
* AC_LIBLTDL_CONVENIENCE:                Distributing libltdl.
                                                              (line 302)
* AC_LIBLTDL_INSTALLABLE:                Distributing libltdl.
                                                              (line 297)
* AC_LIBTOOL_DLOPEN:                     LT_INIT.             (line 177)
* AC_LIBTOOL_WIN32_DLL:                  LT_INIT.             (line 181)
* AC_PROG_LIBTOOL:                       LT_INIT.             (line  22)
* AC_WITH_LTDL:                          Distributing libltdl.
                                                              (line  42)
* aclocal:                               LT_INIT.             (line 322)
* allow_undefined_flag:                  libtool script contents.
                                                              (line  76)
* always_export_symbols:                 libtool script contents.
                                                              (line  83)
* AM_DISABLE_SHARED:                     LT_INIT.             (line 190)
* AM_DISABLE_STATIC:                     LT_INIT.             (line 207)
* AM_ENABLE_SHARED:                      LT_INIT.             (line 198)
* AM_ENABLE_STATIC:                      LT_INIT.             (line 215)
* AM_PROG_LIBTOOL:                       LT_INIT.             (line  23)
* application-level dynamic linking <1>: Dlopened modules.    (line   6)
* application-level dynamic linking:     Using libltdl.       (line   6)
* ar:                                    Linking libraries.   (line   6)
* AR:                                    libtool script contents.
                                                              (line  30)
* archive_cmds:                          libtool script contents.
                                                              (line  88)
* archive_expsym_cmds:                   libtool script contents.
                                                              (line  89)
* archiver_list_spec:                    libtool script contents.
                                                              (line  94)
* AS:                                    LT_INIT.             (line 278)
* autoconf traces:                       Trace interface.     (line   6)
* avoiding shared libraries:             Static-only libraries.
                                                              (line   6)
* bug reports:                           Reporting bugs.      (line   6)
* buggy system linkers:                  Linking executables. (line  11)
* bugs, subtle ones caused by buggy linkers: Linking executables.
                                                              (line  16)
* build:                                 libtool script contents.
                                                              (line 118)
* build_alias:                           libtool script contents.
                                                              (line 119)
* build_libtool_libs:                    libtool script contents.
                                                              (line 124)
* build_old_libs:                        libtool script contents.
                                                              (line 128)
* build_os:                              libtool script contents.
                                                              (line 120)
* C header files, portable:              C header files.      (line   6)
* C++, pitfalls:                         C++ libraries.       (line   6)
* C++, using:                            Other languages.     (line   6)
* C, not using:                          Other languages.     (line   6)
* CC <1>:                                LT_INIT.             (line 228)
* CC:                                    libtool script contents.
                                                              (line  33)
* cdemo-conf.test:                       Test descriptions.   (line  21)
* cdemo-exec.test:                       Test descriptions.   (line  21)
* cdemo-make.test:                       Test descriptions.   (line  21)
* cdemo-shared-exec.test:                Test descriptions.   (line  21)
* cdemo-shared-make.test:                Test descriptions.   (line  21)
* cdemo-shared.test:                     Test descriptions.   (line  21)
* cdemo-static-exec.test:                Test descriptions.   (line  21)
* cdemo-static-make.test:                Test descriptions.   (line  21)
* cdemo-static.test:                     Test descriptions.   (line  21)
* cdemo-undef-exec.test:                 Test descriptions.   (line  21)
* cdemo-undef-make.test:                 Test descriptions.   (line  21)
* cdemo-undef.test:                      Test descriptions.   (line  21)
* CFLAGS:                                LT_INIT.             (line 232)
* check-interactive:                     Test descriptions.   (line 334)
* check-noninteractive:                  Test descriptions.   (line 334)
* clean mode:                            Clean mode.          (line   6)
* command options, libtool:              Invoking libtool.    (line   6)
* command options, libtoolize:           Invoking libtoolize. (line   6)
* compile mode:                          Compile mode.        (line   6)
* compiler_c_o:                          libtool script contents.
                                                              (line 132)
* compiler_needs_object:                 libtool script contents.
                                                              (line 136)
* compiling object files:                Creating object files.
                                                              (line   6)
* complexity of library systems:         Postmortem.          (line  11)
* config.guess:                          Distributing.        (line  10)
* config.sub:                            Distributing.        (line  13)
* configuring libtool:                   Configuring.         (line   6)
* convenience libraries:                 Static libraries.    (line   6)
* CPPFLAGS:                              LT_INIT.             (line 237)
* cross compile:                         Cross compiling.     (line   6)
* Cygwin to MinGW Cross:                 Cygwin to MinGW Cross.
                                                              (line   6)
* debugging libraries:                   Static-only libraries.
                                                              (line   6)
* definition of libraries:               Libtool paradigm.    (line  11)
* demo-conf.test:                        Test descriptions.   (line  66)
* demo-deplibs.test:                     Test descriptions.   (line  84)
* demo-exec.test:                        Test descriptions.   (line  66)
* demo-hardcode.test:                    Test descriptions.   (line  90)
* demo-inst.test:                        Test descriptions.   (line  66)
* demo-make.test:                        Test descriptions.   (line  66)
* demo-nofast-exec.test:                 Test descriptions.   (line  66)
* demo-nofast-inst.test:                 Test descriptions.   (line  66)
* demo-nofast-make.test:                 Test descriptions.   (line  66)
* demo-nofast-unst.test:                 Test descriptions.   (line  66)
* demo-nofast.test:                      Test descriptions.   (line  66)
* demo-noinst-link.test:                 Test descriptions.   (line 104)
* demo-nopic-exec.test:                  Test descriptions.   (line  66)
* demo-nopic-make.test:                  Test descriptions.   (line  66)
* demo-nopic.test:                       Test descriptions.   (line  66)
* demo-pic-exec.test:                    Test descriptions.   (line  66)
* demo-pic-make.test:                    Test descriptions.   (line  66)
* demo-pic.test:                         Test descriptions.   (line  66)
* demo-relink.test:                      Test descriptions.   (line  99)
* demo-shared-exec.test:                 Test descriptions.   (line  66)
* demo-shared-inst.test:                 Test descriptions.   (line  66)
* demo-shared-make.test:                 Test descriptions.   (line  66)
* demo-shared-unst.test:                 Test descriptions.   (line  66)
* demo-shared.test:                      Test descriptions.   (line  66)
* demo-static-exec.test:                 Test descriptions.   (line  66)
* demo-static-inst.test:                 Test descriptions.   (line  66)
* demo-static-make.test:                 Test descriptions.   (line  66)
* demo-static-unst.test:                 Test descriptions.   (line  66)
* demo-static.test:                      Test descriptions.   (line  66)
* demo-unst.test:                        Test descriptions.   (line  66)
* depdemo-conf.test:                     Test descriptions.   (line 128)
* depdemo-exec.test:                     Test descriptions.   (line 128)
* depdemo-inst.test:                     Test descriptions.   (line 128)
* depdemo-make.test:                     Test descriptions.   (line 128)
* depdemo-nofast-exec.test:              Test descriptions.   (line 128)
* depdemo-nofast-inst.test:              Test descriptions.   (line 128)
* depdemo-nofast-make.test:              Test descriptions.   (line 128)
* depdemo-nofast-unst.test:              Test descriptions.   (line 128)
* depdemo-nofast.test:                   Test descriptions.   (line 128)
* depdemo-relink.test:                   Test descriptions.   (line  99)
* depdemo-shared-exec.test:              Test descriptions.   (line 128)
* depdemo-shared-inst.test:              Test descriptions.   (line 128)
* depdemo-shared-make.test:              Test descriptions.   (line 128)
* depdemo-shared-unst.test:              Test descriptions.   (line 128)
* depdemo-shared.test:                   Test descriptions.   (line 128)
* depdemo-static-exec.test:              Test descriptions.   (line 128)
* depdemo-static-inst.test:              Test descriptions.   (line 128)
* depdemo-static-make.test:              Test descriptions.   (line 128)
* depdemo-static-unst.test:              Test descriptions.   (line 128)
* depdemo-static.test:                   Test descriptions.   (line 128)
* depdemo-unst.test:                     Test descriptions.   (line 128)
* dependencies between libraries:        Inter-library dependencies.
                                                              (line   6)
* dependency versioning:                 Versioning.          (line   6)
* deplibs_check_method:                  Porting inter-library dependencies.
                                                              (line   6)
* design issues:                         Issues.              (line   6)
* design of library interfaces:          Library tips.        (line   6)
* design philosophy:                     Motivation.          (line   6)
* developing libraries:                  Static-only libraries.
                                                              (line   6)
* dlclose <1>:                           Dlopened modules.    (line   6)
* dlclose:                               Using libltdl.       (line   6)
* dlerror:                               Using libltdl.       (line   6)
* DLLTOOL:                               LT_INIT.             (line 270)
* dlopen <1>:                            Dlopened modules.    (line   6)
* dlopen:                                Using libltdl.       (line   6)
* dlopen_self:                           libtool script contents.
                                                              (line 146)
* dlopen_self_static:                    libtool script contents.
                                                              (line 150)
* dlopen_support:                        libtool script contents.
                                                              (line 142)
* dlopening modules <1>:                 Dlopened modules.    (line   6)
* dlopening modules:                     Using libltdl.       (line   6)
* dlopening, pitfalls:                   Dlopen issues.       (line   6)
* dlsym <1>:                             Dlopened modules.    (line   6)
* dlsym:                                 Using libltdl.       (line   6)
* double-compilation, avoiding:          Static-only libraries.
                                                              (line   6)
* dynamic dependencies:                  Versioning.          (line   6)
* dynamic linking, applications <1>:     Using libltdl.       (line   6)
* dynamic linking, applications:         Dlopened modules.    (line   6)
* dynamic modules, names:                Finding the dlname.  (line   6)
* ECHO:                                  libtool script contents.
                                                              (line  38)
* eliding shared libraries:              Static-only libraries.
                                                              (line   6)
* examples of using libtool:             Using libtool.       (line   6)
* exclude_expsyms:                       libtool script contents.
                                                              (line 154)
* execute mode:                          Execute mode.        (line   6)
* export_dynamic_flag_spec:              libtool script contents.
                                                              (line 157)
* export_symbols_cmds:                   libtool script contents.
                                                              (line 161)
* extract_expsyms_cmds:                  libtool script contents.
                                                              (line 165)
* f77demo-conf.test:                     Test descriptions.   (line 263)
* f77demo-exec.test:                     Test descriptions.   (line 263)
* f77demo-make.test:                     Test descriptions.   (line 263)
* f77demo-shared-exec.test:              Test descriptions.   (line 263)
* f77demo-shared-make.test:              Test descriptions.   (line 263)
* f77demo-shared.test:                   Test descriptions.   (line 263)
* f77demo-static-exec.test:              Test descriptions.   (line 263)
* f77demo-static-make.test:              Test descriptions.   (line 263)
* f77demo-static.test:                   Test descriptions.   (line 263)
* failed tests:                          When tests fail.     (line   6)
* fast_install:                          libtool script contents.
                                                              (line 172)
* fcdemo-conf.test:                      Test descriptions.   (line 281)
* fcdemo-exec.test:                      Test descriptions.   (line 281)
* fcdemo-make.test:                      Test descriptions.   (line 281)
* fcdemo-shared-exec.test:               Test descriptions.   (line 281)
* fcdemo-shared-make.test:               Test descriptions.   (line 281)
* fcdemo-shared.test:                    Test descriptions.   (line 281)
* fcdemo-static-exec.test:               Test descriptions.   (line 281)
* fcdemo-static-make.test:               Test descriptions.   (line 281)
* fcdemo-static.test:                    Test descriptions.   (line 281)
* FDL, GNU Free Documentation License:   GNU Free Documentation License.
                                                              (line   6)
* file name conversion:                  File name conversion.
                                                              (line   6)
* File Name Conversion - Cygwin to Windows: Cygwin/Windows File Name Conversion.
                                                              (line   6)
* File Name Conversion - Failure:        File Name Conversion Failure.
                                                              (line   6)
* File Name Conversion - MinGW:          Native MinGW File Name Conversion.
                                                              (line   6)
* File Name Conversion - Unix to Windows: Unix/Windows File Name Conversion.
                                                              (line   6)
* file_magic:                            Porting inter-library dependencies.
                                                              (line  18)
* file_magic_cmd:                        Porting inter-library dependencies.
                                                              (line  18)
* file_magic_glob:                       libtool script contents.
                                                              (line 194)
* file_magic_test_file:                  Porting inter-library dependencies.
                                                              (line  18)
* finish mode:                           Finish mode.         (line   6)
* finish_cmds:                           libtool script contents.
                                                              (line 203)
* finish_eval:                           libtool script contents.
                                                              (line 207)
* formal versioning:                     Libtool versioning.  (line   6)
* func_convert_file_cygwin_to_w32:       Cygwin to MinGW Cross.
                                                              (line  61)
* global functions:                      Library tips.        (line  45)
* global_symbol_pipe:                    libtool script contents.
                                                              (line 210)
* global_symbol_to_cdecl:                libtool script contents.
                                                              (line 224)
* hardcode_action:                       libtool script contents.
                                                              (line 230)
* hardcode_direct:                       libtool script contents.
                                                              (line 235)
* hardcode_direct_absolute:              libtool script contents.
                                                              (line 241)
* hardcode_into_libs:                    libtool script contents.
                                                              (line 247)
* hardcode_libdir_flag_spec:             libtool script contents.
                                                              (line 253)
* hardcode_libdir_separator:             libtool script contents.
                                                              (line 259)
* hardcode_minus_L:                      libtool script contents.
                                                              (line 264)
* hardcode_shlibpath_var:                libtool script contents.
                                                              (line 269)
* header files:                          Library tips.        (line  39)
* host:                                  libtool script contents.
                                                              (line 276)
* host_alias:                            libtool script contents.
                                                              (line 277)
* host_os:                               libtool script contents.
                                                              (line 278)
* implementation of libtool:             libtool script contents.
                                                              (line   6)
* include files, portable:               C header files.      (line   6)
* include_expsyms:                       libtool script contents.
                                                              (line 282)
* inferring tags:                        Tags.                (line   6)
* inherit_rpath:                         libtool script contents.
                                                              (line 286)
* install:                               Installing libraries.
                                                              (line  19)
* install mode:                          Install mode.        (line   6)
* install-sh:                            Distributing.        (line  16)
* install_override_mode:                 libtool script contents.
                                                              (line 291)
* installation, finishing:               Installing libraries.
                                                              (line  54)
* inter-library dependencies:            Inter-library dependencies.
                                                              (line   6)
* inter-library dependency:              Porting inter-library dependencies.
                                                              (line   6)
* language names:                        Tags.                (line   6)
* languages, non-C:                      Other languages.     (line   6)
* LD <1>:                                LT_INIT.             (line 242)
* LD:                                    libtool script contents.
                                                              (line  43)
* LDFLAGS:                               LT_INIT.             (line 247)
* libext:                                libtool script contents.
                                                              (line 299)
* libltdl:                               Using libltdl.       (line   6)
* libname_spec:                          libtool script contents.
                                                              (line 302)
* libraries, definition of:              Libtool paradigm.    (line  11)
* libraries, finishing installation:     Installing libraries.
                                                              (line  54)
* libraries, stripping:                  Installing libraries.
                                                              (line  44)
* library interfaces:                    Interfaces.          (line   6)
* library interfaces, design:            Library tips.        (line   6)
* library object file:                   Creating object files.
                                                              (line  28)
* library_names_spec:                    libtool script contents.
                                                              (line 307)
* LIBS:                                  LT_INIT.             (line 253)
* libtool:                               Invoking libtool.    (line   6)
* libtool command options:               Invoking libtool.    (line   6)
* libtool examples:                      Using libtool.       (line   6)
* libtool implementation:                libtool script contents.
                                                              (line   6)
* libtool libraries:                     Linking libraries.   (line  24)
* libtool library versions:              Libtool versioning.  (line   6)
* libtool specifications:                Motivation.          (line  20)
* libtoolize:                            Invoking libtoolize. (line   6)
* libtoolize command options:            Invoking libtoolize. (line   6)
* LIBTOOLIZE_OPTIONS:                    Invoking libtoolize. (line 120)
* link mode:                             Link mode.           (line   6)
* link-2.test:                           Test descriptions.   (line 198)
* link.test:                             Test descriptions.   (line 194)
* link_all_deplibs:                      libtool script contents.
                                                              (line 312)
* link_static_flag:                      libtool script contents.
                                                              (line 317)
* linking against installed libraries:   Linking executables. (line   6)
* linking against uninstalled libraries: Linking executables. (line  25)
* linking with installed libtool libraries: Linking executables.
                                                              (line  50)
* linking, dlopen:                       Linking with dlopened modules.
                                                              (line   6)
* linking, dlpreopen:                    Linking with dlopened modules.
                                                              (line   6)
* linking, partial:                      Link mode.           (line 207)
* LN_S:                                  LT_INIT.             (line 265)
* lock_old_archive_extraction:           libtool script contents.
                                                              (line 114)
* LT_CMD_MAX_LEN:                        Autoconf macros.     (line  15)
* LT_CONFIG_LTDL_DIR:                    Distributing libltdl.
                                                              (line  32)
* lt_cv_to_host_file_cmd:                Cygwin to MinGW Cross.
                                                              (line  61)
* lt_cv_to_tool_file_cmd:                Cygwin to MinGW Cross.
                                                              (line  61)
* LT_CYGPATH:                            LT_CYGPATH.          (line   6)
* LT_DIRSEP_CHAR:                        Libltdl interface.   (line  40)
* lt_dladderror:                         Module loaders for libltdl.
                                                              (line 191)
* lt_dladdsearchdir:                     Libltdl interface.   (line 244)
* lt_dladvise:                           Libltdl interface.   (line  50)
* lt_dladvise_destroy:                   Libltdl interface.   (line 147)
* lt_dladvise_ext:                       Libltdl interface.   (line 154)
* lt_dladvise_global:                    Libltdl interface.   (line 179)
* lt_dladvise_init:                      Libltdl interface.   (line 137)
* lt_dladvise_local:                     Libltdl interface.   (line 196)
* lt_dladvise_preload:                   Libltdl interface.   (line 222)
* lt_dladvise_resident:                  Libltdl interface.   (line 213)
* lt_dlcaller_get_data:                  User defined module data.
                                                              (line 154)
* lt_dlcaller_set_data:                  User defined module data.
                                                              (line 128)
* lt_dlclose:                            Libltdl interface.   (line 228)
* lt_dlerror:                            Libltdl interface.   (line 238)
* lt_dlexit:                             Libltdl interface.   (line  66)
* lt_dlforeachfile:                      Libltdl interface.   (line 264)
* lt_dlgetinfo:                          User defined module data.
                                                              (line  26)
* lt_dlgetsearchpath:                    Libltdl interface.   (line 260)
* lt_dlhandle:                           Libltdl interface.   (line  46)
* lt_dlhandle_fetch:                     User defined module data.
                                                              (line 112)
* lt_dlhandle_interface:                 User defined module data.
                                                              (line  40)
* lt_dlhandle_iterate:                   User defined module data.
                                                              (line  97)
* lt_dlhandle_map:                       User defined module data.
                                                              (line  86)
* lt_dlinfo:                             User defined module data.
                                                              (line  12)
* lt_dlinit:                             Libltdl interface.   (line  61)
* lt_dlinsertsearchdir:                  Libltdl interface.   (line 249)
* lt_dlinterface_free:                   User defined module data.
                                                              (line  82)
* lt_dlinterface_id:                     User defined module data.
                                                              (line  35)
* lt_dlinterface_register:               User defined module data.
                                                              (line  74)
* lt_dlisresident:                       Libltdl interface.   (line 292)
* lt_dlloader:                           Module loaders for libltdl.
                                                              (line  45)
* lt_dlloader_add:                       Module loaders for libltdl.
                                                              (line 132)
* lt_dlloader_data:                      Module loaders for libltdl.
                                                              (line 182)
* lt_dlloader_exit:                      Module loaders for libltdl.
                                                              (line  86)
* lt_dlloader_find:                      Module loaders for libltdl.
                                                              (line 164)
* lt_dlloader_name:                      Module loaders for libltdl.
                                                              (line 176)
* lt_dlloader_next:                      Module loaders for libltdl.
                                                              (line 155)
* lt_dlloader_remove:                    Module loaders for libltdl.
                                                              (line 145)
* lt_dlmakeresident:                     Libltdl interface.   (line 282)
* lt_dlopen:                             Libltdl interface.   (line  72)
* lt_dlopenadvise:                       Libltdl interface.   (line 127)
* lt_dlopenext:                          Libltdl interface.   (line 110)
* lt_dlpreload:                          Dlpreopening.        (line  69)
* lt_dlpreload_callback_func:            Dlpreopening.        (line  97)
* lt_dlpreload_default:                  Dlpreopening.        (line  75)
* lt_dlpreload_open:                     Dlpreopening.        (line 103)
* lt_dlseterror:                         Module loaders for libltdl.
                                                              (line 203)
* lt_dlsetsearchpath:                    Libltdl interface.   (line 255)
* lt_dlsym:                              Libltdl interface.   (line 233)
* lt_dlsymlist <1>:                      Dlpreopening.        (line  42)
* lt_dlsymlist:                          Libltdl interface.   (line  55)
* lt_find_sym:                           Module loaders for libltdl.
                                                              (line  79)
* LT_FUNC_DLSYM_USCORE:                  Autoconf macros.     (line  24)
* LT_INIT:                               LT_INIT.             (line  21)
* LT_LANG:                               LT_INIT.             (line 155)
* LT_LIB_DLLOAD:                         Autoconf macros.     (line  35)
* LT_LIB_M:                              Autoconf macros.     (line  31)
* lt_module:                             Module loaders for libltdl.
                                                              (line  41)
* lt_module_close:                       Module loaders for libltdl.
                                                              (line  72)
* lt_module_open:                        Module loaders for libltdl.
                                                              (line  61)
* LT_OUTPUT:                             LT_INIT.             (line 309)
* LT_PATH_LD:                            Autoconf macros.     (line  51)
* LT_PATH_NM:                            Autoconf macros.     (line  57)
* LT_PATHSEP_CHAR:                       Libltdl interface.   (line  36)
* lt_preloaded_symbols:                  Dlpreopening.        (line  47)
* LT_PREREQ:                             LT_INIT.             (line  13)
* LT_SUPPORTED_TAG:                      Trace interface.     (line  13)
* LT_SYS_DLOPEN_DEPLIBS:                 Autoconf macros.     (line  70)
* LT_SYS_DLOPEN_SELF:                    Autoconf macros.     (line  64)
* LT_SYS_DLSEARCH_PATH:                  Autoconf macros.     (line  75)
* LT_SYS_MODULE_EXT:                     Autoconf macros.     (line  79)
* LT_SYS_MODULE_PATH:                    Autoconf macros.     (line  85)
* LT_SYS_SYMBOL_USCORE:                  Autoconf macros.     (line  90)
* lt_user_data:                          Module loaders for libltdl.
                                                              (line  48)
* lt_user_dlloader:                      Module loaders for libltdl.
                                                              (line  53)
* LT_WITH_LTDL:                          Distributing libltdl.
                                                              (line  41)
* LTCC:                                  libtool script contents.
                                                              (line  47)
* LTCFLAGS:                              libtool script contents.
                                                              (line  48)
* LTDL_CONVENIENCE:                      Distributing libltdl.
                                                              (line 301)
* LTDL_INIT:                             Distributing libltdl.
                                                              (line  40)
* LTDL_INSTALLABLE:                      Distributing libltdl.
                                                              (line 296)
* LTDL_SET_PRELOADED_SYMBOLS:            Dlpreopening.        (line  85)
* LTLIBOBJS:                             Autoconf and LTLIBOBJS.
                                                              (line   8)
* LTLIBRARIES:                           Using Automake.      (line   6)
* ltmain.sh:                             Distributing.        (line  19)
* macro_revision:                        libtool script contents.
                                                              (line 322)
* macro_version:                         libtool script contents.
                                                              (line 321)
* Makefile:                              Makefile rules.      (line   6)
* Makefile.am:                           Makefile rules.      (line   6)
* Makefile.in:                           Makefile rules.      (line   6)
* MANIFEST_TOOL:                         LT_INIT.             (line 282)
* max_cmd_len:                           libtool script contents.
                                                              (line 327)
* mdemo-conf.test:                       Test descriptions.   (line 161)
* mdemo-dryrun.test:                     Test descriptions.   (line 180)
* mdemo-exec.test:                       Test descriptions.   (line 161)
* mdemo-inst.test:                       Test descriptions.   (line 161)
* mdemo-make.test:                       Test descriptions.   (line 161)
* mdemo-shared-exec.test:                Test descriptions.   (line 161)
* mdemo-shared-inst.test:                Test descriptions.   (line 161)
* mdemo-shared-make.test:                Test descriptions.   (line 161)
* mdemo-shared-unst.test:                Test descriptions.   (line 161)
* mdemo-shared.test:                     Test descriptions.   (line 161)
* mdemo-static-exec.test:                Test descriptions.   (line 161)
* mdemo-static-inst.test:                Test descriptions.   (line 161)
* mdemo-static-make.test:                Test descriptions.   (line 161)
* mdemo-static-unst.test:                Test descriptions.   (line 161)
* mdemo-static.test:                     Test descriptions.   (line 161)
* mdemo-unst.test:                       Test descriptions.   (line 161)
* mdemo2-conf.test:                      Test descriptions.   (line 185)
* mdemo2-exec.test:                      Test descriptions.   (line 185)
* mdemo2-make.test:                      Test descriptions.   (line 185)
* mode, clean:                           Clean mode.          (line   6)
* mode, compile:                         Compile mode.        (line   6)
* mode, execute:                         Execute mode.        (line   6)
* mode, finish:                          Finish mode.         (line   6)
* mode, install:                         Install mode.        (line   6)
* mode, link:                            Link mode.           (line   6)
* mode, uninstall:                       Uninstall mode.      (line   6)
* modules, dynamic <1>:                  Dlopened modules.    (line   6)
* modules, dynamic:                      Using libltdl.       (line   6)
* motivation for writing libtool:        Motivation.          (line   6)
* MSYS:                                  Native MinGW File Name Conversion.
                                                              (line   6)
* names of dynamic modules:              Finding the dlname.  (line   6)
* need_lib_prefix:                       libtool script contents.
                                                              (line 331)
* need_locks:                            libtool script contents.
                                                              (line 344)
* need_version:                          libtool script contents.
                                                              (line 338)
* NM <1>:                                LT_INIT.             (line 259)
* NM:                                    libtool script contents.
                                                              (line  52)
* nm_file_list_spec:                     libtool script contents.
                                                              (line 348)
* no_builtin_flag:                       libtool script contents.
                                                              (line 351)
* no_undefined_flag:                     libtool script contents.
                                                              (line 355)
* nomode.test:                           Test descriptions.   (line 202)
* none:                                  Porting inter-library dependencies.
                                                              (line  38)
* objdir:                                libtool script contents.
                                                              (line 360)
* OBJDUMP:                               LT_INIT.             (line 274)
* object files, compiling:               Creating object files.
                                                              (line   6)
* object files, library:                 Creating object files.
                                                              (line  28)
* objectlist.test:                       Test descriptions.   (line 205)
* objext:                                libtool script contents.
                                                              (line 363)
* old_archive_cmds:                      libtool script contents.
                                                              (line  90)
* old_archive_from_expsyms_cmds:         libtool script contents.
                                                              (line 103)
* old_archive_from_new_cmds:             libtool script contents.
                                                              (line  97)
* old_postinstall_cmds:                  libtool script contents.
                                                              (line 370)
* old_postuninstall_cmds:                libtool script contents.
                                                              (line 375)
* old_striplib:                          libtool script contents.
                                                              (line 415)
* opaque data types:                     Library tips.        (line  28)
* options, libtool command:              Invoking libtool.    (line   6)
* options, libtoolize command:           Invoking libtoolize. (line   6)
* other implementations, flaws in:       Postmortem.          (line   6)
* partial linking:                       Link mode.           (line 207)
* pass_all:                              Porting inter-library dependencies.
                                                              (line  32)
* path conversion:                       File name conversion.
                                                              (line   6)
* Path Conversion - Cygwin to Windows:   Cygwin/Windows File Name Conversion.
                                                              (line   6)
* Path Conversion - Failure:             File Name Conversion Failure.
                                                              (line   6)
* Path Conversion - MinGW:               Native MinGW File Name Conversion.
                                                              (line   6)
* Path Conversion - Unix to Windows:     Unix/Windows File Name Conversion.
                                                              (line   6)
* pdemo-conf.test:                       Test descriptions.   (line 211)
* pdemo-exec.test:                       Test descriptions.   (line 211)
* pdemo-inst.test:                       Test descriptions.   (line 211)
* pdemo-make.test:                       Test descriptions.   (line 211)
* PIC (position-independent code):       Creating object files.
                                                              (line  23)
* pic_flag:                              libtool script contents.
                                                              (line 366)
* pitfalls using C++:                    C++ libraries.       (line   6)
* pitfalls with dlopen:                  Dlopen issues.       (line   6)
* portable C headers:                    C header files.      (line   6)
* position-independent code:             Creating object files.
                                                              (line  23)
* postinstall_cmds:                      libtool script contents.
                                                              (line 369)
* postinstallation:                      Installing libraries.
                                                              (line  54)
* postlink_cmds:                         libtool script contents.
                                                              (line 379)
* postuninstall_cmds:                    libtool script contents.
                                                              (line 374)
* problem reports:                       Reporting bugs.      (line   6)
* problems, blaming somebody else for:   Troubleshooting.     (line   6)
* problems, solving:                     Troubleshooting.     (line   6)
* program wrapper executables:           Wrapper executables. (line   6)
* program wrapper scripts:               Linking executables. (line  71)
* quote.test:                            Test descriptions.   (line 220)
* ranlib:                                Linking libraries.   (line  12)
* RANLIB <1>:                            LT_INIT.             (line 262)
* RANLIB:                                libtool script contents.
                                                              (line  73)
* reload_cmds:                           libtool script contents.
                                                              (line 388)
* reload_flag:                           libtool script contents.
                                                              (line 389)
* renaming interface functions:          Library tips.        (line  21)
* reporting bugs:                        Reporting bugs.      (line   6)
* reusability of library systems:        Postmortem.          (line   6)
* runpath_var:                           libtool script contents.
                                                              (line 393)
* saving time:                           Static-only libraries.
                                                              (line   6)
* security problems with buggy linkers:  Linking executables. (line  16)
* sh.test:                               Test descriptions.   (line 223)
* shared libraries, not using:           Static-only libraries.
                                                              (line   6)
* shared library versions:               Versioning.          (line   6)
* shl_load <1>:                          Dlopened modules.    (line   6)
* shl_load:                              Using libltdl.       (line   6)
* shlibpath_overrides_runpath:           libtool script contents.
                                                              (line 397)
* shlibpath_var:                         libtool script contents.
                                                              (line 406)
* solving problems:                      Troubleshooting.     (line   6)
* soname_spec:                           libtool script contents.
                                                              (line 410)
* specifications for libtool:            Motivation.          (line  20)
* standalone binaries:                   Static libraries.    (line  64)
* static linking:                        Static libraries.    (line   6)
* strip:                                 Installing libraries.
                                                              (line   6)
* striplib:                              libtool script contents.
                                                              (line 414)
* stripping libraries:                   Installing libraries.
                                                              (line  44)
* su:                                    Installing libraries.
                                                              (line   9)
* suffix.test:                           Test descriptions.   (line 227)
* sys_lib_dlsearch_path_spec:            libtool script contents.
                                                              (line 421)
* sys_lib_search_path_spec:              libtool script contents.
                                                              (line 426)
* tag names:                             Tags.                (line   6)
* tagdemo-conf.test:                     Test descriptions.   (line 245)
* tagdemo-exec.test:                     Test descriptions.   (line 245)
* tagdemo-make.test:                     Test descriptions.   (line 245)
* tagdemo-shared-exec.test:              Test descriptions.   (line 245)
* tagdemo-shared-make.test:              Test descriptions.   (line 245)
* tagdemo-shared.test:                   Test descriptions.   (line 245)
* tagdemo-static-exec.test:              Test descriptions.   (line 245)
* tagdemo-static-make.test:              Test descriptions.   (line 245)
* tagdemo-static.test:                   Test descriptions.   (line 245)
* tagdemo-undef-exec.test:               Test descriptions.   (line 245)
* tagdemo-undef-make.test:               Test descriptions.   (line 245)
* tagdemo-undef.test:                    Test descriptions.   (line 245)
* test suite:                            Libtool test suite.  (line   6)
* test_compile:                          Porting inter-library dependencies.
                                                              (line  26)
* tests, failed:                         When tests fail.     (line   6)
* thread_safe_flag_spec:                 libtool script contents.
                                                              (line 435)
* time, saving:                          Static-only libraries.
                                                              (line   6)
* to_host_file_cmd:                      libtool script contents.
                                                              (line 439)
* to_tool_file_cmd:                      libtool script contents.
                                                              (line 450)
* trace interface:                       Trace interface.     (line   6)
* tricky design issues:                  Issues.              (line   6)
* trouble with C++:                      C++ libraries.       (line   6)
* trouble with dlopen:                   Dlopen issues.       (line   6)
* troubleshooting:                       Troubleshooting.     (line   6)
* undefined symbols, allowing:           Link mode.           (line  14)
* uninstall mode:                        Uninstall mode.      (line   6)
* unknown:                               Porting inter-library dependencies.
                                                              (line  43)
* unresolved symbols, allowing:          Link mode.           (line  14)
* using shared libraries, not:           Static-only libraries.
                                                              (line   6)
* version_type:                          libtool script contents.
                                                              (line 458)
* versioning, formal:                    Libtool versioning.  (line   6)
* want_nocaseglob:                       libtool script contents.
                                                              (line 463)
* whole_archive_flag_spec:               libtool script contents.
                                                              (line 469)
* Windows DLLs:                          Windows DLLs.        (line   6)
* wl:                                    libtool script contents.
                                                              (line 472)
* wrapper executables for uninstalled programs: Wrapper executables.
                                                              (line   6)
* wrapper scripts for programs:          Linking executables. (line  71)


