Rewrite C extensions to also support Python 3
This commit is contained in:
parent
de7b362695
commit
284904b72c
|
@ -74,7 +74,11 @@ wxString* newWxStringFromPy( PyObject* src )
|
||||||
PyObject* uni_str = src;
|
PyObject* uni_str = src;
|
||||||
|
|
||||||
// if not an str or unicode, try to str(src)
|
// if not an str or unicode, try to str(src)
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
if( !PyBytes_Check( src ) && !PyUnicode_Check( src ) )
|
||||||
|
#else
|
||||||
if( !PyString_Check( src ) && !PyUnicode_Check( src ) )
|
if( !PyString_Check( src ) && !PyUnicode_Check( src ) )
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
obj = PyObject_Str( src );
|
obj = PyObject_Str( src );
|
||||||
must_unref_obj = true;
|
must_unref_obj = true;
|
||||||
|
@ -83,7 +87,11 @@ wxString* newWxStringFromPy( PyObject* src )
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
if( PyBytes_Check( obj ) )
|
||||||
|
#else
|
||||||
if( PyString_Check( obj ) )
|
if( PyString_Check( obj ) )
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
uni_str = PyUnicode_FromEncodedObject( obj, wxPythonEncoding, "strict" );
|
uni_str = PyUnicode_FromEncodedObject( obj, wxPythonEncoding, "strict" );
|
||||||
must_unref_str = true;
|
must_unref_str = true;
|
||||||
|
@ -97,8 +105,13 @@ wxString* newWxStringFromPy( PyObject* src )
|
||||||
|
|
||||||
if( len )
|
if( len )
|
||||||
{
|
{
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
PyUnicode_AsWideChar( uni_str,
|
||||||
|
wxStringBuffer( *result, len ), len );
|
||||||
|
#else
|
||||||
PyUnicode_AsWideChar( (PyUnicodeObject*) uni_str,
|
PyUnicode_AsWideChar( (PyUnicodeObject*) uni_str,
|
||||||
wxStringBuffer( *result, len ), len );
|
wxStringBuffer( *result, len ), len );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if( must_unref_str )
|
if( must_unref_str )
|
||||||
|
@ -122,7 +135,11 @@ wxString* newWxStringFromPy( PyObject* src )
|
||||||
if( PyErr_Occurred() )
|
if( PyErr_Occurred() )
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
else if( !PyBytes_Check( src ) )
|
||||||
|
#else
|
||||||
else if( !PyString_Check( src ) ) // if it's not a string, str(obj)
|
else if( !PyString_Check( src ) ) // if it's not a string, str(obj)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
str = PyObject_Str( src );
|
str = PyObject_Str( src );
|
||||||
must_unref_str = true;
|
must_unref_str = true;
|
||||||
|
|
|
@ -107,7 +107,11 @@ wxString PYTHON_ACTION_PLUGIN::CallRetStrMethod( const char* aMethod, PyObject*
|
||||||
|
|
||||||
if( result )
|
if( result )
|
||||||
{
|
{
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
const char* str_res = PyBytes_AS_STRING( result );
|
||||||
|
#else
|
||||||
const char* str_res = PyString_AsString( result );
|
const char* str_res = PyString_AsString( result );
|
||||||
|
#endif
|
||||||
ret = FROM_UTF8( str_res );
|
ret = FROM_UTF8( str_res );
|
||||||
Py_DECREF( result );
|
Py_DECREF( result );
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,7 +101,11 @@ wxString PYTHON_FOOTPRINT_WIZARD::CallRetStrMethod( const char* aMethod, PyObjec
|
||||||
|
|
||||||
if( result )
|
if( result )
|
||||||
{
|
{
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
const char* str_res = PyBytes_AS_STRING( result );
|
||||||
|
#else
|
||||||
const char* str_res = PyString_AsString( result );
|
const char* str_res = PyString_AsString( result );
|
||||||
|
#endif
|
||||||
ret = FROM_UTF8( str_res );
|
ret = FROM_UTF8( str_res );
|
||||||
Py_DECREF( result );
|
Py_DECREF( result );
|
||||||
}
|
}
|
||||||
|
@ -173,10 +177,17 @@ int PYTHON_FOOTPRINT_WIZARD::GetNumParameterPages()
|
||||||
|
|
||||||
if( result )
|
if( result )
|
||||||
{
|
{
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
if( !PyLong_Check( result ) )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
ret = PyLong_AsLong( result );
|
||||||
|
#else
|
||||||
if( !PyInt_Check( result ) )
|
if( !PyInt_Check( result ) )
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
ret = PyInt_AsLong( result );
|
ret = PyInt_AsLong( result );
|
||||||
|
#endif
|
||||||
Py_DECREF( result );
|
Py_DECREF( result );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,7 +208,11 @@ wxString PYTHON_FOOTPRINT_WIZARD::GetParameterPageName( int aPage )
|
||||||
|
|
||||||
if( result )
|
if( result )
|
||||||
{
|
{
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
const char* str_res = PyBytes_AS_STRING( result );
|
||||||
|
#else
|
||||||
const char* str_res = PyString_AsString( result );
|
const char* str_res = PyString_AsString( result );
|
||||||
|
#endif
|
||||||
ret = FROM_UTF8( str_res );
|
ret = FROM_UTF8( str_res );
|
||||||
Py_DECREF( result );
|
Py_DECREF( result );
|
||||||
}
|
}
|
||||||
|
@ -305,7 +320,11 @@ wxString PYTHON_FOOTPRINT_WIZARD::SetParameterValues( int aPage, wxArrayString&
|
||||||
for( int i = 0; i < len; i++ )
|
for( int i = 0; i < len; i++ )
|
||||||
{
|
{
|
||||||
wxString& str = aValues[i];
|
wxString& str = aValues[i];
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
PyObject* py_str = PyUnicode_FromString( (const char*) str.mb_str() );
|
||||||
|
#else
|
||||||
PyObject* py_str = PyString_FromString( (const char*) str.mb_str() );
|
PyObject* py_str = PyString_FromString( (const char*) str.mb_str() );
|
||||||
|
#endif
|
||||||
PyList_SetItem( py_list, i, py_str );
|
PyList_SetItem( py_list, i, py_str );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,9 +41,15 @@
|
||||||
|
|
||||||
/* init functions defined by swig */
|
/* init functions defined by swig */
|
||||||
|
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
extern "C" PyObject* init_kicad( void );
|
||||||
|
|
||||||
|
extern "C" PyObject* init_pcbnew( void );
|
||||||
|
#else
|
||||||
extern "C" void init_kicad( void );
|
extern "C" void init_kicad( void );
|
||||||
|
|
||||||
extern "C" void init_pcbnew( void );
|
extern "C" void init_pcbnew( void );
|
||||||
|
#endif
|
||||||
|
|
||||||
#define EXTRA_PYTHON_MODULES 10 // this is the number of python
|
#define EXTRA_PYTHON_MODULES 10 // this is the number of python
|
||||||
// modules that we want to add into the list
|
// modules that we want to add into the list
|
||||||
|
@ -67,7 +73,11 @@ bool IsWxPythonLoaded()
|
||||||
|
|
||||||
/* Add a name + initfuction to our SwigImportInittab */
|
/* Add a name + initfuction to our SwigImportInittab */
|
||||||
|
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
static void swigAddModule( const char* name, PyObject* (* initfunc)() )
|
||||||
|
#else
|
||||||
static void swigAddModule( const char* name, void (* initfunc)() )
|
static void swigAddModule( const char* name, void (* initfunc)() )
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
SwigImportInittab[SwigNumModules].name = (char*) name;
|
SwigImportInittab[SwigNumModules].name = (char*) name;
|
||||||
SwigImportInittab[SwigNumModules].initfunc = initfunc;
|
SwigImportInittab[SwigNumModules].initfunc = initfunc;
|
||||||
|
@ -236,7 +246,11 @@ static void pcbnewRunPythonMethodWithReturnedString( const char* aMethodName, wx
|
||||||
if( pobj )
|
if( pobj )
|
||||||
{
|
{
|
||||||
PyObject* str = PyDict_GetItemString(localDict, "result" );
|
PyObject* str = PyDict_GetItemString(localDict, "result" );
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
const char* str_res = str ? PyBytes_AS_STRING( str ) : 0;
|
||||||
|
#else
|
||||||
const char* str_res = str ? PyString_AsString( str ) : 0;
|
const char* str_res = str ? PyString_AsString( str ) : 0;
|
||||||
|
#endif
|
||||||
aNames = FROM_UTF8( str_res );
|
aNames = FROM_UTF8( str_res );
|
||||||
Py_DECREF( pobj );
|
Py_DECREF( pobj );
|
||||||
}
|
}
|
||||||
|
@ -386,7 +400,13 @@ wxArrayString PyArrayStringToWx( PyObject* aArrayString )
|
||||||
PyObject* element = PyList_GetItem( aArrayString, n );
|
PyObject* element = PyList_GetItem( aArrayString, n );
|
||||||
|
|
||||||
if( element )
|
if( element )
|
||||||
ret.Add( FROM_UTF8( PyString_AsString( element ) ), 1 );
|
{
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
ret.Add( FROM_UTF8( PyBytes_AS_STRING( element ) ), 1 );
|
||||||
|
#else
|
||||||
|
ret.Add( FROM_UTF8( PyString_AsString( element ) ), 1 );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -406,7 +426,11 @@ wxString PyErrStringWithTraceback()
|
||||||
|
|
||||||
PyErr_Fetch( &type, &value, &traceback );
|
PyErr_Fetch( &type, &value, &traceback );
|
||||||
|
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
PyObject* tracebackModuleString = PyUnicode_FromString( "traceback" );
|
||||||
|
#else
|
||||||
PyObject* tracebackModuleString = PyString_FromString( "traceback" );
|
PyObject* tracebackModuleString = PyString_FromString( "traceback" );
|
||||||
|
#endif
|
||||||
PyObject* tracebackModule = PyImport_Import( tracebackModuleString );
|
PyObject* tracebackModule = PyImport_Import( tracebackModuleString );
|
||||||
Py_DECREF( tracebackModuleString );
|
Py_DECREF( tracebackModuleString );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue