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.

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
* Annotate: (annotate).         The obsolete annotation interface.
* Autoconf: (autoconf).         Create source code configuration scripts.
* Automake: (automake).         Making GNU standards-compliant Makefiles.
* Bfd: (bfd).                   The Binary File Descriptor library.
* Cpp: (cpp).                   The GNU C preprocessor.
* Gdb: (gdb).                   The GNU debugger.
* Libtool: (libtool).           Generic shared library support script.
* Stabs: (stabs).               The "stabs" debugging information format.
* g++: (gcc).                   The GNU C++ compiler.
* gcc: (gcc).                   The GNU Compiler Collection.
* gccinstall: (gccinstall).     Installing the GNU Compiler Collection.
* gccint: (gccint).             Internals of the GNU Compiler Collection.
* gcov: (gcc) Gcov.             'gcov'--a test coverage program.
* gcov-tool: (gcc) Gcov-tool.   'gcov-tool'--an offline gcda profile 
                                  processing program.
* gdbserver: (gdb) Server.      The GNU debugging server.
* gprof: (gprof).               Profiling your program's execution
