[PyKDE] How to add handwritten *.cpp files to a sip generated module with configure.py

Ulrich Berning ulrich.berning at t-online.de
Mon Feb 2 00:16:01 GMT 2004


Gerard Vermeulen schrieb:

>Hi Phil,
>
>Ulrich Berning kindly provided me with code to build PyQwt with configure.py.
>
>One of his changes was to put a few handwritten *.cpp files to interface
>the Numerical Python extension modules (numpy and numarray) in the qwtmod.sip
>file.
>
>The problem is that there are conflicts between the header files of numpy and
>numarray (numarray should become the successor of numpy, so there is an
>overlap in their API). Putting all the interface code in the qwtmod.sip file
>leads to compile errors because of the inclusion of the conflicting headers in
>the same .cpp file. 
>
>Ulli did not see it, because he is only having numpy, I guess.
>
>  
>
Yes, this is true. I can't see why I should have numpy AND numarray. 
Because numarry will be the successor of numpy someday, but currently it 
is not, I choosed to stay with numpy. The only reason to support numpy 
AND numeric could be to provide a binary module that works either with 
numpy or with numarray or with none of them. But then, the interface 
code needs some modifactions. You have to find out in the init function 
if numpy or numarray or none of both is available. Simply calling 
import_array() and/or import_libnumarray() does not work. If you call 
import_libnumarray() when nummarray is not installed you get a 
Py_FatalError().

And at least, if I take a look at Numeric/arrayobject.h and 
numarray/arrayobject.h, I can see the following:

in Numeric/arrayobject.h:
#ifndef Py_ARRAYOBJECT_H
#define Py_ARRAYOBJECT_H

in numarray/arrayobject.h:
#ifdef Py_ARRAYOBJECT_H
#error "Can't use numarray Numeric compatability *and* Numeric in same 
module"
#endif

My recommendation is, either numpy is used, if it is there OR numarray 
if it is there OR none of them. Using the numpy API AND the numarray API 
in the same module may work, but was not intended by the Numerical 
Python Group and seems to be dangerous.

>I can think of several solutions to add extra files to a sip module:
>
>(1) put those interface files in a static library that is to be linked to
>    the PyQwt extension module. I think it is a bit tedious and fear
>    that linking a static lib to the extension has a tiny chance of causing
>    problems.
>
>(2) add the extra sources to the .sbf file before it is being used by the
>    Makefile.__init__() function (this is what I did, but it is hackish)
>
>(3) Add an extra argument "extra_sbf = {}' to the Makefile.__init__()
>    function to pass something like:
>    extra_sbf = { 'sources' : 's1.cpp s2.cpp', 'moc_headers': 'm1.h m2.h' }
>
>I prefer (3) and am willing to send a patch. Or do you have another suggestion?
>
>Gerard
>
>_______________________________________________
>PyKDE mailing list    PyKDE at mats.imk.fraunhofer.de
>http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
>
>  
>





More information about the PyQt mailing list