/*!
@page guides Guides

The guides in this section are step-by-step procedures to accomplish
common tasks with libbabeltrace2.

Guides help you navigate through the most important features of
the library and its API.

Make sure to eventually read \ref api-fund before you use the \bt_api
seriously.

The available guides are:

- \subpage guide-build-bt2-dev
- \subpage guide-comp-link-plugin-so
- \subpage guide-comp-link-app

@if meow

- \subpage guide-create-graph
- \subpage guide-write-min-src-comp-cls
- \subpage guide-write-min-flt-comp-cls
- \subpage guide-write-min-sink-comp-cls
- \subpage guide-write-simple-sink-comp-cls
- \subpage guide-create-plugin
- \subpage guide-write-full-src-comp-cls
- \subpage guide-write-full-flt-comp-cls
- \subpage guide-write-full-sink-comp-cls
- \subpage guide-query
- \subpage guide-seek-msg-iter
- \subpage guide-intr-graph
- \subpage guide-intr-query
- \subpage guide-graph-listeners

@endif

@page guide-build-bt2-dev Build Babeltrace 2 for development

If you are developing a \bt_name \bt_plugin or an application which uses
libbabeltrace2, we recommend that:

- You build \bt_name from source in <em>developer mode</em>.

  The \bt_name developer mode enables more \ref api-fund-pre-post
  "precondition and postcondition" assertions to detect
  programming errors.

- You use \em TRACE as the minimal logging level at build time to have
  access to more \ref api-fund-logging "logging", should you need it
  to debug your plugin or application.

To build \bt_name from source in developer mode and using \em TRACE
as the minimal logging level:

<ol>
  <li>
    <a href="https://babeltrace.org/#bt2-get">Download the
    \bt_name tarball</a> and extract it.

    See the project's
    <a href="https://github.com/efficios/babeltrace/blob/stable-\bt_version_min_maj/README.adoc">README</a>
    for build-time requirements and detailed build instructions.
  <li>
    Configure the build in developer mode and with the \em TRACE
    minimal logging level:

@code{.unparsed}
$ BABELTRACE_DEV_MODE=1 BABELTRACE_MINIMAL_LOG_LEVEL=TRACE ./configure
@endcode
  <li>
    Build and install the project:

@code{.unparsed}
$ make
# make install
@endcode
</ol>

\bt_name developer mode build configuration command line examples:

@code{.unparsed}
$ BABELTRACE_DEV_MODE=1 BABELTRACE_MINIMAL_LOG_LEVEL=TRACE ./configure \
  --enable-python-bindings --enable-python-plugins
@endcode

@code{.unparsed}
$ BABELTRACE_DEV_MODE=1 BABELTRACE_MINIMAL_LOG_LEVEL=TRACE ./configure \
  --prefix="$PWD/install" --disable-man-pages --disable-debug-info
@endcode

@note
    @parblock
    The development build creates a libbabeltrace2 library which is
    slower to execute than a production (default) build.

    We believe that, during the development process, a less efficient,
    but more strict library is more desirable than the opposite.
    @endparblock

@page guide-comp-link-plugin-so Compile and link a Babeltrace 2 shared object plugin

To compile and link a \bt_name shared object plugin:

<ol>
  <li>
    Compile the plugin's C/C++ source files with the
    <a href="https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html"><code>\-fPIC</code></a>
    and
    <a href="https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html"><code>\-c</code></a>
    compiler options to produce position-independent code and
    to compile without linking:

    @code{.unparsed}
    $ cc my-plugin.c analysis.c -fPIC -c $(pkg-config --cflags babeltrace2)
    @endcode
  </li>

  <li>
    Link the resulting object files with the
    <a href="https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html"><code>\-shared</code></a>
    linker option and with the \bt_name library:

    @code{.unparsed}
    $ ld my-plugin.o analysis.o -o my-plugin.so -shared $(pkg-config --libs babeltrace2)
    @endcode
  </li>
</ol>

@note
    At least one of your C/C++ files must declare a \bt_name plugin
    and one or more \bt_p_comp_cls using the \ref api-plugin-dev macros.

@page guide-comp-link-app Compile and link an application which uses libbabeltrace2

To compile and link an application which uses libbabeltrace2:

<ol>
  <li>
    Compile your C/C++ files as usual.
  </li>

  <li>
    Link the resulting object files with the \bt_name library:

    @code{.unparsed}
    $ ld my-app.o analysis.o -o my-app $(pkg-config --libs babeltrace2)
    @endcode
  </li>
</ol>

@if meow

@page guide-create-graph Create a graph from existing component classes and run it

TODO!

@page guide-write-min-src-comp-cls Write a minimal source component class

TODO!

@page guide-write-min-flt-comp-cls Write a minimal filter component class

TODO!

@page guide-write-min-sink-comp-cls Write a minimal sink component class

TODO!

@page guide-write-simple-sink-comp-cls Write a simple sink component class

TODO!

@page guide-create-plugin Create a Babeltrace 2 plugin

TODO!

@page guide-write-full-src-comp-cls Write a complete source component class

TODO!

@page guide-write-full-flt-comp-cls Write a complete filter component class

TODO!

@page guide-write-full-sink-comp-cls Write a complete sink component class

TODO!

@page guide-query Query an object from a component class

TODO!

@page guide-seek-msg-iter Make a message iterator seek

TODO!

@page guide-intr-graph Interrupt a running graph

TODO!

@page guide-intr-query Interrupt a query operation

TODO!

@page guide-graph-listeners Use graph listeners to react to topology events

TODO!

@endif
*/
