Hi,

when using a SWIG-wrapped library we have to use the right binding 
(swigpyrun.h) for this version because the internal structure changes more or 
less completely for every minor release of SWIG.

And so far the SWIG-wrapped library doesn't seem to have a method to query by 
which SWIG version it was built.

Therefore I have implemented a way to read-in the generated .py file and get 
the version number from there. This (first) solution, however, failed for SWIG 
2.0.

Now this is fixed in FreeCAD 0.13 but you can easily backport this to 0.12.
http://free-cad.git.sourceforge.net/git/gitweb.cgi?p=free-cad/free-cad;a=blobdiff;f=src/Base/Interpreter.cpp;h=6e31a38103caf9735f074544dcf650b539d0a1ef;hp=a1bd56a9a139f22b6e7c85a23f787d170b0fbbb0;hb=0e7df97961dbd238094b9223efd217502fe1c747;hpb=10b0601c54ab3d70c11503a0a0ba909ecda99d3b

and

http://free-cad.git.sourceforge.net/git/gitweb.cgi?p=free-cad/free-cad;a=blobdiff;f=src/Base/Interpreter.cpp;h=0a8c4b9e8b6c69582d5ad07112d15eb71a8a01e8;hp=6e31a38103caf9735f074544dcf650b539d0a1ef;hb=1f690c0c817500159c078f2d91ee15a7ebda3cc9;hpb=06d708c86ea7bcf1078dca5799949260ed72d619

If for Debian only one SWIG version is used you can simplify the methods 
createSWIGPointerObj and convertSWIGPointerObj a lot.


PyObject* InterpreterSingleton::createSWIGPointerObj(const char* Module, const 
char* TypeName, void* Pointer, int own)
{
    int result = 0;
    PyObject* proxy=0;
    PyGILStateLocker locker;
#if (defined(HAVE_SWIG) && (HAVE_SWIG == 1))
    result = Swig_python::createSWIGPointerObj_T(TypeName, Pointer, &proxy, 
own);
#else
    result = -1; // indicates error
#endif

    if (result == 0)
        return proxy;

    // none of the SWIG's succeeded
    throw Base::Exception("No SWIG wrapped library loaded");
}


bool InterpreterSingleton::convertSWIGPointerObj(const char* Module, const 
char* TypeName, PyObject* obj, void** ptr, int flags)
{
    int result = 0;
    PyGILStateLocker locker;
#if (defined(HAVE_SWIG) && (HAVE_SWIG == 1))
        result = Swig_python::convertSWIGPointerObj_T(TypeName, obj, ptr, 
flags);
#else
        result = -1; // indicates error
#endif

    if (result == 0)
        return true;

    // none of the SWIG's succeeded
    throw Base::Exception("No SWIG wrapped library loaded");
}

However, I haven't tested this so far.

Cheers,
Werner
 
-- 
NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone!                          
        
Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to