Copyright (C) 2000-2012 |
GNU Info (python2.1-dist.info)Preprocessor optionsPreprocessor options -------------------- Three optional arguments to `Extension' will help if you need to specify include directories to search or preprocessor macros to define/undefine: `include_dirs', `define_macros', and `undef_macros'. For example, if your extension requires header files in the `include' directory under your distribution root, use the `include_dirs' option: Extension("foo", ["foo.c"], include_dirs=["include"]) You can specify absolute directories there; if you know that your extension will only be built on UNIX systems with X11R6 installed to `/usr', you can get away with Extension("foo", ["foo.c"], include_dirs=["/usr/include/X11"]) You should avoid this sort of non-portable usage if you plan to distribute your code: it's probably better to write your code to include (e.g.) `<X11/Xlib.h>'. If you need to include header files from some other Python extension, you can take advantage of the fact that the Distutils install extension header files in a consistent way. For example, the Numerical Python header files are installed (on a standard UNIX installation) to `/usr/local/include/python1.5/Numerical'. (The exact location will differ according to your platform and Python installation.) Since the Python include directory--`/usr/local/include/python1.5' in this case--is always included in the search path when building Python extensions, the best approach is to include (e.g.) `<Numerical/arrayobject.h>'. If you insist on putting the `Numerical' include directory right into your header search path, though, you can find that directory using the Distutils `sysconfig' module: from distutils.sysconfig import get_python_inc incdir = os.path.join(get_python_inc(plat_specific=1), "Numerical") setup(..., Extension(..., include_dirs=[incdir])) Even though this is quite portable--it will work on any Python installation, regardless of platform--it's probably easier to just write your C code in the sensible way. You can define and undefine pre-processor macros with the `define_macros' and `undef_macros' options. `define_macros' takes a list of `(name, value)' tuples, where `name' is the name of the macro to define (a string) and `value' is its value: either a string or `None'. (Defining a macro `FOO' to `None' is the equivalent of a bare `#define FOO' in your C source: with most compilers, this sets `FOO' to the string `1'.) `undef_macros' is just a list of macros to undefine. For example: Extension(..., define_macros=[('NDEBUG', '1')], ('HAVE_STRFTIME', None), undef_macros=['HAVE_FOO', 'HAVE_BAR']) is the equivalent of having this at the top of every C source file: #define NDEBUG 1 #define HAVE_STRFTIME #undef HAVE_FOO #undef HAVE_BAR automatically generated by info2www version 1.2.2.9 |