/*!

\mainpage The ABI Generic Analysis and Instrumentation Library

\tableofcontents

\section presentation Presentation

This project aims at providing a C++ library for constructing,
manipulating, serializing and de-serializing ABI-relevant artifacts.
The set of artifacts that we are interested in is made of
constructions like types, variables, functions and declarations of a
given library or program.  For a given program or library, this set of
constructions is called an ABI corpus.

Thus the project aims at providing a library to manipulate ABI
corpora, compare them, provide detailed information about their
differences and help build tools to infer interesting conclusions
about these differences.

\section documentation Documentation

The documentations of the libabigail tools is available online <a
href="http://sourceware.org/libabigail/manual">here</a>.

The html documentation of the API of the library itself is available
online <a href="http://sourceware.org/libabigail/apidoc">here</a>.

\section communication IRC and Mailing lists

To hang out with libabigail developers and users, you can chat with us
via <a href="http://en.wikipedia.org/wiki/Wikipedia:IRC">IRC</a> at
<em>irc://irc.oftc.net\#libabigail</em>.

To send us patches or just drop by to say Hi, please send an email to
our mailing list at the address 'libabigail <at> sourceware <dot>
org'.  The archives of the mailing list can be read <a
href="https://sourceware.org/ml/libabigail">online</a>.  To send us an
email, you first need to register to the mailing list by feeling
<a href="https://sourceware.org/mailman/listinfo/libabigail">this
form</a>.

\section bugs Bug reports

Bug reports are to be filed into our <a
href="http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail">Bugzilla
database</a>.

\section license License

The source code of the library is under <a href="http://www.gnu.org/licenses/lgpl.html"> LGPL version 3</a> or later.

\section source Getting the source code

You can download compressed tarballs containing the source code of
Libabigail at http://mirrors.kernel.org/sourceware/libabigail.  The
latest released version of is source code is
http://mirrors.kernel.org/sourceware/libabigail/libabigail-1.7.tar.gz.

You can also get the source code in a read-only manner from our <a
href="http://sourceware.org/git/gitweb.cgi?p=libabigail.git">Git
repository</a> by doing:

\code
	git clone git://sourceware.org/git/libabigail.git
\endcode

If you have write access on sourceware.org, you can check the source
out in read-write by doing:

\code
	git clone ssh://sourceware.org/git/libabigail.git
\endcode

\section compile Compiling the source code

To compile libabigail, you first need to install its dependencies.  At
the moment the dependencies are the following Free Software packages:

    \li <a href="http://www.gnu.org/software/autoconf/">autoconf</a>
    \li <a href="http://www.gnu.org/software/automake/">automake</a>
    \li <a href="http://www.gnu.org/software/libtool/">libtool</a>
    \li <a href="http://www.freedesktop.org/wiki/Software/pkg-config/">pkg-config</a>
    \li <a href="http://www.xmlsoft.org">libxml2</a>
    \li <a href="https://fedorahosted.org/elfutils/">elfutils</a>
    \li <a href="http://www.stack.nl/~dimitri/doxygen/download.html">doxygen</a>
    \li <a href="http://www.sphinx-doc.org/en/stable/">python-sphinx</a>

\subsection compile-from-tarball Compiling the code from the tarball

Once you've downloaded the tarball, please extract its content to a
directory of your choice.  To extract the tarball on GNU/Linux, please
type:

\code
  tar -xvf libabigail-<version>.tar.gz
\endcode

This should create a directory <em>libabigail-<version></em>.

Then go to that directory and run the commands:

\code
  mkdir build
  cd build
  ../configure --prefix=/where/you/want/to/install/libabigail
  make all install
\endcode

Make sure the directory <em>/where/you/want/to/install/libabigail</em>
exists and is writeable by you.

The commands above should have built libabigail and its associated
tools, and installed them under
<em>/where/you/want/to/install/libabigail</em>.  Note that built
objects are under the <em>build</em> sub-directory of the source tree
of Libabigail which you extracted from the tarball.

\subsection compile-from-git Compiling the code retrieved via the source code repository

Go to your local libabigail.git directory where the source code
you've checked out lies and create a 'build' directory that will
receive the binaries resulting from the compilation:

\code
    cd libabigail
    mkdir build
\endcode

Generate the relevant build-system-related information needed to
configure the package for compilation, by typing:

\code
    autoreconf -i
\endcode

Then configure the package:

\code
    cd build
    ../configure --prefix=<absolute-path-of-where-you-want-the-binaries-to-be-installed>
\endcode

Then build the package

\code
    make
\endcode

And then install its resulting binaries and documentation:

\code
    make install
\endcode


*/
