Python/C++ Bob Extension Building Support
This package provides a simple mechanims for building Python/C++ extensions for
Bob. You use this package by including
it in 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 setuptools import dist
dist.Distribution(dict(setup_requires=['xbob.extension']))
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",
],
packages = [ #pkg-config modules to append
'blitz>=0.10',
'bob-core',
],
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. 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
verbose = true ;enables command-line verbosity
debug = true ;compiles the module in debug mode
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.
Python API to pkg-config
This package alson contains a set of Pythonic bindings to the popular pkg-config configuration utility. It allows distutils-based setup files to query for libraries installed on the current system through that command line utility. library.
Using at your setup.py
To use this package at your setup.py
file, you will need to let distutils
know it needs it before importing it. You can achieve this with the following
trick:
from setuptools import dist
dist.Distribution(dict(setup_requires='xbob.extension'))
from xbob.extension.pkgconfig import pkgconfig
Note
In this case, distutils should automatically download and install this package on the environment it is required to setup other package.
After inclusion, you can just instantiate an object of type pkgconfig
:
>>> zlib = pkgconfig('zlib')
>>> zlib.version # doctest: SKIP
1.2.8
>>> zlib.include_directories() # doctest: SKIP
['/usr/include']
>>> zlib.library_dirs # doctest: SKIP
['/usr/lib']
>>> zlib > '1.2.6'
True
>>> zlib > '1.2.10'
False