===========================================
Python/C++ Bob Extension Building Support
===========================================
This package provides a ``pkg-config`` bridge for Python/C++ extensions for
`Bob `_. You use this package by including it
in the ``setup_requires`` field of your ``setup.py`` file.
Building with ``zc.buildout`` is possible using the ``develop`` recipe in
`xbob.buildout `_. Follow the
instructions described on that package for this recipe.
Preparing for C++ Compilation
-----------------------------
Creating C++/Python bindings should be trivial. Firstly, edit your ``setup.py``
so that you include the following::
from xbob.extension import Extension
...
setup(
name="xbob.myext",
version="1.0.0",
...
setup_requires=[
'xbob.extension',
],
...
ext_modules=[
Extension("xbob.myext._myext",
[
"xbob/myext/ext/file1.cpp",
"xbob/myext/ext/file2.cpp",
"xbob/myext/ext/main.cpp",
],
pkgconfig = [ #bob modules you depend on
'bob-math',
'bob-sp',
],
include_dirs = [ #optionally, include directories
"xbob/myext/ext/headers/",
],
),
... #add more extensions if you wish
],
...
)
These modifications will allow you to compile extensions that are linked
against the named ``pkg-config`` modules. You can specify the modules of
Bob you want to link against. You **don't** have to specify ``bob-python``,
which is automatically added. Furthermore, you can specify any ``pkg-config``
module and that will be linked in (for example, ``opencv``). Other modules and
options can be set manually using `the standard options for python extensions
`_. To hook-in the building
on the package through ``zc.buildout``, add the following section to your
``buildout.cfg``::
[xbob.myext]
recipe = xbob.buildout:develop
If you need to build multiple eggs, you will need **one entry per project** on
your ``buildout.cfg``. This includes, possibly, dependent projects. Currently,
``zc.buildout`` ignores the ``setup_requires`` entry on your ``setup.py`` file.
The recipe above creates a new interpreter that hooks that package in and
builds the project considering variables like ``prefixes`` into consideration.