.. -*- Mode: rst -*-

.. include:: ../etc/definitions.rst


2. Basic File Structure and CMake configuration
=================================================

As a first example we will consider the ``Hurrican::Library``
class. To export a class into Python, we must create three files:

#. ``PyLibrary.h``, defines the ``PyLibrary`` C-Struct and the functions
   needed outside the module istself (mostly for ``PyHurricane.cpp``).

#. ``PyLibrary.cpp``, contains the complete wrapping of the class and
   the Python type definition (``PyTypeLibrary``).

#. ``PyHurricane.cpp``, the definition of the Python module into which
   the classes are registered. The module act as a ``namespace`` in
   Python so it is good practice to give it the same name as it's
   associated C++ namespace.

|newpage|

To build a Python module in |cmake|, use the following macro:

   .. code-block:: cmake

                    set( pyCpps      PyLibrary.cpp
                                     PyHurricane.cpp )
                    set( pyIncludes  hurricane/isobar/PyLibrary.h

      add_python_module( "${pyCpps}"
                         "${pyIncludes}"
                         "isobar;1.0;1"     # Name & version of the supporting
                                            # shared library.
                         Hurricane          # Name of the Python module will give:
                                            #   Hurricane.so
                         "${depLibs}"       # List of dependency libraries.
                         include/coriolis2/hurricane/isobar
                                            # Where to install the include files.
                       )