# Building an Extension Module

The build process for Boost is currently undergoing some evolution, and, it is to be hoped, improvement. The following facts may help:

Makefiles for various platforms and a Visual Studio project reside in the Boost subdirectory `libs/python/build`. Build targets include:

- The `boost_python` library for static linking with your extension module. On the various Unices, this library will be called `libboost_python.a`. When using Visual C++, the library will be called `boost_python.lib`.

- A comprehensive test of Boost.Python features. This test builds a Boost.Python extension module, then runs Python to import the module, and runs a series of tests on it using `doctest`. Source code for the module and tests is available in the Boost subdirectory `libs/python/test`.

- Various examples from the Boost subdirectory `libs/python/example`. All these examples include a doctest modeled on the comprehensive test above.

There is a group of makefiles with support for simultaneous compilation on multiple platforms and a consistent set of features that build the `boost_python` library for static linking, the comprehensive test, and all examples in `libs/python/example`:

- vc60.mak: Visual C++ 6.0 Service Pack 4
- mingw32.mak: mingw32 (Win32-targeted) gcc 2.95.2
- linux_gcc.mak: gcc 2.95.2 on Linux/Unix
- tru64_cxx.mak: Compaq Alpha using the Compaq cxx compiler
- irix_CC.mak: Silicon Graphics IRIX 6.5 CC compiler

Usage of these makefiles is described here.

There is another group of makefiles for GNU make. These makefiles are less redundant than the makefiles in the group above, but the list of compilation targets is not as complete and there is no support for simultaneous compilation on multiple platforms.

- como.mak: Comeau C++ on Linux
- gcc.mak: GCC on Linux/Unix.

A project workspace for Microsoft Visual Studio is provided at `libs/python/build/build.dsw`. The include paths for this project may need to be changed for your installation. They currently assume that python has been installed at `c:\tools\python`. Three configurations of all targets are supported:

- Release (optimization, `-DNDEBUG`)
- Debug (no optimization `-D_DEBUG`)
- DebugPython (no optimization, `-D_DEBUG -DBOOST_DEBUG_PYTHON`)

When extension modules are built with Visual C++ using `-D_DEBUG`, Python defaults to force linking with a special debugging version of the Python DLL. Since this debug DLL isn't supplied with the default Python installation for Windows, Boost.Python uses `boost/python/detail/wrap_python.hpp` to temporarily undefine `_DEBUG` when `Python.h` is `#include`d.

If you want the extra runtime checks available with the debugging version of the library, `#define BOOST_DEBUG_PYTHON` to re-enable library forcing, and link with the DebugPython version of `boost_python.lib`. You'll need to get the debugging version of the Python executable (`python_d.exe`) and DLL (`python20_d.dll` or `python15_d.dll`). The Python sources include project files for building these. If you download them, change the name of the top-level directory to `src`, and install it under `c:\tools\python`, the workspace supplied by Boost.Python will be able to use it without modification. Just open `c:\tools\python\src\pcbuild\pcbuild.dsw` and invoke "build all" to generate all the debugging targets.

If you do not `#define BOOST_DEBUG_PYTHON`, be sure that any source files `#include <boost/python/detail/wrap_python.hpp>` instead of the usual `Python.h`, or you will have link incompatibilities.

If your platform isn't directly supported, you can build a static library from the following source files (in the Boost subdirectory `libs/python/src`), or compile them directly and link the resulting objects into your extension module:

- classes.cpp
- conversions.cpp
- cross_module.cpp
- extension_class.cpp
- functions.cpp
- init_function.cpp
- module_builder.cpp
- objects.cpp
- types.cpp

Next: Wrapping Enums Previous: A Peek Under the Hood Up: Top

© Copyright David Abrahams 2000. Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided ``as is'' without express or implied warranty, and with no claim as to its suitability for any purpose.

Updated: Apr 17, 2001 (R.W. Grosse-Kunstleve)