This is the file .../info/dir, which contains the
topmost node of the Info hierarchy, called (dir)Top.
The first time you invoke Info you start off looking at this node.

File: dir,	Node: Top	This is the top of the INFO tree

  This (the Directory node) gives a menu of major topics.
  Typing "q" exits, "?" lists all Info commands, "d" returns here,
  "h" gives a primer for first-timers,
  "mEmacs<Return>" visits the Emacs manual, etc.

  In Emacs, you can click mouse button 2 on a menu item or cross reference
  to select it.

* Menu:

GNU organization
* Standards: (standards).       GNU coding standards.

GNU programming tools
* Libtool: (libtool).           Generic shared library support script.

Individual utilities
* aclocal-invocation: (automake)aclocal Invocation.
                                                Generating aclocal.m4.
* autoconf-invocation: (autoconf)autoconf Invocation.
                                                How to create configuration 
                                                  scripts
* autoheader: (autoconf)autoheader Invocation.  How to create configuration 
                                                  templates
* autom4te: (autoconf)autom4te Invocation.      The Autoconf executables 
                                                  backbone
* automake-invocation: (automake)automake Invocation.
                                                Generating Makefile.in.
* autoreconf: (autoconf)autoreconf Invocation.  Remaking multiple `configure' 
                                                  scripts
* autoscan: (autoconf)autoscan Invocation.      Semi-automatic `configure.ac' 
                                                  writing
* autoupdate: (autoconf)autoupdate Invocation.  Automatic update of 
                                                  `configure.ac'
* config.status: (autoconf)config.status Invocation.
                                                Recreating configurations.
* configure: (autoconf)configure Invocation.    Configuring a package.
* ifnames: (autoconf)ifnames Invocation.        Listing conditionals in source.
* libtool-invocation: (libtool)Invoking libtool.
                                                Running the `libtool' script.
* libtoolize: (libtool)Invoking libtoolize.     Adding libtool support.
* testsuite: (autoconf)testsuite Invocation.    Running an Autotest test suite.

Software development
* Autoconf: (autoconf).         Create source code configuration scripts.
* Automake: (automake).         Making GNU standards-compliant Makefiles.
* Make: (make).                 Remake files automatically.

Text creation and manipulation
* M4: (m4).                     A powerful macro processor.
