Skip to content
Snippets Groups Projects
Select Git revision
  • 372c240ba13af224c822ff5e55e38b68703d69e5
  • master default protected
  • test-new-bob-devel
  • v7.0.5
  • v7.0.4
  • v7.0.3
  • v7.0.2
  • v7.0.1
  • v7.0.0
  • v6.1.1
  • v6.1.0
  • v6.0.0
  • v5.0.2b0
  • v5.0.1
  • v5.0.0
  • v4.0.0
  • v3.2.0
  • v3.1.2
  • v3.1.1
  • v3.1.0
  • v3.0.0
  • v2.5.0
  • v2.4.5
23 results

bob.extension

user avatar
Andre Anjos authored
372c240b
History

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