/** @mainpage

    The official homepage is on:
     - http://marc.waeckerlin.org/computer/c_/mrw-c_/index

    The minimal runtime package (for use with VideoreKorder):

    Minimalpaket (f&uuml;r den VideoreKorder):

     - <a href="/downloads/@PACKAGENAME@-minimal-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm">@PACKAGENAME@-minimal-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm</a>

    More downloads see @ref downloads.
    
    All features are listed on the <a
    href="modules.html">"Modules"</a> page.

    @section intro Introduction
    
    Featureful C++ Library containing a lot of needful
    things. Everything, I often need, but it's missing in C++ standard
    libraries and other common 3rd party libraries, such as <a
    href="">log4cxx</a>, cppunit and boost.

    I have paid attention to define simple and a nice to use
    interfaces. The library makes use of object orientation, operator
    overload and templates, where it makes sense. The library passes
    several module tests before each delivery. It is therefore stable
    and tested.

    @section support Supported Platforms
    
    The library is generic UNIX, but should also work on Windows. It
    is sporadically tested on Windows in Cygwin. Stack trace works on
    Linux only, it could theoretically work on Sun Solaris too, but
    this is untested. Stack trace without symbol resolution, just
    getting the raw addresses, only depends on GNU gcc and should work
    on all platforms. Feedback is welcome!

    @section features Missing a Feature, Found a Bug?
    
    You are missing a feature, or an implementation is too incomplete
    for the purpose you need it? Or you even found a bug? Just ask me
    and I'll try to help you! My email address is in the file AUTHORS
    and on my website: http://marc.waeckerlin.org

    @section moreinfo Additional Information

    See the <a href="pages.html">"Related Pages"</a>.

     - @ref downloads
     - @ref readme
     - @ref usage
     - @ref threads
     - @ref libversion
     - @ref license
     - @ref install
     - @ref news
     - @ref changes
*/

/** @page downloads Download and Installation of the MRW-C++ Library

    Download this documentation in PDF:
     - <a href="/downloads/@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.pdf">@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.pdf</a>

    Download this version from here:
     - Source
        - Source TAR-Ball:
           - <a href="/downloads/@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.tar.gz">@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.tar.gz</a>
              - Installation:
                  -# <code>tar xzf @PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.tar.gz</code>
                  -# <code>cd @PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@</code>
                  -# <code>./configure && make all install</code>
        - Source RPM Packages:
           - <a href="/downloads/@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@-1.src.rpm">@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@-1.src.rpm</a>
              - Installation:@n <code>sudo rpmbuild --rebuild @PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@-1.src.rpm</code>
        - Requirements to build from source:
           - boost: http://boost.org
           - cppunit: http://cppunit.sf.net
           - log4cxx: http://logging.apache.org/log4cxx
           - doxygen: http://doxygen.org
           - graphviz: http://www.research.att.com/sw/tools/graphviz
           - GNU binutils (you also need the development package, if it is separete (e.g. in Debian))
           - GNU g++, GNU make, GNU autotools: http://gnu.org
     - Binary
        - Binary RPM Packages (built on i586/SuSE):
           - <a href="/downloads/@PACKAGENAME@-minimal-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm">@PACKAGENAME@-minimal-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm</a>
              - Minimal runtime package without debugging support.@n Does not depend on boost and log4cxx and ltdl.@n To be used e.g. with [[:Computer:Linux:Programme:Videorekorder]]
              - Installation:@n <code>rpm -Uvh @PACKAGENAME@-minimal-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm</code>
           - <a href="/downloads/@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm">@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm</a>
              - Full runtime library, no multithreading.
              - Installation:@n <code>rpm -Uvh @PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm</code>
           - <a href="/downloads/@PACKAGENAME@-mt-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm">@PACKAGENAME@-mt-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm</a>
              - Full runtime library, with multithreading support.
              - Installation:@n <code>rpm -Uvh @PACKAGENAME@-mt-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm</code>
           - <a href="/downloads/@PACKAGENAME@-devel-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm">@PACKAGENAME@-devel-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm</a>
              - The package for developers.
              - Installation:@n <code>rpm -Uvh @PACKAGENAME@-devel-@MAJOR@.@MINOR@.@LEAST@-1.i586.rpm</code>
     - Requirements:
        - Boost thread library for multi threading:@n http://boost.org
        - log4cxx for automated tracing and function traces:
           - http://logging.apache.org/log4cxx
           - RPM: <a href="/downloads/log4cxx-0.9.7-3.i386.rpm">log4cxx-0.9.7-3.i386.rpm</a>
        - mrw::StackTrace requires:
           - the GNU Binutils
           - either GNU Compiler gcc or GNU C library glibc
           - runs better on: either Linux or Solaris
*/

/** @page usage Usage of the Library: Include and Link

    Include the headers you need with prefix @c mrw, e.g.:

    @verbatim
    \#include <mrw/stacktrace.hpp>
    @endverbatim

    All classes are in the @c mrw namespace.

    if you want the mrw::StackTrace to evaluate file and line numbers,
    then you need to compile with debug information enabled, thats
    option @c -g.

    Link to the library with option @c -lmrw (or @c -lmrw-mt if your
    program is multi threaded), e.g.:

    @verbatim
    g++ -g -o myprogram myprogram.cpp -lmrw
    @endverbatim

    For the @ref AutoTools "unexpected handler" you need to link to
    @c -lmrwexcstderr or @c -lmrwexclog4cxx (or @c -lmrwexcstderr-mt
    or @c -lmrwexclog4cxx-mt if your program is multi threaded).

    For the @ref AutoFunctionTrace "automated function trace" you need
    to link to @c -lmrwautofunctiontracelog4cxx (or @c
    -lmrwautofunctiontracelog4cxx-mt if your program is multi
    threaded). In addition, you must compile and link your program
    with the GNU compiler specific option @c -finstrument-functions */

/** @page threads Thread Safety

    There is a severe bug in the g++ compiler with version
    >=&nbsp;3.4: The macro @c _REENTRANT is always set and cannot be
    used to check whether we are in a multithreaded compilation or
    not! See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11953 for
    more details. Workaround: To enable multithreading, you must pass
    the @c -D_MT compiler flag for the GNU gcc verions 3.4 and above!

    To enable thread safety, you must link to @c libmrw-mt instead of
    @c libmrw. That means, your link option is: @c -lmrw-mt

    For GNU gcc verions 3.4 and above, you must use the compile option
    @c -D_MT in addition, because of a severe bug in the compiler.

    Different instances of classes can run in different threads, but
    instances of classes can not be shared between different threads.

    All classes are not thread safe, that means they should either
    always be accessed from the same thread, or you are responsible
    for locking.

    All methods are threads safe, that means, they can be called at
    the same time from different threads. But not on the same object.

    This means: One instance should only be used within one single
    thread. Different instances of the same class can be accessed
    simultaneousely in different threads.

    If you need more thread safety as a feature, please send
    me an email and ask me for it (you find the address in the package
    or on my personal homepage: http://marc.waeckerlin.org).
*/

/** @page libversion Library Versioning

    The library and the package have the same version number. This
    means, if you for example install the package versioned
    mrw-c++-2.6.4.tar.gz, then it builds a shared library of the same
    version, named libmrw.so.2.6.4. The naming is
    version=MAJOR.MINOR.LEAST. What do the numbers mean:

    <dl>
      <dt>MAJOR</dt>
      
      <dd>If the major number is increased, then the backwards
      compatibility was broken. Either there was an incompatible
      change in the implementation, or in the interface, e.g. a change
      in method parameters, or even parts of the library have been
      removed.</dd>

      <dt>MINOR</dt>

      <dd>If the minor number changes, then it remains backward
      compatible. Either there was a minor change in the
      implementation or behavior of some features, a bigger bugfix, or
      new feature were added. A program linked to a previous library
      with smaller minor number still works, but a program linked to
      newer library with a higher minor number may not work with a
      library that has a lower minor number. This is a one way,
      backwards only compatibility.</dd>

      <dt>LEAST</dt>

      <dd>The least number is increased for small changes, bugfixes,
      changes in the documentation and so on. Except the bugs, changes
      in the least number are fully forward and backward
      compatible.</dd>
    </dl>

    This means, programs linked to mrw-c++ version 2.6.4 will work
    with library version 2.6.3, also with version 2.6.5, or with
    version 2.7.1, but it won't work with version 2.5.4 nor with 1.1.3
    nor with 3.1.4.

    You can see the version of the library by issuing the command @c what.
*/

/** @page license License
    @verbinclude COPYING */

/** @page readme Readme
    @verbinclude README */

/** @page install Installation
    @verbinclude INSTALL */

/** @page news News
    @verbinclude NEWS */

/** @page changes Change Log
    @verbinclude ChangeLog */

/** @brief the namespace for this library

    All classes and all functions (except global operators) are placed
    in this namespace.

    For an overview, better see the <a
    href="modules.html">"Modules"</a> page.
*/
namespace mrw {
}
